1
0
mirror of https://github.com/MariaDB/server.git synced 2025-08-07 00:04:31 +03:00

MDEV-17360 Server crashes in optimize_keyuse

This was a bug in the code of MDEV-12387 "Push conditions into materialized
subqueries". The bug manifested itself in rather rare situations. An
affected query must contain IN subquery predicate whose left operand
was an outer field of a mergeable derived table or view and right operand
was a materialized subquery.
The erroneous code in fact stripped off the Item_direct_ref wrapper from
the left operand of the IN subquery predicate when building equalities
produced by the conversion of the predicate into a semi-join. As a result
the left operand was not considered as an outer reference anymore and
used_tables() was calculated incorrectly. This caused a crash in the
function optimize_keyuse().
This commit is contained in:
Igor Babaev
2018-10-07 12:16:59 -07:00
parent 52f326cfb7
commit d03581bf3c
3 changed files with 33 additions and 3 deletions

View File

@@ -5512,7 +5512,7 @@ int select_value_catcher::send_data(List<Item> &items)
/**
@brief
Conjugate conditions after optimize_cond() call
Add new conditions after optimize_cond() call
@param thd the thread handle
@param cond the condition where to attach new conditions
@@ -5561,8 +5561,8 @@ Item *and_new_conditions_to_optimized_cond(THD *thd, Item *cond,
Item::Context(Item::ANY_SUBST,
((Item_func_equal *)item)->compare_type_handler(),
((Item_func_equal *)item)->compare_collation()),
((Item_func *)item)->arguments()[0]->real_item(),
((Item_func *)item)->arguments()[1]->real_item(),
((Item_func *)item)->arguments()[0],
((Item_func *)item)->arguments()[1],
&new_cond_equal))
li.remove();
}