diff --git a/mysql-test/suite/sql_sequence/replication_mixed.result b/mysql-test/suite/sql_sequence/replication_mixed.result new file mode 100644 index 00000000000..f581d59fc30 --- /dev/null +++ b/mysql-test/suite/sql_sequence/replication_mixed.result @@ -0,0 +1,35 @@ +include/master-slave.inc +[connection master] +# +# MDEV-16234 +# CREATE TABLE .. SELECT LASTVAL is written to binlog as single +# statement, causes discrepancy between master and slave +# +CREATE SEQUENCE s1 ENGINE=InnoDB; +SELECT NEXTVAL(s1); +NEXTVAL(s1) +1 +CREATE TABLE t1 ENGINE=InnoDB SELECT LASTVAL(s1) AS a; +INSERT INTO t1 VALUES (NEXTVAL(s1)); +INSERT INTO t1 VALUES (LASTVAL(s1)); +SELECT * FROM t1; +a +1 +2 +2 +SELECT * from s1; +next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count +1001 1 9223372036854775806 1 1 1000 0 0 +connection slave; +SELECT * FROM t1; +a +1 +2 +2 +SELECT * from s1; +next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count +1001 1 9223372036854775806 1 1 1000 0 0 +connection master; +DROP TABLE t1; +DROP SEQUENCE s1; +include/rpl_end.inc diff --git a/mysql-test/suite/sql_sequence/replication_mixed.test b/mysql-test/suite/sql_sequence/replication_mixed.test new file mode 100644 index 00000000000..0096ab5acd8 --- /dev/null +++ b/mysql-test/suite/sql_sequence/replication_mixed.test @@ -0,0 +1,27 @@ +--source include/have_innodb.inc +--source include/have_binlog_format_mixed.inc +--source include/master-slave.inc + +--echo # +--echo # MDEV-16234 +--echo # CREATE TABLE .. SELECT LASTVAL is written to binlog as single +--echo # statement, causes discrepancy between master and slave +--echo # + +CREATE SEQUENCE s1 ENGINE=InnoDB; +SELECT NEXTVAL(s1); +CREATE TABLE t1 ENGINE=InnoDB SELECT LASTVAL(s1) AS a; +INSERT INTO t1 VALUES (NEXTVAL(s1)); +INSERT INTO t1 VALUES (LASTVAL(s1)); +SELECT * FROM t1; +SELECT * from s1; +--sync_slave_with_master +SELECT * FROM t1; +SELECT * from s1; + +# Cleanup +--connection master +DROP TABLE t1; +DROP SEQUENCE s1; + +--source include/rpl_end.inc diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc index 47557d562a8..db7e8e09be4 100644 --- a/sql/sql_lex.cc +++ b/sql/sql_lex.cc @@ -6791,6 +6791,7 @@ Item *LEX::create_item_func_nextval(THD *thd, Table_ident *table_ident) TL_WRITE_ALLOW_WRITE, MDL_SHARED_WRITE)))) return NULL; + thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); return new (thd->mem_root) Item_func_nextval(thd, table); } @@ -6803,6 +6804,7 @@ Item *LEX::create_item_func_lastval(THD *thd, Table_ident *table_ident) TL_READ, MDL_SHARED_READ)))) return NULL; + thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION); return new (thd->mem_root) Item_func_lastval(thd, table); }