mirror of
https://github.com/MariaDB/server.git
synced 2025-07-21 21:22:27 +03:00
This allows one to run the test suite even if any of the following options are changed: - character-set-server - collation-server - join-cache-level - log-basename - max-allowed-packet - optimizer-switch - query-cache-size and query-cache-type - skip-name-resolve - table-definition-cache - table-open-cache - Some innodb options etc Changes: - Don't print out the value of system variables as one can't depend on them to being constants. - Don't set global variables to 'default' as the default may not be the same as the test was started with if there was an additional option file. Instead save original value and reset it at end of test. - Test that depends on the latin1 character set should include default_charset.inc or set the character set to latin1 - Test that depends on the original optimizer switch, should include default_optimizer_switch.inc - Test that depends on the value of a specific system variable should set it in the test (like optimizer_use_condition_selectivity) - Split subselect3.test into subselect3.test and subselect3.inc to make it easier to set and reset system variables. - Added .opt files for test that required specfic options that could be changed by external configuration files. - Fixed result files in rockdsb & tokudb that had not been updated for a while.
238 lines
14 KiB
Plaintext
238 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
|
|
TRIGGER_SCHEMA varchar(64) NO
|
|
TRIGGER_NAME varchar(64) NO
|
|
EVENT_MANIPULATION varchar(6) NO
|
|
EVENT_OBJECT_CATALOG varchar(512) NO
|
|
EVENT_OBJECT_SCHEMA varchar(64) NO
|
|
EVENT_OBJECT_TABLE varchar(64) NO
|
|
ACTION_ORDER bigint(4) NO 0
|
|
ACTION_CONDITION longtext YES NULL
|
|
ACTION_STATEMENT longtext NO
|
|
ACTION_ORIENTATION varchar(9) NO
|
|
ACTION_TIMING varchar(6) NO
|
|
ACTION_REFERENCE_OLD_TABLE varchar(64) YES NULL
|
|
ACTION_REFERENCE_NEW_TABLE varchar(64) YES NULL
|
|
ACTION_REFERENCE_OLD_ROW varchar(3) NO
|
|
ACTION_REFERENCE_NEW_ROW varchar(3) NO
|
|
CREATED datetime(2) YES NULL
|
|
SQL_MODE varchar(8192) NO
|
|
DEFINER varchar(189) NO
|
|
CHARACTER_SET_CLIENT varchar(32) NO
|
|
COLLATION_CONNECTION varchar(32) NO
|
|
DATABASE_COLLATION varchar(32) NO
|
|
SHOW CREATE TABLE information_schema.TRIGGERS;
|
|
Table Create Table
|
|
TRIGGERS CREATE TEMPORARY TABLE `TRIGGERS` (
|
|
`TRIGGER_CATALOG` varchar(512) NOT NULL DEFAULT '',
|
|
`TRIGGER_SCHEMA` varchar(64) NOT NULL DEFAULT '',
|
|
`TRIGGER_NAME` varchar(64) NOT NULL DEFAULT '',
|
|
`EVENT_MANIPULATION` varchar(6) NOT NULL DEFAULT '',
|
|
`EVENT_OBJECT_CATALOG` varchar(512) NOT NULL DEFAULT '',
|
|
`EVENT_OBJECT_SCHEMA` varchar(64) NOT NULL DEFAULT '',
|
|
`EVENT_OBJECT_TABLE` varchar(64) NOT NULL DEFAULT '',
|
|
`ACTION_ORDER` bigint(4) NOT NULL DEFAULT 0,
|
|
`ACTION_CONDITION` longtext DEFAULT NULL,
|
|
`ACTION_STATEMENT` longtext NOT NULL DEFAULT '',
|
|
`ACTION_ORIENTATION` varchar(9) NOT NULL DEFAULT '',
|
|
`ACTION_TIMING` varchar(6) NOT NULL DEFAULT '',
|
|
`ACTION_REFERENCE_OLD_TABLE` varchar(64) DEFAULT NULL,
|
|
`ACTION_REFERENCE_NEW_TABLE` varchar(64) DEFAULT NULL,
|
|
`ACTION_REFERENCE_OLD_ROW` varchar(3) NOT NULL DEFAULT '',
|
|
`ACTION_REFERENCE_NEW_ROW` varchar(3) NOT NULL DEFAULT '',
|
|
`CREATED` datetime(2) DEFAULT NULL,
|
|
`SQL_MODE` varchar(8192) NOT NULL DEFAULT '',
|
|
`DEFINER` varchar(189) NOT NULL DEFAULT '',
|
|
`CHARACTER_SET_CLIENT` varchar(32) NOT NULL DEFAULT '',
|
|
`COLLATION_CONNECTION` varchar(32) NOT NULL DEFAULT '',
|
|
`DATABASE_COLLATION` varchar(32) NOT NULL DEFAULT ''
|
|
) DEFAULT CHARSET=utf8
|
|
SHOW COLUMNS FROM information_schema.TRIGGERS;
|
|
Field Type Null Key Default Extra
|
|
TRIGGER_CATALOG varchar(512) NO
|
|
TRIGGER_SCHEMA varchar(64) NO
|
|
TRIGGER_NAME varchar(64) NO
|
|
EVENT_MANIPULATION varchar(6) NO
|
|
EVENT_OBJECT_CATALOG varchar(512) NO
|
|
EVENT_OBJECT_SCHEMA varchar(64) NO
|
|
EVENT_OBJECT_TABLE varchar(64) NO
|
|
ACTION_ORDER bigint(4) NO 0
|
|
ACTION_CONDITION longtext YES NULL
|
|
ACTION_STATEMENT longtext NO
|
|
ACTION_ORIENTATION varchar(9) NO
|
|
ACTION_TIMING varchar(6) NO
|
|
ACTION_REFERENCE_OLD_TABLE varchar(64) YES NULL
|
|
ACTION_REFERENCE_NEW_TABLE varchar(64) YES NULL
|
|
ACTION_REFERENCE_OLD_ROW varchar(3) NO
|
|
ACTION_REFERENCE_NEW_ROW varchar(3) NO
|
|
CREATED datetime(2) YES NULL
|
|
SQL_MODE varchar(8192) NO
|
|
DEFINER varchar(189) NO
|
|
CHARACTER_SET_CLIENT varchar(32) NO
|
|
COLLATION_CONNECTION varchar(32) NO
|
|
DATABASE_COLLATION varchar(32) NO
|
|
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;
|
|
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 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;
|