diff --git a/mysql-test/r/derived.result b/mysql-test/r/derived.result index a4c994f874552..d0ac61493c254 100644 --- a/mysql-test/r/derived.result +++ b/mysql-test/r/derived.result @@ -1080,5 +1080,21 @@ f drop view v1; drop table t1; # +# MDEV-11363: Assertion `!derived->first_sel ect()->first_inner_unit() || +# derived->first_select()->first_inner_unit()->first_select()-> +# exclude_from_table_unique_test' failed in +# TABLE_LIST::set_check_materialized() +# +CREATE TABLE t1 (f1 INT); +CREATE TABLE t2 (f2 INT); +CREATE TABLE t3 (f3 INT); +CREATE VIEW v1 AS ( SELECT f1 AS f FROM t1 ) UNION ( SELECT f2 AS f FROM t2 ); +CREATE VIEW v2 AS SELECT f3 AS f FROM t3; +CREATE VIEW v3 AS SELECT f FROM ( SELECT f3 AS f FROM v1, t3 ) AS sq; +CREATE VIEW v4 AS SELECT COUNT(*) as f FROM v3; +REPLACE INTO v2 ( SELECT * FROM v4 ) UNION ( SELECT f FROM v2 ); +drop view v1,v2,v3,v4; +drop table t1,t2,t3; +# # End of 10.2 tests # diff --git a/mysql-test/t/derived.test b/mysql-test/t/derived.test index 318cf584348f1..121e274ceebda 100644 --- a/mysql-test/t/derived.test +++ b/mysql-test/t/derived.test @@ -928,6 +928,25 @@ EXECUTE stmt; drop view v1; drop table t1; +--echo # +--echo # MDEV-11363: Assertion `!derived->first_sel ect()->first_inner_unit() || +--echo # derived->first_select()->first_inner_unit()->first_select()-> +--echo # exclude_from_table_unique_test' failed in +--echo # TABLE_LIST::set_check_materialized() +--echo # + +CREATE TABLE t1 (f1 INT); +CREATE TABLE t2 (f2 INT); +CREATE TABLE t3 (f3 INT); +CREATE VIEW v1 AS ( SELECT f1 AS f FROM t1 ) UNION ( SELECT f2 AS f FROM t2 ); +CREATE VIEW v2 AS SELECT f3 AS f FROM t3; +CREATE VIEW v3 AS SELECT f FROM ( SELECT f3 AS f FROM v1, t3 ) AS sq; +CREATE VIEW v4 AS SELECT COUNT(*) as f FROM v3; +REPLACE INTO v2 ( SELECT * FROM v4 ) UNION ( SELECT f FROM v2 ); + +drop view v1,v2,v3,v4; +drop table t1,t2,t3; + --echo # --echo # End of 10.2 tests --echo # diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 4f87d4983007d..65cfe99649e68 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -1060,7 +1060,7 @@ TABLE_LIST* find_dup_table(THD *thd, TABLE_LIST *table, TABLE_LIST *table_list, { /* Try to fix */ TABLE_LIST *derived= res->belong_to_derived; - if (derived->is_merged_derived()) + if (derived->is_merged_derived() && !derived->derived->is_excluded()) { DBUG_PRINT("info", ("convert merged to materialization to resolve the conflict"));