diff options
author | Rucha Deodhar <rucha.deodhar@mariadb.com> | 2021-10-06 23:43:16 +0530 |
---|---|---|
committer | Rucha Deodhar <rucha.deodhar@mariadb.com> | 2021-10-07 00:31:19 +0530 |
commit | 5cc9cf9a05582307abefd8f3b57548945da86b1a (patch) | |
tree | df0867a44b2b6308af23c6c03fdb09505e669f0f /mysql-test/main/get_diagnostics.test | |
parent | af95c991dd67bd50e9f2958750395a9d66d2035a (diff) | |
download | mariadb-git-5cc9cf9a05582307abefd8f3b57548945da86b1a.tar.gz |
MDEV-26681: ROW_NUMBER is not available within compound statement blocksbb-10.7-MDEV-26606
Fixed after patch MDEV-26606 because root cause was same.
Analysis: m_current_row_for_warning is reset to 1 during cleanup phase of
stored procedure. When we perform a copy because some statement of procedure
created warning, this reset value is passed to push _warning().
Fix: Add a parameter in relevant functions to pass correct value of
error index and don't use m_current_row_for_warning directly.
Diffstat (limited to 'mysql-test/main/get_diagnostics.test')
-rw-r--r-- | mysql-test/main/get_diagnostics.test | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/mysql-test/main/get_diagnostics.test b/mysql-test/main/get_diagnostics.test index 59b054bcc9b..83ea1dee343 100644 --- a/mysql-test/main/get_diagnostics.test +++ b/mysql-test/main/get_diagnostics.test @@ -1520,3 +1520,35 @@ GET DIAGNOSTICS CONDITION 5 @ind = ROW_NUMBER, @msg = MESSAGE_TEXT; SELECT @ind, @msg; DROP TABLE t1; + +--echo # +--echo # MDEV-26681: ROW_NUMBER is not available within compound statement blocks +--echo # + +CREATE OR REPLACE TABLE t1 (pk INT PRIMARY KEY, a CHAR(3)); +INSERT IGNORE INTO t1 VALUES (1,'foo'),(1,'bar'),(2,'foobar'); + +DELIMITER |; + +BEGIN NOT ATOMIC + DECLARE i INT DEFAULT 0; + DECLARE rnum INT DEFAULT -1; + DECLARE msg VARCHAR(1024) DEFAULT ''; + DECLARE err INT DEFAULT -1; + WHILE i < @@warning_count + DO + SET i = i + 1; + GET DIAGNOSTICS CONDITION i rnum = ROW_NUMBER, msg = MESSAGE_TEXT, err = MYSQL_ERRNO; + SELECT i, rnum, msg, err; + END WHILE; +END | + +DELIMITER ;| + +GET DIAGNOSTICS CONDITION 1 @rnum = ROW_NUMBER, @msg = MESSAGE_TEXT, @err = MYSQL_ERRNO; +select @rnum, @msg, @err; + +GET DIAGNOSTICS CONDITION 2 @rnum = ROW_NUMBER, @msg = MESSAGE_TEXT, @err = MYSQL_ERRNO; +SELECT @rnum, @msg, @err; + +DROP TABLE t1; |