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