diff options
Diffstat (limited to 'mysql-test')
-rw-r--r-- | mysql-test/main/get_diagnostics.result | 39 | ||||
-rw-r--r-- | mysql-test/main/get_diagnostics.test | 53 |
2 files changed, 92 insertions, 0 deletions
diff --git a/mysql-test/main/get_diagnostics.result b/mysql-test/main/get_diagnostics.result index 7bd1bde10de..840b4f32d2d 100644 --- a/mysql-test/main/get_diagnostics.result +++ b/mysql-test/main/get_diagnostics.result @@ -1671,3 +1671,42 @@ SELECT @rnum, @msg, @err; @rnum @msg @err 3 Data truncated for column 'a' at row 3 1265 DROP TABLE t1; +# +# MDEV-26832: ROW_NUMBER in SIGNAL/RESIGNAL causes a syntax error +# +# using signal +CREATE PROCEDURE signal_syntax() +BEGIN +DECLARE errno INT DEFAULT 0; +DECLARE msg TEXT DEFAULT "foo"; +DECLARE row_num INT DEFAULT 0; +DECLARE cond CONDITION FOR SQLSTATE "01234"; +DECLARE CONTINUE HANDLER for 1012 +BEGIN +GET DIAGNOSTICS CONDITION 1 errno = MYSQL_ERRNO, msg = MESSAGE_TEXT, row_num= ROW_NUMBER; +END; +SIGNAL cond SET MESSAGE_TEXT = "Signal message", MYSQL_ERRNO = 1012, ROW_NUMBER= 5; +SELECT errno, msg, row_num; +END| +CALL signal_syntax(); +errno msg row_num +1012 Signal message 5 +DROP PROCEDURE signal_syntax; +# using resignal +CREATE PROCEDURE resignal_syntax() +BEGIN +DECLARE CONTINUE HANDLER +FOR 1146 +BEGIN +RESIGNAL SET +MESSAGE_TEXT = '`temptab` does not exist', ROW_NUMBER= 105; +END; +SELECT `c` FROM `temptab`; +END| +CALL resignal_syntax(); +ERROR 42S02: `temptab` does not exist +GET DIAGNOSTICS CONDITION 1 @row_num= ROW_NUMBER; +SELECT @row_num; +@row_num +105 +DROP PROCEDURE resignal_syntax; diff --git a/mysql-test/main/get_diagnostics.test b/mysql-test/main/get_diagnostics.test index 83ea1dee343..d3dd6b7f91f 100644 --- a/mysql-test/main/get_diagnostics.test +++ b/mysql-test/main/get_diagnostics.test @@ -1552,3 +1552,56 @@ GET DIAGNOSTICS CONDITION 2 @rnum = ROW_NUMBER, @msg = MESSAGE_TEXT, @err = MYSQ SELECT @rnum, @msg, @err; DROP TABLE t1; + +--echo # +--echo # MDEV-26832: ROW_NUMBER in SIGNAL/RESIGNAL causes a syntax error +--echo # + +--echo # using signal + +DELIMITER |; +CREATE PROCEDURE signal_syntax() +BEGIN + DECLARE errno INT DEFAULT 0; + DECLARE msg TEXT DEFAULT "foo"; + DECLARE row_num INT DEFAULT 0; + DECLARE cond CONDITION FOR SQLSTATE "01234"; + DECLARE CONTINUE HANDLER for 1012 + BEGIN + GET DIAGNOSTICS CONDITION 1 errno = MYSQL_ERRNO, msg = MESSAGE_TEXT, row_num= ROW_NUMBER; + END; + + SIGNAL cond SET MESSAGE_TEXT = "Signal message", MYSQL_ERRNO = 1012, ROW_NUMBER= 5; + + SELECT errno, msg, row_num; +END| +DELIMITER ;| + +CALL signal_syntax(); + +DROP PROCEDURE signal_syntax; + +--echo # using resignal + +DELIMITER |; + +CREATE PROCEDURE resignal_syntax() +BEGIN + DECLARE CONTINUE HANDLER + FOR 1146 + BEGIN + RESIGNAL SET + MESSAGE_TEXT = '`temptab` does not exist', ROW_NUMBER= 105; + END; + SELECT `c` FROM `temptab`; +END| + +DELIMITER ;| + +--error ER_NO_SUCH_TABLE +CALL resignal_syntax(); + +GET DIAGNOSTICS CONDITION 1 @row_num= ROW_NUMBER; +SELECT @row_num; + +DROP PROCEDURE resignal_syntax; |