Commit b57c5414 authored by Georgi Kodinov's avatar Georgi Kodinov

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.
parent 7234ca1a
...@@ -19,4 +19,22 @@ id select_type table type possible_keys key key_len ref rows Extra ...@@ -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); ...@@ -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,44 +7507,17 @@ drop: ...@@ -7507,44 +7507,17 @@ 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)
{
my_error(ER_SP_NO_DROP_SP, MYF(0), "FUNCTION");
MYSQL_YYABORT;
}
lex->sql_command = SQLCOM_DROP_FUNCTION;
lex->drop_if_exists= $3;
spname= new sp_name($4, $6, true);
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) if (lex->sphead)
{ {
my_error(ER_SP_NO_DROP_SP, MYF(0), "FUNCTION"); my_error(ER_SP_NO_DROP_SP, MYF(0), "FUNCTION");
MYSQL_YYABORT; MYSQL_YYABORT;
} }
if (thd->db && lex->copy_db_to(&db.str, &db.length))
MYSQL_YYABORT;
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(db, $4, false); lex->spname= $4;
if (spname == NULL)
MYSQL_YYABORT;
spname->init_qname(thd);
lex->spname= spname;
} }
| DROP PROCEDURE if_exists sp_name | DROP PROCEDURE if_exists sp_name
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment