summaryrefslogtreecommitdiffstats
path: root/mysql-test/main/sp-security.result
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/main/sp-security.result')
-rw-r--r--mysql-test/main/sp-security.result893
1 files changed, 890 insertions, 3 deletions
diff --git a/mysql-test/main/sp-security.result b/mysql-test/main/sp-security.result
index eb186dd7..93e05c52 100644
--- a/mysql-test/main/sp-security.result
+++ b/mysql-test/main/sp-security.result
@@ -240,7 +240,7 @@ grant all privileges on procedure sptest.p1 to userc@localhost;
show grants for userc@localhost;
Grants for userc@localhost
GRANT USAGE ON *.* TO `userc`@`localhost`
-GRANT EXECUTE, ALTER ROUTINE ON PROCEDURE `sptest`.`p1` TO `userc`@`localhost` WITH GRANT OPTION
+GRANT EXECUTE, ALTER ROUTINE, SHOW CREATE ROUTINE ON PROCEDURE `sptest`.`p1` TO `userc`@`localhost` WITH GRANT OPTION
show grants for userb@localhost;
Grants for userb@localhost
GRANT USAGE ON *.* TO `userb`@`localhost`
@@ -432,9 +432,9 @@ CREATE FUNCTION wl2897_f1() RETURNS INT RETURN 1;
connection mysqltest_1_con;
USE mysqltest;
CREATE DEFINER=root@localhost PROCEDURE wl2897_p2() SELECT 2;
-ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SET USER privilege(s) for this operation
CREATE DEFINER=root@localhost FUNCTION wl2897_f2() RETURNS INT RETURN 2;
-ERROR 42000: Access denied; you need (at least one of) the SUPER, SET USER privilege(s) for this operation
+ERROR 42000: Access denied; you need (at least one of) the SET USER privilege(s) for this operation
connection mysqltest_2_con;
use mysqltest;
CREATE DEFINER='a @ b @ c'@localhost PROCEDURE wl2897_p3() SELECT 3;
@@ -843,3 +843,890 @@ drop function f;
#
# End of 10.6 tests
#
+#
+# MDEV-29167: new db-level SHOW CREATE ROUTINE privilege
+#
+###
+### SHOW-Like commad test
+###
+SET @save_sql_mode=@@sql_mode;
+#
+### Prepare functions for the test and SHOW-like by root
+#
+create database test_db;
+use test_db;
+create procedure test_db.sp() select 1;
+show create procedure test_db.sp;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `sp`()
+select 1 latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PROCEDURE STATUS WHERE name="sp";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db sp PROCEDURE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="sp";
+ROUTINE_NAME ROUTINE_DEFINITION
+sp select 1
+CREATE FUNCTION test_db.fn() RETURNS INT RETURN 1;
+show create function test_db.fn;
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` FUNCTION `fn`() RETURNS int(11)
+RETURN 1 latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW FUNCTION STATUS WHERE name="fn";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db fn FUNCTION root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="fn";
+ROUTINE_NAME ROUTINE_DEFINITION
+fn RETURN 1
+SET sql_mode=ORACLE;
+CREATE PACKAGE test_db.pk AS
+FUNCTION pkf() RETURN INT;
+PROCEDURE pkp();
+END;
+$$
+CREATE PACKAGE BODY test_db.pk AS
+pkv INT:=1;
+PROCEDURE pkhp() AS
+BEGIN
+SELECT pkv FROM DUAL;
+END;
+FUNCTION pkhf() RETURN INT AS
+BEGIN
+RETURN pkv;
+END;
+PROCEDURE pkp() AS
+BEGIN
+CALL pkhp();
+END;
+FUNCTION pkf() RETURN INT AS
+BEGIN
+RETURN pkhf();
+END;
+BEGIN
+pkv:=2;
+END;
+$$
+SET sql_mode=@save_sql_mode;
+show create package test_db.pk;
+Package sql_mode Create Package character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT CREATE DEFINER="root"@"localhost" PACKAGE "pk" AS
+FUNCTION pkf() RETURN INT;
+PROCEDURE pkp();
+END latin1 latin1_swedish_ci latin1_swedish_ci
+show create package body test_db.pk;
+Package body sql_mode Create Package Body character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT CREATE DEFINER="root"@"localhost" PACKAGE BODY "pk" AS
+pkv INT:=1;
+PROCEDURE pkhp() AS
+BEGIN
+SELECT pkv FROM DUAL;
+END;
+FUNCTION pkhf() RETURN INT AS
+BEGIN
+RETURN pkv;
+END;
+PROCEDURE pkp() AS
+BEGIN
+CALL pkhp();
+END;
+FUNCTION pkf() RETURN INT AS
+BEGIN
+RETURN pkhf();
+END;
+BEGIN
+pkv:=2;
+END latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PACKAGE STATUS WHERE name="pk";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db pk PACKAGE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="pk";
+ROUTINE_NAME ROUTINE_TYPE ROUTINE_DEFINITION
+pk PACKAGE AS
+FUNCTION pkf() RETURN INT;
+PROCEDURE pkp();
+END
+pk PACKAGE BODY AS
+pkv INT:=1;
+PROCEDURE pkhp() AS
+BEGIN
+SELECT pkv FROM DUAL;
+END;
+FUNCTION pkhf() RETURN INT AS
+BEGIN
+RETURN pkv;
+END;
+PROCEDURE pkp() AS
+BEGIN
+CALL pkhp();
+END;
+FUNCTION pkf() RETURN INT AS
+BEGIN
+RETURN pkhf();
+END;
+BEGIN
+pkv:=2;
+END
+use test;
+###
+### Pre-"SHOW-CREATE-ROUTINE" behaviour tests
+###
+#
+### Rights on mysql.proc
+#
+create user user@localhost;
+grant all privileges on mysql.* to user@localhost;
+grant all privileges on test.* to user@localhost;
+connect conn1, localhost, user, , test;
+show create procedure test_db.sp;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `sp`()
+select 1 latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PROCEDURE STATUS WHERE name="sp";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db sp PROCEDURE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME from information_schema.ROUTINES where ROUTINE_NAME="sp";
+ROUTINE_NAME
+sp
+show create function test_db.fn;
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` FUNCTION `fn`() RETURNS int(11)
+RETURN 1 latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW FUNCTION STATUS WHERE name="fn";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db fn FUNCTION root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where
+ROUTINE_NAME="fn";
+ROUTINE_NAME ROUTINE_DEFINITION
+fn RETURN 1
+show create package test_db.pk;
+Package sql_mode Create Package character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT CREATE DEFINER="root"@"localhost" PACKAGE "pk" AS
+FUNCTION pkf() RETURN INT;
+PROCEDURE pkp();
+END latin1 latin1_swedish_ci latin1_swedish_ci
+show create package body test_db.pk;
+Package body sql_mode Create Package Body character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT CREATE DEFINER="root"@"localhost" PACKAGE BODY "pk" AS
+pkv INT:=1;
+PROCEDURE pkhp() AS
+BEGIN
+SELECT pkv FROM DUAL;
+END;
+FUNCTION pkhf() RETURN INT AS
+BEGIN
+RETURN pkv;
+END;
+PROCEDURE pkp() AS
+BEGIN
+CALL pkhp();
+END;
+FUNCTION pkf() RETURN INT AS
+BEGIN
+RETURN pkhf();
+END;
+BEGIN
+pkv:=2;
+END latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PACKAGE STATUS WHERE name="pk";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db pk PACKAGE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="pk";
+ROUTINE_NAME ROUTINE_TYPE ROUTINE_DEFINITION
+pk PACKAGE AS
+FUNCTION pkf() RETURN INT;
+PROCEDURE pkp();
+END
+pk PACKAGE BODY AS
+pkv INT:=1;
+PROCEDURE pkhp() AS
+BEGIN
+SELECT pkv FROM DUAL;
+END;
+FUNCTION pkhf() RETURN INT AS
+BEGIN
+RETURN pkv;
+END;
+PROCEDURE pkp() AS
+BEGIN
+CALL pkhp();
+END;
+FUNCTION pkf() RETURN INT AS
+BEGIN
+RETURN pkhf();
+END;
+BEGIN
+pkv:=2;
+END
+connection default;
+disconnect conn1;
+revoke all privileges on mysql.* from user@localhost;
+#
+### No privileges
+#
+connect conn1, localhost, user, , test;
+show create procedure test_db.sp;
+ERROR 42000: PROCEDURE sp does not exist
+SHOW PROCEDURE STATUS WHERE name="sp";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+SELECT ROUTINE_NAME from information_schema.ROUTINES where ROUTINE_NAME="sp";
+ROUTINE_NAME
+show create function test_db.fn;
+ERROR 42000: FUNCTION fn does not exist
+SHOW FUNCTION STATUS WHERE name="fn";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where
+ROUTINE_NAME="fn";
+ROUTINE_NAME ROUTINE_DEFINITION
+show create package test_db.pk;
+ERROR 42000: PACKAGE pk does not exist
+show create package body test_db.pk;
+ERROR 42000: PACKAGE BODY pk does not exist
+SHOW PACKAGE STATUS WHERE name="pk";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="pk";
+ROUTINE_NAME ROUTINE_TYPE ROUTINE_DEFINITION
+connection default;
+disconnect conn1;
+#
+### Execute provilege PROCEDURE/FUNCTION
+#
+grant execute on procedure test_db.sp to user@localhost;
+grant execute on function test_db.fn to user@localhost;
+connect conn1, localhost, user, , test;
+show create procedure test_db.sp;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION NULL latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PROCEDURE STATUS WHERE name="sp";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db sp PROCEDURE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME from information_schema.ROUTINES where ROUTINE_NAME="sp";
+ROUTINE_NAME
+sp
+call test_db.sp();
+1
+1
+show create function test_db.fn;
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION NULL latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW FUNCTION STATUS WHERE name="fn";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db fn FUNCTION root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where
+ROUTINE_NAME="fn";
+ROUTINE_NAME ROUTINE_DEFINITION
+fn NULL
+select test_db.fn();
+test_db.fn()
+1
+connection default;
+disconnect conn1;
+revoke execute on procedure test_db.sp from user@localhost;
+revoke execute on function test_db.fn from user@localhost;
+#
+### Execute provilege PACKAGE+ PACKAGE BODY-
+#
+SET sql_mode=ORACLE;
+grant execute on package test_db.pk to user@localhost;
+SET sql_mode=@save_sql_mode;
+connect conn1, localhost, user, , test;
+show create package test_db.pk;
+Package sql_mode Create Package character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT NULL latin1 latin1_swedish_ci latin1_swedish_ci
+show create package body test_db.pk;
+ERROR 42000: PACKAGE BODY pk does not exist
+SHOW PACKAGE STATUS WHERE name="pk";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db pk PACKAGE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="pk";
+ROUTINE_NAME ROUTINE_TYPE ROUTINE_DEFINITION
+pk PACKAGE NULL
+call test_db.pk.pkp();
+ERROR 42000: execute command denied to user 'user'@'localhost' for routine 'test_db.pk'
+select test_db.pk.pkf();
+ERROR 42000: execute command denied to user 'user'@'localhost' for routine 'test_db.pk'
+connection default;
+disconnect conn1;
+SET sql_mode=ORACLE;
+revoke execute on package test_db.pk from user@localhost;
+SET sql_mode=@save_sql_mode;
+#
+### Execute provilege PACKAGE- PACKAGE BODY+
+#
+SET sql_mode=ORACLE;
+grant execute on package body test_db.pk to user@localhost;
+SET sql_mode=@save_sql_mode;
+connect conn1, localhost, user, , test;
+show create package test_db.pk;
+ERROR 42000: PACKAGE pk does not exist
+show create package body test_db.pk;
+Package body sql_mode Create Package Body character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT NULL latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PACKAGE STATUS WHERE name="pk";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="pk";
+ROUTINE_NAME ROUTINE_TYPE ROUTINE_DEFINITION
+pk PACKAGE BODY NULL
+call test_db.pk.pkp();
+pkv
+2
+select test_db.pk.pkf();
+test_db.pk.pkf()
+2
+connection default;
+disconnect conn1;
+SET sql_mode=ORACLE;
+revoke execute on package body test_db.pk from user@localhost;
+SET sql_mode=@save_sql_mode;
+#
+### Alter routine provilege PROCEDURE/FUNCTION
+#
+grant alter routine on procedure test_db.sp to user@localhost;
+grant alter routine on function test_db.fn to user@localhost;
+connect conn1, localhost, user, , test;
+show create procedure test_db.sp;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION NULL latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PROCEDURE STATUS WHERE name="sp";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db sp PROCEDURE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME from information_schema.ROUTINES where ROUTINE_NAME="sp";
+ROUTINE_NAME
+sp
+show create function test_db.fn;
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION NULL latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW FUNCTION STATUS WHERE name="fn";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db fn FUNCTION root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where
+ROUTINE_NAME="fn";
+ROUTINE_NAME ROUTINE_DEFINITION
+fn NULL
+connection default;
+disconnect conn1;
+revoke alter routine on procedure test_db.sp from user@localhost;
+revoke alter routine on function test_db.fn from user@localhost;
+#
+### Alter routine provilege PACKAGE+ PACKAGE BODY-
+#
+SET sql_mode=ORACLE;
+grant alter routine on package test_db.pk to user@localhost;
+SET sql_mode=@save_sql_mode;
+connect conn1, localhost, user, , test;
+show create package test_db.pk;
+Package sql_mode Create Package character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT NULL latin1 latin1_swedish_ci latin1_swedish_ci
+show create package body test_db.pk;
+ERROR 42000: PACKAGE BODY pk does not exist
+SHOW PACKAGE STATUS WHERE name="pk";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db pk PACKAGE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="pk";
+ROUTINE_NAME ROUTINE_TYPE ROUTINE_DEFINITION
+pk PACKAGE NULL
+connection default;
+disconnect conn1;
+SET sql_mode=ORACLE;
+revoke alter routine on package test_db.pk from user@localhost;
+SET sql_mode=@save_sql_mode;
+#
+### Alter routine provilege PACKAGE+ PACKAGE BODY-
+#
+SET sql_mode=ORACLE;
+grant alter routine on package body test_db.pk to user@localhost;
+SET sql_mode=@save_sql_mode;
+connect conn1, localhost, user, , test;
+show create package test_db.pk;
+ERROR 42000: PACKAGE pk does not exist
+show create package body test_db.pk;
+Package body sql_mode Create Package Body character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT NULL latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PACKAGE STATUS WHERE name="pk";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="pk";
+ROUTINE_NAME ROUTINE_TYPE ROUTINE_DEFINITION
+pk PACKAGE BODY NULL
+connection default;
+disconnect conn1;
+SET sql_mode=ORACLE;
+revoke alter routine on package body test_db.pk from user@localhost;
+SET sql_mode=@save_sql_mode;
+###
+### SHOW CREATE PROCEDURE tests
+###
+#
+### Global "show create routine" test
+#
+grant show create routine on *.* to user@localhost;
+show grants for user@localhost;
+Grants for user@localhost
+GRANT SHOW CREATE ROUTINE ON *.* TO `user`@`localhost`
+GRANT ALL PRIVILEGES ON `test`.* TO `user`@`localhost`
+connect conn1, localhost, user, , test;
+show create procedure test_db.sp;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `sp`()
+select 1 latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PROCEDURE STATUS WHERE name="sp";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db sp PROCEDURE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="sp";
+ROUTINE_NAME ROUTINE_DEFINITION
+sp select 1
+show create function test_db.fn;
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` FUNCTION `fn`() RETURNS int(11)
+RETURN 1 latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW FUNCTION STATUS WHERE name="fn";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db fn FUNCTION root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="fn";
+ROUTINE_NAME ROUTINE_DEFINITION
+fn RETURN 1
+show create package test_db.pk;
+Package sql_mode Create Package character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT CREATE DEFINER="root"@"localhost" PACKAGE "pk" AS
+FUNCTION pkf() RETURN INT;
+PROCEDURE pkp();
+END latin1 latin1_swedish_ci latin1_swedish_ci
+show create package body test_db.pk;
+Package body sql_mode Create Package Body character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT CREATE DEFINER="root"@"localhost" PACKAGE BODY "pk" AS
+pkv INT:=1;
+PROCEDURE pkhp() AS
+BEGIN
+SELECT pkv FROM DUAL;
+END;
+FUNCTION pkhf() RETURN INT AS
+BEGIN
+RETURN pkv;
+END;
+PROCEDURE pkp() AS
+BEGIN
+CALL pkhp();
+END;
+FUNCTION pkf() RETURN INT AS
+BEGIN
+RETURN pkhf();
+END;
+BEGIN
+pkv:=2;
+END latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PACKAGE STATUS WHERE name="pk";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db pk PACKAGE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="pk";
+ROUTINE_NAME ROUTINE_TYPE ROUTINE_DEFINITION
+pk PACKAGE AS
+FUNCTION pkf() RETURN INT;
+PROCEDURE pkp();
+END
+pk PACKAGE BODY AS
+pkv INT:=1;
+PROCEDURE pkhp() AS
+BEGIN
+SELECT pkv FROM DUAL;
+END;
+FUNCTION pkhf() RETURN INT AS
+BEGIN
+RETURN pkv;
+END;
+PROCEDURE pkp() AS
+BEGIN
+CALL pkhp();
+END;
+FUNCTION pkf() RETURN INT AS
+BEGIN
+RETURN pkhf();
+END;
+BEGIN
+pkv:=2;
+END
+connection default;
+disconnect conn1;
+revoke show create routine on *.* from user@localhost;
+#
+### DB-level "show create routine" but other DB test
+#
+grant show create routine on db_test.* to user@localhost;
+show grants for user@localhost;
+Grants for user@localhost
+GRANT USAGE ON *.* TO `user`@`localhost`
+GRANT ALL PRIVILEGES ON `test`.* TO `user`@`localhost`
+GRANT SHOW CREATE ROUTINE ON `db_test`.* TO `user`@`localhost`
+connect conn1, localhost, user, , test;
+show create procedure test_db.sp;
+ERROR 42000: PROCEDURE sp does not exist
+SHOW PROCEDURE STATUS WHERE name="sp";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="sp";
+ROUTINE_NAME ROUTINE_DEFINITION
+show create function test_db.fn;
+ERROR 42000: FUNCTION fn does not exist
+SHOW FUNCTION STATUS WHERE name="fn";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="fn";
+ROUTINE_NAME ROUTINE_DEFINITION
+show create package test_db.pk;
+ERROR 42000: PACKAGE pk does not exist
+show create package body test_db.pk;
+ERROR 42000: PACKAGE BODY pk does not exist
+SHOW PACKAGE STATUS WHERE name="pk";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="pk";
+ROUTINE_NAME ROUTINE_TYPE ROUTINE_DEFINITION
+connection default;
+disconnect conn1;
+revoke show create routine on db_test.* from user@localhost;
+#
+### DB-level "show create routine" test
+#
+grant show create routine on test_db.* to user@localhost;
+show grants for user@localhost;
+Grants for user@localhost
+GRANT USAGE ON *.* TO `user`@`localhost`
+GRANT ALL PRIVILEGES ON `test`.* TO `user`@`localhost`
+GRANT SHOW CREATE ROUTINE ON `test_db`.* TO `user`@`localhost`
+connect conn1, localhost, user, , test;
+show create procedure test_db.sp;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `sp`()
+select 1 latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PROCEDURE STATUS WHERE name="sp";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db sp PROCEDURE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="sp";
+ROUTINE_NAME ROUTINE_DEFINITION
+sp select 1
+show create function test_db.fn;
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` FUNCTION `fn`() RETURNS int(11)
+RETURN 1 latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW FUNCTION STATUS WHERE name="fn";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db fn FUNCTION root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="fn";
+ROUTINE_NAME ROUTINE_DEFINITION
+fn RETURN 1
+show create package test_db.pk;
+Package sql_mode Create Package character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT CREATE DEFINER="root"@"localhost" PACKAGE "pk" AS
+FUNCTION pkf() RETURN INT;
+PROCEDURE pkp();
+END latin1 latin1_swedish_ci latin1_swedish_ci
+show create package body test_db.pk;
+Package body sql_mode Create Package Body character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT CREATE DEFINER="root"@"localhost" PACKAGE BODY "pk" AS
+pkv INT:=1;
+PROCEDURE pkhp() AS
+BEGIN
+SELECT pkv FROM DUAL;
+END;
+FUNCTION pkhf() RETURN INT AS
+BEGIN
+RETURN pkv;
+END;
+PROCEDURE pkp() AS
+BEGIN
+CALL pkhp();
+END;
+FUNCTION pkf() RETURN INT AS
+BEGIN
+RETURN pkhf();
+END;
+BEGIN
+pkv:=2;
+END latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PACKAGE STATUS WHERE name="pk";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db pk PACKAGE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="pk";
+ROUTINE_NAME ROUTINE_TYPE ROUTINE_DEFINITION
+pk PACKAGE AS
+FUNCTION pkf() RETURN INT;
+PROCEDURE pkp();
+END
+pk PACKAGE BODY AS
+pkv INT:=1;
+PROCEDURE pkhp() AS
+BEGIN
+SELECT pkv FROM DUAL;
+END;
+FUNCTION pkhf() RETURN INT AS
+BEGIN
+RETURN pkv;
+END;
+PROCEDURE pkp() AS
+BEGIN
+CALL pkhp();
+END;
+FUNCTION pkf() RETURN INT AS
+BEGIN
+RETURN pkhf();
+END;
+BEGIN
+pkv:=2;
+END
+connection default;
+disconnect conn1;
+revoke show create routine on test_db.* from user@localhost;
+#
+### Routine-level "show create routine" PROCEDURE and FUNCTION
+#
+grant show create routine on procedure test_db.sp to user@localhost;
+grant show create routine on function test_db.fn to user@localhost;
+connect conn1, localhost, user, , test;
+show create procedure test_db.sp;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` PROCEDURE `sp`()
+select 1 latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PROCEDURE STATUS WHERE name="sp";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db sp PROCEDURE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="sp";
+ROUTINE_NAME ROUTINE_DEFINITION
+sp select 1
+call test_db.sp();
+ERROR 42000: execute command denied to user 'user'@'localhost' for routine 'test_db.sp'
+show create function test_db.fn;
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` FUNCTION `fn`() RETURNS int(11)
+RETURN 1 latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW FUNCTION STATUS WHERE name="fn";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db fn FUNCTION root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where
+ROUTINE_NAME="fn";
+ROUTINE_NAME ROUTINE_DEFINITION
+fn RETURN 1
+select test_db.fn();
+ERROR 42000: execute command denied to user 'user'@'localhost' for routine 'test_db.fn'
+connection default;
+disconnect conn1;
+revoke show create routine on procedure test_db.sp from user@localhost;
+revoke show create routine on function test_db.fn from user@localhost;
+#
+### Routine-level "show create routine" PACKAGE+ PACKAGE BODY-
+#
+SET sql_mode=ORACLE;
+grant show create routine on package test_db.pk to user@localhost;
+SET sql_mode=@save_sql_mode;
+connect conn1, localhost, user, , test;
+show create package test_db.pk;
+Package sql_mode Create Package character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT CREATE DEFINER="root"@"localhost" PACKAGE "pk" AS
+FUNCTION pkf() RETURN INT;
+PROCEDURE pkp();
+END latin1 latin1_swedish_ci latin1_swedish_ci
+show create package body test_db.pk;
+ERROR 42000: PACKAGE BODY pk does not exist
+SHOW PACKAGE STATUS WHERE name="pk";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db pk PACKAGE root@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="pk";
+ROUTINE_NAME ROUTINE_TYPE ROUTINE_DEFINITION
+pk PACKAGE AS
+FUNCTION pkf() RETURN INT;
+PROCEDURE pkp();
+END
+call test_db.pk.pkp();
+ERROR 42000: execute command denied to user 'user'@'localhost' for routine 'test_db.pk'
+select test_db.pk.pkf();
+ERROR 42000: execute command denied to user 'user'@'localhost' for routine 'test_db.pk'
+connection default;
+disconnect conn1;
+SET sql_mode=ORACLE;
+revoke show create routine on package test_db.pk from user@localhost;
+SET sql_mode=@save_sql_mode;
+#
+### Routine-level "show create routine" PACKAGE- PACKAGE BODY+
+#
+SET sql_mode=ORACLE;
+grant show create routine on package body test_db.pk to user@localhost;
+SET sql_mode=@save_sql_mode;
+connect conn1, localhost, user, , test;
+show create package test_db.pk;
+ERROR 42000: PACKAGE pk does not exist
+show create package body test_db.pk;
+Package body sql_mode Create Package Body character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT CREATE DEFINER="root"@"localhost" PACKAGE BODY "pk" AS
+pkv INT:=1;
+PROCEDURE pkhp() AS
+BEGIN
+SELECT pkv FROM DUAL;
+END;
+FUNCTION pkhf() RETURN INT AS
+BEGIN
+RETURN pkv;
+END;
+PROCEDURE pkp() AS
+BEGIN
+CALL pkhp();
+END;
+FUNCTION pkf() RETURN INT AS
+BEGIN
+RETURN pkhf();
+END;
+BEGIN
+pkv:=2;
+END latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PACKAGE STATUS WHERE name="pk";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="pk";
+ROUTINE_NAME ROUTINE_TYPE ROUTINE_DEFINITION
+pk PACKAGE BODY AS
+pkv INT:=1;
+PROCEDURE pkhp() AS
+BEGIN
+SELECT pkv FROM DUAL;
+END;
+FUNCTION pkhf() RETURN INT AS
+BEGIN
+RETURN pkv;
+END;
+PROCEDURE pkp() AS
+BEGIN
+CALL pkhp();
+END;
+FUNCTION pkf() RETURN INT AS
+BEGIN
+RETURN pkhf();
+END;
+BEGIN
+pkv:=2;
+END
+call test_db.pk.pkp();
+ERROR 42000: execute command denied to user 'user'@'localhost' for routine 'test_db.pk'
+select test_db.pk.pkf();
+ERROR 42000: execute command denied to user 'user'@'localhost' for routine 'test_db.pk'
+connection default;
+disconnect conn1;
+SET sql_mode=ORACLE;
+revoke show create routine on package body test_db.pk from user@localhost;
+SET sql_mode=@save_sql_mode;
+drop user user@localhost;
+drop database test_db;
+#
+### Check owner only rights
+#
+create user user@localhost;
+create database test_db;
+use test_db;
+create definer=user@localhost procedure test_db.sp() select 1;
+CREATE definer=user@localhost FUNCTION test_db.fn() RETURNS INT RETURN 1;
+SET sql_mode=ORACLE;
+CREATE definer=user@localhost PACKAGE test_db.pk AS
+FUNCTION pkf() RETURN INT;
+PROCEDURE pkp();
+END;
+$$
+CREATE definer=user@localhost PACKAGE BODY test_db.pk AS
+pkv INT:=1;
+PROCEDURE pkhp() AS
+BEGIN
+SELECT pkv FROM DUAL;
+END;
+FUNCTION pkhf() RETURN INT AS
+BEGIN
+RETURN pkv;
+END;
+PROCEDURE pkp() AS
+BEGIN
+CALL pkhp();
+END;
+FUNCTION pkf() RETURN INT AS
+BEGIN
+RETURN pkhf();
+END;
+BEGIN
+pkv:=2;
+END;
+$$
+use test;
+connect conn1, localhost, user, , "*NO-ONE*";
+show create procedure test_db.sp;
+Procedure sql_mode Create Procedure character_set_client collation_connection Database Collation
+sp STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`user`@`localhost` PROCEDURE `sp`()
+select 1 latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PROCEDURE STATUS WHERE name="sp";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db sp PROCEDURE user@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME from information_schema.ROUTINES where ROUTINE_NAME="sp";
+ROUTINE_NAME
+sp
+show create function test_db.fn;
+Function sql_mode Create Function character_set_client collation_connection Database Collation
+fn STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`user`@`localhost` FUNCTION `fn`() RETURNS int(11)
+RETURN 1 latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW FUNCTION STATUS WHERE name="fn";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db fn FUNCTION user@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_DEFINITION from information_schema.ROUTINES where
+ROUTINE_NAME="fn";
+ROUTINE_NAME ROUTINE_DEFINITION
+fn RETURN 1
+show create package test_db.pk;
+Package sql_mode Create Package character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT CREATE DEFINER="user"@"localhost" PACKAGE "pk" AS
+FUNCTION pkf() RETURN INT;
+PROCEDURE pkp();
+END latin1 latin1_swedish_ci latin1_swedish_ci
+show create package body test_db.pk;
+Package body sql_mode Create Package Body character_set_client collation_connection Database Collation
+pk PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ORACLE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,SIMULTANEOUS_ASSIGNMENT CREATE DEFINER="user"@"localhost" PACKAGE BODY "pk" AS
+pkv INT:=1;
+PROCEDURE pkhp() AS
+BEGIN
+SELECT pkv FROM DUAL;
+END;
+FUNCTION pkhf() RETURN INT AS
+BEGIN
+RETURN pkv;
+END;
+PROCEDURE pkp() AS
+BEGIN
+CALL pkhp();
+END;
+FUNCTION pkf() RETURN INT AS
+BEGIN
+RETURN pkhf();
+END;
+BEGIN
+pkv:=2;
+END latin1 latin1_swedish_ci latin1_swedish_ci
+SHOW PACKAGE STATUS WHERE name="pk";
+Db Name Type Definer Modified Created Security_type Comment character_set_client collation_connection Database Collation
+test_db pk PACKAGE user@localhost # # DEFINER latin1 latin1_swedish_ci latin1_swedish_ci
+SELECT ROUTINE_NAME, ROUTINE_TYPE, ROUTINE_DEFINITION from information_schema.ROUTINES where ROUTINE_NAME="pk";
+ROUTINE_NAME ROUTINE_TYPE ROUTINE_DEFINITION
+pk PACKAGE AS
+FUNCTION pkf() RETURN INT;
+PROCEDURE pkp();
+END
+pk PACKAGE BODY AS
+pkv INT:=1;
+PROCEDURE pkhp() AS
+BEGIN
+SELECT pkv FROM DUAL;
+END;
+FUNCTION pkhf() RETURN INT AS
+BEGIN
+RETURN pkv;
+END;
+PROCEDURE pkp() AS
+BEGIN
+CALL pkhp();
+END;
+FUNCTION pkf() RETURN INT AS
+BEGIN
+RETURN pkhf();
+END;
+BEGIN
+pkv:=2;
+END
+connection default;
+disconnect conn1;
+drop user user@localhost;
+drop database test_db;
+#
+# End of 11.3 tests
+#