stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
DROP PROCEDURE IF EXISTS test.p1;
DROP PROCEDURE IF EXISTS test.p2;
DROP PROCEDURE IF EXISTS test.p3;
DROP TABLE IF EXISTS test.t3;
DROP TABLE IF EXISTS test.t1;
DROP TABLE IF EXISTS test.t2;
CREATE TABLE test.t1 (a INT AUTO_INCREMENT KEY, t CHAR(6)) ENGINE=INNODB;
CREATE TABLE test.t2 (a INT AUTO_INCREMENT KEY, f INT, FOREIGN KEY(a) REFERENCES test.t1(a) ON DELETE CASCADE) ENGINE=INNODB;
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|

< -- test 1 call p1 -- >
------------------------
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');

< -- test 1 select master after p1 -- >
---------------------------------------
SELECT * FROM test.t1;
a	t
1	texas
2	Live
3	next
4	to
5	OK
6	MySQL
SELECT * FROM test.t2;
a	f
1	1
2	2
3	3
4	4
5	5
6	6

< -- test 1 select slave after p1 -- >
--------------------------------------
SELECT * FROM test.t1;
a	t
1	texas
2	Live
3	next
4	to
5	OK
6	MySQL
SELECT * FROM test.t2;
a	f
1	1
2	2
3	3
4	4
5	5
6	6

< -- test 1 call p2 & select master -- >
----------------------------------------
call test.p2(4);
SELECT * FROM test.t1;
a	t
4	to
5	OK
6	MySQL
SELECT * FROM test.t2;
a	f
4	4
5	5
6	6

< -- test 1 select slave after p2 -- >
--------------------------------------
SELECT * FROM test.t1;
a	t
4	to
5	OK
6	MySQL
SELECT * FROM test.t2;
a	f
4	4
5	5
6	6

< -- End test 1 Begin test 2 -- >
---------------------------------
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;
CREATE TABLE test.t1 (a INT, t CHAR(6), PRIMARY KEY(a)) ENGINE=INNODB;
CREATE TABLE test.t2 (a INT, f INT, FOREIGN KEY(a) REFERENCES test.t1(a) ON UPDATE CASCADE, PRIMARY KEY(a)) ENGINE=INNODB;
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|
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');

< -- test 2 select Master after p1 -- >
---------------------------------------
SELECT * FROM test.t1;
a	t
1	texas
2	Live
3	next
4	to
5	OK
6	MySQL
SELECT * FROM test.t2;
a	f
1	6
2	6
3	6
4	6
5	6
6	6

< -- test 2 select Slave after p1 -- >
--------------------------------------
SELECT * FROM test.t1;
a	t
1	texas
2	Live
3	next
4	to
5	OK
6	MySQL
SELECT * FROM test.t2;
a	f
1	6
2	6
3	6
4	6
5	6
6	6

< -- test 2 call p2 & select Master -- >
----------------------------------------
CALL test.p2(2);
CALL test.p2(4);
CALL test.p2(6);
SELECT * FROM test.t1;
a	t
1	texas
3	next
5	OK
20	Live
40	to
60	MySQL
SELECT * FROM test.t2;
a	f
1	6
3	6
5	6
20	6
40	6
60	6

< -- test 1 select Slave after p2 -- >
--------------------------------------
SELECT * FROM test.t1;
a	t
1	texas
3	next
5	OK
20	Live
40	to
60	MySQL
SELECT * FROM test.t2;
a	f
1	6
3	6
5	6
20	6
40	6
60	6

< -- End test 2 Begin test 3 -- >
---------------------------------
CREATE TABLE test.t3 (a INT AUTO_INCREMENT KEY, t CHAR(6))ENGINE=INNODB;
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|
SET AUTOCOMMIT=0;
START TRANSACTION;
ROLLBACK;
select * from test.t3;
a	t
select * from test.t3;
a	t
START TRANSACTION;
COMMIT;
select * from test.t3;
a	t
98	NONE
select * from test.t3;
a	t
98	NONE
SET AUTOCOMMIT=1;
SET FOREIGN_KEY_CHECKS=0;
DROP PROCEDURE IF EXISTS test.p3;
DROP PROCEDURE IF EXISTS test.p1;
DROP PROCEDURE IF EXISTS test.p2;
DROP TABLE IF EXISTS test.t1;
DROP TABLE IF EXISTS test.t2;
DROP TABLE IF EXISTS test.t3;