Changeset: 9ac458d62a45 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9ac458d62a45
Modified Files:
        monetdb5/optimizer/opt_mergetable.c
        sql/backends/monet5/sql_statement.c
Branch: Jun2020
Log Message:

2 performance fixes

allow thetajoin in mergetable (only bail on antijoin's)

rewrote the rel2bin_semijoin case with candidates to use a variation of
the intersect (not semijoin, which bails at the mergetable)


diffs (45 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
@@ -1959,9 +1959,12 @@ OPTmergetableImplementation(Client cntxt
                        bailout = 1;
                }
                if (getModuleId(p) == algebraRef &&
-                   getFunctionId(p) == thetajoinRef ) {
+                   getFunctionId(p) == thetajoinRef) {
+                     assert(p->argc == 9);
+                     if (p->argc == 9 && 
getVarConstant(mb,getArg(p,6)).val.ival == 6 /* op == '<>' */) {
                        TRC_INFO(MAL_OPTIMIZER, "Mergetable bailout thetajoin 
ref\n");
                        bailout = 1;
+                     }
                }
                if (isSample(p)) {
                        bailout = 1;
diff --git a/sql/backends/monet5/sql_statement.c 
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -2036,8 +2036,11 @@ stmt_semijoin(backend *be, stmt *op1, st
        if (op1->nr < 0 || op2->nr < 0)
                return NULL;
 
-       q = newStmt(mb, algebraRef, semijoinRef);
-       q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+       if (single) {
+               q = newStmt(mb, algebraRef, semijoinRef);
+               q = pushReturn(mb, q, newTmpVariable(mb, TYPE_any));
+       } else
+               q = newStmt(mb, algebraRef, intersectRef);
        q = pushArgument(mb, q, op1->nr);
        q = pushArgument(mb, q, op2->nr);
        if (lcand)
@@ -2060,7 +2063,9 @@ stmt_semijoin(backend *be, stmt *op1, st
                s->op2 = op2;
                s->flag = cmp_equal;
                s->key = 0;
-               s->nrcols = 2;
+               s->nrcols = 1;
+               if (single)
+                       s->nrcols = 2;
                s->nr = getDestVar(q);
                s->q = q;
                return s;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to