mirror of
https://github.com/MariaDB/server.git
synced 2025-11-25 17:25:02 +03:00
When importing a tablespace, we must initialize dummy DEFAULT NULL values for any instantly added columns in order to avoid a debug assertion failure when PageConverter::update_records() invokes rec_get_offsets(). Finally, when the operation completes, we must evict and reload the table definition, so that the correct default values for instantly added columns will be loaded. ha_innobase::discard_or_import_tablespace(): On successful IMPORT TABLESPACE, evict and reload the table definition, so that btr_cur_instant_init() will load the correct metadata. PageConverter::update_index_page(): Fill in dummy DEFAULT NULL values for instantly added columns. These will be replaced upon the completion of the operation by evicting and reloading the metadata. row_discard_tablespace(): Invoke dict_table_t::remove_instant(). After DISCARD TABLESPACE, the table is no longer in "instant ALTER" format, because there is no data file attached.
47 lines
1.0 KiB
Plaintext
47 lines
1.0 KiB
Plaintext
set default_storage_engine=innodb;
|
|
#
|
|
# MDEV-18295 IMPORT TABLESPACE fails with instant-altered tables
|
|
#
|
|
create table t2 (x int, z int default 41);
|
|
alter table t2 discard tablespace;
|
|
create table t1 (x int);
|
|
insert into t1 values (1);
|
|
alter table t1 add z int default 42, algorithm instant;
|
|
select * from t1;
|
|
x z
|
|
1 42
|
|
flush tables t1 for export;
|
|
unlock tables;
|
|
# The metadata has to be updated to instant ADD COLUMN.
|
|
alter table t2 import tablespace;
|
|
select * from t2;
|
|
x z
|
|
1 42
|
|
insert into t2 set x=2;
|
|
select * from t2;
|
|
x z
|
|
1 42
|
|
2 41
|
|
alter table t1 discard tablespace;
|
|
flush tables t2 for export;
|
|
unlock tables;
|
|
# Both the metadata and the data file used instant ADD COLUMN.
|
|
alter table t1 import tablespace;
|
|
select * from t1;
|
|
x z
|
|
1 42
|
|
2 41
|
|
drop table t2;
|
|
create table t2 select * from t1;
|
|
alter table t1 discard tablespace;
|
|
flush tables t2 for export;
|
|
unlock tables;
|
|
# The instant ADD COLUMN has to be removed from the metadata.
|
|
alter table t1 import tablespace;
|
|
select * from t1;
|
|
x z
|
|
1 42
|
|
2 41
|
|
drop table t2;
|
|
drop table t1;
|