Changeset: 5acc6a38e932 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5acc6a38e932
Modified Files:
        sql/server/rel_select.c
Branch: default
Log Message:

merged fix for bug 2928 (from Dec2011 branch)


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
@@ -3505,33 +3505,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;
@@ -3595,8 +3568,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
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to