mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 14:02:32 +01:00
7dbea7df27
checks on trigger activation) mysql-test/r/information_schema.result: Update result file: a new column DEFINER has been added to INFORMATION_SCHEMA.TRIGGERS. mysql-test/r/mysqldump.result: Update result file: a new column DEFINER has been added to INFORMATION_SCHEMA.TRIGGERS. mysql-test/r/rpl_ddl.result: Update result file: a new column DEFINER has been added to INFORMATION_SCHEMA.TRIGGERS. mysql-test/r/rpl_sp.result: Update result file: a new clause DEFINER has been added to CREATE TRIGGER statement. mysql-test/r/rpl_trigger.result: Results for new test cases were added. mysql-test/r/skip_grants.result: Error message has been changed. mysql-test/r/trigger.result: Added DEFINER column. mysql-test/r/view.result: Error messages have been changed. mysql-test/r/view_grant.result: Error messages have been changed. mysql-test/t/mysqldump.test: Drop created procedure to not affect further tests. mysql-test/t/rpl_trigger.test: Add tests for new column in information schema. mysql-test/t/skip_grants.test: Error tag has been renamed. mysql-test/t/view.test: Error tag has been renamed. mysql-test/t/view_grant.test: Error tag has been changed. sql/item_func.cc: Fix typo in comments. sql/mysql_priv.h: A try to minimize copy&paste: - introduce operations to be used from sql_yacc.yy; - introduce an operation to be used from trigger and view processing code. sql/share/errmsg.txt: - Rename ER_NO_VIEW_USER to ER_MALFORMED_DEFINER in order to be shared for view and trigger implementations; - Fix a typo; - Add a new error code for trigger warning. sql/sp.cc: set_info() was split into set_info() and set_definer(). sql/sp_head.cc: set_info() was split into set_info() and set_definer(). sql/sp_head.h: set_info() was split into set_info() and set_definer(). sql/sql_acl.cc: Add a new check: exit from the cycle if the table is NULL. sql/sql_lex.h: - Rename create_view_definer to definer, since it is used for views and triggers; - Change st_lex_user to LEX_USER, since st_lex_user is a structure. So, formally, it should be "struct st_lex_user", which is longer than just LEX_USER; - Add trigger_definition_begin. sql/sql_parse.cc: - Add a new check: exit from the cycle if the table is NULL; - Implement definer-related functions. sql/sql_show.cc: Add DEFINER column. sql/sql_trigger.cc: Add DEFINER support for triggers. sql/sql_trigger.h: Add DEFINER support for triggers. sql/sql_view.cc: Rename create_view_definer to definer. sql/sql_yacc.yy: Add support for DEFINER-clause in CREATE TRIGGER statement. Since CREATE TRIGGER and CREATE VIEW can be similar at the start, yacc is unable to distinguish between them. So, had to modify both statements in order to make it parsable by yacc. mysql-test/r/trigger-compat.result: Result file for triggers backward compatibility test. mysql-test/r/trigger-grant.result: Result file of the test for WL#2818. mysql-test/t/trigger-compat.test: Triggers backward compatibility test: check that the server still can load triggers w/o definer attribute and modify tables with such triggers (add a new trigger, etc). mysql-test/t/trigger-grant.test: Test for WL#2818 -- check that DEFINER support in triggers works properly
141 lines
3.4 KiB
Text
141 lines
3.4 KiB
Text
#
|
|
# Test of triggers with replication
|
|
#
|
|
|
|
source include/master-slave.inc;
|
|
|
|
#
|
|
# #12482: Triggers has side effects with auto_increment values
|
|
#
|
|
|
|
create table t1 (a int auto_increment, primary key (a), b int, rand_value double not null);
|
|
create table t2 (a int auto_increment, primary key (a), b int);
|
|
create table t3 (a int auto_increment, primary key (a), name varchar(64) not null, old_a int, old_b int, rand_value double not null);
|
|
|
|
delimiter |;
|
|
create trigger t1 before insert on t1 for each row
|
|
begin
|
|
insert into t3 values (NULL, "t1", new.a, new.b, rand());
|
|
end|
|
|
|
|
create trigger t2 after insert on t2 for each row
|
|
begin
|
|
insert into t3 values (NULL, "t2", new.a, new.b, rand());
|
|
end|
|
|
delimiter ;|
|
|
|
|
insert into t3 values(100,"log",0,0,0);
|
|
|
|
# Ensure we always have same random numbers
|
|
SET @@RAND_SEED1=658490765, @@RAND_SEED2=635893186;
|
|
|
|
# Emulate that we have rows 2-9 deleted on the slave
|
|
insert into t1 values(1,1,rand()),(NULL,2,rand());
|
|
insert into t2 (b) values(last_insert_id());
|
|
insert into t2 values(3,0),(NULL,0);
|
|
insert into t2 values(NULL,0),(500,0);
|
|
|
|
select a,b, truncate(rand_value,4) from t1;
|
|
select * from t2;
|
|
select a,name, old_a, old_b, truncate(rand_value,4) from t3;
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|
|
--disable_query_log
|
|
select "--- On slave --" as "";
|
|
--enable_query_log
|
|
select a,b, truncate(rand_value,4) from t1;
|
|
select * from t2;
|
|
select a,name, old_a, old_b, truncate(rand_value,4) from t3;
|
|
connection master;
|
|
drop table t1,t2,t3;
|
|
|
|
#
|
|
# #12480: NOW() is not constant in a trigger
|
|
# #12481: Using NOW() in a stored function breaks statement based replication
|
|
#
|
|
|
|
# Start by getting a lock on 'bug12480' to be able to use get_lock() as sleep()
|
|
connect (con2,localhost,root,,);
|
|
connection con2;
|
|
select get_lock("bug12480",2);
|
|
connection default;
|
|
|
|
create table t1 (a datetime,b datetime, c datetime);
|
|
--ignore_warnings
|
|
drop function if exists bug12480;
|
|
--enable_warnings
|
|
|
|
delimiter |;
|
|
|
|
create function bug12480() returns datetime
|
|
begin
|
|
set @a=get_lock("bug12480",2);
|
|
return now();
|
|
end|
|
|
|
|
create trigger t1_first before insert on t1
|
|
for each row begin
|
|
set @a=get_lock("bug12480",2);
|
|
set new.b= now();
|
|
set new.c= bug12480();
|
|
end
|
|
|
|
|
|
|
delimiter ;|
|
|
insert into t1 set a = now();
|
|
select a=b && a=c from t1;
|
|
let $time=`select a from t1`;
|
|
|
|
# Check that definer attribute is replicated properly:
|
|
# - dump definers on the master;
|
|
# - wait for the slave to synchronize with the master;
|
|
# - dump definers on the slave;
|
|
|
|
SELECT routine_name, definer
|
|
FROM information_schema.routines;
|
|
|
|
SELECT trigger_name, definer
|
|
FROM information_schema.triggers;
|
|
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|
|
--disable_query_log
|
|
select "--- On slave --" as "";
|
|
--enable_query_log
|
|
|
|
# XXX: Definers of stored procedures and functions are not replicated. WL#2897
|
|
# (Complete definer support in the stored routines) addresses this issue. So,
|
|
# the result file is expected to be changed after implementation of this WL
|
|
# item.
|
|
|
|
SELECT routine_name, definer
|
|
FROM information_schema.routines;
|
|
|
|
SELECT trigger_name, definer
|
|
FROM information_schema.triggers;
|
|
|
|
select a=b && a=c from t1;
|
|
--disable_query_log
|
|
eval select a='$time' as 'test' from t1;
|
|
--enable_query_log
|
|
|
|
connection master;
|
|
disconnect con2;
|
|
|
|
truncate table t1;
|
|
drop trigger t1_first;
|
|
|
|
insert into t1 values ("2003-03-03","2003-03-03","2003-03-03"),(bug12480(),bug12480(),bug12480()),(now(),now(),now());
|
|
select a=b && a=c from t1;
|
|
|
|
drop function bug12480;
|
|
drop table t1;
|
|
|
|
#
|
|
# End of test
|
|
#
|
|
save_master_pos;
|
|
connection slave;
|
|
sync_with_master;
|