[postgis-commits] svn - r3565 - trunk/lwgeom

postgis-commits at postgis.refractions.net postgis-commits at postgis.refractions.net
Thu Jan 22 15:58:43 PST 2009


Author: pramsey
Date: 2009-01-22 15:58:42 -0800 (Thu, 22 Jan 2009)
New Revision: 3565

Modified:
   trunk/lwgeom/lwgeom_accum.c
   trunk/lwgeom/lwgeom_geos.c
   trunk/lwgeom/postgis.sql.in.c
Log:
Flip all aggregate functions over to the new aggregation system. Remove catalog hacks in favour of wrapper type. Make the fast implementations the default and _old implementations the legacy.


Modified: trunk/lwgeom/lwgeom_accum.c
===================================================================
--- trunk/lwgeom/lwgeom_accum.c	2009-01-22 19:25:27 UTC (rev 3564)
+++ trunk/lwgeom/lwgeom_accum.c	2009-01-22 23:58:42 UTC (rev 3565)
@@ -22,10 +22,55 @@
 
 Datum pgis_geometry_accum_transfn(PG_FUNCTION_ARGS);
 Datum pgis_geometry_accum_finalfn(PG_FUNCTION_ARGS);
+Datum pgis_geometry_union_finalfn(PG_FUNCTION_ARGS);
+Datum pgis_geometry_collect_finalfn(PG_FUNCTION_ARGS);
+Datum pgis_geometry_polygonize_finalfn(PG_FUNCTION_ARGS);
+Datum pgis_geometry_makeline_finalfn(PG_FUNCTION_ARGS);
+Datum pgis_abs_in(PG_FUNCTION_ARGS);
+Datum pgis_abs_out(PG_FUNCTION_ARGS);
 
+/* External prototypes */
+Datum pgis_union_geometry_array(PG_FUNCTION_ARGS);
+Datum LWGEOM_collect_garray(PG_FUNCTION_ARGS);
+Datum polygonize_garray(PG_FUNCTION_ARGS);
+Datum LWGEOM_makeline_garray(PG_FUNCTION_ARGS);
+
 /*
- * ARRAY_AGG aggregate function
- */
+** To pass the internal ArrayBuildState pointer between the 
+** transfn and finalfn we need to wrap it into a custom type first,
+** the pgis_abs type in our case.  
+*/
+
+typedef struct {
+	ArrayBuildState *a;
+	} pgis_abs;
+
+/*
+** We're never going to use this type externally so the in/out 
+** functions are dummies.
+*/
+PG_FUNCTION_INFO_V1(pgis_abs_in);
+Datum
+pgis_abs_in(PG_FUNCTION_ARGS)
+{
+	ereport(ERROR,(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+            errmsg("function pgis_abs_in not implemented")));
+	PG_RETURN_POINTER(NULL);
+}
+PG_FUNCTION_INFO_V1(pgis_abs_out);
+Datum
+pgis_abs_out(PG_FUNCTION_ARGS)
+{
+	ereport(ERROR,(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+            errmsg("function pgis_abs_out not implemented")));
+	PG_RETURN_POINTER(NULL);
+}
+
+/*
+** The transfer function hooks into the PostgreSQL accumArrayResult()
+** function (present since 8.0) to build an array in a side memory
+** context.
+*/
 PG_FUNCTION_INFO_V1(pgis_geometry_accum_transfn);
 Datum
 pgis_geometry_accum_transfn(PG_FUNCTION_ARGS)
@@ -33,7 +78,8 @@
 	Oid arg1_typeid = get_fn_expr_argtype(fcinfo->flinfo, 1);
 	MemoryContext aggcontext;
 	ArrayBuildState *state;
