diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result index ca08c53cabe..ff155e5fe15 100644 --- a/mysql-test/r/view.result +++ b/mysql-test/r/view.result @@ -5500,6 +5500,20 @@ a b a b a c 9 10 9 10 9 10 drop view v1; drop table t1,t2; +create table t1 (i int not null); +insert into t1 values (1),(2); +create table t2 (j int not null); +insert into t2 values (11),(12); +create algorithm=merge view v3 as select t1.* from t2 left join t1 on (t2.j = t1.i); +prepare stmt from 'select count(v3.i) from t1, v3'; +execute stmt; +count(v3.i) +0 +execute stmt; +count(v3.i) +0 +drop table t1, t2; +drop view v3; # ----------------------------------------------------------------- # -- End of 10.0 tests. # ----------------------------------------------------------------- diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test index 6029ad471f6..eb905b5c4df 100644 --- a/mysql-test/t/view.test +++ b/mysql-test/t/view.test @@ -5364,6 +5364,21 @@ select * from t2, t1, v1 where t1.a=t2.a and t1.a=v1.a; drop view v1; drop table t1,t2; +# +# MDEV-6785 Wrong result on 2nd execution of PS with aggregate function, FROM SQ or MERGE view +# + +create table t1 (i int not null); +insert into t1 values (1),(2); +create table t2 (j int not null); +insert into t2 values (11),(12); +create algorithm=merge view v3 as select t1.* from t2 left join t1 on (t2.j = t1.i); +prepare stmt from 'select count(v3.i) from t1, v3'; +execute stmt; +execute stmt; +drop table t1, t2; +drop view v3; + --echo # ----------------------------------------------------------------- --echo # -- End of 10.0 tests. --echo # ----------------------------------------------------------------- diff --git a/sql/sql_derived.cc b/sql/sql_derived.cc index d3b3c11c4ac..14e26fbefa6 100644 --- a/sql/sql_derived.cc +++ b/sql/sql_derived.cc @@ -465,8 +465,6 @@ bool mysql_derived_merge(THD *thd, LEX *lex, TABLE_LIST *derived) } } - if (!derived->merged_for_insert) - dt_select->first_cond_optimization= FALSE; // consider it optimized exit_merge: if (arena) thd->restore_active_arena(arena, &backup); diff --git a/sql/sql_select.cc b/sql/sql_select.cc index ce17adf44d4..12cfa12cab9 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -633,7 +633,7 @@ inline int setup_without_group(THD *thd, Item **ref_pointer_array, res= setup_conds(thd, tables, leaves, conds); if (thd->lex->current_select->first_cond_optimization) { - if (!res && *conds) + if (!res && *conds && ! thd->lex->current_select->merged_into) (*reserved)= (*conds)->exists2in_reserved_items(); else (*reserved)= 0;