Commit 687b57be authored by unknown's avatar unknown

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
...@@ -621,3 +621,22 @@ create table if not exists t1 (a int); ...@@ -621,3 +621,22 @@ create table if not exists t1 (a int);
Warnings: Warnings:
Note 1050 Table 't1' already exists Note 1050 Table 't1' already exists
drop table t1; 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;
...@@ -527,3 +527,17 @@ create table if not exists t1 (a int); ...@@ -527,3 +527,17 @@ create table if not exists t1 (a int);
drop table t1; drop table t1;
# End of 4.1 tests # 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
...@@ -1253,10 +1253,10 @@ File create_frm(register my_string name, const char *db, const char *table, ...@@ -1253,10 +1253,10 @@ File create_frm(register my_string name, const char *db, const char *table,
#if SIZEOF_OFF_T > 4 #if SIZEOF_OFF_T > 4
/* Fix this when we have new .frm files; Current limit is 4G rows (QQ) */ /* Fix this when we have new .frm files; Current limit is 4G rows (QQ) */
if (create_info->max_rows > ~(ulong) 0) if (create_info->max_rows > UINT_MAX32)
create_info->max_rows= ~(ulong) 0; create_info->max_rows= UINT_MAX32;
if (create_info->min_rows > ~(ulong) 0) if (create_info->min_rows > UINT_MAX32)
create_info->min_rows= ~(ulong) 0; create_info->min_rows= UINT_MAX32;
#endif #endif
/* /*
Ensure that raid_chunks can't be larger than 255, as this would cause Ensure that raid_chunks can't be larger than 255, as this would cause
......
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