1
by brian
clean slate |
1 |
#########################################
|
2 |
# Author: Serge Kozlov skozlov@mysql.com |
|
3 |
# Date: 04/25/2007 |
|
4 |
# Purpose: Testing Invocation and Invoked |
|
5 |
# Features for Replication. |
|
6 |
#########################################
|
|
7 |
||
8 |
--source include/master-slave.inc |
|
9 |
--source include/have_innodb.inc |
|
10 |
||
11 |
# --disable_warnings/--enable_warnings added before/after query |
|
12 |
# if one uses UUID() function because we need to avoid warnings |
|
13 |
# for STATEMENT binlog format |
|
14 |
||
15 |
# Non-transactional engine |
|
16 |
--let $engine_type= myisam |
|
17 |
||
18 |
# Transactional engine |
|
19 |
--let $engine_type2= innodb |
|
20 |
||
21 |
||
22 |
#
|
|
23 |
# Clean up |
|
24 |
#
|
|
25 |
||
26 |
USE test; |
|
27 |
--disable_warnings |
|
28 |
DROP VIEW IF EXISTS v1,v11; |
|
29 |
DROP TABLE IF EXISTS t1,t2,t3,t11,t12,t13; |
|
30 |
DROP PROCEDURE IF EXISTS p1; |
|
31 |
DROP PROCEDURE IF EXISTS p11; |
|
32 |
DROP FUNCTION IF EXISTS f1; |
|
33 |
DROP FUNCTION IF EXISTS f2; |
|
34 |
DROP EVENT IF EXISTS e1; |
|
35 |
DROP EVENT IF EXISTS e11; |
|
36 |
--enable_warnings |
|
37 |
||
38 |
||
39 |
#
|
|
40 |
# Prepare objects (tables etc) |
|
41 |
#
|
|
42 |
||
43 |
# Create tables |
|
44 |
||
45 |
--echo |
|
46 |
eval CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=$engine_type; |
|
47 |
INSERT INTO t1 VALUES (1,1,'1'); |
|
48 |
--disable_warnings |
|
49 |
INSERT INTO t1 VALUES (2,2,UUID()); |
|
50 |
--enable_warnings |
|
51 |
eval CREATE TABLE t2 (a INT UNIQUE, b INT, c VARCHAR(64)) ENGINE=$engine_type; |
|
52 |
INSERT INTO t2 VALUES (1,1,'1'); |
|
53 |
--disable_warnings |
|
54 |
INSERT INTO t2 VALUES (2,2,UUID()); |
|
55 |
--enable_warnings |
|
56 |
||
57 |
eval CREATE TABLE t11 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=$engine_type2; |
|
58 |
INSERT INTO t11 VALUES (1,1,'1'); |
|
59 |
--disable_warnings |
|
60 |
INSERT INTO t11 VALUES (2,2,UUID()); |
|
61 |
--enable_warnings |
|
62 |
eval CREATE TABLE t12 (a INT UNIQUE, b INT, c VARCHAR(64)) ENGINE=$engine_type2; |
|
63 |
INSERT INTO t12 VALUES (1,1,'1'); |
|
64 |
--disable_warnings |
|
65 |
INSERT INTO t12 VALUES (2,2,UUID()); |
|
66 |
--enable_warnings |
|
67 |
||
68 |
# Create invoked features |
|
69 |
--echo |
|
70 |
# Create view for tables t1,t11 |
|
71 |
CREATE VIEW v1 AS SELECT * FROM t1; |
|
72 |
CREATE VIEW v11 AS SELECT * FROM t11; |
|
73 |
||
74 |
# Create triggers for t1,t11 |
|
75 |
DELIMITER |; |
|
76 |
||
77 |
CREATE TRIGGER t1_tr1 BEFORE INSERT ON t1 FOR EACH ROW |
|
78 |
BEGIN
|
|
79 |
INSERT INTO t2 VALUES (NEW.a, NEW.b, NEW.c); |
|
80 |
INSERT INTO t3 VALUES (NEW.a, NEW.b, NEW.c); |
|
81 |
END| |
|
82 |
||
83 |
CREATE TRIGGER t1_tr2 BEFORE UPDATE ON t1 FOR EACH ROW |
|
84 |
BEGIN
|
|
85 |
UPDATE t2 SET c = ''; |
|
86 |
UPDATE t3 SET c = ''; |
|
87 |
END| |
|
88 |
||
89 |
CREATE TRIGGER t11_tr1 BEFORE INSERT ON t11 FOR EACH ROW |
|
90 |
BEGIN
|
|
91 |
INSERT INTO t12 VALUES (NEW.a, NEW.b, NEW.c); |
|
92 |
INSERT INTO t13 VALUES (NEW.a, NEW.b, NEW.c); |
|
93 |
END| |
|
94 |
||
95 |
CREATE TRIGGER t11_tr2 BEFORE UPDATE ON t11 FOR EACH ROW |
|
96 |
BEGIN
|
|
97 |
UPDATE t12 SET c = ''; |
|
98 |
UPDATE t13 SET c = ''; |
|
99 |
END| |
|
100 |
||
101 |
# Create events which will run every 1 sec |
|
102 |
CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND DISABLE DO |
|
103 |
BEGIN
|
|
104 |
ALTER EVENT e1 DISABLE; |
|
105 |
CALL p1(10, ''); |
|
106 |
END| |
|
107 |
||
108 |
CREATE EVENT e11 ON SCHEDULE EVERY 1 SECOND DISABLE DO |
|
109 |
BEGIN
|
|
110 |
ALTER EVENT e11 DISABLE; |
|
111 |
CALL p11(10, ''); |
|
112 |
END| |
|
113 |
||
114 |
# Create functions and procedures used for events |
|
115 |
CREATE FUNCTION f1 (x INT) RETURNS VARCHAR(64) |
|
116 |
BEGIN
|
|
117 |
IF x > 5 THEN |
|
118 |
RETURN UUID(); |
|
119 |
END IF; |
|
120 |
RETURN ''; |
|
121 |
END| |
|
122 |
||
123 |
CREATE FUNCTION f2 (x INT) RETURNS VARCHAR(64) |
|
124 |
BEGIN
|
|
125 |
RETURN f1(x); |
|
126 |
END| |
|
127 |
||
128 |
CREATE PROCEDURE p1 (IN x INT, IN y VARCHAR(64)) |
|
129 |
BEGIN
|
|
130 |
INSERT IGNORE INTO t1 VALUES (x,x,y); |
|
131 |
END| |
|
132 |
||
133 |
CREATE PROCEDURE p11 (IN x INT, IN y VARCHAR(64)) |
|
134 |
BEGIN
|
|
135 |
INSERT IGNORE INTO t11 VALUES (x,x,y); |
|
136 |
END| |
|
137 |
||
138 |
DELIMITER ;| |
|
139 |
||
140 |
||
141 |
#
|
|
142 |
# Start test case |
|
143 |
#
|
|
144 |
||
145 |
# Do some actions for non-transactional tables |
|
146 |
--echo |
|
147 |
CREATE TABLE t3 SELECT * FROM v1; |
|
148 |
INSERT INTO t1 VALUES (3,3,''); |
|
149 |
UPDATE t1 SET c='2' WHERE a = 1; |
|
150 |
--disable_warnings |
|
151 |
INSERT INTO t1 VALUES(4,4,f1(4)); |
|
152 |
--enable_warnings |
|
153 |
INSERT INTO t1 VALUES (100,100,''); |
|
154 |
--disable_warnings |
|
155 |
CALL p1(5, UUID()); |
|
156 |
--enable_warnings |
|
157 |
INSERT INTO t1 VALUES (101,101,''); |
|
158 |
--disable_warnings |
|
159 |
INSERT INTO t1 VALUES(6,6,f1(6)); |
|
160 |
--enable_warnings |
|
161 |
INSERT INTO t1 VALUES (102,102,''); |
|
162 |
--disable_warnings |
|
163 |
INSERT INTO t1 VALUES(7,7,f2(7)); |
|
164 |
--enable_warnings |
|
165 |
INSERT INTO t1 VALUES (103,103,''); |
|
166 |
||
167 |
# Do some actions for transactional tables |
|
168 |
--echo |
|
169 |
CREATE TABLE t13 SELECT * FROM v11; |
|
170 |
INSERT INTO t11 VALUES (3,3,''); |
|
171 |
UPDATE t11 SET c='2' WHERE a = 1; |
|
172 |
--disable_warnings |
|
173 |
INSERT INTO t11 VALUES(4,4,f1(4)); |
|
174 |
--enable_warnings |
|
175 |
INSERT INTO t11 VALUES (100,100,''); |
|
176 |
--disable_warnings |
|
177 |
CALL p11(5, UUID()); |
|
178 |
--enable_warnings |
|
179 |
INSERT INTO t11 VALUES (101,101,''); |
|
180 |
--disable_warnings |
|
181 |
INSERT INTO t11 VALUES(6,6,f1(6)); |
|
182 |
--enable_warnings |
|
183 |
INSERT INTO t11 VALUES (102,102,''); |
|
184 |
--disable_warnings |
|
185 |
INSERT INTO t11 VALUES(7,7,f2(7)); |
|
186 |
--enable_warnings |
|
187 |
INSERT INTO t11 VALUES (103,103,''); |
|
188 |
||
189 |
# Scheduler is on |
|
190 |
--echo |
|
191 |
# Temporally events fire sequentally due Bug#29020. |
|
192 |
SET GLOBAL EVENT_SCHEDULER = on; |
|
193 |
# Wait while events will executed |
|
194 |
ALTER EVENT e1 ENABLE; |
|
195 |
let $wait_condition= SELECT COUNT(*) = 1 FROM t1 WHERE t1.a = 10; |
|
196 |
--source include/wait_condition.inc |
|
197 |
ALTER EVENT e11 ENABLE; |
|
198 |
let $wait_condition= SELECT COUNT(*) = 1 FROM t11 WHERE t11.a = 10; |
|
199 |
--source include/wait_condition.inc |
|
200 |
SET GLOBAL EVENT_SCHEDULER = off; |
|
201 |
||
202 |
# Check original objects |
|
203 |
--echo |
|
204 |
--sorted_result |
|
205 |
SHOW TABLES LIKE 't%'; |
|
206 |
--sorted_result |
|
207 |
SELECT table_name FROM information_schema.views WHERE table_schema='test'; |
|
208 |
--sorted_result |
|
209 |
SELECT trigger_name, event_manipulation, event_object_table FROM information_schema.triggers WHERE trigger_schema='test'; |
|
210 |
--sorted_result |
|
211 |
SELECT routine_type, routine_name FROM information_schema.routines WHERE routine_schema='test'; |
|
212 |
--sorted_result |
|
213 |
SELECT event_name, status FROM information_schema.events WHERE event_schema='test'; |
|
214 |
||
215 |
# Check original data |
|
216 |
--echo |
|
217 |
SELECT COUNT(*) FROM t1; |
|
218 |
SELECT a,b FROM t1 ORDER BY a; |
|
219 |
SELECT COUNT(*) FROM t2; |
|
220 |
SELECT a,b FROM t2 ORDER BY a; |
|
221 |
SELECT COUNT(*) FROM t3; |
|
222 |
SELECT a,b FROM t3 ORDER BY a; |
|
223 |
SELECT a,b FROM v1 ORDER BY a; |
|
224 |
SELECT COUNT(*) FROM t11; |
|
225 |
SELECT a,b FROM t11 ORDER BY a; |
|
226 |
SELECT COUNT(*) FROM t12; |
|
227 |
SELECT a,b FROM t12 ORDER BY a; |
|
228 |
SELECT COUNT(*) FROM t13; |
|
229 |
SELECT a,b FROM t13 ORDER BY a; |
|
230 |
SELECT a,b FROM v11 ORDER BY a; |
|
231 |
||
232 |
--sync_slave_with_master slave |
|
233 |
||
234 |
# Check replicated objects |
|
235 |
--echo |
|
236 |
--sorted_result |
|
237 |
SHOW TABLES LIKE 't%'; |
|
238 |
--sorted_result |
|
239 |
SELECT table_name FROM information_schema.views WHERE table_schema='test'; |
|
240 |
--sorted_result |
|
241 |
SELECT trigger_name, event_manipulation, event_object_table FROM information_schema.triggers WHERE trigger_schema='test'; |
|
242 |
--sorted_result |
|
243 |
SELECT routine_type, routine_name FROM information_schema.routines WHERE routine_schema='test'; |
|
244 |
--sorted_result |
|
245 |
SELECT event_name, status FROM information_schema.events WHERE event_schema='test'; |
|
246 |
||
247 |
# Check replicated data |
|
248 |
--echo |
|
249 |
SELECT COUNT(*) FROM t1; |
|
250 |
SELECT a,b FROM t1 ORDER BY a; |
|
251 |
SELECT COUNT(*) FROM t2; |
|
252 |
SELECT a,b FROM t2 ORDER BY a; |
|
253 |
SELECT COUNT(*) FROM t3; |
|
254 |
SELECT a,b FROM t3 ORDER BY a; |
|
255 |
SELECT a,b FROM v1 ORDER BY a; |
|
256 |
SELECT COUNT(*) FROM t11; |
|
257 |
SELECT a,b FROM t11 ORDER BY a; |
|
258 |
SELECT COUNT(*) FROM t12; |
|
259 |
SELECT a,b FROM t12 ORDER BY a; |
|
260 |
SELECT COUNT(*) FROM t13; |
|
261 |
SELECT a,b FROM t13 ORDER BY a; |
|
262 |
SELECT a,b FROM v11 ORDER BY a; |
|
263 |
||
264 |
# Remove UUID() before comparing and sort tables |
|
265 |
||
266 |
--connection master |
|
267 |
--echo |
|
268 |
UPDATE t1 SET c=''; |
|
269 |
UPDATE t2 SET c=''; |
|
270 |
UPDATE t3 SET c=''; |
|
271 |
UPDATE t11 SET c=''; |
|
272 |
UPDATE t12 SET c=''; |
|
273 |
UPDATE t13 SET c=''; |
|
274 |
||
275 |
ALTER TABLE t3 ORDER BY a; |
|
276 |
ALTER TABLE t13 ORDER BY a; |
|
277 |
||
278 |
--sync_slave_with_master slave |
|
279 |
||
280 |
# Compare a data from master and slave |
|
281 |
--echo |
|
282 |
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_master.sql |
|
283 |
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_slave.sql |
|
284 |
--diff_files $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_master.sql $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_slave.sql |
|
285 |
||
286 |
||
287 |
#
|
|
288 |
# Clean up |
|
289 |
#
|
|
290 |
||
291 |
# Remove dumps |
|
292 |
--echo |
|
293 |
--remove_file $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_master.sql |
|
294 |
--remove_file $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_slave.sql |
|
295 |
||
296 |
# Remove tables,views,procedures,functions |
|
297 |
--connection master |
|
298 |
--echo |
|
299 |
DROP VIEW IF EXISTS v1,v11; |
|
300 |
DROP TABLE IF EXISTS t1,t2,t3,t11,t12,t13; |
|
301 |
DROP PROCEDURE IF EXISTS p1; |
|
302 |
DROP PROCEDURE IF EXISTS p11; |
|
303 |
DROP FUNCTION IF EXISTS f1; |
|
304 |
DROP FUNCTION IF EXISTS f2; |
|
305 |
DROP EVENT IF EXISTS e1; |
|
306 |
DROP EVENT IF EXISTS e11; |
|
307 |
||
308 |
--sync_slave_with_master slave |
|
309 |
||
310 |
# End 5.1 test case |