[postgis-tickets] r15779 - Short circuit ST_RepeatedPoints right away on point inputs (Closes #3854)

Paul Ramsey pramsey at cleverelephant.ca
Wed Sep 20 12:55:56 PDT 2017


Author: pramsey
Date: 2017-09-20 12:55:56 -0700 (Wed, 20 Sep 2017)
New Revision: 15779

Modified:
   trunk/postgis/lwgeom_functions_basic.c
Log:
Short circuit ST_RepeatedPoints right away on point inputs (Closes #3854)


Modified: trunk/postgis/lwgeom_functions_basic.c
===================================================================
--- trunk/postgis/lwgeom_functions_basic.c	2017-09-20 15:46:14 UTC (rev 15778)
+++ trunk/postgis/lwgeom_functions_basic.c	2017-09-20 19:55:56 UTC (rev 15779)
@@ -2632,15 +2632,21 @@
 PG_FUNCTION_INFO_V1(ST_RemoveRepeatedPoints);
 Datum ST_RemoveRepeatedPoints(PG_FUNCTION_ARGS)
 {
-	GSERIALIZED *g_in = PG_GETARG_GSERIALIZED_P_COPY(0);
+	GSERIALIZED *g_in = PG_GETARG_GSERIALIZED_P(0);
+	int type = gserialized_get_type(g_in);
 	GSERIALIZED *g_out;
-	LWGEOM *lwgeom_in = lwgeom_from_gserialized(g_in);
+	LWGEOM *lwgeom_in = NULL;
 	LWGEOM *lwgeom_out = NULL;
 	double tolerance = 0.0;
 
+	/* Don't even start to think about points */
+	if ( type == POINTTYPE )
+		PG_RETURN_POINTER(g_in);
+
 	if ( PG_NARGS() > 1 && ! PG_ARGISNULL(1) )
 		tolerance = PG_GETARG_FLOAT8(1);
 
+	lwgeom_in = lwgeom_from_gserialized(g_in);
 	lwgeom_out = lwgeom_remove_repeated_points(lwgeom_in, tolerance);
 	g_out = geometry_serialize(lwgeom_out);
 



More information about the postgis-tickets mailing list