mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-21833 Make slave_run_triggers_for_rbr enforce triggers to run on slave, even when there are triggers on the master
A bit changed patch of Anders Karlsson with examples added. New parameters "ENFORCE" to slave-run-triggers-for-rbr added.
This commit is contained in:
committed by
Andrei Elkin
parent
1f5a8e1f77
commit
980108ceeb
@@ -323,4 +323,120 @@ drop table t1;
|
||||
|
||||
--sync_slave_with_master
|
||||
|
||||
--echo #
|
||||
--echo # enterprise 10.4 tests start
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # MENT-607 : Make slave_run_triggers_for_rbr enforce triggers to run
|
||||
--echo # on slave, even when there are triggers on the master
|
||||
--echo #
|
||||
|
||||
--echo # Triggers on slave WILL work (with ENFORCE) if master has some
|
||||
|
||||
connection master;
|
||||
CREATE TABLE t1 (C1 CHAR(1) primary key, C2 CHAR(1)) engine=innodb;
|
||||
SELECT * FROM t1;
|
||||
|
||||
create trigger t1_dummy before delete on t1 for each row
|
||||
set @dummy= 1;
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
connection slave;
|
||||
SET @old_slave_exec_mode= @@global.slave_exec_mode;
|
||||
SET @old_slave_run_triggers_for_rbr= @@global.slave_run_triggers_for_rbr;
|
||||
SET @@global.slave_exec_mode= IDEMPOTENT;
|
||||
SET @@global.slave_run_triggers_for_rbr= ENFORCE;
|
||||
SELECT * FROM t1;
|
||||
create table t2 (id char(2) primary key, cnt int, o char(1), n char(1));
|
||||
insert into t2 values
|
||||
('u0', 0, ' ', ' '),('u1', 0, ' ', ' '),
|
||||
('d0', 0, ' ', ' '),('d1', 0, ' ', ' '),
|
||||
('i0', 0, ' ', ' '),('i1', 0, ' ', ' ');
|
||||
create trigger t1_cnt_b before update on t1 for each row
|
||||
update t2 set cnt=cnt+1, o=old.C1, n=new.C1 where id = 'u0';
|
||||
create trigger t1_cnt_ib before insert on t1 for each row
|
||||
update t2 set cnt=cnt+1, n=new.C1, o=' ' where id = 'i0';
|
||||
create trigger t1_cnt_a after update on t1 for each row
|
||||
update t2 set cnt=cnt+1, o=old.C1, n=new.C1 where id = 'u1';
|
||||
create trigger t1_cnt_da after delete on t1 for each row
|
||||
update t2 set cnt=cnt+1, o=old.C1, n=' ' where id = 'd1';
|
||||
create trigger t1_cnt_ia after insert on t1 for each row
|
||||
update t2 set cnt=cnt+1, n=new.C1, o=' ' where id = 'i1';
|
||||
SELECT * FROM t2 order by id;
|
||||
|
||||
connection master;
|
||||
--echo # INSERT triggers test
|
||||
insert into t1 values ('a','b');
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
connection slave;
|
||||
SELECT * FROM t2 order by id;
|
||||
|
||||
connection master;
|
||||
|
||||
--echo # UPDATE triggers test
|
||||
update t1 set C1= 'd';
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
connection slave;
|
||||
SELECT * FROM t2 order by id;
|
||||
|
||||
connection master;
|
||||
--echo # DELETE triggers test
|
||||
delete from t1 where C1='d';
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
connection slave;
|
||||
SELECT * FROM t2 order by id;
|
||||
|
||||
--echo # INSERT triggers which cause also UPDATE test (insert duplicate row)
|
||||
insert into t1 values ('0','1');
|
||||
|
||||
SELECT * FROM t2 order by id;
|
||||
|
||||
connection master;
|
||||
|
||||
insert into t1 values ('0','1');
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
connection slave;
|
||||
SELECT * FROM t2 order by id;
|
||||
|
||||
|
||||
--echo # INSERT triggers which cause also DELETE test
|
||||
--echo # (insert duplicate row in table referenced by foreign key)
|
||||
insert into t1 values ('1','1');
|
||||
|
||||
connection master;
|
||||
|
||||
CREATE TABLE t3 (C1 CHAR(1) primary key, FOREIGN KEY (C1) REFERENCES t1(C1) ) engine=innodb;
|
||||
|
||||
insert into t1 values ('1','1');
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
connection slave;
|
||||
SELECT * FROM t2 order by id;
|
||||
|
||||
connection master;
|
||||
|
||||
drop table t3,t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
connection slave;
|
||||
SET @@global.slave_exec_mode= @old_slave_exec_mode;
|
||||
SET @@global.slave_run_triggers_for_rbr= @old_slave_run_triggers_for_rbr;
|
||||
drop table t2;
|
||||
|
||||
--echo #
|
||||
--echo # enterprise 10.4 tests end
|
||||
--echo #
|
||||
|
||||
--source include/rpl_end.inc
|
||||
|
Reference in New Issue
Block a user