Changeset: 8100aad4d63e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/8100aad4d63e Modified Files: sql/server/rel_optimize_proj.c Branch: Dec2023 Log Message:
only rewrite project if needed (in this case if some expressions point to the same inner column) diffs (51 lines): diff --git a/sql/server/rel_optimize_proj.c b/sql/server/rel_optimize_proj.c --- a/sql/server/rel_optimize_proj.c +++ b/sql/server/rel_optimize_proj.c @@ -456,22 +456,36 @@ rel_push_project_up_(visitor *v, sql_rel * project () [ i.i L1, i.i L2 ] -> project() [ i.i L1, L1 L2 ] */ if (list_length(rel->exps) > 1) { list *exps = rel->exps; - rel->exps = sa_list(v->sql->sa); node *n = exps->h; - list_append(rel->exps, n->data); - for(n = n->next; n; n = n->next) { + bool needed = false; + for(n = n->next; n && !needed; n = n->next) { sql_exp *e = n->data; if (e->type == e_column && !is_selfref(e)) { - node *m = list_find(rel->exps, e, (fcmp)&exp_match_exp_cmp); - if (m) { - sql_exp *ne = exp_ref(v->sql, m->data); - exp_setname(v->sql->sa, ne, exp_relname(e), exp_name(e)); - exp_propagate(v->sql->sa, ne, e); - set_selfref(ne); - e = ne; + for(node *m = exps->h; m && m != n && !needed; m = m->next) { + sql_exp *h = m->data; + if (exp_match_exp(h,e)) + needed = true; } } - list_append(rel->exps, e); + } + if (needed) { + rel->exps = sa_list(v->sql->sa); + node *n = exps->h; + list_append(rel->exps, n->data); + for(n = n->next; n; n = n->next) { + sql_exp *e = n->data; + if (e->type == e_column && !is_selfref(e)) { + node *m = list_find(rel->exps, e, (fcmp)&exp_match_exp_cmp); + if (m) { + sql_exp *ne = exp_ref(v->sql, m->data); + exp_setname(v->sql->sa, ne, exp_relname(e), exp_name(e)); + exp_propagate(v->sql->sa, ne, e); + set_selfref(ne); + e = ne; + } + } + list_append(rel->exps, e); + } } } } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org