diff --git a/mysql-test/suite/rpl/r/rpl_update.result b/mysql-test/suite/rpl/r/rpl_update.result new file mode 100644 index 0000000000000..31bc50a78ded1 --- /dev/null +++ b/mysql-test/suite/rpl/r/rpl_update.result @@ -0,0 +1,16 @@ +include/master-slave.inc +[connection master] +set sql_mode=simultaneous_assignment; +create table t1 (a int, b int); +insert into t1 values(1, 2); +update t1 set a=b, b=a; +select * from t1; +a b +2 1 +connection slave; +select * from t1; +a b +2 1 +connection master; +drop table t1; +include/rpl_end.inc diff --git a/mysql-test/suite/rpl/t/rpl_update.test b/mysql-test/suite/rpl/t/rpl_update.test new file mode 100644 index 0000000000000..b38078770a58a --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_update.test @@ -0,0 +1,15 @@ +source include/master-slave.inc; + +# +# MDEV-13417 UPDATE produces wrong values if an updated column is later used as an update source +# +set sql_mode=simultaneous_assignment; +create table t1 (a int, b int); +insert into t1 values(1, 2); +update t1 set a=b, b=a; +select * from t1; +sync_slave_with_master; +select * from t1; +connection master; +drop table t1; +source include/rpl_end.inc; diff --git a/sql/log_event.cc b/sql/log_event.cc index 7f85e95376544..113d6f352eae1 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -5438,7 +5438,7 @@ int Query_log_event::do_apply_event(rpl_group_info *rgi, if (sql_mode_inited) thd->variables.sql_mode= (sql_mode_t) ((thd->variables.sql_mode & MODE_NO_DIR_IN_CREATE) | - (sql_mode & ~(ulong) MODE_NO_DIR_IN_CREATE)); + (sql_mode & ~(sql_mode_t) MODE_NO_DIR_IN_CREATE)); if (charset_inited) { rpl_sql_thread_info *sql_info= thd->system_thread_info.rpl_sql_info;