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 -- [email protected]
To unsubscribe send an email to [email protected]