mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
- Added one neutral and 22 tailored (language specific) collations based on Unicode Collation Algorithm version 14.0.0. Collations were added for Unicode character sets utf8mb3, utf8mb4, ucs2, utf16, utf32. Every tailoring was added with four accent and case sensitivity flag combinations, e.g: * utf8mb4_uca1400_swedish_as_cs * utf8mb4_uca1400_swedish_as_ci * utf8mb4_uca1400_swedish_ai_cs * utf8mb4_uca1400_swedish_ai_ci and their _nopad_ variants: * utf8mb4_uca1400_swedish_nopad_as_cs * utf8mb4_uca1400_swedish_nopad_as_ci * utf8mb4_uca1400_swedish_nopad_ai_cs * utf8mb4_uca1400_swedish_nopad_ai_ci - Introducing a conception of contextually typed named collations: CREATE DATABASE db1 CHARACTER SET utf8mb4; CREATE TABLE db1.t1 (a CHAR(10) COLLATE uca1400_as_ci); The idea is that there is no a need to specify the character set prefix in the new collation names. It's enough to type just the suffix "uca1400_as_ci". The character set is taken from the context. In the above example script the context character set is utf8mb4. So the CREATE TABLE will make a column with the collation utf8mb4_uca1400_as_ci. Short collations names can be used in any parts of the SQL syntax where the COLLATE clause is understood. - New collations are displayed only one time (without character set combinations) by these statements: SELECT * FROM INFORMATION_SCHEMA.COLLATIONS; SHOW COLLATION; For example, all these collations: - utf8mb3_uca1400_swedish_as_ci - utf8mb4_uca1400_swedish_as_ci - ucs2_uca1400_swedish_as_ci - utf16_uca1400_swedish_as_ci - utf32_uca1400_swedish_as_ci have just one entry in INFORMATION_SCHEMA.COLLATIONS and SHOW COLLATION, with COLLATION_NAME equal to "uca1400_swedish_as_ci", which is the suffix without the character set name: SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLLATIONS WHERE COLLATION_NAME LIKE '%uca1400_swedish_as_ci'; +-----------------------+ | COLLATION_NAME | +-----------------------+ | uca1400_swedish_as_ci | +-----------------------+ Note, the behaviour of old collations did not change. Non-unicode collations (e.g. latin1_swedish_ci) and old UCA-4.0.0 collations (e.g. utf8mb4_unicode_ci) are still displayed with the character set prefix, as before. - The structure of the table INFORMATION_SCHEMA.COLLATIONS was changed. The NOT NULL constraint was removed from these columns: - CHARACTER_SET_NAME - ID - IS_DEFAULT and from the corresponding columns in SHOW COLLATION. For example: SELECT COLLATION_NAME, CHARACTER_SET_NAME, ID, IS_DEFAULT FROM INFORMATION_SCHEMA.COLLATIONS WHERE COLLATION_NAME LIKE '%uca1400_swedish_as_ci'; +-----------------------+--------------------+------+------------+ | COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | +-----------------------+--------------------+------+------------+ | uca1400_swedish_as_ci | NULL | NULL | NULL | +-----------------------+--------------------+------+------------+ The NULL value in these columns now means that the collation is applicable to multiple character sets. The behavioir of old collations did not change. Make sure your client programs can handle NULL values in these columns. - The structure of the table INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY was changed. Three new NOT NULL columns were added: - FULL_COLLATION_NAME - ID - IS_DEFAULT New collations have multiple entries in COLLATION_CHARACTER_SET_APPLICABILITY. The column COLLATION_NAME contains the collation name without the character set prefix. The column FULL_COLLATION_NAME contains the collation name with the character set prefix. Old collations have full collation name in both FULL_COLLATION_NAME and COLLATION_NAME. SELECT COLLATION_NAME, FULL_COLLATION_NAME, CHARACTER_SET_NAME, ID, IS_DEFAULT FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY WHERE FULL_COLLATION_NAME RLIKE '^(utf8mb4|latin1).*swedish.*ci$'; +-----------------------------+-------------------------------------+--------------------+------+------------+ | COLLATION_NAME | FULL_COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | +-----------------------------+-------------------------------------+--------------------+------+------------+ | latin1_swedish_ci | latin1_swedish_ci | latin1 | 8 | Yes | | latin1_swedish_nopad_ci | latin1_swedish_nopad_ci | latin1 | 1032 | | | utf8mb4_swedish_ci | utf8mb4_swedish_ci | utf8mb4 | 232 | | | uca1400_swedish_ai_ci | utf8mb4_uca1400_swedish_ai_ci | utf8mb4 | 2368 | | | uca1400_swedish_as_ci | utf8mb4_uca1400_swedish_as_ci | utf8mb4 | 2370 | | | uca1400_swedish_nopad_ai_ci | utf8mb4_uca1400_swedish_nopad_ai_ci | utf8mb4 | 2372 | | | uca1400_swedish_nopad_as_ci | utf8mb4_uca1400_swedish_nopad_as_ci | utf8mb4 | 2374 | | +-----------------------------+-------------------------------------+--------------------+------+------------+ - Other INFORMATION_SCHEMA queries: SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.COLUMNS; SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.PARAMETERS; SELECT TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES; SELECT DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA; SELECT COLLATION_NAME FROM INFORMATION_SCHEMA.ROUTINES; SELECT COLLATION_CONNECTION FROM INFORMATION_SCHEMA.EVENTS; SELECT DATABASE_COLLATION FROM INFORMATION_SCHEMA.EVENTS; SELECT COLLATION_CONNECTION FROM INFORMATION_SCHEMA.ROUTINES; SELECT DATABASE_COLLATION FROM INFORMATION_SCHEMA.ROUTINES; SELECT COLLATION_CONNECTION FROM INFORMATION_SCHEMA.TRIGGERS; SELECT DATABASE_COLLATION FROM INFORMATION_SCHEMA.TRIGGERS; SELECT COLLATION_CONNECTION FROM INFORMATION_SCHEMA.VIEWS; display full collation names, including character sets prefix, for all collations, including new collations. Corresponding SHOW commands also display full collation names in collation related columns: SHOW CREATE TABLE t1; SHOW CREATE DATABASE db1; SHOW TABLE STATUS; SHOW CREATE FUNCTION f1; SHOW CREATE PROCEDURE p1; SHOW CREATE EVENT ev1; SHOW CREATE TRIGGER tr1; SHOW CREATE VIEW; These INFORMATION_SCHEMA queries and SHOW statements may change in the future, to display show collation names.
239 lines
14 KiB
Plaintext
239 lines
14 KiB
Plaintext
set @save_sql_mode=@@global.sql_mode;
|
|
set global sql_mode="";
|
|
SHOW TABLES FROM information_schema LIKE 'TRIGGERS';
|
|
Tables_in_information_schema (TRIGGERS)
|
|
TRIGGERS
|
|
#######################################################################
|
|
# Testcase 3.2.1.1: INFORMATION_SCHEMA tables can be queried via SELECT
|
|
#######################################################################
|
|
DROP VIEW IF EXISTS test.v1;
|
|
DROP PROCEDURE IF EXISTS test.p1;
|
|
DROP FUNCTION IF EXISTS test.f1;
|
|
CREATE VIEW test.v1 AS SELECT * FROM information_schema.TRIGGERS;
|
|
CREATE PROCEDURE test.p1() SELECT * FROM information_schema.TRIGGERS;
|
|
CREATE FUNCTION test.f1() returns BIGINT
|
|
BEGIN
|
|
DECLARE counter BIGINT DEFAULT NULL;
|
|
SELECT COUNT(*) INTO counter FROM information_schema.TRIGGERS;
|
|
RETURN counter;
|
|
END//
|
|
# Attention: The printing of the next result sets is disabled.
|
|
SELECT * FROM information_schema.TRIGGERS;
|
|
SELECT * FROM test.v1;
|
|
CALL test.p1;
|
|
SELECT test.f1();
|
|
DROP VIEW test.v1;
|
|
DROP PROCEDURE test.p1;
|
|
DROP FUNCTION test.f1;
|
|
#########################################################################
|
|
# Testcase 3.2.12.1: INFORMATION_SCHEMA.TRIGGERS layout
|
|
#########################################################################
|
|
DESCRIBE information_schema.TRIGGERS;
|
|
Field Type Null Key Default Extra
|
|
TRIGGER_CATALOG varchar(512) NO NULL
|
|
TRIGGER_SCHEMA varchar(64) NO NULL
|
|
TRIGGER_NAME varchar(64) NO NULL
|
|
EVENT_MANIPULATION varchar(6) NO NULL
|
|
EVENT_OBJECT_CATALOG varchar(512) NO NULL
|
|
EVENT_OBJECT_SCHEMA varchar(64) NO NULL
|
|
EVENT_OBJECT_TABLE varchar(64) NO NULL
|
|
ACTION_ORDER bigint(4) NO NULL
|
|
ACTION_CONDITION longtext YES NULL
|
|
ACTION_STATEMENT longtext NO NULL
|
|
ACTION_ORIENTATION varchar(9) NO NULL
|
|
ACTION_TIMING varchar(6) NO NULL
|
|
ACTION_REFERENCE_OLD_TABLE varchar(64) YES NULL
|
|
ACTION_REFERENCE_NEW_TABLE varchar(64) YES NULL
|
|
ACTION_REFERENCE_OLD_ROW varchar(3) NO NULL
|
|
ACTION_REFERENCE_NEW_ROW varchar(3) NO NULL
|
|
CREATED datetime(2) YES NULL
|
|
SQL_MODE varchar(8192) NO NULL
|
|
DEFINER varchar(384) NO NULL
|
|
CHARACTER_SET_CLIENT varchar(32) NO NULL
|
|
COLLATION_CONNECTION varchar(64) NO NULL
|
|
DATABASE_COLLATION varchar(64) NO NULL
|
|
SHOW CREATE TABLE information_schema.TRIGGERS;
|
|
Table Create Table
|
|
TRIGGERS CREATE TEMPORARY TABLE `TRIGGERS` (
|
|
`TRIGGER_CATALOG` varchar(512) NOT NULL,
|
|
`TRIGGER_SCHEMA` varchar(64) NOT NULL,
|
|
`TRIGGER_NAME` varchar(64) NOT NULL,
|
|
`EVENT_MANIPULATION` varchar(6) NOT NULL,
|
|
`EVENT_OBJECT_CATALOG` varchar(512) NOT NULL,
|
|
`EVENT_OBJECT_SCHEMA` varchar(64) NOT NULL,
|
|
`EVENT_OBJECT_TABLE` varchar(64) NOT NULL,
|
|
`ACTION_ORDER` bigint(4) NOT NULL,
|
|
`ACTION_CONDITION` longtext,
|
|
`ACTION_STATEMENT` longtext NOT NULL,
|
|
`ACTION_ORIENTATION` varchar(9) NOT NULL,
|
|
`ACTION_TIMING` varchar(6) NOT NULL,
|
|
`ACTION_REFERENCE_OLD_TABLE` varchar(64),
|
|
`ACTION_REFERENCE_NEW_TABLE` varchar(64),
|
|
`ACTION_REFERENCE_OLD_ROW` varchar(3) NOT NULL,
|
|
`ACTION_REFERENCE_NEW_ROW` varchar(3) NOT NULL,
|
|
`CREATED` datetime(2),
|
|
`SQL_MODE` varchar(8192) NOT NULL,
|
|
`DEFINER` varchar(384) NOT NULL,
|
|
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL,
|
|
`COLLATION_CONNECTION` varchar(64) NOT NULL,
|
|
`DATABASE_COLLATION` varchar(64) NOT NULL
|
|
) DEFAULT CHARSET=utf8mb3
|
|
SHOW COLUMNS FROM information_schema.TRIGGERS;
|
|
Field Type Null Key Default Extra
|
|
TRIGGER_CATALOG varchar(512) NO NULL
|
|
TRIGGER_SCHEMA varchar(64) NO NULL
|
|
TRIGGER_NAME varchar(64) NO NULL
|
|
EVENT_MANIPULATION varchar(6) NO NULL
|
|
EVENT_OBJECT_CATALOG varchar(512) NO NULL
|
|
EVENT_OBJECT_SCHEMA varchar(64) NO NULL
|
|
EVENT_OBJECT_TABLE varchar(64) NO NULL
|
|
ACTION_ORDER bigint(4) NO NULL
|
|
ACTION_CONDITION longtext YES NULL
|
|
ACTION_STATEMENT longtext NO NULL
|
|
ACTION_ORIENTATION varchar(9) NO NULL
|
|
ACTION_TIMING varchar(6) NO NULL
|
|
ACTION_REFERENCE_OLD_TABLE varchar(64) YES NULL
|
|
ACTION_REFERENCE_NEW_TABLE varchar(64) YES NULL
|
|
ACTION_REFERENCE_OLD_ROW varchar(3) NO NULL
|
|
ACTION_REFERENCE_NEW_ROW varchar(3) NO NULL
|
|
CREATED datetime(2) YES NULL
|
|
SQL_MODE varchar(8192) NO NULL
|
|
DEFINER varchar(384) NO NULL
|
|
CHARACTER_SET_CLIENT varchar(32) NO NULL
|
|
COLLATION_CONNECTION varchar(64) NO NULL
|
|
DATABASE_COLLATION varchar(64) NO NULL
|
|
SELECT * FROM information_schema.triggers
|
|
WHERE trigger_catalog IS NOT NULL OR event_object_catalog IS NOT NULL
|
|
OR action_condition IS NOT NULL OR action_reference_old_table IS NOT NULL
|
|
OR action_reference_new_table IS NOT NULL
|
|
ORDER BY trigger_schema, trigger_name;
|
|
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION
|
|
def mtr gs_insert INSERT def mtr global_suppressions 1 NULL BEGIN DECLARE dummy INT; SELECT "" REGEXP NEW.pattern INTO dummy; END ROW BEFORE NULL NULL OLD NEW # root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
|
|
def mtr ts_insert INSERT def mtr test_suppressions 1 NULL BEGIN DECLARE dummy INT; SELECT "" REGEXP NEW.pattern INTO dummy; END ROW BEFORE NULL NULL OLD NEW # root@localhost latin1 latin1_swedish_ci latin1_swedish_ci
|
|
##################################################################################
|
|
# Testcase 3.2.18.2 + 3.2.18.3: INFORMATION_SCHEMA.TRIGGERS accessible information
|
|
##################################################################################
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
CREATE DATABASE db_datadict;
|
|
DROP USER 'testuser1'@'localhost';
|
|
CREATE USER 'testuser1'@'localhost';
|
|
DROP USER 'testuser2'@'localhost';
|
|
CREATE USER 'testuser2'@'localhost';
|
|
DROP USER 'testuser3'@'localhost';
|
|
CREATE USER 'testuser3'@'localhost';
|
|
DROP USER 'testuser4'@'localhost';
|
|
CREATE USER 'testuser4'@'localhost';
|
|
GRANT TRIGGER ON *.* TO 'testuser1'@'localhost';
|
|
GRANT TRIGGER ON *.* TO 'testuser3'@'localhost';
|
|
GRANT TRIGGER ON *.* TO 'testuser4'@'localhost';
|
|
GRANT ALL ON db_datadict.* TO 'testuser1'@'localhost' WITH GRANT OPTION;
|
|
connect testuser1, localhost, testuser1, , db_datadict;
|
|
CREATE TABLE db_datadict.t1 (f1 INT, f2 INT, f3 INT)
|
|
ENGINE = <engine_type>;
|
|
CREATE TRIGGER trg1 BEFORE INSERT
|
|
ON db_datadict.t1 FOR EACH ROW SET @test_before = 2, new.f1 = @test_before;
|
|
GRANT ALL ON db_datadict.t1 TO 'testuser2'@'localhost';
|
|
REVOKE TRIGGER ON db_datadict.t1 FROM 'testuser2'@'localhost';
|
|
GRANT SELECT ON db_datadict.t1 TO 'testuser3'@'localhost';
|
|
SELECT * FROM information_schema.triggers
|
|
WHERE trigger_name = 'trg1';
|
|
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION
|
|
def db_datadict trg1 INSERT def db_datadict t1 1 NULL SET @test_before = 2, new.f1 = @test_before ROW BEFORE NULL NULL OLD NEW # testuser1@localhost latin1 latin1_swedish_ci latin1_swedish_ci
|
|
SHOW TRIGGERS FROM db_datadict;
|
|
Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
|
|
trg1 INSERT t1 SET @test_before = 2, new.f1 = @test_before BEFORE # testuser1@localhost latin1 latin1_swedish_ci latin1_swedish_ci
|
|
connect testuser2, localhost, testuser2, , db_datadict;
|
|
SHOW GRANTS FOR 'testuser2'@'localhost';
|
|
Grants for testuser2@localhost
|
|
GRANT USAGE ON *.* TO `testuser2`@`localhost`
|
|
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE VIEW, SHOW VIEW, DELETE HISTORY ON `db_datadict`.`t1` TO `testuser2`@`localhost`
|
|
# No TRIGGER Privilege --> no result for query
|
|
SELECT * FROM information_schema.triggers
|
|
WHERE trigger_name = 'trg1';
|
|
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION
|
|
SHOW TRIGGERS FROM db_datadict;
|
|
Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
|
|
connect testuser3, localhost, testuser3, , test;
|
|
SHOW GRANTS FOR 'testuser3'@'localhost';
|
|
Grants for testuser3@localhost
|
|
GRANT TRIGGER ON *.* TO `testuser3`@`localhost`
|
|
GRANT SELECT ON `db_datadict`.`t1` TO `testuser3`@`localhost`
|
|
# TRIGGER Privilege + SELECT Privilege on t1 --> result for query
|
|
SELECT * FROM information_schema.triggers
|
|
WHERE trigger_name = 'trg1';
|
|
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION
|
|
def db_datadict trg1 INSERT def db_datadict t1 1 NULL SET @test_before = 2, new.f1 = @test_before ROW BEFORE NULL NULL OLD NEW # testuser1@localhost latin1 latin1_swedish_ci latin1_swedish_ci
|
|
SHOW TRIGGERS FROM db_datadict;
|
|
Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
|
|
trg1 INSERT t1 SET @test_before = 2, new.f1 = @test_before BEFORE # testuser1@localhost latin1 latin1_swedish_ci latin1_swedish_ci
|
|
connect testuser4, localhost, testuser4, , test;
|
|
SHOW GRANTS FOR 'testuser4'@'localhost';
|
|
Grants for testuser4@localhost
|
|
GRANT TRIGGER ON *.* TO `testuser4`@`localhost`
|
|
# TRIGGER Privilege + no SELECT Privilege on t1 --> result for query
|
|
SELECT * FROM db_datadict.t1;
|
|
ERROR 42000: SELECT command denied to user 'testuser4'@'localhost' for table 't1'
|
|
DESC db_datadict.t1;
|
|
ERROR 42000: SELECT command denied to user 'testuser4'@'localhost' for table 't1'
|
|
SELECT * FROM information_schema.triggers
|
|
WHERE trigger_name = 'trg1';
|
|
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION
|
|
def db_datadict trg1 INSERT def db_datadict t1 1 NULL SET @test_before = 2, new.f1 = @test_before ROW BEFORE NULL NULL OLD NEW # testuser1@localhost latin1 latin1_swedish_ci latin1_swedish_ci
|
|
SHOW TRIGGERS FROM db_datadict;
|
|
Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
|
|
trg1 INSERT t1 SET @test_before = 2, new.f1 = @test_before BEFORE # testuser1@localhost latin1 latin1_swedish_ci latin1_swedish_ci
|
|
connection default;
|
|
disconnect testuser1;
|
|
disconnect testuser2;
|
|
disconnect testuser3;
|
|
disconnect testuser4;
|
|
SELECT * FROM information_schema.triggers
|
|
WHERE trigger_name = 'trg1';
|
|
TRIGGER_CATALOG TRIGGER_SCHEMA TRIGGER_NAME EVENT_MANIPULATION EVENT_OBJECT_CATALOG EVENT_OBJECT_SCHEMA EVENT_OBJECT_TABLE ACTION_ORDER ACTION_CONDITION ACTION_STATEMENT ACTION_ORIENTATION ACTION_TIMING ACTION_REFERENCE_OLD_TABLE ACTION_REFERENCE_NEW_TABLE ACTION_REFERENCE_OLD_ROW ACTION_REFERENCE_NEW_ROW CREATED SQL_MODE DEFINER CHARACTER_SET_CLIENT COLLATION_CONNECTION DATABASE_COLLATION
|
|
def db_datadict trg1 INSERT def db_datadict t1 1 NULL SET @test_before = 2, new.f1 = @test_before ROW BEFORE NULL NULL OLD NEW # testuser1@localhost latin1 latin1_swedish_ci latin1_swedish_ci
|
|
SHOW TRIGGERS FROM db_datadict;
|
|
Trigger Event Table Statement Timing Created sql_mode Definer character_set_client collation_connection Database Collation
|
|
trg1 INSERT t1 SET @test_before = 2, new.f1 = @test_before BEFORE # testuser1@localhost latin1 latin1_swedish_ci latin1_swedish_ci
|
|
DROP USER 'testuser1'@'localhost';
|
|
DROP USER 'testuser2'@'localhost';
|
|
DROP USER 'testuser3'@'localhost';
|
|
DROP USER 'testuser4'@'localhost';
|
|
DROP DATABASE db_datadict;
|
|
#########################################################################
|
|
# 3.2.1.13+3.2.1.14+3.2.1.15: INFORMATION_SCHEMA.TRIGGERS modifications
|
|
#########################################################################
|
|
########################################################################
|
|
# Testcases 3.2.1.3-3.2.1.5 + 3.2.1.8-3.2.1.12: INSERT/UPDATE/DELETE and
|
|
# DDL on INFORMATION_SCHEMA tables are not supported
|
|
########################################################################
|
|
DROP DATABASE IF EXISTS db_datadict;
|
|
CREATE DATABASE db_datadict;
|
|
CREATE TABLE db_datadict.t1 (f1 BIGINT)
|
|
ENGINE = <engine_type>;
|
|
CREATE TRIGGER db_datadict.trg1 BEFORE INSERT
|
|
ON db_datadict.t1 FOR EACH ROW SET @test_before = 2, new.f1 = @test_before;
|
|
INSERT INTO information_schema.triggers
|
|
SELECT * FROM information_schema.triggers;
|
|
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
|
|
UPDATE information_schema.triggers SET trigger_schema = 'test'
|
|
WHERE table_name = 't1';
|
|
Got one of the listed errors
|
|
DELETE FROM information_schema.triggers WHERE trigger_name = 't1';
|
|
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
|
|
TRUNCATE information_schema.triggers;
|
|
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
|
|
CREATE INDEX my_idx_on_triggers ON information_schema.triggers(trigger_schema);
|
|
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
|
|
ALTER TABLE information_schema.triggers DROP PRIMARY KEY;
|
|
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
|
|
ALTER TABLE information_schema.triggers ADD f1 INT;
|
|
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
|
|
DROP TABLE information_schema.triggers;
|
|
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
|
|
ALTER TABLE information_schema.triggers RENAME db_datadict.triggers;
|
|
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
|
|
ALTER TABLE information_schema.triggers RENAME information_schema.xtriggers;
|
|
ERROR 42000: Access denied for user 'root'@'localhost' to database 'information_schema'
|
|
DROP DATABASE db_datadict;
|
|
set global sql_mode=@save_sql_mode;
|