[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