From cb8962ac808016a58d2a0064134d25a207eb9cf7 Mon Sep 17 00:00:00 2001 From: "sasha@mysql.sashanet.com" <> Date: Thu, 22 Mar 2001 20:04:59 -0700 Subject: [PATCH] fixed bug on re-open of temp tables after FLUSH in the middle of open added flush test case, but had to comment the fun part out because it does not work for some reason - will investigate why. --- mysql-test/r/flush.result | 2 ++ mysql-test/t/flush.test | 12 ++++++++++++ sql/sql_base.cc | 10 ++++++++++ 3 files changed, 24 insertions(+) create mode 100644 mysql-test/r/flush.result create mode 100644 mysql-test/t/flush.test diff --git a/mysql-test/r/flush.result b/mysql-test/r/flush.result new file mode 100644 index 00000000000..76862936a16 --- /dev/null +++ b/mysql-test/r/flush.result @@ -0,0 +1,2 @@ +n +3 diff --git a/mysql-test/t/flush.test b/mysql-test/t/flush.test new file mode 100644 index 00000000000..750ecdeadda --- /dev/null +++ b/mysql-test/t/flush.test @@ -0,0 +1,12 @@ +connect (con1,localhost,root,,test,0,mysql-master.sock); +connect (con2,localhost,root,,test,0,mysql-master.sock); +connection con1; +drop table if exists t1; +create temporary table t1(n int); +connection con2; +#send flush tables; +connection con1; +insert into t1 values(3); +select * from t1; +connection con2; +#reap; diff --git a/sql/sql_base.cc b/sql/sql_base.cc index c235ac6575a..801ef63dcf3 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -32,6 +32,7 @@ TABLE *unused_tables; /* Used by mysql_test */ HASH open_cache; /* Used by mysql_test */ +static void reset_query_id_on_temp_tables(THD* thd); static int open_unireg_entry(THD *thd,TABLE *entry,const char *db, const char *name, const char *alias, bool locked); @@ -1314,6 +1315,12 @@ err: } +static void reset_query_id_on_temp_tables(THD* thd) +{ + for(TABLE* tmp = thd->temporary_tables; tmp; tmp = tmp->next) + tmp->query_id = 0; +} + /***************************************************************************** ** open all tables in list *****************************************************************************/ @@ -1339,6 +1346,9 @@ int open_tables(THD *thd,TABLE_LIST *start) { /* close all 'old' tables used by this thread */ pthread_mutex_lock(&LOCK_open); + // if query_id is not reset, we will get an error + // re-opening a temp table + reset_query_id_on_temp_tables(thd); thd->version=refresh_version; TABLE **prev_table= &thd->open_tables; bool found=0;