Bug #54606 innodb fast alter table + pack_keys=0 prevents
adding new indexes A fast alter table requires that the existing (old) table and indices are unchanged (i.e only new indices can be added). To verify this, the layout and flags of the old table/indices are compared for equality with the new. The PACK_KEYS option is a no-op in InnoDB, but the flag exists, and is used in the table compare. We need to check this (table) option flag before deciding whether an index should be packed or not. If the table has explicitly set PACK_KEYS to 0, the created indices should not be marked as packed/packable.
This commit is contained in:
parent
be794bc5eb
commit
f43d6c2b73
@ -2390,4 +2390,14 @@ a
|
|||||||
2
|
2
|
||||||
UPDATE t1,t2 SET t1.a = t1.a + 100 WHERE t1.a = 1;
|
UPDATE t1,t2 SET t1.a = t1.a + 100 WHERE t1.a = 1;
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
#
|
||||||
|
# Bug#54606 innodb fast alter table + pack_keys=0
|
||||||
|
# prevents adding new indexes
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (a INT, b CHAR(9), c INT, key(b))
|
||||||
|
ENGINE=InnoDB
|
||||||
|
PACK_KEYS=0;
|
||||||
|
CREATE INDEX a ON t1 (a);
|
||||||
|
CREATE INDEX c on t1 (c);
|
||||||
|
DROP TABLE t1;
|
||||||
End of 5.1 tests
|
End of 5.1 tests
|
||||||
|
@ -632,4 +632,18 @@ UPDATE t1,t2 SET t1.a = t1.a + 100 WHERE t1.a = 1;
|
|||||||
|
|
||||||
DROP TABLE t1,t2;
|
DROP TABLE t1,t2;
|
||||||
|
|
||||||
|
--echo #
|
||||||
|
--echo # Bug#54606 innodb fast alter table + pack_keys=0
|
||||||
|
--echo # prevents adding new indexes
|
||||||
|
--echo #
|
||||||
|
|
||||||
|
CREATE TABLE t1 (a INT, b CHAR(9), c INT, key(b))
|
||||||
|
ENGINE=InnoDB
|
||||||
|
PACK_KEYS=0;
|
||||||
|
CREATE INDEX a ON t1 (a);
|
||||||
|
CREATE INDEX c on t1 (c);
|
||||||
|
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
|
||||||
--echo End of 5.1 tests
|
--echo End of 5.1 tests
|
||||||
|
@ -3325,6 +3325,7 @@ mysql_prepare_create_table(THD *thd, HA_CREATE_INFO *create_info,
|
|||||||
key_part_info->length=(uint16) length;
|
key_part_info->length=(uint16) length;
|
||||||
/* Use packed keys for long strings on the first column */
|
/* Use packed keys for long strings on the first column */
|
||||||
if (!((*db_options) & HA_OPTION_NO_PACK_KEYS) &&
|
if (!((*db_options) & HA_OPTION_NO_PACK_KEYS) &&
|
||||||
|
!((create_info->table_options & HA_OPTION_NO_PACK_KEYS)) &&
|
||||||
(length >= KEY_DEFAULT_PACK_LENGTH &&
|
(length >= KEY_DEFAULT_PACK_LENGTH &&
|
||||||
(sql_field->sql_type == MYSQL_TYPE_STRING ||
|
(sql_field->sql_type == MYSQL_TYPE_STRING ||
|
||||||
sql_field->sql_type == MYSQL_TYPE_VARCHAR ||
|
sql_field->sql_type == MYSQL_TYPE_VARCHAR ||
|
||||||
|
Loading…
x
Reference in New Issue
Block a user