~jlukas79/+junk/mysql-server

« back to all changes in this revision

Viewing changes to mysql-test/suite/rpl/t/rpl_stm_auto_increment_bug33029.test

manual merge 6.0-main --> 6.0-bka-review

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# BUG#33029 5.0 to 5.1 replication fails on dup key when inserting
 
2
# using a trig in SP
 
3
 
 
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.
 
10
 
 
11
source include/have_binlog_format_statement.inc;
 
12
source include/master-slave.inc;
 
13
 
 
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
 
21
 
 
22
CREATE TABLE t1 (id INT AUTO_INCREMENT PRIMARY KEY);
 
23
CREATE TABLE t2 (id INT AUTO_INCREMENT PRIMARY KEY);
 
24
 
 
25
delimiter //;
 
26
 
 
27
CREATE PROCEDURE p1()
 
28
BEGIN
 
29
   DECLARE ins_count INT DEFAULT 10; 
 
30
 
 
31
   WHILE ins_count > 0 DO
 
32
       INSERT INTO t1 VALUES (NULL);
 
33
       SET ins_count = ins_count - 1;
 
34
   END WHILE;
 
35
 
 
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//
 
41
 
 
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//
 
50
 
 
51
CREATE TRIGGER tr1 BEFORE DELETE
 
52
    ON t1 FOR EACH ROW 
 
53
    BEGIN
 
54
        INSERT INTO t2  VALUES (NULL);
 
55
    END//
 
56
 
 
57
CREATE FUNCTION f1 (i int) RETURNS int
 
58
    BEGIN
 
59
        INSERT INTO t2 VALUES (NULL);
 
60
        RETURN i;
 
61
    END//
 
62
 
 
63
delimiter ;//
 
64
 
 
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;
 
70
 
 
71
echo # Result on master;
 
72
SELECT * FROM t1;
 
73
SELECT * FROM t2;
 
74
 
 
75
sync_slave_with_master;
 
76
 
 
77
echo # Result on slave;
 
78
SELECT * FROM t1;
 
79
SELECT * FROM t2;
 
80
 
 
81
connection master;
 
82
 
 
83
DROP TRIGGER tr1;
 
84
 
 
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;
 
90
 
 
91
echo # Result on master;
 
92
SELECT * FROM t1;
 
93
SELECT * FROM t2;
 
94
 
 
95
sync_slave_with_master;
 
96
 
 
97
echo # Result on slave;
 
98
SELECT * FROM t1;
 
99
SELECT * FROM t2;
 
100
 
 
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;