Changeset: c8759fe46f86 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c8759fe46f86 Modified Files: sql/server/rel_optimizer.c Branch: octbugs Log Message:
Test if expression already exists in grouping list before referencing it diffs (30 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 @@ -6043,7 +6043,7 @@ rel_groupby_distinct(visitor *v, sql_rel if (is_groupby(rel->op) && rel->r && !rel_is_ref(rel)) { int nr = 0, anr = 0; list *gbe, *ngbe, *arg, *exps, *nexps; - sql_exp *distinct = NULL, *darg; + sql_exp *distinct = NULL, *darg, *found; sql_rel *l = NULL; for (n=rel->exps->h; n && nr <= 2; n = n->next) { @@ -6092,10 +6092,13 @@ rel_groupby_distinct(visitor *v, sql_rel } darg = arg->h->data; - list_append(gbe, darg = exp_copy(v->sql, darg)); - exp_label(v->sql->sa, darg, ++v->sql->label); - - darg = exp_ref(v->sql, darg); + if ((found = exps_find_exp(gbe, darg))) { /* first find if the aggregate argument already exists in the grouping list */ + darg = exp_ref(v->sql, found); + } else { + list_append(gbe, darg = exp_copy(v->sql, darg)); + exp_label(v->sql->sa, darg, ++v->sql->label); + darg = exp_ref(v->sql, darg); + } list_append(exps, darg); darg = exp_ref(v->sql, darg); arg->h->data = darg; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list