Loading configure.in +2 −2 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc) AC_CANONICAL_SYSTEM # The Docs Makefile.am parses this line! # remember to also change ndb version below and update version.c in ndb AM_INIT_AUTOMAKE(mysql, 5.0.34) AM_INIT_AUTOMAKE(mysql, 5.0.36) AM_CONFIG_HEADER(config.h) PROTOCOL_VERSION=10 Loading @@ -19,7 +19,7 @@ SHARED_LIB_VERSION=$SHARED_LIB_MAJOR_VERSION:0:0 # ndb version NDB_VERSION_MAJOR=5 NDB_VERSION_MINOR=0 NDB_VERSION_BUILD=34 NDB_VERSION_BUILD=36 NDB_VERSION_STATUS="" # Set all version vars based on $VERSION. How do we do this more elegant ? Loading heap/hp_block.c +1 −1 Original line number Diff line number Diff line Loading @@ -75,7 +75,7 @@ int hp_get_new_block(HP_BLOCK *block, ulong *alloc_length) and my_default_record_cache_size we get about 1/128 unused memory. */ *alloc_length=sizeof(HP_PTRS)*i+block->records_in_block* block->recbuffer; if (!(root=(HP_PTRS*) my_malloc(*alloc_length,MYF(0)))) if (!(root=(HP_PTRS*) my_malloc(*alloc_length,MYF(MY_WME)))) return 1; if (i == 0) Loading heap/hp_write.c +9 −3 Original line number Diff line number Diff line Loading @@ -67,11 +67,17 @@ int heap_write(HP_INFO *info, const byte *record) DBUG_RETURN(0); err: DBUG_PRINT("info",("Duplicate key: %d", (int) (keydef - share->keydef))); if (my_errno == HA_ERR_FOUND_DUPP_KEY) DBUG_PRINT("info",("Duplicate key: %d", keydef - share->keydef)); info->errkey= keydef - share->keydef; if (keydef->algorithm == HA_KEY_ALG_BTREE) /* We don't need to delete non-inserted key from rb-tree. Also, if we got ENOMEM, the key wasn't inserted, so don't try to delete it either. Otherwise for HASH index on HA_ERR_FOUND_DUPP_KEY the key was inserted and we have to delete it. */ if (keydef->algorithm == HA_KEY_ALG_BTREE || my_errno == ENOMEM) { /* we don't need to delete non-inserted key from rb-tree */ keydef--; } while (keydef >= share->keydef) Loading mysql-test/r/sp-code.result +415 −0 Original line number Diff line number Diff line Loading @@ -199,6 +199,421 @@ Pos Instruction 44 jump 14 45 stmt 9 "drop temporary table sudoku_work, sud..." drop procedure sudoku_solve; DROP PROCEDURE IF EXISTS proc_19194_simple; DROP PROCEDURE IF EXISTS proc_19194_searched; DROP PROCEDURE IF EXISTS proc_19194_nested_1; DROP PROCEDURE IF EXISTS proc_19194_nested_2; DROP PROCEDURE IF EXISTS proc_19194_nested_3; DROP PROCEDURE IF EXISTS proc_19194_nested_4; CREATE PROCEDURE proc_19194_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"; ELSE SET str="unknown"; END CASE; SELECT str; END| CREATE PROCEDURE proc_19194_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"; ELSE SET str="unknown"; END CASE; SELECT str; END| CREATE PROCEDURE proc_19194_nested_1(i int, j int) BEGIN DECLARE str_i CHAR(10); DECLARE str_j CHAR(10); CASE i WHEN 10 THEN SET str_i="10"; WHEN 20 THEN BEGIN set str_i="20"; CASE WHEN j=1 THEN SET str_j="1"; WHEN j=2 THEN SET str_j="2"; WHEN j=3 THEN SET str_j="3"; ELSE SET str_j="unknown"; END CASE; select "i was 20"; END; WHEN 30 THEN SET str_i="30"; WHEN 40 THEN SET str_i="40"; ELSE SET str_i="unknown"; END CASE; SELECT str_i, str_j; END| CREATE PROCEDURE proc_19194_nested_2(i int, j int) BEGIN DECLARE str_i CHAR(10); DECLARE str_j CHAR(10); CASE WHEN i=10 THEN SET str_i="10"; WHEN i=20 THEN BEGIN set str_i="20"; CASE j WHEN 1 THEN SET str_j="1"; WHEN 2 THEN SET str_j="2"; WHEN 3 THEN SET str_j="3"; ELSE SET str_j="unknown"; END CASE; select "i was 20"; END; WHEN i=30 THEN SET str_i="30"; WHEN i=40 THEN SET str_i="40"; ELSE SET str_i="unknown"; END CASE; SELECT str_i, str_j; END| CREATE PROCEDURE proc_19194_nested_3(i int, j int) BEGIN DECLARE str_i CHAR(10); DECLARE str_j CHAR(10); CASE i WHEN 10 THEN SET str_i="10"; WHEN 20 THEN BEGIN set str_i="20"; CASE j WHEN 1 THEN SET str_j="1"; WHEN 2 THEN SET str_j="2"; WHEN 3 THEN SET str_j="3"; ELSE SET str_j="unknown"; END CASE; select "i was 20"; END; WHEN 30 THEN SET str_i="30"; WHEN 40 THEN SET str_i="40"; ELSE SET str_i="unknown"; END CASE; SELECT str_i, str_j; END| CREATE PROCEDURE proc_19194_nested_4(i int, j int) BEGIN DECLARE str_i CHAR(10); DECLARE str_j CHAR(10); CASE WHEN i=10 THEN SET str_i="10"; WHEN i=20 THEN BEGIN set str_i="20"; CASE WHEN j=1 THEN SET str_j="1"; WHEN j=2 THEN SET str_j="2"; WHEN j=3 THEN SET str_j="3"; ELSE SET str_j="unknown"; END CASE; select "i was 20"; END; WHEN i=30 THEN SET str_i="30"; WHEN i=40 THEN SET str_i="40"; ELSE SET str_i="unknown"; END CASE; SELECT str_i, str_j; END| SHOW PROCEDURE CODE proc_19194_simple; Pos Instruction 0 set str@1 NULL 1 set_case_expr (12) 0 i@0 2 jump_if_not 5(12) (case_expr@0 = 1) 3 set str@1 _latin1'1' 4 jump 12 5 jump_if_not 8(12) (case_expr@0 = 2) 6 set str@1 _latin1'2' 7 jump 12 8 jump_if_not 11(12) (case_expr@0 = 3) 9 set str@1 _latin1'3' 10 jump 12 11 set str@1 _latin1'unknown' 12 stmt 0 "SELECT str" SHOW PROCEDURE CODE proc_19194_searched; Pos Instruction 0 set str@1 NULL 1 jump_if_not 4(11) (i@0 = 1) 2 set str@1 _latin1'1' 3 jump 11 4 jump_if_not 7(11) (i@0 = 2) 5 set str@1 _latin1'2' 6 jump 11 7 jump_if_not 10(11) (i@0 = 3) 8 set str@1 _latin1'3' 9 jump 11 10 set str@1 _latin1'unknown' 11 stmt 0 "SELECT str" SHOW PROCEDURE CODE proc_19194_nested_1; Pos Instruction 0 set str_i@2 NULL 1 set str_j@3 NULL 2 set_case_expr (27) 0 i@0 3 jump_if_not 6(27) (case_expr@0 = 10) 4 set str_i@2 _latin1'10' 5 jump 27 6 jump_if_not 20(27) (case_expr@0 = 20) 7 set str_i@2 _latin1'20' 8 jump_if_not 11(18) (j@1 = 1) 9 set str_j@3 _latin1'1' 10 jump 18 11 jump_if_not 14(18) (j@1 = 2) 12 set str_j@3 _latin1'2' 13 jump 18 14 jump_if_not 17(18) (j@1 = 3) 15 set str_j@3 _latin1'3' 16 jump 18 17 set str_j@3 _latin1'unknown' 18 stmt 0 "select "i was 20"" 19 jump 27 20 jump_if_not 23(27) (case_expr@0 = 30) 21 set str_i@2 _latin1'30' 22 jump 27 23 jump_if_not 26(27) (case_expr@0 = 40) 24 set str_i@2 _latin1'40' 25 jump 27 26 set str_i@2 _latin1'unknown' 27 stmt 0 "SELECT str_i, str_j" SHOW PROCEDURE CODE proc_19194_nested_2; Pos Instruction 0 set str_i@2 NULL 1 set str_j@3 NULL 2 jump_if_not 5(27) (i@0 = 10) 3 set str_i@2 _latin1'10' 4 jump 27 5 jump_if_not 20(27) (i@0 = 20) 6 set str_i@2 _latin1'20' 7 set_case_expr (18) 0 j@1 8 jump_if_not 11(18) (case_expr@0 = 1) 9 set str_j@3 _latin1'1' 10 jump 18 11 jump_if_not 14(18) (case_expr@0 = 2) 12 set str_j@3 _latin1'2' 13 jump 18 14 jump_if_not 17(18) (case_expr@0 = 3) 15 set str_j@3 _latin1'3' 16 jump 18 17 set str_j@3 _latin1'unknown' 18 stmt 0 "select "i was 20"" 19 jump 27 20 jump_if_not 23(27) (i@0 = 30) 21 set str_i@2 _latin1'30' 22 jump 27 23 jump_if_not 26(27) (i@0 = 40) 24 set str_i@2 _latin1'40' 25 jump 27 26 set str_i@2 _latin1'unknown' 27 stmt 0 "SELECT str_i, str_j" SHOW PROCEDURE CODE proc_19194_nested_3; Pos Instruction 0 set str_i@2 NULL 1 set str_j@3 NULL 2 set_case_expr (28) 0 i@0 3 jump_if_not 6(28) (case_expr@0 = 10) 4 set str_i@2 _latin1'10' 5 jump 28 6 jump_if_not 21(28) (case_expr@0 = 20) 7 set str_i@2 _latin1'20' 8 set_case_expr (19) 1 j@1 9 jump_if_not 12(19) (case_expr@1 = 1) 10 set str_j@3 _latin1'1' 11 jump 19 12 jump_if_not 15(19) (case_expr@1 = 2) 13 set str_j@3 _latin1'2' 14 jump 19 15 jump_if_not 18(19) (case_expr@1 = 3) 16 set str_j@3 _latin1'3' 17 jump 19 18 set str_j@3 _latin1'unknown' 19 stmt 0 "select "i was 20"" 20 jump 28 21 jump_if_not 24(28) (case_expr@0 = 30) 22 set str_i@2 _latin1'30' 23 jump 28 24 jump_if_not 27(28) (case_expr@0 = 40) 25 set str_i@2 _latin1'40' 26 jump 28 27 set str_i@2 _latin1'unknown' 28 stmt 0 "SELECT str_i, str_j" SHOW PROCEDURE CODE proc_19194_nested_4; Pos Instruction 0 set str_i@2 NULL 1 set str_j@3 NULL 2 jump_if_not 5(26) (i@0 = 10) 3 set str_i@2 _latin1'10' 4 jump 26 5 jump_if_not 19(26) (i@0 = 20) 6 set str_i@2 _latin1'20' 7 jump_if_not 10(17) (j@1 = 1) 8 set str_j@3 _latin1'1' 9 jump 17 10 jump_if_not 13(17) (j@1 = 2) 11 set str_j@3 _latin1'2' 12 jump 17 13 jump_if_not 16(17) (j@1 = 3) 14 set str_j@3 _latin1'3' 15 jump 17 16 set str_j@3 _latin1'unknown' 17 stmt 0 "select "i was 20"" 18 jump 26 19 jump_if_not 22(26) (i@0 = 30) 20 set str_i@2 _latin1'30' 21 jump 26 22 jump_if_not 25(26) (i@0 = 40) 23 set str_i@2 _latin1'40' 24 jump 26 25 set str_i@2 _latin1'unknown' 26 stmt 0 "SELECT str_i, str_j" CALL proc_19194_nested_1(10, 1); str_i str_j 10 NULL CALL proc_19194_nested_1(25, 1); str_i str_j unknown NULL CALL proc_19194_nested_1(20, 1); i was 20 i was 20 str_i str_j 20 1 CALL proc_19194_nested_1(20, 2); i was 20 i was 20 str_i str_j 20 2 CALL proc_19194_nested_1(20, 3); i was 20 i was 20 str_i str_j 20 3 CALL proc_19194_nested_1(20, 4); i was 20 i was 20 str_i str_j 20 unknown CALL proc_19194_nested_1(30, 1); str_i str_j 30 NULL CALL proc_19194_nested_1(40, 1); str_i str_j 40 NULL CALL proc_19194_nested_1(0, 0); str_i str_j unknown NULL CALL proc_19194_nested_2(10, 1); str_i str_j 10 NULL CALL proc_19194_nested_2(25, 1); str_i str_j unknown NULL CALL proc_19194_nested_2(20, 1); i was 20 i was 20 str_i str_j 20 1 CALL proc_19194_nested_2(20, 2); i was 20 i was 20 str_i str_j 20 2 CALL proc_19194_nested_2(20, 3); i was 20 i was 20 str_i str_j 20 3 CALL proc_19194_nested_2(20, 4); i was 20 i was 20 str_i str_j 20 unknown CALL proc_19194_nested_2(30, 1); str_i str_j 30 NULL CALL proc_19194_nested_2(40, 1); str_i str_j 40 NULL CALL proc_19194_nested_2(0, 0); str_i str_j unknown NULL CALL proc_19194_nested_3(10, 1); str_i str_j 10 NULL CALL proc_19194_nested_3(25, 1); str_i str_j unknown NULL CALL proc_19194_nested_3(20, 1); i was 20 i was 20 str_i str_j 20 1 CALL proc_19194_nested_3(20, 2); i was 20 i was 20 str_i str_j 20 2 CALL proc_19194_nested_3(20, 3); i was 20 i was 20 str_i str_j 20 3 CALL proc_19194_nested_3(20, 4); i was 20 i was 20 str_i str_j 20 unknown CALL proc_19194_nested_3(30, 1); str_i str_j 30 NULL CALL proc_19194_nested_3(40, 1); str_i str_j 40 NULL CALL proc_19194_nested_3(0, 0); str_i str_j unknown NULL CALL proc_19194_nested_4(10, 1); str_i str_j 10 NULL CALL proc_19194_nested_4(25, 1); str_i str_j unknown NULL CALL proc_19194_nested_4(20, 1); i was 20 i was 20 str_i str_j 20 1 CALL proc_19194_nested_4(20, 2); i was 20 i was 20 str_i str_j 20 2 CALL proc_19194_nested_4(20, 3); i was 20 i was 20 str_i str_j 20 3 CALL proc_19194_nested_4(20, 4); i was 20 i was 20 str_i str_j 20 unknown CALL proc_19194_nested_4(30, 1); str_i str_j 30 NULL CALL proc_19194_nested_4(40, 1); str_i str_j 40 NULL CALL proc_19194_nested_4(0, 0); str_i str_j unknown NULL DROP PROCEDURE proc_19194_simple; DROP PROCEDURE proc_19194_searched; DROP PROCEDURE proc_19194_nested_1; DROP PROCEDURE proc_19194_nested_2; DROP PROCEDURE proc_19194_nested_3; DROP PROCEDURE proc_19194_nested_4; DROP PROCEDURE IF EXISTS p1; CREATE PROCEDURE p1() CREATE INDEX idx ON t1 (c1); SHOW PROCEDURE CODE p1; Loading mysql-test/r/sp_stress_case.result 0 → 100644 +120 −0 Original line number Diff line number Diff line 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; Loading
configure.in +2 −2 Original line number Diff line number Diff line Loading @@ -7,7 +7,7 @@ AC_INIT(sql/mysqld.cc) AC_CANONICAL_SYSTEM # The Docs Makefile.am parses this line! # remember to also change ndb version below and update version.c in ndb AM_INIT_AUTOMAKE(mysql, 5.0.34) AM_INIT_AUTOMAKE(mysql, 5.0.36) AM_CONFIG_HEADER(config.h) PROTOCOL_VERSION=10 Loading @@ -19,7 +19,7 @@ SHARED_LIB_VERSION=$SHARED_LIB_MAJOR_VERSION:0:0 # ndb version NDB_VERSION_MAJOR=5 NDB_VERSION_MINOR=0 NDB_VERSION_BUILD=34 NDB_VERSION_BUILD=36 NDB_VERSION_STATUS="" # Set all version vars based on $VERSION. How do we do this more elegant ? Loading
heap/hp_block.c +1 −1 Original line number Diff line number Diff line Loading @@ -75,7 +75,7 @@ int hp_get_new_block(HP_BLOCK *block, ulong *alloc_length) and my_default_record_cache_size we get about 1/128 unused memory. */ *alloc_length=sizeof(HP_PTRS)*i+block->records_in_block* block->recbuffer; if (!(root=(HP_PTRS*) my_malloc(*alloc_length,MYF(0)))) if (!(root=(HP_PTRS*) my_malloc(*alloc_length,MYF(MY_WME)))) return 1; if (i == 0) Loading
heap/hp_write.c +9 −3 Original line number Diff line number Diff line Loading @@ -67,11 +67,17 @@ int heap_write(HP_INFO *info, const byte *record) DBUG_RETURN(0); err: DBUG_PRINT("info",("Duplicate key: %d", (int) (keydef - share->keydef))); if (my_errno == HA_ERR_FOUND_DUPP_KEY) DBUG_PRINT("info",("Duplicate key: %d", keydef - share->keydef)); info->errkey= keydef - share->keydef; if (keydef->algorithm == HA_KEY_ALG_BTREE) /* We don't need to delete non-inserted key from rb-tree. Also, if we got ENOMEM, the key wasn't inserted, so don't try to delete it either. Otherwise for HASH index on HA_ERR_FOUND_DUPP_KEY the key was inserted and we have to delete it. */ if (keydef->algorithm == HA_KEY_ALG_BTREE || my_errno == ENOMEM) { /* we don't need to delete non-inserted key from rb-tree */ keydef--; } while (keydef >= share->keydef) Loading
mysql-test/r/sp-code.result +415 −0 Original line number Diff line number Diff line Loading @@ -199,6 +199,421 @@ Pos Instruction 44 jump 14 45 stmt 9 "drop temporary table sudoku_work, sud..." drop procedure sudoku_solve; DROP PROCEDURE IF EXISTS proc_19194_simple; DROP PROCEDURE IF EXISTS proc_19194_searched; DROP PROCEDURE IF EXISTS proc_19194_nested_1; DROP PROCEDURE IF EXISTS proc_19194_nested_2; DROP PROCEDURE IF EXISTS proc_19194_nested_3; DROP PROCEDURE IF EXISTS proc_19194_nested_4; CREATE PROCEDURE proc_19194_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"; ELSE SET str="unknown"; END CASE; SELECT str; END| CREATE PROCEDURE proc_19194_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"; ELSE SET str="unknown"; END CASE; SELECT str; END| CREATE PROCEDURE proc_19194_nested_1(i int, j int) BEGIN DECLARE str_i CHAR(10); DECLARE str_j CHAR(10); CASE i WHEN 10 THEN SET str_i="10"; WHEN 20 THEN BEGIN set str_i="20"; CASE WHEN j=1 THEN SET str_j="1"; WHEN j=2 THEN SET str_j="2"; WHEN j=3 THEN SET str_j="3"; ELSE SET str_j="unknown"; END CASE; select "i was 20"; END; WHEN 30 THEN SET str_i="30"; WHEN 40 THEN SET str_i="40"; ELSE SET str_i="unknown"; END CASE; SELECT str_i, str_j; END| CREATE PROCEDURE proc_19194_nested_2(i int, j int) BEGIN DECLARE str_i CHAR(10); DECLARE str_j CHAR(10); CASE WHEN i=10 THEN SET str_i="10"; WHEN i=20 THEN BEGIN set str_i="20"; CASE j WHEN 1 THEN SET str_j="1"; WHEN 2 THEN SET str_j="2"; WHEN 3 THEN SET str_j="3"; ELSE SET str_j="unknown"; END CASE; select "i was 20"; END; WHEN i=30 THEN SET str_i="30"; WHEN i=40 THEN SET str_i="40"; ELSE SET str_i="unknown"; END CASE; SELECT str_i, str_j; END| CREATE PROCEDURE proc_19194_nested_3(i int, j int) BEGIN DECLARE str_i CHAR(10); DECLARE str_j CHAR(10); CASE i WHEN 10 THEN SET str_i="10"; WHEN 20 THEN BEGIN set str_i="20"; CASE j WHEN 1 THEN SET str_j="1"; WHEN 2 THEN SET str_j="2"; WHEN 3 THEN SET str_j="3"; ELSE SET str_j="unknown"; END CASE; select "i was 20"; END; WHEN 30 THEN SET str_i="30"; WHEN 40 THEN SET str_i="40"; ELSE SET str_i="unknown"; END CASE; SELECT str_i, str_j; END| CREATE PROCEDURE proc_19194_nested_4(i int, j int) BEGIN DECLARE str_i CHAR(10); DECLARE str_j CHAR(10); CASE WHEN i=10 THEN SET str_i="10"; WHEN i=20 THEN BEGIN set str_i="20"; CASE WHEN j=1 THEN SET str_j="1"; WHEN j=2 THEN SET str_j="2"; WHEN j=3 THEN SET str_j="3"; ELSE SET str_j="unknown"; END CASE; select "i was 20"; END; WHEN i=30 THEN SET str_i="30"; WHEN i=40 THEN SET str_i="40"; ELSE SET str_i="unknown"; END CASE; SELECT str_i, str_j; END| SHOW PROCEDURE CODE proc_19194_simple; Pos Instruction 0 set str@1 NULL 1 set_case_expr (12) 0 i@0 2 jump_if_not 5(12) (case_expr@0 = 1) 3 set str@1 _latin1'1' 4 jump 12 5 jump_if_not 8(12) (case_expr@0 = 2) 6 set str@1 _latin1'2' 7 jump 12 8 jump_if_not 11(12) (case_expr@0 = 3) 9 set str@1 _latin1'3' 10 jump 12 11 set str@1 _latin1'unknown' 12 stmt 0 "SELECT str" SHOW PROCEDURE CODE proc_19194_searched; Pos Instruction 0 set str@1 NULL 1 jump_if_not 4(11) (i@0 = 1) 2 set str@1 _latin1'1' 3 jump 11 4 jump_if_not 7(11) (i@0 = 2) 5 set str@1 _latin1'2' 6 jump 11 7 jump_if_not 10(11) (i@0 = 3) 8 set str@1 _latin1'3' 9 jump 11 10 set str@1 _latin1'unknown' 11 stmt 0 "SELECT str" SHOW PROCEDURE CODE proc_19194_nested_1; Pos Instruction 0 set str_i@2 NULL 1 set str_j@3 NULL 2 set_case_expr (27) 0 i@0 3 jump_if_not 6(27) (case_expr@0 = 10) 4 set str_i@2 _latin1'10' 5 jump 27 6 jump_if_not 20(27) (case_expr@0 = 20) 7 set str_i@2 _latin1'20' 8 jump_if_not 11(18) (j@1 = 1) 9 set str_j@3 _latin1'1' 10 jump 18 11 jump_if_not 14(18) (j@1 = 2) 12 set str_j@3 _latin1'2' 13 jump 18 14 jump_if_not 17(18) (j@1 = 3) 15 set str_j@3 _latin1'3' 16 jump 18 17 set str_j@3 _latin1'unknown' 18 stmt 0 "select "i was 20"" 19 jump 27 20 jump_if_not 23(27) (case_expr@0 = 30) 21 set str_i@2 _latin1'30' 22 jump 27 23 jump_if_not 26(27) (case_expr@0 = 40) 24 set str_i@2 _latin1'40' 25 jump 27 26 set str_i@2 _latin1'unknown' 27 stmt 0 "SELECT str_i, str_j" SHOW PROCEDURE CODE proc_19194_nested_2; Pos Instruction 0 set str_i@2 NULL 1 set str_j@3 NULL 2 jump_if_not 5(27) (i@0 = 10) 3 set str_i@2 _latin1'10' 4 jump 27 5 jump_if_not 20(27) (i@0 = 20) 6 set str_i@2 _latin1'20' 7 set_case_expr (18) 0 j@1 8 jump_if_not 11(18) (case_expr@0 = 1) 9 set str_j@3 _latin1'1' 10 jump 18 11 jump_if_not 14(18) (case_expr@0 = 2) 12 set str_j@3 _latin1'2' 13 jump 18 14 jump_if_not 17(18) (case_expr@0 = 3) 15 set str_j@3 _latin1'3' 16 jump 18 17 set str_j@3 _latin1'unknown' 18 stmt 0 "select "i was 20"" 19 jump 27 20 jump_if_not 23(27) (i@0 = 30) 21 set str_i@2 _latin1'30' 22 jump 27 23 jump_if_not 26(27) (i@0 = 40) 24 set str_i@2 _latin1'40' 25 jump 27 26 set str_i@2 _latin1'unknown' 27 stmt 0 "SELECT str_i, str_j" SHOW PROCEDURE CODE proc_19194_nested_3; Pos Instruction 0 set str_i@2 NULL 1 set str_j@3 NULL 2 set_case_expr (28) 0 i@0 3 jump_if_not 6(28) (case_expr@0 = 10) 4 set str_i@2 _latin1'10' 5 jump 28 6 jump_if_not 21(28) (case_expr@0 = 20) 7 set str_i@2 _latin1'20' 8 set_case_expr (19) 1 j@1 9 jump_if_not 12(19) (case_expr@1 = 1) 10 set str_j@3 _latin1'1' 11 jump 19 12 jump_if_not 15(19) (case_expr@1 = 2) 13 set str_j@3 _latin1'2' 14 jump 19 15 jump_if_not 18(19) (case_expr@1 = 3) 16 set str_j@3 _latin1'3' 17 jump 19 18 set str_j@3 _latin1'unknown' 19 stmt 0 "select "i was 20"" 20 jump 28 21 jump_if_not 24(28) (case_expr@0 = 30) 22 set str_i@2 _latin1'30' 23 jump 28 24 jump_if_not 27(28) (case_expr@0 = 40) 25 set str_i@2 _latin1'40' 26 jump 28 27 set str_i@2 _latin1'unknown' 28 stmt 0 "SELECT str_i, str_j" SHOW PROCEDURE CODE proc_19194_nested_4; Pos Instruction 0 set str_i@2 NULL 1 set str_j@3 NULL 2 jump_if_not 5(26) (i@0 = 10) 3 set str_i@2 _latin1'10' 4 jump 26 5 jump_if_not 19(26) (i@0 = 20) 6 set str_i@2 _latin1'20' 7 jump_if_not 10(17) (j@1 = 1) 8 set str_j@3 _latin1'1' 9 jump 17 10 jump_if_not 13(17) (j@1 = 2) 11 set str_j@3 _latin1'2' 12 jump 17 13 jump_if_not 16(17) (j@1 = 3) 14 set str_j@3 _latin1'3' 15 jump 17 16 set str_j@3 _latin1'unknown' 17 stmt 0 "select "i was 20"" 18 jump 26 19 jump_if_not 22(26) (i@0 = 30) 20 set str_i@2 _latin1'30' 21 jump 26 22 jump_if_not 25(26) (i@0 = 40) 23 set str_i@2 _latin1'40' 24 jump 26 25 set str_i@2 _latin1'unknown' 26 stmt 0 "SELECT str_i, str_j" CALL proc_19194_nested_1(10, 1); str_i str_j 10 NULL CALL proc_19194_nested_1(25, 1); str_i str_j unknown NULL CALL proc_19194_nested_1(20, 1); i was 20 i was 20 str_i str_j 20 1 CALL proc_19194_nested_1(20, 2); i was 20 i was 20 str_i str_j 20 2 CALL proc_19194_nested_1(20, 3); i was 20 i was 20 str_i str_j 20 3 CALL proc_19194_nested_1(20, 4); i was 20 i was 20 str_i str_j 20 unknown CALL proc_19194_nested_1(30, 1); str_i str_j 30 NULL CALL proc_19194_nested_1(40, 1); str_i str_j 40 NULL CALL proc_19194_nested_1(0, 0); str_i str_j unknown NULL CALL proc_19194_nested_2(10, 1); str_i str_j 10 NULL CALL proc_19194_nested_2(25, 1); str_i str_j unknown NULL CALL proc_19194_nested_2(20, 1); i was 20 i was 20 str_i str_j 20 1 CALL proc_19194_nested_2(20, 2); i was 20 i was 20 str_i str_j 20 2 CALL proc_19194_nested_2(20, 3); i was 20 i was 20 str_i str_j 20 3 CALL proc_19194_nested_2(20, 4); i was 20 i was 20 str_i str_j 20 unknown CALL proc_19194_nested_2(30, 1); str_i str_j 30 NULL CALL proc_19194_nested_2(40, 1); str_i str_j 40 NULL CALL proc_19194_nested_2(0, 0); str_i str_j unknown NULL CALL proc_19194_nested_3(10, 1); str_i str_j 10 NULL CALL proc_19194_nested_3(25, 1); str_i str_j unknown NULL CALL proc_19194_nested_3(20, 1); i was 20 i was 20 str_i str_j 20 1 CALL proc_19194_nested_3(20, 2); i was 20 i was 20 str_i str_j 20 2 CALL proc_19194_nested_3(20, 3); i was 20 i was 20 str_i str_j 20 3 CALL proc_19194_nested_3(20, 4); i was 20 i was 20 str_i str_j 20 unknown CALL proc_19194_nested_3(30, 1); str_i str_j 30 NULL CALL proc_19194_nested_3(40, 1); str_i str_j 40 NULL CALL proc_19194_nested_3(0, 0); str_i str_j unknown NULL CALL proc_19194_nested_4(10, 1); str_i str_j 10 NULL CALL proc_19194_nested_4(25, 1); str_i str_j unknown NULL CALL proc_19194_nested_4(20, 1); i was 20 i was 20 str_i str_j 20 1 CALL proc_19194_nested_4(20, 2); i was 20 i was 20 str_i str_j 20 2 CALL proc_19194_nested_4(20, 3); i was 20 i was 20 str_i str_j 20 3 CALL proc_19194_nested_4(20, 4); i was 20 i was 20 str_i str_j 20 unknown CALL proc_19194_nested_4(30, 1); str_i str_j 30 NULL CALL proc_19194_nested_4(40, 1); str_i str_j 40 NULL CALL proc_19194_nested_4(0, 0); str_i str_j unknown NULL DROP PROCEDURE proc_19194_simple; DROP PROCEDURE proc_19194_searched; DROP PROCEDURE proc_19194_nested_1; DROP PROCEDURE proc_19194_nested_2; DROP PROCEDURE proc_19194_nested_3; DROP PROCEDURE proc_19194_nested_4; DROP PROCEDURE IF EXISTS p1; CREATE PROCEDURE p1() CREATE INDEX idx ON t1 (c1); SHOW PROCEDURE CODE p1; Loading
mysql-test/r/sp_stress_case.result 0 → 100644 +120 −0 Original line number Diff line number Diff line 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;