Browse Source
MDEV-7283 UDF: CREATE OR REPLACE, CREATE IF NOT EXISTS, DROP IF EXISTS
MDEV-7283 UDF: CREATE OR REPLACE, CREATE IF NOT EXISTS, DROP IF EXISTS
MDEV-7282 SP: CREATE OR REPLACE, CREATE IF NOT EXISTSpull/14/head
23 changed files with 1011 additions and 147 deletions
-
105mysql-test/r/create_drop_binlog.result
-
54mysql-test/r/create_drop_function.result
-
47mysql-test/r/create_drop_procedure.result
-
38mysql-test/r/create_drop_udf.result
-
6mysql-test/r/create_or_replace_permission.result
-
4mysql-test/r/sp-error.result
-
2mysql-test/suite/funcs_1/r/storedproc.result
-
50mysql-test/suite/rpl/r/rpl_create_drop_function.result
-
64mysql-test/suite/rpl/r/rpl_create_drop_procedure.result
-
42mysql-test/suite/rpl/r/rpl_create_drop_udf.result
-
54mysql-test/suite/rpl/t/rpl_create_drop_function.test
-
81mysql-test/suite/rpl/t/rpl_create_drop_procedure.test
-
49mysql-test/suite/rpl/t/rpl_create_drop_udf.test
-
47mysql-test/t/create_drop_binlog.test
-
41mysql-test/t/create_drop_function.test
-
41mysql-test/t/create_drop_procedure.test
-
31mysql-test/t/create_drop_udf.test
-
22mysql-test/t/create_or_replace_permission.test
-
3mysql-test/t/sp-error.test
-
179sql/sp.cc
-
13sql/sql_parse.cc
-
124sql/sql_udf.cc
-
61sql/sql_yacc.yy
@ -0,0 +1,54 @@ |
|||
SET timestamp=UNIX_TIMESTAMP('2014-09-30 08:00:00'); |
|||
CREATE FUNCTION f1(str char(20)) |
|||
RETURNS CHAR(100) |
|||
RETURN CONCAT('Hello, ', str, '!'); |
|||
SELECT * FROM mysql.proc WHERE name like 'f1'; |
|||
db name type specific_name language sql_data_access is_deterministic security_type param_list returns body definer created modified sql_mode comment character_set_client collation_connection db_collation body_utf8 |
|||
test f1 FUNCTION f1 SQL CONTAINS_SQL NO DEFINER str char(20) char(100) CHARSET latin1 RETURN CONCAT('Hello, ', str, '!') root@localhost 2014-09-30 08:00:00 2014-09-30 08:00:00 latin1 latin1_swedish_ci latin1_swedish_ci RETURN CONCAT('Hello, ', str, '!') |
|||
SELECT f1('world'); |
|||
f1('world') |
|||
Hello, world! |
|||
CREATE FUNCTION f1(str char(20)) |
|||
RETURNS TEXT |
|||
RETURN CONCAT('Hello2, ', str, '!'); |
|||
ERROR 42000: FUNCTION f1 already exists |
|||
SELECT body FROM mysql.proc WHERE name like 'f1'; |
|||
body |
|||
RETURN CONCAT('Hello, ', str, '!') |
|||
CREATE FUNCTION IF NOT EXISTS f1(str char(20)) |
|||
RETURNS CHAR(100) |
|||
RETURN CONCAT('Hello3, ', str, '!'); |
|||
Warnings: |
|||
Note 1304 FUNCTION f1 already exists |
|||
SELECT body FROM mysql.proc WHERE name like 'f1'; |
|||
body |
|||
RETURN CONCAT('Hello, ', str, '!') |
|||
CREATE OR REPLACE FUNCTION IF NOT EXISTS f1(str char(20)) |
|||
RETURNS CHAR(100) |
|||
RETURN CONCAT('Hello4, ', str, '!'); |
|||
ERROR HY000: Incorrect usage of OR REPLACE and IF NOT EXISTS |
|||
SELECT body FROM mysql.proc WHERE name like 'f1'; |
|||
body |
|||
RETURN CONCAT('Hello, ', str, '!') |
|||
CREATE OR REPLACE FUNCTION f1(str char(20)) |
|||
RETURNS CHAR(100) |
|||
RETURN CONCAT('Hello5, ', str, '!'); |
|||
SELECT body FROM mysql.proc WHERE name like 'f1'; |
|||
body |
|||
RETURN CONCAT('Hello5, ', str, '!') |
|||
DROP FUNCTION f1; |
|||
CREATE FUNCTION IF NOT EXISTS f1(str char(20)) |
|||
RETURNS CHAR(100) |
|||
RETURN CONCAT('Hello6, ', str, '!'); |
|||
SELECT body FROM mysql.proc WHERE name like 'f1'; |
|||
body |
|||
RETURN CONCAT('Hello6, ', str, '!') |
|||
SELECT f1('world'); |
|||
f1('world') |
|||
Hello6, world! |
|||
DROP FUNCTION IF EXISTS f1; |
|||
SELECT body FROM mysql.proc WHERE name like 'f1'; |
|||
body |
|||
DROP FUNCTION IF EXISTS f1; |
|||
Warnings: |
|||
Note 1305 FUNCTION test.f1 does not exist |
@ -0,0 +1,47 @@ |
|||
CREATE TABLE t1 (id INT); |
|||
CREATE PROCEDURE proc1 (OUT cnt INT) COMMENT 'comment1' BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
@cnt |
|||
0 |
|||
INSERT INTO t1 VALUES (1), (2), (3); |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
@cnt |
|||
3 |
|||
CREATE PROCEDURE proc1 (OUT cnt INT) COMMENT 'comment2' |
|||
BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
ERROR 42000: PROCEDURE proc1 already exists |
|||
SELECT comment FROM mysql.proc WHERE name='proc1'$$ |
|||
comment |
|||
comment1 |
|||
CREATE PROCEDURE IF NOT EXISTS proc1 (OUT cnt INT) COMMENT 'comment3' |
|||
BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
Warnings: |
|||
Note 1304 PROCEDURE proc1 already exists |
|||
SELECT comment FROM mysql.proc WHERE name='proc1'$$ |
|||
comment |
|||
comment1 |
|||
CREATE OR REPLACE PROCEDURE IF NOT EXISTS proc1 (OUT cnt INT) COMMENT 'comment4' |
|||
BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
ERROR HY000: Incorrect usage of OR REPLACE and IF NOT EXISTS |
|||
SELECT comment FROM mysql.proc WHERE name='proc1'$$ |
|||
comment |
|||
comment1 |
|||
CREATE OR REPLACE PROCEDURE proc1 (OUT cnt INT) COMMENT 'comment5' |
|||
BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
SELECT comment FROM mysql.proc WHERE name='proc1'$$ |
|||
comment |
|||
comment5 |
|||
DROP PROCEDURE proc1; |
|||
CREATE PROCEDURE IF NOT EXISTS proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
INSERT INTO t1 VALUES (1), (2), (3); |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
@cnt |
|||
6 |
|||
DROP TABLE IF EXISTS t1; |
|||
DROP PROCEDURE IF EXISTS proc1; |
|||
DROP PROCEDURE IF EXISTS proc1; |
|||
Warnings: |
|||
Note 1305 PROCEDURE test.proc1 does not exist |
@ -0,0 +1,38 @@ |
|||
CREATE FUNCTION IF NOT EXISTS metaphon RETURNS STRING SONAME "UDF_EXAMPLE_LIB"; |
|||
SELECT ret FROM mysql.func WHERE name like 'metaphon'; |
|||
ret |
|||
0 |
|||
CREATE FUNCTION metaphon RETURNS INT SONAME "$UDF_EXAMPLE_SO"; |
|||
ERROR HY000: Function 'metaphon' already exists |
|||
SELECT ret FROM mysql.func WHERE name like 'metaphon'; |
|||
ret |
|||
0 |
|||
CREATE FUNCTION IF NOT EXISTS metaphon RETURNS REAL SONAME "UDF_EXAMPLE_LIB"; |
|||
Warnings: |
|||
Note 1125 Function 'metaphon' already exists |
|||
SELECT ret FROM mysql.func WHERE name like 'metaphon'; |
|||
ret |
|||
0 |
|||
DROP FUNCTION IF EXISTS metaphon; |
|||
CREATE FUNCTION IF NOT EXISTS metaphon RETURNS REAL SONAME "UDF_EXAMPLE_LIB"; |
|||
SELECT ret FROM mysql.func WHERE name like 'metaphon'; |
|||
ret |
|||
1 |
|||
CREATE OR REPLACE FUNCTION IF NOT EXISTS metaphon RETURNS STRING SONAME "udf_example.so"; |
|||
ERROR HY000: Incorrect usage of OR REPLACE and IF NOT EXISTS |
|||
SELECT ret FROM mysql.func WHERE name like 'metaphon'; |
|||
ret |
|||
1 |
|||
CREATE OR REPLACE FUNCTION metaphon RETURNS STRING SONAME "UDF_EXAMPLE_LIB"; |
|||
SELECT ret FROM mysql.func WHERE name like 'metaphon'; |
|||
ret |
|||
0 |
|||
CREATE FUNCTION metaphon RETURNS STRING SONAME "udf_example.so"; |
|||
ERROR HY000: Function 'metaphon' already exists |
|||
SELECT metaphon('mariadb'); |
|||
metaphon('mariadb') |
|||
MRTB |
|||
DROP FUNCTION metaphon; |
|||
DROP FUNCTION IF EXISTS metaphon; |
|||
Warnings: |
|||
Note 1305 FUNCTION test.metaphon does not exist |
@ -0,0 +1,50 @@ |
|||
include/master-slave.inc |
|||
[connection master] |
|||
CREATE FUNCTION hello (str CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN |
|||
CONCAT('Hello, ', str, '!'); |
|||
CREATE FUNCTION hello (str CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN |
|||
CONCAT('Hello, ', str, '!'); |
|||
ERROR 42000: FUNCTION hello already exists |
|||
SHOW CREATE FUNCTION hello; |
|||
Function sql_mode Create Function character_set_client collation_connection Database Collation |
|||
hello CREATE DEFINER=`root`@`localhost` FUNCTION `hello`(str CHAR(20)) RETURNS char(50) CHARSET latin1 |
|||
DETERMINISTIC |
|||
RETURN |
|||
CONCAT('Hello, ', str, '!') latin1 latin1_swedish_ci latin1_swedish_ci |
|||
CREATE OR REPLACE FUNCTION IF NOT EXISTS hello (str CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN |
|||
CONCAT('Hello, ', str, '!'); |
|||
ERROR HY000: Incorrect usage of OR REPLACE and IF NOT EXISTS |
|||
CREATE OR REPLACE FUNCTION hello (str CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN |
|||
CONCAT('Hello, ', str, '!'); |
|||
SELECT hello('master'); |
|||
hello('master') |
|||
Hello, master! |
|||
SELECT hello('slave'); |
|||
hello('slave') |
|||
Hello, slave! |
|||
CREATE FUNCTION IF NOT EXISTS hello (str CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN |
|||
CONCAT('Hello, ', str, '!'); |
|||
Warnings: |
|||
Note 1304 FUNCTION hello already exists |
|||
CREATE OR REPLACE FUNCTION bye (str CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN |
|||
CONCAT('Bye, ', str, '!'); |
|||
SELECT hello('master'); |
|||
hello('master') |
|||
Hello, master! |
|||
SELECT bye('master'); |
|||
bye('master') |
|||
Bye, master! |
|||
SELECT hello('slave'); |
|||
hello('slave') |
|||
Hello, slave! |
|||
SELECT bye('slave'); |
|||
bye('slave') |
|||
Bye, slave! |
|||
DROP FUNCTION hello; |
|||
DROP FUNCTION IF EXISTS bye; |
|||
DROP FUNCTION hello; |
|||
ERROR 42000: FUNCTION test.hello does not exist |
|||
DROP FUNCTION IF EXISTS bye; |
|||
Warnings: |
|||
Note 1305 FUNCTION test.bye does not exist |
|||
include/rpl_end.inc |
@ -0,0 +1,64 @@ |
|||
include/master-slave.inc |
|||
[connection master] |
|||
CREATE TABLE t1 (id INT); |
|||
CREATE PROCEDURE proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
@cnt |
|||
0 |
|||
INSERT INTO t1 VALUES (1), (2), (3); |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
@cnt |
|||
3 |
|||
# Syncing with slave |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
@cnt |
|||
3 |
|||
CREATE PROCEDURE proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
ERROR 42000: PROCEDURE proc1 already exists |
|||
CREATE PROCEDURE IF NOT EXISTS proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
Warnings: |
|||
Note 1304 PROCEDURE proc1 already exists |
|||
CREATE OR REPLACE PROCEDURE IF NOT EXISTS proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
ERROR HY000: Incorrect usage of OR REPLACE and IF NOT EXISTS |
|||
CREATE OR REPLACE PROCEDURE proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
# Syncing with slave |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
@cnt |
|||
3 |
|||
DROP PROCEDURE proc1; |
|||
CREATE PROCEDURE IF NOT EXISTS proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
INSERT INTO t1 VALUES (1), (2), (3); |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
@cnt |
|||
6 |
|||
# Syncing with slave |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
@cnt |
|||
6 |
|||
DROP PROCEDURE proc1; |
|||
CREATE OR REPLACE PROCEDURE proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
INSERT INTO t1 VALUES (1), (2), (3); |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
@cnt |
|||
9 |
|||
# Syncing with slave |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
@cnt |
|||
9 |
|||
DROP TABLE IF EXISTS t1; |
|||
DROP PROCEDURE proc1; |
|||
DROP PROCEDURE IF EXISTS proc2; |
|||
Warnings: |
|||
Note 1305 PROCEDURE test.proc2 does not exist |
|||
# Syncing with slave |
|||
DROP PROCEDURE proc1; |
|||
ERROR 42000: PROCEDURE test.proc1 does not exist |
|||
include/rpl_end.inc |
@ -0,0 +1,42 @@ |
|||
include/master-slave.inc |
|||
[connection master] |
|||
CREATE FUNCTION metaphon RETURNS STRING SONAME "UDF_EXAMPLE_LIB"; |
|||
SELECT metaphon('master'); |
|||
metaphon('master') |
|||
MSTR |
|||
CREATE FUNCTION metaphon RETURNS INT SONAME "udf_example.so"; |
|||
ERROR HY000: Function 'metaphon' already exists |
|||
SELECT metaphon('slave'); |
|||
metaphon('slave') |
|||
SLF |
|||
CREATE FUNCTION IF NOT EXISTS metaphon RETURNS STRING SONAME "udf_example.so"; |
|||
Warnings: |
|||
Note 1125 Function 'metaphon' already exists |
|||
DROP FUNCTION IF EXISTS random_function_name; |
|||
Warnings: |
|||
Note 1305 FUNCTION test.random_function_name does not exist |
|||
CREATE FUNCTION IF NOT EXISTS metaphon RETURNS STRING SONAME "udf_example.so"; |
|||
Warnings: |
|||
Note 1125 Function 'metaphon' already exists |
|||
CREATE OR REPLACE FUNCTION IF NOT EXISTS metaphon RETURNS STRING SONAME "udf_example.so"; |
|||
ERROR HY000: Incorrect usage of OR REPLACE and IF NOT EXISTS |
|||
SELECT metaphon('slave'); |
|||
metaphon('slave') |
|||
SLF |
|||
DROP FUNCTION metaphon; |
|||
CREATE OR REPLACE FUNCTION metaphon RETURNS STRING SONAME "udf_example.so"; |
|||
CREATE FUNCTION metaphon RETURNS STRING SONAME "udf_example.so"; |
|||
ERROR HY000: Function 'metaphon' already exists |
|||
SELECT metaphon('slave'); |
|||
metaphon('slave') |
|||
SLF |
|||
DROP FUNCTION metaphon; |
|||
DROP FUNCTION IF EXISTS metaphon; |
|||
Warnings: |
|||
Note 1305 FUNCTION test.metaphon does not exist |
|||
DROP FUNCTION metaphon; |
|||
ERROR 42000: FUNCTION test.metaphon does not exist |
|||
DROP FUNCTION IF EXISTS metaphon; |
|||
Warnings: |
|||
Note 1305 FUNCTION test.metaphon does not exist |
|||
include/rpl_end.inc |
@ -0,0 +1,54 @@ |
|||
--source include/master-slave.inc |
|||
|
|||
connection master; |
|||
|
|||
CREATE FUNCTION hello (str CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN |
|||
CONCAT('Hello, ', str, '!'); |
|||
|
|||
--error ER_SP_ALREADY_EXISTS |
|||
CREATE FUNCTION hello (str CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN |
|||
CONCAT('Hello, ', str, '!'); |
|||
|
|||
sync_slave_with_master; |
|||
|
|||
SHOW CREATE FUNCTION hello; |
|||
|
|||
connection master; |
|||
|
|||
--error ER_WRONG_USAGE |
|||
CREATE OR REPLACE FUNCTION IF NOT EXISTS hello (str CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN |
|||
CONCAT('Hello, ', str, '!'); |
|||
|
|||
CREATE OR REPLACE FUNCTION hello (str CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN |
|||
CONCAT('Hello, ', str, '!'); |
|||
|
|||
SELECT hello('master'); |
|||
sync_slave_with_master; |
|||
|
|||
SELECT hello('slave'); |
|||
|
|||
connection master; |
|||
CREATE FUNCTION IF NOT EXISTS hello (str CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN |
|||
CONCAT('Hello, ', str, '!'); |
|||
|
|||
CREATE OR REPLACE FUNCTION bye (str CHAR(20)) RETURNS CHAR(50) DETERMINISTIC RETURN |
|||
CONCAT('Bye, ', str, '!'); |
|||
|
|||
SELECT hello('master'); |
|||
SELECT bye('master'); |
|||
sync_slave_with_master; |
|||
|
|||
SELECT hello('slave'); |
|||
SELECT bye('slave'); |
|||
|
|||
connection master; |
|||
DROP FUNCTION hello; |
|||
DROP FUNCTION IF EXISTS bye; |
|||
sync_slave_with_master; |
|||
|
|||
--error ER_SP_DOES_NOT_EXIST |
|||
DROP FUNCTION hello; |
|||
|
|||
DROP FUNCTION IF EXISTS bye; |
|||
|
|||
--source include/rpl_end.inc |
@ -0,0 +1,81 @@ |
|||
--source include/master-slave.inc |
|||
|
|||
connection master; |
|||
CREATE TABLE t1 (id INT); |
|||
DELIMITER $$; |
|||
CREATE PROCEDURE proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
DELIMITER ;$$ |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
INSERT INTO t1 VALUES (1), (2), (3); |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
|
|||
--echo # Syncing with slave |
|||
sync_slave_with_master; |
|||
|
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
|
|||
connection master; |
|||
DELIMITER $$; |
|||
--error ER_SP_ALREADY_EXISTS |
|||
CREATE PROCEDURE proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
|
|||
CREATE PROCEDURE IF NOT EXISTS proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
|
|||
--error ER_WRONG_USAGE |
|||
CREATE OR REPLACE PROCEDURE IF NOT EXISTS proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
|
|||
CREATE OR REPLACE PROCEDURE proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
DELIMITER ;$$ |
|||
|
|||
--echo # Syncing with slave |
|||
sync_slave_with_master; |
|||
|
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
|
|||
connection master; |
|||
DROP PROCEDURE proc1; |
|||
DELIMITER $$; |
|||
CREATE PROCEDURE IF NOT EXISTS proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
DELIMITER ;$$ |
|||
INSERT INTO t1 VALUES (1), (2), (3); |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
|
|||
--echo # Syncing with slave |
|||
sync_slave_with_master; |
|||
|
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
|
|||
connection master; |
|||
DROP PROCEDURE proc1; |
|||
DELIMITER $$; |
|||
CREATE OR REPLACE PROCEDURE proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
DELIMITER ;$$ |
|||
INSERT INTO t1 VALUES (1), (2), (3); |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
|
|||
--echo # Syncing with slave |
|||
sync_slave_with_master; |
|||
|
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
|
|||
connection master; |
|||
DROP TABLE IF EXISTS t1; |
|||
DROP PROCEDURE proc1; |
|||
|
|||
DROP PROCEDURE IF EXISTS proc2; |
|||
|
|||
--echo # Syncing with slave |
|||
sync_slave_with_master; |
|||
|
|||
--error ER_SP_DOES_NOT_EXIST |
|||
DROP PROCEDURE proc1; |
|||
|
|||
--source include/rpl_end.inc |
@ -0,0 +1,49 @@ |
|||
--source include/master-slave.inc |
|||
--replace_result $UDF_EXAMPLE_SO UDF_EXAMPLE_LIB |
|||
|
|||
connection master; |
|||
|
|||
eval CREATE FUNCTION metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_SO"; |
|||
SELECT metaphon('master'); |
|||
|
|||
--error ER_UDF_EXISTS |
|||
eval CREATE FUNCTION metaphon RETURNS INT SONAME "$UDF_EXAMPLE_SO"; |
|||
|
|||
sync_slave_with_master; |
|||
|
|||
SELECT metaphon('slave'); |
|||
|
|||
connection master; |
|||
|
|||
eval CREATE FUNCTION IF NOT EXISTS metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_SO"; |
|||
DROP FUNCTION IF EXISTS random_function_name; |
|||
eval CREATE FUNCTION IF NOT EXISTS metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_SO"; |
|||
|
|||
--error ER_WRONG_USAGE |
|||
eval CREATE OR REPLACE FUNCTION IF NOT EXISTS metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_SO"; |
|||
sync_slave_with_master; |
|||
|
|||
SELECT metaphon('slave'); |
|||
|
|||
connection master; |
|||
DROP FUNCTION metaphon; |
|||
|
|||
eval CREATE OR REPLACE FUNCTION metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_SO"; |
|||
|
|||
--error ER_UDF_EXISTS |
|||
eval CREATE FUNCTION metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_SO"; |
|||
sync_slave_with_master; |
|||
|
|||
SELECT metaphon('slave'); |
|||
|
|||
connection master; |
|||
DROP FUNCTION metaphon; |
|||
DROP FUNCTION IF EXISTS metaphon; |
|||
sync_slave_with_master; |
|||
|
|||
--error ER_SP_DOES_NOT_EXIST |
|||
DROP FUNCTION metaphon; |
|||
|
|||
DROP FUNCTION IF EXISTS metaphon; |
|||
|
|||
--source include/rpl_end.inc |
@ -0,0 +1,41 @@ |
|||
SET timestamp=UNIX_TIMESTAMP('2014-09-30 08:00:00'); |
|||
|
|||
CREATE FUNCTION f1(str char(20)) |
|||
RETURNS CHAR(100) |
|||
RETURN CONCAT('Hello, ', str, '!'); |
|||
SELECT * FROM mysql.proc WHERE name like 'f1'; |
|||
SELECT f1('world'); |
|||
|
|||
--error ER_SP_ALREADY_EXISTS |
|||
CREATE FUNCTION f1(str char(20)) |
|||
RETURNS TEXT |
|||
RETURN CONCAT('Hello2, ', str, '!'); |
|||
SELECT body FROM mysql.proc WHERE name like 'f1'; |
|||
|
|||
CREATE FUNCTION IF NOT EXISTS f1(str char(20)) |
|||
RETURNS CHAR(100) |
|||
RETURN CONCAT('Hello3, ', str, '!'); |
|||
SELECT body FROM mysql.proc WHERE name like 'f1'; |
|||
|
|||
--error ER_WRONG_USAGE |
|||
CREATE OR REPLACE FUNCTION IF NOT EXISTS f1(str char(20)) |
|||
RETURNS CHAR(100) |
|||
RETURN CONCAT('Hello4, ', str, '!'); |
|||
SELECT body FROM mysql.proc WHERE name like 'f1'; |
|||
|
|||
CREATE OR REPLACE FUNCTION f1(str char(20)) |
|||
RETURNS CHAR(100) |
|||
RETURN CONCAT('Hello5, ', str, '!'); |
|||
SELECT body FROM mysql.proc WHERE name like 'f1'; |
|||
|
|||
DROP FUNCTION f1; |
|||
CREATE FUNCTION IF NOT EXISTS f1(str char(20)) |
|||
RETURNS CHAR(100) |
|||
RETURN CONCAT('Hello6, ', str, '!'); |
|||
SELECT body FROM mysql.proc WHERE name like 'f1'; |
|||
SELECT f1('world'); |
|||
|
|||
DROP FUNCTION IF EXISTS f1; |
|||
SELECT body FROM mysql.proc WHERE name like 'f1'; |
|||
DROP FUNCTION IF EXISTS f1; |
|||
|
@ -0,0 +1,41 @@ |
|||
CREATE TABLE t1 (id INT); |
|||
DELIMITER $$; |
|||
CREATE PROCEDURE proc1 (OUT cnt INT) COMMENT 'comment1' BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
DELIMITER ;$$ |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
INSERT INTO t1 VALUES (1), (2), (3); |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
|
|||
DELIMITER $$; |
|||
--error ER_SP_ALREADY_EXISTS |
|||
CREATE PROCEDURE proc1 (OUT cnt INT) COMMENT 'comment2' |
|||
BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
SELECT comment FROM mysql.proc WHERE name='proc1'$$ |
|||
|
|||
CREATE PROCEDURE IF NOT EXISTS proc1 (OUT cnt INT) COMMENT 'comment3' |
|||
BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
SELECT comment FROM mysql.proc WHERE name='proc1'$$ |
|||
|
|||
--error ER_WRONG_USAGE |
|||
CREATE OR REPLACE PROCEDURE IF NOT EXISTS proc1 (OUT cnt INT) COMMENT 'comment4' |
|||
BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
SELECT comment FROM mysql.proc WHERE name='proc1'$$ |
|||
|
|||
CREATE OR REPLACE PROCEDURE proc1 (OUT cnt INT) COMMENT 'comment5' |
|||
BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
SELECT comment FROM mysql.proc WHERE name='proc1'$$ |
|||
|
|||
DELIMITER ;$$ |
|||
DROP PROCEDURE proc1; |
|||
DELIMITER $$; |
|||
CREATE PROCEDURE IF NOT EXISTS proc1 (OUT cnt INT) BEGIN SELECT COUNT(*) INTO cnt FROM t1; END$$ |
|||
DELIMITER ;$$ |
|||
INSERT INTO t1 VALUES (1), (2), (3); |
|||
CALL proc1(@cnt); |
|||
SELECT @cnt; |
|||
|
|||
DROP TABLE IF EXISTS t1; |
|||
DROP PROCEDURE IF EXISTS proc1; |
|||
DROP PROCEDURE IF EXISTS proc1; |
@ -0,0 +1,31 @@ |
|||
--replace_result $UDF_EXAMPLE_SO UDF_EXAMPLE_LIB |
|||
eval CREATE FUNCTION IF NOT EXISTS metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_SO"; |
|||
SELECT ret FROM mysql.func WHERE name like 'metaphon'; |
|||
|
|||
--error ER_UDF_EXISTS |
|||
CREATE FUNCTION metaphon RETURNS INT SONAME "$UDF_EXAMPLE_SO"; |
|||
SELECT ret FROM mysql.func WHERE name like 'metaphon'; |
|||
|
|||
--replace_result $UDF_EXAMPLE_SO UDF_EXAMPLE_LIB |
|||
eval CREATE FUNCTION IF NOT EXISTS metaphon RETURNS REAL SONAME "$UDF_EXAMPLE_SO"; |
|||
SELECT ret FROM mysql.func WHERE name like 'metaphon'; |
|||
|
|||
DROP FUNCTION IF EXISTS metaphon; |
|||
--replace_result $UDF_EXAMPLE_SO UDF_EXAMPLE_LIB |
|||
eval CREATE FUNCTION IF NOT EXISTS metaphon RETURNS REAL SONAME "$UDF_EXAMPLE_SO"; |
|||
SELECT ret FROM mysql.func WHERE name like 'metaphon'; |
|||
|
|||
--error ER_WRONG_USAGE |
|||
eval CREATE OR REPLACE FUNCTION IF NOT EXISTS metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_SO"; |
|||
SELECT ret FROM mysql.func WHERE name like 'metaphon'; |
|||
|
|||
--replace_result $UDF_EXAMPLE_SO UDF_EXAMPLE_LIB |
|||
eval CREATE OR REPLACE FUNCTION metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_SO"; |
|||
SELECT ret FROM mysql.func WHERE name like 'metaphon'; |
|||
|
|||
--error ER_UDF_EXISTS |
|||
eval CREATE FUNCTION metaphon RETURNS STRING SONAME "$UDF_EXAMPLE_SO"; |
|||
SELECT metaphon('mariadb'); |
|||
|
|||
DROP FUNCTION metaphon; |
|||
DROP FUNCTION IF EXISTS metaphon; |
Write
Preview
Loading…
Cancel
Save
Reference in new issue