summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/sp-error.result13
-rw-r--r--mysql-test/t/sp-error.test14
-rw-r--r--sql/share/errmsg.txt2
-rw-r--r--sql/sql_yacc.yy10
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