]> granicus.if.org Git - postgis/commitdiff
Add parser flags to the LWGEOM to (E)WKB/WKT parsers, similar to has already been...
authorMark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>
Thu, 25 Sep 2008 21:50:19 +0000 (21:50 +0000)
committerMark Cave-Ayland <mark.cave-ayland@siriusit.co.uk>
Thu, 25 Sep 2008 21:50:19 +0000 (21:50 +0000)
git-svn-id: http://svn.osgeo.org/postgis/trunk@3012 b70326c6-7e19-0410-871a-916f4a2858ee

14 files changed:
liblwgeom/examples/unparser.c
liblwgeom/liblwgeom.h
liblwgeom/lwgeom.c
liblwgeom/lwgparse.c
liblwgeom/lwgunparse.c
liblwgeom/wktparse.h
lwgeom/lwgeom_dump.c
lwgeom/lwgeom_functions_basic.c
lwgeom/lwgeom_geos_c.c
lwgeom/lwgeom_gist.c
lwgeom/lwgeom_inout.c
lwgeom/lwgeom_ogc.c
lwgeom/lwgeom_pg.c
lwgeom/lwgeom_pg.h

index a2dc9d6393699c030b096cdd4261668e57ee0062..7bd197c970f4de6bb1b175ea84ed8314f93a8791 100644 (file)
@@ -69,9 +69,9 @@ int main()
        serialized_lwgeom = lwgeom_serialize(lwgeom); 
 
        /* Output the geometry in WKT and WKB */
-       wkt = serialized_lwgeom_to_ewkt(serialized_lwgeom);
+       wkt = serialized_lwgeom_to_ewkt(serialized_lwgeom, PARSER_CHECK_ALL);
        printf("WKT format    : %s\n", wkt);
-       wkb = serialized_lwgeom_to_hexwkb(serialized_lwgeom, NDR, &wkb_size);
+       wkb = serialized_lwgeom_to_hexwkb(serialized_lwgeom, PARSER_CHECK_ALL, NDR, &wkb_size);
        printf("HEXWKB format : %s\n\n", wkb); 
 
        /* Free all of the allocated items */
@@ -105,9 +105,9 @@ int main()
        serialized_lwgeom = lwgeom_serialize(lwgeom); 
 
        /* Output the geometry in WKT and WKB */
-       wkt = serialized_lwgeom_to_ewkt(serialized_lwgeom);
+       wkt = serialized_lwgeom_to_ewkt(serialized_lwgeom, PARSER_CHECK_ALL);
        printf("WKT format    : %s\n", wkt);
-       wkb = serialized_lwgeom_to_hexwkb(serialized_lwgeom, NDR, &wkb_size);
+       wkb = serialized_lwgeom_to_hexwkb(serialized_lwgeom, PARSER_CHECK_ALL, NDR, &wkb_size);
        printf("HEXWKB format : %s\n\n", wkb); 
 
        /* Free all of the allocated items */
@@ -177,9 +177,9 @@ int main()
        serialized_lwgeom = lwgeom_serialize(lwgeom); 
 
        /* Output the geometry in WKT and WKB */
-       wkt = serialized_lwgeom_to_ewkt(serialized_lwgeom);
+       wkt = serialized_lwgeom_to_ewkt(serialized_lwgeom, PARSER_CHECK_NONE);
        printf("WKT format    : %s\n", wkt);
-       wkb = serialized_lwgeom_to_hexwkb(serialized_lwgeom, NDR, &wkb_size);
+       wkb = serialized_lwgeom_to_hexwkb(serialized_lwgeom, PARSER_CHECK_NONE, NDR, &wkb_size);
        printf("HEXWKB format : %s\n\n", wkb); 
 
        /* Free all of the allocated items */
index 5e3a532be58a40cf732b14634cf95192f83ab4c9..811a862cbbfb7fad805947d308dacbf225754fa0 100644 (file)
@@ -1125,19 +1125,20 @@ extern void deparse_hex(uchar str, char *result);
 #define PARSER_CHECK_ODD       2
 #define PARSER_CHECK_CLOSURE   4
 
+#define PARSER_CHECK_NONE      0
 #define PARSER_CHECK_ALL       (PARSER_CHECK_MINPOINTS | PARSER_CHECK_ODD | PARSER_CHECK_CLOSURE)
 
 
 /* Parser access routines */
