mirror of
https://github.com/MariaDB/server.git
synced 2025-01-22 23:04:20 +01:00
6dfb184f09
binlog_format=mixed Statement-based replication of DELETE ... LIMIT, UPDATE ... LIMIT, INSERT ... SELECT ... LIMIT is not safe as order of rows is not defined. With this fix, we issue a warning that this statement is not safe to replicate in statement mode, or go to row-based mode in mixed mode. Note that we may consider a statement as safe if ORDER BY primary_key is present. However it may confuse users to see very similiar statements replicated differently. Note 2: regular UPDATE statement (w/o LIMIT) is unsafe as well, but this patch doesn't address this issue. See comment from Kristian posted 18 Mar 10:55.
38 lines
982 B
Text
38 lines
982 B
Text
# Test to check that a warning is generated for unsafe statements
|
|
# executed under statement mode logging.
|
|
|
|
source include/have_log_bin.inc;
|
|
|
|
SET BINLOG_FORMAT=STATEMENT;
|
|
|
|
CREATE TABLE t1 (a CHAR(40));
|
|
CREATE TABLE t2 (a INT AUTO_INCREMENT PRIMARY KEY);
|
|
CREATE TABLE t3 (b INT AUTO_INCREMENT PRIMARY KEY);
|
|
CREATE VIEW v1(a,b) AS SELECT a,b FROM t2,t3;
|
|
|
|
INSERT INTO t1 SELECT UUID();
|
|
query_vertical SHOW WARNINGS;
|
|
|
|
DROP TABLE t1,t2,t3;
|
|
|
|
#
|
|
# BUG#34768 - nondeterministic INSERT using LIMIT logged in stmt mode if
|
|
# binlog_format=mixed
|
|
#
|
|
CREATE TABLE t1(a INT, b INT, KEY(a), PRIMARY KEY(b));
|
|
INSERT INTO t1 SELECT * FROM t1 LIMIT 1;
|
|
REPLACE INTO t1 SELECT * FROM t1 LIMIT 1;
|
|
UPDATE t1 SET a=1 LIMIT 1;
|
|
DELETE FROM t1 LIMIT 1;
|
|
delimiter |;
|
|
CREATE PROCEDURE p1()
|
|
BEGIN
|
|
INSERT INTO t1 SELECT * FROM t1 LIMIT 1;
|
|
REPLACE INTO t1 SELECT * FROM t1 LIMIT 1;
|
|
UPDATE t1 SET a=1 LIMIT 1;
|
|
DELETE FROM t1 LIMIT 1;
|
|
END|
|
|
delimiter ;|
|
|
CALL p1();
|
|
DROP PROCEDURE p1;
|
|
DROP TABLE t1;
|