From c3e70a010443d5889f7388b7dbc6bd3bcfb62a21 Mon Sep 17 00:00:00 2001 From: Sergey Petrunya Date: Mon, 8 Jul 2013 20:21:27 +0400 Subject: [PATCH] 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) --- sql/sql_base.cc | 9 --------- 1 file changed, 9 deletions(-) diff --git a/sql/sql_base.cc b/sql/sql_base.cc index b160c68f7c2..7613facfe67 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -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,