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.
parent 45aeb7f0
......@@ -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;
......
......@@ -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;
......@@ -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
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