~drizzle-trunk/drizzle/development

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
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
#################################################################
# This file inclde tests that address the foreign key cases of 
# the following requirements since they are specific to innodb. 
# Other test cases for these requirements are included in the 
# triggers_master.test file.
#################################################################

--disable_abort_on_error

# OBN - The following tests are disabled until triggers are supported with forign
#       keys in innodb (foreign keys tests dispabled - bug 11472) 
#################################################################################
#Section x.x.x.3
# Test case: Similar to 3.5.10.5 but with ten tables to see if multiple triggers 
#            can be executed at once
let $message= Testcase x.x.x.3:;
--source include/show_msg.inc

	--disable_warnings
	DROP TABLE IF EXISTS t1, t2;
	--enable_warnings

	eval CREATE TABLE t0 (col1 char(50)) ENGINE=$engine_type;
	eval CREATE TABLE t1 (id INT NOT NULL, col1 char(50), 
		PRIMARY KEY (id)) ENGINE=$engine_type;
	eval CREATE TABLE t2 (id INT PRIMARY KEY, f_id INT, INDEX par_ind 
		(f_id), col1 char(50), FOREIGN KEY (f_id) REFERENCES t1(id)  
		ON DELETE SET NULL) ENGINE=$engine_type;
	eval CREATE TABLE t3 (id INT PRIMARY KEY, f_id INT, INDEX par_ind 
		(f_id), col1 char(50), FOREIGN KEY (f_id) REFERENCES t1(id)  
		ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=$engine_type;
	eval CREATE TABLE t4 (id INT PRIMARY KEY, f_id INT, INDEX par_ind 
		(f_id), col1 char(50), FOREIGN KEY (f_id) REFERENCES t1(id)  
		ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=$engine_type;
	eval CREATE TABLE t5 (id INT PRIMARY KEY, f_id INT, INDEX par_ind 
		(f_id), col1 char(50), FOREIGN KEY (f_id) REFERENCES t1(id)  
		ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=$engine_type;
	eval CREATE TABLE t6 (id INT PRIMARY KEY, f_id INT, INDEX par_ind 
		(f_id), col1 char(50), FOREIGN KEY (f_id) REFERENCES t1(id)  
		ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=$engine_type;
	eval CREATE TABLE t7 (id INT PRIMARY KEY, f_id INT, INDEX par_ind 
		(f_id), col1 char(50), FOREIGN KEY (f_id) REFERENCES t1(id)  
		ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=$engine_type;
	eval CREATE TABLE t8 (id INT PRIMARY KEY, f_id INT, INDEX par_ind 
		(f_id), col1 char(50), FOREIGN KEY (f_id) REFERENCES t1(id)  
		ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=$engine_type;
	eval CREATE TABLE t9 (id INT PRIMARY KEY, f_id INT, INDEX par_ind 
		(f_id), col1 char(50), FOREIGN KEY (f_id) REFERENCES t1(id)  
		ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=$engine_type;
	eval CREATE TABLE t10(id INT PRIMARY KEY, f_id INT, INDEX par_ind 
		(f_id), col1 char(50), FOREIGN KEY (f_id) REFERENCES t1(id)  
		ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=$engine_type;
	eval CREATE TABLE t11(id INT PRIMARY KEY, f_id INT, INDEX par_ind 
		(f_id), col1 char(50), FOREIGN KEY (f_id) REFERENCES t1(id)  
		ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=$engine_type;

	create trigger tr1 after update on t2 for each row 
		insert into t0 values ('tr_t2');
	create trigger tr2 after update on t3 for each row 
		insert into t0 values ('tr_t3');
	create trigger tr3 after update on t4 for each row 
		insert into t0 values ('tr_t4');
	create trigger tr3 after update on t5 for each row 
		insert into t0 values ('tr_t5');
	create trigger tr4 after update on t6 for each row 
		insert into t0 values ('tr_t6');
	create trigger tr5 after update on t7 for each row 
		insert into t0 values ('tr_t7');
	create trigger tr5 after update on t8 for each row 
		insert into t0 values ('tr_t8');
	create trigger tr6 after update on t9 for each row 
		insert into t0 values ('tr_t9');
	create trigger tr7 after update on t10 for each row 
		insert into t0 values ('tr_t10');
	create trigger tr8 after update on t11 for each row 
		insert into t0 values ('tr_t11');

	insert into t1 values (1,'Department A');
	insert into t1 values (2,'Department B');
	insert into t1 values (3,'Department C');

	insert into t2 values (1,2,'Employee');
	insert into t3 values (1,2,'Employee');
	insert into t4 values (1,2,'Employee');
	insert into t5 values (1,2,'Employee');
	insert into t6 values (1,2,'Employee');
	insert into t7 values (1,2,'Employee');
	insert into t8 values (1,2,'Employee');
	insert into t9 values (1,2,'Employee');
	insert into t10 values (1,2,'Employee');
	insert into t11 values (1,2,'Employee');

	select * from t1;
	select * from t2;
	select * from t3;
	select * from t4;
	select * from t5;
	select * from t6;
	select * from t7;
	select * from t8;
	select * from t9;
	select * from t10;
	select * from t11;

	delete from t1 where id=2;
	select * from t1;
	select * from t2;
	select * from t3;
	select * from t4;
	select * from t5;
	select * from t6;
	select * from t7;
	select * from t8;
	select * from t9;
	select * from t10;
	select * from t11;

	select * from t0;

# Cleanup
	drop trigger tr1;
	drop trigger tr2;
	drop trigger tr3;
	drop trigger tr4;
	drop trigger tr5;
	drop trigger tr6;
	drop trigger tr7;
	drop trigger tr8;
	drop trigger tr9;
	drop trigger tr10;
	drop table t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t1,t0;




#Section 3.5.10.5
# Test case: Ensure that every trigger that should be activated by every possible 
#            type of implicit update of its subject table (e.g. a FOREIGN KEY SET 
#            DEFAULT action or an UPDATE of a view based on the subject table) 
#            is indeed activated correctly. 
let $message= Testcase 3.5.10.5 (foreign keys):;
--source include/show_msg.inc


	--disable_warnings
	DROP TABLE IF EXISTS t1, t2;
	--enable_warnings

	eval CREATE TABLE t1 (id INT NOT NULL, col1 char(50), 
		PRIMARY KEY (id)) ENGINE=$engine_type;
	eval CREATE TABLE t2 (id INT PRIMARY KEY, f_id INT, 
		INDEX par_ind (f_id), col1 char(50), 
		FOREIGN KEY (f_id) REFERENCES t1(id)  
		ON DELETE SET NULL ON UPDATE CASCADE) ENGINE=$engine_type;
	create trigger tr_t2 after update on t2
		for each row set @counter=@counter+1;

	insert into t1 values (1,'Department A');
	insert into t1 values (2,'Department B');
	insert into t1 values (3,'Department C');
	insert into t2 values (1,2,'Emp 1');
	insert into t2 values (2,2,'Emp 2');
	insert into t2 values (3,2,'Emp 3');
	insert into t2 values (4,2,'Emp 4');
	insert into t2 values (5,2,'Emp 5');
	insert into t2 values (6,3,'Emp 6');
	set @counter=0;

	select * from t1;
	select * from t2;
	select @counter;

	update t1 set id=4 where id=3;
	select * from t1;
	select * from t2;
	select @counter;

	delete from t1 where id=2;
	select * from t1;
	select * from t2;
	select @counter;

# This is to verify that the trigger works when updated directly
	update t2 set col1='Emp 5a' where id=5;
	select * from t2;
	select @counter;

# Cleanup
	drop trigger tr_t2;
	drop table t2, t1;


#Section 3.5.10.6
# Test case: Ensure that every trigger that should be activated by every possible 
#            type of implicit deletion from its subject table (e.g. a FOREIGN KEY 
#            CASCADE action or a DELETE from a view based on the subject table) 
#            is indeed activated correctly.
let $message= Testcase 3.5.10.6 (foreign keys):;
--source include/show_msg.inc

	--disable_warnings
	DROP TABLE IF EXISTS t1, t2;
	--enable_warnings
	
	eval CREATE TABLE t1 (id INT NOT NULL, col1 char(50), 
		PRIMARY KEY (id)) ENGINE=$engine_type;
	eval CREATE TABLE t2 (id INT PRIMARY KEY, f_id INT, 
		INDEX par_ind (f_id), col1 char(50), 
		FOREIGN KEY (f_id) REFERENCES t1(id)  
		ON DELETE CASCADE) ENGINE=$engine_type;

	create trigger tr_t2 before delete on t2
		for each row set @counter=@counter+1;

	insert into t1 values (1,'Department A');
	insert into t1 values (2,'Department B');
	insert into t1 values (3,'Department C');
	insert into t2 values (1,2,'Emp 1');
	insert into t2 values (2,2,'Emp 2');
	insert into t2 values (3,2,'Emp 3');
	insert into t2 values (4,2,'Emp 4');
	insert into t2 values (5,2,'Emp 5');
	insert into t2 values (6,3,'Emp 6');
	set @counter=0;

	select * from t1;
	select * from t2;
	select @counter;

	delete from t1 where id=2;

	select * from t1;
	select * from t2;
	select @counter;

# This is to verify that the trigger works when deleted directly
	delete from t2 where id=6;
	select * from t2;
	select @counter;

# Cleanup
	drop trigger tr_t2;
	drop table t2, t1;