From: Paul Ramsey Date: Wed, 4 Mar 2015 20:45:31 +0000 (+0000) Subject: Wrap de-toastings in a common MACRO X-Git-Tag: 2.2.0rc1~623 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0034f41d994a436e62140cb62bed1881f8074dfd;p=postgis Wrap de-toastings in a common MACRO git-svn-id: http://svn.osgeo.org/postgis/trunk@13306 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/libpgcommon/lwgeom_pg.h b/libpgcommon/lwgeom_pg.h index 4c6b1ff90..b14e674b7 100644 --- a/libpgcommon/lwgeom_pg.h +++ b/libpgcommon/lwgeom_pg.h @@ -25,7 +25,7 @@ /* Install PosgreSQL handlers for liblwgeom use */ void pg_install_lwgeom_handlers(void); -#define PG_GETARG_GSERIALIZED(varno) ((GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(varno))) +#define PG_GETARG_GSERIALIZED_P(varno) ((GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(varno))) /* Debugging macros */ #if POSTGIS_DEBUG_LEVEL > 0 diff --git a/postgis/geography_btree.c b/postgis/geography_btree.c index 14a020500..dd3da7969 100644 --- a/postgis/geography_btree.c +++ b/postgis/geography_btree.c @@ -178,8 +178,8 @@ PG_FUNCTION_INFO_V1(geography_eq); Datum geography_eq(PG_FUNCTION_ARGS) { /* Perfect equals test based on hash */ - GSERIALIZED *g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *g1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *g2 = PG_GETARG_GSERIALIZED_P(1); uint32 h1 = geography_hash(g1); uint32 h2 = geography_hash(g2); diff --git a/postgis/geography_inout.c b/postgis/geography_inout.c index 74b35be4d..523e8afe1 100644 --- a/postgis/geography_inout.c +++ b/postgis/geography_inout.c @@ -180,7 +180,7 @@ Datum geography_out(PG_FUNCTION_ARGS) GSERIALIZED *g = NULL; char *hexwkb; - g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + g = PG_GETARG_GSERIALIZED_P(0); lwgeom = lwgeom_from_gserialized(g); hexwkb = lwgeom_to_hexwkb(lwgeom, WKB_EXTENDED, 0); lwgeom_free(lwgeom); @@ -223,7 +223,7 @@ Datum geography_as_gml(PG_FUNCTION_ARGS) /* Get the geography */ if ( PG_ARGISNULL(1) ) PG_RETURN_NULL(); - g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + g = PG_GETARG_GSERIALIZED_P(1); /* Convert to lwgeom so we can run the old functions */ lwgeom = lwgeom_from_gserialized(g); @@ -341,7 +341,7 @@ Datum geography_as_kml(PG_FUNCTION_ARGS) /* Get the geometry */ if ( PG_ARGISNULL(1) ) PG_RETURN_NULL(); - g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + g = PG_GETARG_GSERIALIZED_P(1); /* Convert to lwgeom so we can run the old functions */ lwgeom = lwgeom_from_gserialized(g); @@ -407,7 +407,7 @@ Datum geography_as_svg(PG_FUNCTION_ARGS) if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); - g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + g = PG_GETARG_GSERIALIZED_P(0); /* Convert to lwgeom so we can run the old functions */ lwgeom = lwgeom_from_gserialized(g); @@ -463,7 +463,7 @@ Datum geography_as_geojson(PG_FUNCTION_ARGS) /* Get the geography */ if (PG_ARGISNULL(1) ) PG_RETURN_NULL(); - g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + g = PG_GETARG_GSERIALIZED_P(1); /* Convert to lwgeom so we can run the old functions */ lwgeom = lwgeom_from_gserialized(g); @@ -618,7 +618,7 @@ Datum geometry_from_geography(PG_FUNCTION_ARGS) { LWGEOM *lwgeom = NULL; GSERIALIZED *ret = NULL; - GSERIALIZED *g_ser = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *g_ser = PG_GETARG_GSERIALIZED_P(0); lwgeom = lwgeom_from_gserialized(g_ser); @@ -676,7 +676,7 @@ Datum geography_send(PG_FUNCTION_ARGS) uint8_t *wkb; bytea *result; - g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + g = PG_GETARG_GSERIALIZED_P(0); lwgeom = lwgeom_from_gserialized(g); wkb = lwgeom_to_wkb(lwgeom, WKB_EXTENDED, &size_result); lwgeom_free(lwgeom); diff --git a/postgis/geography_measurement.c b/postgis/geography_measurement.c index ce370043a..fd0214f57 100644 --- a/postgis/geography_measurement.c +++ b/postgis/geography_measurement.c @@ -60,8 +60,8 @@ Datum geography_distance_uncached(PG_FUNCTION_ARGS) SPHEROID s; /* Get our geometry objects loaded into memory. */ - g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + g1 = PG_GETARG_GSERIALIZED_P(0); + g2 = PG_GETARG_GSERIALIZED_P(1); /* Read our tolerance value. */ /* tolerance = PG_GETARG_FLOAT8(2); */ @@ -124,8 +124,8 @@ Datum geography_distance(PG_FUNCTION_ARGS) SPHEROID s; /* Get our geometry objects loaded into memory. */ - g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + g1 = PG_GETARG_GSERIALIZED_P(0); + g2 = PG_GETARG_GSERIALIZED_P(1); /* Read our tolerance value. */ tolerance = PG_GETARG_FLOAT8(2); @@ -192,8 +192,8 @@ Datum geography_dwithin(PG_FUNCTION_ARGS) int dwithin = LW_FALSE; /* Get our geometry objects loaded into memory. */ - g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + g1 = PG_GETARG_GSERIALIZED_P(0); + g2 = PG_GETARG_GSERIALIZED_P(1); /* Read our tolerance value. */ tolerance = PG_GETARG_FLOAT8(2); @@ -253,8 +253,8 @@ Datum geography_distance_tree(PG_FUNCTION_ARGS) SPHEROID s; /* Get our geometry objects loaded into memory. */ - g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + g1 = PG_GETARG_GSERIALIZED_P(0); + g2 = PG_GETARG_GSERIALIZED_P(1); /* Return FALSE on empty arguments. */ if ( gserialized_is_empty(g1) || gserialized_is_empty(g2) ) @@ -305,8 +305,8 @@ Datum geography_dwithin_uncached(PG_FUNCTION_ARGS) SPHEROID s; /* Get our geometry objects loaded into memory. */ - g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + g1 = PG_GETARG_GSERIALIZED_P(0); + g2 = PG_GETARG_GSERIALIZED_P(1); /* Read our tolerance value. */ tolerance = PG_GETARG_FLOAT8(2); @@ -402,7 +402,7 @@ Datum geography_area(PG_FUNCTION_ARGS) SPHEROID s; /* Get our geometry object loaded into memory. */ - g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + g = PG_GETARG_GSERIALIZED_P(0); /* Read our calculation type */ use_spheroid = PG_GETARG_BOOL(1); @@ -474,7 +474,7 @@ Datum geography_perimeter(PG_FUNCTION_ARGS) int type; /* Get our geometry object loaded into memory. */ - g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + g = PG_GETARG_GSERIALIZED_P(0); /* Only return for area features. */ type = gserialized_get_type(g); @@ -533,7 +533,7 @@ Datum geography_length(PG_FUNCTION_ARGS) SPHEROID s; /* Get our geometry object loaded into memory. */ - g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + g = PG_GETARG_GSERIALIZED_P(0); lwgeom = lwgeom_from_gserialized(g); /* EMPTY things have no length */ @@ -585,7 +585,7 @@ Datum geography_point_outside(PG_FUNCTION_ARGS) POINT2D pt; /* Get our geometry object loaded into memory. */ - g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + g = PG_GETARG_GSERIALIZED_P(0); /* We need the bounding box to get an outside point for area algorithm */ if ( gserialized_get_gbox_p(g, &gbox) == LW_FAILURE ) @@ -627,8 +627,8 @@ Datum geography_covers(PG_FUNCTION_ARGS) int result = LW_FALSE; /* Get our geometry objects loaded into memory. */ - g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + g1 = PG_GETARG_GSERIALIZED_P(0); + g2 = PG_GETARG_GSERIALIZED_P(1); type1 = gserialized_get_type(g1); type2 = gserialized_get_type(g2); @@ -840,7 +840,7 @@ Datum geography_project(PG_FUNCTION_ARGS) PG_RETURN_NULL(); /* Get our geometry object loaded into memory. */ - g = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + g = PG_GETARG_GSERIALIZED_P(0); /* Only return for points. */ type = gserialized_get_type(g); @@ -912,8 +912,8 @@ Datum geography_azimuth(PG_FUNCTION_ARGS) uint32_t type1, type2; /* Get our geometry object loaded into memory. */ - g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - g2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + g1 = PG_GETARG_GSERIALIZED_P(0); + g2 = PG_GETARG_GSERIALIZED_P(1); /* Only return for points. */ type1 = gserialized_get_type(g1); @@ -975,7 +975,7 @@ Datum geography_segmentize(PG_FUNCTION_ARGS) uint32_t type1; /* Get our geometry object loaded into memory. */ - g1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + g1 = PG_GETARG_GSERIALIZED_P(0); type1 = gserialized_get_type(g1); /* Convert max_seg_length from metric units to radians */ diff --git a/postgis/geometry_inout.c b/postgis/geometry_inout.c index 26a994fed..5c5a97d19 100644 --- a/postgis/geometry_inout.c +++ b/postgis/geometry_inout.c @@ -57,7 +57,7 @@ Datum geometry_to_point(PG_FUNCTION_ARGS) if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); if ( gserialized_get_type(geom) != POINTTYPE ) elog(ERROR, "geometry_to_point only accepts Points"); @@ -96,7 +96,7 @@ Datum geometry_to_path(PG_FUNCTION_ARGS) if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); if ( gserialized_get_type(geom) != LINETYPE ) elog(ERROR, "geometry_to_path only accepts LineStrings"); @@ -181,7 +181,7 @@ Datum geometry_to_polygon(PG_FUNCTION_ARGS) if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); if ( gserialized_get_type(geom) != POLYGONTYPE ) elog(ERROR, "geometry_to_polygon only accepts Polygons"); diff --git a/postgis/gserialized_typmod.c b/postgis/gserialized_typmod.c index 6d4d6970b..aef0e7074 100644 --- a/postgis/gserialized_typmod.c +++ b/postgis/gserialized_typmod.c @@ -290,7 +290,7 @@ Datum geometry_typmod_in(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(geography_enforce_typmod); Datum geography_enforce_typmod(PG_FUNCTION_ARGS) { - GSERIALIZED *arg = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *arg = PG_GETARG_GSERIALIZED_P(0); int32 typmod = PG_GETARG_INT32(1); /* We don't need to have different behavior based on explicitness. */ /* bool isExplicit = PG_GETARG_BOOL(2); */ @@ -309,7 +309,7 @@ Datum geography_enforce_typmod(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(geometry_enforce_typmod); Datum geometry_enforce_typmod(PG_FUNCTION_ARGS) { - GSERIALIZED *arg = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *arg = PG_GETARG_GSERIALIZED_P(0); int32 typmod = PG_GETARG_INT32(1); /* We don't need to have different behavior based on explicitness. */ /* bool isExplicit = PG_GETARG_BOOL(2); */ diff --git a/postgis/lwgeom_backend_api.c b/postgis/lwgeom_backend_api.c index 649b109cf..2d3c3a1c3 100644 --- a/postgis/lwgeom_backend_api.c +++ b/postgis/lwgeom_backend_api.c @@ -14,12 +14,12 @@ #include "postgres.h" #include "fmgr.h" -#include "../liblwgeom/liblwgeom.h" - -/* for custom variables */ -#include "utils/guc.h" +#include "utils/guc.h" /* for custom variables */ #include "../postgis_config.h" +#include "lwgeom_pg.h" +#include "liblwgeom.h" + #include "lwgeom_backend_api.h" #include "lwgeom_geos.h" #if HAVE_SFCGAL @@ -156,8 +156,8 @@ PG_FUNCTION_INFO_V1(intersects3d_dwithin); Datum intersects3d_dwithin(PG_FUNCTION_ARGS) { double mindist; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); diff --git a/postgis/lwgeom_box.c b/postgis/lwgeom_box.c index 2cb98539c..1dbea2dc7 100644 --- a/postgis/lwgeom_box.c +++ b/postgis/lwgeom_box.c @@ -108,7 +108,7 @@ Datum BOX2D_out(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_to_BOX2D); Datum LWGEOM_to_BOX2D(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); GBOX gbox; @@ -133,7 +133,7 @@ Datum LWGEOM_to_BOX2D(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_to_BOX2DF); Datum LWGEOM_to_BOX2DF(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); GBOX gbox; if ( gserialized_get_gbox_p(geom, &gbox) == LW_FAILURE ) @@ -406,7 +406,7 @@ Datum BOX2D_combine(PG_FUNCTION_ARGS) if (box2d_ptr == NULL) { - lwgeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + lwgeom = PG_GETARG_GSERIALIZED_P(1); /* empty geom would make getbox2d_p return NULL */ if ( ! gserialized_get_gbox_p(lwgeom, &box) ) PG_RETURN_NULL(); memcpy(result, &box, sizeof(GBOX)); @@ -422,7 +422,7 @@ Datum BOX2D_combine(PG_FUNCTION_ARGS) /*combine_bbox(BOX3D, geometry) => union(BOX3D, geometry->bvol) */ - lwgeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + lwgeom = PG_GETARG_GSERIALIZED_P(1); if ( ! gserialized_get_gbox_p(lwgeom, &box) ) { /* must be the empty geom */ @@ -520,8 +520,8 @@ Datum BOX2D_to_LWGEOM(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(BOX2D_construct); Datum BOX2D_construct(PG_FUNCTION_ARGS) { - GSERIALIZED *pgmin = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *pgmax = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *pgmin = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *pgmax = PG_GETARG_GSERIALIZED_P(1); GBOX *result; LWPOINT *minpoint, *maxpoint; double min, max, tmp; diff --git a/postgis/lwgeom_box3d.c b/postgis/lwgeom_box3d.c index 8b8cdef84..73fb7d022 100644 --- a/postgis/lwgeom_box3d.c +++ b/postgis/lwgeom_box3d.c @@ -282,7 +282,7 @@ Datum BOX3D_expand(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_to_BOX3D); Datum LWGEOM_to_BOX3D(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); GBOX gbox; BOX3D *result; @@ -412,8 +412,8 @@ Datum BOX3D_combine(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(BOX3D_construct); Datum BOX3D_construct(PG_FUNCTION_ARGS) { - GSERIALIZED *min = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *max = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *min = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *max = PG_GETARG_GSERIALIZED_P(1); BOX3D *result = palloc(sizeof(BOX3D)); LWGEOM *minpoint, *maxpoint; POINT3DZ minp, maxp; diff --git a/postgis/lwgeom_export.c b/postgis/lwgeom_export.c index 96b41d142..c5bfba541 100644 --- a/postgis/lwgeom_export.c +++ b/postgis/lwgeom_export.c @@ -190,7 +190,7 @@ Datum LWGEOM_asGML(PG_FUNCTION_ARGS) /* Get the geometry */ if ( PG_ARGISNULL(1) ) PG_RETURN_NULL(); - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom = PG_GETARG_GSERIALIZED_P(1); /* Retrieve precision if any (default is max) */ if (PG_NARGS() >2 && !PG_ARGISNULL(2)) @@ -305,7 +305,7 @@ Datum LWGEOM_asKML(PG_FUNCTION_ARGS) /* Get the geometry */ if ( PG_ARGISNULL(1) ) PG_RETURN_NULL(); - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom = PG_GETARG_GSERIALIZED_P(1); /* Retrieve precision if any (default is max) */ if (PG_NARGS() >2 && !PG_ARGISNULL(2)) @@ -380,7 +380,7 @@ Datum LWGEOM_asGeoJson(PG_FUNCTION_ARGS) /* Get the geometry */ if (PG_ARGISNULL(1) ) PG_RETURN_NULL(); - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom = PG_GETARG_GSERIALIZED_P(1); /* Retrieve precision if any (default is max) */ if (PG_NARGS() >2 && !PG_ARGISNULL(2)) @@ -449,7 +449,7 @@ Datum LWGEOM_asSVG(PG_FUNCTION_ARGS) if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); /* check for relative path notation */ if ( PG_NARGS() > 1 && ! PG_ARGISNULL(1) ) @@ -504,7 +504,7 @@ Datum LWGEOM_asX3D(PG_FUNCTION_ARGS) /* Get the geometry */ if ( PG_ARGISNULL(1) ) PG_RETURN_NULL(); - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom = PG_GETARG_GSERIALIZED_P(1); /* Retrieve precision if any (default is max) */ if (PG_NARGS() >2 && !PG_ARGISNULL(2)) @@ -573,7 +573,7 @@ Datum LWGEOM_asEncodedPolyline(PG_FUNCTION_ARGS) if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); if (gserialized_get_srid(geom) != 4326) { PG_FREE_IF_COPY(geom, 0); elog(ERROR, "Only SRID 4326 is supported."); diff --git a/postgis/lwgeom_functions_analytic.c b/postgis/lwgeom_functions_analytic.c index 1229b4f70..15d22d810 100644 --- a/postgis/lwgeom_functions_analytic.c +++ b/postgis/lwgeom_functions_analytic.c @@ -43,7 +43,7 @@ int point_in_ring_rtree(RTREE_NODE *root, POINT2D *point); PG_FUNCTION_INFO_V1(LWGEOM_simplify2d); Datum LWGEOM_simplify2d(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *result; int type = gserialized_get_type(geom); LWGEOM *in; @@ -71,7 +71,7 @@ Datum LWGEOM_simplify2d(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_SetEffectiveArea); Datum LWGEOM_SetEffectiveArea(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *result; int type = gserialized_get_type(geom); LWGEOM *in; @@ -116,7 +116,7 @@ Datum LWGEOM_line_interpolate_point(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(LWGEOM_line_interpolate_point); Datum LWGEOM_line_interpolate_point(PG_FUNCTION_ARGS) { - GSERIALIZED *gser = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *gser = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *result; double distance = PG_GETARG_FLOAT8(1); LWLINE *line; @@ -287,7 +287,7 @@ Datum LWGEOM_snaptogrid(PG_FUNCTION_ARGS) LWGEOM *out_lwgeom; gridspec grid; - GSERIALIZED *in_geom = PG_GETARG_GSERIALIZED(0); + GSERIALIZED *in_geom = PG_GETARG_GSERIALIZED_P(0); /* Set grid values to zero to start */ memset(&grid, 0, sizeof(gridspec)); @@ -353,7 +353,7 @@ Datum LWGEOM_snaptogrid_pointoff(PG_FUNCTION_ARGS) /* BOX3D box3d; */ POINT4D offsetpoint; - in_geom = PG_GETARG_GSERIALIZED(0); + in_geom = PG_GETARG_GSERIALIZED_P(0); /* Return input geometry if input geometry is empty */ if ( gserialized_is_empty(in_geom) ) @@ -361,7 +361,7 @@ Datum LWGEOM_snaptogrid_pointoff(PG_FUNCTION_ARGS) PG_RETURN_POINTER(in_geom); } - in_point = PG_GETARG_GSERIALIZED(1); + in_point = PG_GETARG_GSERIALIZED_P(1); in_lwpoint = lwgeom_as_lwpoint(lwgeom_from_gserialized(in_point)); if ( in_lwpoint == NULL ) { @@ -422,8 +422,8 @@ Datum ST_LineCrossingDirection(PG_FUNCTION_ARGS) int type1, type2, rv; LWLINE *l1 = NULL; LWLINE *l2 = NULL; - GSERIALIZED *geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); @@ -459,7 +459,7 @@ Datum LWGEOM_line_substring(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(LWGEOM_line_substring); Datum LWGEOM_line_substring(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); double from = PG_GETARG_FLOAT8(1); double to = PG_GETARG_FLOAT8(2); LWGEOM *olwgeom; diff --git a/postgis/lwgeom_functions_basic.c b/postgis/lwgeom_functions_basic.c index b7038763a..f0380d477 100644 --- a/postgis/lwgeom_functions_basic.c +++ b/postgis/lwgeom_functions_basic.c @@ -114,7 +114,7 @@ Datum LWGEOM_mem_size(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_summary); Datum LWGEOM_summary(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); char *result; text *mytext; LWGEOM *lwgeom; @@ -211,7 +211,7 @@ Datum postgis_libxml_version(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_npoints); Datum LWGEOM_npoints(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); int npoints = 0; @@ -226,7 +226,7 @@ Datum LWGEOM_npoints(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_nrings); Datum LWGEOM_nrings(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); int nrings = 0; @@ -246,7 +246,7 @@ Datum LWGEOM_nrings(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_area_polygon); Datum LWGEOM_area_polygon(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double area = 0.0; @@ -270,7 +270,7 @@ Datum LWGEOM_area_polygon(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_length2d_linestring); Datum LWGEOM_length2d_linestring(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double dist = lwgeom_length_2d(lwgeom); lwgeom_free(lwgeom); @@ -288,7 +288,7 @@ Datum LWGEOM_length2d_linestring(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_length_linestring); Datum LWGEOM_length_linestring(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double dist = lwgeom_length(lwgeom); lwgeom_free(lwgeom); @@ -306,7 +306,7 @@ Datum LWGEOM_length_linestring(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_perimeter_poly); Datum LWGEOM_perimeter_poly(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double perimeter = 0.0; @@ -325,7 +325,7 @@ Datum LWGEOM_perimeter_poly(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_perimeter2d_poly); Datum LWGEOM_perimeter2d_poly(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double perimeter = 0.0; @@ -339,7 +339,7 @@ Datum LWGEOM_perimeter2d_poly(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_force_2d); Datum LWGEOM_force_2d(PG_FUNCTION_ARGS) { - GSERIALIZED *pg_geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *pg_geom_in = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *pg_geom_out; LWGEOM *lwg_in, *lwg_out; @@ -360,7 +360,7 @@ Datum LWGEOM_force_2d(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_force_3dz); Datum LWGEOM_force_3dz(PG_FUNCTION_ARGS) { - GSERIALIZED *pg_geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *pg_geom_in = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *pg_geom_out; LWGEOM *lwg_in, *lwg_out; @@ -382,7 +382,7 @@ Datum LWGEOM_force_3dz(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_force_3dm); Datum LWGEOM_force_3dm(PG_FUNCTION_ARGS) { - GSERIALIZED *pg_geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *pg_geom_in = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *pg_geom_out; LWGEOM *lwg_in, *lwg_out; @@ -404,7 +404,7 @@ Datum LWGEOM_force_3dm(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_force_4d); Datum LWGEOM_force_4d(PG_FUNCTION_ARGS) { - GSERIALIZED *pg_geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *pg_geom_in = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *pg_geom_out; LWGEOM *lwg_in, *lwg_out; @@ -426,7 +426,7 @@ Datum LWGEOM_force_4d(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_force_collection); Datum LWGEOM_force_collection(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *result; LWGEOM **lwgeoms; LWGEOM *lwgeom; @@ -481,7 +481,7 @@ Datum LWGEOM_force_collection(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_force_multi); Datum LWGEOM_force_multi(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *result; LWGEOM *lwgeom; LWGEOM *ogeom; @@ -524,7 +524,7 @@ Datum LWGEOM_force_multi(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_force_curve); Datum LWGEOM_force_curve(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *result; LWGEOM *lwgeom; LWGEOM *ogeom; @@ -547,7 +547,7 @@ Datum LWGEOM_force_curve(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_force_sfs); Datum LWGEOM_force_sfs(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *result; LWGEOM *lwgeom; LWGEOM *ogeom; @@ -585,8 +585,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_closestpoint); Datum LWGEOM_closestpoint(PG_FUNCTION_ARGS) { GSERIALIZED *result; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); LWGEOM *point; LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); @@ -619,8 +619,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_shortestline2d); Datum LWGEOM_shortestline2d(PG_FUNCTION_ARGS) { GSERIALIZED *result; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); LWGEOM *theline; LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); @@ -653,8 +653,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_longestline2d); Datum LWGEOM_longestline2d(PG_FUNCTION_ARGS) { GSERIALIZED *result; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); LWGEOM *theline; LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); @@ -686,8 +686,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_mindistance2d); Datum LWGEOM_mindistance2d(PG_FUNCTION_ARGS) { double mindist; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); @@ -721,8 +721,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_dwithin); Datum LWGEOM_dwithin(PG_FUNCTION_ARGS) { double mindist; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); double tolerance = PG_GETARG_FLOAT8(2); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); @@ -757,8 +757,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_dfullywithin); Datum LWGEOM_dfullywithin(PG_FUNCTION_ARGS) { double maxdist; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); double tolerance = PG_GETARG_FLOAT8(2); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); @@ -794,8 +794,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_maxdistance2d_linestring); Datum LWGEOM_maxdistance2d_linestring(PG_FUNCTION_ARGS) { double maxdist; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); @@ -825,8 +825,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_closestpoint3d); Datum LWGEOM_closestpoint3d(PG_FUNCTION_ARGS) { GSERIALIZED *result; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); LWGEOM *point; LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); @@ -861,8 +861,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_shortestline3d); Datum LWGEOM_shortestline3d(PG_FUNCTION_ARGS) { GSERIALIZED *result; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); LWGEOM *theline; LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); @@ -897,8 +897,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_longestline3d); Datum LWGEOM_longestline3d(PG_FUNCTION_ARGS) { GSERIALIZED *result; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); LWGEOM *theline; LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); @@ -932,8 +932,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_mindistance3d); Datum LWGEOM_mindistance3d(PG_FUNCTION_ARGS) { double mindist; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); @@ -964,8 +964,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_dwithin3d); Datum LWGEOM_dwithin3d(PG_FUNCTION_ARGS) { double mindist; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); double tolerance = PG_GETARG_FLOAT8(2); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); @@ -1001,8 +1001,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_dfullywithin3d); Datum LWGEOM_dfullywithin3d(PG_FUNCTION_ARGS) { double maxdist; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); double tolerance = PG_GETARG_FLOAT8(2); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); @@ -1037,8 +1037,8 @@ PG_FUNCTION_INFO_V1(LWGEOM_maxdistance3d); Datum LWGEOM_maxdistance3d(PG_FUNCTION_ARGS) { double maxdist; - GSERIALIZED *geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); LWGEOM *lwgeom1 = lwgeom_from_gserialized(geom1); LWGEOM *lwgeom2 = lwgeom_from_gserialized(geom2); @@ -1102,7 +1102,7 @@ Datum LWGEOM_inside_circle_point(PG_FUNCTION_ARGS) LWGEOM *lwgeom; int inside; - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); lwgeom = lwgeom_from_gserialized(geom); lwpoint = lwgeom_as_lwpoint(lwgeom); if ( lwpoint == NULL || lwgeom_is_empty(lwgeom) ) @@ -1148,8 +1148,8 @@ Datum LWGEOM_collect(PG_FUNCTION_ARGS) if (PG_ARGISNULL(1)) PG_RETURN_DATUM(PG_GETARG_DATUM(0)); - gser1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - gser2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + gser1 = PG_GETARG_GSERIALIZED_P(0); + gser2 = PG_GETARG_GSERIALIZED_P(1); POSTGIS_DEBUGF(3, "LWGEOM_collect(%s, %s): call", lwtype_name(gserialized_get_type(gser1)), lwtype_name(gserialized_get_type(gser2))); @@ -1384,7 +1384,7 @@ Datum LWGEOM_line_from_mpoint(PG_FUNCTION_ARGS) POSTGIS_DEBUG(2, "LWGEOM_line_from_mpoint called"); /* Get input GSERIALIZED and deserialize it */ - ingeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + ingeom = PG_GETARG_GSERIALIZED_P(0); if ( gserialized_get_type(ingeom) != MULTIPOINTTYPE ) { @@ -1549,8 +1549,8 @@ Datum LWGEOM_makeline(PG_FUNCTION_ARGS) POSTGIS_DEBUG(2, "LWGEOM_makeline called."); /* Get input datum */ - pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - pglwg2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + pglwg1 = PG_GETARG_GSERIALIZED_P(0); + pglwg2 = PG_GETARG_GSERIALIZED_P(1); if ( (gserialized_get_type(pglwg1) != POINTTYPE && gserialized_get_type(pglwg1) != LINETYPE) || (gserialized_get_type(pglwg2) != POINTTYPE && gserialized_get_type(pglwg2) != LINETYPE) ) @@ -1596,7 +1596,7 @@ Datum LWGEOM_makepoly(PG_FUNCTION_ARGS) POSTGIS_DEBUG(2, "LWGEOM_makepoly called."); /* Get input shell */ - pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + pglwg1 = PG_GETARG_GSERIALIZED_P(0); if ( gserialized_get_type(pglwg1) != LINETYPE ) { lwerror("Shell is not a line"); @@ -1646,7 +1646,7 @@ Datum LWGEOM_makepoly(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_expand); Datum LWGEOM_expand(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double d = PG_GETARG_FLOAT8(1); POINT4D pt; @@ -1725,7 +1725,7 @@ Datum LWGEOM_expand(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_to_BOX); Datum LWGEOM_to_BOX(PG_FUNCTION_ARGS) { - GSERIALIZED *pg_lwgeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *pg_lwgeom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(pg_lwgeom); GBOX gbox; int result; @@ -1761,7 +1761,7 @@ Datum LWGEOM_to_BOX(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_envelope); Datum LWGEOM_envelope(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); int srid = lwgeom->srid; POINT4D pt; @@ -1883,7 +1883,7 @@ Datum LWGEOM_segmentize2d(PG_FUNCTION_ARGS) POSTGIS_DEBUG(2, "LWGEOM_segmentize2d called"); - ingeom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + ingeom = PG_GETARG_GSERIALIZED_P(0); dist = PG_GETARG_FLOAT8(1); type = gserialized_get_type(ingeom); @@ -1984,7 +1984,7 @@ Datum LWGEOM_noop(PG_FUNCTION_ARGS) POSTGIS_DEBUG(2, "LWGEOM_noop called"); - in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + in = PG_GETARG_GSERIALIZED_P(0); lwgeom = lwgeom_from_gserialized(in); @@ -2011,7 +2011,7 @@ Datum LWGEOM_zmflag(PG_FUNCTION_ARGS) GSERIALIZED *in; int ret = 0; - in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + in = PG_GETARG_GSERIALIZED_P(0); if ( gserialized_has_z(in) ) ret += 2; if ( gserialized_has_m(in) ) ret += 1; PG_FREE_IF_COPY(in, 0); @@ -2021,14 +2021,14 @@ Datum LWGEOM_zmflag(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_hasz); Datum LWGEOM_hasz(PG_FUNCTION_ARGS) { - GSERIALIZED *in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *in = PG_GETARG_GSERIALIZED_P(0); PG_RETURN_BOOL(gserialized_has_z(in)); } PG_FUNCTION_INFO_V1(LWGEOM_hasm); Datum LWGEOM_hasm(PG_FUNCTION_ARGS) { - GSERIALIZED *in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *in = PG_GETARG_GSERIALIZED_P(0); PG_RETURN_BOOL(gserialized_has_m(in)); } @@ -2036,7 +2036,7 @@ Datum LWGEOM_hasm(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_hasBBOX); Datum LWGEOM_hasBBOX(PG_FUNCTION_ARGS) { - GSERIALIZED *in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *in = PG_GETARG_GSERIALIZED_P(0); char res = gserialized_has_bbox(in); PG_FREE_IF_COPY(in, 0); PG_RETURN_BOOL(res); @@ -2049,7 +2049,7 @@ Datum LWGEOM_ndims(PG_FUNCTION_ARGS) GSERIALIZED *in; int ret; - in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + in = PG_GETARG_GSERIALIZED_P(0); ret = (gserialized_ndims(in)); PG_FREE_IF_COPY(in, 0); PG_RETURN_INT16(ret); @@ -2059,8 +2059,8 @@ Datum LWGEOM_ndims(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_same); Datum LWGEOM_same(PG_FUNCTION_ARGS) { - GSERIALIZED *g1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *g2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *g1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *g2 = PG_GETARG_GSERIALIZED_P(1); LWGEOM *lwg1, *lwg2; bool result; @@ -2233,8 +2233,8 @@ Datum LWGEOM_addpoint(PG_FUNCTION_ARGS) POSTGIS_DEBUG(2, "LWGEOM_addpoint called."); - pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - pglwg2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + pglwg1 = PG_GETARG_GSERIALIZED_P(0); + pglwg2 = PG_GETARG_GSERIALIZED_P(1); if ( PG_NARGS() > 2 ) { @@ -2292,7 +2292,7 @@ Datum LWGEOM_removepoint(PG_FUNCTION_ARGS) POSTGIS_DEBUG(2, "LWGEOM_removepoint called."); - pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + pglwg1 = PG_GETARG_GSERIALIZED_P(0); which = PG_GETARG_INT32(1); if ( gserialized_get_type(pglwg1) != LINETYPE ) @@ -2342,7 +2342,7 @@ Datum LWGEOM_setpoint_linestring(PG_FUNCTION_ARGS) pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); which = PG_GETARG_INT32(1); - pglwg2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(2)); + pglwg2 = PG_GETARG_GSERIALIZED_P(2); /* Extract a POINT4D from the point */ @@ -2395,7 +2395,7 @@ Datum LWGEOM_asEWKT(PG_FUNCTION_ARGS) POSTGIS_DEBUG(2, "LWGEOM_asEWKT called."); - geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); lwgeom = lwgeom_from_gserialized(geom); /* Write to WKT and free the geometry */ @@ -2427,7 +2427,7 @@ Datum LWGEOM_azimuth(PG_FUNCTION_ARGS) int srid; /* Extract first point */ - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); lwpoint = lwgeom_as_lwpoint(lwgeom_from_gserialized(geom)); if ( ! lwpoint ) { @@ -2446,7 +2446,7 @@ Datum LWGEOM_azimuth(PG_FUNCTION_ARGS) PG_FREE_IF_COPY(geom, 0); /* Extract second point */ - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom = PG_GETARG_GSERIALIZED_P(1); lwpoint = lwgeom_as_lwpoint(lwgeom_from_gserialized(geom)); if ( ! lwpoint ) { @@ -2494,8 +2494,8 @@ Datum LWGEOM_azimuth(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(optimistic_overlap); Datum optimistic_overlap(PG_FUNCTION_ARGS) { - GSERIALIZED *pg_geom1 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *pg_geom2 = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *pg_geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *pg_geom2 = PG_GETARG_GSERIALIZED_P(1); double dist = PG_GETARG_FLOAT8(2); GBOX g1_bvol; double calc_dist; @@ -2599,7 +2599,7 @@ Datum ST_GeoHash(PG_FUNCTION_ARGS) PG_RETURN_NULL(); } - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); if ( ! PG_ARGISNULL(1) ) { @@ -2620,7 +2620,7 @@ Datum ST_GeoHash(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(ST_CollectionExtract); Datum ST_CollectionExtract(PG_FUNCTION_ARGS) { - GSERIALIZED *input = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *input = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *output; LWGEOM *lwgeom = lwgeom_from_gserialized(input); LWGEOM *lwcol = NULL; @@ -2672,7 +2672,7 @@ Datum ST_CollectionExtract(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(ST_CollectionHomogenize); Datum ST_CollectionHomogenize(PG_FUNCTION_ARGS) { - GSERIALIZED *input = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *input = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *output; LWGEOM *lwgeom = lwgeom_from_gserialized(input); LWGEOM *lwoutput = NULL; diff --git a/postgis/lwgeom_functions_lrs.c b/postgis/lwgeom_functions_lrs.c index fd18319f5..c8bd70f21 100644 --- a/postgis/lwgeom_functions_lrs.c +++ b/postgis/lwgeom_functions_lrs.c @@ -28,7 +28,7 @@ Datum ST_AddMeasure(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_AddMeasure); Datum ST_AddMeasure(PG_FUNCTION_ARGS) { - GSERIALIZED *gin = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *gin = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *gout; double start_measure = PG_GETARG_FLOAT8(1); double end_measure = PG_GETARG_FLOAT8(2); @@ -68,7 +68,7 @@ Datum ST_LocateAlong(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_LocateAlong); Datum ST_LocateAlong(PG_FUNCTION_ARGS) { - GSERIALIZED *gin = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *gin = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *gout; LWGEOM *lwin = NULL, *lwout = NULL; double measure = PG_GETARG_FLOAT8(1); @@ -96,7 +96,7 @@ Datum ST_LocateBetween(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_LocateBetween); Datum ST_LocateBetween(PG_FUNCTION_ARGS) { - GSERIALIZED *geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom_in = PG_GETARG_GSERIALIZED_P(0); double from = PG_GETARG_FLOAT8(1); double to = PG_GETARG_FLOAT8(2); double offset = PG_GETARG_FLOAT8(3); @@ -137,7 +137,7 @@ Datum ST_LocateBetweenElevations(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_LocateBetweenElevations); Datum ST_LocateBetweenElevations(PG_FUNCTION_ARGS) { - GSERIALIZED *geom_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom_in = PG_GETARG_GSERIALIZED_P(0); double from = PG_GETARG_FLOAT8(1); double to = PG_GETARG_FLOAT8(2); LWCOLLECTION *geom_out = NULL; @@ -170,8 +170,8 @@ Datum ST_InterpolatePoint(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_InterpolatePoint); Datum ST_InterpolatePoint(PG_FUNCTION_ARGS) { - GSERIALIZED *gser_line = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *gser_point = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *gser_line = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *gser_point = PG_GETARG_GSERIALIZED_P(1); LWGEOM *lwline; LWPOINT *lwpoint; @@ -207,8 +207,8 @@ Datum LWGEOM_line_locate_point(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(LWGEOM_line_locate_point); Datum LWGEOM_line_locate_point(PG_FUNCTION_ARGS) { - GSERIALIZED *geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); LWLINE *lwline; LWPOINT *lwpoint; POINTARRAY *pa; @@ -693,7 +693,7 @@ Datum LWGEOM_locate_between_m(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(LWGEOM_locate_between_m); Datum LWGEOM_locate_between_m(PG_FUNCTION_ARGS) { - GSERIALIZED *gin = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *gin = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *gout; double start_measure = PG_GETARG_FLOAT8(1); double end_measure = PG_GETARG_FLOAT8(2); diff --git a/postgis/lwgeom_geos.c b/postgis/lwgeom_geos.c index b39681adf..2b6837b00 100644 --- a/postgis/lwgeom_geos.c +++ b/postgis/lwgeom_geos.c @@ -849,8 +849,8 @@ Datum geomunion(PG_FUNCTION_ARGS) GSERIALIZED *result; LWGEOM *lwgeom1, *lwgeom2, *lwresult ; - geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom1 = PG_GETARG_GSERIALIZED_P(0); + geom2 = PG_GETARG_GSERIALIZED_P(1); lwgeom1 = lwgeom_from_gserialized(geom1) ; lwgeom2 = lwgeom_from_gserialized(geom2) ; @@ -882,8 +882,8 @@ Datum symdifference(PG_FUNCTION_ARGS) GSERIALIZED *result; LWGEOM *lwgeom1, *lwgeom2, *lwresult ; - geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom1 = PG_GETARG_GSERIALIZED_P(0); + geom2 = PG_GETARG_GSERIALIZED_P(1); lwgeom1 = lwgeom_from_gserialized(geom1) ; lwgeom2 = lwgeom_from_gserialized(geom2) ; @@ -912,7 +912,7 @@ Datum boundary(PG_FUNCTION_ARGS) int srid; - geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom1 = PG_GETARG_GSERIALIZED_P(0); /* Empty.Boundary() == Empty */ if ( gserialized_is_empty(geom1) ) @@ -1530,7 +1530,7 @@ Datum pointonsurface(PG_FUNCTION_ARGS) GEOSGeometry *g1, *g3; GSERIALIZED *result; - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); /* Empty.PointOnSurface == Point Empty */ if ( gserialized_is_empty(geom) ) @@ -1771,7 +1771,7 @@ Datum isvalid(PG_FUNCTION_ARGS) GBOX box1; #endif - geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom1 = PG_GETARG_GSERIALIZED_P(0); /* Empty.IsValid() == TRUE */ if ( gserialized_is_empty(geom1) ) @@ -1838,7 +1838,7 @@ Datum isvalidreason(PG_FUNCTION_ARGS) GBOX box; #endif - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); #if POSTGIS_GEOS_VERSION < 33 /* Short circuit and return if we have infinite coordinates */ @@ -1931,7 +1931,7 @@ Datum isvaliddetail(PG_FUNCTION_ARGS) */ attinmeta = TupleDescGetAttInMetadata(tupdesc); - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); if ( PG_NARGS() > 1 && ! PG_ARGISNULL(1) ) { flags = PG_GETARG_INT32(1); @@ -2005,8 +2005,8 @@ Datum overlaps(PG_FUNCTION_ARGS) bool result; GBOX box1, box2; - geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom1 = PG_GETARG_GSERIALIZED_P(0); + geom2 = PG_GETARG_GSERIALIZED_P(1); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); @@ -2461,8 +2461,8 @@ Datum coveredby(PG_FUNCTION_ARGS) RTREE_POLY_CACHE *poly_cache; char *patt = "**F**F***"; - geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom1 = PG_GETARG_GSERIALIZED_P(0); + geom2 = PG_GETARG_GSERIALIZED_P(1); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); @@ -2582,8 +2582,8 @@ Datum crosses(PG_FUNCTION_ARGS) int result; GBOX box1, box2; - geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom1 = PG_GETARG_GSERIALIZED_P(0); + geom2 = PG_GETARG_GSERIALIZED_P(1); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); @@ -2655,8 +2655,8 @@ Datum geos_intersects(PG_FUNCTION_ARGS) RTREE_POLY_CACHE *poly_cache; PrepGeomCache *prep_cache; - geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom1 = PG_GETARG_GSERIALIZED_P(0); + geom2 = PG_GETARG_GSERIALIZED_P(1); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); @@ -2812,8 +2812,8 @@ Datum touches(PG_FUNCTION_ARGS) bool result; GBOX box1, box2; - geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom1 = PG_GETARG_GSERIALIZED_P(0); + geom2 = PG_GETARG_GSERIALIZED_P(1); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); @@ -2880,8 +2880,8 @@ Datum disjoint(PG_FUNCTION_ARGS) bool result; GBOX box1, box2; - geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom1 = PG_GETARG_GSERIALIZED_P(0); + geom2 = PG_GETARG_GSERIALIZED_P(1); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); @@ -3021,8 +3021,8 @@ Datum relate_full(PG_FUNCTION_ARGS) /* TODO handle empty */ - geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom1 = PG_GETARG_GSERIALIZED_P(0); + geom2 = PG_GETARG_GSERIALIZED_P(1); if ( PG_NARGS() > 2 ) { #if POSTGIS_GEOS_VERSION >= 33 @@ -3098,8 +3098,8 @@ Datum ST_Equals(PG_FUNCTION_ARGS) bool result; GBOX box1, box2; - geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + geom1 = PG_GETARG_GSERIALIZED_P(0); + geom2 = PG_GETARG_GSERIALIZED_P(1); errorIfGeometryCollection(geom1,geom2); error_if_srid_mismatch(gserialized_get_srid(geom1), gserialized_get_srid(geom2)); @@ -3202,7 +3202,7 @@ Datum isring(PG_FUNCTION_ARGS) GEOSGeometry *g1; int result; - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); if (gserialized_get_type(geom) != LINETYPE) { @@ -3301,7 +3301,7 @@ Datum GEOSnoop(PG_FUNCTION_ARGS) initGEOS(lwnotice, lwgeom_geos_error); - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); geosgeom = (GEOSGeometry *)POSTGIS2GEOS(geom); @@ -3475,7 +3475,7 @@ Datum ST_BuildArea(PG_FUNCTION_ARGS) GSERIALIZED *geom; LWGEOM *lwgeom_in, *lwgeom_out; - geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); lwgeom_in = lwgeom_from_gserialized(geom); lwgeom_out = lwgeom_buildarea(lwgeom_in); @@ -3506,7 +3506,7 @@ Datum ST_DelaunayTriangles(PG_FUNCTION_ARGS) double tolerance = 0.0; int flags = 0; - geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); tolerance = PG_GETARG_FLOAT8(1); flags = PG_GETARG_INT32(2); @@ -3599,10 +3599,10 @@ Datum ST_Split(PG_FUNCTION_ARGS) GSERIALIZED *in, *blade_in, *out; LWGEOM *lwgeom_in, *lwblade_in, *lwgeom_out; - in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + in = PG_GETARG_GSERIALIZED_P(0); lwgeom_in = lwgeom_from_gserialized(in); - blade_in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + blade_in = PG_GETARG_GSERIALIZED_P(1); lwblade_in = lwgeom_from_gserialized(blade_in); error_if_srid_mismatch(lwgeom_in->srid, lwblade_in->srid); diff --git a/postgis/lwgeom_geos_clean.c b/postgis/lwgeom_geos_clean.c index ff7cebff9..602bcb8db 100644 --- a/postgis/lwgeom_geos_clean.c +++ b/postgis/lwgeom_geos_clean.c @@ -61,7 +61,7 @@ Datum ST_MakeValid(PG_FUNCTION_ARGS) GSERIALIZED *in, *out; LWGEOM *lwgeom_in, *lwgeom_out; - in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + in = PG_GETARG_GSERIALIZED_P(0); lwgeom_in = lwgeom_from_gserialized(in); switch ( lwgeom_in->type ) @@ -154,7 +154,7 @@ Datum ST_CleanGeometry(PG_FUNCTION_ARGS) GSERIALIZED *in, *out; LWGEOM *lwgeom_in, *lwgeom_out; - in = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + in = PG_GETARG_GSERIALIZED_P(0); lwgeom_in = lwgeom_from_gserialized(in); /* Short-circuit: empty geometry are the cleanest ! */ diff --git a/postgis/lwgeom_inout.c b/postgis/lwgeom_inout.c index 7a0045d9e..c9125cdf6 100644 --- a/postgis/lwgeom_inout.c +++ b/postgis/lwgeom_inout.c @@ -231,7 +231,7 @@ Datum LWGEOM_to_latlon(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_out); Datum LWGEOM_out(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom; char *hexwkb; size_t hexwkb_size; @@ -249,7 +249,7 @@ Datum LWGEOM_out(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_asHEXEWKB); Datum LWGEOM_asHEXEWKB(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom; char *hexwkb; size_t hexwkb_size; @@ -302,7 +302,7 @@ Datum LWGEOM_asHEXEWKB(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_to_text); Datum LWGEOM_to_text(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom; char *hexwkb; size_t hexwkb_size; @@ -385,7 +385,7 @@ Datum LWGEOMFromTWKB(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(WKBFromLWGEOM); Datum WKBFromLWGEOM(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom; uint8_t *wkb; size_t wkb_size; @@ -441,7 +441,7 @@ Datum TWKBFromLWGEOM(PG_FUNCTION_ARGS) /*check for null input since we cannot have the sql-function as strict. That is because we use null as default for optional ID*/ if ( PG_ARGISNULL(0) ) PG_RETURN_NULL(); - geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); /* If user specified precision, respect it */ if ( (PG_NARGS()>1) && (!PG_ARGISNULL(1)) ) @@ -499,7 +499,7 @@ Datum TWKBFromLWGEOM(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_addBBOX); Datum LWGEOM_addBBOX(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *result; LWGEOM *lwgeom; @@ -515,7 +515,7 @@ Datum LWGEOM_addBBOX(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_dropBBOX); Datum LWGEOM_dropBBOX(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); /* No box? we're done already! */ if ( ! gserialized_has_bbox(geom) ) diff --git a/postgis/lwgeom_ogc.c b/postgis/lwgeom_ogc.c index e753215a4..c934cf9cd 100644 --- a/postgis/lwgeom_ogc.c +++ b/postgis/lwgeom_ogc.c @@ -82,7 +82,7 @@ Datum LWGEOM_isclosed(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(LWGEOM_get_srid); Datum LWGEOM_get_srid(PG_FUNCTION_ARGS) { - GSERIALIZED *geom=(GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom=PG_GETARG_GSERIALIZED_P(0); int srid = gserialized_get_srid (geom); PG_FREE_IF_COPY(geom,0); PG_RETURN_INT32(srid); @@ -93,7 +93,7 @@ PG_FUNCTION_INFO_V1(LWGEOM_set_srid); Datum LWGEOM_set_srid(PG_FUNCTION_ARGS) { GSERIALIZED *result; - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); int srid = PG_GETARG_INT32(1); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); lwgeom_set_srid(lwgeom, srid); @@ -198,7 +198,7 @@ Datum geometry_geometrytype(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_numpoints_linestring); Datum LWGEOM_numpoints_linestring(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); int count = -1; @@ -218,7 +218,7 @@ Datum LWGEOM_numpoints_linestring(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_numgeometries_collection); Datum LWGEOM_numgeometries_collection(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom; int32 ret = 1; @@ -241,7 +241,7 @@ Datum LWGEOM_numgeometries_collection(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_geometryn_collection); Datum LWGEOM_geometryn_collection(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *result; int type = gserialized_get_type(geom); int32 idx; @@ -292,7 +292,7 @@ Datum LWGEOM_geometryn_collection(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_dimension); Datum LWGEOM_dimension(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); int dimension = -1; @@ -318,7 +318,7 @@ Datum LWGEOM_dimension(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_exteriorring_polygon); Datum LWGEOM_exteriorring_polygon(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *result; POINTARRAY *extring; LWGEOM *lwgeom; @@ -402,7 +402,7 @@ Datum LWGEOM_exteriorring_polygon(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_numinteriorrings_polygon); Datum LWGEOM_numinteriorrings_polygon(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); LWPOLY *poly = NULL; LWCURVEPOLY *curvepoly = NULL; @@ -457,7 +457,7 @@ Datum LWGEOM_interiorringn_polygon(PG_FUNCTION_ARGS) PG_RETURN_NULL(); /* index out of range */ } - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); type = gserialized_get_type(geom); if ( (type != POLYGONTYPE) && (type != CURVEPOLYTYPE) ) @@ -531,7 +531,7 @@ Datum LWGEOM_interiorringn_polygon(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_pointn_linestring); Datum LWGEOM_pointn_linestring(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); int where = PG_GETARG_INT32(1); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); LWPOINT *lwpoint = NULL; @@ -568,7 +568,7 @@ Datum LWGEOM_x_point(PG_FUNCTION_ARGS) LWPOINT *point = NULL; POINT2D p; - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); if ( gserialized_get_type(geom) != POINTTYPE ) lwerror("Argument to X() must be a point"); @@ -597,7 +597,7 @@ Datum LWGEOM_y_point(PG_FUNCTION_ARGS) LWGEOM *lwgeom; POINT2D p; - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); if ( gserialized_get_type(geom) != POINTTYPE ) lwerror("Argument to Y() must be a point"); @@ -628,7 +628,7 @@ Datum LWGEOM_z_point(PG_FUNCTION_ARGS) LWGEOM *lwgeom; POINT3DZ p; - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); if ( gserialized_get_type(geom) != POINTTYPE ) lwerror("Argument to Z() must be a point"); @@ -661,7 +661,7 @@ Datum LWGEOM_m_point(PG_FUNCTION_ARGS) LWGEOM *lwgeom; POINT3DM p; - geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); if ( gserialized_get_type(geom) != POINTTYPE ) lwerror("Argument to M() must be a point"); @@ -690,7 +690,7 @@ Datum LWGEOM_m_point(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_startpoint_linestring); Datum LWGEOM_startpoint_linestring(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); LWPOINT *lwpoint = NULL; int type = lwgeom->type; @@ -716,7 +716,7 @@ Datum LWGEOM_startpoint_linestring(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_endpoint_linestring); Datum LWGEOM_endpoint_linestring(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); LWPOINT *lwpoint = NULL; int type = lwgeom->type; @@ -830,7 +830,7 @@ Datum LWGEOM_asText(PG_FUNCTION_ARGS) POSTGIS_DEBUG(2, "Called."); - geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); lwgeom = lwgeom_from_gserialized(geom); /* Write to WKT and free the geometry */ @@ -860,7 +860,7 @@ Datum LWGEOM_asBinary(PG_FUNCTION_ARGS) uint8_t variant = WKB_ISO; /* Get a 2D version of the geometry */ - geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); lwgeom = lwgeom_from_gserialized(geom); /* If user specified endianness, respect it */ @@ -905,7 +905,7 @@ Datum LWGEOM_asBinary(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_isclosed); Datum LWGEOM_isclosed(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); int closed = lwgeom_is_closed(lwgeom); diff --git a/postgis/lwgeom_spheroid.c b/postgis/lwgeom_spheroid.c index 9bb42b05c..0a8303304 100644 --- a/postgis/lwgeom_spheroid.c +++ b/postgis/lwgeom_spheroid.c @@ -323,7 +323,7 @@ distance_ellipse_calculation(double lat1, double long1, PG_FUNCTION_INFO_V1(LWGEOM_length2d_ellipsoid); Datum LWGEOM_length2d_ellipsoid(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); SPHEROID *sphere = (SPHEROID *) PG_GETARG_POINTER(1); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); double dist = lwgeom_length_spheroid(lwgeom, sphere); @@ -346,7 +346,7 @@ Datum LWGEOM_length2d_ellipsoid(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_length_ellipsoid_linestring); Datum LWGEOM_length_ellipsoid_linestring(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); SPHEROID *sphere = (SPHEROID *) PG_GETARG_POINTER(1); double length = 0.0; @@ -469,8 +469,8 @@ double distance_sphere_method(double lat1, double long1,double lat2,double long2 PG_FUNCTION_INFO_V1(geometry_distance_spheroid); Datum geometry_distance_spheroid(PG_FUNCTION_ARGS) { - GSERIALIZED *geom1 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - GSERIALIZED *geom2 = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + GSERIALIZED *geom1 = PG_GETARG_GSERIALIZED_P(0); + GSERIALIZED *geom2 = PG_GETARG_GSERIALIZED_P(1); SPHEROID *sphere = (SPHEROID *)PG_GETARG_POINTER(2); int type1 = gserialized_get_type(geom1); int type2 = gserialized_get_type(geom2); diff --git a/postgis/lwgeom_sqlmm.c b/postgis/lwgeom_sqlmm.c index 62b882d47..8fb5257f2 100644 --- a/postgis/lwgeom_sqlmm.c +++ b/postgis/lwgeom_sqlmm.c @@ -37,7 +37,7 @@ Datum LWGEOM_line_desegmentize(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(LWGEOM_has_arc); Datum LWGEOM_has_arc(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); uint32 result = lwgeom_has_arc(lwgeom); lwgeom_free(lwgeom); @@ -53,7 +53,7 @@ Datum LWGEOM_has_arc(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_curve_segmentize); Datum LWGEOM_curve_segmentize(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); int32 perQuad = PG_GETARG_INT32(1); GSERIALIZED *ret; LWGEOM *igeom = NULL, *ogeom = NULL; @@ -84,7 +84,7 @@ Datum LWGEOM_curve_segmentize(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_line_desegmentize); Datum LWGEOM_line_desegmentize(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); GSERIALIZED *ret; LWGEOM *igeom = NULL, *ogeom = NULL;