-extern char *lwgeom_to_ewkt(LWGEOM *lwgeom);
-extern char *lwgeom_to_hexwkb(LWGEOM *lwgeom, unsigned int byteorder);
-extern LWGEOM *lwgeom_from_ewkb(uchar *ewkb, size_t ewkblen, int flags);
-extern uchar *lwgeom_to_ewkb(LWGEOM *lwgeom, char byteorder, size_t *ewkblen);
+extern char *lwgeom_to_ewkt(LWGEOM *lwgeom, int flags);
+extern char *lwgeom_to_hexwkb(LWGEOM *lwgeom, int flags, unsigned int byteorder);
+extern LWGEOM *lwgeom_from_ewkb(uchar *ewkb, int flags, size_t ewkblen);
+extern uchar *lwgeom_to_ewkb(LWGEOM *lwgeom, int flags, char byteorder, size_t *ewkblen);
 
-extern char *serialized_lwgeom_to_ewkt(uchar *serialized);
+extern char *serialized_lwgeom_to_ewkt(uchar *serialized, int flags);
 extern SERIALIZED_LWGEOM *serialized_lwgeom_from_ewkt(char *wkt_input, int flags);
-extern char *serialized_lwgeom_to_hexwkb(uchar *serialized, unsigned int byteorder, size_t *size);
-extern char *serialized_lwgeom_to_ewkb(uchar *serialized, unsigned int byteorder, size_t *size);
+extern char *serialized_lwgeom_to_hexwkb(uchar *serialized, int flags, unsigned int byteorder, size_t *size);
+extern char *serialized_lwgeom_to_ewkb(uchar *serialized, int flags, unsigned int byteorder, size_t *size);
 
 
 extern void *lwalloc(size_t size);
index 3733e23019c2821ee4a18489cedb041ce7fa0291..eb22d9d55f2fdb6857954f6196d4a573d255e8fb 100644 (file)
@@ -457,14 +457,14 @@ lwgeom_add(const LWGEOM *to, uint32 where, const LWGEOM *what)
  * Return an alloced string
  */
 char *
-lwgeom_to_ewkt(LWGEOM *lwgeom)
+lwgeom_to_ewkt(LWGEOM *lwgeom, int flags)
 {
        uchar *serialized = lwgeom_serialize(lwgeom);
        char *ret;
        if ( ! serialized ) {
                lwerror("Error serializing geom %p", lwgeom);
        }
-       ret = unparse_WKT(serialized, lwalloc, lwfree);
+       ret = unparse_WKT(serialized, lwalloc, lwfree, flags);
        lwfree(serialized);
        return ret;
 }
@@ -473,10 +473,10 @@ lwgeom_to_ewkt(LWGEOM *lwgeom)
  * Return an alloced string
  */
 char *
-lwgeom_to_hexwkb(LWGEOM *lwgeom, unsigned int byteorder)
+lwgeom_to_hexwkb(LWGEOM *lwgeom, int flags, unsigned int byteorder)
 {
        uchar *serialized = lwgeom_serialize(lwgeom);
-       char *hexwkb = unparse_WKB(serialized, lwalloc, lwfree, byteorder,NULL,1);
+       char *hexwkb = unparse_WKB(serialized, lwalloc, lwfree, flags, byteorder,NULL,1);
        lwfree(serialized);
        return hexwkb;
 }
@@ -485,7 +485,7 @@ lwgeom_to_hexwkb(LWGEOM *lwgeom, unsigned int byteorder)
  * Return an alloced string
  */
 uchar *
-lwgeom_to_ewkb(LWGEOM *lwgeom, char byteorder, size_t *outsize)
+lwgeom_to_ewkb(LWGEOM *lwgeom, int flags, char byteorder, size_t *outsize)
 {
        uchar *serialized = lwgeom_serialize(lwgeom);
 
@@ -495,7 +495,7 @@ lwgeom_to_ewkb(LWGEOM *lwgeom, char byteorder, size_t *outsize)
         * (last argument set to 0)
         */
        uchar *hexwkb = (uchar *)unparse_WKB(serialized, lwalloc, lwfree,
-               byteorder, outsize, 0);
+               flags, byteorder, outsize, 0);
        lwfree(serialized);
        return hexwkb;
 }
@@ -508,7 +508,7 @@ lwgeom_to_ewkb(LWGEOM *lwgeom, char byteorder, size_t *outsize)
  *     - deserialize it
  */
 LWGEOM *
