mysql-server/mysql-test/t/create_if_not_exists.test
2025-03-05 14:31:37 +07:00

80 lines
3.6 KiB
Text

--echo #
--echo # WL#14722 Support IF NOT EXISTS clause
--echo # in CREATE PROCEDURE/FUNCTION/TRIGGER
--echo #
--echo
--echo # 1. Stored Procedures (SPs)
--echo
--echo # 1.1. Must execute successfully since the SP does not exist
CREATE PROCEDURE IF NOT EXISTS sp1() BEGIN END;
--echo # 1.2. Must report a warning that the SP already exists
CREATE PROCEDURE IF NOT EXISTS sp1() BEGIN END;
--echo # 1.3. Must fail with error that the SP already exists
--error ER_SP_ALREADY_EXISTS
CREATE PROCEDURE sp1() BEGIN END;
DROP PROCEDURE sp1;
--echo
--echo # 2. Stored Functions (SFs)
--echo
--echo # 2.1. Must execute successfully since the SF does not exist
CREATE FUNCTION IF NOT EXISTS sf1() RETURNS INT DETERMINISTIC return 0;
--echo # 2.2. Must report a warning since the SF already exists
CREATE FUNCTION IF NOT EXISTS sf1() RETURNS INT DETERMINISTIC return 0;
--echo # 2.3. Must fail with error since the SF already exists
--error ER_SP_ALREADY_EXISTS
CREATE FUNCTION sf1() RETURNS INT DETERMINISTIC return 0;
DROP FUNCTION sf1;
--echo # 2.4. Must report a warning since it has the same name as a native function
CREATE FUNCTION IF NOT EXISTS abs() RETURNS INT DETERMINISTIC return 0;
DROP FUNCTION abs;
--echo # 2.5. Must report a warning that UDF will override the SF
--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
--eval CREATE FUNCTION metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_LIB"
CREATE FUNCTION IF NOT EXISTS metaphon() RETURNS INT DETERMINISTIC return 0;
DROP FUNCTION metaphon;
DROP FUNCTION test.metaphon;
--echo
--echo # 3. Loadable Functions / User Defined Functions (UDFs)
--echo
--echo # 3.1. Must execute successfully since the UDF does not exist
--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
--eval CREATE FUNCTION IF NOT EXISTS metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_LIB"
--echo # 3.2. Must report a warning since the UDF already exists
--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
--eval CREATE FUNCTION IF NOT EXISTS metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_LIB"
--echo # 3.3. Must fail with error since the UDF already exists
--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
--error ER_UDF_EXISTS
--eval CREATE FUNCTION metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_LIB"
DROP FUNCTION metaphon;
--echo # 3.4. Must fail with an error since native function already exists
--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
--error ER_IF_NOT_EXISTS_UNSUPPORTED_UDF_NATIVE_FCT_NAME_COLLISION
--eval CREATE FUNCTION IF NOT EXISTS sum RETURNS INT SONAME "$UDF_EXAMPLE_LIB"
--echo # 3.5. Will succeed without warning, but UDF will override the SF
CREATE FUNCTION IF NOT EXISTS metaphon() RETURNS INT DETERMINISTIC return 0;
--replace_result $UDF_EXAMPLE_LIB UDF_EXAMPLE_LIB
--eval CREATE FUNCTION metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_LIB"
DROP FUNCTION metaphon;
DROP FUNCTION test.metaphon;
--echo
--echo # 4. Triggers
--echo
CREATE TABLE t1 (a INT);
--echo # 4.1. Must execute successfully since the trigger does not exist
CREATE TRIGGER IF NOT EXISTS trg1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN END;
--echo # 4.2. Must report a warning since the trigger already exists on the same table
CREATE TRIGGER IF NOT EXISTS trg1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN END;
--echo # 4.3. Must fail with error since the trigger already exists on a different table
CREATE TABLE t2 (a INT);
--error ER_IF_NOT_EXISTS_UNSUPPORTED_TRG_EXISTS_ON_DIFFERENT_TABLE
CREATE TRIGGER IF NOT EXISTS trg1 BEFORE INSERT ON t2 FOR EACH ROW BEGIN END;
DROP TABLE t2;
--echo # 4.4. Must fail with error since the trigger already exists
--error ER_TRG_ALREADY_EXISTS
CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN END;
DROP TABLE t1;