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

fixed bug 3920 and 3921, make sure we name aggregation expressions
properly.


diffs (44 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -2119,15 +2119,15 @@ rel_distinct_project2groupby(int *change
                rel->l = rel_project(sql->sa, rel->l, rel->exps);
 
                for (n = rel->exps->h; n; n = n->next) {
-                       sql_exp *e = n->data;
-
+                       sql_exp *e = n->data, *ne;
+
+                       if (!exp_name(e))
+                               exp_label(sql->sa, e, ++sql->label);
+                       ne = exp_column(sql->sa, exp_relname(e), exp_name(e), 
exp_subtype(e), exp_card(e), has_nil(e), 0);
                        if (e->card > CARD_ATOM) { /* no need to group by on 
constants */
-                               if (!exp_name(e))
-                                       exp_label(sql->sa, e, ++sql->label);
-                               e = exp_column(sql->sa, exp_relname(e), 
exp_name(e), exp_subtype(e), exp_card(e), has_nil(e), 0);
-                               append(gbe, e);
+                               append(gbe, ne);
                        }
-                       append(exps, e);
+                       append(exps, ne);
                }
                rel->op = op_groupby;
                rel->exps = exps;
@@ -4580,6 +4580,8 @@ rel_groupby_distinct2(int *changes, mvc 
                        list *args = e->l;
                        sql_exp *v = args->h->data;
                        append(gbes, v);
+                       if (!exp_name(v))
+                               exp_label(sql->sa, v, ++sql->label);
                        v = exp_column(sql->sa, exp_find_rel_name(v), 
exp_name(v), exp_subtype(v), v->card, has_nil(v), is_intern(v));
                        append(aggrs, v);
                        v = exp_aggr1(sql->sa, v, e->f, need_distinct(e), 1, 
e->card, 1);
@@ -4592,6 +4594,8 @@ rel_groupby_distinct2(int *changes, mvc 
                        sql_subaggr *a = sql_bind_aggr(sql->sa, 
sql->session->schema, (cnt)?"sum":f->aggr->base.name, exp_subtype(e));
 
                        append(aggrs, e);
+                       if (!exp_name(e))
+                               exp_label(sql->sa, e, ++sql->label);
                        v = exp_column(sql->sa, exp_find_rel_name(e), 
exp_name(e), exp_subtype(e), e->card, has_nil(e), is_intern(e));
                        set_has_nil(v);
                        v = exp_aggr1(sql->sa, v, a, 0, 1, e->card, 1);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to