Changeset: 086fddf4283d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=086fddf4283d
Modified Files:
        gdk/gdk_bat.c
        gdk/gdk_batop.c
        gdk/gdk_firstn.c
        gdk/gdk_group.c
        gdk/gdk_join.c
        gdk/gdk_logger.c
        gdk/gdk_sample.c
        gdk/gdk_select.c
        gdk/gdk_unique.c
        sql/backends/monet5/generator/generator.c
        sql/backends/monet5/sql.c
        sql/storage/bat/bat_table.c
Branch: Jul2017
Log Message:

Use BATdense to create BATs of type VOID.


diffs (truncated from 515 to 300 lines):

diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c
--- a/gdk/gdk_bat.c
+++ b/gdk/gdk_bat.c
@@ -246,10 +246,10 @@ BATdense(oid hseq, oid tseq, BUN cnt)
        BAT *bn;
 
        bn = COLnew(hseq, TYPE_void, 0, TRANSIENT);
-       if (bn == NULL)
-               return NULL;
-       BATtseqbase(bn, tseq);
-       BATsetcount(bn, cnt);
+       if (bn != NULL) {
+               BATtseqbase(bn, tseq);
+               BATsetcount(bn, cnt);
+       }
        return bn;
 }
 
@@ -1380,6 +1380,7 @@ BATsetcount(BAT *b, BUN cnt)
 {
        /* head column is always VOID, and some head properties never change */
        assert(b->hseqbase != oid_nil);
+       assert(cnt <= BUN_MAX);
 
        b->batCount = cnt;
        b->batDirtydesc = TRUE;
diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c
--- a/gdk/gdk_batop.c
+++ b/gdk/gdk_batop.c
@@ -1306,21 +1306,17 @@ BATsort(BAT **sorted, BAT **order, BAT *
                        *sorted = bn;
                }
                if (order) {
-                       on = COLnew(b->hseqbase, TYPE_void, BATcount(b), 
TRANSIENT);
+                       on = BATdense(b->hseqbase, b->hseqbase, BATcount(b));
                        if (on == NULL)
                                goto error;
-                       BATsetcount(on, BATcount(b));
-                       BATtseqbase(on, b->hseqbase);
                        *order = on;
                }
                if (groups) {
                        if (BATtkey(b)) {
                                /* singleton groups */
-                               gn = COLnew(0, TYPE_void, BATcount(b), 
TRANSIENT);
+                               gn = BATdense(0, 0, BATcount(b));
                                if (gn == NULL)
                                        goto error;
-                               BATsetcount(gn, BATcount(b));
-                               BATtseqbase(gn, 0);
                        } else {
                                /* single group */
                                const oid *o = 0;
@@ -1822,15 +1818,9 @@ BATcount_no_nil(BAT *b)
 static BAT *
 newdensecand(oid first, oid last)
 {
-       BAT *bn;
-
-       if ((bn = COLnew(0, TYPE_void, 0, TRANSIENT)) == NULL)
-               return NULL;
        if (last < first)
                first = last = 0; /* empty range */
-       BATsetcount(bn, last - first);
-       BATtseqbase(bn, first);
-       return bn;
+       return BATdense(0, first, last - first);
 }
 
 /* merge two candidate lists and produce a new one
diff --git a/gdk/gdk_firstn.c b/gdk/gdk_firstn.c
--- a/gdk/gdk_firstn.c
+++ b/gdk/gdk_firstn.c
@@ -152,11 +152,9 @@ BATfirstn_unique(BAT *b, BAT *s, BUN n, 
                }
        } else if (n >= cnt) {
                /* trivial: return everything */
-               bn = COLnew(0, TYPE_void, cnt, TRANSIENT);
+               bn = BATdense(0, start + b->hseqbase, cnt);
                if (bn == NULL)
                        return NULL;
-               BATsetcount(bn, cnt);
-               BATtseqbase(bn, start + b->hseqbase);
                if (lastp)
                        *lastp = 0;
                return bn;
@@ -182,18 +180,14 @@ BATfirstn_unique(BAT *b, BAT *s, BUN n, 
                                *lastp = candend[-(ssize_t)n];
                        return BATslice(s, i - n, i);
                }
-               bn = COLnew(0, TYPE_void, n, TRANSIENT);
-               if (bn == NULL)
-                       return NULL;
-               BATsetcount(bn, n);
                if (asc ? b->tsorted : b->trevsorted) {
                        /* first n entries from b */
-                       BATtseqbase(bn, start + b->hseqbase);
+                       bn = BATdense(0, start + b->hseqbase, n);
                        if (lastp)
                                *lastp = start + b->hseqbase + n - 1;
                } else {
                        /* last n entries from b */
-                       BATtseqbase(bn, start + cnt + b->hseqbase - n);
+                       bn = BATdense(0, start + cnt + b->hseqbase - n, n);
                        if (lastp)
                                *lastp = start + cnt + b->hseqbase - n;
                }
@@ -416,11 +410,7 @@ BATfirstn_unique_with_groups(BAT *b, BAT
        if (n == 0) {
                /* candidate list might refer only to values outside
                 * of the bat and hence be effectively empty */
-               bn = COLnew(0, TYPE_void, 0, TRANSIENT);
-               if (bn == NULL)
-                       return NULL;
-               BATtseqbase(bn, 0);
-               return bn;
+               return BATdense(0, 0, 0);
        }
 
        bn = COLnew(0, TYPE_oid, n, TRANSIENT);
@@ -596,7 +586,7 @@ BATfirstn_grouped(BAT **topn, BAT **gids
                return GDK_FAIL;
        if (BATcount(bn) == 0) {
                if (gids) {
-                       gn = COLnew(0, TYPE_void, 0, TRANSIENT);
+                       gn = BATdense(0, 0, 0);
                        if (gn == NULL) {
                                BBPunfix(bn->batCacheid);
                                return GDK_FAIL;
@@ -722,7 +712,7 @@ BATfirstn_grouped_with_groups(BAT **topn
        }
        if (BATcount(bn) == 0) {
                if (gids) {
-                       gn = COLnew(0, TYPE_void, 0, TRANSIENT);
+                       gn = BATdense(0, 0, 0);
                        if (gn == NULL) {
                                BBPunfix(bn->batCacheid);
                                return GDK_FAIL;
@@ -831,17 +821,15 @@ BATfirstn(BAT **topn, BAT **gids, BAT *b
 
        if (n == 0 || BATcount(b) == 0 || (s != NULL && BATcount(s) == 0)) {
                /* trivial: empty result */
-               *topn = COLnew(0, TYPE_void, 0, TRANSIENT);
+               *topn = BATdense(0, 0, 0);
                if (*topn == NULL)
                        return GDK_FAIL;
-               BATtseqbase(*topn, 0);
                if (gids) {
-                       *gids = COLnew(0, TYPE_void, 0, TRANSIENT);
+                       *gids = BATdense(0, 0, 0);
                        if (*gids == NULL) {
                                BBPreclaim(*topn);
                                return GDK_FAIL;
                        }
-                       BATtseqbase(*gids, 0);
                }
                return GDK_SUCCEED;
        }
diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -599,17 +599,16 @@ BATgroup_internal(BAT **groups, BAT **ex
                                  h ? BATgetId(h) : "NULL", h ? BATcount(h) : 0,
                                  subsorted);
                ngrp = cnt == 0  ? 0 : cand ? s->hseqbase + (cand - (const oid 
*) Tloc(s, 0)) : s ? s->hseqbase + start - s->tseqbase : b->hseqbase;
-               gn = COLnew(hseqb, TYPE_void, BATcount(b), TRANSIENT);
+               gn = BATdense(hseqb, 0, BATcount(b));
                if (gn == NULL)
                        goto error;
-               BATsetcount(gn, BATcount(b));
-               BATtseqbase(gn, 0);
                *groups = gn;
                if (extents) {
                        if (cand) {
                                en = COLnew(0, TYPE_oid, cnt, TRANSIENT);
                                if (en == NULL)
                                        goto error;
+                               BATsetcount(en, cnt);
                                memcpy(Tloc(en, 0), cand, cnt * sizeof(oid));
                                en->tsorted = 1;
                                en->trevsorted = cnt <= 1;
@@ -618,12 +617,10 @@ BATgroup_internal(BAT **groups, BAT **ex
                                en->tnonil = 1;
                                en->tdense = 0;
                        } else {
-                               en = COLnew(0, TYPE_void, BATcount(b), 
TRANSIENT);
+                               en = BATdense(0, b->hseqbase, cnt);
                                if (en == NULL)
                                        goto error;
-                               BATtseqbase(en, b->hseqbase + start);
                        }
-                       BATsetcount(en, cnt);
                        *extents = en;
                }
                if (histo) {
@@ -672,11 +669,9 @@ BATgroup_internal(BAT **groups, BAT **ex
                        *groups = gn;
                        if (extents) {
                                ngrp = b->hseqbase + start;
-                               en = COLnew(0, TYPE_void, 1, TRANSIENT);
+                               en = BATdense(0, b->hseqbase + start, 1);
                                if (en == NULL)
                                        goto error;
-                               BATtseqbase(en, b->hseqbase + start);
-                               BATsetcount(en, 1);
                                *extents = en;
                        }
                        if (histo) {
diff --git a/gdk/gdk_join.c b/gdk/gdk_join.c
--- a/gdk/gdk_join.c
+++ b/gdk/gdk_join.c
@@ -157,18 +157,16 @@ joininitresults(BAT **r1p, BAT **r2p, BU
        }
 
        if (maxsize == 0) {
-               r1 = COLnew(0, TYPE_void, 0, TRANSIENT);
+               r1 = BATdense(0, 0, 0);
                if (r1 == NULL) {
                        return BUN_NONE;
                }
-               BATtseqbase(r1, 0);
                if (r2p) {
-                       r2 = COLnew(0, TYPE_void, 0, TRANSIENT);
+                       r2 = BATdense(0, 0, 0);
                        if (r2 == NULL) {
                                BBPreclaim(r1);
                                return BUN_NONE;
                        }
-                       BATtseqbase(r2, 0);
                        *r2p = r2;
                }
                *r1p = r1;
@@ -3755,15 +3753,13 @@ BATjoin(BAT **r1p, BAT **r2p, BAT *l, BA
        if (sr)
                rcount = MIN(rcount, BATcount(sr));
        if (lcount == 0 || rcount == 0) {
-               r1 = COLnew(0, TYPE_void, 0, TRANSIENT);
-               r2 = COLnew(0, TYPE_void, 0, TRANSIENT);
+               r1 = BATdense(0, 0, 0);
+               r2 = BATdense(0, 0, 0);
                if (r1 == NULL || r2 == NULL) {
                        BBPreclaim(r1);
                        BBPreclaim(r2);
                        return GDK_FAIL;
                }
-               BATtseqbase(r1, 0);
-               BATtseqbase(r2, 0);
                *r1p = r1;
                *r2p = r2;
                return GDK_SUCCEED;
diff --git a/gdk/gdk_logger.c b/gdk/gdk_logger.c
--- a/gdk/gdk_logger.c
+++ b/gdk/gdk_logger.c
@@ -1236,18 +1236,11 @@ static BAT *
 bm_tids(BAT *b, BAT *d)
 {
        BUN sz = BATcount(b);
-       BAT *tids = COLnew(0, TYPE_void, 0, TRANSIENT);
+       BAT *tids = BATdense(0, 0, sz);
 
        if (tids == NULL)
                return NULL;
 
-       BATtseqbase(tids, 0);
-       BATsetcount(tids, sz);
-       tids->trevsorted = 0;
-
-       tids->tkey = 1;
-       tids->tdense = 1;
-
        if (BATcount(d)) {
                BAT *diff = BATdiff(tids, d, NULL, NULL, 0, BUN_NONE);
                logbat_destroy(tids);
diff --git a/gdk/gdk_sample.c b/gdk/gdk_sample.c
--- a/gdk/gdk_sample.c
+++ b/gdk/gdk_sample.c
@@ -123,20 +123,16 @@ BATsample(BAT *b, BUN n)
        cnt = BATcount(b);
        /* empty sample size */
        if (n == 0) {
-               bn = COLnew(0, TYPE_void, 0, TRANSIENT);
+               bn = BATdense(0, 0, 0);
                if (bn == NULL) {
                        return NULL;
                }
-               BATsetcount(bn, 0);
-               BATtseqbase(bn, 0);
        /* sample size is larger than the input BAT, return all oids */
        } else if (cnt <= n) {
-               bn = COLnew(0, TYPE_void, cnt, TRANSIENT);
+               bn = BATdense(0, b->hseqbase, cnt);
                if (bn == NULL) {
                        return NULL;
                }
-               BATsetcount(bn, cnt);
-               BATtseqbase(bn, b->hseqbase);
        } else {
                oid minoid = b->hseqbase;
                oid maxoid = b->hseqbase + cnt;
diff --git a/gdk/gdk_select.c b/gdk/gdk_select.c
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to