Changeset: 440df31088a4 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=440df31088a4
Modified Files:
sql/server/rel_select.c
sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.sql
Branch: Aug2011
Log Message:
cleaner fix for count_bug(s)
diffs (63 lines):
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -3332,33 +3332,6 @@ rel_nop(mvc *sql, sql_rel **rel, symbol
}
static sql_exp *
-flatten_exps( mvc *sql, list *exps )
-{
- node *n;
- sql_exp *e = NULL;
-
- for (n=exps->h; n; n=n->next) {
- sql_exp *c = n->data, *ne = NULL;
-
- switch(c->type) {
- case e_cmp:
- if (!c->f) {
- char *cmp = compare_func((comp_type)c->flag);
- ne = rel_binop_(sql, c->l, c->r, NULL, cmp,
card_value);
- if (!e)
- e = ne;
- else
- e = rel_binop_(sql, e, ne, NULL,
"sql_and", card_value);
- }
- break;
- default:
- assert(0);
- }
- }
- return e;
-}
-
-static sql_exp *
_rel_aggr(mvc *sql, sql_rel **rel, int distinct, char *aggrstr, symbol *sym,
int f)
{
sql_subaggr *a = NULL;
@@ -3422,8 +3395,11 @@ _rel_aggr(mvc *sql, sql_rel **rel, int d
if (groupby->r && exps_intern(groupby->r)) {
sql_rel *i = groupby->l;
- if (i->exps && f == sql_sel) {
- e = flatten_exps(sql, i->exps);
+ if (i->exps && f == sql_sel && is_join(i->op)) {
+ sql_rel *j = i->r;
+
+ e = j->exps->h->data;
+ e = exp_column(sql->sa, exp_relname(e),
exp_name(e), exp_subtype(e), exp_card(e), has_nil(e), 0);
e = exp_aggr1(sql->sa, e, a, distinct, 1,
groupby->card, 0);
return e;
}
diff --git a/sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.sql
b/sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.sql
--- a/sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.sql
+++ b/sql/test/BugTracker-2009/Tests/count_bug.SF-2604583.sql
@@ -2,7 +2,7 @@ create table countt1( a int , b int ) ;
insert into countt1 values ( 3, 1 ) , ( 4, 2 ) , ( 5, 3 ) , ( 6, 4 ) , ( 7, 5
) ;
select * from countt1;
-select ( select count( * )+1 from countt1 as tt3 where tt3.b < tt2.b ) from
countt1 as tt2 ;
+select ( select count( * )+1 from countt1 as tt3 where tt3.b < tt2.b ) from
countt1 as tt2;
--the result : the last SQL should returns 1,2,3,4,5 , not null,2,3,4,5
drop table countt1;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list