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