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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list