mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
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 77cd754229
This commit is contained in:
@ -8,3 +8,22 @@ t CREATE TABLE `t` (
|
|||||||
`v` int(11) GENERATED ALWAYS AS (`a`) VIRTUAL
|
`v` int(11) GENERATED ALWAYS AS (`a`) VIRTUAL
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||||
drop table t;
|
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;
|
alter table t change column a b tinyint, algorithm=inplace;
|
||||||
show create table t;
|
show create table t;
|
||||||
drop 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;
|
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;
|
result= table;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user