Loading mysql-test/r/view.result +12 −0 Original line number Diff line number Diff line Loading @@ -2097,3 +2097,15 @@ select * from v1; f1 1 drop view v1; create table t1 (f1 int); create table t2 (f1 int); insert into t1 values (1); insert into t2 values (2); create view v1 as select * from t1 union select * from t2 union all select * from t2; select * from v1; f1 1 2 2 drop view v1; drop table t1,t2; mysql-test/t/view.test +12 −0 Original line number Diff line number Diff line Loading @@ -1942,3 +1942,15 @@ DROP TABLE t1,t2,t3,t4,t5; create view v1 as select timestampdiff(day,'1997-01-01 00:00:00','1997-01-02 00:00:00') as f1; select * from v1; drop view v1; # # Bug #10624 Views with multiple UNION and UNION ALL produce incorrect results # create table t1 (f1 int); create table t2 (f1 int); insert into t1 values (1); insert into t2 values (2); create view v1 as select * from t1 union select * from t2 union all select * from t2; select * from v1; drop view v1; drop table t1,t2; sql/sql_lex.cc +4 −1 Original line number Diff line number Diff line Loading @@ -1511,13 +1511,16 @@ bool st_select_lex::setup_ref_array(THD *thd, uint order_group_num) void st_select_lex_unit::print(String *str) { bool union_all= !union_distinct; for (SELECT_LEX *sl= first_select(); sl; sl= sl->next_select()) { if (sl != first_select()) { str->append(" union ", 7); if (!union_distinct) if (union_all) str->append("all ", 4); else if (union_distinct == sl) union_all= true; } if (sl->braces) str->append('('); Loading Loading
mysql-test/r/view.result +12 −0 Original line number Diff line number Diff line Loading @@ -2097,3 +2097,15 @@ select * from v1; f1 1 drop view v1; create table t1 (f1 int); create table t2 (f1 int); insert into t1 values (1); insert into t2 values (2); create view v1 as select * from t1 union select * from t2 union all select * from t2; select * from v1; f1 1 2 2 drop view v1; drop table t1,t2;
mysql-test/t/view.test +12 −0 Original line number Diff line number Diff line Loading @@ -1942,3 +1942,15 @@ DROP TABLE t1,t2,t3,t4,t5; create view v1 as select timestampdiff(day,'1997-01-01 00:00:00','1997-01-02 00:00:00') as f1; select * from v1; drop view v1; # # Bug #10624 Views with multiple UNION and UNION ALL produce incorrect results # create table t1 (f1 int); create table t2 (f1 int); insert into t1 values (1); insert into t2 values (2); create view v1 as select * from t1 union select * from t2 union all select * from t2; select * from v1; drop view v1; drop table t1,t2;
sql/sql_lex.cc +4 −1 Original line number Diff line number Diff line Loading @@ -1511,13 +1511,16 @@ bool st_select_lex::setup_ref_array(THD *thd, uint order_group_num) void st_select_lex_unit::print(String *str) { bool union_all= !union_distinct; for (SELECT_LEX *sl= first_select(); sl; sl= sl->next_select()) { if (sl != first_select()) { str->append(" union ", 7); if (!union_distinct) if (union_all) str->append("all ", 4); else if (union_distinct == sl) union_all= true; } if (sl->braces) str->append('('); Loading