diff options
Diffstat (limited to 'sql')
-rw-r--r-- | sql/sql_base.cc | 6 | ||||
-rw-r--r-- | sql/sql_base.h | 1 | ||||
-rw-r--r-- | sql/sql_parse.cc | 3 |
3 files changed, 9 insertions, 1 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 490f21aa950..943d66d55f2 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1039,6 +1039,12 @@ retry: if (res->table && (res->table == table->table)) continue; + /* Skip if table is tmp table */ + if (check_flag & CHECK_DUP_SKIP_TEMP_TABLE && + res->table && res->table->s->tmp_table != NO_TMP_TABLE) + { + continue; + } if (check_flag & CHECK_DUP_FOR_CREATE) DBUG_RETURN(res); diff --git a/sql/sql_base.h b/sql/sql_base.h index 01892c0b938..be93566be09 100644 --- a/sql/sql_base.h +++ b/sql/sql_base.h @@ -64,6 +64,7 @@ enum find_item_error_report_type {REPORT_ALL_ERRORS, REPORT_EXCEPT_NOT_FOUND, /* Flag bits for unique_table() */ #define CHECK_DUP_ALLOW_DIFFERENT_ALIAS 1 #define CHECK_DUP_FOR_CREATE 2 +#define CHECK_DUP_SKIP_TEMP_TABLE 4 uint get_table_def_key(const TABLE_LIST *table_list, const char **key); TABLE *open_ltable(THD *thd, TABLE_LIST *table_list, thr_lock_type update, diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc index a1cacbd35a2..d8f4f492903 100644 --- a/sql/sql_parse.cc +++ b/sql/sql_parse.cc @@ -4196,7 +4196,8 @@ mysql_execute_command(THD *thd) TABLE_LIST *duplicate; if (unlikely((duplicate= unique_table(thd, lex->query_tables, lex->query_tables->next_global, - CHECK_DUP_FOR_CREATE)))) + CHECK_DUP_FOR_CREATE | + CHECK_DUP_SKIP_TEMP_TABLE)))) { update_non_unique_table_error(lex->query_tables, "CREATE", duplicate); |