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