Changeset: d40bfa2c133a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d40bfa2c133a
Modified Files:
sql/server/rel_select.c
Branch: Jul2017
Log Message:
push selects through left/right outer joins (when allowed)
diffs (26 lines):
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -1542,8 +1542,20 @@ rel_filter(mvc *sql, sql_rel *rel, list
return rel_select(sql->sa, rel, e);
if (/*is_semi(rel->op) ||*/ is_outerjoin(rel->op)) {
- rel_join_add_exp(sql->sa, rel, e);
- return rel;
+ if ((is_left(rel->op) || is_full(rel->op)) &&
rel_find_exp(rel->l, l->h->data)) {
+ rel_join_add_exp(sql->sa, rel, e);
+ return rel;
+ } else if ((is_right(rel->op) || is_full(rel->op)) &&
rel_find_exp(rel->r, l->h->data)) {
+ rel_join_add_exp(sql->sa, rel, e);
+ return rel;
+ }
+ if (is_left(rel->op) && rel_find_exp(rel->r,
l->h->data)) {
+ rel->r = rel_push_select(sql, rel->r, L, e);
+ return rel;
+ } else if (is_right(rel->op) && rel_find_exp(rel->l,
l->h->data)) {
+ rel->l = rel_push_select(sql, rel->l, L, e);
+ return rel;
+ }
}
/* push select into the given relation */
return rel_push_select(sql, rel, L, e);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list