Changeset: 33a744bfba51 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=33a744bfba51
Modified Files:
sql/server/rel_optimizer.c
Branch: default
Log Message:
some more join push down
diffs (40 lines):
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -2527,8 +2527,6 @@
sql_rel *ll = rel_dup(l->l), *lr = rel_dup(l->r);
sql_rel *rl = rel_dup(r->l), *rr = rel_dup(r->r);
- /* check if fk is split over both sides */
-
/* join(union(a,b), union(c,d)) -> union(join(a,c),
join(b,d)) */
if (l != ol) {
ll = rel_project(sql->sa, ll, NULL);
@@ -2552,6 +2550,27 @@
rel_destroy(rel);
*changes = 1;
return u;
+ } else if (l->op != op_union && r->op == op_union) {
+ sql_rel *nl, *nr, *u;
+ sql_rel *rl = rel_dup(r->l), *rr = rel_dup(r->r);
+
+ /* join(a, union(b,c)) -> union(join(a,b), join(a,c)) */
+ if (r != or) {
+ rl = rel_project(sql->sa, rl, NULL);
+ rl->exps = rel_projections(sql, or, NULL, 1, 1);
+ rr = rel_project(sql->sa, rr, NULL);
+ rr->exps = rel_projections(sql, or, NULL, 1, 1);
+ }
+ nl = rel_crossproduct(sql->sa, rel_dup(ol), rl,
rel->op);
+ nr = rel_crossproduct(sql->sa, rel_dup(ol), rr,
rel->op);
+ nl->exps = exps_copy(sql->sa, exps);
+ nr->exps = exps_copy(sql->sa, exps);
+
+ u = rel_setop(sql->sa, nl, nr, op_union);
+ u->exps = rel_projections(sql, rel, NULL, 1, 1);
+ rel_destroy(rel);
+ *changes = 1;
+ return u;
}
}
return rel;
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list