diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2020-03-16 17:51:09 +0200 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2020-03-16 18:02:14 +0200 |
commit | 163dc5f919d3a8bf12288a8653d4c90e75809acc (patch) | |
tree | fb0f1dabc326b5f16dde5e2d32c32d2df8ff0bbb | |
parent | 5b4b2635769c6a05ac971762207802915c0c43c3 (diff) | |
download | mariadb-git-bb-10.4-MDEV-20590.tar.gz |
MDEV-20590: Extend innodb_file_format for 10.4bb-10.4-MDEV-20590
* mapped (default): Like 'append', but allow the metadata record to
store a column map, to support instant add/drop/reorder (MDEV-15562)
* strict_mapped: Like 'mapped', but on ALTER TABLE, if a table
(or partition) is not in the 10.4-compatible format in some future
version of the server, force the table to be rebuilt.
-rw-r--r-- | mysql-test/suite/innodb/r/instant_alter,4k.rdiff | 4 | ||||
-rw-r--r-- | mysql-test/suite/innodb/r/instant_alter.result | 88 | ||||
-rw-r--r-- | mysql-test/suite/innodb/t/instant_alter.test | 30 | ||||
-rw-r--r-- | mysql-test/suite/sys_vars/r/innodb_file_format_basic.result | 14 | ||||
-rw-r--r-- | mysql-test/suite/sys_vars/r/sysvars_innodb.result | 4 | ||||
-rw-r--r-- | mysql-test/suite/sys_vars/t/innodb_file_format_basic.test | 4 | ||||
-rw-r--r-- | storage/innobase/handler/ha_innodb.cc | 8 | ||||
-rw-r--r-- | storage/innobase/handler/handler0alter.cc | 22 |
8 files changed, 155 insertions, 19 deletions
diff --git a/mysql-test/suite/innodb/r/instant_alter,4k.rdiff b/mysql-test/suite/innodb/r/instant_alter,4k.rdiff index 61e4ee8449c..dd7d6f99b3e 100644 --- a/mysql-test/suite/innodb/r/instant_alter,4k.rdiff +++ b/mysql-test/suite/innodb/r/instant_alter,4k.rdiff @@ -318,8 +318,8 @@ FROM information_schema.global_status WHERE variable_name = 'innodb_instant_alter_column'; instants --205 -+207 +-208 ++210 SET GLOBAL innodb_purge_rseg_truncate_frequency= @saved_frequency; SET GLOBAL innodb_file_format = @saved_format; # diff --git a/mysql-test/suite/innodb/r/instant_alter.result b/mysql-test/suite/innodb/r/instant_alter.result index fd46466c49e..6d8ff3e6f10 100644 --- a/mysql-test/suite/innodb/r/instant_alter.result +++ b/mysql-test/suite/innodb/r/instant_alter.result @@ -2,7 +2,7 @@ # MDEV-11369: Instant ADD COLUMN for InnoDB # SET @saved_format = @@GLOBAL.innodb_file_format; -SET GLOBAL innodb_file_format = append; +SET GLOBAL innodb_file_format = DEFAULT; call mtr.add_suppression("Cannot add field `.*` in table `test`.`.*` because after adding it, the row size is"); CREATE TABLE t(a INT UNIQUE)ENGINE=InnoDB ROW_FORMAT=COMPACT; ALTER TABLE t ADD e INT, ROW_FORMAT=COMPRESSED; @@ -947,7 +947,11 @@ ALTER TABLE t1 ADD b TEXT, ALGORITHM=INSTANT; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_barracuda. Try ALGORITHM=INPLACE SET GLOBAL innodb_file_format = strict_append; ALTER TABLE t1 ADD b TEXT, ALGORITHM=INSTANT; +ALTER TABLE t1 DROP b, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_append. Try ALGORITHM=INPLACE SET GLOBAL innodb_file_format = append; +ALTER TABLE t1 DROP b, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=append. Try ALGORITHM=INPLACE ALTER TABLE t1 ADD c TEXT, ALGORITHM=INSTANT; SET GLOBAL innodb_file_format = barracuda; ALTER TABLE t1 MODIFY a INT DEFAULT 1, ALGORITHM=INSTANT; @@ -958,8 +962,30 @@ ALTER TABLE t1 MODIFY a INT DEFAULT 0; affected rows: 0 info: Records: 0 Duplicates: 0 Warnings: 0 ALTER TABLE t1 MODIFY a INT DEFAULT NULL, ALGORITHM=INSTANT; +ALTER TABLE t1 DROP b, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_barracuda. Try ALGORITHM=INPLACE +ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_barracuda. Try ALGORITHM=INPLACE +SET GLOBAL innodb_file_format = append; +ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=append. Try ALGORITHM=INPLACE +ALTER TABLE t1 ADD d TEXT AFTER a, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=append. Try ALGORITHM=INPLACE +SET GLOBAL innodb_file_format = mapped; +ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; +SET GLOBAL innodb_file_format = append; +ALTER TABLE t1 MODIFY a INT DEFAULT 1, ALGORITHM=INSTANT; +SET GLOBAL innodb_file_format = strict_append; +ALTER TABLE t1 ADD d TEXT AFTER a, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_append. Try ALGORITHM=INPLACE +ALTER TABLE t1 MODIFY a INT DEFAULT 0, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_append. Try ALGORITHM=INPLACE +ALTER TABLE t1 MODIFY a INT DEFAULT 0; +affected rows: 0 +info: Records: 0 Duplicates: 0 Warnings: 0 +ALTER TABLE t1 MODIFY a INT DEFAULT NULL, ALGORITHM=INSTANT; DROP TABLE t1; -SET GLOBAL innodb_file_format = @saved_format; +SET GLOBAL innodb_file_format = DEFAULT; CREATE TABLE t1 (id INT PRIMARY KEY, c2 INT UNIQUE, c3 POINT NOT NULL DEFAULT ST_GeomFromText('POINT(3 4)'), @@ -1850,7 +1876,11 @@ ALTER TABLE t1 ADD b TEXT, ALGORITHM=INSTANT; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_barracuda. Try ALGORITHM=INPLACE SET GLOBAL innodb_file_format = strict_append; ALTER TABLE t1 ADD b TEXT, ALGORITHM=INSTANT; +ALTER TABLE t1 DROP b, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_append. Try ALGORITHM=INPLACE SET GLOBAL innodb_file_format = append; +ALTER TABLE t1 DROP b, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=append. Try ALGORITHM=INPLACE ALTER TABLE t1 ADD c TEXT, ALGORITHM=INSTANT; SET GLOBAL innodb_file_format = barracuda; ALTER TABLE t1 MODIFY a INT DEFAULT 1, ALGORITHM=INSTANT; @@ -1861,8 +1891,30 @@ ALTER TABLE t1 MODIFY a INT DEFAULT 0; affected rows: 0 info: Records: 0 Duplicates: 0 Warnings: 0 ALTER TABLE t1 MODIFY a INT DEFAULT NULL, ALGORITHM=INSTANT; +ALTER TABLE t1 DROP b, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_barracuda. Try ALGORITHM=INPLACE +ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_barracuda. Try ALGORITHM=INPLACE +SET GLOBAL innodb_file_format = append; +ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=append. Try ALGORITHM=INPLACE +ALTER TABLE t1 ADD d TEXT AFTER a, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=append. Try ALGORITHM=INPLACE +SET GLOBAL innodb_file_format = mapped; +ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; +SET GLOBAL innodb_file_format = append; +ALTER TABLE t1 MODIFY a INT DEFAULT 1, ALGORITHM=INSTANT; +SET GLOBAL innodb_file_format = strict_append; +ALTER TABLE t1 ADD d TEXT AFTER a, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_append. Try ALGORITHM=INPLACE +ALTER TABLE t1 MODIFY a INT DEFAULT 0, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_append. Try ALGORITHM=INPLACE +ALTER TABLE t1 MODIFY a INT DEFAULT 0; +affected rows: 0 +info: Records: 0 Duplicates: 0 Warnings: 0 +ALTER TABLE t1 MODIFY a INT DEFAULT NULL, ALGORITHM=INSTANT; DROP TABLE t1; -SET GLOBAL innodb_file_format = @saved_format; +SET GLOBAL innodb_file_format = DEFAULT; CREATE TABLE t1 (id INT PRIMARY KEY, c2 INT UNIQUE, c3 POINT NOT NULL DEFAULT ST_GeomFromText('POINT(3 4)'), @@ -2753,7 +2805,11 @@ ALTER TABLE t1 ADD b TEXT, ALGORITHM=INSTANT; ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_barracuda. Try ALGORITHM=INPLACE SET GLOBAL innodb_file_format = strict_append; ALTER TABLE t1 ADD b TEXT, ALGORITHM=INSTANT; +ALTER TABLE t1 DROP b, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_append. Try ALGORITHM=INPLACE SET GLOBAL innodb_file_format = append; +ALTER TABLE t1 DROP b, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=append. Try ALGORITHM=INPLACE ALTER TABLE t1 ADD c TEXT, ALGORITHM=INSTANT; SET GLOBAL innodb_file_format = barracuda; ALTER TABLE t1 MODIFY a INT DEFAULT 1, ALGORITHM=INSTANT; @@ -2764,14 +2820,36 @@ ALTER TABLE t1 MODIFY a INT DEFAULT 0; affected rows: 0 info: Records: 0 Duplicates: 0 Warnings: 0 ALTER TABLE t1 MODIFY a INT DEFAULT NULL, ALGORITHM=INSTANT; +ALTER TABLE t1 DROP b, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_barracuda. Try ALGORITHM=INPLACE +ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_barracuda. Try ALGORITHM=INPLACE +SET GLOBAL innodb_file_format = append; +ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=append. Try ALGORITHM=INPLACE +ALTER TABLE t1 ADD d TEXT AFTER a, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=append. Try ALGORITHM=INPLACE +SET GLOBAL innodb_file_format = mapped; +ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; +SET GLOBAL innodb_file_format = append; +ALTER TABLE t1 MODIFY a INT DEFAULT 1, ALGORITHM=INSTANT; +SET GLOBAL innodb_file_format = strict_append; +ALTER TABLE t1 ADD d TEXT AFTER a, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_append. Try ALGORITHM=INPLACE +ALTER TABLE t1 MODIFY a INT DEFAULT 0, ALGORITHM=INSTANT; +ERROR 0A000: ALGORITHM=INSTANT is not supported. Reason: innodb_file_format=strict_append. Try ALGORITHM=INPLACE +ALTER TABLE t1 MODIFY a INT DEFAULT 0; +affected rows: 0 +info: Records: 0 Duplicates: 0 Warnings: 0 +ALTER TABLE t1 MODIFY a INT DEFAULT NULL, ALGORITHM=INSTANT; DROP TABLE t1; -SET GLOBAL innodb_file_format = @saved_format; +SET GLOBAL innodb_file_format = DEFAULT; disconnect analyze; SELECT variable_value-@old_instant instants FROM information_schema.global_status WHERE variable_name = 'innodb_instant_alter_column'; instants -205 +208 SET GLOBAL innodb_purge_rseg_truncate_frequency= @saved_frequency; SET GLOBAL innodb_file_format = @saved_format; # diff --git a/mysql-test/suite/innodb/t/instant_alter.test b/mysql-test/suite/innodb/t/instant_alter.test index 1b097ce5ddf..acce43a4a50 100644 --- a/mysql-test/suite/innodb/t/instant_alter.test +++ b/mysql-test/suite/innodb/t/instant_alter.test @@ -5,7 +5,7 @@ --echo # SET @saved_format = @@GLOBAL.innodb_file_format; -SET GLOBAL innodb_file_format = append; +SET GLOBAL innodb_file_format = DEFAULT; call mtr.add_suppression("Cannot add field `.*` in table `test`.`.*` because after adding it, the row size is"); @@ -844,7 +844,11 @@ SET GLOBAL innodb_file_format = strict_barracuda; ALTER TABLE t1 ADD b TEXT, ALGORITHM=INSTANT; SET GLOBAL innodb_file_format = strict_append; ALTER TABLE t1 ADD b TEXT, ALGORITHM=INSTANT; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 DROP b, ALGORITHM=INSTANT; SET GLOBAL innodb_file_format = append; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 DROP b, ALGORITHM=INSTANT; ALTER TABLE t1 ADD c TEXT, ALGORITHM=INSTANT; SET GLOBAL innodb_file_format = barracuda; ALTER TABLE t1 MODIFY a INT DEFAULT 1, ALGORITHM=INSTANT; @@ -855,8 +859,30 @@ ALTER TABLE t1 MODIFY a INT DEFAULT 0, ALGORITHM=INSTANT; ALTER TABLE t1 MODIFY a INT DEFAULT 0; --disable_info ALTER TABLE t1 MODIFY a INT DEFAULT NULL, ALGORITHM=INSTANT; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 DROP b, ALGORITHM=INSTANT; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; +SET GLOBAL innodb_file_format = append; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 ADD d TEXT AFTER a, ALGORITHM=INSTANT; +SET GLOBAL innodb_file_format = mapped; +ALTER TABLE t1 MODIFY b TEXT FIRST, ALGORITHM=INSTANT; +SET GLOBAL innodb_file_format = append; +ALTER TABLE t1 MODIFY a INT DEFAULT 1, ALGORITHM=INSTANT; +SET GLOBAL innodb_file_format = strict_append; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 ADD d TEXT AFTER a, ALGORITHM=INSTANT; +--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON +ALTER TABLE t1 MODIFY a INT DEFAULT 0, ALGORITHM=INSTANT; +--enable_info +ALTER TABLE t1 MODIFY a INT DEFAULT 0; +--disable_info +ALTER TABLE t1 MODIFY a INT DEFAULT NULL, ALGORITHM=INSTANT; DROP TABLE t1; -SET GLOBAL innodb_file_format = @saved_format; +SET GLOBAL innodb_file_format = DEFAULT; dec $format; let $redundant_4k= 0; diff --git a/mysql-test/suite/sys_vars/r/innodb_file_format_basic.result b/mysql-test/suite/sys_vars/r/innodb_file_format_basic.result index 2eec95c4a19..08b92f8213f 100644 --- a/mysql-test/suite/sys_vars/r/innodb_file_format_basic.result +++ b/mysql-test/suite/sys_vars/r/innodb_file_format_basic.result @@ -23,11 +23,19 @@ ERROR 42000: Variable 'innodb_file_format' can't be set to the value of '-1' select @@global.innodb_file_format; @@global.innodb_file_format barracuda -set global innodb_file_format=4; -ERROR 42000: Variable 'innodb_file_format' can't be set to the value of '4' +set global innodb_file_format=6; +ERROR 42000: Variable 'innodb_file_format' can't be set to the value of '6' select @@global.innodb_file_format; @@global.innodb_file_format barracuda +set global innodb_file_format=5; +select @@global.innodb_file_format; +@@global.innodb_file_format +strict_mapped +set global innodb_file_format=4; +select @@global.innodb_file_format; +@@global.innodb_file_format +mapped set global innodb_file_format=3; select @@global.innodb_file_format; @@global.innodb_file_format @@ -47,5 +55,5 @@ barracuda set global innodb_file_format=default; select @@global.innodb_file_format; @@global.innodb_file_format -append +mapped SET GLOBAL innodb_file_format = @start_global_value; diff --git a/mysql-test/suite/sys_vars/r/sysvars_innodb.result b/mysql-test/suite/sys_vars/r/sysvars_innodb.result index 1c33d2a64e5..bec29ce3575 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_innodb.result +++ b/mysql-test/suite/sys_vars/r/sysvars_innodb.result @@ -815,14 +815,14 @@ READ_ONLY YES COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME INNODB_FILE_FORMAT SESSION_VALUE NULL -DEFAULT_VALUE append +DEFAULT_VALUE mapped VARIABLE_SCOPE GLOBAL VARIABLE_TYPE ENUM VARIABLE_COMMENT File format constraint for native ALTER TABLE NUMERIC_MIN_VALUE NULL NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL -ENUM_VALUE_LIST barracuda,strict_barracuda,append,strict_append +ENUM_VALUE_LIST barracuda,strict_barracuda,append,strict_append,mapped,strict_mapped READ_ONLY NO COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME INNODB_FILE_PER_TABLE diff --git a/mysql-test/suite/sys_vars/t/innodb_file_format_basic.test b/mysql-test/suite/sys_vars/t/innodb_file_format_basic.test index 32a06d77f83..277a10a620b 100644 --- a/mysql-test/suite/sys_vars/t/innodb_file_format_basic.test +++ b/mysql-test/suite/sys_vars/t/innodb_file_format_basic.test @@ -18,6 +18,10 @@ set global innodb_file_format=1.1; set global innodb_file_format=-1; select @@global.innodb_file_format; --error ER_WRONG_VALUE_FOR_VAR +set global innodb_file_format=6; +select @@global.innodb_file_format; +set global innodb_file_format=5; +select @@global.innodb_file_format; set global innodb_file_format=4; select @@global.innodb_file_format; set global innodb_file_format=3; diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc index a893b0b2b83..b972fdde51d 100644 --- a/storage/innobase/handler/ha_innodb.cc +++ b/storage/innobase/handler/ha_innodb.cc @@ -461,8 +461,10 @@ static TYPELIB innodb_change_buffering_typelib = { const char* innodb_file_format_names[] = { "barracuda", /* compatible with MariaDB 5.5 to 10.2 */ "strict_barracuda", /* force rebuild on ALTER TABLE if needed */ - "append",/* allow instant ADD COLUMN */ - "strict_append", /* ditto; but maybe require rebuild in 10.4 */ + "append",/* allow instant ADD COLUMN at the end */ + "strict_append", /* ditto; but only in 10.3 compatible format */ + "mapped",/* allow instant DROP COLUMN or reordering columns */ + "strict_mapped",/* ditto; but only in 10.4 compatible format */ NullS }; @@ -19028,7 +19030,7 @@ static MYSQL_SYSVAR_ENUM(flush_method, innodb_flush_method, static MYSQL_SYSVAR_ENUM(file_format, innodb_file_format, PLUGIN_VAR_RQCMDARG, - "File format constraint for native ALTER TABLE", NULL, NULL, 2/*add*/, + "File format constraint for native ALTER TABLE", NULL, NULL, 4/*mapped*/, &innodb_file_format_typelib); static MYSQL_SYSVAR_STR(large_prefix, innodb_large_prefix, diff --git a/storage/innobase/handler/handler0alter.cc b/storage/innobase/handler/handler0alter.cc index 670e6704de9..daf87ef1f9c 100644 --- a/storage/innobase/handler/handler0alter.cc +++ b/storage/innobase/handler/handler0alter.cc @@ -2003,7 +2003,9 @@ ha_innobase::check_if_supported_inplace_alter( switch (innodb_file_format) { case 0: /* barracuda */ if (!(ha_alter_info->handler_flags - & ALTER_ADD_STORED_BASE_COLUMN)) { + & (ALTER_ADD_STORED_BASE_COLUMN + | ALTER_STORED_COLUMN_ORDER + | ALTER_DROP_STORED_COLUMN))) { break; } reason_rebuild = "innodb_file_format=barracuda"; @@ -2017,12 +2019,28 @@ ha_innobase::check_if_supported_inplace_alter( break; case 1: /* strict_barracuda */ if ((ha_alter_info->handler_flags - & ALTER_ADD_STORED_BASE_COLUMN) + & (ALTER_ADD_STORED_BASE_COLUMN + | ALTER_STORED_COLUMN_ORDER + | ALTER_DROP_STORED_COLUMN)) || m_prebuilt->table->is_instant()) { reason_rebuild = "innodb_file_format=strict_barracuda"; goto innodb_file_format_rebuild_reason; } break; + case 2: /* append */ + if (ha_alter_info->handler_flags + & (ALTER_STORED_COLUMN_ORDER | ALTER_DROP_STORED_COLUMN)) { + reason_rebuild = "innodb_file_format=append"; + goto innodb_file_format_rebuild_reason; + } + break; + case 3: /* strict_append */ + if ((ha_alter_info->handler_flags + & (ALTER_STORED_COLUMN_ORDER | ALTER_DROP_STORED_COLUMN)) + || m_prebuilt->table->instant) { + reason_rebuild = "innodb_file_format=strict_append"; + goto innodb_file_format_rebuild_reason; + } } switch (ha_alter_info->handler_flags & ~INNOBASE_INPLACE_IGNORE) { |