Commit c8366b43 authored by ingo@mysql.com's avatar ingo@mysql.com

Merge mysql.com:/home/mydev/mysql-5.0

into  mysql.com:/home/mydev/mysql-5.0-5000
parents 9a649910 7953594a
...@@ -1030,23 +1030,23 @@ TABLE *reopen_name_locked_table(THD* thd, TABLE_LIST* table_list) ...@@ -1030,23 +1030,23 @@ TABLE *reopen_name_locked_table(THD* thd, TABLE_LIST* table_list)
SYNOPSIS SYNOPSIS
open_table() open_table()
thd Thread context thd Thread context.
table_list Open first table in list table_list Open first table in list.
refresh Pointer to memory that will be set to 1 if refresh INOUT Pointer to memory that will be set to 1 if
we need to close all tables and reopen them we need to close all tables and reopen them.
If this is a NULL pointer, then the is no version If this is a NULL pointer, then the table is not
number checking and the table is not put in the put in the thread-open-list.
thread-open-list
flags Bitmap of flags to modify how open works: flags Bitmap of flags to modify how open works:
MYSQL_LOCK_IGNORE_FLUSH - Open table even if someone MYSQL_LOCK_IGNORE_FLUSH - Open table even if
has done a flush or namelock on it. someone has done a flush or namelock on it.
No version number checking is done.
IMPLEMENTATION IMPLEMENTATION
Uses a cache of open tables to find a table not in use. Uses a cache of open tables to find a table not in use.
RETURN RETURN
NULL Open failed. If refresh is set then one should close NULL Open failed. If refresh is set then one should close
all other tables and retry the open all other tables and retry the open.
# Success. Pointer to TABLE object for open table. # Success. Pointer to TABLE object for open table.
*/ */
...@@ -1201,9 +1201,11 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root, ...@@ -1201,9 +1201,11 @@ TABLE *open_table(THD *thd, TABLE_LIST *table_list, MEM_ROOT *mem_root,
if (!thd->open_tables) if (!thd->open_tables)
thd->version=refresh_version; thd->version=refresh_version;
else if (thd->version != refresh_version && refresh) else if ((thd->version != refresh_version) &&
! (flags & MYSQL_LOCK_IGNORE_FLUSH))
{ {
/* Someone did a refresh while thread was opening tables */ /* Someone did a refresh while thread was opening tables */
if (refresh)
*refresh=1; *refresh=1;
VOID(pthread_mutex_unlock(&LOCK_open)); VOID(pthread_mutex_unlock(&LOCK_open));
DBUG_RETURN(0); DBUG_RETURN(0);
......
...@@ -1756,7 +1756,8 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info, ...@@ -1756,7 +1756,8 @@ TABLE *create_table_from_items(THD *thd, HA_CREATE_INFO *create_info,
create_info, *extra_fields, *keys, 0, create_info, *extra_fields, *keys, 0,
select_field_count)) select_field_count))
{ {
if (!(table= open_table(thd, create_table, thd->mem_root, (bool*)0, 0))) if (! (table= open_table(thd, create_table, thd->mem_root, (bool*) 0,
MYSQL_LOCK_IGNORE_FLUSH)))
quick_rm_table(create_info->db_type, create_table->db, quick_rm_table(create_info->db_type, create_table->db,
table_case_name(create_info, create_table->table_name)); table_case_name(create_info, create_table->table_name));
} }
...@@ -3579,7 +3580,8 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name, ...@@ -3579,7 +3580,8 @@ bool mysql_alter_table(THD *thd,char *new_db, char *new_name,
bzero((void*) &tbl, sizeof(tbl)); bzero((void*) &tbl, sizeof(tbl));
tbl.db= new_db; tbl.db= new_db;
tbl.table_name= tbl.alias= tmp_name; tbl.table_name= tbl.alias= tmp_name;
new_table= open_table(thd, &tbl, thd->mem_root, 0, 0); new_table= open_table(thd, &tbl, thd->mem_root, (bool*) 0,
MYSQL_LOCK_IGNORE_FLUSH);
} }
else else
{ {
......
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