summaryrefslogtreecommitdiff
path: root/sql/sql_select.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_select.cc')
-rw-r--r--sql/sql_select.cc7
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++))