summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergei Golubchik <serg@mariadb.org>2018-01-29 17:07:45 +0100
committerSergei Golubchik <serg@mariadb.org>2018-02-12 13:14:23 +0100
commit711f3dd7f5ba2f21fd4f0a42b4bf9fa811d043cf (patch)
tree2746d8b5495222406034e3b3dd8d7fa8395ca65c
parentd943d7f712a48073f0e3936b19557a1762e9f5a8 (diff)
downloadmariadb-git-711f3dd7f5ba2f21fd4f0a42b4bf9fa811d043cf.tar.gz
MDEV-13417 UPDATE produces wrong values if an updated column is later used as an update source
replication tests
-rw-r--r--mysql-test/suite/rpl/r/rpl_update.result16
-rw-r--r--mysql-test/suite/rpl/t/rpl_update.test15
-rw-r--r--sql/log_event.cc2
3 files changed, 32 insertions, 1 deletions
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 00000000000..31bc50a78de
--- /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 00000000000..b38078770a5
--- /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 7f85e953765..113d6f352ea 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;