Changeset: 7e2000ecd727 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7e2000ecd727
Modified Files:
gdk/gdk_join.c
Branch: default
Log Message:
Merge with Jul2015 branch.
diffs (81 lines):
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -439,8 +439,11 @@ nomatch(BAT *r1, BAT *r2, BAT *l, BAT *r
{
BUN cnt;
- if (lstart == lend)
+ if (lstart == lend || (!must_match && !nil_on_miss)) {
+ virtualize(r1);
+ virtualize(r2);
return GDK_SUCCEED;
+ }
if (must_match) {
GDKerror("%s(%s,%s) does not hit always => can't use
fetchjoin.\n",
func, BATgetId(l), BATgetId(r));
@@ -448,8 +451,6 @@ nomatch(BAT *r1, BAT *r2, BAT *l, BAT *r
BBPreclaim(r2);
return GDK_FAIL;
}
- if (!nil_on_miss)
- return GDK_SUCCEED;
if (lcand) {
cnt = (BUN) (lcandend - lcand);
BATextend(r1, cnt);
@@ -569,8 +570,13 @@ mergejoin_void(BAT *r1, BAT *r2, BAT *l,
cnt -= l->hseqbase + BATcount(l) -
sl->tseqbase - BATcount(sl);
}
- if (hi < lo)
- hi = lo;
+ if (hi <= lo)
+ return nomatch(r1, r2, l, r,
+ seq - l->hseqbase,
+ seq + cnt - l->hseqbase,
+ NULL, NULL, nil_on_miss,
+ must_match,
+ "mergejoin_void");
if (must_match && hi - lo < cnt) {
GDKerror("mergejoin(%s,%s) does not hit always
=> can't use fetchjoin.\n", BATgetId(l), BATgetId(r));
goto bailout;
@@ -2850,35 +2856,19 @@ subleftjoin(BAT **r1p, BAT **r2p, BAT *l
rcount = BATcount(r);
if (sr)
rcount = MIN(rcount, BATcount(sr));
- if (lcount == 0 || rcount == 0) {
- r1 = BATnew(TYPE_void, TYPE_void, 0, TRANSIENT);
- r2 = BATnew(TYPE_void, TYPE_void, 0, TRANSIENT);
- if (r1 == NULL || r2 == NULL) {
- BBPreclaim(r1);
- BBPreclaim(r2);
- return GDK_FAIL;
- }
- BATseqbase(r1, 0);
- BATseqbase(BATmirror(r1), 0);
- BATseqbase(r2, 0);
- BATseqbase(BATmirror(r2), 0);
- *r1p = r1;
- *r2p = r2;
- return GDK_SUCCEED;
- }
if ((maxsize = joininitresults(&r1, &r2, lcount, rcount, l->tkey,
r->tkey, semi, nil_on_miss, estimate, name)) == BUN_NONE)
return GDK_FAIL;
*r1p = r1;
*r2p = r2;
- if (BATtdense(r) && (sr == NULL || BATtdense(sr))) {
+ if (BATtdense(r) && (sr == NULL || BATtdense(sr)) && lcount > 0 &&
rcount > 0) {
/* use special implementation for dense right-hand side */
return mergejoin_void(r1, r2, l, r, sl, sr,
nil_on_miss, must_match);
} else if ((r->tsorted || r->trevsorted) &&
- (r->ttype == TYPE_void ||
- lcount < 1024 ||
- BATcount(r) * (Tsize(r) + (r->T->vheap ? r->T->vheap->size : 0) +
2 * sizeof(BUN)) > GDK_mem_maxsize / (GDKnr_threads ? GDKnr_threads : 1)))
+ (BATtdense(r) ||
+ lcount < 1024 ||
+ BATcount(r) * (Tsize(r) + (r->T->vheap ? r->T->vheap->size
: 0) + 2 * sizeof(BUN)) > GDK_mem_maxsize / (GDKnr_threads ? GDKnr_threads :
1)))
return mergejoin(r1, r2, l, r, sl, sr, nil_matches,
nil_on_miss, semi, must_match, maxsize);
return hashjoin(r1, r2, l, r, sl, sr, nil_matches,
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list