Changeset: 4f742df38689 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4f742df38689
Modified Files:
        sql/server/rel_optimize_proj.c
        sql/server/rel_optimize_sel.c
        sql/server/rel_statistics.c
Branch: pp_hashjoin
Log Message:

improve push func down optimizer


diffs (54 lines):

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
@@ -121,7 +121,7 @@ static sql_rel *
 rel_push_project_down(visitor *v, global_props *gp, sql_rel *rel)
 {
        (void) gp;
-       return rel_visitor_bottomup(v, rel, &rel_push_project_down_);
+       return rel_visitor_topdown(v, rel, &rel_push_project_down_);
 }
 
 run_optimizer
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
@@ -5261,7 +5261,6 @@ static inline sql_rel *
 rel_push_func_down(visitor *v, sql_rel *rel)
 {
        if ((is_select(rel->op) || is_joinop(rel->op)) && rel->l && rel->exps 
&& !(rel_is_ref(rel))) {
-               int changes = v->changes;
                sql_rel *l = rel->l, *r = rel->r;
 
                /* only push down when is useful */
@@ -5269,10 +5268,8 @@ rel_push_func_down(visitor *v, sql_rel *
                        return rel;
                if (exps_can_push_func(rel->exps, rel) && 
exps_need_push_down(rel, rel->exps) && !exps_push_single_func_down(v, rel, l, 
r, rel->exps, 0))
                        return NULL;
-               if (v->changes > changes) /* once we get a better join order, 
we can try to remove this projection */
-                       return rel_project(v->sql->sa, rel, 
rel_projections(v->sql, rel, NULL, 1, 1));
        }
-       if (is_simple_project(rel->op) && rel->l && rel->exps && !rel->r) {
+       if (is_simple_project(rel->op) && rel->l && rel->exps) {
                sql_rel *pl = rel->l;
 
                if (is_joinop(pl->op) && exps_can_push_func(rel->exps, rel)) {
diff --git a/sql/server/rel_statistics.c b/sql/server/rel_statistics.c
--- a/sql/server/rel_statistics.c
+++ b/sql/server/rel_statistics.c
@@ -998,11 +998,11 @@ rel_get_statistics_(visitor *v, sql_rel 
                                        BUN uniques_estimate = BUN_MAX;
 
                                        if (find_prop(e->p, PROP_JOINIDX)) {
-                                               //prop *lsp = find_prop(l->p, 
PROP_SELECTIVITY), *rsp = find_prop(r->p, PROP_SELECTIVITY);
-                                               //dbl ls = lsp ? 
lsp->value.dval : 1.0;
-                                               //dbl rs = rsp ? 
rsp->value.dval : 1.0;
+                                               prop *lsp = find_prop(l->p, 
PROP_SELECTIVITY), *rsp = find_prop(r->p, PROP_SELECTIVITY);
+                                               dbl ls = lsp && is_join(l->op) 
? lsp->value.dval : 1.0;
+                                               dbl rs = rsp && is_join(r->op) 
? rsp->value.dval : 1.0;
                                                join_idx_estimate = lv>rv?lv:rv;
-                                               //join_idx_estimate *= ls * rs;
+                                               join_idx_estimate *= ls * rs;
                                                if (join_idx_estimate < 1)
                                                        join_idx_estimate = 1;
                                                dbl s = 
((dbl)join_idx_estimate/(lv*rv));
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to