Changeset: 054a2242663a for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=054a2242663a Modified Files: sql/rel.txt sql/server/rel_optimizer.c Branch: Jan2014 Log Message:
fixed reduce_groupby optimizer to remove constants diffs (71 lines): diff --git a/sql/rel.txt b/sql/rel.txt --- a/sql/rel.txt +++ b/sql/rel.txt @@ -106,7 +106,7 @@ e_convert e_cmp -> l left sub expression - -> r right sub expression (f second arg for range expressions) + -> r right sub expression (f second arg (->f) for range expressions) -> flag compare type ( cmp_gt = 0, cmp_gte = 1, 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 @@ -3940,6 +3940,55 @@ rel_reduce_groupby_exps(int *changes, mv free(tbls); free(scores); } + /* remove constants from group by list */ + if (is_groupby(rel->op) && rel->r && !rel_is_ref(rel)) { + int i; + node *n; + + for (i = 0, n = gbe->h; n; n = n->next) { + sql_exp *e = n->data; + + if (exp_is_atom(e)) + i++; + } + if (i) { + list *ngbe = new_exp_list(sql->sa); + list *dgbe = new_exp_list(sql->sa); + + for (n = gbe->h; n; n = n->next) { + sql_exp *e = n->data; + + if (!exp_is_atom(e)) + append(ngbe, e); + else + append(dgbe, e); + } + rel->r = ngbe; + if (!list_empty(dgbe)) { + /* use atom's directly in the aggr expr list */ + list *nexps = new_exp_list(sql->sa); + + for (n = rel->exps->h; n; n = n->next) { + sql_exp *e = n->data, *ne = NULL; + + if (is_column(e->type)) { + if (e->l) + ne = exps_bind_column2(dgbe, e->l, e->r); + else + ne = exps_bind_column(dgbe, e->r, NULL); + if (ne) { + ne = exp_copy(sql->sa, ne); + exp_setname(sql->sa, ne, e->rname, e->name); + e = ne; + } + } + append(nexps, e); + } + rel->exps = nexps; + } + (*changes)++; + } + } return rel; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list