From 474f45b3dc684b14c3b5ab86303c8aa890d2dce5 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Tue, 9 Apr 2013 16:06:54 +0200 Subject: [PATCH] discover of table non-existance on drop --- mysql-test/suite/archive/discover.result | 12 +++++++++++- mysql-test/suite/archive/discover.test | 12 +++++++++++- sql/handler.cc | 7 ++++++- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/mysql-test/suite/archive/discover.result b/mysql-test/suite/archive/discover.result index dc6d124d345..8cae289733b 100644 --- a/mysql-test/suite/archive/discover.result +++ b/mysql-test/suite/archive/discover.result @@ -76,9 +76,19 @@ t1 CREATE TABLE `t1` ( # discover on drop # flush tables; -drop table t0, t1; +drop table t1; show tables; Tables_in_test +t0 +# +# discover of table non-existance on drop +# +select * from t0; +a +flush tables; +select * from t1; +ERROR 42S02: Table 'test.t1' doesn't exist +drop table t0; # # Bug#45377: ARCHIVE tables aren't discoverable after OPTIMIZE # diff --git a/mysql-test/suite/archive/discover.test b/mysql-test/suite/archive/discover.test index 8175511929f..7a588d4654d 100644 --- a/mysql-test/suite/archive/discover.test +++ b/mysql-test/suite/archive/discover.test @@ -62,9 +62,19 @@ show create table t1; --echo # remove_file $mysqld_datadir/test/t1.frm; flush tables; -drop table t0, t1; +drop table t1; show tables; +--echo # +--echo # discover of table non-existance on drop +--echo # +select * from t0; +remove_file $mysqld_datadir/test/t0.ARZ; +flush tables; +--error ER_NO_SUCH_TABLE +select * from t1; +drop table t0; + --echo # --echo # Bug#45377: ARCHIVE tables aren't discoverable after OPTIMIZE --echo # diff --git a/sql/handler.cc b/sql/handler.cc index 00ed78f335d..d58040abaa8 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -3448,9 +3448,14 @@ int handler::delete_table(const char *name) { int saved_error= 0; int error= 0; - int enoent_or_zero= ENOENT; // Error if no file was deleted + int enoent_or_zero; char buff[FN_REFLEN]; + if (ht->discover_table) + enoent_or_zero= 0; // the table may not exist in the engine, it's ok + else + enoent_or_zero= ENOENT; // the first file of bas_ext() *must* exist + for (const char **ext=bas_ext(); *ext ; ext++) { fn_format(buff, name, "", *ext, MY_UNPACK_FILENAME|MY_APPEND_EXT);