Commit 422d6b35 authored by unknown's avatar unknown

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.
parent 402c0426
...@@ -768,18 +768,19 @@ uint mi_get_pointer_length(ulonglong file_length, uint def) ...@@ -768,18 +768,19 @@ uint mi_get_pointer_length(ulonglong file_length, uint def)
if (file_length) /* If not default */ if (file_length) /* If not default */
{ {
#ifdef NOT_YET_READY_FOR_8_BYTE_POINTERS #ifdef NOT_YET_READY_FOR_8_BYTE_POINTERS
if (file_length >= (longlong) 1 << 56) if (file_length >= ULL(1) << 56)
def=8; def=8;
else
#endif #endif
if (file_length >= (longlong) 1 << 48) if (file_length >= ULL(1) << 48)
def=7; def=7;
if (file_length >= (longlong) 1 << 40) else if (file_length >= ULL(1) << 40)
def=6; def=6;
else if (file_length >= (longlong) 1 << 32) else if (file_length >= ULL(1) << 32)
def=5; def=5;
else if (file_length >= (1L << 24)) else if (file_length >= ULL(1) << 24)
def=4; def=4;
else if (file_length >= (1L << 16)) else if (file_length >= ULL(1) << 16)
def=3; def=3;
else else
def=2; def=2;
......
...@@ -960,3 +960,8 @@ a ...@@ -960,3 +960,8 @@ a
2 2
3 3
DROP TABLE t1; 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;
...@@ -909,4 +909,12 @@ UPDATE t1,t1 AS t2 SET t1.a=t1.a+2 WHERE t1.a=t2.a-1; ...@@ -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; SELECT * FROM t1 ORDER BY a;
DROP TABLE t1; 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 # End of 4.1 tests
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment