Commit 422d6b35 authored by unknown's avatar unknown
Browse files

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
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line
@@ -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;
+5 −0
Original line number Diff line number Diff line
@@ -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;
+8 −0
Original line number Diff line number Diff line
@@ -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