!4244 【BUG】解决signal不支持场景下core问题

Merge pull request !4244 from yuhuanhuan/signal_resignal_demand
This commit is contained in:
opengauss_bot
2023-10-16 08:11:38 +00:00
committed by Gitee
5 changed files with 243 additions and 3 deletions

View File

@ -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 ||

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;