[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