diff --git a/include/mysqld_error.h b/include/mysqld_error.h index 372ddc0787b..baf35687bb6 100644 --- a/include/mysqld_error.h +++ b/include/mysqld_error.h @@ -300,6 +300,7 @@ #define ER_WARN_QC_RESIZE 1281 #define ER_BAD_FT_COLUMN 1282 #define ER_UNKNOWN_KEY_CACHE 1283 +/* 5.0 */ #define ER_SP_NO_RECURSIVE_CREATE 1284 #define ER_SP_ALREADY_EXISTS 1285 #define ER_SP_DOES_NOT_EXIST 1286 diff --git a/include/sql_state.h b/include/sql_state.h index a514b1e59fc..2bca08f33fd 100644 --- a/include/sql_state.h +++ b/include/sql_state.h @@ -161,3 +161,36 @@ ER_WARN_DATA_OUT_OF_RANGE, "01000", "", ER_WARN_DATA_TRUNCATED, "01000", "", ER_WRONG_NAME_FOR_INDEX, "42000", "", ER_WRONG_NAME_FOR_CATALOG, "42000", "", +/* 5.0 */ +ER_SP_NO_RECURSIVE_CREATE, "2F003", "", +ER_SP_ALREADY_EXISTS, "42000", "", +ER_SP_DOES_NOT_EXIST, "42000", "", +/*ER_SP_DROP_FAILED*/ +/*ER_SP_STORE_FAILED*/ +ER_SP_LILABEL_MISMATCH, "42000", "", +ER_SP_LABEL_REDEFINE, "42000", "", +ER_SP_LABEL_MISMATCH, "42000", "", +ER_SP_UNINIT_VAR, "01000", "", +ER_SP_BADSELECT, "04000", "", +ER_SP_BADRETURN, "42000", "", +ER_SP_BADQUERY, "04000", "", +ER_UPDATE_LOG_DEPRECATED_IGNORED, "42000", "", +ER_UPDATE_LOG_DEPRECATED_TRANSLATED, "42000", "", +ER_QUERY_INTERRUPTED, "70100", "", +ER_SP_WRONG_NO_OF_ARGS, "42000", "", +ER_SP_COND_MISMATCH, "42000", "", +ER_SP_NORETURN, "42000", "", +ER_SP_NORETURNEND, "2F005", "", +ER_SP_BAD_CURSOR_QUERY, "42000", "", +ER_SP_BAD_CURSOR_SELECT, "42000", "", +ER_SP_CURSOR_MISMATCH, "42000", "", +ER_SP_CURSOR_ALREADY_OPEN, "24000", "", +ER_SP_CURSOR_NOT_OPEN, "24000", "", +ER_SP_UNDECLARED_VAR, "42000", "", +/*ER_SP_WRONG_NO_OF_FETCH_ARGS*/ +ER_SP_FETCH_NO_DATA, "02000", "", +ER_SP_DUP_PARAM, "42000", "", +ER_SP_DUP_VAR, "42000", "", +ER_SP_DUP_COND, "42000", "", +ER_SP_DUP_CURS, "42000", "", +/*ER_SP_CANT_ALTER*/ diff --git a/mysql-test/r/sp-error.result b/mysql-test/r/sp-error.result index af6a770ba81..738067898c9 100644 --- a/mysql-test/r/sp-error.result +++ b/mysql-test/r/sp-error.result @@ -11,96 +11,98 @@ create function func1() returns int return 42; create procedure foo() create procedure bar() set @x=3; -ERROR HY000: Can't create a PROCEDURE from within another stored routine +ERROR 2F003: Can't create a PROCEDURE from within another stored routine create procedure foo() create function bar() returns double return 2.3; -ERROR HY000: Can't create a FUNCTION from within another stored routine +ERROR 2F003: Can't create a FUNCTION from within another stored routine create procedure proc1() set @x = 42; -ERROR HY000: PROCEDURE proc1 already exists +ERROR 42000: PROCEDURE proc1 already exists create function func1() returns int return 42; -ERROR HY000: FUNCTION func1 already exists +ERROR 42000: FUNCTION func1 already exists drop procedure proc1; drop function func1; alter procedure foo; -ERROR HY000: PROCEDURE foo does not exist +ERROR 42000: PROCEDURE foo does not exist alter function foo; -ERROR HY000: FUNCTION foo does not exist +ERROR 42000: FUNCTION foo does not exist drop procedure foo; -ERROR HY000: PROCEDURE foo does not exist +ERROR 42000: PROCEDURE foo does not exist drop function foo; -ERROR HY000: FUNCTION foo does not exist +ERROR 42000: FUNCTION foo does not exist call foo(); -ERROR HY000: PROCEDURE foo does not exist +ERROR 42000: PROCEDURE foo does not exist drop procedure if exists foo; Warnings: Warning 1286 PROCEDURE foo does not exist show create procedure foo; -ERROR HY000: PROCEDURE foo does not exist +ERROR 42000: PROCEDURE foo does not exist create procedure foo() foo: loop leave bar; end loop; -ERROR HY000: LEAVE with no matching label: bar +ERROR 42000: LEAVE with no matching label: bar create procedure foo() foo: loop iterate bar; end loop; -ERROR HY000: ITERATE with no matching label: bar +ERROR 42000: ITERATE with no matching label: bar create procedure foo() foo: begin iterate foo; end; -ERROR HY000: ITERATE with no matching label: foo +ERROR 42000: ITERATE with no matching label: foo create procedure foo() foo: loop foo: loop set @x=2; end loop foo; end loop foo; -ERROR HY000: Redefining label foo +ERROR 42000: Redefining label foo create procedure foo() foo: loop set @x=2; end loop bar; -ERROR HY000: End-label bar without match +ERROR 42000: End-label bar without match create procedure foo(out x int) begin declare y int; set x = y; end; -ERROR HY000: Referring to uninitialized variable y +Warnings: +Warning 1292 Referring to uninitialized variable y +drop procedure foo; create procedure foo() begin select name from mysql.proc; select type from mysql.proc; end; call foo(); -ERROR HY000: SELECT in a stored procedure must have INTO +ERROR 04000: SELECT in a stored procedure must have INTO drop procedure foo; create procedure foo() return 42; -ERROR HY000: RETURN is only allowed in a FUNCTION +ERROR 42000: RETURN is only allowed in a FUNCTION create function foo() returns int begin declare x int; select max(c) into x from test.t; return x; end; -ERROR HY000: Queries, like SELECT, INSERT, UPDATE (and others), are not allowed in a FUNCTION +ERROR 04000: Queries, like SELECT, INSERT, UPDATE (and others), are not allowed in a FUNCTION create procedure p(x int) insert into test.t1 values (x); create function f(x int) returns int return x+42; call p(); -ERROR HY000: Wrong number of arguments for PROCEDURE p, expected 1, got 0 +ERROR 42000: Wrong number of arguments for PROCEDURE p, expected 1, got 0 call p(1, 2); -ERROR HY000: Wrong number of arguments for PROCEDURE p, expected 1, got 2 +ERROR 42000: Wrong number of arguments for PROCEDURE p, expected 1, got 2 select f(); -ERROR HY000: Wrong number of arguments for FUNCTION f, expected 1, got 0 +ERROR 42000: Wrong number of arguments for FUNCTION f, expected 1, got 0 select f(1, 2); -ERROR HY000: Wrong number of arguments for FUNCTION f, expected 1, got 2 +ERROR 42000: Wrong number of arguments for FUNCTION f, expected 1, got 2 drop procedure p; drop function f; create procedure p(val int, out res int) @@ -114,7 +116,7 @@ else set res = 1; end if; end; -ERROR HY000: Undefined CONDITION: foo +ERROR 42000: Undefined CONDITION: foo create procedure p(val int, out res int) begin declare x int default 0; @@ -127,13 +129,13 @@ else set res = 1; end if; end; -ERROR HY000: Undefined CONDITION: bar +ERROR 42000: Undefined CONDITION: bar create function f(val int) returns int begin declare x int; set x = val+3; end; -ERROR HY000: No RETURN found in FUNCTION f +ERROR 42000: No RETURN found in FUNCTION f create function f(val int) returns int begin declare x int; @@ -143,7 +145,7 @@ return x; end if; end; select f(10); -ERROR HY000: FUNCTION f ended without RETURN +ERROR 2F005: FUNCTION f ended without RETURN drop function f; create procedure p() begin @@ -151,7 +153,7 @@ declare c cursor for insert into test.t1 values ("foo", 42); open c; close c; end; -ERROR HY000: Cursor statement must be a SELECT +ERROR 42000: Cursor statement must be a SELECT create procedure p() begin declare x int; @@ -159,14 +161,14 @@ declare c cursor for select * into x from test.t limit 1; open c; close c; end; -ERROR HY000: Cursor SELECT must not have INTO +ERROR 42000: Cursor SELECT must not have INTO create procedure p() begin declare c cursor for select * from test.t; open cc; close c; end; -ERROR HY000: Undefined CURSOR: cc +ERROR 42000: Undefined CURSOR: cc drop table if exists t1; create table t1 (val int); create procedure p() @@ -177,7 +179,7 @@ open c; close c; end; call p(); -ERROR HY000: Cursor is already open +ERROR 24000: Cursor is already open drop procedure p; create procedure p() begin @@ -187,10 +189,10 @@ close c; close c; end; call p(); -ERROR HY000: Cursor is not open +ERROR 24000: Cursor is not open drop procedure p; alter procedure bar3 sql security invoker; -ERROR HY000: PROCEDURE bar3 does not exist +ERROR 42000: PROCEDURE bar3 does not exist alter procedure bar3 name AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA; ERROR 42000: Identifier name 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA' is too long @@ -206,7 +208,7 @@ open c; fetch c into x, y; close c; end; -ERROR HY000: Undeclared variable: y +ERROR 42000: Undeclared variable: y create procedure p() begin declare c cursor for select * from t1; @@ -234,27 +236,27 @@ drop procedure p; create procedure p(in x int, x char(10)) begin end; -ERROR HY000: Duplicate parameter: x +ERROR 42000: Duplicate parameter: x create function p(x int, x char(10)) begin end; -ERROR HY000: Duplicate parameter: x +ERROR 42000: Duplicate parameter: x create procedure p() begin declare x float; declare x int; end; -ERROR HY000: Duplicate variable: x +ERROR 42000: Duplicate variable: x create procedure p() begin declare c condition for 1064; declare c condition for 1065; end; -ERROR HY000: Duplicate condition: c +ERROR 42000: Duplicate condition: c create procedure p() begin declare c cursor for select * from t1; declare c cursor for select field from t1; end; -ERROR HY000: Duplicate cursor: c +ERROR 42000: Duplicate cursor: c drop table t1; diff --git a/mysql-test/t/sp-error.test b/mysql-test/t/sp-error.test index 3973e343812..211c4a63b8f 100644 --- a/mysql-test/t/sp-error.test +++ b/mysql-test/t/sp-error.test @@ -99,12 +99,12 @@ foo: loop end loop bar| # Referring to undef variable ---error 1292 create procedure foo(out x int) begin declare y int; set x = y; end| +drop procedure foo| # We require INTO in SELECTs for some older clients (as mysql and mysqltest, # for now). diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy index 8d61b910234..b83f1488fb1 100644 --- a/sql/sql_yacc.yy +++ b/sql/sql_yacc.yy @@ -5508,11 +5508,11 @@ simple_ident: { /* We're compiling a stored procedure and found a variable */ if (lex->sql_command != SQLCOM_CALL && ! spv->isset) { - net_printf(YYTHD, ER_SP_UNINIT_VAR, $1.str); - YYABORT; + push_warning_printf(YYTHD, MYSQL_ERROR::WARN_LEVEL_WARN, + ER_SP_UNINIT_VAR, ER(ER_SP_UNINIT_VAR), + $1.str); } - else - $$ = (Item*) new Item_splocal($1, spv->offset); + $$ = (Item*) new Item_splocal($1, spv->offset); } else {