Changeset: 16f3ef5922cb for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=16f3ef5922cb
Modified Files:
gdk/gdk_join.c
Branch: default
Log Message:
Merge with Oct2020 branch.
diffs (48 lines):
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -1773,14 +1773,23 @@ mergejoin(BAT **r1p, BAT **r2p, BAT *l,
BAT *r2 = r2p ? *r2p : NULL;
if (l->tsorted || l->trevsorted) {
- /* determine opportunistic scan window for l */
- for (nl = lci->ncand, lscan = 4; nl > 0; lscan++)
- nl >>= 1;
equal_order = (l->tsorted && r->tsorted) ||
(l->trevsorted && r->trevsorted &&
!BATtvoid(l) && !BATtvoid(r));
lordering = l->tsorted && (r->tsorted || !equal_order) ? 1 : -1;
rordering = equal_order ? lordering : -lordering;
+ if (!l->tnonil && !nil_matches && !nil_on_miss) {
+ nl = binsearch(NULL, 0, l->ttype, lvals, lvars, lwidth,
0, BATcount(l), nil, lordering, 1);
+ nl = canditer_search(lci, nl + l->hseqbase, true);
+ if (l->tsorted) {
+ canditer_setidx(lci, nl);
+ } else if (l->trevsorted) {
+ lci->ncand = nl;
+ }
+ }
+ /* determine opportunistic scan window for l */
+ for (nl = lci->ncand, lscan = 4; nl > 0; lscan++)
+ nl >>= 1;
} else {
/* if l not sorted, we will always use binary search
* on r */
@@ -2242,7 +2251,7 @@ mergejoin(BAT **r1p, BAT **r2p, BAT *l,
/* keyness or r2 can only be assured
* as long as matched values are
* ordered */
- int ord = rordering * cmp(prev, v);
+ int ord = rordering * cmp(prev, v ? v : nil);
if (ord < 0) {
/* previous value in l was
* less than current */
@@ -2266,7 +2275,7 @@ mergejoin(BAT **r1p, BAT **r2p, BAT *l,
}
}
}
- prev = v;
+ prev = v ? v : nil;
}
if (BATcount(r1) > 0) {
/* a new, higher value will be inserted into
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list