summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgkodinov@dl145s.mysql.com <>2006-10-19 15:04:12 +0200
committergkodinov@dl145s.mysql.com <>2006-10-19 15:04:12 +0200
commitc77fae407b0ed423daace82044fc034f3c6c43ff (patch)
tree3b1cae348369aff41bc05399edc6b42f12f1d6dc
parent892495acaffb5a773b72fce40d7d98f27ee6a0ae (diff)
parent1dacdd4c85685a144615b22374b1dbb86ac1ead9 (diff)
downloadmariadb-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.result15
-rw-r--r--mysql-test/t/olap.test10
-rw-r--r--sql/sql_select.cc7
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))