Details
-
Bug
-
Status: Open (View Workflow)
-
Critical
-
Resolution: Unresolved
-
13.1
-
None
-
Can result in unexpected behaviour
Description
USE '<db>' is allowed inside a stored routine when executed via the dynamic-SQL path.
MTR Test
CREATE DATABASE db_one; |
DELIMITER $$
|
CREATE FUNCTION f() RETURNS INT BEGIN EXECUTE IMMEDIATE 'USE db_one'; RETURN 1; END$$ |
CREATE PROCEDURE p() BEGIN DECLARE v INT DEFAULT f(); END$$ |
DELIMITER ;
|
SELECT DATABASE() AS db_before; |
CALL p();
|
SELECT DATABASE() AS db_after; |
CLI Output
13.1.0-opt>CREATE DATABASE db_one; |
Query OK, 1 row affected (0.001 sec)
|
|
|
13.1.0-opt>DELIMITER $$
|
13.1.0-opt>CREATE FUNCTION f() RETURNS INT BEGIN EXECUTE IMMEDIATE 'USE db_one'; RETURN 1; END$$ |
Query OK, 0 rows affected (0.003 sec) |
|
|
13.1.0-opt>CREATE PROCEDURE p() BEGIN DECLARE v INT DEFAULT f(); END$$ |
Query OK, 0 rows affected (0.004 sec) |
|
|
13.1.0-opt>DELIMITER ;
|
13.1.0-opt>SELECT DATABASE() AS db_before; |
+-----------+ |
| db_before |
|
+-----------+ |
| test |
|
+-----------+ |
1 row in set (0.000 sec) |
|
|
13.1.0-opt>CALL p();
|
Query OK, 0 rows affected (0.001 sec) |
|
|
13.1.0-opt>SELECT DATABASE() AS db_after; |
+----------+ |
| db_after |
|
+----------+ |
| db_one |
|
+----------+ |
1 row in set (0.000 sec) |
|
|
13.1.0-opt>
|
|
|
Expected Error
|
-----------------
|
13.1.0-opt>CREATE FUNCTION f() RETURNS INT BEGIN USE db_one; RETURN 1; END$$ |
ERROR 1314 (0A000): USE is not allowed in stored procedures |
13.1.0-opt>
|
|