summaryrefslogtreecommitdiff
path: root/sql/sql_update.cc
diff options
context:
space:
mode:
authorKent Boortz <kent.boortz@oracle.com>2011-07-04 01:25:49 +0200
committerKent Boortz <kent.boortz@oracle.com>2011-07-04 01:25:49 +0200
commit0f03af653cd9891dc6b8d855d7ebffc27b1db288 (patch)
treeaae7686092aab07db57ff0fe0150741ffbc9689d /sql/sql_update.cc
parent9da00ebec99cd8963b63d011d6dd8111cbf9217e (diff)
parentbc9f870fb12d4aedc6239ec485dee6ebc23d9b94 (diff)
downloadmariadb-git-0f03af653cd9891dc6b8d855d7ebffc27b1db288.tar.gz
Updated/added copyright headers
Diffstat (limited to 'sql/sql_update.cc')
-rw-r--r--sql/sql_update.cc30
1 files changed, 20 insertions, 10 deletions
diff --git a/sql/sql_update.cc b/sql/sql_update.cc
index fc3b8236b72..754170e4c55 100644
--- a/sql/sql_update.cc
+++ b/sql/sql_update.cc
@@ -1071,17 +1071,27 @@ bool unsafe_key_update(TABLE_LIST *leaves, table_map tables_for_update)
return true;
}
- if (primkey_clustered &&
- (bitmap_is_set(table1->write_set, table1->s->primary_key) ||
- bitmap_is_set(table2->write_set, table2->s->primary_key)))
+ if (primkey_clustered)
{
- // Clustered primary key is updated
- my_error(ER_MULTI_UPDATE_KEY_CONFLICT, MYF(0),
- tl->belong_to_view ? tl->belong_to_view->alias
- : tl->alias,
- tl2->belong_to_view ? tl2->belong_to_view->alias
- : tl2->alias);
- return true;
+ // The primary key can cover multiple columns
+ KEY key_info= table1->key_info[table1->s->primary_key];
+ KEY_PART_INFO *key_part= key_info.key_part;
+ KEY_PART_INFO *key_part_end= key_part + key_info.key_parts;
+
+ for (;key_part != key_part_end; ++key_part)
+ {
+ if (bitmap_is_set(table1->write_set, key_part->fieldnr-1) ||
+ bitmap_is_set(table2->write_set, key_part->fieldnr-1))
+ {
+ // Clustered primary key is updated
+ my_error(ER_MULTI_UPDATE_KEY_CONFLICT, MYF(0),
+ tl->belong_to_view ? tl->belong_to_view->alias
+ : tl->alias,
+ tl2->belong_to_view ? tl2->belong_to_view->alias
+ : tl2->alias);
+ return true;
+ }
+ }
}
}
}