Skip to content

Commit 9057f74

Browse files
MDEV-36996: Implement INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS table
MariaDB 11.8 and above allows to specify list of columns in the update trigger and such trigger is fired only when one of the specified columns is updated. The `INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS` table lists all such columns for a trigger. A column is shown only if the user has any non-SELECT privileges on the column specified in the trigger.
1 parent b10e209 commit 9057f74

19 files changed

+977
-2
lines changed

mysql-test/main/information_schema-big.result

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ TABLESPACES TABLESPACE_NAME
6262
TABLE_CONSTRAINTS CONSTRAINT_SCHEMA
6363
TABLE_PRIVILEGES TABLE_SCHEMA
6464
TABLE_STATISTICS TABLE_SCHEMA
65+
TRIGGERED_UPDATE_COLUMNS TRIGGER_SCHEMA
6566
TRIGGERS TRIGGER_SCHEMA
6667
USERS USER
6768
USER_PRIVILEGES GRANTEE
@@ -128,6 +129,7 @@ TABLESPACES TABLESPACE_NAME
128129
TABLE_CONSTRAINTS CONSTRAINT_SCHEMA
129130
TABLE_PRIVILEGES TABLE_SCHEMA
130131
TABLE_STATISTICS TABLE_SCHEMA
132+
TRIGGERED_UPDATE_COLUMNS TRIGGER_SCHEMA
131133
TRIGGERS TRIGGER_SCHEMA
132134
USERS USER
133135
USER_PRIVILEGES GRANTEE

mysql-test/main/information_schema-big_embedded.result

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ TABLESPACES TABLESPACE_NAME
6161
TABLE_CONSTRAINTS CONSTRAINT_SCHEMA
6262
TABLE_PRIVILEGES TABLE_SCHEMA
6363
TABLE_STATISTICS TABLE_SCHEMA
64+
TRIGGERED_UPDATE_COLUMNS TRIGGER_SCHEMA
6465
TRIGGERS TRIGGER_SCHEMA
6566
USERS USER
6667
USER_PRIVILEGES GRANTEE
@@ -126,6 +127,7 @@ TABLESPACES TABLESPACE_NAME
126127
TABLE_CONSTRAINTS CONSTRAINT_SCHEMA
127128
TABLE_PRIVILEGES TABLE_SCHEMA
128129
TABLE_STATISTICS TABLE_SCHEMA
130+
TRIGGERED_UPDATE_COLUMNS TRIGGER_SCHEMA
129131
TRIGGERS TRIGGER_SCHEMA
130132
USERS USER
131133
USER_PRIVILEGES GRANTEE

mysql-test/main/information_schema.result

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ TABLESPACES
9595
TABLE_CONSTRAINTS
9696
TABLE_PRIVILEGES
9797
TABLE_STATISTICS
98+
TRIGGERED_UPDATE_COLUMNS
9899
TRIGGERS
99100
USERS
100101
USER_PRIVILEGES
@@ -144,6 +145,7 @@ TABLESPACES TABLESPACES
144145
TABLE_CONSTRAINTS TABLE_CONSTRAINTS
145146
TABLE_PRIVILEGES TABLE_PRIVILEGES
146147
TABLE_STATISTICS TABLE_STATISTICS
148+
TRIGGERED_UPDATE_COLUMNS TRIGGERED_UPDATE_COLUMNS
147149
TRIGGERS TRIGGERS
148150
t1 t1
149151
t2 t2
@@ -167,6 +169,7 @@ TABLESPACES TABLESPACES
167169
TABLE_CONSTRAINTS TABLE_CONSTRAINTS
168170
TABLE_PRIVILEGES TABLE_PRIVILEGES
169171
TABLE_STATISTICS TABLE_STATISTICS
172+
TRIGGERED_UPDATE_COLUMNS TRIGGERED_UPDATE_COLUMNS
170173
TRIGGERS TRIGGERS
171174
t1 t1
172175
t2 t2
@@ -190,6 +193,7 @@ TABLESPACES TABLESPACES
190193
TABLE_CONSTRAINTS TABLE_CONSTRAINTS
191194
TABLE_PRIVILEGES TABLE_PRIVILEGES
192195
TABLE_STATISTICS TABLE_STATISTICS
196+
TRIGGERED_UPDATE_COLUMNS TRIGGERED_UPDATE_COLUMNS
193197
TRIGGERS TRIGGERS
194198
t1 t1
195199
t2 t2
@@ -734,6 +738,7 @@ TABLESPACES
734738
TABLE_CONSTRAINTS
735739
TABLE_PRIVILEGES
736740
TABLE_STATISTICS
741+
TRIGGERED_UPDATE_COLUMNS
737742
TRIGGERS
738743
create database information_schema;
739744
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
@@ -745,6 +750,7 @@ TABLESPACES SYSTEM VIEW
745750
TABLE_CONSTRAINTS SYSTEM VIEW
746751
TABLE_PRIVILEGES SYSTEM VIEW
747752
TABLE_STATISTICS SYSTEM VIEW
753+
TRIGGERED_UPDATE_COLUMNS SYSTEM VIEW
748754
TRIGGERS SYSTEM VIEW
749755
create table t1(a int);
750756
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
@@ -759,6 +765,7 @@ TABLESPACES
759765
TABLE_CONSTRAINTS
760766
TABLE_PRIVILEGES
761767
TABLE_STATISTICS
768+
TRIGGERED_UPDATE_COLUMNS
762769
TRIGGERS
763770
select table_name from tables where table_name='user';
764771
table_name

