Commit 9ca76cbc authored by unknown's avatar unknown

Fix bug#12887 Distinct is not always applied after rollup

For queries with GROUP BY and without hidden GROUP BY fields DISTINCT is
optimized away becuase such queries produce result set without duplicates.
But ROLLUP can add rows which may be same to some rows and this fact was
ignored.

Added check so if ROLLUP is present DISTINCT can't be optimized away.


sql/sql_select.cc:
  Fix bug #12887 Distinct is not always applied after rollup
mysql-test/r/olap.result:
  Test case for bug #12887 Distinct is not always applied after rollup
mysql-test/t/olap.test:
  Test case for bug #12887 Distinct is not always applied after rollup
parent 54b3c412
...@@ -529,3 +529,15 @@ a LENGTH(a) COUNT(*) ...@@ -529,3 +529,15 @@ a LENGTH(a) COUNT(*)
2 1 1 2 1 1
NULL NULL 2 NULL NULL 2
DROP TABLE t1; DROP TABLE t1;
create table t1 ( a varchar(9), b int );
insert into t1 values('a',1),(null,2);
select a, max(b) from t1 group by a with rollup;
a max(b)
NULL 2
a 1
NULL 2
select distinct a, max(b) from t1 group by a with rollup;
a max(b)
NULL 2
a 1
drop table t1;
...@@ -263,4 +263,13 @@ SELECT * FROM (SELECT a, LENGTH(a), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP) t; ...@@ -263,4 +263,13 @@ SELECT * FROM (SELECT a, LENGTH(a), COUNT(*) FROM t1 GROUP BY a WITH ROLLUP) t;
DROP TABLE t1; DROP TABLE t1;
#
# Bug #12887 Distinct is not always applied after rollup
#
create table t1 ( a varchar(9), b int );
insert into t1 values('a',1),(null,2);
select a, max(b) from t1 group by a with rollup;
select distinct a, max(b) from t1 group by a with rollup;
drop table t1;
# End of 4.1 tests # End of 4.1 tests
...@@ -618,7 +618,7 @@ JOIN::optimize() ...@@ -618,7 +618,7 @@ JOIN::optimize()
} }
if (group_list || tmp_table_param.sum_func_count) if (group_list || tmp_table_param.sum_func_count)
{ {
if (! hidden_group_fields) if (! hidden_group_fields && rollup.state == ROLLUP::STATE_NONE)
select_distinct=0; select_distinct=0;
} }
else if (select_distinct && tables - const_tables == 1) else if (select_distinct && tables - const_tables == 1)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment