diff options
Diffstat (limited to 'mysql-test/suite/compat/oracle/t/sp-goto.test')
-rw-r--r-- | mysql-test/suite/compat/oracle/t/sp-goto.test | 98 |
1 files changed, 97 insertions, 1 deletions
diff --git a/mysql-test/suite/compat/oracle/t/sp-goto.test b/mysql-test/suite/compat/oracle/t/sp-goto.test index df7f1132666..9c15d10b3de 100644 --- a/mysql-test/suite/compat/oracle/t/sp-goto.test +++ b/mysql-test/suite/compat/oracle/t/sp-goto.test @@ -869,4 +869,100 @@ insert into t1 values (1); insert into t1 values (null); SELECT * FROM t1; DROP TRIGGER trg1; -DROP TABLE t1;
\ No newline at end of file +DROP TABLE t1; + + +--echo # +--echo # MDEV-20667 Server crash on pop_cursor +--echo # + +CREATE TABLE t1 (a VARCHAR(6)); +DELIMITER //; +CREATE PROCEDURE p1() IS +BEGIN + IF 1=2 THEN + BEGIN + DECLARE + CURSOR cur1 IS SELECT a FROM t1 ; + BEGIN + GOTO iac_err; + END; + END; + END IF; + IF 1=1 THEN + GOTO iac_err; + END IF; +<< iac_err >> + RETURN; +END// +DELIMITER ;// +CALL p1(); +DROP PROCEDURE p1; +DROP TABLE t1; + + +DELIMITER //; +CREATE PROCEDURE p1() IS +BEGIN + IF 1=2 THEN + BEGIN + DECLARE + CURSOR cur1 IS SELECT a FROM t1 ; + BEGIN + GOTO iac_err; + END; + END; + END IF; + IF 1=1 THEN + GOTO iac_err; + END IF; +<< iac_err >> + RETURN ; +END// +DELIMITER ;// +CALL p1; +DROP PROCEDURE p1; + + +DELIMITER //; +CREATE PROCEDURE p1() IS +BEGIN + IF 1=2 THEN + BEGIN + DECLARE + CURSOR cur1 IS SELECT a FROM t1 ; + BEGIN + GOTO iac_err; + END; + END; + END IF; + GOTO iac_err; +<< iac_err >> + RETURN ; +END// +DELIMITER ;// +CALL p1; +DROP PROCEDURE p1; + + +DELIMITER //; +CREATE PROCEDURE p1() IS +BEGIN + IF 1=2 THEN + BEGIN + DECLARE + CONTINUE HANDLER FOR SQLSTATE '23000' SET @x2 = 1; + BEGIN + GOTO iac_err; + END; + END; + END IF; + IF 1=1 THEN + GOTO iac_err; + END IF; +<<iac_err >> + RETURN; +END// +DELIMITER ;// +CALL p1; +DROP PROCEDURE p1; |