mysql-test/main/information_schema_all_engines.result

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ TABLESPACES
6868
TABLE_CONSTRAINTS
6969
TABLE_PRIVILEGES
7070
TABLE_STATISTICS
71+
TRIGGERED_UPDATE_COLUMNS
7172
TRIGGERS
7273
USERS
7374
USER_PRIVILEGES
@@ -155,6 +156,7 @@ TABLESPACES TABLESPACE_NAME
155156
TABLE_CONSTRAINTS CONSTRAINT_SCHEMA
156157
TABLE_PRIVILEGES TABLE_SCHEMA
157158
TABLE_STATISTICS TABLE_SCHEMA
159+
TRIGGERED_UPDATE_COLUMNS TRIGGER_SCHEMA
158160
TRIGGERS TRIGGER_SCHEMA
159161
USERS USER
160162
USER_PRIVILEGES GRANTEE
@@ -242,6 +244,7 @@ TABLESPACES TABLESPACE_NAME
242244
TABLE_CONSTRAINTS CONSTRAINT_SCHEMA
243245
TABLE_PRIVILEGES TABLE_SCHEMA
244246
TABLE_STATISTICS TABLE_SCHEMA
247+
TRIGGERED_UPDATE_COLUMNS TRIGGER_SCHEMA
245248
TRIGGERS TRIGGER_SCHEMA
246249
USERS USER
247250
USER_PRIVILEGES GRANTEE
@@ -328,6 +331,7 @@ TABLESPACES information_schema.TABLESPACES 1
328331
TABLE_CONSTRAINTS information_schema.TABLE_CONSTRAINTS 1
329332
TABLE_PRIVILEGES information_schema.TABLE_PRIVILEGES 1
330333
TABLE_STATISTICS information_schema.TABLE_STATISTICS 1
334+
TRIGGERED_UPDATE_COLUMNS information_schema.TRIGGERED_UPDATE_COLUMNS 1
331335
TRIGGERS information_schema.TRIGGERS 1
332336
USERS information_schema.USERS 1
333337
USER_PRIVILEGES information_schema.USER_PRIVILEGES 1
@@ -405,6 +409,7 @@ Database: information_schema
405409
| TABLE_CONSTRAINTS |
406410
| TABLE_PRIVILEGES |
407411
| TABLE_STATISTICS |
412+
| TRIGGERED_UPDATE_COLUMNS |
408413
| TRIGGERS |
409414
| USERS |
410415
| USER_PRIVILEGES |
@@ -482,6 +487,7 @@ Database: INFORMATION_SCHEMA
482487
| TABLE_CONSTRAINTS |
483488
| TABLE_PRIVILEGES |
484489
| TABLE_STATISTICS |
490+
| TRIGGERED_UPDATE_COLUMNS |
485491
| TRIGGERS |
486492
| USERS |
487493
| USER_PRIVILEGES |
@@ -495,5 +501,5 @@ Wildcard: inf_rmation_schema
495501
| information_schema |
496502
SELECT table_schema, count(*) FROM information_schema.TABLES WHERE table_schema IN ('mysql', 'INFORMATION_SCHEMA', 'test', 'mysqltest') GROUP BY TABLE_SCHEMA;
497503
table_schema count(*)
498-
information_schema 72
504+
information_schema 73
499505
mysql 31

mysql-test/main/information_schema_db.result

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ TABLESPACES
77
TABLE_CONSTRAINTS
88
TABLE_PRIVILEGES
99
TABLE_STATISTICS
10+
TRIGGERED_UPDATE_COLUMNS
1011
TRIGGERS
1112
create database `inf%`;
1213
create database mbase;

