Changeset: 969e7d41969d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/969e7d41969d Modified Files: gdk/gdk.h gdk/gdk_bat.c monetdb5/modules/mal/batExtensions.c Branch: strheapvacuum Log Message:
start BATvacuum diffs (100 lines): diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -1174,7 +1174,7 @@ gdk_export BAT *COLcopy(BAT *b, int tt, gdk_export gdk_return BATgroup(BAT **groups, BAT **extents, BAT **histo, BAT *b, BAT *s, BAT *g, BAT *e, BAT *h) __attribute__((__warn_unused_result__)); - +gdk_export BAT *BATvacuum(BAT *b); /* * @- BAT Input/Output * @multitable @columnfractions 0.08 0.7 diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -2671,3 +2671,51 @@ BATassertProps(BAT *b) assert(!b->tnil || seennil); } } + +BAT* +BATvacuum(BAT* b) { + BATcheck(b, NULL); + BAT *bn = NULL; + + assert(b->tvarsized); + + bn = COLnew(b->hseqbase, BATttype(b), BATcapacity(b), b->batRole); + if (bn == NULL) + return NULL; + + bn->tshift = b->tshift; + bn->twidth = b->twidth; + BUN p, q, r = 0; + BATiter bi = bat_iterator(b); + + BATloop(b, p, q) { + const void *t = BUNtail(bi, p); + + if (bunfastapp_nocheck(bn, r, t, Tsize(bn)) != GDK_SUCCEED) + goto bunins_failed; + r++; + } + /* set properties that types may have changed */ + bn->theap->dirty |= BATcount(bn) > 0; + BATtseqbase(bn, oid_nil); + BATkey(bn, BATtkey(b)); + bn->tsorted = BATtordered(b); + bn->trevsorted = BATtrevordered(b); + bn->batDirtydesc = true; + bn->tnorevsorted = b->tnorevsorted; + if (b->tnokey[0] != b->tnokey[1]) { + bn->tnokey[0] = b->tnokey[0]; + bn->tnokey[1] = b->tnokey[1]; + } else { + bn->tnokey[0] = bn->tnokey[1] = 0; + } + bn->tnosorted = b->tnosorted; + bn->tnonil = b->tnonil; + bn->tnil = b->tnil; + + return bn; + bunins_failed: + BBPreclaim(bn); + return NULL; +} + diff --git a/monetdb5/modules/mal/batExtensions.c b/monetdb5/modules/mal/batExtensions.c --- a/monetdb5/modules/mal/batExtensions.c +++ b/monetdb5/modules/mal/batExtensions.c @@ -272,6 +272,21 @@ CMDBATappend_bulk(Client cntxt, MalBlkPt return MAL_SUCCEED; } +static str +CMDBATvacuum(bat *r, const bat *bid) +{ + BAT *b, *rb; + + if ((b = BATdescriptor(*bid)) == NULL) + throw(MAL, "bat.vacuum", SQLSTATE(HY002) RUNTIME_OBJECT_MISSING); + if ((rb = BATvacuum(b)) == NULL) + throw(MAL, "bat.vacuum", GDK_EXCEPTION); + + BBPkeepref(*r = rb->batCacheid); + BBPunfix(b->batCacheid); + return MAL_SUCCEED; +} + #include "mel.h" mel_func batExtensions_init_funcs[] = { pattern("bat", "new", CMDBATnew, false, "", args(1,2, batargany("",1),argany("tt",1))), @@ -301,6 +316,7 @@ mel_func batExtensions_init_funcs[] = { #endif pattern("bat", "appendBulk", CMDBATappend_bulk, false, "append the arguments ins to i", args(1,4, batargany("",1), batargany("i",1),arg("force",bit),varargany("ins",1))), pattern("bat", "appendBulk", CMDBATappend_bulk, false, "append the arguments ins to i", args(1,4, batargany("",1), batargany("i",1),arg("force",bit),batvarargany("ins",1))), + command("bat", "vacuum", CMDBATvacuum, false, "", args(1,2, batarg("",str),batarg("b",str))), { .imp=NULL } }; #include "mal_import.h" _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list