Changeset: 2bc8e5ab3218 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2bc8e5ab3218
Modified Files:
        monetdb5/optimizer/opt_mergetable.c
        sql/backends/monet5/rel_bin.c
        sql/jdbc/tests/Tests/Test_PSlargebatchval.stable.out
Branch: Oct2020
Log Message:

merged


diffs (113 lines):

diff --git a/monetdb5/optimizer/opt_mergetable.c 
b/monetdb5/optimizer/opt_mergetable.c
--- a/monetdb5/optimizer/opt_mergetable.c
+++ b/monetdb5/optimizer/opt_mergetable.c
@@ -650,7 +650,7 @@ mat_apply4(MalBlkPtr mb, InstrPtr p, mat
 }
 
 static int
-mat_setop(MalBlkPtr mb, InstrPtr p, matlist_t *ml, int m, int n)
+mat_setop(MalBlkPtr mb, InstrPtr p, matlist_t *ml, int m, int n, int o)
 {
        int tpe = getArgType(mb,p, 0), k, j;
        InstrPtr r = newInstruction(mb, matRef, packRef);
@@ -665,6 +665,9 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
        assert(m>=0 || n>=0);
        if (m >= 0 && n >= 0) {
                int nr = 1;
+
+               assert(o < 0 || mat[m].mi->argc == mat[o].mi->argc);
+
                for(k=1; k<mat[m].mi->argc; k++) {
                        InstrPtr q = copyInstruction(p);
                        InstrPtr s = newInstruction(mb, matRef, packRef);
@@ -700,6 +703,8 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
                        getArg(q,0) = newTmpVariable(mb, tpe);
                        getArg(q,1) = getArg(mat[m].mi,k);
                        getArg(q,2) = getArg(s,0);
+                       if (o >= 0)
+                               getArg(q,3) = getArg(mat[o].mi, k);
                        if(setPartnr(ml, getArg(mat[m].mi,k), getArg(q,0), nr)) 
{
                                freeInstruction(q);
                                freeInstruction(r);
@@ -712,6 +717,8 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
                }
        } else {
                assert(m >= 0);
+               assert(o < 0 || mat[m].mi->argc == mat[o].mi->argc);
+
                for(k=1; k<mat[m].mi->argc; k++) {
                        InstrPtr q = copyInstruction(p);
                        if(!q) {
@@ -721,6 +728,8 @@ mat_setop(MalBlkPtr mb, InstrPtr p, matl
 
                        getArg(q,0) = newTmpVariable(mb, tpe);
                        getArg(q,1) = getArg(mat[m].mi, k);
+                       if (o >= 0)
+                               getArg(q,3) = getArg(mat[o].mi, k);
                        pushInstruction(mb,q);
 
                        if(setPartnr(ml, getArg(q, 2), getArg(q,0), k)) {
@@ -2302,7 +2311,8 @@ OPTmergetableImplementation(Client cntxt
                     getFunctionId(p) == intersectRef) &&
                   (m=is_a_mat(getArg(p,1), &ml)) >= 0) {
                        n=is_a_mat(getArg(p,2), &ml);
-                       if(mat_setop(mb, p, &ml, m, n)) {
+                       o=is_a_mat(getArg(p,3), &ml);
+                       if(mat_setop(mb, p, &ml, m, n, o)) {
                                msg = 
createException(MAL,"optimizer.mergetable",SQLSTATE(HY013) MAL_MALLOC_FAIL);
                                goto cleanup;
                        }
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
@@ -362,7 +362,7 @@ subrel_project( backend *be, stmt *s, li
 }
 
 static stmt *
-handle_in_exps(backend *be, sql_exp *ce, list *nl, stmt *left, stmt *right, 
stmt *grp, stmt *ext, stmt *cnt, stmt *sel, int in, int use_r, int depth, int 
reduce)
+handle_in_exps(backend *be, sql_exp *ce, list *nl, stmt *left, stmt *right, 
stmt *grp, stmt *ext, stmt *cnt, stmt *sel, bool in, int use_r, int depth, int 
reduce)
 {
        mvc *sql = be->mvc;
        node *n;
@@ -435,10 +435,9 @@ handle_in_exps(backend *be, sql_exp *ce,
                        s = stmt_project(be, stmt_selectnonil(be, s, NULL), s);
                }
 
-               s = stmt_join(be, c, s, in, cmp_equal, 1, 0, false);
-               s = stmt_result(be, s, 0);
-
-               if (!in) {
+               if (in) {
+                       s = stmt_semijoin(be, c, s, sel, NULL, 0, false);
+               } else {
                        if (last_null_value) {
                                /* CORNER CASE ALERT:
                                   In case of a not-in-expression with the 
associated in-value-list containing a null value,
@@ -450,24 +449,15 @@ handle_in_exps(backend *be, sql_exp *ce,
                                   list* singleton_bat = sa_list(sql->sa);
                                   list_append(singleton_bat, null_value); */
                                s = stmt_uselect(be, c, last_null_value, 
cmp_equal, NULL, 0, 0);
-                               return s;
-                       }
-                       else {
+                       } else {
                                /* BACK TO HAPPY FLOW:
                                   Make sure that null values are never 
returned. */
                                stmt* non_nulls;
-                               non_nulls = stmt_selectnonil(be, c, NULL);
-                               s = stmt_tdiff(be, non_nulls, s, NULL);
+                               non_nulls = stmt_selectnonil(be, c, sel);
+                               s = stmt_tdiff(be, stmt_project(be, non_nulls, 
c), s, NULL);
                                s = stmt_project(be, s, non_nulls);
                        }
                }
-
-               if (sel) {
-                       stmt* oid_intersection;
-                       oid_intersection = stmt_tinter(be, s, sel, false);
-                       s = stmt_project(be, oid_intersection, s);
-                       s = stmt_result(be, s, 0);
-               }
        }
        return s;
 }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to