mysql-test/main/trigger.result

Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2960,3 +2960,107 @@ DROP TABLE t1, t2;
29602960
#
29612961
# End of 11.8 tests
29622962
#
2963+
#
2964+
# MDEV-36996: Implement INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS table
2965+
#
2966+
CREATE TABLE t (a INT, b INT, c INT);
2967+
INSERT INTO t VALUES (1, 2, 3);
2968+
CREATE TABLE t1 (a_old INT, b_old INT, a_new INT, b_new INT);
2969+
CREATE TABLE t2 (a_old INT, b_old INT, a_new INT, b_new INT);
2970+
# Test BEFORE UPDATE trigger
2971+
CREATE TRIGGER trigger_before_update BEFORE UPDATE OF a, b ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b, NEW.a, NEW.b);
2972+
UPDATE t SET a = 10 WHERE a = 1;
2973+
SELECT * FROM t;
2974+
a b c
2975+
10 2 3
2976+
SELECT * FROM t1;
2977+
a_old b_old a_new b_new
2978+
1 2 10 2
2979+
SHOW CREATE TRIGGER trigger_before_update;
2980+
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created
2981+
trigger_before_update # CREATE DEFINER=`root`@`localhost` TRIGGER trigger_before_update BEFORE UPDATE OF a, b ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b, NEW.a, NEW.b) # # # #
2982+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_before_update';
2983+
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE EVENT_OBJECT_COLUMN
2984+
def test trigger_before_update def test t a
2985+
def test trigger_before_update def test t b
2986+
# Test AFTER UPDATE trigger
2987+
CREATE TRIGGER trigger_after_update AFTER UPDATE OF a, b ON t FOR EACH ROW INSERT INTO t2 VALUES (OLD.a, OLD.b, NEW.a, NEW.b);
2988+
UPDATE t SET a = -10 WHERE a = 10;
2989+
SELECT * FROM t;
2990+
a b c
2991+
-10 2 3
2992+
SELECT * FROM t2;
2993+
a_old b_old a_new b_new
2994+
10 2 -10 2
2995+
SHOW CREATE TRIGGER trigger_after_update;
2996+
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created
2997+
trigger_after_update # CREATE DEFINER=`root`@`localhost` TRIGGER trigger_after_update AFTER UPDATE OF a, b ON t FOR EACH ROW INSERT INTO t2 VALUES (OLD.a, OLD.b, NEW.a, NEW.b) # # # #
2998+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_after_update';
2999+
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE EVENT_OBJECT_COLUMN
3000+
def test trigger_after_update def test t a
3001+
def test trigger_after_update def test t b
3002+
DROP TABLE t1, t2;
3003+
# Multiple triggers on same table but on different columns
3004+
CREATE TABLE t1 (a_old INT, a_new INT);
3005+
CREATE TABLE t2 (b_old INT, b_new INT);
3006+
CREATE TABLE t3 (c_old INT, c_new INT);
3007+
CREATE TRIGGER t_bu1 BEFORE UPDATE OF a ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, NEW.a);
3008+
CREATE TRIGGER t_bu2 BEFORE UPDATE OF b ON t FOR EACH ROW INSERT INTO t2 VALUES (OLD.b, NEW.b);
3009+
CREATE TRIGGER t_au1 AFTER UPDATE OF c ON t FOR EACH ROW INSERT INTO t3 VALUES (OLD.c, NEW.c);
3010+
SHOW CREATE TRIGGER t_bu1;
3011+
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created
3012+
t_bu1 # CREATE DEFINER=`root`@`localhost` TRIGGER t_bu1 BEFORE UPDATE OF a ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, NEW.a) # # # #
3013+
SHOW CREATE TRIGGER t_bu2;
3014+
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created
3015+
t_bu2 # CREATE DEFINER=`root`@`localhost` TRIGGER t_bu2 BEFORE UPDATE OF b ON t FOR EACH ROW INSERT INTO t2 VALUES (OLD.b, NEW.b) # # # #
3016+
SHOW CREATE TRIGGER t_au1;
3017+
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created
3018+
t_au1 # CREATE DEFINER=`root`@`localhost` TRIGGER t_au1 AFTER UPDATE OF c ON t FOR EACH ROW INSERT INTO t3 VALUES (OLD.c, NEW.c) # # # #
3019+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME LIKE 't\_%';
3020+
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE EVENT_OBJECT_COLUMN
3021+
def test t_bu1 def test t a
3022+
def test t_bu2 def test t b
3023+
def test t_au1 def test t c
3024+
DROP TABLE t1, t2, t3, t;
3025+
# Tests with Multi-update
3026+
CREATE TABLE t (a INT, b INT, c INT);
3027+
INSERT INTO t VALUES (1, 2, -3), (2, 3, -4);
3028+
CREATE TABLE t1 (a INT, b INT);
3029+
CREATE TABLE t2 (a INT, b INT);
3030+
# Test Multi-update with BEFORE_UPDATE trigger
3031+
CREATE TRIGGER trigger_before_update BEFORE UPDATE OF b ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b);
3032+
UPDATE t, t1 SET t.c = t.c + 10 WHERE t.b = t1.a;
3033+
SHOW CREATE TRIGGER trigger_before_update;
3034+
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created
3035+
trigger_before_update # CREATE DEFINER=`root`@`localhost` TRIGGER trigger_before_update BEFORE UPDATE OF b ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b) # # # #
3036+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_before_update';
3037+
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE EVENT_OBJECT_COLUMN
3038+
def test trigger_before_update def test t b
3039+
# Test Multi-update with AFTER_UPDATE trigger
3040+
CREATE TRIGGER trigger_after_update AFTER UPDATE OF a ON t FOR EACH ROW INSERT INTO t2 VALUES (OLD.a, OLD.b);
3041+
SHOW CREATE TRIGGER trigger_after_update;
3042+
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created
3043+
trigger_after_update # CREATE DEFINER=`root`@`localhost` TRIGGER trigger_after_update AFTER UPDATE OF a ON t FOR EACH ROW INSERT INTO t2 VALUES (OLD.a, OLD.b) # # # #
3044+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_after_update';
3045+
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE EVENT_OBJECT_COLUMN
3046+
def test trigger_after_update def test t a
3047+
DROP TABLE t, t1, t2;
3048+
# Test with normal trigger without list of columns. This should not list any rows in TRIGGERED_UPDATE_COLUMNS
3049+
CREATE TABLE t (a INT, b INT, c INT);
3050+
INSERT INTO t VALUES (1, 2, -3), (2, 3, -4);
3051+
CREATE TABLE t1 (a INT, b INT);
3052+
CREATE TRIGGER trigger_before_update BEFORE UPDATE ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b);
3053+
SHOW CREATE TRIGGER trigger_before_update;
3054+
Trigger sql_mode SQL Original Statement character_set_client collation_connection Database Collation Created
3055+
trigger_before_update # CREATE DEFINER=`root`@`localhost` TRIGGER trigger_before_update BEFORE UPDATE ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b) # # # #
3056+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_before_update';
3057+
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE EVENT_OBJECT_COLUMN
3058+
# Trigger on view is not supported in mariadb
3059+
CREATE VIEW vt AS SELECT * FROM t;
3060+
CREATE TRIGGER t_on_view BEFORE UPDATE OF a, b ON vt FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b);
3061+
ERROR HY000: 'test.vt' is not of type 'BASE TABLE'
3062+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 't_on_view';
3063+
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE EVENT_OBJECT_COLUMN
3064+
DROP VIEW IF EXISTS vt;
3065+
DROP TABLE t, t1;
3066+
# End of 12.2 tests