-	Datum		elem;
+	pgis_abs *p;
+	Datum elem;
 
 	if (arg1_typeid == InvalidOid)
 		ereport(ERROR,
@@ -48,58 +94,154 @@
 #endif
 	else
 	{
-		/* cannot be called directly because of internal-type argument */
+		/* cannot be called directly because of dummy-type argument */
 		elog(ERROR, "array_agg_transfn called in non-aggregate context");
 		aggcontext = NULL;		/* keep compiler quiet */
 	}
 
-	state = PG_ARGISNULL(0) ? NULL : (ArrayBuildState *) PG_GETARG_POINTER(0);
+	if ( PG_ARGISNULL(0) )
+	{
+		p = (pgis_abs*) palloc(sizeof(pgis_abs));
+		p->a = NULL;
+	}
+	else
+	{
+		p = (pgis_abs*) PG_GETARG_POINTER(0);
+	}
+	state = p->a;
 	elem = PG_ARGISNULL(1) ? (Datum) 0 : PG_GETARG_DATUM(1);
 	state = accumArrayResult(state,
 							 elem,
 							 PG_ARGISNULL(1),
 							 arg1_typeid,
 							 aggcontext);
+	p->a = state;
 
-	/*
-	 * The transition type for array_agg() is declared to be "internal",
-	 * which is a pass-by-value type the same size as a pointer.  So we
-	 * can safely pass the ArrayBuildState pointer through nodeAgg.c's
-	 * machinations.
-	 */
-	PG_RETURN_POINTER(state);
+	PG_RETURN_POINTER(p);
 }
 
-PG_FUNCTION_INFO_V1(pgis_geometry_accum_finalfn);
-Datum
-pgis_geometry_accum_finalfn(PG_FUNCTION_ARGS)
+Datum pgis_accum_finalfn(pgis_abs *p, MemoryContext mctx, FunctionCallInfo fcinfo);
+
+Datum 
+pgis_accum_finalfn(pgis_abs *p, MemoryContext mctx, FunctionCallInfo fcinfo)
 {
-	Datum		result;
+	int dims[1];
+	int lbs[1];
 	ArrayBuildState *state;
-	int			dims[1];
-	int			lbs[1];
-
+	Datum result;
+	
 	/* cannot be called directly because of internal-type argument */
 	Assert(fcinfo->context &&
-		   (IsA(fcinfo->context, AggState) ||
-			IsA(fcinfo->context, WindowAggState)));
-
-	if (PG_ARGISNULL(0))
-		PG_RETURN_NULL();   /* returns null iff no input values */
-
-	state = (ArrayBuildState *) PG_GETARG_POINTER(0);
-
+	       (IsA(fcinfo->context, AggState) 
+#if POSTGIS_PGSQL_VERSION >= 84
+			|| IsA(fcinfo->context, WindowAggState)
+#endif
+			));
+	
+	state = p->a;
 	dims[0] = state->nelems;
 	lbs[0] = 1;
-
 #if POSTGIS_PGSQL_VERSION < 84
-    result = makeMdArrayResult(state, 1, dims, lbs,
-                               CurrentMemoryContext);
+    result = makeMdArrayResult(state, 1, dims, lbs, mctx);
 #else
 	/* Release working state if regular aggregate, but not if window agg */
