mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Do not ignore sql_mode when replicating
Division by zero is a good example. sql_mode is basically ignored by replication, see Bug#56662. The behavior for ONLINE should remain the same as for non-ONLINE ALTER.
This commit is contained in:
committed by
Sergei Golubchik
parent
bdbd357362
commit
b0db7239b1
@ -626,6 +626,7 @@ a
|
|||||||
3
|
3
|
||||||
NULL
|
NULL
|
||||||
NULL
|
NULL
|
||||||
|
set sql_mode=default;
|
||||||
connection default;
|
connection default;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set debug_sync= reset;
|
set debug_sync= reset;
|
||||||
@ -707,5 +708,24 @@ connection default;
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
set debug_sync= reset;
|
set debug_sync= reset;
|
||||||
#
|
#
|
||||||
|
# Do not ignore sql_mode when replicating
|
||||||
|
#
|
||||||
|
create table t1 (a int);
|
||||||
|
insert into t1 values (1);
|
||||||
|
set debug_sync= 'now wait_for downgraded';
|
||||||
|
connection con2;
|
||||||
|
set sql_mode='STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO';
|
||||||
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
||||||
|
alter table t1 add b int as (1/a) stored, algorithm=copy, lock=none;
|
||||||
|
connection default;
|
||||||
|
update t1 set a= 0 where a=1;
|
||||||
|
set debug_sync= 'now signal goforit';
|
||||||
|
connection con2;
|
||||||
|
ERROR 22012: Division by 0
|
||||||
|
set sql_mode= default;
|
||||||
|
connection default;
|
||||||
|
drop table t1;
|
||||||
|
set debug_sync= reset;
|
||||||
|
#
|
||||||
# End of 11.2 tests
|
# End of 11.2 tests
|
||||||
#
|
#
|
||||||
|
@ -772,6 +772,7 @@ set debug_sync= 'now signal goforit';
|
|||||||
--reap
|
--reap
|
||||||
show create table t1;
|
show create table t1;
|
||||||
select * from t1;
|
select * from t1;
|
||||||
|
set sql_mode=default;
|
||||||
--connection default
|
--connection default
|
||||||
drop table t1;
|
drop table t1;
|
||||||
set debug_sync= reset;
|
set debug_sync= reset;
|
||||||
@ -874,6 +875,33 @@ show create table t1;
|
|||||||
drop table t1;
|
drop table t1;
|
||||||
set debug_sync= reset;
|
set debug_sync= reset;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Do not ignore sql_mode when replicating
|
||||||
|
--echo #
|
||||||
|
create table t1 (a int);
|
||||||
|
insert into t1 values (1);
|
||||||
|
|
||||||
|
--send set debug_sync= 'now wait_for downgraded'
|
||||||
|
|
||||||
|
--connection con2
|
||||||
|
set sql_mode='STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO';
|
||||||
|
set debug_sync= 'alter_table_online_downgraded signal downgraded wait_for goforit';
|
||||||
|
--send alter table t1 add b int as (1/a) stored, algorithm=copy, lock=none
|
||||||
|
|
||||||
|
--connection default
|
||||||
|
--reap
|
||||||
|
update t1 set a= 0 where a=1;
|
||||||
|
set debug_sync= 'now signal goforit';
|
||||||
|
|
||||||
|
--connection con2
|
||||||
|
--error ER_DIVISION_BY_ZERO
|
||||||
|
--reap
|
||||||
|
|
||||||
|
set sql_mode= default;
|
||||||
|
--connection default
|
||||||
|
drop table t1;
|
||||||
|
set debug_sync= reset;
|
||||||
|
|
||||||
--echo #
|
--echo #
|
||||||
--echo # End of 11.2 tests
|
--echo # End of 11.2 tests
|
||||||
--echo #
|
--echo #
|
||||||
|
@ -5118,9 +5118,12 @@ int Rows_log_event::do_apply_event(rpl_group_info *rgi)
|
|||||||
extra columns on the slave. In that case, do not force
|
extra columns on the slave. In that case, do not force
|
||||||
MODE_NO_AUTO_VALUE_ON_ZERO.
|
MODE_NO_AUTO_VALUE_ON_ZERO.
|
||||||
*/
|
*/
|
||||||
|
Rpl_table_data rpl_data{};
|
||||||
|
if (rgi) rgi->get_table_data(table, &rpl_data);
|
||||||
sql_mode_t saved_sql_mode= thd->variables.sql_mode;
|
sql_mode_t saved_sql_mode= thd->variables.sql_mode;
|
||||||
if (!is_auto_inc_in_extra_columns())
|
if (!is_auto_inc_in_extra_columns())
|
||||||
thd->variables.sql_mode= MODE_NO_AUTO_VALUE_ON_ZERO;
|
thd->variables.sql_mode= (rpl_data.copy_fields ? saved_sql_mode : 0)
|
||||||
|
| MODE_NO_AUTO_VALUE_ON_ZERO;
|
||||||
|
|
||||||
// row processing loop
|
// row processing loop
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user