Changeset: 4fc3d574bdcd for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4fc3d574bdcd
Modified Files:
sql/server/rel_optimize_sel.c
sql/server/rel_rewriter.c
Branch: pp_hashjoin
Log Message:
improve uniqueness check and redundant join removal
diffs (36 lines):
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
@@ -150,8 +150,9 @@ rel_remove_redundant_join_(visitor *v, s
if (l->l && is_project(l->op) && is_groupby(gb->op)) {
sql_rel *inner = l->l;
sql_rel *gbj = gb->l;
- if (rel_is_ref(inner) && is_project(inner->op) &&
(need_distinct(inner) || is_groupby(inner->op)) &&
- gbj->op == op_join && list_length(inner->r) ==
list_length(rel->exps)) {
+ bool ue = false;
+ if (rel_is_ref(inner) && is_project(inner->op) &&
(need_distinct(inner) || (ue = exps_unique(v->sql, inner->l, inner->exps,
true)) || is_groupby(inner->op)) &&
+ gbj->op == op_join && ((!ue &&
list_length(inner->r) == list_length(rel->exps)) || (ue && list_length(l->exps)
== list_length(rel->exps)))) {
sql_rel *gbjl = gbj->l, *gbjr = gbj->r;
if ((gbjl->l && is_project(gbjl->op) && inner
== gbjl->l) ||
(gbjr->l && is_project(gbjr->op) &&
inner == gbjr->l)) {
@@ -3679,8 +3680,6 @@ reorder_join(visitor *v, sql_rel *rel)
int cnt = list_length(exps);
rel->exps = exps;
if (list_length(rel->exps) != cnt) {
- ATOMIC_TYPE oahash_mask = (1U<<19);
- bool oahash_enabled = (GDKdebug & oahash_mask);
if (oahash_enabled)
rel->exps =
order_join_expressions_pp(v->sql, exps, rels);
else
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
@@ -489,6 +489,8 @@ rel_is_unique(sql_rel *rel)
case op_except:
case op_topn:
case op_sample:
+ case op_select:
+ case op_project:
return rel_is_unique(rel->l);
case op_table:
case op_basetable:
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]