From c548fb0667ffe71d9387eaec342b1716fc4c9526 Mon Sep 17 00:00:00 2001 From: Oleksandr Byelkin Date: Wed, 16 Aug 2017 19:18:39 +0200 Subject: [PATCH] MDEV-11240: Server crashes in check_view_single_update or Assertion `derived->table' failed in mysql_derived_merge_for_insert Before "merge" view shoud be inited to maintaing transitive attributes like "multitable". --- mysql-test/r/view.result | 3 --- mysql-test/t/view.test | 5 +---- sql/sql_derived.cc | 4 ++-- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result index b5e4d5423d6..81cc41e5ab3 100644 --- a/mysql-test/r/view.result +++ b/mysql-test/r/view.result @@ -5674,9 +5674,6 @@ CREATE TABLE t3 (a INT); CREATE ALGORITHM = MERGE VIEW v1 AS SELECT t2.a FROM t3 AS t1, t3 AS t2; CREATE ALGORITHM = MERGE VIEW v2 AS SELECT * FROM v1; PREPARE stmt FROM 'REPLACE INTO v2 SELECT a FROM t3'; -EXECUTE stmt; -ERROR HY000: Can not insert into join view 'test.v2' without fields list -EXECUTE stmt; ERROR HY000: Can not insert into join view 'test.v2' without fields list drop view v1,v2; drop table t3; diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test index d5e5a51e8da..de7edd158e5 100644 --- a/mysql-test/t/view.test +++ b/mysql-test/t/view.test @@ -5577,11 +5577,8 @@ drop table t1,t2,t3; CREATE TABLE t3 (a INT); CREATE ALGORITHM = MERGE VIEW v1 AS SELECT t2.a FROM t3 AS t1, t3 AS t2; CREATE ALGORITHM = MERGE VIEW v2 AS SELECT * FROM v1; +--error ER_VIEW_NO_INSERT_FIELD_LIST PREPARE stmt FROM 'REPLACE INTO v2 SELECT a FROM t3'; ---error ER_VIEW_NO_INSERT_FIELD_LIST -EXECUTE stmt; ---error ER_VIEW_NO_INSERT_FIELD_LIST -EXECUTE stmt; drop view v1,v2; drop table t3; diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index 6285a1810dd..bc5007e0880 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -520,6 +520,8 @@ bool mysql_derived_merge_for_insert(THD *thd, LEX *lex, TABLE_LIST *derived) derived->merge_underlying_list != 0)); if (derived->merged_for_insert) DBUG_RETURN(FALSE); + if (derived->init_derived(thd, FALSE)) + DBUG_RETURN(TRUE); if (derived->is_materialized_derived()) DBUG_RETURN(mysql_derived_prepare(thd, lex, derived)); if ((thd->lex->sql_command == SQLCOM_UPDATE_MULTI || @@ -537,8 +539,6 @@ bool mysql_derived_merge_for_insert(THD *thd, LEX *lex, TABLE_LIST *derived) DBUG_ASSERT(derived->table); } } - else - derived->table= derived->merge_underlying_list->table; DBUG_RETURN(FALSE); }