Changeset: 5029b63aea4a for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5029b63aea4a Modified Files: sql/backends/monet5/rel_bin.c Branch: Oct2020 Log Message:
handle some more cases with coalesce/case where the exp_bin couldn't push the candidates diffs (44 lines): diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -675,8 +675,6 @@ exp2bin_case(backend *be, sql_exp *fe, s if (val->nrcols == 0) val = stmt_const(be, pos, val); - else if (val->cand != isel && val->cand != rsel && val->cand != nsel) - val = stmt_project(be, rsel, val); else if (!val->cand && nsel) val = stmt_project(be, nsel, val); res = stmt_replace(be, res, pos, val); @@ -694,13 +692,17 @@ exp2bin_case(backend *be, sql_exp *fe, s if (next_cond) { ncond = cond = es; if (!ncond->nrcols) { - if (osel) + if (osel) { ncond = stmt_const(be, nsel, ncond); - else if (isel) + ncond->cand = nsel; + } else if (isel) { ncond = stmt_const(be, isel, ncond); - else + ncond->cand = isel; + } else ncond = stmt_const(be, bin_first_column(be, left), ncond); } + if (isel && !ncond->cand) + ncond = stmt_project(be, nsel, ncond); stmt *s = stmt_uselect(be, ncond, stmt_bool(be, 1), cmp_equal, !ncond->cand?rsel:NULL, 0/*anti*/, 0); if (rsel && ncond->cand) rsel = stmt_project(be, s, rsel); @@ -821,10 +823,6 @@ exp2bin_coalesce(backend *be, sql_exp *f } if (val->nrcols == 0) val = stmt_const(be, pos, val); - /* - else if (val->cand != isel && val->cand != rsel && val->cand != nsel) - val = stmt_project(be, rsel, val); - */ else if (!val->cand && nsel) val = stmt_project(be, nsel, val); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list