Commit 77cd7542 authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-16110 ALTER with ALGORITHM=INPLACE breaks temporary table with virtual columns

Part one, non-temporary tables.

Rrenaming a column can make destructive changes
to the TABLE. This TABLE cannot be used anymore
and needs to be reopened even if ALTER TABLE
was aborted with an error.
parent c2931242
create table t (a int, v int as (a)) engine=innodb;
alter table t change column a b tinyint, algorithm=inplace;
ERROR 0A000: ALGORITHM=INPLACE is not supported. Reason: Cannot change column type INPLACE. Try ALGORITHM=COPY
show create table t;
Table Create Table
t CREATE TABLE `t` (
`a` int(11) DEFAULT NULL,
`v` int(11) GENERATED ALWAYS AS (`a`) VIRTUAL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
drop table t;
--source include/have_innodb.inc
#
# MDEV-16110 ALTER with ALGORITHM=INPLACE breaks temporary table with virtual columns
#
create table t (a int, v int as (a)) engine=innodb;
--error ER_ALTER_OPERATION_NOT_SUPPORTED_REASON
alter table t change column a b tinyint, algorithm=inplace;
show create table t;
drop table t;
...@@ -7677,6 +7677,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table, ...@@ -7677,6 +7677,7 @@ mysql_prepare_alter_table(THD *thd, TABLE *table,
if (field->default_value) if (field->default_value)
field->default_value->expr->walk(&Item::rename_fields_processor, 1, field->default_value->expr->walk(&Item::rename_fields_processor, 1,
&column_rename_param); &column_rename_param);
table->m_needs_reopen= 1; // because new column name is on thd->mem_root
} }
/* Check if field is changed */ /* Check if field is changed */
......
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