Changeset: dc5c450cf9b7 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=dc5c450cf9b7 Modified Files: sql/server/rel_unnest.c Branch: Oct2020 Log Message:
fixed another sqlancher issue, ie outer join should only rewrite into a union of excepts when realy needed, ie when the outer side has freevars diffs (24 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 @@ -1528,7 +1528,10 @@ rewrite_inner(mvc *sql, sql_rel *rel, sq inner = rel_project(sql->sa, inner, rel_projections(sql, inner, NULL, 1, 1)); if (is_join(rel->op)){ /* TODO handle set operators etc */ - d = rel->r = rel_crossproduct(sql->sa, rel->r, inner, op); + if (rel->op == op_right) + d = rel->l = rel_crossproduct(sql->sa, rel->l, inner, op); + else + d = rel->r = rel_crossproduct(sql->sa, rel->r, inner, op); if (single) set_single(d); } else if (is_project(rel->op)){ /* projection -> op_left */ @@ -3018,7 +3021,7 @@ include_tid(sql_rel *r) static sql_rel * rewrite_outer2inner_union(visitor *v, sql_rel *rel) { - if (is_outerjoin(rel->op) && !list_empty(rel->exps) && (rel_has_freevar(v->sql,rel->l) || rel_has_freevar(v->sql,rel->r) || exps_have_rel_exp(rel->exps))) { + if (is_outerjoin(rel->op) && !list_empty(rel->exps) && (((rel->op == op_left || rel->op == op_full) && rel_has_freevar(v->sql,rel->l)) || ((rel->op == op_right || rel->op == op_full) && 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