-lwgeom_from_ewkb(uchar *ewkb, size_t size, int flags)
+lwgeom_from_ewkb(uchar *ewkb, int flags, size_t size)
 {
        size_t hexewkblen = size*2;
        char *hexewkb;
@@ -564,27 +564,27 @@ serialized_lwgeom_from_ewkt(char *wkt_input, int flags)
  * Return an alloced string
  */
 char *
-serialized_lwgeom_to_ewkt(uchar *serialized)
+serialized_lwgeom_to_ewkt(uchar *serialized, int flags)
 {
-       return unparse_WKT(serialized, lwalloc, lwfree);
+       return unparse_WKT(serialized, lwalloc, lwfree, flags);
 }
 
 /*
  * Return an alloced string
  */
 char *
-serialized_lwgeom_to_hexwkb(uchar *serialized, unsigned int byteorder, size_t *size)
+serialized_lwgeom_to_hexwkb(uchar *serialized, int flags, unsigned int byteorder, size_t *size)
 {
-       return unparse_WKB(serialized, lwalloc, lwfree, byteorder, size, 1);
+       return unparse_WKB(serialized, lwalloc, lwfree, flags, byteorder, size, 1);
 }
 
 /*
  * Return an alloced string
  */
 char *
-serialized_lwgeom_to_ewkb(uchar *serialized, unsigned int byteorder, size_t *size)
+serialized_lwgeom_to_ewkb(uchar *serialized, int flags, unsigned int byteorder, size_t *size)
 {
-       return unparse_WKB(serialized, lwalloc, lwfree, byteorder, size, 0);
+       return unparse_WKB(serialized, lwalloc, lwfree, flags, byteorder, size, 0);
 }
 
 
index 6e7253c098e138d01c3b26d386f31a4f0994c3b1..6f5be5fe52cf33e776d286b3a9d9de6400698718 100644 (file)
@@ -1129,7 +1129,7 @@ alloc_wkb(const char *parser)
 SERIALIZED_LWGEOM *
 parse_it(const char *geometry, int flags, allocator allocfunc, report_error errfunc)
 {
-        LWDEBUGF(2, "parse_it: %s", geometry);
+        LWDEBUGF(2, "parse_it: %s with parser flags %d", geometry, flags);
 
        local_malloc = allocfunc;
        error_func=errfunc;
index 73e06d722ceaa589cee20793d20b2b7d9ee61fdb..fe1dcda155feef2403832cf641d67c5ab6466b7d 100644 (file)
@@ -75,10 +75,19 @@ static int lwgi;
 static uchar endianbyte;
 void (*write_wkb_bytes)(uchar* ptr,unsigned int cnt,size_t size);
 
+/*
+ * Parser global check flags - a bitmap of flags that determine which checks the parser will perform
+ * (see liblwgeom.h for the related PARSER_CHECK constants)
+ */
+int parser_check_flags;
+
 /*---------------------------------------------------------- */
 
 
 
+
+
+
 /*
  * Ensure there is enough space for chars bytes.
  * Reallocate memory is this is not the case.
@@ -230,7 +239,7 @@ output_line_collection(uchar* geom,outfunc func,int supress)
        int cnt = read_int(&geom);
 
        /* Ensure that LINESTRING has a minimum of 2 points */
-       if (cnt < 2)
+       if ((parser_check_flags & PARSER_CHECK_MINPOINTS) && cnt < 2)
                lwerror("geometry requires more points");
 
        if ( cnt == 0 ){
@@ -294,7 +303,8 @@ output_polygon_ring_collection(uchar* geom,outfunc func,int supress)
                        }
 
                /* Check if they are the same... */
-               if (memcmp(&first_point, &last_point, sizeof(double) * dims))
+               if (memcmp(&first_point, &last_point, sizeof(double) * dims) &&
+                       (parser_check_flags & PARSER_CHECK_CLOSURE))
                        lwerror("geometry contains non-closed rings");
 
        }
@@ -308,11 +318,11 @@ output_curve_collection(uchar* geom,outfunc func,int supress)
        int cnt = read_int(&geom);
 
        /* Ensure that a CIRCULARSTRING has a minimum of 3 points */
-        if (cnt < 3)
+        if ((parser_check_flags & PARSER_CHECK_MINPOINTS) && cnt < 3)
                 lwerror("geometry requires more points");
 
        /* Ensure that a CIRCULARSTRING has an odd number of points */
-        if (cnt % 2 != 1)
+        if ((parser_check_flags & PARSER_CHECK_ODD) && cnt % 2 != 1)
                 lwerror("geometry must have an odd number of points");
 
        if ( cnt == 0 ){
@@ -556,14 +566,17 @@ output_wkt(uchar* geom, int supress)
 }
 
 char *
-unparse_WKT(uchar* serialized, allocator alloc, freeor free)
+unparse_WKT(uchar* serialized, allocator alloc, freeor free, int flags)
 {
 
-        LWDEBUG(2, "unparse_WKT called.");
+        LWDEBUGF(2, "unparse_WKT called with parser flags %d.", flags);
 
        if (serialized==NULL)
                return NULL;
 
+       /* Setup the inital parser flags */
+        parser_check_flags = flags;
+
        local_malloc=alloc;
        local_free=free;
        len = 128;
@@ -687,7 +700,7 @@ output_wkb_line_collection(uchar* geom,outwkbfunc func)
        LWDEBUGF(2, "output_wkb_line_collection: %d iterations loop", cnt);
 
        /* Ensure that LINESTRING has a minimum of 2 points */
-        if (cnt < 2)
+        if ((parser_check_flags & PARSER_CHECK_MINPOINTS) && cnt < 2)
                 lwerror("geometry requires more points");
 
        write_wkb_int(cnt);
@@ -733,7 +746,8 @@ output_wkb_polygon_ring_collection(uchar* geom,outwkbfunc func)
        }
 
        /* Check if they are the same... */
-       if (memcmp(&first_point, &last_point, sizeof(double) * dims))
+       if (memcmp(&first_point, &last_point, sizeof(double) * dims) &&
+               (parser_check_flags & PARSER_CHECK_CLOSURE))
                lwerror("geometry contains non-closed rings");
 
        return geom;
@@ -757,11 +771,11 @@ output_wkb_curve_collection(uchar* geom,outwkbfunc func)
        LWDEBUGF(2, "output_wkb_curve_collection: %d iterations loop", cnt);
 
        /* Ensure that a CIRCULARSTRING has a minimum of 3 points */
-        if (cnt < 3)
+        if ((parser_check_flags & PARSER_CHECK_MINPOINTS) && cnt < 3)
                 lwerror("geometry requires more points");
 
        /* Ensure that a CIRCULARSTRING has an odd number of points */
-        if (cnt % 2 != 1)
+        if ((parser_check_flags & PARSER_CHECK_ODD) && cnt % 2 != 1)
                 lwerror("geometry must have an odd number of points");
 
        write_wkb_int(cnt);
@@ -860,13 +874,16 @@ output_wkb(uchar* geom)
 }
 
 char *
