summaryrefslogtreecommitdiffstats
path: root/mysql-test/suite/rpl/include/rpl_row_sp002.test
blob: 90c273eb02653982ea28e815254973ee9aa7da8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
#############################################################################
# This test is being created to test out the non deterministic items with   #
# row based replication.                                                    #
#############################################################################
# Test: Contains two stored procedures test one that insert data into tables#
#        and use the LAST_INSERTED_ID() on tables with FOREIGN KEY(a)       #
#        REFERENCES ON DELETE CASCADE. This test also has a delete sp that  #
#        should cause a delete cascade.                                     #
#       The second test has a sp that will either insert rows or delete from#
#        the table depending on the CASE outcome. The test uses this SP in a#
#        transaction first rolling back and then commiting,                 #
#############################################################################



# Includes
-- source include/have_binlog_format_row.inc
-- source include/master-slave.inc

# Begin test section 1

eval CREATE TABLE test.t1 (a INT AUTO_INCREMENT KEY, t CHAR(6)) ENGINE=$engine_type;
eval CREATE TABLE test.t2 (a INT AUTO_INCREMENT KEY, f INT, FOREIGN KEY(a) REFERENCES test.t1(a) ON DELETE CASCADE) ENGINE=$engine_type;

delimiter |;
create procedure test.p1(IN i CHAR(6))
begin
 INSERT INTO test.t1 (t) VALUES (i);
 INSERT INTO test.t2 VALUES (NULL,LAST_INSERT_ID());
end|
create procedure test.p2(IN i INT)
begin
 DELETE FROM test.t1 where a < i;
end|
delimiter ;|

let $message=< -- test 1 call p1 -- >;
--source include/show_msg.inc
SET FOREIGN_KEY_CHECKS=1;
call test.p1('texas');
call test.p1('Live');
call test.p1('next');
call test.p1('to');
call test.p1('OK');
call test.p1('MySQL');

let $message=< -- test 1 select master after p1 -- >;
--source include/show_msg.inc

SELECT * FROM test.t1;
SELECT * FROM test.t2;

let $message=< -- test 1 select slave after p1 -- >;
--source include/show_msg.inc
sync_slave_with_master;
SELECT * FROM test.t1;
SELECT * FROM test.t2;

let $message=< -- test 1 call p2 & select master -- >;
--source include/show_msg.inc
connection master;
call test.p2(4);
SELECT * FROM test.t1;
SELECT * FROM test.t2;

let $message=< -- test 1 select slave after p2 -- >;
--source include/show_msg.inc
sync_slave_with_master;
SELECT * FROM test.t1;
SELECT * FROM test.t2;

connection master;
#show binlog events;
let $message=< -- End test 1 Begin test 2 -- >;
--source include/show_msg.inc
# End test 1 Begin test 2

--disable_warnings
SET FOREIGN_KEY_CHECKS=0;
DROP PROCEDURE IF EXISTS test.p1;
DROP PROCEDURE IF EXISTS test.p2;
DROP TABLE IF EXISTS test.t1;
DROP TABLE IF EXISTS test.t2;
--enable_warnings
# End of cleanup

eval CREATE TABLE test.t1 (a INT, t CHAR(6), PRIMARY KEY(a)) ENGINE=$engine_type;
eval CREATE TABLE test.t2 (a INT, f INT, FOREIGN KEY(a) REFERENCES test.t1(a) ON UPDATE CASCADE, PRIMARY KEY(a)) ENGINE=$engine_type;

delimiter |;
CREATE PROCEDURE  test.p1(IN nm INT, IN ch CHAR(6))
BEGIN
 INSERT INTO test.t1 (a,t) VALUES (nm, ch);
 INSERT INTO test.t2 VALUES (nm, LAST_INSERT_ID());
END|
CREATE PROCEDURE test.p2(IN i INT)
BEGIN
 UPDATE test.t1 SET a = i*10 WHERE a = i;
END|
delimiter ;|
SET FOREIGN_KEY_CHECKS=1;
CALL test.p1(1,'texas');
CALL test.p1(2,'Live');
CALL test.p1(3,'next');
CALL test.p1(4,'to');
CALL test.p1(5,'OK');
CALL test.p1(6,'MySQL');

let $message=< -- test 2 select Master after p1 -- >;
--source include/show_msg.inc
SELECT * FROM test.t1;
SELECT * FROM test.t2;

let $message=< -- test 2 select Slave after p1 -- >;
--source include/show_msg.inc
sync_slave_with_master;
SELECT * FROM test.t1;
SELECT * FROM test.t2;

let $message=< -- test 2 call p2 & select Master -- >;
--source include/show_msg.inc
connection master;
CALL test.p2(2);
CALL test.p2(4);
CALL test.p2(6);
SELECT * FROM test.t1;
SELECT * FROM test.t2;

let $message=< -- test 1 select Slave after p2 -- >;
--source include/show_msg.inc
sync_slave_with_master;
SELECT * FROM test.t1;
SELECT * FROM test.t2;

connection master;
#show binlog events;
let $message=< -- End test 2 Begin test 3 -- >;
--source include/show_msg.inc
# End test 2 begin test 3

eval CREATE TABLE test.t3 (a INT AUTO_INCREMENT KEY, t CHAR(6))ENGINE=$engine_type;

delimiter |;
CREATE PROCEDURE test.p3(IN n INT)
begin
CASE n
WHEN 2 THEN
 DELETE from test.t3; 
ELSE
 INSERT INTO test.t3 VALUES (NULL,'NONE');
END CASE;
end|
delimiter ;|

SET AUTOCOMMIT=0;
START TRANSACTION;

-- disable_query_log
-- disable_result_log
let $n=50;
while ($n)
{
  eval call test.p3($n);
  dec $n;
}
-- enable_result_log
-- enable_query_log

ROLLBACK;
select * from test.t3;
sync_slave_with_master;
select * from test.t3;

connection master;
START TRANSACTION;

-- disable_query_log
-- disable_result_log
let $n=50;
while ($n)
{
  eval call test.p3($n);
  dec $n;
}
-- enable_result_log
-- enable_query_log

COMMIT;
select * from test.t3;
sync_slave_with_master;
select * from test.t3;

connection master;
#show binlog events from 1627;


# First lets cleanup
SET AUTOCOMMIT=1;
SET FOREIGN_KEY_CHECKS=0;
DROP PROCEDURE test.p3;
DROP PROCEDURE test.p1;
DROP PROCEDURE test.p2;
DROP TABLE test.t1;
DROP TABLE test.t2;
DROP TABLE test.t3;

# End of 5.0 test case
--source include/rpl_end.inc