!4244 【BUG】解决signal不支持场景下core问题
Merge pull request !4244 from yuhuanhuan/signal_resignal_demand
This commit is contained in:
@ -13115,11 +13115,20 @@ static void read_signal_sqlstate(PLpgSQL_stmt_signal *newp, int tok)
|
||||
yyerror("unexpected end of function definition");
|
||||
}
|
||||
|
||||
if (strcmp(yylval.str, "value") == 0) {
|
||||
if (yylex() != SCONST) {
|
||||
yyerror("syntax error, the expected value is a string.");
|
||||
if (tok != SCONST && tok != T_WORD) {
|
||||
yyerror("syntax error, the expected value is a string.");
|
||||
}
|
||||
|
||||
if (tok == T_WORD) {
|
||||
if (strcmp(yylval.str, "value") == 0) {
|
||||
if (yylex() != SCONST) {
|
||||
yyerror("syntax error, the expected value is a string.");
|
||||
}
|
||||
} else {
|
||||
yyerror("syntax error, the expected word is value.");
|
||||
}
|
||||
}
|
||||
|
||||
sqlstate_value = yylval.str;
|
||||
|
||||
if (strlen(sqlstate_value) != 5 ||
|
||||
|
@ -1961,5 +1961,100 @@ select @a, @error_count;
|
||||
0 | 2
|
||||
(1 row)
|
||||
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate 01001;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END;
|
||||
/
|
||||
ERROR: syntax error, the expected value is a string. at or near "01001"
|
||||
LINE 4: resignal sqlstate 01001;
|
||||
^
|
||||
QUERY: DECLARE BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate 01001;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate value 01001;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END;
|
||||
/
|
||||
ERROR: syntax error, the expected value is a string. at or near "01001"
|
||||
LINE 4: resignal sqlstate value 01001;
|
||||
^
|
||||
QUERY: DECLARE BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate value 01001;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate values 01001;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END;
|
||||
/
|
||||
ERROR: syntax error, the expected word is value. at or near "values"
|
||||
LINE 4: resignal sqlstate values 01001;
|
||||
^
|
||||
QUERY: DECLARE BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate values 01001;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate value;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END;
|
||||
/
|
||||
ERROR: syntax error, the expected value is a string. at or near ";"
|
||||
LINE 4: resignal sqlstate value;
|
||||
^
|
||||
QUERY: DECLARE BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate value;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate values;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END;
|
||||
/
|
||||
ERROR: syntax error, the expected word is value. at or near "values"
|
||||
LINE 4: resignal sqlstate values;
|
||||
^
|
||||
QUERY: DECLARE BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate values;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END
|
||||
\c regression
|
||||
drop database mysql_test_resignal;
|
||||
|
@ -1544,5 +1544,60 @@ show warnings;
|
||||
Error | 22 | duplicated!
|
||||
(1 row)
|
||||
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
signal sqlstate 01001;
|
||||
END;
|
||||
/
|
||||
ERROR: syntax error, the expected value is a string. at or near "01001"
|
||||
LINE 2: signal sqlstate 01001;
|
||||
^
|
||||
QUERY: DECLARE BEGIN
|
||||
signal sqlstate 01001;
|
||||
END
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
signal sqlstate value 01001;
|
||||
END;
|
||||
/
|
||||
ERROR: syntax error, the expected value is a string. at or near "01001"
|
||||
LINE 2: signal sqlstate value 01001;
|
||||
^
|
||||
QUERY: DECLARE BEGIN
|
||||
signal sqlstate value 01001;
|
||||
END
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
signal sqlstate values 01001;
|
||||
END;
|
||||
/
|
||||
ERROR: syntax error, the expected word is value. at or near "values"
|
||||
LINE 2: signal sqlstate values 01001;
|
||||
^
|
||||
QUERY: DECLARE BEGIN
|
||||
signal sqlstate values 01001;
|
||||
END
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
signal sqlstate value;
|
||||
END;
|
||||
/
|
||||
ERROR: syntax error, the expected value is a string. at or near ";"
|
||||
LINE 2: signal sqlstate value;
|
||||
^
|
||||
QUERY: DECLARE BEGIN
|
||||
signal sqlstate value;
|
||||
END
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
signal sqlstate values;
|
||||
END;
|
||||
/
|
||||
ERROR: syntax error, the expected word is value. at or near "values"
|
||||
LINE 2: signal sqlstate values;
|
||||
^
|
||||
QUERY: DECLARE BEGIN
|
||||
signal sqlstate values;
|
||||
END
|
||||
\c regression
|
||||
drop database mysql_test_signal;
|
||||
|
@ -1250,5 +1250,56 @@ call p2();
|
||||
show warnings;
|
||||
select @a, @error_count;
|
||||
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate 01001;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate value 01001;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate values 01001;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate value;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
resignal sqlstate values;
|
||||
END;
|
||||
DROP TABLE t1;
|
||||
END;
|
||||
/
|
||||
|
||||
|
||||
\c regression
|
||||
drop database mysql_test_resignal;
|
@ -965,5 +965,35 @@ call p2(0);
|
||||
call p2(0);
|
||||
show warnings;
|
||||
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
signal sqlstate 01001;
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
signal sqlstate value 01001;
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
signal sqlstate values 01001;
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
signal sqlstate value;
|
||||
END;
|
||||
/
|
||||
|
||||
CREATE OR REPLACE PROCEDURE p() IS
|
||||
BEGIN
|
||||
signal sqlstate values;
|
||||
END;
|
||||
/
|
||||
|
||||
\c regression
|
||||
drop database mysql_test_signal;
|
Reference in New Issue
Block a user