-unparse_WKB(uchar* serialized, allocator alloc, freeor free, char endian, size_t *outsize, uchar hex)
+unparse_WKB(uchar* serialized, allocator alloc, freeor free, int flags, char endian, size_t *outsize, uchar hex)
 {
-       LWDEBUGF(2, "unparse_WKB(%p,...) called", serialized);
+       LWDEBUGF(2, "unparse_WKB(%p,...) called with parser flags %d", serialized, flags);
 
        if (serialized==NULL)
                return NULL;
 
+       /* Setup the inital parser flags */
+        parser_check_flags = flags;
+
        local_malloc=alloc;
        local_free=free;
        len = 128;
index 7a27d0c2b41fcc1bee679e13a0c4d6f89a08b6e5..2f013a54006d7f18206205a1a4afa03e9c41067f 100644 (file)
@@ -98,8 +98,8 @@ void alloc_wkb(const char* parser);
 
 SERIALIZED_LWGEOM* parse_lwg(const char* wkt, int flags, allocator allocfunc,report_error errfunc);
 SERIALIZED_LWGEOM* parse_lwgi(const char* wkt, int flags, allocator allocfunc,report_error errfunc);
-char* unparse_WKT(uchar* serialized, allocator alloc,freeor free);
-char* unparse_WKB(uchar* serialized, allocator alloc,freeor free, char endian, size_t *outsize, uchar hexform);
+char* unparse_WKT(uchar* serialized, allocator alloc, freeor free, int flags);
+char* unparse_WKB(uchar* serialized, allocator alloc, freeor free, int flags, char endian, size_t *outsize, uchar hexform);
 int lwg_parse_yyparse(void);
 int lwg_parse_yyerror(char* s);
 
index e3f4d28ba29caf6312b85ffa9ac4162532074ae6..68efc76bd29da0cee3124e0ba4310ed43949c82e 100644 (file)
@@ -123,7 +123,7 @@ Datum LWGEOM_dump(PG_FUNCTION_ARGS)
        if ( TYPE_GETTYPE(state->root->type) < MULTIPOINTTYPE )
        {
                values[0] = "{}";
-               values[1] = lwgeom_to_hexwkb(state->root, -1);
+               values[1] = lwgeom_to_hexwkb(state->root, PARSER_CHECK_NONE, -1);
                tuple = BuildTupleFromCStrings(funcctx->attinmeta, values);
                result = TupleGetDatum(funcctx->slot, tuple);
 
@@ -178,7 +178,7 @@ Datum LWGEOM_dump(PG_FUNCTION_ARGS)
        lwgeom->SRID = state->root->SRID;
 
        values[0] = address;
-       values[1] = lwgeom_to_hexwkb(lwgeom, -1);
+       values[1] = lwgeom_to_hexwkb(lwgeom, PARSER_CHECK_NONE, -1);
        tuple = BuildTupleFromCStrings(funcctx->attinmeta, values);
        result = TupleGetDatum(funcctx->slot, tuple);
        node->idx++;
@@ -286,7 +286,7 @@ Datum LWGEOM_dump_rings(PG_FUNCTION_ARGS)
                sprintf(address, "{%d}", state->ringnum);
 
                values[0] = address;
-               values[1] = lwgeom_to_hexwkb(ringgeom, -1);
+               values[1] = lwgeom_to_hexwkb(ringgeom, PARSER_CHECK_NONE, -1);
 
                MemoryContextSwitchTo(oldcontext);
 
index b727d0cff3f69148fd63be0645fdc472b24f6f12..dc4f6bc9ec5127e47dfad65a150353b88f061fcf 100644 (file)
@@ -2910,7 +2910,7 @@ Datum LWGEOM_asEWKT(PG_FUNCTION_ARGS)
        /*char *semicolonLoc; */
 
        lwgeom = (PG_LWGEOM *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       result_cstring =  serialized_lwgeom_to_ewkt(SERIALIZED_FORM(lwgeom));
+       result_cstring =  serialized_lwgeom_to_ewkt(SERIALIZED_FORM(lwgeom), PARSER_CHECK_ALL);
 
 #if 0
        semicolonLoc = strchr(result_cstring,';');
index 79db62f55efdf3b80d9b20792cc26b19ccda98d6..1a31f06b4bdde86a9a7d00e12c1673beedd8089e 100644 (file)
@@ -2778,7 +2778,7 @@ GEOS2LWGEOM(GEOSGeom geom, char want3d)
        else GEOS_setWKBOutputDims(2);
 
        wkb = GEOSGeomToWKB_buf(geom, &size);
-       lwgeom = lwgeom_from_ewkb(wkb, size);
+       lwgeom = lwgeom_from_ewkb(wkb, flags, size);
 
        return lwgeom;
 }
@@ -3210,7 +3210,7 @@ Datum GEOSnoop(PG_FUNCTION_ARGS)
 
        geom = (PG_LWGEOM *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
 
-       POSTGIS_DEBUGF(2, "GEOSnoop: IN: %s", serialized_lwgeom_to_ewkt(SERIALIZED_FORM(geom)));
+       POSTGIS_DEBUGF(2, "GEOSnoop: IN: %s", serialized_lwgeom_to_ewkt(SERIALIZED_FORM(geom), PARSER_CHECK_NONE));
 
        geosgeom = POSTGIS2GEOS(geom);
        if ( ! geosgeom ) PG_RETURN_NULL();
@@ -3223,7 +3223,7 @@ Datum GEOSnoop(PG_FUNCTION_ARGS)
        result = GEOS2POSTGIS(geosgeom, TYPE_HASZ(geom->type));
        GEOSGeom_destroy(geosgeom);
 
-       POSTGIS_DEBUGF(4, "GEOSnoop: OUT: %s", serialized_lwgeom_to_ewkt(SERIALIZED_FORM(result)));
+       POSTGIS_DEBUGF(4, "GEOSnoop: OUT: %s", serialized_lwgeom_to_ewkt(SERIALIZED_FORM(result), PARSER_CHECK_NONE));
 
        PG_FREE_IF_COPY(geom, 0);
 
index 4a97536a11b257f9d47799f6c00bf49ee6a71e48..10e461eca5c88856dffc7f4d4ce753f4e1f772f9 100644 (file)
@@ -465,7 +465,7 @@ Datum LWGEOM_gist_compress(PG_FUNCTION_ARGS)
                        /* lwgeom serialized form */
                        in = (PG_LWGEOM*)PG_DETOAST_DATUM(entry->key);
 
-                       POSTGIS_DEBUGF(4, "GIST: LWGEOM_gist_compress detoasted entry->key: %s", serialized_lwgeom_to_ewkt((uchar *)in+VARHDRSZ));
+                       POSTGIS_DEBUGF(4, "GIST: LWGEOM_gist_compress detoasted entry->key: %s", serialized_lwgeom_to_ewkt((uchar *)in+VARHDRSZ, PARSER_CHECK_NONE));
 
                        if (in == NULL)
                        {
index aba81d3cff9f29eb574c65ba8378a5a4acbee463..75e63006d9f1dc4a5d7eef255d76295705d9c52c 100644 (file)
@@ -97,7 +97,7 @@ Datum LWGEOM_out(PG_FUNCTION_ARGS)
        char *result;
 
        lwgeom = (PG_LWGEOM *)  PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       result = serialized_lwgeom_to_hexwkb(SERIALIZED_FORM(lwgeom), -1, NULL);
+       result = serialized_lwgeom_to_hexwkb(SERIALIZED_FORM(lwgeom), PARSER_CHECK_ALL, -1, NULL);
 
        PG_RETURN_CSTRING(result);
 }
@@ -137,7 +137,7 @@ Datum LWGEOM_asHEXEWKB(PG_FUNCTION_ARGS)
                }
        }
 
-       result = serialized_lwgeom_to_hexwkb(SERIALIZED_FORM(lwgeom), byteorder, &size);
+       result = serialized_lwgeom_to_hexwkb(SERIALIZED_FORM(lwgeom), PARSER_CHECK_ALL, byteorder, &size);
 
        text_result = palloc(size+VARHDRSZ);
        memcpy(VARDATA(text_result),result,size);
@@ -164,7 +164,7 @@ Datum LWGEOM_to_text(PG_FUNCTION_ARGS)
        size_t size;
 
        lwgeom = (PG_LWGEOM *)  PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
-       result = serialized_lwgeom_to_hexwkb(SERIALIZED_FORM(lwgeom), -1, &size);
+       result = serialized_lwgeom_to_hexwkb(SERIALIZED_FORM(lwgeom), PARSER_CHECK_ALL, -1, &size);
 
        text_result = palloc(size+VARHDRSZ);
        memcpy(VARDATA(text_result),result,size);
@@ -197,7 +197,7 @@ Datum LWGEOMFromWKB(PG_FUNCTION_ARGS)
 
        wkb_input = (WellKnownBinary *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0));
 
-       lwgeom2 = pglwgeom_from_ewkb((uchar *)VARDATA(wkb_input),
+       lwgeom2 = pglwgeom_from_ewkb((uchar *)VARDATA(wkb_input), PARSER_CHECK_ALL,
                VARSIZE(wkb_input)-VARHDRSZ);
 
        if (  ( PG_NARGS()>1) && ( ! PG_ARGISNULL(1) ))
@@ -294,7 +294,7 @@ Datum WKBFromLWGEOM(PG_FUNCTION_ARGS)
 
 #else /* ndef BINARY_FROM_HEX */
 
-       hexized_wkb = serialized_lwgeom_to_ewkb(SERIALIZED_FORM(lwgeom_input), byteorder, &size);
+       hexized_wkb = serialized_lwgeom_to_ewkb(SERIALIZED_FORM(lwgeom_input), PARSER_CHECK_ALL, byteorder, &size);
 
        size_result = size+VARHDRSZ;
        result = palloc(size_result);
@@ -527,7 +527,7 @@ Datum LWGEOM_recv(PG_FUNCTION_ARGS)
 
        POSTGIS_DEBUG(3, "LWGEOM_recv advancing StringInfo buffer");
 
-       POSTGIS_DEBUGF(3, "LWGEOM_from_bytea returned %s", serialized_lwgeom_to_hexwkb(SERIALIZED_FORM(result), -1, NULL));
+       POSTGIS_DEBUGF(3, "LWGEOM_from_bytea returned %s", serialized_lwgeom_to_hexwkb(SERIALIZED_FORM(result), PARSER_CHECK_NONE, -1, NULL));
 
        /* Set cursor to the end of buffer (so the backend is happy) */
        buf->cursor = buf->len;
index 9e099c8403da7b20778c167e0f41a06a46dd9c01..fda123085eeea48b7eca661c168bfd107a84ade3 100644 (file)
@@ -1078,7 +1078,7 @@ Datum LWGEOM_asText(PG_FUNCTION_ARGS)
        ogclwgeom = (PG_LWGEOM *)DatumGetPointer(DirectFunctionCall1(
                LWGEOM_force_2d, PointerGetDatum(lwgeom)));
 
-       result_cstring =  serialized_lwgeom_to_ewkt(SERIALIZED_FORM(ogclwgeom));
+       result_cstring =  serialized_lwgeom_to_ewkt(SERIALIZED_FORM(ogclwgeom), PARSER_CHECK_ALL);
 
        semicolonLoc = strchr(result_cstring,';');
 
index 8afe0969d74fa6233163c1500b8286bbd207e575..2328405fba2d0d423baa868b8be1a577162c6cc3 100644 (file)
@@ -242,7 +242,7 @@ PG_LWGEOM_construct(uchar *ser, int SRID, int wantbbox)
  * Make a PG_LWGEOM object from a WKB binary representation.
  */
 PG_LWGEOM *
-pglwgeom_from_ewkb(uchar *ewkb, size_t ewkblen)
+pglwgeom_from_ewkb(uchar *ewkb, int flags, size_t ewkblen)
 {
        PG_LWGEOM *ret;
        SERIALIZED_LWGEOM *serialized_lwgeom;
@@ -257,7 +257,7 @@ pglwgeom_from_ewkb(uchar *ewkb, size_t ewkblen)
        }
        hexewkb[hexewkblen] = '\0';
 
-       serialized_lwgeom = serialized_lwgeom_from_ewkt(hexewkb, PARSER_CHECK_ALL);
+       serialized_lwgeom = serialized_lwgeom_from_ewkt(hexewkb, flags);
     
        ret = (PG_LWGEOM *)palloc(serialized_lwgeom->size + VARHDRSZ);
        SET_VARSIZE(ret, serialized_lwgeom->size + VARHDRSZ);
@@ -272,10 +272,10 @@ pglwgeom_from_ewkb(uchar *ewkb, size_t ewkblen)
  * Return the EWKB (binary) representation for a PG_LWGEOM.
  */
 char *
-pglwgeom_to_ewkb(PG_LWGEOM *geom, char byteorder, size_t *outsize)
+pglwgeom_to_ewkb(PG_LWGEOM *geom, int flags, char byteorder, size_t *outsize)
 {
        uchar *srl = &(geom->type);
-       return serialized_lwgeom_to_ewkb(srl, byteorder, outsize);
+       return serialized_lwgeom_to_ewkb(srl, flags, byteorder, outsize);
 }
 
 /*
index ce8f19f94828472f6b5b34b26cd14a986aace48e..376c091af6bce7026897d332c13381bb9ba74c4f 100644 (file)
@@ -50,8 +50,8 @@ extern PG_LWGEOM *pglwgeom_serialize(LWGEOM *lwgeom);
 extern LWGEOM *pglwgeom_deserialize(PG_LWGEOM *pglwgeom);
 
 /* PG_LWGEOM WKB IO */
-extern PG_LWGEOM *pglwgeom_from_ewkb(uchar *ewkb, size_t ewkblen);
-extern char *pglwgeom_to_ewkb(PG_LWGEOM *geom, char byteorder, size_t *ewkblen);
+extern PG_LWGEOM *pglwgeom_from_ewkb(uchar *ewkb, int flags, size_t ewkblen);
+extern char *pglwgeom_to_ewkb(PG_LWGEOM *geom, int flags, char byteorder, size_t *ewkblen);
 
 /* PG_LWGEOM SRID get/set */
 extern PG_LWGEOM *pglwgeom_setSRID(PG_LWGEOM *pglwgeom, int32 newSRID);