From 422d6b357f90d404f58bdd4444c048a760f0d9f8 Mon Sep 17 00:00:00 2001 From: unknown <istruewing@chilla.local> Date: Fri, 5 Jan 2007 10:26:51 +0100 Subject: [PATCH] Bug#24607 - MyISAM pointer size determined incorrectly The function mi_get_pointer_length() computed too small pointer size for very large tables. Inserted missing 'else' between the branches for very large tables. myisam/mi_create.c: Bug#24607 - MyISAM pointer size determined incorrectly Inserted missing 'else' between the branches for very large tables. Harmonized literals "(longlong) 1" and "1L" to "ULL(1)" where they are used for "ulonglong file_length". mysql-test/r/myisam.result: Bug#24607 - MyISAM pointer size determined incorrectly Added the test result. mysql-test/t/myisam.test: Bug#24607 - MyISAM pointer size determined incorrectly Added the test. --- myisam/mi_create.c | 13 +++++++------ mysql-test/r/myisam.result | 5 +++++ mysql-test/t/myisam.test | 8 ++++++++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/myisam/mi_create.c b/myisam/mi_create.c index c1310a8012..da9e0887b0 100644 --- a/myisam/mi_create.c +++ b/myisam/mi_create.c @@ -768,18 +768,19 @@ uint mi_get_pointer_length(ulonglong file_length, uint def) if (file_length) /* If not default */ { #ifdef NOT_YET_READY_FOR_8_BYTE_POINTERS - if (file_length >= (longlong) 1 << 56) + if (file_length >= ULL(1) << 56) def=8; + else #endif - if (file_length >= (longlong) 1 << 48) + if (file_length >= ULL(1) << 48) def=7; - if (file_length >= (longlong) 1 << 40) + else if (file_length >= ULL(1) << 40) def=6; - else if (file_length >= (longlong) 1 << 32) + else if (file_length >= ULL(1) << 32) def=5; - else if (file_length >= (1L << 24)) + else if (file_length >= ULL(1) << 24) def=4; - else if (file_length >= (1L << 16)) + else if (file_length >= ULL(1) << 16) def=3; else def=2; diff --git a/mysql-test/r/myisam.result b/mysql-test/r/myisam.result index 73cee4835b..749d5f4780 100644 --- a/mysql-test/r/myisam.result +++ b/mysql-test/r/myisam.result @@ -960,3 +960,8 @@ a 2 3 DROP TABLE t1; +CREATE TABLE t1 (c1 TEXT) AVG_ROW_LENGTH=70100 MAX_ROWS=5100100100; +SHOW TABLE STATUS LIKE 't1'; +Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment +t1 MyISAM 9 Dynamic X X X 72057594037927935 X X X X X X latin1_swedish_ci X max_rows=4294967295 avg_row_length=70100 +DROP TABLE t1; diff --git a/mysql-test/t/myisam.test b/mysql-test/t/myisam.test index 7868e7bad4..d065d2e3eb 100644 --- a/mysql-test/t/myisam.test +++ b/mysql-test/t/myisam.test @@ -909,4 +909,12 @@ UPDATE t1,t1 AS t2 SET t1.a=t1.a+2 WHERE t1.a=t2.a-1; SELECT * FROM t1 ORDER BY a; DROP TABLE t1; +# +# Bug#24607 - MyISAM pointer size determined incorrectly +# +CREATE TABLE t1 (c1 TEXT) AVG_ROW_LENGTH=70100 MAX_ROWS=5100100100; +--replace_column 5 X 6 X 7 X 9 X 10 X 11 X 12 X 13 X 14 X 16 X +SHOW TABLE STATUS LIKE 't1'; +DROP TABLE t1; + # End of 4.1 tests -- 2.30.9