From 715a507e3368451b824f211dea34a55c5d4dac1d Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Sun, 14 Jan 2018 16:03:35 +0100 Subject: [PATCH] MDEV-14786 Server crashes in Item_cond::transform on 2nd execution of SP querying from a view instead of skipping invalid items in setup_conds(), don't pass them into a JOIN at all (test case in versioning.select2) --- sql/sql_base.cc | 4 ---- sql/sql_union.cc | 3 ++- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 6178dd3ac6a..45efa6330b0 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -7997,10 +7997,6 @@ int setup_conds(THD *thd, TABLE_LIST *tables, List &leaves, TABLE_LIST *derived= select_lex->master_unit()->derived; DBUG_ENTER("setup_conds"); - /* Do not fix conditions for the derived tables that have been merged */ - if (derived && derived->merged) - DBUG_RETURN(0); - select_lex->is_item_list_lookup= 0; thd->mark_used_columns= MARK_COLUMNS_READ; diff --git a/sql/sql_union.cc b/sql/sql_union.cc index 82745b61929..dda57cc5b4d 100644 --- a/sql/sql_union.cc +++ b/sql/sql_union.cc @@ -645,6 +645,7 @@ bool st_select_lex_unit::prepare_join(THD *thd_arg, SELECT_LEX *sl, bool is_union_select) { DBUG_ENTER("st_select_lex_unit::prepare_join"); + TABLE_LIST *derived= sl->master_unit()->derived; bool can_skip_order_by; sl->options|= SELECT_NO_UNLOCK; JOIN *join= new JOIN(thd_arg, sl->item_list, @@ -660,7 +661,7 @@ bool st_select_lex_unit::prepare_join(THD *thd_arg, SELECT_LEX *sl, saved_error= join->prepare(sl->table_list.first, sl->with_wild, - sl->where, + (derived && derived->merged ? NULL : sl->where), (can_skip_order_by ? 0 : sl->order_list.elements) + sl->group_list.elements,