Commit 60348574 authored by unknown's avatar unknown
Browse files

Merge trift2.:/MySQL/M50/mysql-5.0

into  trift2.:/MySQL/M50/push-5.0


VC++Files/libmysqld/libmysqld.dsp:
  Auto merged
VC++Files/mysql.dsw:
  Auto merged
VC++Files/mysqldemb/mysqldemb.dsp:
  Auto merged
VC++Files/sql/mysqld.dsp:
  Auto merged
VC++Files/sql/mysqldmax.dsp:
  Auto merged
innobase/buf/buf0buf.c:
  Auto merged
innobase/dict/dict0dict.c:
  Auto merged
innobase/fil/fil0fil.c:
  Auto merged
innobase/ha/ha0ha.c:
  Auto merged
innobase/include/hash0hash.h:
  Auto merged
innobase/lock/lock0lock.c:
  Auto merged
innobase/log/log0recv.c:
  Auto merged
mysys/my_read.c:
  Auto merged
scripts/make_binary_distribution.sh:
  Auto merged
support-files/MySQL-shared-compat.spec.sh:
  Auto merged
parents 87be629e 31e01f0a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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)
+9 −3
Original line number Diff line number Diff line
@@ -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)
+415 −0
Original line number Diff line number Diff line
@@ -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;
+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;
+9 −0
Original line number Diff line number Diff line
@@ -3014,4 +3014,13 @@ i j
6	3
DROP VIEW v1, v2;
DROP TABLE t1;
DROP VIEW IF EXISTS v1;
CREATE VIEW v1 AS SELECT 'The\ZEnd';
SELECT * FROM v1;
TheEnd
TheEnd
SHOW CREATE VIEW v1;
View	Create View
v1	CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select _latin1'The\ZEnd' AS `TheEnd`
DROP VIEW v1;
End of 5.0 tests.
Loading