Skip to content

Commit

Permalink
MDEV-16110 ALTER with ALGORITHM=INPLACE breaks temporary table with v…
Browse files Browse the repository at this point in the history
…irtual columns

Part two, temporary tables.

Make temporary tables respect TABLE::m_needs_reopen.

See also 77cd754
  • Loading branch information
vuvova committed Dec 20, 2018
1 parent d13302f commit 2027841
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
19 changes: 19 additions & 0 deletions mysql-test/r/alter_table_errors.result
Original file line number Diff line number Diff line change
Expand Up @@ -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
11 changes: 11 additions & 0 deletions mysql-test/t/alter_table_errors.test
Original file line number Diff line number Diff line change
Expand Up @@ -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;
7 changes: 7 additions & 0 deletions sql/temporary_tables.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down

0 comments on commit 2027841

Please sign in to comment.