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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list