mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-16234 CREATE TABLE .. SELECT LASTVAL breaks replication
Fixed by marking NEXTVAL() and LASTVAL() to be replicated row based
This commit is contained in:
35
mysql-test/suite/sql_sequence/replication_mixed.result
Normal file
35
mysql-test/suite/sql_sequence/replication_mixed.result
Normal file
@ -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
|
27
mysql-test/suite/sql_sequence/replication_mixed.test
Normal file
27
mysql-test/suite/sql_sequence/replication_mixed.test
Normal file
@ -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
|
@ -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);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user