Changeset: 29f41d31f964 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/29f41d31f964
Modified Files:
        gdk/gdk_hash.c
Branch: Jul2021
Log Message:

No need for full-featured iterator inside hash changing functions.
These functions are only called when the caller is modifying the BAT,
so it has full control over the heaps.


diffs (86 lines):

diff --git a/gdk/gdk_hash.c b/gdk/gdk_hash.c
--- a/gdk/gdk_hash.c
+++ b/gdk/gdk_hash.c
@@ -1127,7 +1127,7 @@ HASHappend_locked(BAT *b, BUN i, const v
        h->heaplink.free += h->width;
        BUN hb = HASHget(h, c);
        BUN hb2;
-       BATiter bi = bat_iterator(b);
+       BATiter bi = bat_iterator_nolock(b);
        int (*atomcmp)(const void *, const void *) = ATOMcompare(h->type);
        for (hb2 = hb;
             hb2 != BUN_NONE;
@@ -1135,7 +1135,6 @@ HASHappend_locked(BAT *b, BUN i, const v
                if (atomcmp(v, BUNtail(bi, hb2)) == 0)
                        break;
        }
-       bat_iterator_end(&bi);
        h->nheads += hb == BUN_NONE;
        h->nunique += hb2 == BUN_NONE;
        HASHputlink(h, i, hb);
@@ -1173,7 +1172,7 @@ HASHinsert_locked(BAT *b, BUN p, const v
        }
        BUN c = HASHprobe(h, v);
        BUN hb = HASHget(h, c);
-       BATiter bi = bat_iterator(b);
+       BATiter bi = bat_iterator_nolock(b);
        int (*atomcmp)(const void *, const void *) = ATOMcompare(h->type);
        if (hb == BUN_NONE || hb < p) {
                /* bucket is empty, or bucket is used by lower numbered
@@ -1190,7 +1189,6 @@ HASHinsert_locked(BAT *b, BUN p, const v
                                        /* found another row with the
                                         * same value, so don't
                                         * increment nunique */
-                                       bat_iterator_end(&bi);
                                        return;
                                }
                                hb = HASHgetlink(h, hb);
@@ -1198,7 +1196,6 @@ HASHinsert_locked(BAT *b, BUN p, const v
                }
                /* this is a new value */
                h->nunique++;
-               bat_iterator_end(&bi);
                return;
        }
        bool seen = false;
@@ -1216,7 +1213,6 @@ HASHinsert_locked(BAT *b, BUN p, const v
                        }
                        if (!seen)
                                h->nunique++;
-                       bat_iterator_end(&bi);
                        return;
                }
                hb = hb2;
@@ -1252,7 +1248,7 @@ HASHdelete_locked(BAT *b, BUN p, const v
        }
        BUN c = HASHprobe(h, v);
        BUN hb = HASHget(h, c);
-       BATiter bi = bat_iterator(b);
+       BATiter bi = bat_iterator_nolock(b);
        int (*atomcmp)(const void *, const void *) = ATOMcompare(h->type);
        if (hb == p) {
                BUN hb2 = HASHgetlink(h, p);
@@ -1268,7 +1264,6 @@ HASHdelete_locked(BAT *b, BUN p, const v
                                        /* found another row with the
                                         * same value, so don't
                                         * decrement nunique below */
-                                       bat_iterator_end(&bi);
                                        return;
                                }
                                hb2 = HASHgetlink(h, hb2);
@@ -1277,7 +1272,6 @@ HASHdelete_locked(BAT *b, BUN p, const v
                /* no rows found with the same value, so number of
                 * unique values is one lower */
                h->nunique--;
-               bat_iterator_end(&bi);
                return;
        }
        bool seen = false;
@@ -1301,7 +1295,6 @@ HASHdelete_locked(BAT *b, BUN p, const v
        HASHputlink(h, p, BUN_NONE);
        if (!seen)
                h->nunique--;
-       bat_iterator_end(&bi);
 }
 
 void
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to