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

Reply via email to