Changeset: 6dac84827ce4 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/6dac84827ce4
Modified Files:
gdk/gdk.h
gdk/gdk_rtree.c
geom/monetdb5/geom.c
geom/monetdb5/geomBulk.c
Branch: geo-update-dev
Log Message:
Added RTREEdestroy to free the rtree structure in memory and delete the
associated file in the bat dir. Changed RTree create/persist condition.
diffs (141 lines):
diff --git a/gdk/gdk.h b/gdk/gdk.h
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -746,7 +746,7 @@ typedef struct {
Heap *vheap; /* space for the varsized data. */
Hash *hash; /* hash table */
rtree_t *rtree;
-
+
Imprints *imprints; /* column imprints index */
Heap *orderidx; /* order oid index */
Strimps *strimps; /* string imprint index */
@@ -1861,6 +1861,22 @@ gdk_export void STRMPdestroy(BAT *b);
gdk_export bool BAThasstrimps(BAT *b);
gdk_export gdk_return BATsetstrimps(BAT *b);
+/* Rtree structure functions */
+//TODO REMOVE
+typedef struct mbr_t {
+ float xmin;
+ float ymin;
+ float xmax;
+ float ymax;
+
+} mbr_t;
+
+gdk_export bool RTREEexists(BAT *b);
+gdk_export gdk_return BATrtree(BAT *wkb, BAT* mbr);
+gdk_export void RTREEdestroy(BAT *b);
+gdk_export BUN* RTREEsearch(BAT *b, mbr_t *inMBR, int result_limit);
+gdk_export void RTREEdestroy(BAT *b);
+
/* The ordered index structure */
gdk_export gdk_return BATorderidx(BAT *b, bool stable);
diff --git a/gdk/gdk_rtree.c b/gdk/gdk_rtree.c
--- a/gdk/gdk_rtree.c
+++ b/gdk/gdk_rtree.c
@@ -1,24 +1,30 @@
#include "monetdb_config.h"
#include "gdk.h"
#include "gdk_private.h"
-#include "gdk_rtree.h"
//TODO Why use BBPselectfarm?
+//TODO Do we need to guard against dirty heap and deleted rows?
+//TODO Where do put the RTREEdestroy calls? We should invalidate on updates,
deletes and inserts
+
+/* Conditions to create and persist the RTree:
+ * - BAT has to be persistent
+ * - No deleted rows (when does batInserted update?)
+ * - The heap is not dirty -> no new values
+ * - DB Farm is persistent i.e. not in memory
+ */
+static bool
+RTreecreatecheck (BAT *b) {
+ return ((BBP_status(b->batCacheid) & BBPEXISTING)
+ && b->batInserted == b->batCount
+ && !b->theap->dirty
+ && !GDKinmemory(b->theap->farmid));
+}
// Persist rtree to disk if the conditions are right
static gdk_return
persistRtree (BAT *b)
{
- /* Conditions to persist the RTree:
- * - BAT has to be persistent
- * - No deleted rows (when does batInserted update?)
- * - The heap is not dirty -> no new values
- * - DB Farm is persistent i.e. not in memory
- */
- if ((BBP_status(b->batCacheid) & BBPEXISTING)
- && b->batInserted == b->batCount
- && !b->theap->dirty
- && !GDKinmemory(b->theap->farmid)) {
+ if (RTreecreatecheck(b)) {
//TODO Necessary?
BBPfix(b->batCacheid);
rtree_t *rtree = b->T.rtree;
@@ -129,7 +135,7 @@ BATrtree(BAT *wkb, BAT *mbr)
}
//Check if rtree already exists
- if (pb->T.rtree == NULL) {
+ if (pb->T.rtree == NULL && RTreecreatecheck(pb)) {
//If it doesn't exist, take the lock to create/get the rtree
MT_lock_set(&pb->batIdxLock);
@@ -168,6 +174,29 @@ BATrtree(BAT *wkb, BAT *mbr)
return GDK_SUCCEED;
}
+void
+RTREEdestroy(BAT *b)
+{
+ BAT *pb;
+ if (VIEWtparent(b)) {
+ pb = BBP_cache(VIEWtparent(b));
+ assert(pb);
+ } else {
+ pb = b;
+ }
+
+ if (pb && pb->T.rtree) {
+ MT_lock_set(&pb->batIdxLock);
+ rtree_destroy(pb->T.rtree);
+ pb->T.rtree = NULL;
+ GDKunlink(pb->theap->farmid,
+ BATDIR,
+ BBP_physical(b->batCacheid),
+ "bsrt");
+ MT_lock_unset(&b->batIdxLock);
+ }
+}
+
struct results_rtree {
int results_next;
int results_left;
diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -16,7 +16,6 @@
#include "geom_atoms.h"
#include "gdk_logger.h"
#include "mal_exception.h"
-#include "gdk_rtree.h"
mbr mbrNIL = {0}; // will be initialized properly by geom prelude
diff --git a/geom/monetdb5/geomBulk.c b/geom/monetdb5/geomBulk.c
--- a/geom/monetdb5/geomBulk.c
+++ b/geom/monetdb5/geomBulk.c
@@ -13,7 +13,6 @@
#include "geom.h"
#include "geod.h"
#include "geom_atoms.h"
-#include "gdk_rtree.h"
/********** Geo Update Start **********/
static str
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]