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. 
parent 2517966c
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;
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
TABLE *unused_tables; /* Used by mysql_test */ TABLE *unused_tables; /* Used by mysql_test */
HASH open_cache; /* 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, static int open_unireg_entry(THD *thd,TABLE *entry,const char *db,
const char *name, const char *alias, bool locked); const char *name, const char *alias, bool locked);
...@@ -1314,6 +1315,12 @@ static int open_unireg_entry(THD *thd, TABLE *entry, const char *db, ...@@ -1314,6 +1315,12 @@ static int open_unireg_entry(THD *thd, TABLE *entry, const char *db,
} }
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 ** open all tables in list
*****************************************************************************/ *****************************************************************************/
...@@ -1339,6 +1346,9 @@ int open_tables(THD *thd,TABLE_LIST *start) ...@@ -1339,6 +1346,9 @@ int open_tables(THD *thd,TABLE_LIST *start)
{ {
/* close all 'old' tables used by this thread */ /* close all 'old' tables used by this thread */
pthread_mutex_lock(&LOCK_open); 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; thd->version=refresh_version;
TABLE **prev_table= &thd->open_tables; TABLE **prev_table= &thd->open_tables;
bool found=0; bool found=0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment