Changeset: 539bf1341459 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=539bf1341459
Modified Files:
        geom/monetdb5/geom.c
        geom/monetdb5/geom.mal
Branch: geo
Log Message:

added linearring type before multipoint + fixed some checks to destroy the 
message returned from a function called inside another function


diffs (200 lines):

diff --git a/geom/monetdb5/geom.c b/geom/monetdb5/geom.c
--- a/geom/monetdb5/geom.c
+++ b/geom/monetdb5/geom.c
@@ -2071,20 +2071,25 @@ str wkbFromWKB(wkb **w, wkb **src) {
  * same with the type of the geometry created from the wkt representation */
 str wkbFromText(wkb **geomWKB, str *geomWKT, int* srid, int *tpe) {
        size_t len=0; 
-       int te = *tpe;
-       char *errbuf;
+       int te = 0;
+       char *errbuf = NULL;
        str ex;
 
+       if(*tpe > 2)
+               te=1;
+
        *geomWKB = NULL;
        if (wkbFROMSTR(*geomWKT, &len, geomWKB, *srid) &&
-           (wkb_isnil(*geomWKB) || *tpe==0 || *tpe == wkbGeometryCollection || 
(te = *((*geomWKB)->data + 1) & 0x0f) == *tpe)) {
+           (wkb_isnil(*geomWKB) || *tpe==0 || *tpe == wkbGeometryCollection || 
(te += *((*geomWKB)->data + 1) & 0x0f) == *tpe)) {
                return MAL_SUCCEED;
        }
+
        if (*geomWKB == NULL) {
                *geomWKB = wkb_nil;
-       }
+       }       
+       
        if (*tpe > 0 && te != *tpe)
-               throw(MAL, "wkb.FromText", "Geometry not type '%s' but '%s' 
instead", geom_type2str(*tpe,0), geom_type2str(te,0));
+               throw(MAL, "wkb.FromText", "Geometry not type '%d: %s' but '%d: 
%s' instead", *tpe, geom_type2str(*tpe,0), te, geom_type2str(te,0));
        errbuf = GDKerrbuf;
        if (errbuf) {
                if (strncmp(errbuf, "!ERROR: ", 8) == 0)
@@ -2097,7 +2102,6 @@ str wkbFromText(wkb **geomWKB, str *geom
 
        if (GDKerrbuf)
                GDKerrbuf[0] = '\0';
-
        return ex;
 }
 
@@ -2166,18 +2170,25 @@ str wkbMLineStringToPolygon(wkb** geomWK
        //make wkb from wkt
        ret = wkbFromText(&inputWKB, geomWKT, srid, &type);
        if(ret != MAL_SUCCEED) {
+               str msg = createException(MAL, "geom.MLineStringToPolygon: ", 
"%s", ret);
+
                *geomWKB = wkb_nil;
+               GDKfree(ret);
 
                if(inputWKB)
                        GDKfree(inputWKB);
-               return ret;
+               return msg;
        }
        
        //read the number of linestrings in the input
        ret = wkbNumGeometries(&itemsNum, &inputWKB);
        if(ret != MAL_SUCCEED) {
+               str msg = createException(MAL, "geom.MLineStringToPolygon: ", 
"%s", ret);
+
                *geomWKB = wkb_nil;
-               return ret;
+               GDKfree(ret);
+
+               return msg;
        }
 
        linestringsWKB = (wkb**)GDKmalloc(itemsNum*sizeof(wkb*));
@@ -2189,7 +2200,10 @@ str wkbMLineStringToPolygon(wkb** geomWK
 
                ret = wkbGeometryN(&linestringsWKB[i-1], &inputWKB, &i);        
                if(ret != MAL_SUCCEED || !linestringsWKB[i-1]) {
-                       *geomWKB = wkb_nil;
+                       str msg = createException(MAL, 
"geom.MLineStringToPolygon: ", "%s", ret);
+
+                       *geomWKB = wkb_nil; 
+                       GDKfree(ret);
 
                        GDKfree(inputWKB);
                        for(;i>0; i--)
@@ -2197,33 +2211,40 @@ str wkbMLineStringToPolygon(wkb** geomWK
                                        GDKfree(linestringsWKB[i-1]);
                        GDKfree(linestringsWKB);
                        
-                       return ret;
+                       return msg;
                }
 
                ret = wkbMakePolygon(&polygonWKB, &linestringsWKB[i-1], &batId, 
srid);
                if(ret != MAL_SUCCEED) {
-                       *geomWKB = wkb_nil;
-                       
+                       str msg = createException(MAL, 
"geom.MLineStringToPolygon: ", "%s", ret);
+
+                       *geomWKB = wkb_nil; 
+                       GDKfree(ret);
+       
                        GDKfree(inputWKB);
                        for(;i>0; i--)
                                if(linestringsWKB[i-1])
                                        GDKfree(linestringsWKB[i-1]);
                        GDKfree(linestringsWKB);
                        
-                       throw(MAL, "geom.MLineStringToPolygon", "All linestring 
should be closed");
+                       //throw(MAL, "geom.MLineStringToPolygon", "All 
linestring should be closed");
+                       return msg;
                }
 
                ret = wkbArea(&linestringsArea[i-1], &polygonWKB);
                if(ret != MAL_SUCCEED) {
-                       *geomWKB = wkb_nil;
-                       
+                       str msg = createException(MAL, 
"geom.MLineStringToPolygon: ", "%s", ret);
+
+                       *geomWKB = wkb_nil; 
+                       GDKfree(ret);
+       
                        GDKfree(inputWKB);
                        for(;i>0; i--)
                                if(linestringsWKB[i-1])
                                        GDKfree(linestringsWKB[i-1]);
                        GDKfree(linestringsWKB);
                        
-                       return ret;
+                       return msg;
                }
 
                GDKfree(polygonWKB);
@@ -3154,7 +3175,7 @@ str wkbInteriorRingN(wkb **interiorRingW
        const GEOSGeometry* interiorRingGeometry;
        int rN = -1;
 
-       //initialise to NULL
+       //iniitialise to NULL
        *interiorRingWKB = NULL;
 
        geosGeometry = wkb2geos(*geom);
diff --git a/geom/monetdb5/geom.mal b/geom/monetdb5/geom.mal
--- a/geom/monetdb5/geom.mal
+++ b/geom/monetdb5/geom.mal
@@ -112,23 +112,23 @@ function LineFromText{unsafe}(wkt:str, s
        return x;
 end LineFromText;
 function PolygonFromText{unsafe}(wkt:str, srid:int) :wkb;
-       x := wkb.FromText(wkt,srid,3);
+       x := wkb.FromText(wkt,srid,4);
        return x;
 end PolygonFromText;
 function MPointFromText{unsafe}(wkt:str, srid:int) :wkb;
-       x := wkb.FromText(wkt,srid,4);
+       x := wkb.FromText(wkt,srid,5);
        return x;
 end MPointFromText;
 function MLineFromText{unsafe}(wkt:str, srid:int) :wkb;
-       x := wkb.FromText(wkt,srid,5);
+       x := wkb.FromText(wkt,srid,6);
        return x;
 end MLineFromText;
 function MPolyFromText{unsafe}(wkt:str, srid:int) :wkb;
-       x := wkb.FromText(wkt,srid,6);
+       x := wkb.FromText(wkt,srid,7);
        return x;
 end MPolyFromText;
 function GeomCollFromText{unsafe}(wkt:str, srid:int) :wkb;
-       x := wkb.FromText(wkt,srid,7);
+       x := wkb.FromText(wkt,srid,8);
        return x;
 end GeomCollFromText;
 
@@ -145,23 +145,23 @@ function LineFromText{unsafe}(wkt:str) :
        return x;
 end LineFromText;
 function PolygonFromText{unsafe}(wkt:str) :wkb;
-       x := wkb.FromText(wkt,0,3);
+       x := wkb.FromText(wkt,0,4);
        return x;
 end PolygonFromText;
 function MPointFromText{unsafe}(wkt:str) :wkb;
-       x := wkb.FromText(wkt,0,4);
+       x := wkb.FromText(wkt,0,5);
        return x;
 end MPointFromText;
 function MLineFromText{unsafe}(wkt:str) :wkb;
-       x := wkb.FromText(wkt,0,5);
+       x := wkb.FromText(wkt,0,6);
        return x;
 end MLineFromText;
 function MPolyFromText{unsafe}(wkt:str) :wkb;
-       x := wkb.FromText(wkt,0,6);
+       x := wkb.FromText(wkt,0,7);
        return x;
 end MPolyFromText;
 function GeomCollFromText{unsafe}(wkt:str) :wkb;
-       x := wkb.FromText(wkt,0,7);
+       x := wkb.FromText(wkt,0,8);
        return x;
 end GeomCollFromText;
 
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to