diff options
Diffstat (limited to 'sql')
-rw-r--r-- | sql/share/errmsg.txt | 4 | ||||
-rw-r--r-- | sql/sql_parse.cc | 7 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 11 |
3 files changed, 17 insertions, 5 deletions
diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt index 5dd5cd9c775..dd9cbd8d500 100644 --- a/sql/share/errmsg.txt +++ b/sql/share/errmsg.txt @@ -5137,8 +5137,8 @@ ER_SP_CANT_ALTER eng "Failed to ALTER %s %s" ER_SP_SUBSELECT_NYI 0A000 eng "Subselect value not supported" -ER_SP_NO_USE 42000 - eng "USE is not allowed in a stored procedure" +ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG 0A000 + eng "%s is not allowed in stored function or trigger" ER_SP_VARCOND_AFTER_CURSHNDLR 42000 eng "Variable or condition declaration after cursor or handler declaration" ER_SP_CURSOR_AFTER_HANDLER 42000 diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index 677b3a98174..885bf63cb2d 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -6395,6 +6395,13 @@ bool reload_acl_and_cache(THD *thd, ulong options, TABLE_LIST *tables, bool result=0; select_errors=0; /* Write if more errors */ bool tmp_write_to_binlog= 1; + + if (thd->in_sub_stmt) + { + my_error(ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0), "FLUSH"); + return 1; + } + #ifndef NO_EMBEDDED_ACCESS_CHECKS if (options & REFRESH_GRANT) { diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index b680787b9a3..849987a267c 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -1960,7 +1960,7 @@ sp_proc_stmt: } if (lex->sql_command == SQLCOM_CHANGE_DB) { /* "USE db" doesn't work in a procedure */ - my_message(ER_SP_NO_USE, ER(ER_SP_NO_USE), MYF(0)); + my_error(ER_SP_BADSTATEMENT, MYF(0), "USE"); YYABORT; } /* @@ -6642,9 +6642,14 @@ flush: FLUSH_SYM opt_no_write_to_binlog { LEX *lex=Lex; - if (lex->sphead && lex->sphead->m_type == TYPE_ENUM_FUNCTION) + if (lex->sphead && lex->sphead->m_type != TYPE_ENUM_PROCEDURE) { - my_error(ER_SP_BADSTATEMENT, MYF(0), "FLUSH"); + /* + Note that both FLUSH TABLES and FLUSH PRIVILEGES will break + execution in prelocked mode. So it is better to disable + FLUSH in stored functions and triggers completely. + */ + my_error(ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG, MYF(0), "FLUSH"); YYABORT; } lex->sql_command= SQLCOM_FLUSH; lex->type=0; |