~drizzle-trunk/drizzle/development

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