Loading BitKeeper/etc/logging_ok +1 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ bar@deer.(none) bar@gw.udmsearch.izhnet.ru bar@mysql.com bar@noter.intranet.mysql.r18.ru bell@51.0.168.192.in-addr.arpa bell@laptop.sanja.is.com.ua bell@sanja.is.com.ua bk@admin.bk Loading mysql-test/r/derived.result +19 −0 Original line number Diff line number Diff line Loading @@ -339,3 +339,22 @@ select distinct sum(b) from (select a,b from t1) y group by a; sum(b) 4 drop table t1; create table t1(a int); create table t2(a int); create table t3(a int); insert into t1 values(1),(1); insert into t2 values(2),(2); insert into t3 values(3),(3); select * from t1 union distinct select * from t2 union all select * from t3; a 1 2 3 3 select * from (select * from t1 union distinct select * from t2 union all select * from t3) X; a 1 2 3 3 drop table t1, t2, t3; mysql-test/t/derived.test +12 −0 Original line number Diff line number Diff line Loading @@ -224,3 +224,15 @@ select distinct sum(b) from t1 group by a; select distinct sum(b) from (select a,b from t1) y group by a; drop table t1; # # test of union subquery in the FROM clause with complex distinct/all (BUG#6565) # create table t1(a int); create table t2(a int); create table t3(a int); insert into t1 values(1),(1); insert into t2 values(2),(2); insert into t3 values(3),(3); select * from t1 union distinct select * from t2 union all select * from t3; select * from (select * from t1 union distinct select * from t2 union all select * from t3) X; drop table t1, t2, t3; sql/sql_derived.cc +8 −2 Original line number Diff line number Diff line Loading @@ -132,10 +132,16 @@ static int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, /* Temp table is created so that it hounours if UNION without ALL is to be processed As 'distinct' parameter we always pass FALSE (0), because underlying query will control distinct condition by itself. Correct test of distinct underlying query will be is_union && !unit->union_distinct->next_select() (i.e. it is union and last distinct SELECT is last SELECT of UNION). */ if (!(table= create_tmp_table(thd, &derived_result->tmp_table_param, unit->types, (ORDER*) 0, is_union && unit->union_distinct, 1, FALSE, 1, (first_select->options | thd->options | TMP_TABLE_ALL_COLUMNS), HA_POS_ERROR, Loading Loading
BitKeeper/etc/logging_ok +1 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ bar@deer.(none) bar@gw.udmsearch.izhnet.ru bar@mysql.com bar@noter.intranet.mysql.r18.ru bell@51.0.168.192.in-addr.arpa bell@laptop.sanja.is.com.ua bell@sanja.is.com.ua bk@admin.bk Loading
mysql-test/r/derived.result +19 −0 Original line number Diff line number Diff line Loading @@ -339,3 +339,22 @@ select distinct sum(b) from (select a,b from t1) y group by a; sum(b) 4 drop table t1; create table t1(a int); create table t2(a int); create table t3(a int); insert into t1 values(1),(1); insert into t2 values(2),(2); insert into t3 values(3),(3); select * from t1 union distinct select * from t2 union all select * from t3; a 1 2 3 3 select * from (select * from t1 union distinct select * from t2 union all select * from t3) X; a 1 2 3 3 drop table t1, t2, t3;
mysql-test/t/derived.test +12 −0 Original line number Diff line number Diff line Loading @@ -224,3 +224,15 @@ select distinct sum(b) from t1 group by a; select distinct sum(b) from (select a,b from t1) y group by a; drop table t1; # # test of union subquery in the FROM clause with complex distinct/all (BUG#6565) # create table t1(a int); create table t2(a int); create table t3(a int); insert into t1 values(1),(1); insert into t2 values(2),(2); insert into t3 values(3),(3); select * from t1 union distinct select * from t2 union all select * from t3; select * from (select * from t1 union distinct select * from t2 union all select * from t3) X; drop table t1, t2, t3;
sql/sql_derived.cc +8 −2 Original line number Diff line number Diff line Loading @@ -132,10 +132,16 @@ static int mysql_derived(THD *thd, LEX *lex, SELECT_LEX_UNIT *unit, /* Temp table is created so that it hounours if UNION without ALL is to be processed As 'distinct' parameter we always pass FALSE (0), because underlying query will control distinct condition by itself. Correct test of distinct underlying query will be is_union && !unit->union_distinct->next_select() (i.e. it is union and last distinct SELECT is last SELECT of UNION). */ if (!(table= create_tmp_table(thd, &derived_result->tmp_table_param, unit->types, (ORDER*) 0, is_union && unit->union_distinct, 1, FALSE, 1, (first_select->options | thd->options | TMP_TABLE_ALL_COLUMNS), HA_POS_ERROR, Loading