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

Reply via email to