From a773916238d9bece75458b9548e08fac303cdc8a Mon Sep 17 00:00:00 2001 From: "ramil@mysql.com" <> Date: Thu, 17 Mar 2005 10:24:50 +0400 Subject: [PATCH] A fix (bug #8942: SUBSTRING_INDEX in UPDATE causes internal loop). --- mysql-test/r/update.result | 7 +++++++ mysql-test/t/update.test | 10 ++++++++++ sql/key.cc | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/mysql-test/r/update.result b/mysql-test/r/update.result index 7810d52d156..9ca92fe75df 100644 --- a/mysql-test/r/update.result +++ b/mysql-test/r/update.result @@ -209,3 +209,10 @@ insert into t1 values (1, "t1c2-1", 10), (2, "t1c2-2", 20); update t1 left join t2 on t1.c1 = t2.c1 set t2.c2 = "t2c2-1"; update t1 left join t2 on t1.c1 = t2.c1 set t2.c2 = "t2c2-1" where t1.c3 = 10; drop table t1, t2; +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 62439dcc51b..6c7b450f763 100644 --- a/mysql-test/t/update.test +++ b/mysql-test/t/update.test @@ -164,3 +164,13 @@ insert into t1 values (1, "t1c2-1", 10), (2, "t1c2-2", 20); update t1 left join t2 on t1.c1 = t2.c1 set t2.c2 = "t2c2-1"; update t1 left join t2 on t1.c1 = t2.c1 set t2.c2 = "t2c2-1" where t1.c3 = 10; drop table t1, t2; + +# +# 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 0a5937fc881..52eb108a5df 100644 --- a/sql/key.cc +++ b/sql/key.cc @@ -265,7 +265,7 @@ bool check_if_key_used(TABLE *table, uint idx, List &fields) f.rewind(); while ((field=(Item_field*) f++)) { - if (key_part->field == field->field) + if (key_part->field->eq(field->field)) return 1; } }