MDEV-34222 Alter operation on redundant table aborts the server

- InnoDB page compression works only on COMPACT or DYNAMIC row
format tables. So InnoDB should throw error when alter table
tries to enable PAGE_COMPRESSED for redundant table.
parent 0ffa340a
...@@ -210,3 +210,14 @@ ALTER TABLE t1 PAGE_COMPRESSED = 1; ...@@ -210,3 +210,14 @@ ALTER TABLE t1 PAGE_COMPRESSED = 1;
INSERT INTO t1 VALUES(2); INSERT INTO t1 VALUES(2);
# restart # restart
DROP TABLE t1; DROP TABLE t1;
#
# MDEV-34222 Alter operation on redundant table aborts the server
#
SET @df_row = @@global.INNODB_DEFAULT_ROW_FORMAT;
SET GLOBAL INNODB_DEFAULT_ROW_FORMAT=REDUNDANT;
CREATE TABLE t1 (c CHAR(1)) ENGINE=InnoDB;
SET GLOBAL INNODB_DEFAULT_ROW_FORMAT=compact;
ALTER TABLE t1 PAGE_COMPRESSED=1;
ERROR HY000: Table storage engine 'InnoDB' does not support the create option 'PAGE_COMPRESSED=1 ROW_FORMAT=REDUNDANT'
DROP TABLE t1;
SET @@global.INNODB_DEFAULT_ROW_FORMAT = @df_row;
...@@ -257,3 +257,15 @@ INSERT INTO t1 VALUES(2); ...@@ -257,3 +257,15 @@ INSERT INTO t1 VALUES(2);
let $shutdown_timeout = 0; let $shutdown_timeout = 0;
--source include/restart_mysqld.inc --source include/restart_mysqld.inc
DROP TABLE t1; DROP TABLE t1;
--echo #
--echo # MDEV-34222 Alter operation on redundant table aborts the server
--echo #
SET @df_row = @@global.INNODB_DEFAULT_ROW_FORMAT;
SET GLOBAL INNODB_DEFAULT_ROW_FORMAT=REDUNDANT;
CREATE TABLE t1 (c CHAR(1)) ENGINE=InnoDB;
SET GLOBAL INNODB_DEFAULT_ROW_FORMAT=compact;
--error ER_ILLEGAL_HA_CREATE_OPTION
ALTER TABLE t1 PAGE_COMPRESSED=1;
DROP TABLE t1;
SET @@global.INNODB_DEFAULT_ROW_FORMAT = @df_row;
...@@ -8339,6 +8339,15 @@ ha_innobase::prepare_inplace_alter_table( ...@@ -8339,6 +8339,15 @@ ha_innobase::prepare_inplace_alter_table(
DBUG_RETURN(true); DBUG_RETURN(true);
} }
if ((ha_alter_info->handler_flags & ALTER_OPTIONS)
&& ctx->page_compression_level
&& !ctx->old_table->not_redundant()) {
my_error(ER_ILLEGAL_HA_CREATE_OPTION, MYF(0),
table_type(),
"PAGE_COMPRESSED=1 ROW_FORMAT=REDUNDANT");
DBUG_RETURN(true);
}
if (!(ha_alter_info->handler_flags & INNOBASE_ALTER_DATA) if (!(ha_alter_info->handler_flags & INNOBASE_ALTER_DATA)
&& alter_templ_needs_rebuild(altered_table, ha_alter_info, && alter_templ_needs_rebuild(altered_table, ha_alter_info,
ctx->new_table) ctx->new_table)
......
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