- 	result = makeMdArrayResult(state, 1, dims, lbs,
-                       	       CurrentMemoryContext,
+ 	result = makeMdArrayResult(state, 1, dims, lbs, mctx,
                        	       IsA(fcinfo->context, AggState));
 #endif
+	return result;
+}
+
+PG_FUNCTION_INFO_V1(pgis_geometry_accum_finalfn);
+Datum
+pgis_geometry_accum_finalfn(PG_FUNCTION_ARGS)
+{
+	pgis_abs *p;
+	Datum result = 0;
+
+	if (PG_ARGISNULL(0))
+		PG_RETURN_NULL();   /* returns null iff no input values */
+
+	p = (pgis_abs*) PG_GETARG_POINTER(0);
+
+	result = pgis_accum_finalfn(p, CurrentMemoryContext, fcinfo);
+
 	PG_RETURN_DATUM(result);
-}
\ No newline at end of file
+
+}
+
+PG_FUNCTION_INFO_V1(pgis_geometry_union_finalfn);
+Datum
+pgis_geometry_union_finalfn(PG_FUNCTION_ARGS)
+{
+	pgis_abs *p;
+	Datum result = 0;
+	Datum geometry_array = 0;
+
+	if (PG_ARGISNULL(0))
+		PG_RETURN_NULL();   /* returns null iff no input values */
+
+	p = (pgis_abs*) PG_GETARG_POINTER(0);
+
+	geometry_array = pgis_accum_finalfn(p, CurrentMemoryContext, fcinfo);
+	result = DirectFunctionCall1( pgis_union_geometry_array, geometry_array );
+
+	PG_RETURN_DATUM(result);
+}
+
+PG_FUNCTION_INFO_V1(pgis_geometry_collect_finalfn);
+Datum
+pgis_geometry_collect_finalfn(PG_FUNCTION_ARGS)
+{
+	pgis_abs *p;
+	Datum result = 0;
+	Datum geometry_array = 0;
+
+	if (PG_ARGISNULL(0))
+		PG_RETURN_NULL();   /* returns null iff no input values */
+
+	p = (pgis_abs*) PG_GETARG_POINTER(0);
+
+	geometry_array = pgis_accum_finalfn(p, CurrentMemoryContext, fcinfo);
+	result = DirectFunctionCall1( LWGEOM_collect_garray, geometry_array );
+
+	PG_RETURN_DATUM(result);
+}
+
+PG_FUNCTION_INFO_V1(pgis_geometry_polygonize_finalfn);
+Datum
+pgis_geometry_polygonize_finalfn(PG_FUNCTION_ARGS)
+{
+	pgis_abs *p;
+	Datum result = 0;
+	Datum geometry_array = 0;
+
+	if (PG_ARGISNULL(0))
+		PG_RETURN_NULL();   /* returns null iff no input values */
+
+	p = (pgis_abs*) PG_GETARG_POINTER(0);
+
+	geometry_array = pgis_accum_finalfn(p, CurrentMemoryContext, fcinfo);
+	result = DirectFunctionCall1( polygonize_garray, geometry_array );
+
+	PG_RETURN_DATUM(result);
+}
+
+PG_FUNCTION_INFO_V1(pgis_geometry_makeline_finalfn);
+Datum
+pgis_geometry_makeline_finalfn(PG_FUNCTION_ARGS)
+{
+	pgis_abs *p;
+	Datum result = 0;
+	Datum geometry_array = 0;
+
+	if (PG_ARGISNULL(0))
+		PG_RETURN_NULL();   /* returns null iff no input values */
+
+	p = (pgis_abs*) PG_GETARG_POINTER(0);
+
+	geometry_array = pgis_accum_finalfn(p, CurrentMemoryContext, fcinfo);
+	result = DirectFunctionCall1( LWGEOM_makeline_garray, geometry_array );
+
+	PG_RETURN_DATUM(result);
+}
+

Modified: trunk/lwgeom/lwgeom_geos.c
===================================================================
--- trunk/lwgeom/lwgeom_geos.c	2009-01-22 19:25:27 UTC (rev 3564)
+++ trunk/lwgeom/lwgeom_geos.c	2009-01-22 23:58:42 UTC (rev 3565)
@@ -46,8 +46,6 @@
 Datum boundary(PG_FUNCTION_ARGS);
 Datum symdifference(PG_FUNCTION_ARGS);
 Datum geomunion(PG_FUNCTION_ARGS);
-Datum unite_garray(PG_FUNCTION_ARGS);
-Datum unite_garray_fast(PG_FUNCTION_ARGS);
 Datum issimple(PG_FUNCTION_ARGS);
 Datum isring(PG_FUNCTION_ARGS);
 Datum geomequals(PG_FUNCTION_ARGS);
@@ -60,6 +58,10 @@
 Datum linemerge(PG_FUNCTION_ARGS);
 Datum coveredby(PG_FUNCTION_ARGS);
 
