Commit 5e1fe0f8 authored by unknown's avatar unknown

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


sql/sql_select.cc:
  Auto merged
mysql-test/r/olap.result:
  SCCS merged
parents d3018677 9bfaab57
...@@ -592,6 +592,21 @@ a max(b) ...@@ -592,6 +592,21 @@ a max(b)
NULL 2 NULL 2
a 1 a 1
drop table t1; 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)); CREATE TABLE t1(id int, type char(1));
INSERT INTO t1 VALUES INSERT INTO t1 VALUES
(1,"A"),(2,"C"),(3,"A"),(4,"A"),(5,"B"), (1,"A"),(2,"C"),(3,"A"),(4,"A"),(5,"B"),
......
...@@ -283,6 +283,15 @@ select a, max(b) from t1 group by a with rollup; ...@@ -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; select distinct a, max(b) from t1 group by a with rollup;
drop table t1; 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 # End of 4.1 tests
# #
...@@ -318,4 +327,3 @@ SELECT * FROM v1; ...@@ -318,4 +327,3 @@ SELECT * FROM v1;
DROP VIEW v1; DROP VIEW v1;
DROP TABLE t1; DROP TABLE t1;
# End of 4.1 tests
...@@ -14156,12 +14156,17 @@ bool JOIN::rollup_init() ...@@ -14156,12 +14156,17 @@ bool JOIN::rollup_init()
while ((item= it++)) while ((item= it++))
{ {
ORDER *group_tmp; ORDER *group_tmp;
bool found_in_group= 0;
for (group_tmp= group_list; group_tmp; group_tmp= group_tmp->next) for (group_tmp= group_list; group_tmp; group_tmp= group_tmp->next)
{ {
if (*group_tmp->item == item) if (*group_tmp->item == item)
{
item->maybe_null= 1; 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; bool changed= FALSE;
if (change_group_ref(thd, (Item_func *) item, group_list, &changed)) if (change_group_ref(thd, (Item_func *) item, group_list, &changed))
......
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