diff options
author | unknown <pem@mysql.comhem.se> | 2005-04-20 17:59:28 +0200 |
---|---|---|
committer | unknown <pem@mysql.comhem.se> | 2005-04-20 17:59:28 +0200 |
commit | c751c6ce7ce538409636f877bc11893830ee67d7 (patch) | |
tree | de33ae00d77dbe29153517ed85b5c0f0dd6558a1 | |
parent | 5642bbd35e11e7eaca1e0654435198c084087584 (diff) | |
download | mariadb-git-c751c6ce7ce538409636f877bc11893830ee67d7.tar.gz |
Fixed BUG#7047: Stored procedure crash if alter procedure
by simply disallowing alter procedure/function in an SP (as for drop).
mysql-test/r/sp-error.result:
Added test case for BUG#7047.
mysql-test/t/sp-error.test:
Added test case for BUG#7047.
sql/share/errmsg.txt:
Modified error message for "update procedure/function" too.
sql/sql_yacc.yy:
Don't allow alter procedure/function in an SP.
-rw-r--r-- | mysql-test/r/sp-error.result | 13 | ||||
-rw-r--r-- | mysql-test/t/sp-error.test | 14 | ||||
-rw-r--r-- | sql/share/errmsg.txt | 2 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 10 |
4 files changed, 36 insertions, 3 deletions
diff --git a/mysql-test/r/sp-error.result b/mysql-test/r/sp-error.result index 3f224d790f7..5ee1d46f3c9 100644 --- a/mysql-test/r/sp-error.result +++ b/mysql-test/r/sp-error.result @@ -457,9 +457,9 @@ ERROR 42S22: Unknown column 'aa' in 'order clause' drop procedure bug2653_1| drop procedure bug2653_2| create procedure bug4344() drop procedure bug4344| -ERROR HY000: Can't drop a PROCEDURE from within another stored routine +ERROR HY000: Can't drop or alter a PROCEDURE from within another stored routine create procedure bug4344() drop function bug4344| -ERROR HY000: Can't drop a FUNCTION from within another stored routine +ERROR HY000: Can't drop or alter a FUNCTION from within another stored routine drop procedure if exists bug3294| create procedure bug3294() begin @@ -585,4 +585,13 @@ end; end; end| drop procedure bug9073| +create procedure bug7047() +alter procedure bug7047| +ERROR HY000: Can't drop or alter a PROCEDURE from within another stored routine +create function bug7047() returns int +begin +alter function bug7047; +return 0; +end| +ERROR HY000: Can't drop or alter a FUNCTION from within another stored routine drop table t1| diff --git a/mysql-test/t/sp-error.test b/mysql-test/t/sp-error.test index ecbc98f86e9..cb4ebf080f4 100644 --- a/mysql-test/t/sp-error.test +++ b/mysql-test/t/sp-error.test @@ -818,6 +818,20 @@ drop procedure bug9073| # +# BUG#7047: Stored procedure crash if alter procedure +# +--error ER_SP_NO_DROP_SP +create procedure bug7047() + alter procedure bug7047| +--error ER_SP_NO_DROP_SP +create function bug7047() returns int +begin + alter function bug7047; + return 0; +end| + + +# # BUG#NNNN: New bug synopsis # #--disable_warnings diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt index e93229a4a3e..8d7a1fe0093 100644 --- a/sql/share/errmsg.txt +++ b/sql/share/errmsg.txt @@ -5213,7 +5213,7 @@ ER_VIEW_INVALID eng "View '%-.64s.%-.64s' references invalid table(s) or column(s) or function(s)" rus "View '%-.64s.%-.64s' ссылается на несуществующие таблицы или столбцы или функции" ER_SP_NO_DROP_SP - eng "Can't drop a %s from within another stored routine" + eng "Can't drop or alter a %s from within another stored routine" ER_SP_GOTO_IN_HNDLR eng "GOTO is not allowed in a stored procedure handler" ER_TRG_ALREADY_EXISTS diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 9aa5d7fb4fc..7f5255aa764 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -3305,6 +3305,11 @@ alter: { LEX *lex= Lex; + if (lex->sphead) + { + my_error(ER_SP_NO_DROP_SP, MYF(0), "PROCEDURE"); + YYABORT; + } bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics)); } sp_a_chistics @@ -3318,6 +3323,11 @@ alter: { LEX *lex= Lex; + if (lex->sphead) + { + my_error(ER_SP_NO_DROP_SP, MYF(0), "FUNCTION"); + YYABORT; + } bzero((char *)&lex->sp_chistics, sizeof(st_sp_chistics)); } sp_a_chistics |