diff options
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r-- | sql/sql_select.cc | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sql/sql_select.cc b/sql/sql_select.cc index 8e3976ba3ca..c3b3fc5eaac 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -13482,7 +13482,6 @@ void propagate_new_equalities(THD *thd, Item *cond, Item_cond_and *cond_and= (Item_cond_and *) cond; List<Item_equal> *cond_equalities= &cond_and->cond_equal.current_level; cond_and->cond_equal.upper_levels= inherited; - inherited= &cond_and->cond_equal; if (!cond_equalities->is_empty() && cond_equalities != new_equalities) { Item_equal *equal_item; @@ -13507,7 +13506,10 @@ void propagate_new_equalities(THD *thd, Item *cond, List_iterator<Item> li(*((Item_cond*) cond)->argument_list()); while ((item= li++)) { - propagate_new_equalities(thd, item, new_equalities, inherited, + COND_EQUAL *new_inherited= and_level && item->type() == Item::COND_ITEM ? + &((Item_cond_and *) cond)->cond_equal : + inherited; + propagate_new_equalities(thd, item, new_equalities, new_inherited, is_simplifiable_cond); } } @@ -13811,6 +13813,7 @@ internal_remove_eq_conds(THD *thd, COND *cond, Item::cond_result *cond_value) List_iterator_fast<Item_equal> it(new_equalities); while ((equality= it++)) { + equality->upper_levels= cond_equal->upper_levels; equality->merge_into_list(cond_equalities, false, false); List_iterator_fast<Item_equal> ei(*cond_equalities); while ((equality= ei++)) |