diff options
author | gkodinov@dl145s.mysql.com <> | 2006-10-19 15:04:12 +0200 |
---|---|---|
committer | gkodinov@dl145s.mysql.com <> | 2006-10-19 15:04:12 +0200 |
commit | c77fae407b0ed423daace82044fc034f3c6c43ff (patch) | |
tree | 3b1cae348369aff41bc05399edc6b42f12f1d6dc | |
parent | 892495acaffb5a773b72fce40d7d98f27ee6a0ae (diff) | |
parent | 1dacdd4c85685a144615b22374b1dbb86ac1ead9 (diff) | |
download | mariadb-git-c77fae407b0ed423daace82044fc034f3c6c43ff.tar.gz |
Merge dl145s.mysql.com:/data/bk/team_tree_merge/MERGE/mysql-4.1-opt
into dl145s.mysql.com:/data/bk/team_tree_merge/MERGE/mysql-5.0-opt
-rw-r--r-- | mysql-test/r/olap.result | 15 | ||||
-rw-r--r-- | mysql-test/t/olap.test | 10 | ||||
-rw-r--r-- | sql/sql_select.cc | 7 |
3 files changed, 30 insertions, 2 deletions
diff --git a/mysql-test/r/olap.result b/mysql-test/r/olap.result index 7cdd5e1b152..a392de613f8 100644 --- a/mysql-test/r/olap.result +++ b/mysql-test/r/olap.result @@ -592,6 +592,21 @@ a max(b) NULL 2 a 1 drop table t1; +create table t1 (a varchar(22) not null , b int); +insert into t1 values ("2006-07-01 21:30", 1), ("2006-07-01 23:30", 10); +select left(a,10), a, sum(b) from t1 group by 1,2 with rollup; +left(a,10) a sum(b) +2006-07-01 2006-07-01 21:30 1 +2006-07-01 2006-07-01 23:30 10 +2006-07-01 NULL 11 +NULL NULL 11 +select left(a,10) x, a, sum(b) from t1 group by x,a with rollup; +x a sum(b) +2006-07-01 2006-07-01 21:30 1 +2006-07-01 2006-07-01 23:30 10 +2006-07-01 NULL 11 +NULL NULL 11 +drop table t1; CREATE TABLE t1(id int, type char(1)); INSERT INTO t1 VALUES (1,"A"),(2,"C"),(3,"A"),(4,"A"),(5,"B"), diff --git a/mysql-test/t/olap.test b/mysql-test/t/olap.test index e34ac6a865c..4e5e7b72fc8 100644 --- a/mysql-test/t/olap.test +++ b/mysql-test/t/olap.test @@ -283,6 +283,15 @@ 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; +# +# Bug #20825: rollup puts non-equal values together +# +create table t1 (a varchar(22) not null , b int); +insert into t1 values ("2006-07-01 21:30", 1), ("2006-07-01 23:30", 10); +select left(a,10), a, sum(b) from t1 group by 1,2 with rollup; +select left(a,10) x, a, sum(b) from t1 group by x,a with rollup; +drop table t1; + # End of 4.1 tests # @@ -318,4 +327,3 @@ SELECT * FROM v1; DROP VIEW v1; DROP TABLE t1; -# End of 4.1 tests diff --git a/sql/sql_select.cc b/sql/sql_select.cc index cb1c393457e..f86e9a13d53 100644 --- a/sql/sql_select.cc +++ b/sql/sql_select.cc @@ -14156,12 +14156,17 @@ bool JOIN::rollup_init() while ((item= it++)) { ORDER *group_tmp; + bool found_in_group= 0; + for (group_tmp= group_list; group_tmp; group_tmp= group_tmp->next) { if (*group_tmp->item == item) + { item->maybe_null= 1; + found_in_group= 1; + } } - if (item->type() == Item::FUNC_ITEM) + if (item->type() == Item::FUNC_ITEM && !found_in_group) { bool changed= FALSE; if (change_group_ref(thd, (Item_func *) item, group_list, &changed)) |