Changeset: e2ef0a33436a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/e2ef0a33436a
Modified Files:
geom/monetdb5/geom.c
geom/monetdb5/geomBulk.c
geom/monetdb5/geom_atoms.c
geom/monetdb5/geom_atoms.h
Branch: resource_management
Log Message:
move geom to allocator
diffs (truncated from 2168 to 300 lines):
diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -53,7 +53,8 @@ GEOSGeom_getCollectionType (int GEOSGeom
str
wkbCollectAggrSubGroupedCand(Client ctx, bat *outid, const bat *bid, const bat
*gid, const bat *eid, const bat *sid, const bit *skip_nils)
{
- (void) ctx;
+ allocator *ma = ctx->alloc;
+ assert(ma);
BAT *b = NULL, *g = NULL, *s = NULL, *out = NULL;
BAT *sortedgroups, *sortedorder;
BATiter bi;
@@ -123,18 +124,18 @@ wkbCollectAggrSubGroupedCand(Client ctx,
if (ngrp) {
//All unions for output BAT
- if ((unions = GDKzalloc(sizeof(wkb *) * ngrp)) == NULL) {
+ if ((unions = ma_zalloc(ma, sizeof(wkb *) * ngrp)) == NULL) {
msg = createException(MAL, "geom.Collect",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
BBPreclaim(out);
goto free;
}
//Intermediate array for all the geometries in a group
- if ((unionGroup = GDKzalloc(sizeof(GEOSGeom) * ci.ncand)) ==
NULL) {
+ if ((unionGroup = ma_zalloc(ma, sizeof(GEOSGeom) * ci.ncand))
== NULL) {
msg = createException(MAL, "geom.Collect",
SQLSTATE(HY013) MAL_MALLOC_FAIL);
BBPreclaim(out);
- if (unions)
- GDKfree(unions);
+ //if (unions)
+ // GDKfree(unions);
goto free;
}
@@ -159,17 +160,17 @@ wkbCollectAggrSubGroupedCand(Client ctx,
unions[lastGrp] = geos2wkb(collection);
GEOSGeom_destroy_r(geoshandle,
collection);
- GDKfree(unionGroup);
-
- if ((unionGroup =
GDKzalloc(sizeof(GEOSGeom) * ci.ncand)) == NULL) {
+ //GDKfree(unionGroup);
+
+ if ((unionGroup = ma_zalloc(ma,
sizeof(GEOSGeom) * ci.ncand)) == NULL) {
msg = createException(MAL,
"geom.Collect", SQLSTATE(HY013) MAL_MALLOC_FAIL);
//Frees
bat_iterator_end(&bi);
- if (unions) {
- for (BUN i = 0; i <
ngrp; i++)
-
GDKfree(unions[i]);
- GDKfree(unions);
- }
+ //if (unions) {
+ // for (BUN i = 0; i <
ngrp; i++)
+ //
GDKfree(unions[i]);
+ // GDKfree(unions);
+ //}
goto free;
}
}
@@ -189,23 +190,23 @@ wkbCollectAggrSubGroupedCand(Client ctx,
unions[lastGrp] = geos2wkb(collection);
GEOSGeom_destroy_r(geoshandle, collection);
- GDKfree(unionGroup);
+ //GDKfree(unionGroup);
if (BUNappendmulti(out, unions, ngrp, false) != GDK_SUCCEED) {
msg = createException(MAL, "geom.Union",
SQLSTATE(38000) "BUNappend operation failed");
bat_iterator_end(&bi);
if (unions) {
- for (BUN i = 0; i < ngrp; i++)
- GDKfree(unions[i]);
- GDKfree(unions);
+ //for (BUN i = 0; i < ngrp; i++)
+ // GDKfree(unions[i]);
+ //GDKfree(unions);
}
goto free;
}
bat_iterator_end(&bi);
- for (BUN i = 0; i < ngrp; i++)
- GDKfree(unions[i]);
- GDKfree(unions);
+ //for (BUN i = 0; i < ngrp; i++)
+ // GDKfree(unions[i]);
+ //GDKfree(unions);
}
*outid = out->batCacheid;
@@ -235,7 +236,8 @@ wkbCollectAggrSubGrouped(Client ctx, bat
str
wkbCollectAggr(Client ctx, wkb **out, const bat *bid) {
- (void) ctx;
+ allocator *ma = ctx->alloc;
+ assert(ma);
str msg = MAL_SUCCEED;
BAT *b = NULL;
GEOSGeom *unionGroup = NULL, collection;
@@ -248,7 +250,7 @@ wkbCollectAggr(Client ctx, wkb **out, co
BUN count = BATcount(b);
- if ((unionGroup = GDKzalloc(sizeof(GEOSGeom) * count)) == NULL) {
+ if ((unionGroup = ma_zalloc(ma, sizeof(GEOSGeom) * count)) == NULL) {
msg = createException(MAL, "geom.Collect", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
BBPunfix(b->batCacheid);
return msg;
@@ -282,8 +284,8 @@ wkbCollectAggr(Client ctx, wkb **out, co
// collection. Check libgeos GEOSGeom_createCollection_r(geoshandle, ) for
more.
bat_iterator_end(&bi);
GEOSGeom_destroy_r(geoshandle, collection);
- if (unionGroup)
- GDKfree(unionGroup);
+ //if (unionGroup)
+ //GDKfree(unionGroup);
BBPunfix(b->batCacheid);
return msg;
@@ -527,6 +529,8 @@ transformLinearRing(GEOSGeometry **trans
str
transformPolygon(GEOSGeometry **transformedGeometry, const GEOSGeometry
*geosGeometry, PJ *P, int srid)
{
+ allocator *ma = MT_thread_getallocator();
+ assert(ma);
const GEOSGeometry *exteriorRingGeometry;
GEOSGeometry *transformedExteriorRingGeometry = NULL;
GEOSGeometry **transformedInteriorRingGeometries = NULL;
@@ -557,7 +561,7 @@ transformPolygon(GEOSGeometry **transfor
if(numInteriorRings > 0)
{
/* iterate over the interiorRing and transform each one of them
*/
- transformedInteriorRingGeometries = GDKmalloc(numInteriorRings
* sizeof(GEOSGeometry *));
+ transformedInteriorRingGeometries = ma_alloc(ma,
numInteriorRings * sizeof(GEOSGeometry *));
if (transformedInteriorRingGeometries == NULL) {
*transformedGeometry = NULL;
GEOSGeom_destroy_r(geoshandle,
transformedExteriorRingGeometry);
@@ -568,7 +572,7 @@ transformPolygon(GEOSGeometry **transfor
if (ret != MAL_SUCCEED) {
while (--i >= 0)
GEOSGeom_destroy_r(geoshandle,
transformedInteriorRingGeometries[i]);
- GDKfree(transformedInteriorRingGeometries);
+ //GDKfree(transformedInteriorRingGeometries);
GEOSGeom_destroy_r(geoshandle,
transformedExteriorRingGeometry);
*transformedGeometry = NULL;
return ret;
@@ -584,7 +588,7 @@ transformPolygon(GEOSGeometry **transfor
GEOSGeom_destroy_r(geoshandle,
transformedInteriorRingGeometries[i]);
ret = createException(MAL, "geom.Transform", SQLSTATE(38000)
"Geos operation GEOSGeom_createPolygon failed");
}
- GDKfree(transformedInteriorRingGeometries);
+ //GDKfree(transformedInteriorRingGeometries);
//GEOSGeom_destroy_r(geoshandle, transformedExteriorRingGeometry);
return ret;
}
@@ -592,6 +596,8 @@ transformPolygon(GEOSGeometry **transfor
str
transformMultiGeometry(GEOSGeometry **transformedGeometry, const GEOSGeometry
*geosGeometry, PJ *P, int srid, int geometryType)
{
+ allocator *ma = MT_thread_getallocator();
+ assert(ma);
int geometriesNum, subGeometryType, i;
GEOSGeometry **transformedMultiGeometries = NULL;
const GEOSGeometry *multiGeometry = NULL;
@@ -600,7 +606,7 @@ transformMultiGeometry(GEOSGeometry **tr
geometriesNum = GEOSGetNumGeometries_r(geoshandle, geosGeometry);
if (geometriesNum == -1)
throw(MAL, "geom.Transform", SQLSTATE(38000) "Geos operation
GEOSGetNumGeometries failed");
- transformedMultiGeometries = GDKmalloc(geometriesNum *
sizeof(GEOSGeometry *));
+ transformedMultiGeometries = ma_alloc(ma, geometriesNum *
sizeof(GEOSGeometry *));
if (transformedMultiGeometries == NULL)
throw(MAL, "geom.Transform", SQLSTATE(HY013) MAL_MALLOC_FAIL);
@@ -632,7 +638,7 @@ transformMultiGeometry(GEOSGeometry **tr
if (ret != MAL_SUCCEED) {
while (--i >= 0)
GEOSGeom_destroy_r(geoshandle,
transformedMultiGeometries[i]);
- GDKfree(transformedMultiGeometries);
+ //GDKfree(transformedMultiGeometries);
*transformedGeometry = NULL;
return ret;
}
@@ -646,7 +652,7 @@ transformMultiGeometry(GEOSGeometry **tr
GEOSGeom_destroy_r(geoshandle,
transformedMultiGeometries[i]);
ret = createException(MAL, "geom.Transform", SQLSTATE(38000)
"Geos operation GEOSGeom_createCollection failed");
}
- GDKfree(transformedMultiGeometries);
+ //GDKfree(transformedMultiGeometries);
return ret;
}
@@ -680,7 +686,7 @@ wkbTransform(Client ctx, wkb **transform
is_int_nil(*srid_dst) ||
strNil(*proj4_src_str) ||
strNil(*proj4_dst_str)) {
- if ((*transformedWKB = wkbNULLcopy()) == NULL)
+ if ((*transformedWKB = wkbNULLcopy(ctx->alloc)) == NULL)
throw(MAL, "geom.Transform", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
return MAL_SUCCEED;
}
@@ -690,7 +696,7 @@ wkbTransform(Client ctx, wkb **transform
if (strcmp(*proj4_dst_str, "null") == 0)
throw(MAL, "geom.Transform", SQLSTATE(38000) "Cannot find in
spatial_ref_sys srid %d\n", *srid_dst);
if (strcmp(*proj4_src_str, *proj4_dst_str) == 0) {
- if ((*transformedWKB = wkbCopy(*geomWKB)) == NULL)
+ if ((*transformedWKB = wkbCopy(ctx->alloc, *geomWKB)) == NULL)
throw(MAL, "geom.Transform", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
return MAL_SUCCEED;
}
@@ -910,6 +916,8 @@ forceDimLinearRing(GEOSGeometry **outGeo
static str
forceDimPolygon(GEOSGeometry **outGeometry, const GEOSGeometry *geosGeometry,
int dim)
{
+ allocator *ma = MT_thread_getallocator();
+ assert(ma);
const GEOSGeometry *exteriorRingGeometry;
GEOSGeometry *transformedExteriorRingGeometry = NULL;
GEOSGeometry **transformedInteriorRingGeometries = NULL;
@@ -936,7 +944,7 @@ forceDimPolygon(GEOSGeometry **outGeomet
}
/* iterate over the interiorRing and translate each one of them */
- transformedInteriorRingGeometries = GDKmalloc(numInteriorRings *
sizeof(GEOSGeometry *));
+ transformedInteriorRingGeometries = ma_alloc(ma, numInteriorRings *
sizeof(GEOSGeometry *));
if (transformedInteriorRingGeometries == NULL) {
*outGeometry = NULL;
GEOSGeom_destroy_r(geoshandle, transformedExteriorRingGeometry);
@@ -946,7 +954,7 @@ forceDimPolygon(GEOSGeometry **outGeomet
if ((ret =
forceDimLinearRing(&transformedInteriorRingGeometries[i],
GEOSGetInteriorRingN_r(geoshandle, geosGeometry, i), dim)) != MAL_SUCCEED) {
while (--i >= 0)
GEOSGeom_destroy_r(geoshandle,
transformedInteriorRingGeometries[i]);
- GDKfree(transformedInteriorRingGeometries);
+ //GDKfree(transformedInteriorRingGeometries);
GEOSGeom_destroy_r(geoshandle,
transformedExteriorRingGeometry);
*outGeometry = NULL;
return ret;
@@ -959,7 +967,7 @@ forceDimPolygon(GEOSGeometry **outGeomet
GEOSGeom_destroy_r(geoshandle,
transformedInteriorRingGeometries[i]);
ret = createException(MAL, "geom.ForceDim", SQLSTATE(38000)
"Geos operation GEOSGeom_createPolygon failed");
}
- GDKfree(transformedInteriorRingGeometries);
+ //GDKfree(transformedInteriorRingGeometries);
GEOSGeom_destroy_r(geoshandle, transformedExteriorRingGeometry);
return ret;
@@ -969,12 +977,14 @@ static str forceDimGeometry(GEOSGeometry
static str
forceDimMultiGeometry(GEOSGeometry **outGeometry, const GEOSGeometry
*geosGeometry, int dim)
{
+ allocator *ma = MT_thread_getallocator();
+ assert(ma);
int geometriesNum, i;
GEOSGeometry **transformedMultiGeometries = NULL;
str err = MAL_SUCCEED;
geometriesNum = GEOSGetNumGeometries_r(geoshandle, geosGeometry);
- transformedMultiGeometries = GDKmalloc(geometriesNum *
sizeof(GEOSGeometry *));
+ transformedMultiGeometries = ma_alloc(ma, geometriesNum *
sizeof(GEOSGeometry *));
if (transformedMultiGeometries == NULL)
throw(MAL, "geom.ForceDim", SQLSTATE(HY013) MAL_MALLOC_FAIL);
@@ -986,7 +996,7 @@ forceDimMultiGeometry(GEOSGeometry **out
if ((err = forceDimGeometry(&transformedMultiGeometries[i],
multiGeometry, dim)) != MAL_SUCCEED) {
while (++i < geometriesNum)
GEOSGeom_destroy_r(geoshandle,
transformedMultiGeometries[i]);
- GDKfree(transformedMultiGeometries);
+ //GDKfree(transformedMultiGeometries);
*outGeometry = NULL;
return err;
}
@@ -998,7 +1008,7 @@ forceDimMultiGeometry(GEOSGeometry **out
GEOSGeom_destroy_r(geoshandle,
transformedMultiGeometries[i]);
err = createException(MAL, "geom.ForceDim", SQLSTATE(38000)
"Geos operation GEOSGeom_createCollection failed");
}
- GDKfree(transformedMultiGeometries);
+ //GDKfree(transformedMultiGeometries);
return err;
}
@@ -1036,7 +1046,7 @@ wkbForceDim(Client ctx, wkb **outWKB, wk
str err;
if (is_wkb_nil(*geomWKB) || is_int_nil(*dim)) {
- if ((*outWKB = wkbNULLcopy()) == NULL)
+ if ((*outWKB = wkbNULLcopy(ctx->alloc)) == NULL)
throw(MAL, "geom.ForceDim", SQLSTATE(HY013)
MAL_MALLOC_FAIL);
return MAL_SUCCEED;
}
@@ -1096,6 +1106,8 @@ segmentizePoint(GEOSGeometry **outGeomet
static str
segmentizeLineString(GEOSGeometry **outGeometry, const GEOSGeometry
*geosGeometry, double sz, int isRing)
{
+ allocator *ma = MT_thread_getallocator();
+ assert(ma);
int coordinatesNum = 0;
const GEOSCoordSequence *gcs_old;
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]