mirror of
https://github.com/MariaDB/server.git
synced 2026-01-06 05:22:24 +03:00
MDEV-6112 multiple triggers per table
This is similar to MysQL Worklog 3253, but with a different implementation. The disk format and SQL syntax is identical with MySQL 5.7. Fetures supported: - "Any" ammount of any trigger - Supports FOLLOWS and PRECEDES to be able to put triggers in a certain execution order. Implementation details: - Class Trigger added to hold information about a trigger. Before this trigger information was stored in a set of lists in Table_triggers_list and in Table_triggers_list::bodies - Each Trigger has a next field that poinst to the next Trigger with the same action and time. - When accessing a trigger, we now always access all linked triggers - The list are now only used to load and save trigger files. - MySQL trigger test case (trigger_wl3253) added and we execute these identically. - Even more gracefully handling of wrong trigger files than before. This is useful if a trigger file uses functions or syntax not provided by the server. - Each trigger now has a "Created" field that shows when the trigger was created, with 2 decimals. Other comments: - Many of the changes in test files was done because of the new "Created" field in the trigger file. This shows up in SHOW ... TRIGGER and when using information_schema.trigger. - Don't check if all memory is released if on uses --gdb; This is needed to be able to get a list from safemalloc of not freed memory while debugging. - Added option to trim_whitespace() to know how many prefix characters was skipped. - Changed a few ulonglong sql_mode to sql_mode_t, to find some wrong usage of sql_mode.
This commit is contained in:
@@ -120,6 +120,7 @@ let $message= no trigger privilege on table level for create:;
|
||||
|
||||
connection default;
|
||||
select current_user;
|
||||
--replace_column 6 #
|
||||
show triggers;
|
||||
grant TRIGGER on priv1_db.t1 to test_yesprivs@localhost;
|
||||
show grants for test_yesprivs@localhost;
|
||||
@@ -128,6 +129,7 @@ let $message= trigger privilege on table level for create:;
|
||||
--source include/show_msg.inc
|
||||
connection yes_privs;
|
||||
select current_user;
|
||||
--replace_column 6 #
|
||||
show triggers;
|
||||
create trigger trg1_2 before INSERT on t1 for each row
|
||||
set new.f1 = 'trig 1_2-yes';
|
||||
|
||||
@@ -84,6 +84,7 @@ let $message= trigger privilege on user level for create:;
|
||||
connect (yes_privs,localhost,test_yesprivs,PWD,test,$MASTER_MYPORT,$MASTER_MYSOCK);
|
||||
select current_user;
|
||||
use priv_db;
|
||||
--replace_column 6 #
|
||||
show triggers;
|
||||
select * from information_schema.triggers;
|
||||
--error ER_TABLEACCESS_DENIED_ERROR
|
||||
|
||||
@@ -36,6 +36,7 @@ let $message= #### Testcase for trigger privilege on execution time ########;
|
||||
|
||||
connection default;
|
||||
select current_user;
|
||||
--replace_column 6 #
|
||||
show triggers;
|
||||
grant select, insert, update ,trigger
|
||||
on priv_db.t1 to test_yesprivs@localhost
|
||||
|
||||
@@ -44,6 +44,7 @@ let $message= no trigger privilege on table level for create:;
|
||||
--source include/show_msg.inc
|
||||
connection default;
|
||||
select current_user;
|
||||
--replace_column 6 #
|
||||
show triggers;
|
||||
grant select, insert, update on priv_db.t1 to test_yesprivs@localhost;
|
||||
show grants for test_yesprivs@localhost;
|
||||
@@ -68,6 +69,7 @@ let $message= no trigger privilege on table level for create:;
|
||||
|
||||
connection default;
|
||||
select current_user;
|
||||
--replace_column 6 #
|
||||
show triggers;
|
||||
show tables;
|
||||
insert into t1 (f1) values ('insert2-yes');
|
||||
@@ -81,6 +83,7 @@ let $message= trigger privilege on table level for create:;
|
||||
--source include/show_msg.inc
|
||||
connection yes_privs;
|
||||
select current_user;
|
||||
--replace_column 6 #
|
||||
show triggers;
|
||||
create trigger trg1_2 before INSERT on t1 for each row
|
||||
set new.f1 = 'trig 1_2-yes';
|
||||
@@ -179,6 +182,7 @@ let $message= use table with trigger privilege and without...:;
|
||||
set new.f1 = 'trig 2_2-no';
|
||||
create trigger trg1_4 before UPDATE on t1 for each row
|
||||
set new.f1 = 'trig 1_4-yes';
|
||||
--replace_column 6 #
|
||||
show triggers;
|
||||
connection no_privs;
|
||||
select current_user;
|
||||
|
||||
@@ -420,16 +420,15 @@ let $message= Testcase 3.5.7.4:;
|
||||
--enable_warnings
|
||||
|
||||
#Section 3.5.7.5 / 3.5.7.6
|
||||
# Test case: Ensure that it is not possible to create multiple BEFORE INSERT triggers
|
||||
# on the same table, even if the triggers have different names / different
|
||||
# triggered actions.
|
||||
# Test case: Ensure that it is possible to create multiple BEFORE INSERT
|
||||
# triggers on the same table
|
||||
#
|
||||
let $message= Testcase 3.5.7.5 / 3.5.7.6:;
|
||||
--source include/show_msg.inc
|
||||
|
||||
Create trigger trg5_1 BEFORE INSERT
|
||||
on tb3 for each row set new.f122='Trigger1 3.5.7.5/6';
|
||||
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
Create trigger trg5_2 BEFORE INSERT
|
||||
on tb3 for each row set new.f122='Trigger2 3.5.7.5';
|
||||
|
||||
@@ -441,16 +440,14 @@ let $message= Testcase 3.5.7.5 / 3.5.7.6:;
|
||||
#Cleanup
|
||||
--disable_warnings
|
||||
drop trigger trg5_1;
|
||||
--error 0, ER_TRG_DOES_NOT_EXIST
|
||||
drop trigger trg5_2;
|
||||
delete from tb3 where f121='Test 3.5.7.5/6';
|
||||
--enable_warnings
|
||||
|
||||
|
||||
#Section 3.5.7.7 / 3.5.7.8
|
||||
# Test case: Ensure that it is not possible to create multiple AFTER INSERT triggers
|
||||
# on the same table, even if the triggers have different names / different
|
||||
# triggered actions.
|
||||
# Test case: Ensure that it is possible to create multiple AFTER INSERT
|
||||
# triggers on the same table
|
||||
let $message= Testcase 3.5.7.7 / 3.5.7.8:;
|
||||
--source include/show_msg.inc
|
||||
|
||||
@@ -458,7 +455,6 @@ let $message= Testcase 3.5.7.7 / 3.5.7.8:;
|
||||
Create trigger trg6_1 AFTER INSERT
|
||||
on tb3 for each row set @test_var='Trigger1 3.5.7.7/8';
|
||||
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
Create trigger trg6_2 AFTER INSERT
|
||||
on tb3 for each row set @test_var='Trigger2 3.5.7.7';
|
||||
|
||||
@@ -473,23 +469,20 @@ let $message= Testcase 3.5.7.7 / 3.5.7.8:;
|
||||
#Cleanup
|
||||
--disable_warnings
|
||||
drop trigger trg6_1;
|
||||
--error 0, ER_TRG_DOES_NOT_EXIST
|
||||
drop trigger trg6_2;
|
||||
delete from tb3 where f121='Test 3.5.7.7/8';
|
||||
--enable_warnings
|
||||
|
||||
|
||||
#Section 3.5.7.9 / 3.5.7.10
|
||||
# Test case: Ensure that it is not possible to create multiple BEFORE UPDATE triggers
|
||||
# on the same table, even if the triggers have different names / different
|
||||
# triggered actions.
|
||||
# Test case: Ensure that it is possible to create multiple BEFORE UPDATE
|
||||
# triggers on the same table
|
||||
let $message= Testcase 3.5.7.9/10:;
|
||||
--source include/show_msg.inc
|
||||
|
||||
Create trigger trg7_1 BEFORE UPDATE
|
||||
on tb3 for each row set new.f122='Trigger1 3.5.7.9/10';
|
||||
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
Create trigger trg7_2 BEFORE UPDATE
|
||||
on tb3 for each row set new.f122='Trigger2 3.5.7.9';
|
||||
|
||||
@@ -501,14 +494,12 @@ let $message= Testcase 3.5.7.9/10:;
|
||||
#Cleanup
|
||||
--disable_warnings
|
||||
drop trigger trg7_1;
|
||||
--error 0, ER_TRG_DOES_NOT_EXIST
|
||||
drop trigger trg7_2;
|
||||
delete from tb3 where f121='Test 3.5.7.9/10';
|
||||
|
||||
#Section 3.5.7.11 / 3.5.7.12
|
||||
# Test case: Ensure that it is not possible to create multiple AFTER UPDATE triggers
|
||||
# on the same table, even if the triggers have different names / different
|
||||
# triggered actions.
|
||||
# Test case: Ensure that it is possible to create multiple AFTER UPDATE
|
||||
# triggers on the same table
|
||||
let $message= Testcase 3.5.7.11/12:;
|
||||
--source include/show_msg.inc
|
||||
|
||||
@@ -516,11 +507,9 @@ let $message= Testcase 3.5.7.11/12:;
|
||||
Create trigger trg8_1 AFTER UPDATE
|
||||
on tb3 for each row set @test_var='Trigger 3.5.7.11/12';
|
||||
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
Create trigger trg8_2 AFTER UPDATE
|
||||
on tb3 for each row set @test_var='Trigger2 3.5.7.11';
|
||||
|
||||
|
||||
select @test_var;
|
||||
Insert into tb3 (f121,f122) values ('Test 3.5.7.11/12','Insert 3.5.7.11/12');
|
||||
select @test_var;
|
||||
@@ -533,14 +522,12 @@ let $message= Testcase 3.5.7.11/12:;
|
||||
#Cleanup
|
||||
--disable_warnings
|
||||
drop trigger trg8_1;
|
||||
--error 0, ER_TRG_DOES_NOT_EXIST
|
||||
drop trigger trg8_2;
|
||||
delete from tb3 where f121='Test 3.5.7.11/12';
|
||||
|
||||
#Section 3.5.7.13 / 3.5.7.14
|
||||
# Test case: Ensure that it is not possible to create multiple BEFORE DELETE triggers
|
||||
# on the same table, even if the triggers have different names / different
|
||||
# triggered actions.
|
||||
# Test case: Ensure that it is possible to create multiple BEFORE DELETE
|
||||
# triggers on the same table
|
||||
let $message= Testcase 3.5.7.13/14:;
|
||||
--source include/show_msg.inc
|
||||
|
||||
@@ -548,7 +535,6 @@ let $message= Testcase 3.5.7.13/14:;
|
||||
Create trigger trg9_1 BEFORE DELETE
|
||||
on tb3 for each row set @test_var=@test_var+1;
|
||||
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
Create trigger trg9_2 BEFORE DELETE
|
||||
on tb3 for each row set @test_var=@test_var+10;
|
||||
|
||||
@@ -565,14 +551,12 @@ let $message= Testcase 3.5.7.13/14:;
|
||||
#Cleanup
|
||||
--disable_warnings
|
||||
drop trigger trg9_1;
|
||||
--error 0, ER_TRG_DOES_NOT_EXIST
|
||||
drop trigger trg9_2;
|
||||
delete from tb3 where f121='Test 3.5.7.13/14';
|
||||
|
||||
#Section 3.5.7.15 / 3.5.7.16
|
||||
# Test case: Ensure that it is not possible to create multiple AFTER DELETE triggers
|
||||
# on the same table, even if the triggers have different names / different
|
||||
# triggered actions.
|
||||
# Test case: Ensure that possible to create multiple AFTER DELETE triggers
|
||||
# on the same table
|
||||
let $message= Testcase 3.5.7.15/16:;
|
||||
--source include/show_msg.inc
|
||||
|
||||
@@ -580,7 +564,6 @@ let $message= Testcase 3.5.7.15/16:;
|
||||
Create trigger trg_3_406010_1 AFTER DELETE
|
||||
on tb3 for each row set @test_var=@test_var+5;
|
||||
|
||||
--error ER_NOT_SUPPORTED_YET
|
||||
Create trigger trg_3_406010_2 AFTER DELETE
|
||||
on tb3 for each row set @test_var=@test_var+50;
|
||||
|
||||
@@ -601,7 +584,6 @@ let $message= Testcase 3.5.7.15/16:;
|
||||
#Cleanup
|
||||
--disable_warnings
|
||||
drop trigger trg_3_406010_1;
|
||||
--error 0, ER_TRG_DOES_NOT_EXIST
|
||||
drop trigger trg_3_406010_2;
|
||||
delete from tb3 where f121='Test 3.5.7.15/16';
|
||||
--enable_warnings
|
||||
|
||||
Reference in New Issue
Block a user