MDEV-23549 CREATE fails after DROP without FRM

Related to 7c2ba9e: ha_table_exists() is replaced by
dd_frm_type(). ha_table_exists() checked the existence of share and
that succeeded to enter the execution branch of ha_delete_table()
where tdc_remove_table() was called. Now it is skipped because
dd_frm_type() returns TABLE_TYPE_UNKNOWN. Fix it by calling
tdc_remove_table() in this case as well.
This commit is contained in:
Aleksey Midenkov 2020-09-07 21:54:08 +03:00
commit 9842ed4e6d
3 changed files with 21 additions and 0 deletions

View file

@ -120,3 +120,12 @@ flush tables;
drop table t2;
ERROR 42S02: Unknown table 'test.t2'
db.opt
#
# MDEV-23549 CREATE fails after DROP without FRM
#
create table t1 (a int);
select * from t1;
a
drop table t1;
create table t1 (a int);
drop table t1;

View file

@ -213,3 +213,14 @@ flush tables;
--error ER_BAD_TABLE_ERROR
drop table t2;
--list_files $DATADIR/test/
--echo #
--echo # MDEV-23549 CREATE fails after DROP without FRM
--echo #
create table t1 (a int);
select * from t1;
--remove_file $datadir/test/t1.frm
drop table t1;
create table t1 (a int);
drop table t1;

View file

@ -2443,6 +2443,7 @@ int mysql_rm_table_no_locks(THD *thd, TABLE_LIST *tables, bool if_exists,
was_table|= wrong_drop_sequence;
local_non_tmp_error= 1;
error= table_type == TABLE_TYPE_UNKNOWN ? ENOENT : -1;
tdc_remove_table(thd, db.str, table_name.str);
}
else
{