diff options
author | Aleksey Midenkov <midenok@gmail.com> | 2020-09-07 21:54:08 +0300 |
---|---|---|
committer | Aleksey Midenkov <midenok@gmail.com> | 2020-09-07 21:54:08 +0300 |
commit | 9842ed4e6dde3f8dfda753e069b72975be73218a (patch) | |
tree | fd0f2dc3fffa12976836f3353424b22049a31bd3 | |
parent | 92ffab382c3f5f000662c13c102c773fad6e636e (diff) | |
download | mariadb-git-9842ed4e6dde3f8dfda753e069b72975be73218a.tar.gz |
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.
-rw-r--r-- | mysql-test/main/drop_table_force.result | 9 | ||||
-rw-r--r-- | mysql-test/main/drop_table_force.test | 11 | ||||
-rw-r--r-- | sql/sql_table.cc | 1 |
3 files changed, 21 insertions, 0 deletions
diff --git a/mysql-test/main/drop_table_force.result b/mysql-test/main/drop_table_force.result index d3142887ade..622589eb3b9 100644 --- a/mysql-test/main/drop_table_force.result +++ b/mysql-test/main/drop_table_force.result @@ -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; diff --git a/mysql-test/main/drop_table_force.test b/mysql-test/main/drop_table_force.test index 518b4e754c3..f3073e3b67d 100644 --- a/mysql-test/main/drop_table_force.test +++ b/mysql-test/main/drop_table_force.test @@ -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; diff --git a/sql/sql_table.cc b/sql/sql_table.cc index 57045c251a7..15d190c3139 100644 --- a/sql/sql_table.cc +++ b/sql/sql_table.cc @@ -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 { |