+Datum pgis_union_geometry_array_old(PG_FUNCTION_ARGS);
+Datum pgis_union_geometry_array(PG_FUNCTION_ARGS);
+
+
 /* TODO: move these to a lwgeom_functions_analytic.h */
 int point_in_polygon_rtree(RTREE_NODE **root, int ringCount, LWPOINT *point);
 int point_in_multipolygon_rtree(RTREE_NODE **root, int polyCount, int ringCount, LWPOINT *point);
@@ -89,8 +91,8 @@
  * versions of them and return PGIS-converted version back.
  * Changing combination order *might* speed up performance.
  */
-PG_FUNCTION_INFO_V1(unite_garray_fast);
-Datum unite_garray_fast(PG_FUNCTION_ARGS)
+PG_FUNCTION_INFO_V1(pgis_union_geometry_array);
+Datum pgis_union_geometry_array(PG_FUNCTION_ARGS)
 {
 	Datum datum;
 	ArrayType *array;
@@ -292,8 +294,8 @@
 
 }
 
-PG_FUNCTION_INFO_V1(unite_garray);
-Datum unite_garray(PG_FUNCTION_ARGS)
+PG_FUNCTION_INFO_V1(pgis_union_geometry_array_old);
+Datum pgis_union_geometry_array_old(PG_FUNCTION_ARGS)
 {
 	Datum datum;
 	ArrayType *array;

Modified: trunk/lwgeom/postgis.sql.in.c
===================================================================
--- trunk/lwgeom/postgis.sql.in.c	2009-01-22 19:25:27 UTC (rev 3564)
+++ trunk/lwgeom/postgis.sql.in.c	2009-01-22 23:58:42 UTC (rev 3565)
@@ -1522,100 +1522,8 @@
 	AS 'MODULE_PATHNAME', 'LWGEOM_force_multi'
 	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict);
 
