Commit f35e10d4 authored by evgen@moonbone.local's avatar evgen@moonbone.local

Merge fix for bug#17711

parents f5f8c35e c17bf5cb
...@@ -186,4 +186,11 @@ select count(*) from t1; ...@@ -186,4 +186,11 @@ select count(*) from t1;
count(*) count(*)
0 0
drop table t1; drop table t1;
create table t1(f1 int primary key);
insert into t1 values (4),(3),(1),(2);
delete from t1 where (@a:= f1) order by f1 limit 1;
select @a;
@a
1
drop table t1;
End of 4.1 tests End of 4.1 tests
...@@ -174,4 +174,14 @@ delete from t1 where a is null; ...@@ -174,4 +174,14 @@ delete from t1 where a is null;
select count(*) from t1; select count(*) from t1;
drop table t1; drop table t1;
#
# Bug#17711: DELETE doesn't use index when ORDER BY, LIMIT and
# non-restricting WHERE is present.
#
create table t1(f1 int primary key);
insert into t1 values (4),(3),(1),(2);
delete from t1 where (@a:= f1) order by f1 limit 1;
select @a;
drop table t1;
--echo End of 4.1 tests --echo End of 4.1 tests
...@@ -142,7 +142,7 @@ int mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, ...@@ -142,7 +142,7 @@ int mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
DBUG_RETURN(-1); // This will force out message DBUG_RETURN(-1); // This will force out message
} }
if (!select && limit != HA_POS_ERROR) if ((!select || table->quick_keys.is_clear_all()) && limit != HA_POS_ERROR)
usable_index= get_index_for_order(table, (ORDER*)(order->first), limit); usable_index= get_index_for_order(table, (ORDER*)(order->first), limit);
if (usable_index == MAX_KEY) if (usable_index == MAX_KEY)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment