Changeset: 243640a99dad for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/243640a99dad Modified Files: clients/Tests/exports.stable.out gdk/gdk.h gdk/gdk_private.h gdk/gdk_rtree.c geom/monetdb5/geomBulk.c Branch: default Log Message:
Do some cleaning up of the RTree code. Remove unnecessary stuff from include files and fix some interfaces. diffs (truncated from 355 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 @@ -400,12 +400,10 @@ ssize_t OIDtoStr(str *dst, size_t *len, BUN ORDERfnd(BAT *b, Heap *oidxh, const void *v); BUN ORDERfndfirst(BAT *b, Heap *oidxh, const void *v); BUN ORDERfndlast(BAT *b, Heap *oidxh, const void *v); -void RTREEdecref(BAT *b); void RTREEdestroy(BAT *b); bool RTREEexists(BAT *b); -bool RTREEexists_bid(bat *bid); +bool RTREEexists_bid(bat bid); void RTREEfree(BAT *b); -void RTREEincref(BAT *b); BUN *RTREEsearch(BAT *b, mbr_t *inMBR, int result_limit); BUN SORTfnd(BAT *b, const void *v); BUN SORTfndfirst(BAT *b, const void *v); diff --git a/gdk/gdk.h b/gdk/gdk.h --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -357,13 +357,6 @@ gdk_export _Noreturn void GDKfatal(_In_z #include "stream.h" #include "mstring.h" -#ifdef HAVE_RTREE -#ifndef SIZEOF_RTREE_COORD_T -#define SIZEOF_RTREE_COORD_T 4 -#endif -#include <rtree.h> -#endif - #undef MIN #undef MAX #define MAX(A,B) ((A)<(B)?(B):(A)) @@ -1902,21 +1895,12 @@ gdk_export gdk_return BATsetstrimps(BAT /* Rtree structure functions */ #ifdef HAVE_RTREE -//TODO REMOVE -typedef struct mbr_t { - float xmin; - float ymin; - float xmax; - float ymax; - -} mbr_t; - gdk_export bool RTREEexists(BAT *b); -gdk_export bool RTREEexists_bid(bat *bid); +gdk_export bool RTREEexists_bid(bat bid); gdk_export gdk_return BATrtree(BAT *wkb, BAT* mbr); -gdk_export BUN* RTREEsearch(BAT *b, mbr_t *inMBR, int result_limit); -gdk_export void RTREEdecref(BAT *b); -gdk_export void RTREEincref(BAT *b); +/* inMBR is really a struct mbr * from geom module, but that is not + * available here */ +gdk_export BUN* RTREEsearch(BAT *b, const void *inMBR, int result_limit); #endif gdk_export void RTREEdestroy(BAT *b); diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h --- a/gdk/gdk_private.h +++ b/gdk/gdk_private.h @@ -459,14 +459,6 @@ struct Strimps { * bitstring construction */ }; -#ifdef HAVE_RTREE -struct RTree { - ATOMIC_TYPE refs; /* counter for logical references to the rtree */ - rtree_t *rtree; /* rtree structure */ - bool destroy; /* destroy rtree when there are no more logical references */ -}; -#endif - typedef struct { MT_Lock swap; } batlock_t; diff --git a/gdk/gdk_rtree.c b/gdk/gdk_rtree.c --- a/gdk/gdk_rtree.c +++ b/gdk/gdk_rtree.c @@ -25,15 +25,37 @@ * - DB Farm is persistent i.e. not in memory */ #ifdef HAVE_RTREE + +#ifndef SIZEOF_RTREE_COORD_T +#define SIZEOF_RTREE_COORD_T 4 +#endif +#include <rtree.h> + +struct RTree { + ATOMIC_TYPE refs; /* counter for logical references to the rtree */ + rtree_t *rtree; /* rtree structure */ + bool destroy; /* destroy rtree when there are no more logical references */ +}; + +/* this is a copy from the geom module */ +typedef struct mbr { + float xmin; + float ymin; + float xmax; + float ymax; + +} mbr; + static bool -RTREEpersistcheck (BAT *b) { +RTREEpersistcheck(BAT *b) +{ return ((BBP_status(b->batCacheid) & BBPEXISTING) && b->batInserted == b->batCount && !b->theap->dirty && !GDKinmemory(b->theap->farmid)); } -void +static void RTREEdecref(BAT *b) { ATOMIC_BASE_TYPE refs = ATOMIC_DEC(&b->trtree->refs); @@ -48,7 +70,7 @@ RTREEdecref(BAT *b) } -void +static void RTREEincref(BAT *b) { (void) ATOMIC_INC(&b->trtree->refs); @@ -56,7 +78,7 @@ RTREEincref(BAT *b) // Persist rtree to disk if the conditions are right static gdk_return -persistRtree (BAT *b) +persistRtree(BAT *b) { if (RTREEpersistcheck(b)) { //TODO Necessary? @@ -67,8 +89,7 @@ persistRtree (BAT *b) const char * filename = BBP_physical(b->batCacheid); int farmid = b->theap->farmid; - int fd = GDKfdlocate(farmid, filename, "w", "bsrt"); - FILE *file_stream = fdopen(fd,"w"); + FILE *file_stream = GDKfilelocate(farmid, filename, "w", "bsrt"); if (file_stream != NULL) { int err; @@ -79,20 +100,21 @@ persistRtree (BAT *b) return GDK_FAIL; } - if (!(GDKdebug & NOSYNCMASK)) { - #if defined(NATIVE_WIN32) - _commit(fd); - #elif defined(HAVE_FDATASYNC) - fdatasync(fd); - #elif defined(HAVE_FSYNC) - fsync(fd); - #endif + if (fflush(file_stream) == EOF || + (!(ATOMIC_GET(&GDKdebug) & NOSYNCMASK) +#if defined(NATIVE_WIN32) + && _commit(_fileno(file_stream)) < 0 +#elif defined(HAVE_FDATASYNC) + && fdatasync(fileno(file_stream)) < 0 +#elif defined(HAVE_FSYNC) + && fsync(fileno(file_stream)) < 0 +#endif + )) { + GDKsyserror("Syncing %s.bsrt failed\n", filename); } fclose(file_stream); } else { - GDKerror("%s",strerror(errno)); - close(fd); return GDK_FAIL; } } @@ -103,16 +125,13 @@ persistRtree (BAT *b) } static gdk_return -BATcheckrtree(BAT *b) { +BATcheckrtree(BAT *b) +{ const char * filename = BBP_physical(b->batCacheid); int farmid = b->theap->farmid; - int fd = GDKfdlocate(farmid, filename, "r", "bsrt"); //Do we have the rtree on file? - if (fd == -1) - return GDK_SUCCEED; - - FILE *file_stream = fdopen(fd,"r"); + FILE *file_stream = GDKfilelocate(farmid, filename, "r", "bsrt"); if (file_stream != NULL) { rtree_t* rtree = rtree_bsrt_read(file_stream); if (!rtree) { @@ -128,15 +147,14 @@ BATcheckrtree(BAT *b) { return GDK_SUCCEED; } else { - GDKerror("%s",strerror(errno)); - close(fd); return GDK_FAIL; } } //Check if RTree exists on file (previously created index) static bool -RTREEexistsonfile(BAT *b) { +RTREEexistsonfile(BAT *b) +{ const char * filename = BBP_physical(b->batCacheid); if (!b->theap) return false; @@ -176,11 +194,11 @@ RTREEexists(BAT *b) } bool -RTREEexists_bid(bat *bid) +RTREEexists_bid(bat bid) { BAT *b; bool ret; - if ((b = BATdescriptor(*bid)) == NULL) + if ((b = BATdescriptor(bid)) == NULL) return false; ret = RTREEexists(b); BBPunfix(b->batCacheid); @@ -188,7 +206,7 @@ RTREEexists_bid(bat *bid) } gdk_return -BATrtree(BAT *wkb, BAT *mbr) +BATrtree(BAT *wkb, BAT *mbrb) { BAT *pb; BATiter bi; @@ -219,12 +237,12 @@ BATrtree(BAT *wkb, BAT *mbr) GDKerror("rtree_new failed\n"); return GDK_FAIL; } - bi = bat_iterator(mbr); - canditer_init(&ci, mbr,NULL); + bi = bat_iterator(mbrb); + canditer_init(&ci, mbrb,NULL); for (BUN i = 0; i < ci.ncand; i++) { - oid p = canditer_next(&ci) - mbr->hseqbase; - mbr_t *inMBR = (mbr_t *)BUNtail(bi, p); + oid p = canditer_next(&ci) - mbrb->hseqbase; + const mbr *inMBR = (const mbr *)BUNtail(bi, p); rtree_id_t rtree_id = i; rtree_coord_t rect[4]; @@ -308,7 +326,8 @@ struct results_rtree { }; static int -f (rtree_id_t id, void *context) { +f(rtree_id_t id, void *context) +{ struct results_rtree *results_rtree = (struct results_rtree *) context; results_rtree->candidates[results_rtree->results_next++] = (BUN) id; --results_rtree->results_left; @@ -316,8 +335,10 @@ f (rtree_id_t id, void *context) { } BUN* -RTREEsearch(BAT *b, mbr_t *inMBR, int result_limit) { +RTREEsearch(BAT *b, const void *inMBRptr, int result_limit) +{ BAT *pb; + const mbr *inMBR = inMBRptr; if (VIEWtparent(b)) { pb = BBP_desc(VIEWtparent(b)); } else { @@ -364,12 +385,14 @@ RTREEsearch(BAT *b, mbr_t *inMBR, int re } #else void -RTREEdestroy(BAT *b) { +RTREEdestroy(BAT *b) +{ (void) b; } void -RTREEfree(BAT *b) { +RTREEfree(BAT *b) +{ (void) b; } #endif diff --git a/geom/monetdb5/geomBulk.c b/geom/monetdb5/geomBulk.c --- a/geom/monetdb5/geomBulk.c _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org