summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--mysql-test/r/delete.result10
-rw-r--r--mysql-test/t/delete.test11
-rw-r--r--sql/sql_select.cc3
3 files changed, 23 insertions, 1 deletions
diff --git a/mysql-test/r/delete.result b/mysql-test/r/delete.result
index f1acc5d2dfa..c6b7a40214d 100644
--- a/mysql-test/r/delete.result
+++ b/mysql-test/r/delete.result
@@ -120,3 +120,13 @@ a b
0 10
1 11
drop table t11, t12, t2;
+create table t1 (a int, b int, unique key (a), key (b));
+insert into t1 values (3, 3), (7, 7);
+delete t1 from t1 where a = 3;
+check table t1;
+Table Op Msg_type Msg_text
+test.t1 check status OK
+select * from t1;
+a b
+7 7
+drop table t1;
diff --git a/mysql-test/t/delete.test b/mysql-test/t/delete.test
index e370b545eff..56c8ce77627 100644
--- a/mysql-test/t/delete.test
+++ b/mysql-test/t/delete.test
@@ -98,3 +98,14 @@ select * from t11;
delete ignore from t11 where t11.b <> (select b from t2 where t11.a < t2.a);
select * from t11;
drop table t11, t12, t2;
+
+#
+# Bug #4198: deletion and KEYREAD
+#
+
+create table t1 (a int, b int, unique key (a), key (b));
+insert into t1 values (3, 3), (7, 7);
+delete t1 from t1 where a = 3;
+check table t1;
+select * from t1;
+drop table t1;
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index b32cb228c72..d6e76ce81d8 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -5972,7 +5972,8 @@ join_read_const_table(JOIN_TAB *tab, POSITION *pos)
else
{
if (!table->key_read && table->used_keys.is_set(tab->ref.key) &&
- !table->no_keyread)
+ !table->no_keyread &&
+ (int) table->reginfo.lock_type <= (int) TL_READ_HIGH_PRIORITY)
{
table->key_read=1;
table->file->extra(HA_EXTRA_KEYREAD);