Changeset: 3a42e350f206 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=3a42e350f206 Modified Files: clients/Tests/exports.stable.out gdk/ChangeLog gdk/gdk.h gdk/gdk_aggr.c gdk/gdk_align.c gdk/gdk_bat.c gdk/gdk_batop.c gdk/gdk_cross.c gdk/gdk_firstn.c gdk/gdk_group.c gdk/gdk_join.c gdk/gdk_logger.c gdk/gdk_project.c gdk/gdk_sample.c gdk/gdk_select.c gdk/gdk_unique.c monetdb5/mal/mal_authorize.c monetdb5/modules/mal/batExtensions.c monetdb5/modules/mal/inspect.c monetdb5/modules/mal/iterator.c monetdb5/modules/mal/mat.c sql/backends/monet5/generator/generator.c sql/backends/monet5/sql.c sql/storage/bat/bat_storage.c sql/storage/bat/bat_utils.c Branch: default Log Message:
Replaced BATseqbase with BAThseqbase and BATtseqbase. diffs (truncated from 922 to 300 lines): diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out --- a/clients/Tests/exports.stable.out +++ b/clients/Tests/exports.stable.out @@ -132,6 +132,7 @@ BAT *BATgroupvariance_population(BAT *b, BAT *BATgroupvariance_sample(BAT *b, BAT *g, BAT *e, BAT *s, int tp, int skip_nils, int abort_on_error); BUN BATgrows(BAT *b); gdk_return BAThash(BAT *b, BUN masksize); +void BAThseqbase(BAT *b, oid o); gdk_return BATimprints(BAT *b); BAT *BATintersectcand(BAT *a, BAT *b); gdk_return BATjoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); @@ -161,7 +162,6 @@ BAT *BATsample(BAT *b, BUN n); gdk_return BATsave(BAT *b); BAT *BATselect(BAT *b, BAT *s, const void *tl, const void *th, int li, int hi, int anti); gdk_return BATsemijoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int nil_matches, BUN estimate); -void BATseqbase(BAT *b, oid o); gdk_return BATsetaccess(BAT *b, int mode); void BATsetcapacity(BAT *b, BUN cnt); void BATsetcount(BAT *b, BUN cnt); @@ -172,6 +172,7 @@ gdk_return BATsubcross(BAT **r1p, BAT ** gdk_return BATsum(void *res, int tp, BAT *b, BAT *s, int skip_nils, int abort_on_error, int nil_if_empty); gdk_return BATthetajoin(BAT **r1p, BAT **r2p, BAT *l, BAT *r, BAT *sl, BAT *sr, int op, int nil_matches, BUN estimate); BAT *BATthetaselect(BAT *b, BAT *s, const void *val, const char *op); +void BATtseqbase(BAT *b, oid o); void BATundo(BAT *b); BAT *BATunique(BAT *b, BAT *s); BBPrec *BBP[N_BBPINIT]; diff --git a/gdk/ChangeLog b/gdk/ChangeLog --- a/gdk/ChangeLog +++ b/gdk/ChangeLog @@ -1,6 +1,11 @@ # ChangeLog file for MonetDB # This file is updated with Maddlog +* Mon Jun 27 2016 Sjoerd Mullender <[email protected]> +- Replaced BATseqbase with BAThseqbase and BATtseqbase, the former for + setting the seqbase on the HEAD, the latter for setting the seqbase + on the TAIL. + * Fri Jun 24 2016 Sjoerd Mullender <[email protected]> - Replaced function BATnew with COLnew with slightly different arguments: the first argument of COLnew is the SEQBASE of the head column (which diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -1486,7 +1486,8 @@ gdk_export gdk_return BATkey(BAT *b, int gdk_export gdk_return BATmode(BAT *b, int onoff); gdk_export void BATroles(BAT *b, const char *hnme, const char *tnme); gdk_export int BATname(BAT *b, const char *nme); -gdk_export void BATseqbase(BAT *b, oid o); +gdk_export void BAThseqbase(BAT *b, oid o); +gdk_export void BATtseqbase(BAT *b, oid o); gdk_export gdk_return BATsetaccess(BAT *b, int mode); gdk_export int BATgetaccess(BAT *b); diff --git a/gdk/gdk_aggr.c b/gdk/gdk_aggr.c --- a/gdk/gdk_aggr.c +++ b/gdk/gdk_aggr.c @@ -2433,7 +2433,7 @@ BATgroupquantile(BAT *b, BAT *g, BAT *e, /* singleton groups, so calculating quantile is * easy */ bn = COLcopy(b, b->ttype, 0, TRANSIENT); - BATseqbase(bn, g->tseqbase); + BAThseqbase(bn, g->tseqbase); if (freeg) BBPunfix(g->batCacheid); return bn; diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c --- a/gdk/gdk_align.c +++ b/gdk/gdk_align.c @@ -104,14 +104,14 @@ ALIGNsetT(BAT *b1, BAT *b2) b1->tdense = TRUE; else if (b2->tseqbase == oid_nil) b1->T->nonil = FALSE; - BATseqbase(BATmirror(b1), b2->tseqbase); + BATtseqbase(b1, b2->tseqbase); } else if (b1->ttype != TYPE_void) { /* b2 is not dense, so set b1 not dense */ b1->tdense = FALSE; - BATseqbase(BATmirror(b1), oid_nil); + BATtseqbase(b1, oid_nil); b1->T->nonil = b2->T->nonil; } else if (BATtkey(b2)) - BATseqbase(BATmirror(b1), 0); + BATtseqbase(b1, 0); BATkey(BATmirror(b1), BATtkey(b2)); b1->tsorted = BATtordered(b2); b1->trevsorted = BATtrevordered(b2); diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -274,7 +274,7 @@ BATdense(oid hseq, oid tseq, BUN cnt) bn = COLnew(hseq, TYPE_void, 0, TRANSIENT); if (bn == NULL) return NULL; - BATseqbase(BATmirror(bn), tseq); + BATtseqbase(bn, tseq); BATsetcount(bn, cnt); return bn; } @@ -487,8 +487,8 @@ BATclear(BAT *b, int force) else b->batFirst = b->batInserted; BATsetcount(b,0); - BATseqbase(b, 0); - BATseqbase(BATmirror(b), 0); + BAThseqbase(b, 0); + BATtseqbase(b, 0); b->batDirty = TRUE; BATsettrivprop(b); b->H->nosorted = b->H->norevsorted = b->H->nodense = 0; @@ -1503,52 +1503,79 @@ BATkey(BAT *b, int flag) return GDK_SUCCEED; } +void +BAThseqbase(BAT *b, oid o) +{ + if (b == NULL) + return; + assert(o < oid_nil); + assert(o + BATcount(b) < oid_nil); + assert(b->htype == TYPE_void); + if (b->hseqbase != o) { + b->batDirtydesc = TRUE; + b->hseqbase = o; + /* zap alignment if column is changed by new + * seqbase */ + b->halign = 0; + } + + b->hrevsorted = b->batCount <= 1; + if (!b->hrevsorted) + b->H->norevsorted = BUNfirst(b) + 1; + + /* other properties should already be correct */ + assert(b->hkey & 1); + assert(b->H->nonil); + assert(!b->H->nil); + assert(b->hsorted); +} void -BATseqbase(BAT *b, oid o) +BATtseqbase(BAT *b, oid o) { if (b == NULL) return; assert(o <= oid_nil); - if (ATOMtype(b->htype) == TYPE_oid) { - if (b->hseqbase != o) { + assert(o == oid_nil || o + BATcount(b) < oid_nil); + if (ATOMtype(b->ttype) == TYPE_oid) { + if (b->tseqbase != o) { b->batDirtydesc = TRUE; /* zap alignment if column is changed by new * seqbase */ - if (b->htype == TYPE_void) - b->halign = 0; + if (b->ttype == TYPE_void) + b->talign = 0; } - b->hseqbase = o; - if (b->htype == TYPE_oid && o == oid_nil) { - b->hdense = 0; - b->H->nodense = BUNfirst(b); + b->tseqbase = o; + if (b->ttype == TYPE_oid && o == oid_nil) { + b->tdense = 0; + b->T->nodense = BUNfirst(b); } /* adapt keyness */ - if (BAThvoid(b)) { + if (BATtvoid(b)) { if (o == oid_nil) { - b->hkey = b->batCount <= 1; - b->H->nonil = b->batCount == 0; - b->H->nil = b->batCount > 0; - b->hsorted = b->hrevsorted = 1; - b->H->nosorted = b->H->norevsorted = 0; - if (!b->hkey) { - b->H->nokey[0] = BUNfirst(b); - b->H->nokey[1] = BUNfirst(b) + 1; + b->tkey = b->batCount <= 1; + b->T->nonil = b->batCount == 0; + b->T->nil = b->batCount > 0; + b->tsorted = b->trevsorted = 1; + b->T->nosorted = b->T->norevsorted = 0; + if (!b->tkey) { + b->T->nokey[0] = BUNfirst(b); + b->T->nokey[1] = BUNfirst(b) + 1; } else { - b->H->nokey[0] = b->H->nokey[1] = 0; + b->T->nokey[0] = b->T->nokey[1] = 0; } } else { - if (!b->hkey) { - b->hkey = TRUE; - b->H->nokey[0] = b->H->nokey[1] = 0; + if (!b->tkey) { + b->tkey = TRUE; + b->T->nokey[0] = b->T->nokey[1] = 0; } - b->H->nonil = 1; - b->H->nil = 0; - b->hsorted = 1; - b->hrevsorted = b->batCount <= 1; - if (!b->hrevsorted) - b->H->norevsorted = BUNfirst(b) + 1; + b->T->nonil = 1; + b->T->nil = 0; + b->tsorted = 1; + b->trevsorted = b->batCount <= 1; + if (!b->trevsorted) + b->T->norevsorted = BUNfirst(b) + 1; } } } @@ -2283,11 +2310,11 @@ BATassertTailProps(BAT *b) * bit, when set, indicates that all values must be distinct * (BOUND2BTRUE). * - * Note that the functions BATseqbase and BATkey also set more + * Note that the functions BATtseqbase and BATkey also set more * properties than you might suspect. When setting properties on a * newly created and filled BAT, you may want to first make sure the * batCount is set correctly (e.g. by calling BATsetcount), then use - * BATseqbase and BATkey, and finally set the other properties. + * BAThseqbase and BATkey, and finally set the other properties. */ void diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -395,7 +395,7 @@ BATappend(BAT *b, BAT *n, bit force) f = *(oid *) BUNtloc(bat_iterator(n), BUNfirst(n)); if (BATcount(b) == 0 && f != oid_nil) - BATseqbase(BATmirror(b), f); + BATtseqbase(b, f); if (BATtdense(n) && BATcount(b) + b->tseqbase == f) { sz += BATcount(b); BATsetcount(b, sz); @@ -712,7 +712,7 @@ BATslice(BAT *b, BUN l, BUN h) if (bn == NULL) return NULL; VIEWbounds(b, bn, l - BUNfirst(b), h - BUNfirst(b)); - BATseqbase(bn, (oid) (b->hseqbase + low)); + BAThseqbase(bn, (oid) (b->hseqbase + low)); } else { /* create a new BAT and put everything into it */ BUN p = l; @@ -765,16 +765,16 @@ BATslice(BAT *b, BUN l, BUN h) bni = bat_iterator(bn); if (BATtdense(b)) { bn->tdense = TRUE; - BATseqbase(BATmirror(bn), (oid) (b->tseqbase + low)); + BATtseqbase(bn, (oid) (b->tseqbase + low)); } else if (bn->tkey && bn->ttype == TYPE_oid) { if (BATcount(bn) == 0) { bn->tdense = TRUE; - BATseqbase(BATmirror(bn), 0); + BATtseqbase(bn, 0); } else if (bn->tsorted && (foid = *(oid *) BUNtloc(bni, BUNfirst(bn))) != oid_nil && foid + BATcount(bn) - 1 == *(oid *) BUNtloc(bni, BUNlast(bn) - 1)) { bn->tdense = TRUE; - BATseqbase(BATmirror(bn), *(oid *) BUNtloc(bni, BUNfirst(bn))); + BATtseqbase(bn, *(oid *) BUNtloc(bni, BUNfirst(bn))); } } if (bn->batCount <= 1) { @@ -1017,7 +1017,7 @@ BATsort(BAT **sorted, BAT **order, BAT * if (on == NULL) goto error; BATsetcount(on, BATcount(b)); - BATseqbase(BATmirror(on), b->hseqbase); + BATtseqbase(on, b->hseqbase); *order = on; } if (groups) { @@ -1027,7 +1027,7 @@ BATsort(BAT **sorted, BAT **order, BAT * if (gn == NULL) goto error; BATsetcount(gn, BATcount(b)); - BATseqbase(BATmirror(gn), 0); + BATtseqbase(gn, 0); } else { /* single group */ const oid *o = 0; @@ -1067,7 +1067,7 @@ BATsort(BAT **sorted, BAT **order, BAT * TRANSIENT); if (on == NULL) goto error; - BATseqbase(on, b->hseqbase); + BAThseqbase(on, b->hseqbase); } else { /* create new order */ _______________________________________________ checkin-list mailing list [email protected] https://www.monetdb.org/mailman/listinfo/checkin-list
