Changeset: ed5c55955d7c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ed5c55955d7c
Modified Files:
        gdk/ChangeLog
        gdk/gdk.h
        gdk/gdk_align.c
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_delta.c
        gdk/gdk_join.c
        gdk/gdk_search.c
        gdk/gdk_search.h
        gdk/gdk_select.c
        gdk/gdk_setop.c
        monetdb5/extras/rdf/rdf_shredder.c
        monetdb5/modules/kernel/bat5.c
        monetdb5/modules/mal/cluster.c
        monetdb5/modules/mal/tokenizer.c
        sql/backends/monet5/sql.c
Branch: default
Log Message:

Changed a bunch of hash-related functions to work on the tail column.
The functions that have been changed to work on the tail column are:
BAThash, BATprepareHash, HASHgonebad, HASHins, and HASHremove.


diffs (truncated from 596 to 300 lines):

diff --git a/gdk/ChangeLog b/gdk/ChangeLog
--- a/gdk/ChangeLog
+++ b/gdk/ChangeLog
@@ -1,3 +1,8 @@
 # ChangeLog file for MonetDB
 # This file is updated with Maddlog
 
+* Tue Oct 28 2014 Sjoerd Mullender <[email protected]>
+- Changed a bunch of hash-related functions to work on the tail column.
+  The functions that have been changed to work on the tail column are:
+  BAThash, BATprepareHash, HASHgonebad, HASHins, and HASHremove.
+
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -2171,7 +2171,7 @@ gdk_export BAT *BAThash(BAT *b, BUN mask
 
 /* low level functions */
 
-#define BATprepareHash(X) (((X)->H->hash == NULL) && !BAThash(X, 0))
+#define BATprepareHash(X) (((X)->T->hash == NULL) && !BAThash((X), 0))
 
 /*
  * @- Column Imprints Functions
diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c
--- a/gdk/gdk_align.c
+++ b/gdk/gdk_align.c
@@ -803,9 +803,9 @@ VIEWdestroy(BAT *b)
 
        /* remove any leftover private hash structures */
        if (b->H->hash)
+               HASHremove(BATmirror(b));
+       if (b->T->hash)
                HASHremove(b);
-       if (b->T->hash)
-               HASHremove(BATmirror(b));
        IMPSdestroy(b);
        VIEWunlink(b);
 
diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -526,10 +526,10 @@ BATclear(BAT *b, int force)
 
        /* kill all search accelerators */
        if (b->H->hash) {
-               HASHremove(b);
+               HASHremove(bm);
        }
        if (b->T->hash) {
-               HASHremove(bm);
+               HASHremove(b);
        }
        IMPSdestroy(b);
 
@@ -1229,12 +1229,12 @@ BUNins(BAT *b, const void *h, const void
                }
 
                if (b->H->hash) {
-                       HASHins(b, p, h);
+                       HASHins(bm, p, h);
                        if (hsize && hsize != b->H->vheap->size)
                                HEAPwarm(b->H->vheap);
                }
                if (b->T->hash) {
-                       HASHins(bm, p, t);
+                       HASHins(b, p, t);
 
                        if (tsize && tsize != b->T->vheap->size)
                                HEAPwarm(b->T->vheap);
@@ -1334,12 +1334,12 @@ BUNappend(BAT *b, const void *t, bit for
         * REASON: some accelerator updates (qsignature) use the hashes!
         */
        if (b->H->hash && h) {
-               HASHins(b, i, h);
+               HASHins(bm, i, h);
                if (hsize && hsize != b->H->vheap->size)
                        HEAPwarm(b->H->vheap);
        }
        if (b->T->hash) {
-               HASHins(bm, i, t);
+               HASHins(b, i, t);
 
                if (tsize && tsize != b->T->vheap->size)
                        HEAPwarm(b->T->vheap);
@@ -1928,9 +1928,9 @@ BUNlocate(BAT *b, const void *x, const v
                         * BUNlocate). Other threads might then crash.
                         */
                        if (dohash(v->H))
+                               (void) BATprepareHash(BATmirror(v));
+                       if (dohash(v->T))
                                (void) BATprepareHash(v);
-                       if (dohash(v->T))
-                               (void) BATprepareHash(BATmirror(v));
                        if (v->H->hash && v->T->hash) { /* we can choose 
between two hash tables */
                                BUN hcnt = 0, tcnt = 0;
                                BUN i;
@@ -1944,7 +1944,7 @@ BUNlocate(BAT *b, const void *x, const v
                                        v = BATmirror(v);
                                }
                                /* remove the least selective hash table */
-                               HASHremove(BATmirror(v));
+                               HASHremove(v);
                        }
                        if (v->H->hash == NULL) {
                                usemirror();
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -302,13 +302,13 @@ BATins(BAT *b, BAT *n, bit force)
            (b->batCount > 0 || !n->hkey) &&
            (BATcount(b) ||
             (BATcount(n) && n->htype != TYPE_void && !n->hdense))) {
-               BAThash(b, BATcount(b) + BATcount(n));
+               BAThash(BATmirror(b), BATcount(b) + BATcount(n));
        }
        if (b->T->hash == NULL && b->tkey & BOUND2BTRUE &&
            (b->batCount > 0 || !n->tkey) &&
            (BATcount(b) ||
             (BATcount(n) && n->ttype != TYPE_void && !n->tdense))) {
-               BAThash(BATmirror(b), BATcount(b) + BATcount(n));
+               BAThash(b, BATcount(b) + BATcount(n));
        }
        b->batDirty = 1;
        if (fastpath) {
@@ -525,10 +525,10 @@ BATappend(BAT *b, BAT *n, bit force)
        IMPSdestroy(b);         /* imprints do not support updates yet */
        /* a hash is useless for void bats */
        if (b->H->hash)
-               HASHremove(b);
+               HASHremove(BATmirror(b));
 
        if (b->T->hash && (2 * b->T->hash->mask) < (BATcount(b) + sz)) {
-               HASHremove(BATmirror(b));
+               HASHremove(b);
        }
        if (b->T->hash != NULL ||
            (b->tkey & BOUND2BTRUE) != 0 ||
@@ -639,7 +639,7 @@ BATappend(BAT *b, BAT *n, bit force)
                                        if (BUNfnd(bm, t) == BUN_NONE) {
                                                bunfastins(b, &h, t);
                                                if (b->T->hash) {
-                                                       HASHins(bm, i, t);
+                                                       HASHins(b, i, t);
                                                }
                                                h++;
                                                i++;
@@ -655,7 +655,7 @@ BATappend(BAT *b, BAT *n, bit force)
                                        if (BUNfnd(bm, t) == BUN_NONE) {
                                                bunfastins(b, &on, t);
                                                if (b->T->hash) {
-                                                       HASHins(bm, i, t);
+                                                       HASHins(b, i, t);
                                                }
                                                i++;
                                        }
@@ -677,7 +677,7 @@ BATappend(BAT *b, BAT *n, bit force)
 
                                bunfastins(b, &h, t);
                                if (b->T->hash) {
-                                       HASHins(bm, i, t);
+                                       HASHins(b, i, t);
                                }
                                i++;
                                h++;
@@ -693,7 +693,7 @@ BATappend(BAT *b, BAT *n, bit force)
 
                                bunfastins(b, &on, t);
                                if (b->T->hash) {
-                                       HASHins(bm, i, t);
+                                       HASHins(b, i, t);
                                }
                                i++;
                        }
@@ -1454,26 +1454,26 @@ BATmark(BAT *b, oid oid_base)
                }                                       \
        } while (0)
 
-#define mark_grp_loop4(BUNhead, BUNtail, init_n)       \
-       do {                                                    \
-               oid u = oid_nil;                                \
-               oid n = oid_nil;                                \
-                                                               \
-               bn->T->nil = 0;                                 \
-               BATloop(b, p, q) {                              \
-                       oid v = * (oid *) BUNtail(bi, p);       \
-                                                               \
-                       if (v != u) {                           \
-                               init_n;                         \
-                               u = v;                          \
-                       } else if (n != oid_nil) {              \
-                               n++;                            \
-                       }                                       \
-                       if (n == oid_nil)                       \
-                               bn->T->nil =1;                  \
+#define mark_grp_loop4(BUNhead, BUNtail, init_n)                       \
+       do {                                                            \
+               oid u = oid_nil;                                        \
+               oid n = oid_nil;                                        \
+                                                                       \
+               bn->T->nil = 0;                                         \
+               BATloop(b, p, q) {                                      \
+                       oid v = * (oid *) BUNtail(bi, p);               \
+                                                                       \
+                       if (v != u) {                                   \
+                               init_n;                                 \
+                               u = v;                                  \
+                       } else if (n != oid_nil) {                      \
+                               n++;                                    \
+                       }                                               \
+                       if (n == oid_nil)                               \
+                               bn->T->nil =1;                          \
                        bunfastins_nocheck_inc(bn, r, BUNhead(bi, p), &n); \
-               }                                               \
-               bn->T->nonil = !bn->T->nil;                     \
+               }                                                       \
+               bn->T->nonil = !bn->T->nil;                             \
        } while (0)
 
 #define mark_grp_loop3(BUNhead, BUNtail, BUNfnd)                       \
diff --git a/gdk/gdk_delta.c b/gdk/gdk_delta.c
--- a/gdk/gdk_delta.c
+++ b/gdk/gdk_delta.c
@@ -206,10 +206,10 @@ BATundo(BAT *b)
                        ptr t = BUNtail(bi, p);
 
                        if (b->H->hash) {
-                               HASHins(b, i, h);
+                               HASHins(bm, i, h);
                        }
                        if (b->T->hash) {
-                               HASHins(bm, i, t);
+                               HASHins(b, i, t);
                        }
                }
        }
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -1362,10 +1362,10 @@ hashjoin(BAT *r1, BAT *r2, BAT *l, BAT *
                return GDK_SUCCEED;
        }
 
-       /* hashes work on HEAD column */
-       r = BATmirror(r);
        if (BATprepareHash(r))
                goto bailout;
+       /* HASHloop works on HEAD column */
+       r = BATmirror(r);
        ri = bat_iterator(r);
        nrcand = (BUN) (rcandend - rcand);
 
diff --git a/gdk/gdk_search.c b/gdk/gdk_search.c
--- a/gdk/gdk_search.c
+++ b/gdk/gdk_search.c
@@ -191,7 +191,7 @@ HASHnew(Heap *hp, int tpe, BUN size, BUN
 
 #define starthash(TYPE)                                                        
\
        do {                                                            \
-               TYPE *v = (TYPE *) BUNhloc(bi, 0);                      \
+               TYPE *v = (TYPE *) BUNtloc(bi, 0);                      \
                for (; r < p; r++) {                                    \
                        BUN c = (BUN) hash_##TYPE(h, v+r);              \
                                                                        \
@@ -203,7 +203,7 @@ HASHnew(Heap *hp, int tpe, BUN size, BUN
        } while (0)
 #define finishhash(TYPE)                                       \
        do {                                                    \
-               TYPE *v = (TYPE *) BUNhloc(bi, 0);              \
+               TYPE *v = (TYPE *) BUNtloc(bi, 0);              \
                for (; p < q; p++) {                            \
                        BUN c = (BUN) hash_##TYPE(h, v + p);    \
                                                                \
@@ -249,8 +249,8 @@ BAThash(BAT *b, BUN masksize)
        (void) t0;
        (void) t1;
 
-       if (VIEWhparent(b)) {
-               bat p = VIEWhparent(b);
+       if (VIEWtparent(b)) {
+               bat p = -VIEWtparent(b);
                o = b;
                b = BATdescriptor(p);
                assert(b != NULL);
@@ -261,8 +261,8 @@ BAThash(BAT *b, BUN masksize)
                }
        }
        MT_lock_set(&GDKhashLock(abs(b->batCacheid)), "BAThash");
-       if (b->H->hash == NULL) {
-               unsigned int tpe = ATOMstorage(b->htype);
+       if (b->T->hash == NULL) {
+               unsigned int tpe = ATOMstorage(b->ttype);
                BUN cnt = BATcount(b);
                BUN mask;
                BUN p = BUNfirst(b), q = BUNlast(b), r;
@@ -277,8 +277,8 @@ BAThash(BAT *b, BUN masksize)
                if (!cnt)
                        cnt = BATcapacity(b);
 
-               if (b->htype == TYPE_void) {
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to