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