File: rpl_multiple_trigger.inc

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (122 lines) | stat: -rw-r--r-- 4,578 bytes parent folder | download
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
################################################################################
# This is an auxillary file used by rpl_multiple_trigger.test and
# gr_multiple_trigger.test to test multiple triggers with GR and rpl.
#
# Steps:
# 1. Create tables and a trigger t1_b on master.
# 2. Check that action_order attribute of trigger t1_b is same on both servers.
# 3. Create another trigger t1_a on same table for same action event
#    and timing.
# 4. Check that CREATED, ACTION_ORDER attributes are same on both servers.
# 5. Insert some data to the table on master.
# 6. Ensure that data is consistent on both the servers.
# 7. Clean-up
#
# Usage:
# --let $master= server1
# --let $slave = server2
# --source extra/rpl_tests/rpl_multiple_trigger.inc
#
# $master - master server.
# $slave - slave server.
################################################################################

--echo
--echo #1. Create tables and a trigger t1_b on master.
--let $rpl_connection_name= $master
--source include/rpl_connection.inc
CREATE TABLE t1 (a INT PRIMARY KEY);
CREATE TABLE t2 (a INT PRIMARY KEY, b INT DEFAULT 0);

DELIMITER |;
create trigger t1_b
  after insert on t1
    for each row
    BEGIN
       INSERT INTO t2 VALUES (New.a, @value1);
    END|
DELIMITER ;|
--source include/rpl_sync.inc

--echo
--echo #2. Check that action_order attribute of trigger t1_b is same on both servers.
--let $assert_text= action_order for trigger t1_b must be 1.
--let $assert_cond= [SELECT ACTION_ORDER FROM information_schema.triggers WHERE trigger_schema="test" AND EVENT_OBJECT_TABLE="t1" AND trigger_name="t1_b"]=1;
--source include/assert.inc

--let $rpl_connection_name= $slave
--source include/rpl_connection.inc
--let $assert_text= action_order for trigger t1_b must be 1.
--let $assert_cond= [SELECT ACTION_ORDER FROM information_schema.triggers WHERE trigger_schema="test" AND EVENT_OBJECT_TABLE="t1" AND trigger_name="t1_b"]=1;
--source include/assert.inc

--let $rpl_connection_name= $master
--source include/rpl_connection.inc

--echo
--echo #3. Create another trigger t1_a on t1 for same action event and timing.
DELIMITER |;
create trigger t1_a
  after insert on t1
    for each row PRECEDES t1_b
    BEGIN
       SET @value1:= New.a * 2;
    END|
DELIMITER ;|
--source include/rpl_sync.inc

# Save CREATED attribute on master.
--let $t1a_created1 = `SELECT CREATED FROM information_schema.triggers WHERE trigger_schema='test' AND EVENT_OBJECT_TABLE='t1' AND trigger_name='t1_a'`

--echo
--echo #4. Check that CREATED, ACTION_ORDER attributes are same on both servers.
--let $assert_text= action_order for trigger t1_a must be 1.
--let $assert_cond= [SELECT ACTION_ORDER FROM information_schema.triggers WHERE trigger_schema="test" AND EVENT_OBJECT_TABLE="t1" AND trigger_name="t1_a"]=1;
--source include/assert.inc

--let $assert_text= action_order for trigger t1_b must be 2.
--let $assert_cond= [SELECT ACTION_ORDER FROM information_schema.triggers WHERE trigger_schema="test" AND EVENT_OBJECT_TABLE="t1" AND trigger_name="t1_b"]=2;
--source include/assert.inc

--let $rpl_connection_name= $slave
--source include/rpl_connection.inc
--let $assert_text= action_order for trigger t1_a must be 1.
--let $assert_cond= [SELECT ACTION_ORDER FROM information_schema.triggers WHERE trigger_schema="test" AND EVENT_OBJECT_TABLE="t1" AND trigger_name="t1_a"]=1;
--source include/assert.inc

--let $assert_text= action_order for trigger t1_b must be 2.
--let $assert_cond= [SELECT ACTION_ORDER FROM information_schema.triggers WHERE trigger_schema="test" AND EVENT_OBJECT_TABLE="t1" AND trigger_name="t1_b"]=2;
--source include/assert.inc

--let $t1a_created2 = `SELECT CREATED FROM information_schema.triggers WHERE trigger_schema='test' AND EVENT_OBJECT_TABLE='t1' AND trigger_name='t1_a'`

# Check that both servers has same CREATED attribute.
--let $assert_text= Created attribute for a trigger must be same on both the servers
--let $assert_cond= "$t1a_created2"="$t1a_created1"
--source include/assert.inc

--echo
--echo #5. Insert some data to the table on master.
--let $rpl_connection_name= $master
--source include/rpl_connection.inc
INSERT INTO t1 (a) values (1),(2);

# Delete trigger t1_b
DROP TRIGGER test.t1_b;

INSERT INTO t1 (a) values (3);

--echo
--echo #6. Ensure that data is consistent on both the servers.
--source include/rpl_sync.inc
--let $diff_tables=$master:t1,$slave:t1
--source include/diff_tables.inc

--let $diff_tables=$master:t2,$slave:t2
--source include/diff_tables.inc

--echo
--echo #7. Clean-up
DROP TRIGGER test.t1_a;
DROP TABLE t1;
DROP TABLE t2;