Changeset: 4e14c8395aa5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/4e14c8395aa5
Modified Files:
sql/server/rel_optimize_sel.c
sql/test/BugTracker-2026/Tests/All
Branch: pp_hashjoin
Log Message:
improve join2semijoin optimizer
diffs (55 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
@@ -2504,8 +2504,9 @@ rel_join2semijoin(visitor *v, sql_rel *r
}
}
/* simplify group join returning only columns of left into semijoin */
- if (0 && is_innerjoin(rel->op) && !list_empty(rel->attr)) { /* TODO
test if those attr's are distinct ! */
+ if (is_innerjoin(rel->op) && !list_empty(rel->attr)) { /* if those
attr's are distinct ! */
int nr = 0;
+ int unique = 0;
for(node *n = rel->attr->h; n; n = n->next) {
sql_exp *e = n->data;
@@ -2515,11 +2516,27 @@ rel_join2semijoin(visitor *v, sql_rel *r
break;
if (e->type == e_column && rel_find_nid(rel->l, e->nid))
nr++;
+ unique += is_unique(e);
}
- if (nr == list_length(rel->attr)) {
+ if (nr == list_length(rel->attr) && nr == unique) {
rel->op = op_semi;
rel->attr = NULL;
}
+ if (nr == list_length(rel->attr)) { /* join should be on same
attributes */
+ for (node *n = rel->exps->h; n; n = n->next) {
+ sql_exp *je = n->data;
+ if (je->type != e_cmp || je->flag != cmp_equal)
+ return rel;
+ sql_exp *el = je->l, *er = je->r;
+ if (!exps_bind_nid(rel->attr, el->nid) &&
!exps_bind_nid(rel->attr, er->nid))
+ return rel;
+ }
+ rel->op = op_semi;
+ sql_rel *nr = rel_groupby(v->sql, rel->l, rel->attr);
+ nr->r = rel->attr;
+ rel->l = nr;
+ rel->attr = NULL;
+ }
}
return rel;
}
diff --git a/sql/test/BugTracker-2026/Tests/All
b/sql/test/BugTracker-2026/Tests/All
--- a/sql/test/BugTracker-2026/Tests/All
+++ b/sql/test/BugTracker-2026/Tests/All
@@ -150,7 +150,7 @@ KNOWNFAIL?7961-list_empty-crash
KNOWNFAIL?7963-having-sum-or-exists-or-sum-bug
7964-optimize-limit-0-queries
KNOWNFAIL?7965-select-1-limit-0-bug
-7966-optimize-select-distinct-from-union-queries
+PIPELINE?7966-optimize-select-distinct-from-union-queries
7967-optimize-in-select-distinct-queries
7968-optimize-distinct-from-q1-except-q2
7969-optimize-distinct-from-q1-intersect-q2
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]