Skip to content

Commit 6437b30

Browse files
committed
MDEV-28166 sql_mode=ORACLE: fully qualified package function calls do not work: db.pkg.func()
Also fixes MDEV-19328 sql_mode=ORACLE: Package function in VIEW
1 parent cd88b08 commit 6437b30

File tree

8 files changed

+519
-2
lines changed

8 files changed

+519
-2
lines changed

mysql-test/suite/compat/oracle/r/sp-package.result

Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2925,3 +2925,213 @@ END $$
29252925
CALL xyz.xyz123(17,18,@R);
29262926
DROP PACKAGE xyz;
29272927
DROP TABLE t1;
2928+
#
2929+
# MDEV-28166 sql_mode=ORACLE: fully qualified package function calls do not work: db.pkg.func()
2930+
#
2931+
SELECT `db `.pkg.func();
2932+
ERROR 42000: Incorrect database name 'db '
2933+
SELECT db.`pkg `.func();
2934+
ERROR 42000: Incorrect routine name 'pkg '
2935+
SELECT db.pkg.`func `();
2936+
ERROR 42000: Incorrect routine name 'func '
2937+
CREATE DATABASE db1;
2938+
USE db1;
2939+
CREATE PACKAGE pkg1 AS
2940+
FUNCTION f1 RETURN TEXT;
2941+
FUNCTION f2_db1_pkg1_f1 RETURN TEXT;
2942+
FUNCTION f2_pkg1_f1 RETURN TEXT;
2943+
FUNCTION f2_f1 RETURN TEXT;
2944+
END;
2945+
$$
2946+
CREATE PACKAGE BODY pkg1
2947+
AS
2948+
FUNCTION f1 RETURN TEXT IS
2949+
BEGIN
2950+
RETURN 'This is db1.pkg1.f1';
2951+
END;
2952+
FUNCTION f2_db1_pkg1_f1 RETURN TEXT IS
2953+
BEGIN
2954+
RETURN db1.pkg1.f1();
2955+
END;
2956+
FUNCTION f2_pkg1_f1 RETURN TEXT IS
2957+
BEGIN
2958+
RETURN pkg1.f1();
2959+
END;
2960+
FUNCTION f2_f1 RETURN TEXT IS
2961+
BEGIN
2962+
RETURN f1();
2963+
END;
2964+
END;
2965+
$$
2966+
USE db1;
2967+
SELECT pkg1.f2_db1_pkg1_f1();
2968+
pkg1.f2_db1_pkg1_f1()
2969+
This is db1.pkg1.f1
2970+
SELECT pkg1.f2_pkg1_f1();
2971+
pkg1.f2_pkg1_f1()
2972+
This is db1.pkg1.f1
2973+
SELECT pkg1.f2_f1();
2974+
pkg1.f2_f1()
2975+
This is db1.pkg1.f1
2976+
SELECT db1.pkg1.f2_db1_pkg1_f1();
2977+
db1.pkg1.f2_db1_pkg1_f1()
2978+
This is db1.pkg1.f1
2979+
SELECT db1.pkg1.f2_pkg1_f1();
2980+
db1.pkg1.f2_pkg1_f1()
2981+
This is db1.pkg1.f1
2982+
SELECT db1.pkg1.f2_f1();
2983+
db1.pkg1.f2_f1()
2984+
This is db1.pkg1.f1
2985+
USE test;
2986+
SELECT db1.pkg1.f2_db1_pkg1_f1();
2987+
db1.pkg1.f2_db1_pkg1_f1()
2988+
This is db1.pkg1.f1
2989+
SELECT db1.pkg1.f2_pkg1_f1();
2990+
db1.pkg1.f2_pkg1_f1()
2991+
This is db1.pkg1.f1
2992+
SELECT db1.pkg1.f2_f1();
2993+
db1.pkg1.f2_f1()
2994+
This is db1.pkg1.f1
2995+
DROP DATABASE db1;
2996+
CREATE DATABASE db1;
2997+
CREATE DATABASE db2;
2998+
CREATE PACKAGE db1.pkg1 AS
2999+
FUNCTION f1 RETURN TEXT;
3000+
END;
3001+
$$
3002+
CREATE PACKAGE BODY db1.pkg1 AS
3003+
FUNCTION f1 RETURN TEXT AS
3004+
BEGIN
3005+
RETURN 'This is db1.pkg1.f1';
3006+
END;
3007+
END;
3008+
$$
3009+
CREATE PACKAGE db2.pkg1 AS
3010+
FUNCTION f1 RETURN TEXT;
3011+
FUNCTION var1 RETURN TEXT;
3012+
FUNCTION var2 RETURN TEXT;
3013+
END;
3014+
$$
3015+
CREATE PACKAGE BODY db2.pkg1 AS
3016+
m_var1 TEXT;
3017+
m_var2 TEXT;
3018+
FUNCTION f1 RETURN TEXT AS
3019+
BEGIN
3020+
RETURN 'This is db2.pkg1.f1';
3021+
END;
3022+
FUNCTION var1 RETURN TEXT AS
3023+
BEGIN
3024+
RETURN m_var1;
3025+
END;
3026+
FUNCTION var2 RETURN TEXT AS
3027+
BEGIN
3028+
RETURN m_var2;
3029+
END;
3030+
BEGIN
3031+
m_var1:= db1.pkg1.f1();
3032+
m_var2:= db2.pkg1.f1();
3033+
END;
3034+
$$
3035+
SELECT db2.pkg1.var1(), db2.pkg1.var2();
3036+
db2.pkg1.var1() db2.pkg1.var2()
3037+
This is db1.pkg1.f1 This is db2.pkg1.f1
3038+
DROP DATABASE db1;
3039+
DROP DATABASE db2;
3040+
CREATE PACKAGE pkg1 AS
3041+
FUNCTION f1(a TEXT) RETURN TEXT;
3042+
END;
3043+
$$
3044+
CREATE PACKAGE BODY pkg1 AS
3045+
FUNCTION f1(a TEXT) RETURN TEXT AS
3046+
BEGIN
3047+
RETURN a;
3048+
END;
3049+
END;
3050+
$$
3051+
SELECT test.pkg1.f1('xxx');
3052+
test.pkg1.f1('xxx')
3053+
xxx
3054+
SELECT test.pkg1.f1('xxx' AS a);
3055+
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AS a)' at line 1
3056+
DROP PACKAGE pkg1;
3057+
#
3058+
# MDEV-19328 sql_mode=ORACLE: Package function in VIEW
3059+
#
3060+
SET sql_mode=ORACLE;
3061+
CREATE PACKAGE test1 AS
3062+
FUNCTION f_test RETURN number;
3063+
END test1;
3064+
$$
3065+
CREATE PACKAGE BODY test1
3066+
AS
3067+
FUNCTION f_test RETURN NUMBER IS
3068+
BEGIN
3069+
RETURN 1;
3070+
END;
3071+
END test1;
3072+
$$
3073+
SET sql_mode=ORACLE;
3074+
CREATE VIEW v_test AS SELECT 1 AS c1 FROM DUAL WHERE 1=test1.f_test();
3075+
SELECT * FROM v_test;
3076+
c1
3077+
1
3078+
SHOW CREATE VIEW v_test;
3079+
View v_test
3080+
Create View CREATE VIEW "v_test" AS select 1 AS "c1" from DUAL where 1 = "test"."test1"."f_test"()
3081+
character_set_client latin1
3082+
collation_connection latin1_swedish_ci
3083+
SET sql_mode=DEFAULT;
3084+
SELECT * FROM v_test;
3085+
c1
3086+
1
3087+
SHOW CREATE VIEW v_test;
3088+
View v_test
3089+
Create View CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_test` AS select 1 AS `c1` from DUAL where 1 = `test`.`test1`.`f_test`()
3090+
character_set_client latin1
3091+
collation_connection latin1_swedish_ci
3092+
DROP VIEW v_test;
3093+
SET sql_mode=DEFAULT;
3094+
CREATE VIEW v_test AS SELECT 1 AS c1 FROM DUAL WHERE 1=test1.f_test();
3095+
ERROR 42000: FUNCTION test1.f_test does not exist
3096+
SET sql_mode=ORACLE;
3097+
CREATE VIEW v_test AS SELECT 1 AS c1 FROM DUAL WHERE 1=test.test1.f_test();
3098+
SELECT * FROM v_test;
3099+
c1
3100+
1
3101+
SHOW CREATE VIEW v_test;
3102+
View v_test
3103+
Create View CREATE VIEW "v_test" AS select 1 AS "c1" from DUAL where 1 = "test"."test1"."f_test"()
3104+
character_set_client latin1
3105+
collation_connection latin1_swedish_ci
3106+
SET sql_mode=DEFAULT;
3107+
SELECT * FROM v_test;
3108+
c1
3109+
1
3110+
SHOW CREATE VIEW v_test;
3111+
View v_test
3112+
Create View CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_test` AS select 1 AS `c1` from DUAL where 1 = `test`.`test1`.`f_test`()
3113+
character_set_client latin1
3114+
collation_connection latin1_swedish_ci
3115+
DROP VIEW v_test;
3116+
SET sql_mode=DEFAULT;
3117+
CREATE VIEW v_test AS SELECT 1 AS c1 FROM DUAL WHERE 1=test.test1.f_test();
3118+
SELECT * FROM v_test;
3119+
c1
3120+
1
3121+
SHOW CREATE VIEW v_test;
3122+
View v_test
3123+
Create View CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v_test` AS select 1 AS `c1` from DUAL where 1 = `test`.`test1`.`f_test`()
3124+
character_set_client latin1
3125+
collation_connection latin1_swedish_ci
3126+
SET sql_mode=ORACLE;
3127+
SELECT * FROM v_test;
3128+
c1
3129+
1
3130+
SHOW CREATE VIEW v_test;
3131+
View v_test
3132+
Create View CREATE VIEW "v_test" AS select 1 AS "c1" from DUAL where 1 = "test"."test1"."f_test"()
3133+
character_set_client latin1
3134+
collation_connection latin1_swedish_ci
3135+
DROP VIEW v_test;
3136+
SET sql_mode=ORACLE;
3137+
DROP PACKAGE test1;

0 commit comments

Comments
 (0)