From ad947563ac9e42090cbcaef00ce0d22708d19f12 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 6 Jun 2013 23:33:40 +0300 Subject: MDEV-4593: p_s: crash in simplify_joins with delete using subselect from view mysql_derived_merge_for_insert() should not be called for views or derived tables which are not put (directly or via other views) in main SELECT_LEX "join list". --- sql/sql_derived.cc | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'sql/sql_derived.cc') diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index 99d20090623..afc2dea359a 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -83,7 +83,16 @@ mysql_handle_derived(LEX *lex, uint phases) sl && !res; sl= sl->next_select_in_list()) { - for (TABLE_LIST *cursor= sl->get_table_list(); + TABLE_LIST *cursor= sl->get_table_list(); + /* + DT_MERGE_FOR_INSERT is not needed for views/derived tables inside + subqueries. Views and derived tables of subqueries should be + processed normally. + */ + if (phases == DT_MERGE_FOR_INSERT && + cursor && cursor->top_table()->select_lex != &lex->select_lex) + continue; + for (; cursor && !res; cursor= cursor->next_local) { -- cgit v1.2.1