mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
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.
This commit is contained in:
parent
c29312421e
commit
77cd754229
3 changed files with 21 additions and 0 deletions
10
mysql-test/r/alter_table_errors.result
Normal file
10
mysql-test/r/alter_table_errors.result
Normal file
|
@ -0,0 +1,10 @@
|
|||
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;
|
10
mysql-test/t/alter_table_errors.test
Normal file
10
mysql-test/t/alter_table_errors.test
Normal file
|
@ -0,0 +1,10 @@
|
|||
--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,
|
|||
if (field->default_value)
|
||||
field->default_value->expr->walk(&Item::rename_fields_processor, 1,
|
||||
&column_rename_param);
|
||||
table->m_needs_reopen= 1; // because new column name is on thd->mem_root
|
||||
}
|
||||
|
||||
/* Check if field is changed */
|
||||
|
|
Loading…
Reference in a new issue