Changeset: 542d0c24cca9 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=542d0c24cca9 Modified Files: sql/server/rel_unnest.c Branch: octbugs Log Message:
handle unnesting with freevar expression on the left side diffs (42 lines): diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -1433,8 +1433,19 @@ rel_unnest_dependent(mvc *sql, sql_rel * l = rel->l; r = rel->r; - if (rel_has_freevar(sql, l)) + if (rel_has_freevar(sql, l)) { rel->l = rel_unnest_dependent(sql, rel->l); + if (rel_has_freevar(sql, rel->l)) { + if (rel->op == op_right) { + sql_rel *l = rel->l; + + rel->l = rel->r; + rel->r = l; + rel->op = op_left; + return rel_unnest_dependent(sql, rel); + } + } + } if (!rel_has_freevar(sql, r)) { reset_dependent(rel); @@ -3108,7 +3119,7 @@ include_tid(sql_rel *r) } static sql_rel * -rewrite_dependent_right2left(visitor *v, sql_rel *rel) +rewrite_dependent_right2left(visitor *v, sql_rel *rel) { (void) v; /* The unnest code assumes freevars belong to the tables on the left side, so at a right join, re-write it to a left join */ @@ -3124,7 +3135,7 @@ rewrite_dependent_right2left(visitor *v, static sql_rel * rewrite_outer2inner_union(visitor *v, sql_rel *rel) { - if (is_outerjoin(rel->op) && !list_empty(rel->exps) && (((is_left(rel->op) || is_full(rel->op)) && rel_has_freevar(v->sql,rel->l)) || + if (is_outerjoin(rel->op) && !list_empty(rel->exps) && (((is_left(rel->op) || is_full(rel->op)) && rel_has_freevar(v->sql,rel->l)) || ((is_right(rel->op) || is_full(rel->op)) && rel_has_freevar(v->sql,rel->r)) || exps_have_freevar(v->sql, rel->exps) /*exps_have_rel_exp(rel->exps)*/)) { sql_exp *f = exp_atom_bool(v->sql->sa, 0); int nrcols = rel->nrcols; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list