Changeset: 259e84e5ed08 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/259e84e5ed08 Modified Files: sql/server/rel_exp.c sql/server/rel_optimize_proj.c sql/server/rel_optimize_sel.c sql/server/rel_select.c Branch: label Log Message:
only reference when needed. diffs (75 lines): diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -807,13 +807,13 @@ exp_ref(mvc *sql, sql_exp *e) sql_exp * exp_ref_save(mvc *sql, sql_exp *e) { + if (e->type == e_column) + return e; if (is_atom(e->type)) return exp_copy(sql, e); - if (!exp_name(e) || is_convert(e->type)) + if (!e->alias.label || !exp_name(e)) exp_label(sql->sa, e, ++sql->label); - if (!e->alias.label) - exp_label(sql->sa, e, ++sql->label); - if (e->type != e_column) + if (e->type != e_column) /* ref as referenced within the (same) rank expression */ e->ref = 1; sql_exp *ne = exp_ref(sql, e); if (ne && is_freevar(e)) 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 @@ -1590,7 +1590,7 @@ rel_simplify_sum(visitor *v, sql_rel *re /* a column reference can be prepended to the inner relation, add it after all the check type calls succeed */ if (prepend) - list_prepend(l->exps, exp_ref(v->sql, col)); + list_prepend(l->exps, col); /* the new generate function calls are valid, update relations */ /* we need a new relation for the multiplication and addition/subtraction */ diff --git a/sql/server/rel_optimize_sel.c b/sql/server/rel_optimize_sel.c --- a/sql/server/rel_optimize_sel.c +++ b/sql/server/rel_optimize_sel.c @@ -1992,6 +1992,8 @@ find_fk( mvc *sql, list *rels, list *exp i = rel_find_column(sql, orr, l->l, iname); if (!t || !i) continue; + t->p = NULL; + i->p = NULL; je = exp_compare(sql->sa, i, t, cmp_equal); } else { sql_exp *s = je->r, *l = je->l; @@ -2000,6 +2002,8 @@ find_fk( mvc *sql, list *rels, list *exp i = rel_find_column(sql, olr, l->l, iname); if (!t || !i) continue; + t->p = NULL; + i->p = NULL; je = exp_compare(sql->sa, i, t, cmp_equal); } diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -1421,6 +1421,8 @@ rel_column_ref(sql_query *query, sql_rel else exp->card = CARD_ATOM; set_freevar(exp, i); + if (exp->alias.label == exp->nid) + exp->alias.label = -(sql->nid++); if (!is_sql_where(of) && !is_sql_aggr(of) && !is_sql_aggr(f) && !outer->grouped) set_outer(outer); } @@ -1517,6 +1519,8 @@ rel_column_ref(sql_query *query, sql_rel else exp->card = CARD_ATOM; set_freevar(exp, i); + if (exp->alias.label == exp->nid) + exp->alias.label = -(sql->nid++); if (!is_sql_where(of) && !is_sql_aggr(of) && !is_sql_aggr(f) && !outer->grouped) set_outer(outer); } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org