summaryrefslogtreecommitdiff
path: root/mysql-test/suite/compat/oracle/t/sp-goto-debug.test
diff options
context:
space:
mode:
Diffstat (limited to 'mysql-test/suite/compat/oracle/t/sp-goto-debug.test')
-rw-r--r--mysql-test/suite/compat/oracle/t/sp-goto-debug.test178
1 files changed, 178 insertions, 0 deletions
diff --git a/mysql-test/suite/compat/oracle/t/sp-goto-debug.test b/mysql-test/suite/compat/oracle/t/sp-goto-debug.test
new file mode 100644
index 00000000000..0ded370b17a
--- /dev/null
+++ b/mysql-test/suite/compat/oracle/t/sp-goto-debug.test
@@ -0,0 +1,178 @@
+-- source include/have_debug.inc
+
+SET sql_mode=ORACLE;
+
+--echo #
+--echo # MDEV-20667 Server crash on pop_cursor
+--echo #
+
+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 ;//
+SHOW PROCEDURE CODE 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;
+ IF 1=1 THEN
+ GOTO iac_err;
+ END IF;
+<< iac_err >>
+ RETURN ;
+END//
+DELIMITER ;//
+SHOW PROCEDURE CODE 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 ;//
+SHOW PROCEDURE CODE p1;
+DROP PROCEDURE p1;
+
+
+DELIMITER //;
+CREATE PROCEDURE p1() IS
+BEGIN
+ IF 1=1 THEN
+ DECLARE
+ CURSOR cur2 IS SELECT 'cur2' FROM DUAL;
+ BEGIN
+ SELECT 'cur2';
+ IF 1=1 THEN
+ DECLARE
+ CURSOR cur3 IS SELECT 'cur3' FROM DUAL;
+ BEGIN
+ SELECT 'cur3';
+ IF 1=1 THEN
+ DECLARE
+ CURSOR cur4 IS SELECT 'cur4' FROM DUAL;
+ BEGIN
+ SELECT 'cur4';
+ GOTO ret;
+ END;
+ END IF;
+ GOTO ret;
+ END;
+ END IF;
+ GOTO ret;
+ END;
+ END IF;
+<<ret>>
+ RETURN;
+END;
+//
+DELIMITER ;//
+SHOW PROCEDURE CODE p1;
+DROP PROCEDURE p1;
+
+
+DELIMITER //;
+CREATE PROCEDURE p1(lab VARCHAR(32)) IS
+BEGIN
+ IF 1=1 THEN
+ DECLARE
+ CURSOR cur2 IS SELECT 'cur2' FROM DUAL;
+ BEGIN
+ IF 1=1 THEN
+ DECLARE
+ CURSOR cur3 IS SELECT 'cur3' FROM DUAL;
+ BEGIN
+ IF 1=1 THEN
+ DECLARE
+ CURSOR cur4 IS SELECT 'cur4' FROM DUAL;
+ BEGIN
+ IF lab = 'cur4' THEN
+ SELECT 'goto from cur4' AS comment;
+ GOTO ret;
+ END IF;
+ END;
+ END IF;
+ IF lab = 'cur3' THEN
+ SELECT 'goto from cur3' AS comment;
+ GOTO ret;
+ END IF;
+ END;
+ END IF;
+ IF lab = 'cur2' THEN
+ SELECT 'goto from cur2' AS comment;
+ GOTO ret;
+ END IF;
+ END;
+ END IF;
+<<ret>>
+ RETURN;
+END;
+//
+DELIMITER ;//
+SHOW PROCEDURE CODE p1;
+CALL p1('');
+CALL p1('cur2');
+CALL p1('cur3');
+CALL p1('cur4');
+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 ;//
+SHOW PROCEDURE CODE p1;
+DROP PROCEDURE p1;