Commit 2027841d authored by Sergei Golubchik's avatar Sergei Golubchik

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

Part two, temporary tables.

Make temporary tables respect TABLE::m_needs_reopen.

See also 77cd7542
parent d13302ff
......@@ -8,3 +8,22 @@ t CREATE TABLE `t` (
`v` int(11) GENERATED ALWAYS AS (`a`) VIRTUAL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
drop table t;
create temporary table t1 (a int, v int as (a));
alter table t1 change column a b int, algorithm=inplace;
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY
show create table t1;
Table Create Table
t1 CREATE TEMPORARY TABLE `t1` (
`a` int(11) DEFAULT NULL,
`v` int(11) GENERATED ALWAYS AS (`a`) VIRTUAL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
create temporary table t2 (a int, v int as (a));
lock table t2 write;
alter table t2 change column a b int, algorithm=inplace;
ERROR 0A000: ALGORITHM=INPLACE is not supported for this operation. Try ALGORITHM=COPY
show create table t2;
Table Create Table
t2 CREATE TEMPORARY TABLE `t2` (
`a` int(11) DEFAULT NULL,
`v` int(11) GENERATED ALWAYS AS (`a`) VIRTUAL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
......@@ -8,3 +8,14 @@ create table t (a int, v int as (a)) engine=innodb;
alter table t change column a b tinyint, algorithm=inplace;
show create table t;
drop table t;
create temporary table t1 (a int, v int as (a));
--error ER_ALTER_OPERATION_NOT_SUPPORTED
alter table t1 change column a b int, algorithm=inplace;
show create table t1;
create temporary table t2 (a int, v int as (a));
lock table t2 write;
--error ER_ALTER_OPERATION_NOT_SUPPORTED
alter table t2 change column a b int, algorithm=inplace;
show create table t2;
......@@ -1042,6 +1042,13 @@ TABLE *THD::find_temporary_table(const char *key, uint key_length,
case TMP_TABLE_ANY: found= true; break;
}
}
if (table && unlikely(table->m_needs_reopen))
{
share->all_tmp_tables.remove(table);
free_temporary_table(table);
it.rewind();
continue;
}
result= table;
break;
}
......
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