Commit 687b57be authored by unknown's avatar unknown
Browse files

Fix handling of maximum value for MAX_ROWS on 64-bit platforms. (Bug #14155)


mysql-test/r/create.result:
  Add new results
mysql-test/t/create.test:
  Add regression test
sql/table.cc:
  To cap a value at 2^32-1 on a 64-bit platform, use UINT_MAX32, not
  ~(ulong)0, since a ulong may be 64-bit itself.
parent 1c9783e8
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -621,3 +621,22 @@ create table if not exists t1 (a int);
Warnings:
Note	1050	Table 't1' already exists
drop table t1;
create table t1 (i int) engine=myisam max_rows=100000000000;
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `i` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 MAX_ROWS=4294967295
alter table t1 max_rows=100;
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `i` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 MAX_ROWS=100
alter table t1 max_rows=100000000000;
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `i` int(11) default NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 MAX_ROWS=4294967295
drop table t1;
+14 −0
Original line number Diff line number Diff line
@@ -527,3 +527,17 @@ create table if not exists t1 (a int);
drop table t1;

# End of 4.1 tests

#
# Bug #14155: Maximum value of MAX_ROWS handled incorrectly on 64-bit
# platforms
#
create table t1 (i int) engine=myisam max_rows=100000000000;
show create table t1;
alter table t1 max_rows=100;
show create table t1;
alter table t1 max_rows=100000000000;
show create table t1;
drop table t1;

# End of 5.0 tests
+4 −4
Original line number Diff line number Diff line
@@ -1253,10 +1253,10 @@ File create_frm(register my_string name, const char *db, const char *table,

#if SIZEOF_OFF_T > 4
  /* Fix this when we have new .frm files;  Current limit is 4G rows (QQ) */
  if (create_info->max_rows > ~(ulong) 0)
    create_info->max_rows= ~(ulong) 0;
  if (create_info->min_rows > ~(ulong) 0)
    create_info->min_rows= ~(ulong) 0;
  if (create_info->max_rows > UINT_MAX32)
    create_info->max_rows= UINT_MAX32;
  if (create_info->min_rows > UINT_MAX32)
    create_info->min_rows= UINT_MAX32;
#endif
  /*
    Ensure that raid_chunks can't be larger than 255, as this would cause