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]

Reply via email to