diff options
Diffstat (limited to 'sql/sql_base.cc')
-rw-r--r-- | sql/sql_base.cc | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 0e1c1525c9e..92aab055aac 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -698,6 +698,7 @@ TABLE_LIST *find_table_in_list(TABLE_LIST *table, SYNOPSIS unique_table() + thd thread handle table table which should be checked table_list list of tables @@ -723,7 +724,7 @@ TABLE_LIST *find_table_in_list(TABLE_LIST *table, 0 if table is unique */ -TABLE_LIST* unique_table(TABLE_LIST *table, TABLE_LIST *table_list) +TABLE_LIST* unique_table(THD *thd, TABLE_LIST *table, TABLE_LIST *table_list) { TABLE_LIST *res; const char *d_name, *t_name; @@ -758,9 +759,10 @@ TABLE_LIST* unique_table(TABLE_LIST *table, TABLE_LIST *table_list) DBUG_PRINT("info", ("real table: %s.%s", d_name, t_name)); for (;;) { - if (!(res= find_table_in_global_list(table_list, d_name, t_name)) || - (!res->table || res->table != table->table) && - (res->select_lex && !res->select_lex->exclude_from_table_unique_test)) + if (((! (res= find_table_in_global_list(table_list, d_name, t_name))) && + (! (res= mysql_lock_have_duplicate(thd, table, table_list)))) || + ((!res->table || res->table != table->table) && + res->select_lex && !res->select_lex->exclude_from_table_unique_test)) break; /* If we found entry of this table or or table of SELECT which already |