mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
d7e0c3cc73
Implement discovery of table non-existence, and related changes: 1. Split GTS_FORCE_DISCOVERY (that was meaning two different things in two different functions) into GTS_FORCE_DISCOVERY and GTS_USE_DISCOVERY. 2. Move GTS_FORCE_DISCOVERY implementation into open_table_def(). 3. In recover_from_failed_open() clear old errors *before* discovery, not after successful discovery. The final error should come from the discovery. 4. On forced discovery delete table .frm first. Discovery will write a new one, if desired. 5. If the frm file exists, but not the table in the engine, force rediscovery if the engine supports it.
120 lines
2.7 KiB
Text
120 lines
2.7 KiB
Text
-- source include/have_archive.inc
|
|
let $mysqld_datadir= `select @@datadir`;
|
|
|
|
create table t1 (a int) engine=archive;
|
|
show create table t1;
|
|
insert t1 values (1);
|
|
show tables;
|
|
|
|
--echo #
|
|
--echo # simple discover on use
|
|
--echo #
|
|
remove_file $mysqld_datadir/test/t1.frm;
|
|
flush tables;
|
|
insert t1 values (2);
|
|
select * from t1;
|
|
--list_files $mysqld_datadir/test
|
|
|
|
--echo #
|
|
--echo # show tables
|
|
--echo #
|
|
create table t2 (a int) engine=archive;
|
|
select * from t2;
|
|
remove_file $mysqld_datadir/test/t1.frm;
|
|
flush tables;
|
|
show tables;
|
|
--list_files $mysqld_datadir/test
|
|
|
|
--echo #
|
|
--echo # show full tables
|
|
--echo #
|
|
flush tables;
|
|
show full tables;
|
|
--list_files $mysqld_datadir/test
|
|
|
|
--echo #
|
|
--echo # discover on truncate
|
|
--echo #
|
|
flush tables;
|
|
--error ER_ILLEGAL_HA
|
|
truncate table t1;
|
|
--list_files $mysqld_datadir/test
|
|
|
|
--echo #
|
|
--echo # discover on rename
|
|
--echo #
|
|
remove_file $mysqld_datadir/test/t2.frm;
|
|
flush tables;
|
|
rename table t2 to t0;
|
|
--list_files $mysqld_datadir/test
|
|
|
|
--echo #
|
|
--echo # discover on HA_ERR_TABLE_DEF_CHANGED
|
|
--echo #
|
|
copy_file $mysqld_datadir/test/t1.ARZ $MYSQL_TMP_DIR/t1.ARZ;
|
|
alter table t1 modify a int default 5;
|
|
remove_file $mysqld_datadir/test/t1.ARZ;
|
|
copy_file $MYSQL_TMP_DIR/t1.ARZ $mysqld_datadir/test/t1.ARZ;
|
|
remove_file $MYSQL_TMP_DIR/t1.ARZ;
|
|
show create table t1;
|
|
|
|
--echo #
|
|
--echo # discover on drop
|
|
--echo #
|
|
remove_file $mysqld_datadir/test/t1.frm;
|
|
flush tables;
|
|
drop table t1;
|
|
--list_files $mysqld_datadir/test
|
|
|
|
--echo #
|
|
--echo # discover of table non-existance on drop
|
|
--echo #
|
|
select * from t0;
|
|
remove_file $mysqld_datadir/test/t0.ARZ;
|
|
flush tables;
|
|
drop table t0;
|
|
--list_files $mysqld_datadir/test
|
|
show status like 'Handler_discover';
|
|
|
|
--echo #
|
|
--echo # Bug#45377: ARCHIVE tables aren't discoverable after OPTIMIZE
|
|
--echo #
|
|
|
|
create table t1 (a int) engine=archive;
|
|
show create table t1;
|
|
insert into t1 values (1);
|
|
optimize table t1;
|
|
remove_file $mysqld_datadir/test/t1.frm;
|
|
flush tables;
|
|
insert into t1 values (2);
|
|
select * from t1 order by a;
|
|
show create table t1;
|
|
drop table t1;
|
|
|
|
--echo #
|
|
--echo # BUG#58205 - Valgrind failure in fn_format when called from
|
|
--echo # archive_discover
|
|
--echo #
|
|
create table `a/../`(a int) engine=archive;
|
|
select * from `a/../`; flush tables;
|
|
remove_file $mysqld_datadir/test/a@002f@002e@002e@002f.frm;
|
|
drop table `a/../`;
|
|
|
|
#
|
|
# MDEV-4441 DROP DATABASE with a newly created ARCHIVE table does not work
|
|
#
|
|
create database test1;
|
|
create table test1.t1 (i int) engine=archive;
|
|
drop database test1;
|
|
|
|
#
|
|
# MDEV-4456 Reverse discovery of ARCHIVE table on SELECT after disappearance of ARZ file
|
|
#
|
|
create table t1 (a int) engine=archive;
|
|
select * from t1;
|
|
flush tables;
|
|
remove_file $mysqld_datadir/test/t1.ARZ;
|
|
--error ER_NO_SUCH_TABLE
|
|
select * from t1;
|
|
--list_files $mysqld_datadir/test
|
|
|