mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
rpl: check should go after defaults and vcols update
This commit is contained in:
committed by
Sergei Golubchik
parent
aa1a2507f5
commit
da5df33927
@ -864,9 +864,11 @@ insert t1 values (1),(2),(3),(4);
|
|||||||
set debug_sync= 'now wait_for downgraded';
|
set debug_sync= 'now wait_for downgraded';
|
||||||
connection con2;
|
connection con2;
|
||||||
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
||||||
alter table t1 add b int default(a+10), algorithm=copy, lock=none;
|
alter table t1 add b int default(a), algorithm=copy, lock=none;
|
||||||
connection default;
|
connection default;
|
||||||
update t1 set a=a+10 where a > 2;
|
update t1 set a=a+10 where a > 2;
|
||||||
|
insert t1 values(5);
|
||||||
|
update t1 set a=a+10 where a = 5;
|
||||||
set debug_sync= 'now signal goforit';
|
set debug_sync= 'now signal goforit';
|
||||||
connection con2;
|
connection con2;
|
||||||
connection default;
|
connection default;
|
||||||
@ -874,14 +876,45 @@ show create table t1;
|
|||||||
Table Create Table
|
Table Create Table
|
||||||
t1 CREATE TABLE `t1` (
|
t1 CREATE TABLE `t1` (
|
||||||
`a` int(11) DEFAULT NULL,
|
`a` int(11) DEFAULT NULL,
|
||||||
`b` int(11) DEFAULT (`a` + 10)
|
`b` int(11) DEFAULT `a`
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
select * from t1;
|
select * from t1;
|
||||||
a b
|
a b
|
||||||
1 11
|
1 1
|
||||||
2 12
|
2 2
|
||||||
13 23
|
13 13
|
||||||
14 24
|
14 14
|
||||||
|
15 15
|
||||||
|
drop table t1;
|
||||||
|
set debug_sync= 'reset';
|
||||||
|
## VCOL + CHECK
|
||||||
|
create table t1 (a int) engine=innodb;
|
||||||
|
insert t1 values (1),(2),(3),(4);
|
||||||
|
set debug_sync= 'now wait_for downgraded';
|
||||||
|
connection con2;
|
||||||
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
||||||
|
alter table t1 add b int as (a), add check(b=a), algorithm=copy, lock=none;
|
||||||
|
connection default;
|
||||||
|
update t1 set a=a+10 where a > 2;
|
||||||
|
insert t1 values(5);
|
||||||
|
update t1 set a=a+10 where a = 5;
|
||||||
|
set debug_sync= 'now signal goforit';
|
||||||
|
connection con2;
|
||||||
|
connection default;
|
||||||
|
show create table t1;
|
||||||
|
Table Create Table
|
||||||
|
t1 CREATE TABLE `t1` (
|
||||||
|
`a` int(11) DEFAULT NULL,
|
||||||
|
`b` int(11) GENERATED ALWAYS AS (`a`) VIRTUAL,
|
||||||
|
CONSTRAINT `CONSTRAINT_1` CHECK (`b` = `a`)
|
||||||
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_swedish_ci
|
||||||
|
select * from t1;
|
||||||
|
a b
|
||||||
|
1 1
|
||||||
|
2 2
|
||||||
|
13 13
|
||||||
|
14 14
|
||||||
|
15 15
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set debug_sync= 'reset';
|
set debug_sync= 'reset';
|
||||||
#
|
#
|
||||||
|
@ -1021,10 +1021,35 @@ insert t1 values (1),(2),(3),(4);
|
|||||||
--send set debug_sync= 'now wait_for downgraded'
|
--send set debug_sync= 'now wait_for downgraded'
|
||||||
--connection con2
|
--connection con2
|
||||||
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
||||||
--send alter table t1 add b int default(a+10), algorithm=copy, lock=none
|
--send alter table t1 add b int default(a), algorithm=copy, lock=none
|
||||||
--connection default
|
--connection default
|
||||||
--reap
|
--reap
|
||||||
update t1 set a=a+10 where a > 2;
|
update t1 set a=a+10 where a > 2;
|
||||||
|
insert t1 values(5);
|
||||||
|
update t1 set a=a+10 where a = 5;
|
||||||
|
|
||||||
|
set debug_sync= 'now signal goforit';
|
||||||
|
--connection con2
|
||||||
|
--reap
|
||||||
|
--connection default
|
||||||
|
show create table t1;
|
||||||
|
select * from t1;
|
||||||
|
drop table t1;
|
||||||
|
set debug_sync= 'reset';
|
||||||
|
|
||||||
|
--echo ## VCOL + CHECK
|
||||||
|
create table t1 (a int) engine=innodb;
|
||||||
|
insert t1 values (1),(2),(3),(4);
|
||||||
|
--send set debug_sync= 'now wait_for downgraded'
|
||||||
|
--connection con2
|
||||||
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
||||||
|
--send alter table t1 add b int as (a), add check(b=a), algorithm=copy, lock=none
|
||||||
|
--connection default
|
||||||
|
--reap
|
||||||
|
update t1 set a=a+10 where a > 2;
|
||||||
|
insert t1 values(5);
|
||||||
|
update t1 set a=a+10 where a = 5;
|
||||||
|
|
||||||
set debug_sync= 'now signal goforit';
|
set debug_sync= 'now signal goforit';
|
||||||
--connection con2
|
--connection con2
|
||||||
--reap
|
--reap
|
||||||
|
@ -387,12 +387,6 @@ int unpack_row(rpl_group_info *rgi, TABLE *table, uint const colcnt,
|
|||||||
{
|
{
|
||||||
copy->do_copy(copy);
|
copy->do_copy(copy);
|
||||||
}
|
}
|
||||||
/* we only check constraints for ALTER TABLE */
|
|
||||||
DBUG_ASSERT(table->in_use->lex->ignore == FALSE);
|
|
||||||
error= table->verify_constraints(false);
|
|
||||||
DBUG_ASSERT(error != VIEW_CHECK_SKIP);
|
|
||||||
if (error)
|
|
||||||
DBUG_RETURN(HA_ERR_GENERIC);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (table->default_field)
|
if (table->default_field)
|
||||||
@ -408,6 +402,16 @@ int unpack_row(rpl_group_info *rgi, TABLE *table, uint const colcnt,
|
|||||||
DBUG_RETURN(error);
|
DBUG_RETURN(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (rpl_data.is_online_alter())
|
||||||
|
{
|
||||||
|
/* we only check constraints for ALTER TABLE */
|
||||||
|
DBUG_ASSERT(table->in_use->lex->ignore == FALSE);
|
||||||
|
error = table->verify_constraints(false);
|
||||||
|
DBUG_ASSERT(error != VIEW_CHECK_SKIP);
|
||||||
|
if (error)
|
||||||
|
DBUG_RETURN(HA_ERR_GENERIC);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
throw away master's extra fields
|
throw away master's extra fields
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user