--- Deprecation in 1.2.3
-CREATEFUNCTION collector(geometry, geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
-	LANGUAGE 'C' _IMMUTABLE;
 
--- Availability: 1.2.2
-CREATEFUNCTION ST_collector(geometry, geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
-	LANGUAGE 'C' _IMMUTABLE;
-
 -- Deprecation in 1.2.3
-CREATEFUNCTION collect(geometry, geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_collect(geometry, geometry) 
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE memcollect(
-	sfunc = ST_collect,
-	basetype = geometry,
-	stype = geometry
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_memcollect(
-	sfunc = ST_collect,
-	basetype = geometry,
-	stype = geometry
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION geom_accum (geometry[],geometry)
-	RETURNS geometry[]
-	AS 'MODULE_PATHNAME', 'LWGEOM_accum'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_geom_accum (geometry[],geometry)
-	RETURNS geometry[]
-	AS 'MODULE_PATHNAME', 'LWGEOM_accum'
-	LANGUAGE 'C' _IMMUTABLE;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE accum (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[]
-	);
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_accum (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[]
-	);
-
--- Deprecation in 1.2.3
-CREATEFUNCTION collect_garray (geometry[])
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_collect_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Availability: 1.2.2
-CREATEFUNCTION ST_collect_garray (geometry[])
-	RETURNS geometry
-	AS 'MODULE_PATHNAME', 'LWGEOM_collect_garray'
-	LANGUAGE 'C' _IMMUTABLE_STRICT;
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE collect (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_collect_garray
-	);
-
-
--- Availability: 1.2.2
-CREATE AGGREGATE ST_collect (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_collect_garray
-	);
-
--- Deprecation in 1.2.3
 CREATEFUNCTION expand(box3d,float8)
 	RETURNS box3d
 	AS 'MODULE_PATHNAME', 'BOX3D_expand'
@@ -1919,6 +1827,12 @@
 	AS 'MODULE_PATHNAME', 'LWGEOM_makeline_garray'
 	LANGUAGE 'C' _IMMUTABLE_STRICT;
 
+-- Availability: 1.4.0
+CREATEFUNCTION ST_MakeLine (geometry[])
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_makeline_garray'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
 -- Deprecation in 1.2.3
 CREATEFUNCTION LineFromMultiPoint(geometry)
 	RETURNS geometry
@@ -1991,22 +1905,7 @@
 	AS 'MODULE_PATHNAME', 'LWGEOM_setpoint_linestring'
 	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (iscachable,isstrict);
 
--- Deprecation in 1.2.3
-CREATE AGGREGATE makeline (
-	sfunc = geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = makeline_garray
-	);
 
--- Availability: 1.2.2
-CREATE AGGREGATE ST_MakeLine (
-	sfunc = geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_makeline_garray
-	);
-
 -- Deprecation in 1.2.3
 CREATEFUNCTION MakePolygon(geometry, geometry[])
 	RETURNS geometry
@@ -2055,6 +1954,12 @@
 	AS 'MODULE_PATHNAME', 'polygonize_garray'
 	LANGUAGE 'C' _IMMUTABLE_STRICT;
 
+-- Availability: 1.4.0
+CREATEFUNCTION ST_Polygonize (geometry[])
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'polygonize_garray'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
 -- Deprecation in 1.2.3
 CREATEFUNCTION LineMerge(geometry)
 	RETURNS geometry
@@ -2067,22 +1972,7 @@
 	AS 'MODULE_PATHNAME', 'linemerge'
 	LANGUAGE 'C' _IMMUTABLE_STRICT;
 
--- Deprecation in 1.2.3
-CREATE AGGREGATE Polygonize (
-	sfunc = geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = polygonize_garray
-	);
 
--- Availability: 1.2.2
-CREATE AGGREGATE ST_Polygonize (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = ST_polygonize_garray
-	);
-
 CREATE TYPE geometry_dump AS (path integer[], geom geometry);
 
 -- Deprecation in 1.2.3
@@ -4028,7 +3918,81 @@
     AS 'MODULE_PATHNAME','geomunion'
     LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable);
 
+--------------------------------------------------------------------------------
+-- Aggregates and their supporting functions
+--------------------------------------------------------------------------------
+
 -- Deprecation in 1.2.3
+CREATEFUNCTION collector(geometry, geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_collector(geometry, geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION collect(geometry, geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_collect(geometry, geometry) 
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_collect'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Deprecation in 1.2.3
+CREATE AGGREGATE memcollect(
+	sfunc = ST_collect,
+	basetype = geometry,
+	stype = geometry
+	);
+
+-- Availability: 1.2.2
+CREATE AGGREGATE ST_memcollect(
+	sfunc = ST_collect,
+	basetype = geometry,
+	stype = geometry
+	);
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION geom_accum (geometry[],geometry)
+	RETURNS geometry[]
+	AS 'MODULE_PATHNAME', 'LWGEOM_accum'
+	LANGUAGE 'C' _IMMUTABLE;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_geom_accum (geometry[],geometry)
+	RETURNS geometry[]
+	AS 'MODULE_PATHNAME', 'LWGEOM_accum'
+	LANGUAGE 'C' _IMMUTABLE;
+
+
+
+-- Deprecation in 1.2.3
+CREATEFUNCTION collect_garray (geometry[])
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_collect_garray'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_collect_garray (geometry[])
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_collect_garray'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
+-- Availability: 1.2.2
+CREATEFUNCTION ST_collect (geometry[])
+	RETURNS geometry
+	AS 'MODULE_PATHNAME', 'LWGEOM_collect_garray'
+	LANGUAGE 'C' _IMMUTABLE_STRICT;
+
+-- Deprecation in 1.2.3
 CREATE AGGREGATE MemGeomUnion (
 	basetype = geometry,
 	sfunc = geomunion,
@@ -4042,70 +4006,185 @@
 	stype = geometry
 	);
 
+--
+-- pgis_abs
+-- Container type to hold the ArrayBuildState pointer as it passes through
+-- the geometry array accumulation aggregate.
+--
+CREATE FUNCTION pgis_abs_in(cstring)
+    RETURNS pgis_abs
+    AS 'MODULE_PATHNAME'
+    LANGUAGE 'C' IMMUTABLE STRICT;
+
+CREATE FUNCTION pgis_abs_out(pgis_abs)
+    RETURNS cstring
+    AS 'MODULE_PATHNAME'
+    LANGUAGE 'C' IMMUTABLE STRICT;
+
+CREATE TYPE pgis_abs (
+   internallength = 8, 
+   input = pgis_abs_in,
+   output = pgis_abs_out,
+   alignment = double
+);
+
 -- Availability: 1.4.0
-CREATE FUNCTION pgis_geometry_accum_transfn(int, geometry)
-    RETURNS int
+CREATE FUNCTION pgis_geometry_accum_transfn(pgis_abs, geometry)
+    RETURNS pgis_abs
     AS 'MODULE_PATHNAME' LANGUAGE 'C';
     
 -- Availability: 1.4.0
-CREATE FUNCTION pgis_geometry_accum_finalfn(int)
+CREATE FUNCTION pgis_geometry_accum_finalfn(pgis_abs)
     RETURNS geometry[]
     AS 'MODULE_PATHNAME' LANGUAGE 'C';
 
 -- Availability: 1.4.0
-CREATE AGGREGATE ST_GeometryArray (
+CREATE FUNCTION pgis_geometry_union_finalfn(pgis_abs)
+    RETURNS geometry
+    AS 'MODULE_PATHNAME' LANGUAGE 'C';
+    
+-- Availability: 1.4.0
+CREATE FUNCTION pgis_geometry_collect_finalfn(pgis_abs)
+    RETURNS geometry
+    AS 'MODULE_PATHNAME' LANGUAGE 'C';
+    
+-- Availability: 1.4.0
+CREATE FUNCTION pgis_geometry_polygonize_finalfn(pgis_abs)
+    RETURNS geometry
+    AS 'MODULE_PATHNAME' LANGUAGE 'C';
+    
+-- Availability: 1.4.0
+CREATE FUNCTION pgis_geometry_makeline_finalfn(pgis_abs)
+    RETURNS geometry
+    AS 'MODULE_PATHNAME' LANGUAGE 'C';
+    
+-- Deprecation in: 1.2.3
+CREATE AGGREGATE accum (
     BASETYPE = geometry,
     SFUNC = pgis_geometry_accum_transfn,
-    STYPE = int,
+    STYPE = pgis_abs,
     FINALFUNC = pgis_geometry_accum_finalfn
     );
 
-UPDATE pg_aggregate SET aggtranstype = 2281 WHERE aggfnoid = 'st_geometryarray'::regproc;
-UPDATE pg_proc SET prorettype = 2281 WHERE oid = 'pgis_geometry_accum_transfn'::regproc;
-UPDATE pg_proc SET proargtypes = oidvectorin(textout('2281 ' || textin(oidout(proargtypes[1])))) WHERE oid = 'pgis_geometry_accum_transfn'::regproc;
-UPDATE pg_proc SET proargtypes = '2281' WHERE oid = 'pgis_geometry_accum_finalfn'::regproc;
+-- Availability: 1.2.2
+CREATE AGGREGATE ST_Accum (
+    BASETYPE = geometry,
+    SFUNC = pgis_geometry_accum_transfn,
+    STYPE = pgis_abs,
+    FINALFUNC = pgis_geometry_accum_finalfn
+    );
 
+-- TO BE REMOVED BEFORE RELEASE
+CREATE AGGREGATE accum_old (
+	sfunc = ST_geom_accum,
+	basetype = geometry,
+	stype = geometry[]
+	);
+
+-- TO BE REMOVED BEFORE RELEASE
+CREATE AGGREGATE ST_accum_old (
+	sfunc = ST_geom_accum,
+	basetype = geometry,
+	stype = geometry[]
+	);
+
 -- Deprecation in 1.2.3
 CREATEFUNCTION unite_garray (geometry[])
 	RETURNS geometry
-        AS 'MODULE_PATHNAME'
+        AS 'MODULE_PATHNAME', 'pgis_union_geometry_array_old'
 	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); 
 
--- Availability: 1.2.2
+-- Deprecation in 1.4.0
 CREATEFUNCTION ST_unite_garray (geometry[])
 	RETURNS geometry
-	AS 'MODULE_PATHNAME','unite_garray'
+	AS 'MODULE_PATHNAME','pgis_union_geometry_array_old'
 	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); 
 
-CREATEFUNCTION _unite_garray_fast (geometry[])
+CREATEFUNCTION ST_Union (geometry[])
 	RETURNS geometry
-	AS 'MODULE_PATHNAME','unite_garray_fast'
+	AS 'MODULE_PATHNAME','pgis_union_geometry_array'
 	LANGUAGE 'C' _IMMUTABLE_STRICT; -- WITH (isstrict,iscachable); 
 
-
--- Deprecation in 1.2.3
-CREATE AGGREGATE GeomUnion (
+-- TO BE REMOVED BEFORE RELEASE
+CREATE AGGREGATE GeomUnion_Old (
 	sfunc = geom_accum,
 	basetype = geometry,
 	stype = geometry[],
 	finalfunc = ST_unite_garray
 	);
 
--- Availability: 1.2.2
-CREATE AGGREGATE ST_Union (
+-- TO BE REMOVED BEFORE RELEASE
+CREATE AGGREGATE ST_Union_Old (
 	sfunc = ST_geom_accum,
 	basetype = geometry,
 	stype = geometry[],
 	finalfunc = ST_unite_garray
 	);
-CREATE AGGREGATE ST_Union_Fast (
-	sfunc = ST_geom_accum,
-	basetype = geometry,
-	stype = geometry[],
-	finalfunc = _unite_garray_fast
+	
+CREATE AGGREGATE ST_Union (
+    BASETYPE = geometry,
+    SFUNC = pgis_geometry_accum_transfn,
+    STYPE = pgis_abs,
+	FINALFUNC = pgis_geometry_union_finalfn
 	);
 
 -- Deprecation in 1.2.3
+CREATE AGGREGATE collect (
+    BASETYPE = geometry,
+    SFUNC = pgis_geometry_accum_transfn,
+    STYPE = pgis_abs,
+	FINALFUNC = pgis_geometry_collect_finalfn
+	);
+
+-- Availability: 1.2.2
+CREATE AGGREGATE ST_Collect (
+    BASETYPE = geometry,
+    SFUNC = pgis_geometry_accum_transfn,
+    STYPE = pgis_abs,
+	FINALFUNC = pgis_geometry_collect_finalfn
+	);
+
+-- Deprecation in 1.2.3
+CREATE AGGREGATE Polygonize (
+    BASETYPE = geometry,
+    SFUNC = pgis_geometry_accum_transfn,
+    STYPE = pgis_abs,
+	FINALFUNC = pgis_geometry_polygonize_finalfn
+--	finalfunc = polygonize_garray
+	);
+
+-- Availability: 1.2.2
+CREATE AGGREGATE ST_Polygonize (
+    BASETYPE = geometry,
+    SFUNC = pgis_geometry_accum_transfn,
+    STYPE = pgis_abs,
+	FINALFUNC = pgis_geometry_polygonize_finalfn
+--	finalfunc = polygonize_garray
+	);
+
+-- Deprecation in 1.2.3
+CREATE AGGREGATE makeline (
+    BASETYPE = geometry,
+    SFUNC = pgis_geometry_accum_transfn,
+    STYPE = pgis_abs,
+	FINALFUNC = pgis_geometry_makeline_finalfn
+--	finalfunc = makeline_garray
+	);
+
+-- Availability: 1.2.2
+CREATE AGGREGATE ST_MakeLine (
+    BASETYPE = geometry,
+    SFUNC = pgis_geometry_accum_transfn,
+    STYPE = pgis_abs,
+	FINALFUNC = pgis_geometry_makeline_finalfn
+--	finalfunc = ST_makeline_garray
+	);
+
+
+
+--------------------------------------------------------------------------------
+
+-- Deprecation in 1.2.3
 CREATEFUNCTION relate(geometry,geometry)
    RETURNS text
    AS 'MODULE_PATHNAME','relate_full'



More information about the postgis-commits mailing list