Commit c1e570a4 authored by anozdrin@mysql.com's avatar anozdrin@mysql.com

Fix for Bug#12995: Inside function "Table 't4' was not locked with LOCK TABLES"

Any form of HANDLER statement is forbidden from usage in stored procedures/functions.
parent d15e92dc
......@@ -765,3 +765,24 @@ OPTIMIZE TABLE t1;
RETURN 1;
END|
ERROR 0A000: OPTIMIZE TABLE is not allowed in stored procedures
DROP FUNCTION IF EXISTS bug12995|
CREATE FUNCTION bug12995() RETURNS INT
BEGIN
HANDLER t1 OPEN;
RETURN 1;
END|
ERROR 0A000: HANDLER is not allowed in stored procedures
CREATE FUNCTION bug12995() RETURNS INT
BEGIN
HANDLER t1 READ FIRST;
RETURN 1;
END|
ERROR 0A000: HANDLER is not allowed in stored procedures
CREATE FUNCTION bug12995() RETURNS INT
BEGIN
HANDLER t1 CLOSE;
RETURN 1;
END|
ERROR 0A000: HANDLER is not allowed in stored procedures
SELECT bug12995()|
ERROR 42000: FUNCTION test.bug12995 does not exist
......@@ -1099,6 +1099,36 @@ BEGIN
OPTIMIZE TABLE t1;
RETURN 1;
END|
delimiter ;|
#
# Bug##12995 "Inside function "Table 't4' was not locked with LOCK TABLES"
#
delimiter |;
--disable_warnings
DROP FUNCTION IF EXISTS bug12995|
--enable_warnings
--error ER_SP_BADSTATEMENT
CREATE FUNCTION bug12995() RETURNS INT
BEGIN
HANDLER t1 OPEN;
RETURN 1;
END|
--error ER_SP_BADSTATEMENT
CREATE FUNCTION bug12995() RETURNS INT
BEGIN
HANDLER t1 READ FIRST;
RETURN 1;
END|
--error ER_SP_BADSTATEMENT
CREATE FUNCTION bug12995() RETURNS INT
BEGIN
HANDLER t1 CLOSE;
RETURN 1;
END|
--error 1305
SELECT bug12995()|
delimiter ;|
#
# BUG#NNNN: New bug synopsis
......
......@@ -8157,6 +8157,11 @@ handler:
HANDLER_SYM table_ident OPEN_SYM opt_table_alias
{
LEX *lex= Lex;
if (lex->sphead)
{
my_error(ER_SP_BADSTATEMENT, MYF(0), "HANDLER");
YYABORT;
}
lex->sql_command = SQLCOM_HA_OPEN;
if (!lex->current_select->add_table_to_list(lex->thd, $2, $4, 0))
YYABORT;
......@@ -8164,6 +8169,11 @@ handler:
| HANDLER_SYM table_ident_nodb CLOSE_SYM
{
LEX *lex= Lex;
if (lex->sphead)
{
my_error(ER_SP_BADSTATEMENT, MYF(0), "HANDLER");
YYABORT;
}
lex->sql_command = SQLCOM_HA_CLOSE;
if (!lex->current_select->add_table_to_list(lex->thd, $2, 0, 0))
YYABORT;
......@@ -8171,6 +8181,11 @@ handler:
| HANDLER_SYM table_ident_nodb READ_SYM
{
LEX *lex=Lex;
if (lex->sphead)
{
my_error(ER_SP_BADSTATEMENT, MYF(0), "HANDLER");
YYABORT;
}
lex->sql_command = SQLCOM_HA_READ;
lex->ha_rkey_mode= HA_READ_KEY_EXACT; /* Avoid purify warnings */
lex->current_select->select_limit= new Item_int((int32) 1);
......
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