Commit a85f6533 authored by Sergei Petrunia's avatar Sergei Petrunia

MDEV-8989: ORDER BY optimizer ignores equality propagation

Post-fix: add comments, remove dead-code.
parent 99cd5a96
...@@ -12343,22 +12343,19 @@ remove_const(JOIN *join,ORDER *first_order, COND *cond, ...@@ -12343,22 +12343,19 @@ remove_const(JOIN *join,ORDER *first_order, COND *cond,
Item *item= order->item[0]; Item *item= order->item[0];
/* /*
We are using Context_identity below. This means only do TODO: equality substitution in the context of ORDER BY is
substitution when equality means sometimes allowed when it is not allowed in the general case.
We make the below call for its side effect: it will locate the
multiple equality the item belongs to and set item->item_equal
accordingly.
*/ */
Item *res= item->propagate_equal_fields(join->thd, Item *res= item->propagate_equal_fields(join->thd,
Value_source:: Value_source::
Context_identity(), Context_identity(),
join->cond_equal); join->cond_equal);
if (res != item) Item_equal *item_eq;
{ if ((item_eq= res->get_item_equal()))
/* Substituted to a constant */
can_subst_to_first_table= true;
}
else
{
Item_equal *item_eq= item->get_item_equal();
if (item_eq)
{ {
Item *first= item_eq->get_first(NO_PARTICULAR_TAB, NULL); Item *first= item_eq->get_first(NO_PARTICULAR_TAB, NULL);
if (first->const_item() || first->used_tables() == if (first->const_item() || first->used_tables() ==
...@@ -12368,7 +12365,6 @@ remove_const(JOIN *join,ORDER *first_order, COND *cond, ...@@ -12368,7 +12365,6 @@ remove_const(JOIN *join,ORDER *first_order, COND *cond,
} }
} }
} }
}
if (!can_subst_to_first_table) if (!can_subst_to_first_table)
{ {
......
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