Commit da5df339 authored by Nikita Malyavin's avatar Nikita Malyavin Committed by Sergei Golubchik

rpl: check should go after defaults and vcols update

parent aa1a2507
...@@ -864,9 +864,11 @@ insert t1 values (1),(2),(3),(4); ...@@ -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; ...@@ -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); ...@@ -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
--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';
--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 --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'; 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, ...@@ -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, ...@@ -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
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment