mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Bug #33813: Schema names are case-sensitive in DROP FUNCTION
The parser was not using the correct fully-qualified-name production for DROP FUNCTION. Fixed by copying the production from DROP PROCEDURE. Tested in the windows specific suite to make sure it's tested on a case-insensitive file system.
This commit is contained in:
@ -19,4 +19,22 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
1 PRIMARY NULL NULL NULL NULL NULL NULL NULL Impossible WHERE noticed after reading const tables
|
||||||
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
2 SUBQUERY NULL NULL NULL NULL NULL NULL NULL No tables used
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE DATABASE `TESTDB`;
|
||||||
|
USE `TESTDB`;
|
||||||
|
CREATE FUNCTION test_fn() RETURNS INTEGER
|
||||||
|
BEGIN
|
||||||
|
DECLARE rId bigint;
|
||||||
|
RETURN rId;
|
||||||
|
END
|
||||||
|
//
|
||||||
|
CREATE FUNCTION test_fn2() RETURNS INTEGER
|
||||||
|
BEGIN
|
||||||
|
DECLARE rId bigint;
|
||||||
|
RETURN rId;
|
||||||
|
END
|
||||||
|
//
|
||||||
|
DROP FUNCTION `TESTDB`.`test_fn`;
|
||||||
|
DROP FUNCTION `testdb`.`test_fn2`;
|
||||||
|
USE test;
|
||||||
|
DROP DATABASE `TESTDB`;
|
||||||
End of 5.0 tests.
|
End of 5.0 tests.
|
||||||
|
@ -35,4 +35,35 @@ CREATE TABLE t1 (a int, b int); INSERT INTO t1 VALUES (1,1);
|
|||||||
EXPLAIN SELECT * FROM t1 WHERE b = (SELECT max(2));
|
EXPLAIN SELECT * FROM t1 WHERE b = (SELECT max(2));
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #33813: Schema names are case-sensitive in DROP FUNCTION
|
||||||
|
#
|
||||||
|
|
||||||
|
CREATE DATABASE `TESTDB`;
|
||||||
|
|
||||||
|
USE `TESTDB`;
|
||||||
|
DELIMITER //;
|
||||||
|
|
||||||
|
CREATE FUNCTION test_fn() RETURNS INTEGER
|
||||||
|
BEGIN
|
||||||
|
DECLARE rId bigint;
|
||||||
|
RETURN rId;
|
||||||
|
END
|
||||||
|
//
|
||||||
|
|
||||||
|
CREATE FUNCTION test_fn2() RETURNS INTEGER
|
||||||
|
BEGIN
|
||||||
|
DECLARE rId bigint;
|
||||||
|
RETURN rId;
|
||||||
|
END
|
||||||
|
//
|
||||||
|
|
||||||
|
DELIMITER ;//
|
||||||
|
|
||||||
|
DROP FUNCTION `TESTDB`.`test_fn`;
|
||||||
|
DROP FUNCTION `testdb`.`test_fn2`;
|
||||||
|
|
||||||
|
USE test;
|
||||||
|
DROP DATABASE `TESTDB`;
|
||||||
|
|
||||||
--echo End of 5.0 tests.
|
--echo End of 5.0 tests.
|
||||||
|
@ -7507,11 +7507,9 @@ drop:
|
|||||||
lex->drop_if_exists=$3;
|
lex->drop_if_exists=$3;
|
||||||
lex->name=$4.str;
|
lex->name=$4.str;
|
||||||
}
|
}
|
||||||
| DROP FUNCTION_SYM if_exists ident '.' ident
|
| DROP FUNCTION_SYM if_exists sp_name
|
||||||
{
|
{
|
||||||
THD *thd= YYTHD;
|
LEX *lex= Lex;
|
||||||
LEX *lex= thd->lex;
|
|
||||||
sp_name *spname;
|
|
||||||
if (lex->sphead)
|
if (lex->sphead)
|
||||||
{
|
{
|
||||||
my_error(ER_SP_NO_DROP_SP, MYF(0), "FUNCTION");
|
my_error(ER_SP_NO_DROP_SP, MYF(0), "FUNCTION");
|
||||||
@ -7519,32 +7517,7 @@ drop:
|
|||||||
}
|
}
|
||||||
lex->sql_command = SQLCOM_DROP_FUNCTION;
|
lex->sql_command = SQLCOM_DROP_FUNCTION;
|
||||||
lex->drop_if_exists= $3;
|
lex->drop_if_exists= $3;
|
||||||
spname= new sp_name($4, $6, true);
|
lex->spname= $4;
|
||||||
if (spname == NULL)
|
|
||||||
MYSQL_YYABORT;
|
|
||||||
spname->init_qname(thd);
|
|
||||||
lex->spname= spname;
|
|
||||||
}
|
|
||||||
| DROP FUNCTION_SYM if_exists ident
|
|
||||||
{
|
|
||||||
THD *thd= YYTHD;
|
|
||||||
LEX *lex= thd->lex;
|
|
||||||
LEX_STRING db= {0, 0};
|
|
||||||
sp_name *spname;
|
|
||||||
if (lex->sphead)
|
|
||||||
{
|
|
||||||
my_error(ER_SP_NO_DROP_SP, MYF(0), "FUNCTION");
|
|
||||||
MYSQL_YYABORT;
|
|
||||||
}
|
|
||||||
if (thd->db && lex->copy_db_to(&db.str, &db.length))
|
|
||||||
MYSQL_YYABORT;
|
|
||||||
lex->sql_command = SQLCOM_DROP_FUNCTION;
|
|
||||||
lex->drop_if_exists= $3;
|
|
||||||
spname= new sp_name(db, $4, false);
|
|
||||||
if (spname == NULL)
|
|
||||||
MYSQL_YYABORT;
|
|
||||||
spname->init_qname(thd);
|
|
||||||
lex->spname= spname;
|
|
||||||
}
|
}
|
||||||
| DROP PROCEDURE if_exists sp_name
|
| DROP PROCEDURE if_exists sp_name
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user