mySQL 5.0.11 sources for tomato
[tomato.git] / release / src / router / mysql / mysql-test / suite / rpl / t / rpl_stm_auto_increment_bug33029.test
blob6381150217fed988086ea08be8e04e7065cb09d2
1 # BUG#33029 5.0 to 5.1 replication fails on dup key when inserting
2 # using a trig in SP
4 # For all 5.0 up to 5.0.58 exclusive, and 5.1 up to 5.1.12 exclusive,
5 # if one statement in a SP generated AUTO_INCREMENT value by the top
6 # statement, all statements after it would be considered generated
7 # AUTO_INCREMENT value by the top statement, and a erroneous INSERT_ID
8 # value might be associated with these statement, which could cause
9 # duplicate entry error and stop the slave.
11 source include/have_binlog_format_statement.inc;
12 source include/master-slave.inc;
14 --disable_warnings
15 DROP TABLE IF EXISTS t1, t2;
16 DROP PROCEDURE IF EXISTS p1;
17 DROP PROCEDURE IF EXISTS p2;
18 DROP TRIGGER IF EXISTS tr1;
19 DROP FUNCTION IF EXISTS f1;
20 --enable_warnings
22 CREATE TABLE t1 (id INT AUTO_INCREMENT PRIMARY KEY);
23 CREATE TABLE t2 (id INT AUTO_INCREMENT PRIMARY KEY);
25 delimiter //;
27 CREATE PROCEDURE p1()
28 BEGIN
29    DECLARE ins_count INT DEFAULT 10; 
31    WHILE ins_count > 0 DO
32        INSERT INTO t1 VALUES (NULL);
33        SET ins_count = ins_count - 1;
34    END WHILE;
36    DELETE FROM t1 WHERE id = 1;
37    DELETE FROM t1 WHERE id = 2;
38    DELETE FROM t2 WHERE id = 1;
39    DELETE FROM t2 WHERE id = 2;
40 END//
42 CREATE PROCEDURE p2()
43 BEGIN
44    INSERT INTO t1 VALUES (NULL);
45    DELETE FROM t1 WHERE id = f1(3);
46    DELETE FROM t1 WHERE id = f1(4);
47    DELETE FROM t2 WHERE id = 3;
48    DELETE FROM t2 WHERE id = 4;
49 END//
51 CREATE TRIGGER tr1 BEFORE DELETE
52     ON t1 FOR EACH ROW 
53     BEGIN
54         INSERT INTO t2  VALUES (NULL);
55     END//
57 CREATE FUNCTION f1 (i int) RETURNS int
58     BEGIN
59         INSERT INTO t2 VALUES (NULL);
60         RETURN i;
61     END//
63 delimiter ;//
65 # the $binlog_start will be used by the show_binlog_events.inc, so
66 # that we can skip binlog events we don't care
67 let $binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1);
68 CALL p1();
69 source include/show_binlog_events.inc;
71 echo # Result on master;
72 SELECT * FROM t1;
73 SELECT * FROM t2;
75 sync_slave_with_master;
77 echo # Result on slave;
78 SELECT * FROM t1;
79 SELECT * FROM t2;
81 connection master;
83 DROP TRIGGER tr1;
85 # the $binlog_start will be used by the show_binlog_events.inc, so
86 # that we can skip binlog events we don't care
87 let $binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1);
88 CALL p2();
89 source include/show_binlog_events.inc;
91 echo # Result on master;
92 SELECT * FROM t1;
93 SELECT * FROM t2;
95 sync_slave_with_master;
97 echo # Result on slave;
98 SELECT * FROM t1;
99 SELECT * FROM t2;
101 # clean up
102 connection master;
103 disable_warnings;
104 DROP TABLE IF EXISTS t1, t2;
105 DROP PROCEDURE IF EXISTS p1;
106 DROP PROCEDURE IF EXISTS p2;
107 DROP FUNCTION IF EXISTS f1;
108 DROP TRIGGER IF EXISTS tr1;
109 enable_warnings;
110 sync_slave_with_master;
111 --source include/rpl_end.inc