[postgis-commits] svn - r3012 - in trunk: liblwgeom
liblwgeom/examples lwgeom
postgis-commits at postgis.refractions.net
postgis-commits at postgis.refractions.net
Thu Sep 25 14:50:20 PDT 2008
Author: mcayland
Date: 2008-09-25 14:50:19 -0700 (Thu, 25 Sep 2008)
New Revision: 3012
Modified:
trunk/liblwgeom/examples/unparser.c
trunk/liblwgeom/liblwgeom.h
trunk/liblwgeom/lwgeom.c
trunk/liblwgeom/lwgparse.c
trunk/liblwgeom/lwgunparse.c
trunk/liblwgeom/wktparse.h
trunk/lwgeom/lwgeom_dump.c
trunk/lwgeom/lwgeom_functions_basic.c
trunk/lwgeom/lwgeom_geos_c.c
trunk/lwgeom/lwgeom_gist.c
trunk/lwgeom/lwgeom_inout.c
trunk/lwgeom/lwgeom_ogc.c
trunk/lwgeom/lwgeom_pg.c
trunk/lwgeom/lwgeom_pg.h
Log:
Add parser flags to the LWGEOM to (E)WKB/WKT parsers, similar to has already been done for the (E)WKB/WKT to LWGEOM parsers.
Modified: trunk/liblwgeom/examples/unparser.c
===================================================================
--- trunk/liblwgeom/examples/unparser.c 2008-09-25 21:34:13 UTC (rev 3011)
+++ trunk/liblwgeom/examples/unparser.c 2008-09-25 21:50:19 UTC (rev 3012)
@@ -69,9 +69,9 @@
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 @@
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 @@
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 */
Modified: trunk/liblwgeom/liblwgeom.h
===================================================================
--- trunk/liblwgeom/liblwgeom.h 2008-09-25 21:34:13 UTC (rev 3011)
+++ trunk/liblwgeom/liblwgeom.h 2008-09-25 21:50:19 UTC (rev 3012)
@@ -1125,19 +1125,20 @@
#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);
Modified: trunk/liblwgeom/lwgeom.c
===================================================================
--- trunk/liblwgeom/lwgeom.c 2008-09-25 21:34:13 UTC (rev 3011)
+++ trunk/liblwgeom/lwgeom.c 2008-09-25 21:50:19 UTC (rev 3012)
@@ -457,14 +457,14 @@
* 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 @@
* 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 @@
* 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 @@
* (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 @@
* - 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 @@
* 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);
}
Modified: trunk/liblwgeom/lwgparse.c
===================================================================
--- trunk/liblwgeom/lwgparse.c 2008-09-25 21:34:13 UTC (rev 3011)
+++ trunk/liblwgeom/lwgparse.c 2008-09-25 21:50:19 UTC (rev 3012)
@@ -1129,7 +1129,7 @@
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;
Modified: trunk/liblwgeom/lwgunparse.c
===================================================================
--- trunk/liblwgeom/lwgunparse.c 2008-09-25 21:34:13 UTC (rev 3011)
+++ trunk/liblwgeom/lwgunparse.c 2008-09-25 21:50:19 UTC (rev 3012)
@@ -75,10 +75,19 @@
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 @@
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 @@
}
/* 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 @@
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 @@
}
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 @@
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 @@
}
/* 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 @@
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 @@
}
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;
Modified: trunk/liblwgeom/wktparse.h
===================================================================
--- trunk/liblwgeom/wktparse.h 2008-09-25 21:34:13 UTC (rev 3011)
+++ trunk/liblwgeom/wktparse.h 2008-09-25 21:50:19 UTC (rev 3012)
@@ -98,8 +98,8 @@
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);
Modified: trunk/lwgeom/lwgeom_dump.c
===================================================================
--- trunk/lwgeom/lwgeom_dump.c 2008-09-25 21:34:13 UTC (rev 3011)
+++ trunk/lwgeom/lwgeom_dump.c 2008-09-25 21:50:19 UTC (rev 3012)
@@ -123,7 +123,7 @@
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 @@
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 @@
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);
Modified: trunk/lwgeom/lwgeom_functions_basic.c
===================================================================
--- trunk/lwgeom/lwgeom_functions_basic.c 2008-09-25 21:34:13 UTC (rev 3011)
+++ trunk/lwgeom/lwgeom_functions_basic.c 2008-09-25 21:50:19 UTC (rev 3012)
@@ -2910,7 +2910,7 @@
/*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,';');
Modified: trunk/lwgeom/lwgeom_geos_c.c
===================================================================
--- trunk/lwgeom/lwgeom_geos_c.c 2008-09-25 21:34:13 UTC (rev 3011)
+++ trunk/lwgeom/lwgeom_geos_c.c 2008-09-25 21:50:19 UTC (rev 3012)
@@ -2778,7 +2778,7 @@
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 @@
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 @@
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);
Modified: trunk/lwgeom/lwgeom_gist.c
===================================================================
--- trunk/lwgeom/lwgeom_gist.c 2008-09-25 21:34:13 UTC (rev 3011)
+++ trunk/lwgeom/lwgeom_gist.c 2008-09-25 21:50:19 UTC (rev 3012)
@@ -465,7 +465,7 @@
/* 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)
{
Modified: trunk/lwgeom/lwgeom_inout.c
===================================================================
--- trunk/lwgeom/lwgeom_inout.c 2008-09-25 21:34:13 UTC (rev 3011)
+++ trunk/lwgeom/lwgeom_inout.c 2008-09-25 21:50:19 UTC (rev 3012)
@@ -97,7 +97,7 @@
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 @@
}
}
- 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 @@
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 @@
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 @@
#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 @@
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;
Modified: trunk/lwgeom/lwgeom_ogc.c
===================================================================
--- trunk/lwgeom/lwgeom_ogc.c 2008-09-25 21:34:13 UTC (rev 3011)
+++ trunk/lwgeom/lwgeom_ogc.c 2008-09-25 21:50:19 UTC (rev 3012)
@@ -1078,7 +1078,7 @@
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,';');
Modified: trunk/lwgeom/lwgeom_pg.c
===================================================================
--- trunk/lwgeom/lwgeom_pg.c 2008-09-25 21:34:13 UTC (rev 3011)
+++ trunk/lwgeom/lwgeom_pg.c 2008-09-25 21:50:19 UTC (rev 3012)
@@ -242,7 +242,7 @@
* 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 @@
}
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 @@
* 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);
}
/*
Modified: trunk/lwgeom/lwgeom_pg.h
===================================================================
--- trunk/lwgeom/lwgeom_pg.h 2008-09-25 21:34:13 UTC (rev 3011)
+++ trunk/lwgeom/lwgeom_pg.h 2008-09-25 21:50:19 UTC (rev 3012)
@@ -50,8 +50,8 @@
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);
More information about the postgis-commits
mailing list