From a85f6533f13a02a0b0547656a5ff918a1d91d887 Mon Sep 17 00:00:00 2001 From: Sergei Petrunia Date: Fri, 27 May 2016 15:16:08 +0300 Subject: [PATCH] MDEV-8989: ORDER BY optimizer ignores equality propagation Post-fix: add comments, remove dead-code. --- sql/sql_select.cc | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/sql/sql_select.cc b/sql/sql_select.cc index a278183d5fd..4b535b16d6f 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -12342,30 +12342,26 @@ remove_const(JOIN *join,ORDER *first_order, COND *cond, Item *item= order->item[0]; - /* - We are using Context_identity below. This means only do - substitution when equality means + /* + TODO: equality substitution in the context of ORDER BY is + 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, Value_source:: Context_identity(), 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); + if (first->const_item() || first->used_tables() == + first_table_bit) { - Item *first= item_eq->get_first(NO_PARTICULAR_TAB, NULL); - if (first->const_item() || first->used_tables() == - first_table_bit) - { - can_subst_to_first_table= true; - } + can_subst_to_first_table= true; } } }