Fix assert failures in main.merge test (line 234) and main.merge_mmap (line 44)

- After the merge from mysql-5.6, open_tables() did not call
  open_and_process_table() for temporary table. The logic was that temporary
  tables were already opened when mysql_execute_command() has called 
  open_temporary_tables().
  This worked for the most part, except for temporary tables of type MERGE. for
  which open_and_process_table() must call 
    table->file->extra(HA_EXTRA_ADD_CHILDREN_LIST).
  Failure to make this call resulted in crash further in execution.

  tables->table->file->extra(HA_EXTRA_ADD_CHILDREN_LIST)
This commit is contained in:
Sergey Petrunya 2013-07-08 20:21:27 +04:00
parent 09e2501f0d
commit c3e70a0104

View File

@ -4514,7 +4514,6 @@ open_and_process_table(THD *thd, LEX *lex, TABLE_LIST *tables,
bool safe_to_ignore_table= FALSE;
DBUG_ENTER("open_and_process_table");
DEBUG_SYNC(thd, "open_and_process_table");
DBUG_ASSERT(!tables->table);
/*
Ignore placeholders for derived tables. After derived tables
@ -5213,14 +5212,6 @@ restart:
for (tables= *table_to_open; tables;
table_to_open= &tables->next_global, tables= tables->next_global)
{
/* Ignore temporary tables, as these has already been opened */
if (tables->table)
{
DBUG_ASSERT(is_temporary_table(tables));
/* We have to increment the counter for lock_tables */
(*counter)++;
continue;
}
error= open_and_process_table(thd, thd->lex, tables, counter,
flags, prelocking_strategy,
has_prelocking_list, &ot_ctx,