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 -- [email protected]
To unsubscribe send an email to [email protected]