mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 02:05:57 +01:00
Re-run fix-fields on condition if table was reopened in HANDLERREAD
sql/sql_base.cc: Added more comments sql/sql_handler.cc: Re-run fix-fields on condition if table was reopened
This commit is contained in:
parent
159eaf4f0a
commit
af024409af
2 changed files with 24 additions and 7 deletions
|
@ -1012,10 +1012,20 @@ TABLE *find_locked_table(THD *thd, const char *db,const char *table_name)
|
|||
|
||||
|
||||
/****************************************************************************
|
||||
** Reopen an table because the definition has changed. The date file for the
|
||||
** table is already closed.
|
||||
** Returns 0 if ok.
|
||||
** If table can't be reopened, the entry is unchanged.
|
||||
Reopen an table because the definition has changed. The date file for the
|
||||
table is already closed.
|
||||
|
||||
SYNOPSIS
|
||||
reopen_table()
|
||||
table Table to be opened
|
||||
locked 1 if we have already a lock on LOCK_open
|
||||
|
||||
NOTES
|
||||
table->query_id will be 0 if table was reopened
|
||||
|
||||
RETURN
|
||||
0 ok
|
||||
1 error ('table' is unchanged if table couldn't be reopened)
|
||||
****************************************************************************/
|
||||
|
||||
bool reopen_table(TABLE *table,bool locked)
|
||||
|
@ -1085,8 +1095,10 @@ bool reopen_table(TABLE *table,bool locked)
|
|||
(*field)->table_name=table->table_name;
|
||||
}
|
||||
for (key=0 ; key < table->keys ; key++)
|
||||
{
|
||||
for (part=0 ; part < table->key_info[key].usable_key_parts ; part++)
|
||||
table->key_info[key].key_part[part].field->table= table;
|
||||
}
|
||||
VOID(pthread_cond_broadcast(&COND_refresh));
|
||||
error=0;
|
||||
|
||||
|
|
|
@ -437,9 +437,14 @@ int mysql_ha_read(THD *thd, TABLE_LIST *tables,
|
|||
if (!lock)
|
||||
goto err0; // mysql_lock_tables() printed error message already
|
||||
|
||||
if (cond && ((!cond->fixed &&
|
||||
cond->fix_fields(thd, tables, &cond)) || cond->check_cols(1)))
|
||||
goto err0;
|
||||
if (cond)
|
||||
{
|
||||
if (table->query_id != thd->query_id)
|
||||
cond->cleanup(); // File was reopened
|
||||
if ((!cond->fixed &&
|
||||
cond->fix_fields(thd, tables, &cond)) || cond->check_cols(1))
|
||||
goto err0;
|
||||
}
|
||||
|
||||
if (keyname)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue