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

Reply via email to