Changeset: bf01d6d6fa2d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=bf01d6d6fa2d
Modified Files:
        gdk/gdk_join.c
Branch: default
Log Message:

joins between (l (large and dense), r (small and sorted)) now (even in
the left*join case) get handled by a simple fetchjoin like solution (fetches 
from r into the dense l).


diffs (42 lines):

diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -3747,6 +3747,29 @@ bandjoin(BAT *r1, BAT *r2, BAT *l, BAT *
        return GDK_FAIL;
 }
 
+/* small ordered right, dense left, oid's only, do fetches */
+static gdk_return
+fetchjoin( BAT *r1, BAT *r2, BAT *l, BAT *r)
+{
+       oid lo = l->tseqbase, hi = lo + BATcount(l);
+       BUN b = SORTfndfirst(r, &lo), e = SORTfndlast(r, &hi), p;
+
+       BATseqbase(r1, 0);
+       if (r2) {
+               BATseqbase(r2, 0);
+               for(p = b; p < e; p++) { 
+                       oid v = p + r->hseqbase;
+                       BUNappend(r2, &v, FALSE);
+               }
+       }
+       for(p = b; p < e; p++) {
+               oid v = *(oid*)Tloc(r, p) - l->tseqbase + l->hseqbase; 
+               BUNappend(r1, &v, FALSE);
+       }
+       return GDK_SUCCEED;
+}
+
+
 /* Make the implementation choices for various left joins. */
 static gdk_return
 subleftjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr,
@@ -3792,6 +3815,8 @@ subleftjoin(BAT **r1p, BAT **r2p, BAT *l
                    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, only_misses, maxsize, t0, 
0);
+       if (BATtdense(l) && BATordered(r) && (rcount * 1024) < lcount && 
ATOMtype(l->ttype) == TYPE_oid && !sl && !sr && !nil_matches && !only_misses) 
+               return fetchjoin(r1, r2, l, r);
        return hashjoin(r1, r2, l, r, sl, sr, nil_matches,
                        nil_on_miss, semi, only_misses, maxsize, t0, 0, 
"leftjoin");
 }
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to