summaryrefslogtreecommitdiffstats
path: root/mysql-test/suite/funcs_1/triggers/trig_frkey2.inc
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/suite/funcs_1/triggers/trig_frkey2.inc')
-rw-r--r--mysql-test/suite/funcs_1/triggers/trig_frkey2.inc244
1 files changed, 244 insertions, 0 deletions
diff --git a/mysql-test/suite/funcs_1/triggers/trig_frkey2.inc b/mysql-test/suite/funcs_1/triggers/trig_frkey2.inc
new file mode 100644
index 00000000..c3de88a2
--- /dev/null
+++ b/mysql-test/suite/funcs_1/triggers/trig_frkey2.inc
@@ -0,0 +1,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;
+