From: Paul Ramsey Date: Wed, 4 Mar 2015 21:05:19 +0000 (+0000) Subject: Catch remaining detoasting calls and replace with MACRO X-Git-Tag: 2.2.0rc1~622 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2535d7e1688a85de0120d152f97e75cf2fe830f3;p=postgis Catch remaining detoasting calls and replace with MACRO git-svn-id: http://svn.osgeo.org/postgis/trunk@13307 b70326c6-7e19-0410-871a-916f4a2858ee --- diff --git a/libpgcommon/lwgeom_pg.h b/libpgcommon/lwgeom_pg.h index b14e674b7..88f2c4c86 100644 --- a/libpgcommon/lwgeom_pg.h +++ b/libpgcommon/lwgeom_pg.h @@ -25,7 +25,10 @@ /* Install PosgreSQL handlers for liblwgeom use */ void pg_install_lwgeom_handlers(void); +/* Argument handling macros */ #define PG_GETARG_GSERIALIZED_P(varno) ((GSERIALIZED *)PG_DETOAST_DATUM(PG_GETARG_DATUM(varno))) +#define PG_GETARG_GSERIALIZED_P_COPY(varno) ((GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(varno))) +#define PG_GETARG_GSERIALIZED_P_SLICE(varno, start, size) ((GSERIALIZED *)PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(varno), start, size)) /* Debugging macros */ #if POSTGIS_DEBUG_LEVEL > 0 diff --git a/postgis/geography_inout.c b/postgis/geography_inout.c index 523e8afe1..b5700fbcb 100644 --- a/postgis/geography_inout.c +++ b/postgis/geography_inout.c @@ -567,7 +567,7 @@ Datum geography_from_binary(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(geography_from_geometry); Datum geography_from_geometry(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED*)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P_COPY(0); LWGEOM *lwgeom = NULL; GSERIALIZED *g_ser = NULL; diff --git a/postgis/geography_measurement.c b/postgis/geography_measurement.c index fd0214f57..b848ead2a 100644 --- a/postgis/geography_measurement.c +++ b/postgis/geography_measurement.c @@ -365,7 +365,7 @@ Datum geography_expand(PG_FUNCTION_ARGS) double distance; /* Get a wholly-owned pointer to the geography */ - g = (GSERIALIZED*)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + g = PG_GETARG_GSERIALIZED_P_COPY(0); /* Read our distance value and normalize to unit-sphere. */ distance = PG_GETARG_FLOAT8(1) / WGS84_RADIUS; diff --git a/postgis/lwgeom_btree.c b/postgis/lwgeom_btree.c index 4b161b48c..3553ea5ea 100644 --- a/postgis/lwgeom_btree.c +++ b/postgis/lwgeom_btree.c @@ -44,8 +44,8 @@ Datum lwgeom_cmp(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(lwgeom_lt); Datum lwgeom_lt(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); GBOX box1; GBOX box2; @@ -100,8 +100,8 @@ Datum lwgeom_lt(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(lwgeom_le); Datum lwgeom_le(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); GBOX box1; GBOX box2; @@ -164,8 +164,8 @@ Datum lwgeom_le(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(lwgeom_eq); Datum lwgeom_eq(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); GBOX box1; GBOX box2; bool empty1, empty2; @@ -210,8 +210,8 @@ Datum lwgeom_eq(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(lwgeom_ge); Datum lwgeom_ge(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); GBOX box1; GBOX box2; @@ -274,8 +274,8 @@ Datum lwgeom_ge(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(lwgeom_gt); Datum lwgeom_gt(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); GBOX box1; GBOX box2; @@ -334,8 +334,8 @@ Datum lwgeom_gt(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(lwgeom_cmp); Datum lwgeom_cmp(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); GBOX box1; GBOX box2; diff --git a/postgis/lwgeom_dump.c b/postgis/lwgeom_dump.c index 26d5aecf6..d322ecb57 100644 --- a/postgis/lwgeom_dump.c +++ b/postgis/lwgeom_dump.c @@ -79,7 +79,7 @@ Datum LWGEOM_dump(PG_FUNCTION_ARGS) oldcontext = MemoryContextSwitchTo(newcontext); - pglwgeom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + pglwgeom = PG_GETARG_GSERIALIZED_P_COPY(0); lwgeom = lwgeom_from_gserialized(pglwgeom); /* Create function state */ @@ -222,7 +222,7 @@ Datum LWGEOM_dump_rings(PG_FUNCTION_ARGS) oldcontext = MemoryContextSwitchTo(newcontext); - pglwgeom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + pglwgeom = PG_GETARG_GSERIALIZED_P_COPY(0); if ( gserialized_get_type(pglwgeom) != POLYGONTYPE ) { lwerror("Input is not a polygon"); diff --git a/postgis/lwgeom_dumppoints.c b/postgis/lwgeom_dumppoints.c index c26d514c8..7c2757834 100644 --- a/postgis/lwgeom_dumppoints.c +++ b/postgis/lwgeom_dumppoints.c @@ -8,6 +8,7 @@ #include "funcapi.h" #include "../postgis_config.h" +#include "lwgeom_pg.h" #if POSTGIS_PGSQL_VERSION > 92 #include "access/htup_details.h" #endif @@ -69,7 +70,7 @@ Datum LWGEOM_dumppoints(PG_FUNCTION_ARGS) { oldcontext = MemoryContextSwitchTo(newcontext); /* get a local copy of what we're doing a dump points on */ - pglwgeom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + pglwgeom = PG_GETARG_GSERIALIZED_P_COPY(0); lwgeom = lwgeom_from_gserialized(pglwgeom); /* return early if nothing to do */ diff --git a/postgis/lwgeom_functions_basic.c b/postgis/lwgeom_functions_basic.c index f0380d477..2c137c0d2 100644 --- a/postgis/lwgeom_functions_basic.c +++ b/postgis/lwgeom_functions_basic.c @@ -104,7 +104,7 @@ Datum ST_IsCollection(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(LWGEOM_mem_size); Datum LWGEOM_mem_size(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0); size_t size = VARSIZE(geom); PG_FREE_IF_COPY(geom,0); PG_RETURN_INT32(size); @@ -1070,7 +1070,7 @@ Datum LWGEOM_longitude_shift(PG_FUNCTION_ARGS) POSTGIS_DEBUG(2, "LWGEOM_longitude_shift called."); - geom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P_COPY(0); lwgeom = lwgeom_from_gserialized(geom); /* Drop bbox, will be recomputed */ @@ -1857,7 +1857,7 @@ Datum LWGEOM_envelope(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_isempty); Datum LWGEOM_isempty(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); bool empty = lwgeom_is_empty(lwgeom); @@ -1944,7 +1944,7 @@ Datum LWGEOM_reverse(PG_FUNCTION_ARGS) POSTGIS_DEBUG(2, "LWGEOM_reverse called"); - geom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P_COPY(0); lwgeom = lwgeom_from_gserialized(geom); lwgeom_reverse(lwgeom); @@ -1963,7 +1963,7 @@ Datum LWGEOM_force_clockwise_poly(PG_FUNCTION_ARGS) POSTGIS_DEBUG(2, "LWGEOM_force_clockwise_poly called"); - ingeom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + ingeom = PG_GETARG_GSERIALIZED_P_COPY(0); lwgeom = lwgeom_from_gserialized(ingeom); lwgeom_force_clockwise(lwgeom); @@ -2162,7 +2162,7 @@ Datum ST_IsCollection(PG_FUNCTION_ARGS) /* header + srid/flags + bbox? + type number */ size = VARHDRSZ + 8 + 32 + 4; - geom = (GSERIALIZED*)PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, size); + geom = PG_GETARG_GSERIALIZED_P_SLICE(0, 0, size); type = gserialized_get_type(geom); PG_RETURN_BOOL(lwtype_is_collection(type)); @@ -2339,7 +2339,7 @@ Datum LWGEOM_setpoint_linestring(PG_FUNCTION_ARGS) POSTGIS_DEBUG(2, "LWGEOM_setpoint_linestring called."); /* we copy input as we're going to modify it */ - pglwg1 = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + pglwg1 = PG_GETARG_GSERIALIZED_P_COPY(0); which = PG_GETARG_INT32(1); pglwg2 = PG_GETARG_GSERIALIZED_P(2); @@ -2551,7 +2551,7 @@ Datum optimistic_overlap(PG_FUNCTION_ARGS) PG_FUNCTION_INFO_V1(LWGEOM_affine); Datum LWGEOM_affine(PG_FUNCTION_ARGS) { - GSERIALIZED *geom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P_COPY(0); LWGEOM *lwgeom = lwgeom_from_gserialized(geom); GSERIALIZED *ret; AFFINE affine; @@ -2694,7 +2694,7 @@ Datum ST_RemoveRepeatedPoints(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_RemoveRepeatedPoints); Datum ST_RemoveRepeatedPoints(PG_FUNCTION_ARGS) { - GSERIALIZED *input = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + GSERIALIZED *input = PG_GETARG_GSERIALIZED_P_COPY(0); GSERIALIZED *output; LWGEOM *lwgeom_in = lwgeom_from_gserialized(input); LWGEOM *lwgeom_out; @@ -2714,7 +2714,7 @@ Datum ST_FlipCoordinates(PG_FUNCTION_ARGS); PG_FUNCTION_INFO_V1(ST_FlipCoordinates); Datum ST_FlipCoordinates(PG_FUNCTION_ARGS) { - GSERIALIZED *in = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + GSERIALIZED *in = PG_GETARG_GSERIALIZED_P_COPY(0); GSERIALIZED *out; LWGEOM *lwgeom = lwgeom_from_gserialized(in); @@ -2758,7 +2758,7 @@ Datum ST_SwapOrdinates(PG_FUNCTION_ARGS) o1 = ordname2ordval( ospec[0] ); o2 = ordname2ordval( ospec[1] ); - in = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + in = PG_GETARG_GSERIALIZED_P_COPY(0); /* Check presence of given ordinates */ if ( ( o1 == LWORD_M || o2 == LWORD_M ) && ! gserialized_has_m(in) ) diff --git a/postgis/lwgeom_geos.c b/postgis/lwgeom_geos.c index 2b6837b00..6b1545e87 100644 --- a/postgis/lwgeom_geos.c +++ b/postgis/lwgeom_geos.c @@ -1348,7 +1348,7 @@ Datum ST_OffsetCurve(PG_FUNCTION_ARGS) /* Read SQL arguments */ nargs = PG_NARGS(); - gser_input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + gser_input = PG_GETARG_GSERIALIZED_P(0); size = PG_GETARG_FLOAT8(1); /* Check for a useable type */ @@ -1593,7 +1593,7 @@ Datum centroid(PG_FUNCTION_ARGS) GSERIALIZED *geom, *result; GEOSGeometry *geosgeom, *geosresult; - geom = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P(0); /* Empty.Centroid() == Point Empty */ if ( gserialized_is_empty(geom) ) diff --git a/postgis/lwgeom_inout.c b/postgis/lwgeom_inout.c index c9125cdf6..799e6e9a9 100644 --- a/postgis/lwgeom_inout.c +++ b/postgis/lwgeom_inout.c @@ -162,7 +162,7 @@ PG_FUNCTION_INFO_V1(LWGEOM_to_latlon); Datum LWGEOM_to_latlon(PG_FUNCTION_ARGS) { /* Get the parameters */ - GSERIALIZED *pg_lwgeom = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + GSERIALIZED *pg_lwgeom = PG_GETARG_GSERIALIZED_P(0); text *format_text = PG_GETARG_TEXT_P(1); LWGEOM *lwgeom; diff --git a/postgis/lwgeom_ogc.c b/postgis/lwgeom_ogc.c index c934cf9cd..4763e3662 100644 --- a/postgis/lwgeom_ogc.c +++ b/postgis/lwgeom_ogc.c @@ -113,7 +113,7 @@ Datum LWGEOM_getTYPE(PG_FUNCTION_ARGS) uint8_t type; static int maxtyplen = 20; - gser = (GSERIALIZED*)PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, gserialized_max_header_size()); + gser = PG_GETARG_GSERIALIZED_P_SLICE(0, 0, gserialized_max_header_size()); text_ob = palloc0(VARHDRSZ + maxtyplen); result = VARDATA(text_ob); @@ -173,7 +173,7 @@ Datum geometry_geometrytype(PG_FUNCTION_ARGS) char type_str[type_str_len]; /* Read just the header from the toasted tuple */ - gser = (GSERIALIZED*)PG_DETOAST_DATUM_SLICE(PG_GETARG_DATUM(0), 0, gserialized_max_header_size()); + gser = PG_GETARG_GSERIALIZED_P_SLICE(0, 0, gserialized_max_header_size()); /* Make it empty string to start */ type_str[0] = 0; diff --git a/postgis/lwgeom_sfcgal.c b/postgis/lwgeom_sfcgal.c index d97dc2f43..8fcee8030 100644 --- a/postgis/lwgeom_sfcgal.c +++ b/postgis/lwgeom_sfcgal.c @@ -144,7 +144,7 @@ Datum sfcgal_area(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + input = PG_GETARG_GSERIALIZED_P(0); geom = POSTGIS2SFCGALGeometry(input); result = sfcgal_geometry_area(geom); @@ -165,7 +165,7 @@ Datum sfcgal_area3D(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + input = PG_GETARG_GSERIALIZED_P(0); geom = POSTGIS2SFCGALGeometry(input); result = sfcgal_geometry_area_3d(geom); @@ -186,7 +186,7 @@ Datum sfcgal_is_planar(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + input = PG_GETARG_GSERIALIZED_P(0); geom = POSTGIS2SFCGALGeometry(input); result = sfcgal_geometry_is_planar(geom); @@ -207,7 +207,7 @@ Datum sfcgal_orientation(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + input = PG_GETARG_GSERIALIZED_P(0); geom = POSTGIS2SFCGALGeometry(input); result = sfcgal_geometry_orientation(geom); @@ -228,8 +228,8 @@ Datum sfcgal_intersects(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input0 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - input1 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + input0 = PG_GETARG_GSERIALIZED_P(0); + input1 = PG_GETARG_GSERIALIZED_P(1); geom0 = POSTGIS2SFCGALGeometry(input0); PG_FREE_IF_COPY(input0, 0); geom1 = POSTGIS2SFCGALGeometry(input1); @@ -252,8 +252,8 @@ Datum sfcgal_intersects3D(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input0 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - input1 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + input0 = PG_GETARG_GSERIALIZED_P(0); + input1 = PG_GETARG_GSERIALIZED_P(1); geom0 = POSTGIS2SFCGALGeometry(input0); PG_FREE_IF_COPY(input0, 0); geom1 = POSTGIS2SFCGALGeometry(input1); @@ -276,8 +276,8 @@ Datum sfcgal_distance(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input0 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - input1 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + input0 = PG_GETARG_GSERIALIZED_P(0); + input1 = PG_GETARG_GSERIALIZED_P(1); geom0 = POSTGIS2SFCGALGeometry(input0); PG_FREE_IF_COPY(input0, 0); geom1 = POSTGIS2SFCGALGeometry(input1); @@ -300,8 +300,8 @@ Datum sfcgal_distance3D(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input0 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); - input1 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + input0 = PG_GETARG_GSERIALIZED_P(0); + input1 = PG_GETARG_GSERIALIZED_P(1); geom0 = POSTGIS2SFCGALGeometry(input0); PG_FREE_IF_COPY(input0, 0); geom1 = POSTGIS2SFCGALGeometry(input1); @@ -325,7 +325,7 @@ Datum sfcgal_tesselate(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + input = PG_GETARG_GSERIALIZED_P(0); srid = gserialized_get_srid(input); geom = POSTGIS2SFCGALGeometry(input); PG_FREE_IF_COPY(input, 0); @@ -350,7 +350,7 @@ Datum sfcgal_triangulate(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + input = PG_GETARG_GSERIALIZED_P(0); srid = gserialized_get_srid(input); geom = POSTGIS2SFCGALGeometry(input); PG_FREE_IF_COPY(input, 0); @@ -375,7 +375,7 @@ Datum sfcgal_force_lhr(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + input = PG_GETARG_GSERIALIZED_P(0); srid = gserialized_get_srid(input); geom = POSTGIS2SFCGALGeometry(input); PG_FREE_IF_COPY(input, 0); @@ -400,7 +400,7 @@ Datum sfcgal_straight_skeleton(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + input = PG_GETARG_GSERIALIZED_P(0); srid = gserialized_get_srid(input); geom = POSTGIS2SFCGALGeometry(input); PG_FREE_IF_COPY(input, 0); @@ -425,9 +425,9 @@ Datum sfcgal_intersection(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input0 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + input0 = PG_GETARG_GSERIALIZED_P(0); srid = gserialized_get_srid(input0); - input1 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + input1 = PG_GETARG_GSERIALIZED_P(1); geom0 = POSTGIS2SFCGALGeometry(input0); PG_FREE_IF_COPY(input0, 0); geom1 = POSTGIS2SFCGALGeometry(input1); @@ -454,9 +454,9 @@ Datum sfcgal_intersection3D(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input0 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + input0 = PG_GETARG_GSERIALIZED_P(0); srid = gserialized_get_srid(input0); - input1 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + input1 = PG_GETARG_GSERIALIZED_P(1); geom0 = POSTGIS2SFCGALGeometry(input0); PG_FREE_IF_COPY(input0, 0); geom1 = POSTGIS2SFCGALGeometry(input1); @@ -483,9 +483,9 @@ Datum sfcgal_minkowski_sum(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input0 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + input0 = PG_GETARG_GSERIALIZED_P(0); srid = gserialized_get_srid(input0); - input1 = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(1)); + input1 = PG_GETARG_GSERIALIZED_P(1); geom0 = POSTGIS2SFCGALGeometry(input0); PG_FREE_IF_COPY(input0, 0); geom1 = POSTGIS2SFCGALGeometry(input1); @@ -513,7 +513,7 @@ Datum sfcgal_extrude(PG_FUNCTION_ARGS) sfcgal_postgis_init(); - input = (GSERIALIZED*) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + input = PG_GETARG_GSERIALIZED_P(0); srid = gserialized_get_srid(input); geom = POSTGIS2SFCGALGeometry(input); diff --git a/postgis/lwgeom_transform.c b/postgis/lwgeom_transform.c index cfedca5e2..f4711ed8e 100644 --- a/postgis/lwgeom_transform.c +++ b/postgis/lwgeom_transform.c @@ -46,7 +46,7 @@ Datum transform(PG_FUNCTION_ARGS) PG_RETURN_NULL(); } - geom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P_COPY(0); input_srid = gserialized_get_srid(geom); if ( input_srid == SRID_UNKNOWN ) { @@ -118,7 +118,7 @@ Datum transform_geom(PG_FUNCTION_ARGS) PG_RETURN_NULL(); } - geom = (GSERIALIZED *)PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(0)); + geom = PG_GETARG_GSERIALIZED_P_COPY(0); if (gserialized_get_srid(geom) == SRID_UNKNOWN) { pfree(geom); diff --git a/raster/rt_pg/rtpg_geometry.c b/raster/rt_pg/rtpg_geometry.c index bbbabefae..d305d97d3 100644 --- a/raster/rt_pg/rtpg_geometry.c +++ b/raster/rt_pg/rtpg_geometry.c @@ -794,7 +794,7 @@ Datum RASTER_asRaster(PG_FUNCTION_ARGS) if (PG_ARGISNULL(0)) PG_RETURN_NULL(); - gser = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(0)); + gser = PG_GETARG_GSERIALIZED_P(0); geom = lwgeom_from_gserialized(gser); /* Get a 2D version of the geometry if necessary */ diff --git a/raster/rt_pg/rtpg_mapalgebra.c b/raster/rt_pg/rtpg_mapalgebra.c index 54a9cf62d..372cd73fe 100644 --- a/raster/rt_pg/rtpg_mapalgebra.c +++ b/raster/rt_pg/rtpg_mapalgebra.c @@ -3049,7 +3049,7 @@ Datum RASTER_clip(PG_FUNCTION_ARGS) srid = clamp_srid(rt_raster_get_srid(arg->raster)); /* geometry (2) */ - gser = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(2)); + gser = PG_GETARG_GSERIALIZED_P(2); geom = lwgeom_from_gserialized(gser); /* Get a 2D version of the geometry if necessary */ diff --git a/raster/rt_pg/rtpg_pixel.c b/raster/rt_pg/rtpg_pixel.c index b9f3f0265..ba0967c29 100644 --- a/raster/rt_pg/rtpg_pixel.c +++ b/raster/rt_pg/rtpg_pixel.c @@ -36,6 +36,8 @@ #include "catalog/pg_type.h" /* for INT2OID, INT4OID, FLOAT4OID, FLOAT8OID and TEXTOID */ #include "../../postgis_config.h" +#include "lwgeom_pg.h" + #if POSTGIS_PGSQL_VERSION > 92 #include "access/htup_details.h" /* for heap_form_tuple() */ @@ -1871,7 +1873,7 @@ Datum RASTER_nearestValue(PG_FUNCTION_ARGS) } /* point */ - geom = (GSERIALIZED *) PG_DETOAST_DATUM(PG_GETARG_DATUM(2)); + geom = PG_GETARG_GSERIALIZED_P(2); if (gserialized_get_type(geom) != POINTTYPE) { elog(NOTICE, "Geometry provided must be a point"); rt_raster_destroy(raster);