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
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to