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