mysql-test/main/trigger.test

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3304,3 +3304,103 @@ DROP TABLE t1, t2;
33043304
--echo #
33053305
--echo # End of 11.8 tests
33063306
--echo #
3307+
3308+
--echo #
3309+
--echo # MDEV-36996: Implement INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS table
3310+
--echo #
3311+
3312+
CREATE TABLE t (a INT, b INT, c INT);
3313+
INSERT INTO t VALUES (1, 2, 3);
3314+
CREATE TABLE t1 (a_old INT, b_old INT, a_new INT, b_new INT);
3315+
CREATE TABLE t2 (a_old INT, b_old INT, a_new INT, b_new INT);
3316+
3317+
--echo # Test BEFORE UPDATE trigger
3318+
CREATE TRIGGER trigger_before_update BEFORE UPDATE OF a, b ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b, NEW.a, NEW.b);
3319+
3320+
UPDATE t SET a = 10 WHERE a = 1;
3321+
SELECT * FROM t;
3322+
SELECT * FROM t1;
3323+
3324+
--replace_column 2 # 4 # 5 # 6 # 7 # 8 #
3325+
SHOW CREATE TRIGGER trigger_before_update;
3326+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_before_update';
3327+
3328+
--echo # Test AFTER UPDATE trigger
3329+
CREATE TRIGGER trigger_after_update AFTER UPDATE OF a, b ON t FOR EACH ROW INSERT INTO t2 VALUES (OLD.a, OLD.b, NEW.a, NEW.b);
3330+
3331+
UPDATE t SET a = -10 WHERE a = 10;
3332+
SELECT * FROM t;
3333+
SELECT * FROM t2;
3334+
3335+
--replace_column 2 # 4 # 5 # 6 # 7 # 8 #
3336+
SHOW CREATE TRIGGER trigger_after_update;
3337+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_after_update';
3338+
3339+
# Cleanup
3340+
DROP TABLE t1, t2;
3341+
3342+
--echo # Multiple triggers on same table but on different columns
3343+
CREATE TABLE t1 (a_old INT, a_new INT);
3344+
CREATE TABLE t2 (b_old INT, b_new INT);
3345+
CREATE TABLE t3 (c_old INT, c_new INT);
3346+
3347+
CREATE TRIGGER t_bu1 BEFORE UPDATE OF a ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, NEW.a);
3348+
CREATE TRIGGER t_bu2 BEFORE UPDATE OF b ON t FOR EACH ROW INSERT INTO t2 VALUES (OLD.b, NEW.b);
3349+
CREATE TRIGGER t_au1 AFTER UPDATE OF c ON t FOR EACH ROW INSERT INTO t3 VALUES (OLD.c, NEW.c);
3350+
3351+
--replace_column 2 # 4 # 5 # 6 # 7 # 8 #
3352+
SHOW CREATE TRIGGER t_bu1;
3353+
--replace_column 2 # 4 # 5 # 6 # 7 # 8 #
3354+
SHOW CREATE TRIGGER t_bu2;
3355+
--replace_column 2 # 4 # 5 # 6 # 7 # 8 #
3356+
SHOW CREATE TRIGGER t_au1;
3357+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME LIKE 't\_%';
3358+
3359+
# Cleanup
3360+
DROP TABLE t1, t2, t3, t;
3361+
3362+
--echo # Tests with Multi-update
3363+
CREATE TABLE t (a INT, b INT, c INT);
3364+
INSERT INTO t VALUES (1, 2, -3), (2, 3, -4);
3365+
CREATE TABLE t1 (a INT, b INT);
3366+
CREATE TABLE t2 (a INT, b INT);
3367+
3368+
--echo # Test Multi-update with BEFORE_UPDATE trigger
3369+
CREATE TRIGGER trigger_before_update BEFORE UPDATE OF b ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b);
3370+
UPDATE t, t1 SET t.c = t.c + 10 WHERE t.b = t1.a;
3371+
3372+
--replace_column 2 # 4 # 5 # 6 # 7 # 8 #
3373+
SHOW CREATE TRIGGER trigger_before_update;
3374+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_before_update';
3375+
3376+
--echo # Test Multi-update with AFTER_UPDATE trigger
3377+
CREATE TRIGGER trigger_after_update AFTER UPDATE OF a ON t FOR EACH ROW INSERT INTO t2 VALUES (OLD.a, OLD.b);
3378+
3379+
--replace_column 2 # 4 # 5 # 6 # 7 # 8 #
3380+
SHOW CREATE TRIGGER trigger_after_update;
3381+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_after_update';
3382+
3383+
# Cleanup
3384+
DROP TABLE t, t1, t2;
3385+
3386+
--echo # Test with normal trigger without list of columns. This should not list any rows in TRIGGERED_UPDATE_COLUMNS
3387+
CREATE TABLE t (a INT, b INT, c INT);
3388+
INSERT INTO t VALUES (1, 2, -3), (2, 3, -4);
3389+
CREATE TABLE t1 (a INT, b INT);
3390+
3391+
CREATE TRIGGER trigger_before_update BEFORE UPDATE ON t FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b);
3392+
--replace_column 2 # 4 # 5 # 6 # 7 # 8 #
3393+
SHOW CREATE TRIGGER trigger_before_update;
3394+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 'trigger_before_update';
3395+
3396+
--echo # Trigger on view is not supported in mariadb
3397+
CREATE VIEW vt AS SELECT * FROM t;
3398+
--error ER_WRONG_OBJECT
3399+
CREATE TRIGGER t_on_view BEFORE UPDATE OF a, b ON vt FOR EACH ROW INSERT INTO t1 VALUES (OLD.a, OLD.b);
3400+
SELECT * FROM INFORMATION_SCHEMA.TRIGGERED_UPDATE_COLUMNS WHERE TRIGGER_NAME = 't_on_view';
3401+
3402+
# Cleanup
3403+
DROP VIEW IF EXISTS vt;
3404+
DROP TABLE t, t1;
3405+
3406+
--echo # End of 12.2 tests

0 commit comments

Comments
 (0)