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

Reply via email to