Commit ad947563 authored by unknown's avatar unknown

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".
parent fce7fc43
...@@ -4651,6 +4651,18 @@ a ...@@ -4651,6 +4651,18 @@ a
1 1
drop view v1; drop view v1;
drop table t1,t2; drop table t1,t2;
#
# MDEV-4593: p_s: crash in simplify_joins with delete using subselect
# from view
#
create table `t1`(`a` int);
create table `t2`(`a` int);
create or replace view `v1` as select `a` from `t1`;
prepare s from "delete from `t2` order by (select 1 from `v1`)";
execute s;
deallocate prepare s;
drop view v1;
drop tables t1,t2;
# ----------------------------------------------------------------- # -----------------------------------------------------------------
# -- End of 5.3 tests. # -- End of 5.3 tests.
# ----------------------------------------------------------------- # -----------------------------------------------------------------
......
...@@ -4596,6 +4596,20 @@ WHERE a = alias.a ); ...@@ -4596,6 +4596,20 @@ WHERE a = alias.a );
drop view v1; drop view v1;
drop table t1,t2; drop table t1,t2;
--echo #
--echo # MDEV-4593: p_s: crash in simplify_joins with delete using subselect
--echo # from view
--echo #
create table `t1`(`a` int);
create table `t2`(`a` int);
create or replace view `v1` as select `a` from `t1`;
prepare s from "delete from `t2` order by (select 1 from `v1`)";
execute s;
deallocate prepare s;
drop view v1;
drop tables t1,t2;
--echo # ----------------------------------------------------------------- --echo # -----------------------------------------------------------------
--echo # -- End of 5.3 tests. --echo # -- End of 5.3 tests.
--echo # ----------------------------------------------------------------- --echo # -----------------------------------------------------------------
......
...@@ -83,7 +83,16 @@ mysql_handle_derived(LEX *lex, uint phases) ...@@ -83,7 +83,16 @@ mysql_handle_derived(LEX *lex, uint phases)
sl && !res; sl && !res;
sl= sl->next_select_in_list()) 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 && !res;
cursor= cursor->next_local) cursor= cursor->next_local)
{ {
......
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