mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
89 lines
2.1 KiB
Text
89 lines
2.1 KiB
Text
#
|
|
# Bug#19194 (Right recursion in parser for CASE causes excessive stack
|
|
# usage, limitation)
|
|
#
|
|
|
|
--disable_warnings
|
|
DROP PROCEDURE IF EXISTS proc_19194_codegen;
|
|
DROP PROCEDURE IF EXISTS bug_19194_simple;
|
|
DROP PROCEDURE IF EXISTS bug_19194_searched;
|
|
--enable_warnings
|
|
|
|
delimiter |;
|
|
|
|
CREATE PROCEDURE proc_19194_codegen(
|
|
IN proc_name VARCHAR(50),
|
|
IN count INTEGER,
|
|
IN simple INTEGER,
|
|
OUT body MEDIUMTEXT)
|
|
BEGIN
|
|
DECLARE code MEDIUMTEXT;
|
|
DECLARE i INT DEFAULT 1;
|
|
|
|
SET code = concat("CREATE PROCEDURE ", proc_name, "(i INT)\n");
|
|
SET code = concat(code, "BEGIN\n");
|
|
SET code = concat(code, " DECLARE str CHAR(10);\n");
|
|
|
|
IF (simple)
|
|
THEN
|
|
SET code = concat(code, " CASE i\n");
|
|
ELSE
|
|
SET code = concat(code, " CASE\n");
|
|
END IF;
|
|
|
|
WHILE (i <= count)
|
|
DO
|
|
IF (simple)
|
|
THEN
|
|
SET code = concat(code, " WHEN ", i, " THEN SET str=\"", i, "\";\n");
|
|
ELSE
|
|
SET code = concat(code, " WHEN i=", i, " THEN SET str=\"", i, "\";\n");
|
|
END IF;
|
|
|
|
SET i = i + 1;
|
|
END WHILE;
|
|
|
|
SET code = concat(code, " ELSE SET str=\"unknown\";\n");
|
|
SET code = concat(code, " END CASE;\n");
|
|
SET code = concat(code, " SELECT str;\n");
|
|
|
|
SET code = concat(code, "END\n");
|
|
|
|
SET body = code;
|
|
END|
|
|
|
|
delimiter ;|
|
|
|
|
set @body="";
|
|
call proc_19194_codegen("test_simple", 10, 1, @body);
|
|
select @body;
|
|
call proc_19194_codegen("test_searched", 10, 0, @body);
|
|
select @body;
|
|
|
|
--disable_query_log
|
|
call proc_19194_codegen("bug_19194_simple", 5000, 1, @body);
|
|
let $proc_body = `select @body`;
|
|
eval $proc_body;
|
|
call proc_19194_codegen("bug_19194_searched", 5000, 1, @body);
|
|
let $proc_body = `select @body`;
|
|
eval $proc_body;
|
|
--enable_query_log
|
|
|
|
CALL bug_19194_simple(1);
|
|
CALL bug_19194_simple(2);
|
|
CALL bug_19194_simple(1000);
|
|
CALL bug_19194_simple(4998);
|
|
CALL bug_19194_simple(4999);
|
|
CALL bug_19194_simple(9999);
|
|
|
|
CALL bug_19194_searched(1);
|
|
CALL bug_19194_searched(2);
|
|
CALL bug_19194_searched(1000);
|
|
CALL bug_19194_searched(4998);
|
|
CALL bug_19194_searched(4999);
|
|
CALL bug_19194_searched(9999);
|
|
|
|
DROP PROCEDURE proc_19194_codegen;
|
|
DROP PROCEDURE bug_19194_simple;
|
|
DROP PROCEDURE bug_19194_searched;
|
|
|