121 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			121 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | DROP PROCEDURE IF EXISTS proc_19194_codegen; | ||
|  | DROP PROCEDURE IF EXISTS bug_19194_simple; | ||
|  | DROP PROCEDURE IF EXISTS bug_19194_searched; | ||
|  | 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| | ||
|  | set @body=""; | ||
|  | call proc_19194_codegen("test_simple", 10, 1, @body); | ||
|  | select @body; | ||
|  | @body | ||
|  | CREATE PROCEDURE test_simple(i INT) | ||
|  | BEGIN | ||
|  |   DECLARE str CHAR(10); | ||
|  |   CASE i | ||
|  |     WHEN 1 THEN SET str="1"; | ||
|  |     WHEN 2 THEN SET str="2"; | ||
|  |     WHEN 3 THEN SET str="3"; | ||
|  |     WHEN 4 THEN SET str="4"; | ||
|  |     WHEN 5 THEN SET str="5"; | ||
|  |     WHEN 6 THEN SET str="6"; | ||
|  |     WHEN 7 THEN SET str="7"; | ||
|  |     WHEN 8 THEN SET str="8"; | ||
|  |     WHEN 9 THEN SET str="9"; | ||
|  |     WHEN 10 THEN SET str="10"; | ||
|  |     ELSE SET str="unknown"; | ||
|  |   END CASE; | ||
|  |   SELECT str; | ||
|  | END | ||
|  | 
 | ||
|  | call proc_19194_codegen("test_searched", 10, 0, @body); | ||
|  | select @body; | ||
|  | @body | ||
|  | CREATE PROCEDURE test_searched(i INT) | ||
|  | BEGIN | ||
|  |   DECLARE str CHAR(10); | ||
|  |   CASE | ||
|  |     WHEN i=1 THEN SET str="1"; | ||
|  |     WHEN i=2 THEN SET str="2"; | ||
|  |     WHEN i=3 THEN SET str="3"; | ||
|  |     WHEN i=4 THEN SET str="4"; | ||
|  |     WHEN i=5 THEN SET str="5"; | ||
|  |     WHEN i=6 THEN SET str="6"; | ||
|  |     WHEN i=7 THEN SET str="7"; | ||
|  |     WHEN i=8 THEN SET str="8"; | ||
|  |     WHEN i=9 THEN SET str="9"; | ||
|  |     WHEN i=10 THEN SET str="10"; | ||
|  |     ELSE SET str="unknown"; | ||
|  |   END CASE; | ||
|  |   SELECT str; | ||
|  | END | ||
|  | 
 | ||
|  | CALL bug_19194_simple(1); | ||
|  | str | ||
|  | 1 | ||
|  | CALL bug_19194_simple(2); | ||
|  | str | ||
|  | 2 | ||
|  | CALL bug_19194_simple(1000); | ||
|  | str | ||
|  | 1000 | ||
|  | CALL bug_19194_simple(4998); | ||
|  | str | ||
|  | 4998 | ||
|  | CALL bug_19194_simple(4999); | ||
|  | str | ||
|  | 4999 | ||
|  | CALL bug_19194_simple(9999); | ||
|  | str | ||
|  | unknown | ||
|  | CALL bug_19194_searched(1); | ||
|  | str | ||
|  | 1 | ||
|  | CALL bug_19194_searched(2); | ||
|  | str | ||
|  | 2 | ||
|  | CALL bug_19194_searched(1000); | ||
|  | str | ||
|  | 1000 | ||
|  | CALL bug_19194_searched(4998); | ||
|  | str | ||
|  | 4998 | ||
|  | CALL bug_19194_searched(4999); | ||
|  | str | ||
|  | 4999 | ||
|  | CALL bug_19194_searched(9999); | ||
|  | str | ||
|  | unknown | ||
|  | DROP PROCEDURE proc_19194_codegen; | ||
|  | DROP PROCEDURE bug_19194_simple; | ||
|  | DROP PROCEDURE bug_19194_searched; |