Skip to content
/ server Public
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions mysql-test/suite/rpl/r/rpl_sequential_table_id.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
include/master-slave.inc
[connection master]
connection master;
SET @saved_sequential= @@session.binlog_sequential_table_ids;
SET @@session.binlog_sequential_table_ids= ON;
#
# Test 1: Single table INSERT — table_id should be 1
#
CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(100)) ENGINE=InnoDB;
INSERT INTO t1 VALUES (1, 'hello');
Table_map event: table_id: 1 (test.t1)
connection slave;
connection slave;
SELECT * FROM t1;
a b
1 hello
#
# Test 2: Multi-table transaction (separate statements) — each resets to 1
#
connection master;
CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
CREATE TABLE t3 (a INT PRIMARY KEY) ENGINE=InnoDB;
BEGIN;
INSERT INTO t1 VALUES (2, 'world');
INSERT INTO t2 VALUES (1);
INSERT INTO t3 VALUES (1);
COMMIT;
connection slave;
connection slave;
SELECT * FROM t1 ORDER BY a;
a b
1 hello
2 world
SELECT * FROM t2;
a
1
SELECT * FROM t3;
a
1
#
# Test 3: Multi-table single statement (UPDATE t1, t2) — IDs 1, 2
#
connection master;
INSERT INTO t2 VALUES (10);
UPDATE t1, t2 SET t1.b= 'updated', t2.a= 20
WHERE t1.a= 1 AND t2.a= 10;
connection slave;
connection slave;
SELECT * FROM t1 WHERE a= 1;
a b
1 updated
SELECT * FROM t2 WHERE a= 20;
a
20
#
# Test 4: Cross-database multi-table statement
#
connection master;
CREATE DATABASE IF NOT EXISTS db2;
CREATE TABLE db2.t4 (x INT PRIMARY KEY, y VARCHAR(50)) ENGINE=InnoDB;
INSERT INTO db2.t4 VALUES (1, 'original');
UPDATE t1, db2.t4 SET t1.b= 'cross-db', db2.t4.y= 'cross-db'
WHERE t1.a= 1 AND db2.t4.x= 1;
connection slave;
connection slave;
SELECT * FROM t1 WHERE a= 1;
a b
1 cross-db
SELECT * FROM db2.t4 WHERE x= 1;
x y
1 cross-db
#
# Test 5: Multiple statements in transaction, verify slave correctness
#
connection master;
BEGIN;
INSERT INTO t1 VALUES (3, 'foo');
UPDATE t2 SET a= 2 WHERE a= 20;
DELETE FROM t3 WHERE a= 1;
COMMIT;
connection slave;
connection slave;
SELECT * FROM t1 ORDER BY a;
a b
1 cross-db
2 world
3 foo
SELECT * FROM t2;
a
1
2
SELECT * FROM t3;
a
#
# Cleanup
#
connection master;
SET @@session.binlog_sequential_table_ids= @saved_sequential;
DROP TABLE t1, t2, t3;
DROP TABLE db2.t4;
DROP DATABASE db2;
connection slave;
include/rpl_end.inc
52 changes: 52 additions & 0 deletions mysql-test/suite/rpl/r/rpl_sequential_table_id_compat.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
include/master-slave.inc
[connection master]
connection master;
SET @@session.binlog_sequential_table_ids= ON;
CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(100)) ENGINE=InnoDB;
CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
CREATE TABLE t3 (a INT PRIMARY KEY) ENGINE=InnoDB;
#
# Insert data with sequential table IDs
#
INSERT INTO t1 VALUES (1, 'compat test');
INSERT INTO t2 VALUES (1);
INSERT INTO t3 VALUES (1);
#
# Multi-table transaction
#
BEGIN;
INSERT INTO t1 VALUES (2, 'txn row');
UPDATE t2 SET a= 2 WHERE a= 1;
INSERT INTO t3 VALUES (2);
COMMIT;
#
# Multi-table single statement
#
INSERT INTO t2 VALUES (10);
UPDATE t1, t2 SET t1.b= 'multi', t2.a= 20
WHERE t1.a= 1 AND t2.a= 10;
#
# Verify slave replicated everything correctly
#
connection slave;
connection slave;
SELECT * FROM t1 ORDER BY a;
a b
1 multi
2 txn row
SELECT * FROM t2 ORDER BY a;
a
2
20
SELECT * FROM t3 ORDER BY a;
a
1
2
#
# Cleanup
#
connection master;
SET @@session.binlog_sequential_table_ids= OFF;
DROP TABLE t1, t2, t3;
connection slave;
include/rpl_end.inc
117 changes: 117 additions & 0 deletions mysql-test/suite/rpl/r/rpl_sequential_table_id_edge.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
include/master-slave.inc
[connection master]
connection master;
SET @@session.binlog_sequential_table_ids= ON;
#
# Test 1: Same table in multiple statements within one transaction
#
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
BEGIN;
INSERT INTO t1 VALUES (1, 10);
INSERT INTO t1 VALUES (2, 20);
UPDATE t1 SET b= 30 WHERE a= 1;
DELETE FROM t1 WHERE a= 2;
COMMIT;
connection slave;
connection slave;
SELECT * FROM t1 ORDER BY a;
a b
1 30
#
# Test 2: Transaction touching many tables
#
connection master;
BEGIN;
COMMIT;
connection slave;
connection slave;
SELECT * FROM many_1;
a
1
SELECT * FROM many_25;
a
25
SELECT * FROM many_50;
a
50
#
# Test 3: Temporary tables mixed with regular tables
#
connection master;
CREATE TEMPORARY TABLE tmp1 (a INT PRIMARY KEY) ENGINE=InnoDB;
CREATE TABLE reg1 (a INT PRIMARY KEY) ENGINE=InnoDB;
BEGIN;
INSERT INTO tmp1 VALUES (1);
INSERT INTO reg1 VALUES (1);
INSERT INTO t1 VALUES (3, 300);
COMMIT;
connection slave;
connection slave;
SELECT * FROM reg1 ORDER BY a;
a
1
SELECT * FROM t1 ORDER BY a;
a b
1 30
3 300
#
# Test 4: DELETE with multi-table syntax
#
connection master;
CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
INSERT INTO t2 VALUES (100, 1), (200, 2);
INSERT INTO t1 VALUES (100, 1);
DELETE t1, t2 FROM t1 INNER JOIN t2 ON t1.a= t2.a;
connection slave;
connection slave;
SELECT * FROM t1 ORDER BY a;
a b
1 30
3 300
SELECT * FROM t2 ORDER BY a;
a b
200 2
#
# Test 5: REPLACE and INSERT ... ON DUPLICATE KEY UPDATE
#
connection master;
INSERT INTO t1 VALUES (5, 50);
REPLACE INTO t1 VALUES (5, 55);
INSERT INTO t1 VALUES (6, 60) ON DUPLICATE KEY UPDATE b= 66;
INSERT INTO t1 VALUES (6, 60) ON DUPLICATE KEY UPDATE b= 66;
connection slave;
connection slave;
SELECT * FROM t1 ORDER BY a;
a b
1 30
3 300
5 55
6 66
#
# Test 6: Multiple single-statement transactions (autocommit)
#
connection master;
SET autocommit= 1;
INSERT INTO t1 VALUES (7, 70);
INSERT INTO t1 VALUES (8, 80);
INSERT INTO t1 VALUES (9, 90);
connection slave;
connection slave;
SELECT * FROM t1 ORDER BY a;
a b
1 30
3 300
5 55
6 66
7 70
8 80
9 90
#
# Cleanup
#
connection master;
SET @@session.binlog_sequential_table_ids= OFF;
DROP TABLE t1, t2, reg1;
DROP TEMPORARY TABLE IF EXISTS tmp1;
connection slave;
include/rpl_end.inc
54 changes: 54 additions & 0 deletions mysql-test/suite/rpl/r/rpl_sequential_table_id_toggle.result
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
include/master-slave.inc
[connection master]
connection master;
CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(100)) ENGINE=InnoDB;
CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
#
# Insert with sequential IDs ON
#
SET @@session.binlog_sequential_table_ids= ON;
INSERT INTO t1 VALUES (1, 'sequential');
INSERT INTO t2 VALUES (1);
#
# Insert with sequential IDs OFF (traditional)
#
SET @@session.binlog_sequential_table_ids= OFF;
INSERT INTO t1 VALUES (2, 'traditional');
INSERT INTO t2 VALUES (2);
#
# Insert with sequential IDs ON again
#
SET @@session.binlog_sequential_table_ids= ON;
INSERT INTO t1 VALUES (3, 'sequential again');
#
# Multi-table update with toggle mid-transaction
#
BEGIN;
INSERT INTO t1 VALUES (4, 'in-txn-seq');
SET @@session.binlog_sequential_table_ids= OFF;
INSERT INTO t2 VALUES (4);
COMMIT;
#
# Verify slave receives all data correctly
#
connection slave;
connection slave;
SELECT * FROM t1 ORDER BY a;
a b
1 sequential
2 traditional
3 sequential again
4 in-txn-seq
SELECT * FROM t2 ORDER BY a;
a
1
2
4
#
# Cleanup
#
connection master;
SET @@session.binlog_sequential_table_ids= OFF;
DROP TABLE t1, t2;
connection slave;
include/rpl_end.inc
2 changes: 2 additions & 0 deletions mysql-test/suite/rpl/t/rpl_alter_online_debug.test
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,13 @@ set debug_sync= 'now signal go';

--connection master
--reap
SHOW BINLOG EVENTS;
--source include/save_master_gtid.inc

--connection slave
source include/start_slave.inc;
--source include/sync_with_master_gtid.inc
SHOW BINLOG EVENTS;
select * from t;

# Cleanup
Expand Down
Loading
Loading