Changeset: 1941a34e03a5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/1941a34e03a5
Modified Files:
        sql/server/rel_optimizer.c
        sql/server/rel_rel.c
        sql/server/rel_rewriter.c
        sql/server/rel_rewriter.h
Branch: default
Log Message:

exp_push_down is no longer needed


diffs (130 lines):

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
@@ -4551,13 +4551,13 @@ rel_push_select_down(visitor *v, sql_rel
                        node *next = n->next;
                        sql_exp *e = n->data;
 
-                       if (left && exp_push_down(v->sql, e, jl)) {
+                       if (left && rel_rebind_exp(v->sql, jl, e)) {
                                if (!is_select(jl->op) || rel_is_ref(jl))
                                        r->l = jl = rel_select(v->sql->sa, jl, 
NULL);
                                rel_select_add_exp(v->sql->sa, jl, e);
                                list_remove_node(exps, NULL, n);
                                v->changes++;
-                       } else if (right && exp_push_down(v->sql, e, jr)) {
+                       } else if (right && rel_rebind_exp(v->sql, jr, e)) {
                                if (!is_select(jr->op) || rel_is_ref(jr))
                                        r->r = jr = rel_select(v->sql->sa, jr, 
NULL);
                                rel_select_add_exp(v->sql->sa, jr, e);
diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -1140,10 +1140,10 @@ rel_select_push_exp_down(mvc *sql, sql_r
 
        assert(is_select(rel->op));
        if (!is_full(r->op) && !is_single(r)) {
-               if (left && exp_push_down(sql, e, jl)) {
+               if (left && rel_rebind_exp(sql, jl, e)) {
                        done = 1;
                        r->l = jl = rel_select_add_exp(sql->sa, jl, e);
-               } else if (right && exp_push_down(sql, e, jr)) {
+               } else if (right && rel_rebind_exp(sql, jr, e)) {
                        done = 1;
                        r->r = jr = rel_select_add_exp(sql->sa, jr, e);
                }
@@ -2294,9 +2294,7 @@ rel_rebind_exp(mvc *sql, sql_rel *rel, s
        case e_column:
                return rel_find_exp(rel, e) != NULL;
        case e_atom:
-               if (e->f)
-                       return exps_rebind_exp(sql, rel, e->f);
-               return true;
+               return exps_rebind_exp(sql, rel, e->f);
        case e_psm:
                return true;
        }
diff --git a/sql/server/rel_rewriter.c b/sql/server/rel_rewriter.c
--- a/sql/server/rel_rewriter.c
+++ b/sql/server/rel_rewriter.c
@@ -207,68 +207,6 @@ rewrite_simplify(visitor *v, sql_rel *re
        return try_remove_empty_select(v, rel);
 }
 
-/* push the expression down, ie check if relation r references it */
-
-static bool _exp_push_down(mvc *sql, sql_exp *e, sql_rel *r);
-
-static bool
-exps_push_down(mvc *sql, list *exps, sql_rel *r)
-{
-       if (list_empty(exps))
-               return true;
-       for (node *n = exps->h; n; n = n->next)
-               if (!_exp_push_down(sql,  n->data, r))
-                       return false;
-       return true;
-}
-
-static bool
-_exp_push_down(mvc *sql, sql_exp *e, sql_rel *r)
-{
-       sql_exp *ne = NULL;
-
-       switch(e->type) {
-       case e_column:
-               if (e->l) {
-                       ne = rel_bind_column2(sql, r, e->l, e->r, 0);
-               } else {
-                       ne = rel_bind_column(sql, r, e->r, 0, 1);
-               }
-               if (!ne) {
-                       sql->session->status = 0;
-                       sql->errstr[0] = 0;
-                       return false;
-               }
-               if (ne->type != e_column)
-                       return false;
-               return true;
-       case e_cmp:
-               if (e->flag == cmp_or || e->flag == cmp_filter) {
-                       return exps_push_down(sql, e->l, r) && 
exps_push_down(sql, e->r, r);
-               } else if (e->flag == cmp_in || e->flag == cmp_notin) {
-                       return _exp_push_down(sql, e->l, r) && 
exps_push_down(sql, e->r, r);
-               } else {
-                       return _exp_push_down(sql, e->l, r) && 
_exp_push_down(sql, e->r, r) && (!e->f || _exp_push_down(sql, e->f, r));
-               }
-       case e_convert:
-               return _exp_push_down(sql, e->l, r);
-       case e_aggr:
-       case e_func:
-               return exps_push_down(sql, e->l, r);
-       case e_atom:
-               return exps_push_down(sql, e->f, r); /* for atom lists (ie 
e->f) validate the list, otherwise it can be always pushed */
-       case e_psm:
-               return false;
-       }
-       return false;
-}
-
-bool
-exp_push_down(mvc *sql, sql_exp *e, sql_rel *r)
-{
-       return _exp_push_down(sql, e, r);
-}
-
 sql_rel *
 rewrite_reset_used(visitor *v, sql_rel *rel)
 {
diff --git a/sql/server/rel_rewriter.h b/sql/server/rel_rewriter.h
--- a/sql/server/rel_rewriter.h
+++ b/sql/server/rel_rewriter.h
@@ -33,8 +33,6 @@ try_remove_empty_select(visitor *v, sql_
        return rel;
 }
 
-extern bool exp_push_down(mvc *sql, sql_exp *e, sql_rel *r);
-
 extern sql_rel *rewrite_reset_used(visitor *v, sql_rel *rel);
 
 #endif /*_REL_REWRITER_H_*/
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to