Commit 904dc934 authored by Sergei Golubchik's avatar Sergei Golubchik

bugfix: PS and dependent subqueries

when there are nested subqueries, and a field in a subquery is
resolved as an outer reference to a table few levels up, all subqueries
the subquery with a reference and all subqueries up to subquery with
the table must be marked as dependent.

in the text protocol and PS-prepare step it happens in
Item_field::fix_outer_field in a loop that walks contexts
using context->outer_context.

in PS-execute step Item_field->cached_table is set and subqueries
are walked in a PS-only mark_select_range_as_dependent(),
which inconsistently walks SELECT_LEX'es using select_lex->outer_select().

Fix mark_select_range_as_dependent() to walk contexts, not SELECT_LEX'es,
to have the same logic both in prepare and execute steps.

This fixes a crash in main.insert_returning in --ps-protocol
parent 837ad9ab
......@@ -5018,8 +5018,8 @@ void mark_select_range_as_dependent(THD *thd, SELECT_LEX *last_select,
resolving)
*/
SELECT_LEX *previous_select= current_sel;
for (; previous_select->outer_select() != last_select;
previous_select= previous_select->outer_select())
for (; previous_select->context.outer_select() != last_select;
previous_select= previous_select->context.outer_select())
{
Item_subselect *prev_subselect_item=
previous_select->master_unit()->item;
......
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