Changeset: b81313d6a11d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/b81313d6a11d Modified Files: sql/server/rel_optimize_exps.c sql/server/rel_optimize_others.c sql/server/rel_optimize_proj.c sql/server/rel_optimize_sel.c sql/server/rel_optimizer.c sql/server/rel_optimizer_private.h sql/server/sql_mvc.c Branch: sqloptimizer Log Message:
Cleanup, use an optimizer binder because later depending on how optimizers are set by the users, different iterations could be returned diffs (truncated from 900 to 300 lines): diff --git a/sql/server/rel_optimize_exps.c b/sql/server/rel_optimize_exps.c --- a/sql/server/rel_optimize_exps.c +++ b/sql/server/rel_optimize_exps.c @@ -361,19 +361,19 @@ rel_simplify_math_(visitor *v, sql_rel * return rel; } -bool -can_simplify_math(visitor *v, global_props *gp) -{ - return gp->opt_cycle == 0 && gp->opt_level == 1 && v->value_based_opt && (gp->cnt[op_project] || gp->cnt[op_ddl] || gp->cnt[ddl_psm]); -} - -sql_rel * +static sql_rel * rel_simplify_math(visitor *v, global_props *gp, sql_rel *rel) { (void) gp; return rel_visitor_bottomup(v, rel, &rel_simplify_math_); } +run_optimizer +bind_simplify_math(visitor *v, global_props *gp) +{ + return gp->opt_cycle == 0 && gp->opt_level == 1 && v->value_based_opt && (gp->cnt[op_project] || gp->cnt[op_ddl] || gp->cnt[ddl_psm]) ? rel_simplify_math : NULL; +} + /* * Casting decimal values on both sides of a compare expression is expensive, @@ -778,16 +778,16 @@ rel_optimize_exps_(visitor *v, sql_rel * return e; } -bool -can_optimize_exps(visitor *v, global_props *gp) -{ - (void) v; - return gp->opt_cycle < 2 && gp->opt_level == 1 && (gp->cnt[op_project] || gp->cnt[op_join] || gp->cnt[op_left] || gp->cnt[op_right] || gp->cnt[op_full] || gp->cnt[op_semi] || gp->cnt[op_anti] || gp->cnt[op_select]); -} - -sql_rel * +static sql_rel * rel_optimize_exps(visitor *v, global_props *gp, sql_rel *rel) { (void) gp; return rel_exp_visitor_bottomup(v, rel, &rel_optimize_exps_, false); } + +run_optimizer +bind_optimize_exps(visitor *v, global_props *gp) +{ + (void) v; + return gp->opt_cycle < 2 && gp->opt_level == 1 && (gp->cnt[op_project] || gp->cnt[op_join] || gp->cnt[op_left] || gp->cnt[op_right] || gp->cnt[op_full] || gp->cnt[op_semi] || gp->cnt[op_anti] || gp->cnt[op_select]) ? rel_optimize_exps : NULL; +} diff --git a/sql/server/rel_optimize_others.c b/sql/server/rel_optimize_others.c --- a/sql/server/rel_optimize_others.c +++ b/sql/server/rel_optimize_others.c @@ -994,20 +994,21 @@ rel_dce_(mvc *sql, sql_rel *rel) } /* Remove unused expressions */ -bool -can_dce(visitor *v, global_props *gp) -{ - (void) v; - return gp->opt_cycle == 0 && gp->opt_level == 1; -} - -sql_rel * +static sql_rel * rel_dce(visitor *v, global_props *gp, sql_rel *rel) { (void) gp; return rel_dce_(v->sql, rel); } +run_optimizer +bind_dce(visitor *v, global_props *gp) +{ + (void) v; + return gp->opt_cycle == 0 && gp->opt_level == 1 ? rel_dce : NULL; +} + + static int topn_sample_save_exps( list *exps ) { @@ -1248,16 +1249,16 @@ rel_push_topn_and_sample_down_(visitor * return rel; } -bool -can_push_topn_and_sample_down(visitor *v, global_props *gp) -{ - (void) v; - return gp->opt_level == 1 && (gp->cnt[op_topn] || gp->cnt[op_sample]); -} - -sql_rel * +static sql_rel * rel_push_topn_and_sample_down(visitor *v, global_props *gp, sql_rel *rel) { (void) gp; return rel_visitor_topdown(v, rel, &rel_push_topn_and_sample_down_); } + +run_optimizer +bind_push_topn_and_sample_down(visitor *v, global_props *gp) +{ + (void) v; + return gp->opt_level == 1 && (gp->cnt[op_topn] || gp->cnt[op_sample]) ? rel_push_topn_and_sample_down : NULL; +} 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 @@ -93,20 +93,20 @@ rel_push_project_down_(visitor *v, sql_r return rel; } -bool -can_push_project_down(visitor *v, global_props *gp) -{ - (void) v; - return gp->opt_level == 1 && (gp->cnt[op_project] || gp->cnt[op_groupby]); -} - -sql_rel * +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_); } +run_optimizer +bind_push_project_down(visitor *v, global_props *gp) +{ + (void) v; + return gp->opt_level == 1 && (gp->cnt[op_project] || gp->cnt[op_groupby]) ? rel_push_project_down : NULL; +} + static bool exp_shares_exps(sql_exp *e, list *shared, uint64_t *uses); @@ -303,20 +303,20 @@ rel_merge_projects_(visitor *v, sql_rel return rel; } -bool -can_merge_projects(visitor *v, global_props *gp) -{ - (void) v; - return gp->opt_level == 1 && (gp->cnt[op_project] || gp->cnt[op_groupby]); -} - -sql_rel * +static sql_rel * rel_merge_projects(visitor *v, global_props *gp, sql_rel *rel) { (void) gp; return rel_visitor_bottomup(v, rel, &rel_merge_projects_); } +run_optimizer +bind_merge_projects(visitor *v, global_props *gp) +{ + (void) v; + return gp->opt_level == 1 && (gp->cnt[op_project] || gp->cnt[op_groupby]) ? rel_merge_projects : NULL; +} + static int exps_has_setjoin(list *exps) @@ -674,20 +674,20 @@ rel_push_project_up_(visitor *v, sql_rel return rel; } -bool -can_push_project_up(visitor *v, global_props *gp) -{ - (void) v; - return gp->opt_level == 1 && gp->cnt[op_project]; -} - -sql_rel * +static sql_rel * rel_push_project_up(visitor *v, global_props *gp, sql_rel *rel) { (void) gp; return rel_visitor_bottomup(v, rel, &rel_push_project_up_); } +run_optimizer +bind_push_project_up(visitor *v, global_props *gp) +{ + (void) v; + return gp->opt_level == 1 && gp->cnt[op_project] ? rel_push_project_up : NULL; +} + static void split_exps(mvc *sql, list *exps, sql_rel *rel); @@ -871,29 +871,22 @@ rel_split_project_(visitor *v, sql_rel * return rel; } -bool -can_split_project(visitor *v, global_props *gp) -{ - (void) v; - return gp->opt_cycle == 0 && gp->opt_level == 1 && (gp->cnt[op_project] || gp->cnt[op_groupby]); -} - -sql_rel * +static sql_rel * rel_split_project(visitor *v, global_props *gp, sql_rel *rel) { (void) gp; return rel_split_project_(v, rel, 1); } - -bool -can_project_reduce_casts(visitor *v, global_props *gp) +run_optimizer +bind_split_project(visitor *v, global_props *gp) { (void) v; - return gp->cnt[op_project]; + return gp->opt_cycle == 0 && gp->opt_level == 1 && (gp->cnt[op_project] || gp->cnt[op_groupby]) ? rel_split_project : NULL; } -sql_rel * + +static sql_rel * rel_project_reduce_casts(visitor *v, global_props *gp, sql_rel *rel) { if (!rel) @@ -940,6 +933,13 @@ rel_project_reduce_casts(visitor *v, glo return rel; } +run_optimizer +bind_project_reduce_casts(visitor *v, global_props *gp) +{ + (void) v; + return gp->cnt[op_project] ? rel_project_reduce_casts : NULL; +} + static sql_rel * exp_skip_output_parts(sql_rel *rel) @@ -1268,20 +1268,20 @@ rel_optimize_unions_bottomup_(visitor *v return rel; } -bool -can_optimize_unions_bottomup(visitor *v, global_props *gp) -{ - (void) v; - return gp->opt_level == 1 && gp->cnt[op_union]; -} - -sql_rel * +static sql_rel * rel_optimize_unions_bottomup(visitor *v, global_props *gp, sql_rel *rel) { (void) gp; return rel_visitor_bottomup(v, rel, &rel_optimize_unions_bottomup_); } +run_optimizer +bind_optimize_unions_bottomup(visitor *v, global_props *gp) +{ + (void) v; + return gp->opt_level == 1 && gp->cnt[op_union] ? rel_optimize_unions_bottomup : NULL; +} + static inline sql_rel * rel_project_cse(visitor *v, sql_rel *rel) @@ -2480,20 +2480,20 @@ rel_optimize_projections_(visitor *v, sq return rel; } -bool -can_optimize_projections(visitor *v, global_props *gp) -{ - (void) v; - return gp->opt_level == 1 && (gp->cnt[op_groupby] || gp->cnt[op_project] || gp->cnt[op_union] || gp->cnt[op_inter] || gp->cnt[op_except]); -} - -sql_rel * +static sql_rel * rel_optimize_projections(visitor *v, global_props *gp, sql_rel *rel) { (void) gp; return rel_visitor_topdown(v, rel, &rel_optimize_projections_); } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org