diff options
-rw-r--r-- | mysql-test/r/update.result | 7 | ||||
-rw-r--r-- | mysql-test/t/update.test | 10 | ||||
-rw-r--r-- | sql/key.cc | 2 |
3 files changed, 18 insertions, 1 deletions
diff --git a/mysql-test/r/update.result b/mysql-test/r/update.result index ac370db9ecc..4a9e95fb89e 100644 --- a/mysql-test/r/update.result +++ b/mysql-test/r/update.result @@ -219,3 +219,10 @@ select * from t1; id id_str 1 test1 drop table t1; +create table t1 (a int, b char(255), key(a, b(20))); +insert into t1 values (0, '1'); +update t1 set b = b + 1 where a = 0; +select * from t1; +a b +0 2 +drop table t1; diff --git a/mysql-test/t/update.test b/mysql-test/t/update.test index 04192f25ac8..8eb3a924ee3 100644 --- a/mysql-test/t/update.test +++ b/mysql-test/t/update.test @@ -179,3 +179,13 @@ insert into t1 (id_str) values ("test"); update t1 set id_str = concat(id_str, id) where id = last_insert_id(); select * from t1; drop table t1; + +# +# Bug #8942: a problem with update and partial key part +# + +create table t1 (a int, b char(255), key(a, b(20))); +insert into t1 values (0, '1'); +update t1 set b = b + 1 where a = 0; +select * from t1; +drop table t1; diff --git a/sql/key.cc b/sql/key.cc index b1f4c9533a9..7ddd40de2c9 100644 --- a/sql/key.cc +++ b/sql/key.cc @@ -293,7 +293,7 @@ bool check_if_key_used(TABLE *table, uint idx, List<Item> &fields) f.rewind(); while ((field=(Item_field*) f++)) { - if (key_part->field == field->field) + if (key_part->field->eq(field->field)) return 1; } } |