Changeset: acc9093acf74 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/acc9093acf74
Modified Files:
        monetdb5/optimizer/opt_mergetable.c
        monetdb5/optimizer/opt_support.c
Branch: default
Log Message:

Merged with Oct2020


diffs (59 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
@@ -2051,6 +2051,22 @@ OPTmergetableImplementation(Client cntxt
                bats = nr_of_bats(mb, p);
                nilbats = nr_of_nilbats(mb, p);
 
+               /* left joins can match at isMatJoinOp, so run this check 
beforehand */
+               if (match > 0 && isMatLeftJoinOp(p) && p->argc >= 5 && p->retc 
== 2 &&
+                       (match == 1 || match == 2) && bats+nilbats == 4) {
+                       m = is_a_mat(getArg(p,p->retc), &ml);
+                       o = is_a_mat(getArg(p,p->retc+2), &ml);
+
+                       if ((match == 1 && m >= 0) || (match == 2 && m >= 0 && 
o >= 0)) {
+                               if(mat_join2(mb, p, &ml, m, -1, o, -1)) {
+                                       msg = 
createException(MAL,"optimizer.mergetable",SQLSTATE(HY013) MAL_MALLOC_FAIL);
+                                       goto cleanup;
+                               }
+                               actions++;
+                               continue;
+                       }
+               }
+
                /* (l,r) Join (L, R, ..)
                 * 2 -> (l,r) equi/theta joins (l,r)
                 * 3 -> (l,r) range-joins (l,r1,r2)
@@ -2076,20 +2092,6 @@ OPTmergetableImplementation(Client cntxt
                        actions++;
                        continue;
                }
-               if (match > 0 && isMatLeftJoinOp(p) && p->argc >= 5 && p->retc 
== 2 &&
-                               (match == 1 || match == 2) && bats+nilbats == 
4) {
-                       m = is_a_mat(getArg(p,p->retc), &ml);
-                       o = is_a_mat(getArg(p,p->retc+2), &ml);
-
-                       if ((match == 1 && m >= 0) || (match == 2 && m >= 0 && 
o >= 0)) {
-                               if(mat_join2(mb, p, &ml, m, -1, o, -1)) {
-                                       msg = 
createException(MAL,"optimizer.mergetable",SQLSTATE(HY013) MAL_MALLOC_FAIL);
-                                       goto cleanup;
-                               }
-                               actions++;
-                               continue;
-                       }
-               }
                /*
                 * Aggregate handling is a prime target for optimization.
                 * The simple cases are dealt with first.
diff --git a/monetdb5/optimizer/opt_support.c b/monetdb5/optimizer/opt_support.c
--- a/monetdb5/optimizer/opt_support.c
+++ b/monetdb5/optimizer/opt_support.c
@@ -674,7 +674,7 @@ inline int isSubJoin(InstrPtr p)
        const char *func = getFunctionId(p);
        size_t l = func?strlen(func):0;
 
-       return (l >= 7 && strcmp(func+l-7,"join") == 0);
+       return (l >= 4 && strcmp(func+l-4,"join") == 0);
 }
 
 inline int isMultiplex(InstrPtr p)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to