summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/sql_base.cc6
-rw-r--r--sql/sql_base.h1
-rw-r--r--sql/sql_parse.cc3
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);