PG_GETARG_GISTENTRY?

Started by Andres Freundalmost 9 years ago14 messages
#1Andres Freund
andres@anarazel.de

Hi,

we have a good number of '(GISTENTRY *) PG_GETARG_POINTER(n)' in our
code - looks a bit better & shorter to have PG_GETARG_GISTENTRY(n).

Arugments against?

Greetings,

Andres Freund

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andres Freund (#1)
Re: PG_GETARG_GISTENTRY?

Andres Freund <andres@anarazel.de> writes:

we have a good number of '(GISTENTRY *) PG_GETARG_POINTER(n)' in our
code - looks a bit better & shorter to have PG_GETARG_GISTENTRY(n).

Should be PG_GETARG_GISTENTRY_P to match existing conventions,
otherwise +1

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#3Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#2)
Re: PG_GETARG_GISTENTRY?

On Wed, Mar 29, 2017 at 11:54 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Andres Freund <andres@anarazel.de> writes:

we have a good number of '(GISTENTRY *) PG_GETARG_POINTER(n)' in our
code - looks a bit better & shorter to have PG_GETARG_GISTENTRY(n).

Should be PG_GETARG_GISTENTRY_P to match existing conventions,
otherwise +1

I have never quite understood why some of those macros have _P or _PP
on the end and others don't.

--
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#3)
Re: PG_GETARG_GISTENTRY?

Robert Haas <robertmhaas@gmail.com> writes:

On Wed, Mar 29, 2017 at 11:54 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Andres Freund <andres@anarazel.de> writes:

we have a good number of '(GISTENTRY *) PG_GETARG_POINTER(n)' in our
code - looks a bit better & shorter to have PG_GETARG_GISTENTRY(n).

Should be PG_GETARG_GISTENTRY_P to match existing conventions,
otherwise +1

I have never quite understood why some of those macros have _P or _PP
on the end and others don't.

_P means "pointer to". _PP was introduced later to mean "pointer to
packed (ie, possibly short-header) datum". Macros that mean to fetch
pointers to pass-by-ref data, but aren't using either of those naming
conventions, are violating project conventions, not least because you
don't know what they're supposed to do with short-header varlena input.
If I had a bit more spare time I'd run around and change any such macros.

In short, if you are supposed to write

FOO *val = PG_GETARG_FOO(n);

then the macro designer blew it, because the name implies that it
returns FOO, not pointer to FOO. This should be

FOO *val = PG_GETARG_FOO_P(n);

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#5Mark Dilger
hornschnorter@gmail.com
In reply to: Tom Lane (#4)
1 attachment(s)
Re: PG_GETARG_GISTENTRY?

On Apr 5, 2017, at 9:23 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Robert Haas <robertmhaas@gmail.com> writes:

On Wed, Mar 29, 2017 at 11:54 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Andres Freund <andres@anarazel.de> writes:

we have a good number of '(GISTENTRY *) PG_GETARG_POINTER(n)' in our
code - looks a bit better & shorter to have PG_GETARG_GISTENTRY(n).

Should be PG_GETARG_GISTENTRY_P to match existing conventions,
otherwise +1

I have never quite understood why some of those macros have _P or _PP
on the end and others don't.

_P means "pointer to". _PP was introduced later to mean "pointer to
packed (ie, possibly short-header) datum". Macros that mean to fetch
pointers to pass-by-ref data, but aren't using either of those naming
conventions, are violating project conventions, not least because you
don't know what they're supposed to do with short-header varlena input.
If I had a bit more spare time I'd run around and change any such macros.

In short, if you are supposed to write

FOO *val = PG_GETARG_FOO(n);

then the macro designer blew it, because the name implies that it
returns FOO, not pointer to FOO. This should be

FOO *val = PG_GETARG_FOO_P(n);

regards, tom lane

I have written a patch to fix these macro definitions across src/ and contrib/.
Find the patch, attached. All regression tests pass on my Mac laptop.

I don't find any inappropriate uses of _P where _PP would be called for. I do,
however, notice that some datatypes' functions are written to use PG_GETARG_*_P
where PG_GETARG_*_PP might be more efficient. Varbit's bitoctetlength function
could detoast only the header ala PG_DETOAST_DATUM_SLICE to return the
octet length, rather than detoasting the whole thing. But that seems a different
issue, and patches to change that might have been rejected in the past so far as I
know, so I did not attempt any such changes here.

Mark Dilger

Attachments:

PG_GETARG_foo_P.patch.1application/octet-stream; name=PG_GETARG_foo_P.patch.1Download
diff --git a/contrib/cube/cube.c b/contrib/cube/cube.c
index 2bb2ed0..fb76af0 100644
--- a/contrib/cube/cube.c
+++ b/contrib/cube/cube.c
@@ -126,7 +126,7 @@ cube_in(PG_FUNCTION_ARGS)
 
 	cube_scanner_finish();
 
-	PG_RETURN_NDBOX(result);
+	PG_RETURN_NDBOX_P(result);
 }
 
 
@@ -187,7 +187,7 @@ cube_a_f8_f8(PG_FUNCTION_ARGS)
 	else
 		SET_POINT_BIT(result);
 
-	PG_RETURN_NDBOX(result);
+	PG_RETURN_NDBOX_P(result);
 }
 
 /*
@@ -221,13 +221,13 @@ cube_a_f8(PG_FUNCTION_ARGS)
 	for (i = 0; i < dim; i++)
 		result->x[i] = dur[i];
 
-	PG_RETURN_NDBOX(result);
+	PG_RETURN_NDBOX_P(result);
 }
 
 Datum
 cube_subset(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *c = PG_GETARG_NDBOX(0);
+	NDBOX	   *c = PG_GETARG_NDBOX_P(0);
 	ArrayType  *idx = PG_GETARG_ARRAYTYPE_P(1);
 	NDBOX	   *result;
 	int			size,
@@ -263,13 +263,13 @@ cube_subset(PG_FUNCTION_ARGS)
 	}
 
 	PG_FREE_IF_COPY(c, 0);
-	PG_RETURN_NDBOX(result);
+	PG_RETURN_NDBOX_P(result);
 }
 
 Datum
 cube_out(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *cube = PG_GETARG_NDBOX(0);
+	NDBOX	   *cube = PG_GETARG_NDBOX_P(0);
 	StringInfoData buf;
 	int			dim = DIM(cube);
 	int			i;
@@ -316,7 +316,7 @@ Datum
 g_cube_consistent(PG_FUNCTION_ARGS)
 {
 	GISTENTRY  *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
-	NDBOX	   *query = PG_GETARG_NDBOX(1);
+	NDBOX	   *query = PG_GETARG_NDBOX_P(1);
 	StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
 
 	/* Oid		subtype = PG_GETARG_OID(3); */
@@ -331,10 +331,10 @@ g_cube_consistent(PG_FUNCTION_ARGS)
 	 * g_cube_leaf_consistent
 	 */
 	if (GIST_LEAF(entry))
-		res = g_cube_leaf_consistent(DatumGetNDBOX(entry->key),
+		res = g_cube_leaf_consistent(DatumGetNDBOXP(entry->key),
 									 query, strategy);
 	else
-		res = g_cube_internal_consistent(DatumGetNDBOX(entry->key),
+		res = g_cube_internal_consistent(DatumGetNDBOXP(entry->key),
 										 query, strategy);
 
 	PG_FREE_IF_COPY(query, 1);
@@ -355,7 +355,7 @@ g_cube_union(PG_FUNCTION_ARGS)
 	NDBOX	   *tmp;
 	int			i;
 
-	tmp = DatumGetNDBOX(entryvec->vector[0].key);
+	tmp = DatumGetNDBOXP(entryvec->vector[0].key);
 
 	/*
 	 * sizep = sizeof(NDBOX); -- NDBOX has variable size
@@ -365,7 +365,7 @@ g_cube_union(PG_FUNCTION_ARGS)
 	for (i = 1; i < entryvec->n; i++)
 	{
 		out = g_cube_binary_union(tmp,
-								  DatumGetNDBOX(entryvec->vector[i].key),
+								  DatumGetNDBOXP(entryvec->vector[i].key),
 								  sizep);
 		tmp = out;
 	}
@@ -388,9 +388,9 @@ Datum
 g_cube_decompress(PG_FUNCTION_ARGS)
 {
 	GISTENTRY  *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
-	NDBOX	   *key = DatumGetNDBOX(PG_DETOAST_DATUM(entry->key));
+	NDBOX	   *key = DatumGetNDBOXP(PG_DETOAST_DATUM(entry->key));
 
-	if (key != DatumGetNDBOX(entry->key))
+	if (key != DatumGetNDBOXP(entry->key))
 	{
 		GISTENTRY  *retval = (GISTENTRY *) palloc(sizeof(GISTENTRY));
 
@@ -417,10 +417,10 @@ g_cube_penalty(PG_FUNCTION_ARGS)
 	double		tmp1,
 				tmp2;
 
-	ud = cube_union_v0(DatumGetNDBOX(origentry->key),
-					   DatumGetNDBOX(newentry->key));
+	ud = cube_union_v0(DatumGetNDBOXP(origentry->key),
+					   DatumGetNDBOXP(newentry->key));
 	rt_cube_size(ud, &tmp1);
-	rt_cube_size(DatumGetNDBOX(origentry->key), &tmp2);
+	rt_cube_size(DatumGetNDBOXP(origentry->key), &tmp2);
 	*result = (float) (tmp1 - tmp2);
 
 	PG_RETURN_FLOAT8(*result);
@@ -473,16 +473,16 @@ g_cube_picksplit(PG_FUNCTION_ARGS)
 
 	for (i = FirstOffsetNumber; i < maxoff; i = OffsetNumberNext(i))
 	{
-		datum_alpha = DatumGetNDBOX(entryvec->vector[i].key);
+		datum_alpha = DatumGetNDBOXP(entryvec->vector[i].key);
 		for (j = OffsetNumberNext(i); j <= maxoff; j = OffsetNumberNext(j))
 		{
-			datum_beta = DatumGetNDBOX(entryvec->vector[j].key);
+			datum_beta = DatumGetNDBOXP(entryvec->vector[j].key);
 
 			/* compute the wasted space by unioning these guys */
 			/* size_waste = size_union - size_inter; */
 			union_d = cube_union_v0(datum_alpha, datum_beta);
 			rt_cube_size(union_d, &size_union);
-			inter_d = DatumGetNDBOX(DirectFunctionCall2(cube_inter,
+			inter_d = DatumGetNDBOXP(DirectFunctionCall2(cube_inter,
 						  entryvec->vector[i].key, entryvec->vector[j].key));
 			rt_cube_size(inter_d, &size_inter);
 			size_waste = size_union - size_inter;
@@ -506,10 +506,10 @@ g_cube_picksplit(PG_FUNCTION_ARGS)
 	right = v->spl_right;
 	v->spl_nright = 0;
 
-	datum_alpha = DatumGetNDBOX(entryvec->vector[seed_1].key);
+	datum_alpha = DatumGetNDBOXP(entryvec->vector[seed_1].key);
 	datum_l = cube_union_v0(datum_alpha, datum_alpha);
 	rt_cube_size(datum_l, &size_l);
-	datum_beta = DatumGetNDBOX(entryvec->vector[seed_2].key);
+	datum_beta = DatumGetNDBOXP(entryvec->vector[seed_2].key);
 	datum_r = cube_union_v0(datum_beta, datum_beta);
 	rt_cube_size(datum_r, &size_r);
 
@@ -548,7 +548,7 @@ g_cube_picksplit(PG_FUNCTION_ARGS)
 		}
 
 		/* okay, which page needs least enlargement? */
-		datum_alpha = DatumGetNDBOX(entryvec->vector[i].key);
+		datum_alpha = DatumGetNDBOXP(entryvec->vector[i].key);
 		union_dl = cube_union_v0(datum_l, datum_alpha);
 		union_dr = cube_union_v0(datum_r, datum_alpha);
 		rt_cube_size(union_dl, &size_alpha);
@@ -584,8 +584,8 @@ g_cube_picksplit(PG_FUNCTION_ARGS)
 Datum
 g_cube_same(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *b1 = PG_GETARG_NDBOX(0);
-	NDBOX	   *b2 = PG_GETARG_NDBOX(1);
+	NDBOX	   *b1 = PG_GETARG_NDBOX_P(0);
+	NDBOX	   *b2 = PG_GETARG_NDBOX_P(1);
 	bool	   *result = (bool *) PG_GETARG_POINTER(2);
 
 	if (cube_cmp_v0(b1, b2) == 0)
@@ -593,7 +593,7 @@ g_cube_same(PG_FUNCTION_ARGS)
 	else
 		*result = FALSE;
 
-	PG_RETURN_NDBOX(result);
+	PG_RETURN_NDBOX_P(result);
 }
 
 /*
@@ -735,23 +735,23 @@ cube_union_v0(NDBOX *a, NDBOX *b)
 Datum
 cube_union(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0);
-	NDBOX	   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0);
+	NDBOX	   *b = PG_GETARG_NDBOX_P(1);
 	NDBOX	   *res;
 
 	res = cube_union_v0(a, b);
 
 	PG_FREE_IF_COPY(a, 0);
 	PG_FREE_IF_COPY(b, 1);
-	PG_RETURN_NDBOX(res);
+	PG_RETURN_NDBOX_P(res);
 }
 
 /* cube_inter */
 Datum
 cube_inter(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0);
-	NDBOX	   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0);
+	NDBOX	   *b = PG_GETARG_NDBOX_P(1);
 	NDBOX	   *result;
 	bool		swapped = false;
 	int			i;
@@ -823,14 +823,14 @@ cube_inter(PG_FUNCTION_ARGS)
 	/*
 	 * Is it OK to return a non-null intersection for non-overlapping boxes?
 	 */
-	PG_RETURN_NDBOX(result);
+	PG_RETURN_NDBOX_P(result);
 }
 
 /* cube_size */
 Datum
 cube_size(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0);
 	double		result;
 
 	rt_cube_size(a, &result);
@@ -948,8 +948,8 @@ cube_cmp_v0(NDBOX *a, NDBOX *b)
 Datum
 cube_cmp(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0),
-			   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0),
+			   *b = PG_GETARG_NDBOX_P(1);
 	int32		res;
 
 	res = cube_cmp_v0(a, b);
@@ -963,8 +963,8 @@ cube_cmp(PG_FUNCTION_ARGS)
 Datum
 cube_eq(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0),
-			   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0),
+			   *b = PG_GETARG_NDBOX_P(1);
 	int32		res;
 
 	res = cube_cmp_v0(a, b);
@@ -978,8 +978,8 @@ cube_eq(PG_FUNCTION_ARGS)
 Datum
 cube_ne(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0),
-			   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0),
+			   *b = PG_GETARG_NDBOX_P(1);
 	int32		res;
 
 	res = cube_cmp_v0(a, b);
@@ -993,8 +993,8 @@ cube_ne(PG_FUNCTION_ARGS)
 Datum
 cube_lt(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0),
-			   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0),
+			   *b = PG_GETARG_NDBOX_P(1);
 	int32		res;
 
 	res = cube_cmp_v0(a, b);
@@ -1008,8 +1008,8 @@ cube_lt(PG_FUNCTION_ARGS)
 Datum
 cube_gt(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0),
-			   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0),
+			   *b = PG_GETARG_NDBOX_P(1);
 	int32		res;
 
 	res = cube_cmp_v0(a, b);
@@ -1023,8 +1023,8 @@ cube_gt(PG_FUNCTION_ARGS)
 Datum
 cube_le(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0),
-			   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0),
+			   *b = PG_GETARG_NDBOX_P(1);
 	int32		res;
 
 	res = cube_cmp_v0(a, b);
@@ -1038,8 +1038,8 @@ cube_le(PG_FUNCTION_ARGS)
 Datum
 cube_ge(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0),
-			   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0),
+			   *b = PG_GETARG_NDBOX_P(1);
 	int32		res;
 
 	res = cube_cmp_v0(a, b);
@@ -1093,8 +1093,8 @@ cube_contains_v0(NDBOX *a, NDBOX *b)
 Datum
 cube_contains(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0),
-			   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0),
+			   *b = PG_GETARG_NDBOX_P(1);
 	bool		res;
 
 	res = cube_contains_v0(a, b);
@@ -1109,8 +1109,8 @@ cube_contains(PG_FUNCTION_ARGS)
 Datum
 cube_contained(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0),
-			   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0),
+			   *b = PG_GETARG_NDBOX_P(1);
 	bool		res;
 
 	res = cube_contains_v0(b, a);
@@ -1164,8 +1164,8 @@ cube_overlap_v0(NDBOX *a, NDBOX *b)
 Datum
 cube_overlap(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0),
-			   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0),
+			   *b = PG_GETARG_NDBOX_P(1);
 	bool		res;
 
 	res = cube_overlap_v0(a, b);
@@ -1184,8 +1184,8 @@ cube_overlap(PG_FUNCTION_ARGS)
 Datum
 cube_distance(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0),
-			   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0),
+			   *b = PG_GETARG_NDBOX_P(1);
 	bool		swapped = false;
 	double		d,
 				distance;
@@ -1233,8 +1233,8 @@ cube_distance(PG_FUNCTION_ARGS)
 Datum
 distance_taxicab(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0),
-			   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0),
+			   *b = PG_GETARG_NDBOX_P(1);
 	bool		swapped = false;
 	double		distance;
 	int			i;
@@ -1277,8 +1277,8 @@ distance_taxicab(PG_FUNCTION_ARGS)
 Datum
 distance_chebyshev(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0),
-			   *b = PG_GETARG_NDBOX(1);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0),
+			   *b = PG_GETARG_NDBOX_P(1);
 	bool		swapped = false;
 	double		d,
 				distance;
@@ -1331,7 +1331,7 @@ g_cube_distance(PG_FUNCTION_ARGS)
 {
 	GISTENTRY  *entry = (GISTENTRY *) PG_GETARG_POINTER(0);
 	StrategyNumber strategy = (StrategyNumber) PG_GETARG_UINT16(2);
-	NDBOX	   *cube = DatumGetNDBOX(entry->key);
+	NDBOX	   *cube = DatumGetNDBOXP(entry->key);
 	double		retval;
 
 	if (strategy == CubeKNNDistanceCoord)
@@ -1348,7 +1348,7 @@ g_cube_distance(PG_FUNCTION_ARGS)
 	}
 	else
 	{
-		NDBOX	   *query = PG_GETARG_NDBOX(1);
+		NDBOX	   *query = PG_GETARG_NDBOX_P(1);
 
 		switch (strategy)
 		{
@@ -1392,7 +1392,7 @@ distance_1D(double a1, double a2, double b1, double b2)
 Datum
 cube_is_point(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *cube = PG_GETARG_NDBOX(0);
+	NDBOX	   *cube = PG_GETARG_NDBOX_P(0);
 	bool		result;
 
 	result = cube_is_point_internal(cube);
@@ -1427,7 +1427,7 @@ cube_is_point_internal(NDBOX *cube)
 Datum
 cube_dim(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *c = PG_GETARG_NDBOX(0);
+	NDBOX	   *c = PG_GETARG_NDBOX_P(0);
 	int			dim = DIM(c);
 
 	PG_FREE_IF_COPY(c, 0);
@@ -1438,7 +1438,7 @@ cube_dim(PG_FUNCTION_ARGS)
 Datum
 cube_ll_coord(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *c = PG_GETARG_NDBOX(0);
+	NDBOX	   *c = PG_GETARG_NDBOX_P(0);
 	int			n = PG_GETARG_INT32(1);
 	double		result;
 
@@ -1455,7 +1455,7 @@ cube_ll_coord(PG_FUNCTION_ARGS)
 Datum
 cube_ur_coord(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *c = PG_GETARG_NDBOX(0);
+	NDBOX	   *c = PG_GETARG_NDBOX_P(0);
 	int			n = PG_GETARG_INT32(1);
 	double		result;
 
@@ -1476,7 +1476,7 @@ cube_ur_coord(PG_FUNCTION_ARGS)
 Datum
 cube_coord(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *cube = PG_GETARG_NDBOX(0);
+	NDBOX	   *cube = PG_GETARG_NDBOX_P(0);
 	int			coord = PG_GETARG_INT32(1);
 
 	if (coord <= 0 || coord > 2 * DIM(cube))
@@ -1504,7 +1504,7 @@ cube_coord(PG_FUNCTION_ARGS)
 Datum
 cube_coord_llur(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *cube = PG_GETARG_NDBOX(0);
+	NDBOX	   *cube = PG_GETARG_NDBOX_P(0);
 	int			coord = PG_GETARG_INT32(1);
 
 	if (coord <= 0 || coord > 2 * DIM(cube))
@@ -1534,7 +1534,7 @@ cube_coord_llur(PG_FUNCTION_ARGS)
 Datum
 cube_enlarge(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *a = PG_GETARG_NDBOX(0);
+	NDBOX	   *a = PG_GETARG_NDBOX_P(0);
 	double		r = PG_GETARG_FLOAT8(1);
 	int32		n = PG_GETARG_INT32(2);
 	NDBOX	   *result;
@@ -1592,7 +1592,7 @@ cube_enlarge(PG_FUNCTION_ARGS)
 	}
 
 	PG_FREE_IF_COPY(a, 0);
-	PG_RETURN_NDBOX(result);
+	PG_RETURN_NDBOX_P(result);
 }
 
 /* Create a one dimensional box with identical upper and lower coordinates */
@@ -1610,7 +1610,7 @@ cube_f8(PG_FUNCTION_ARGS)
 	SET_POINT_BIT(result);
 	result->x[0] = x;
 
-	PG_RETURN_NDBOX(result);
+	PG_RETURN_NDBOX_P(result);
 }
 
 /* Create a one dimensional box */
@@ -1641,7 +1641,7 @@ cube_f8_f8(PG_FUNCTION_ARGS)
 		result->x[1] = x1;
 	}
 
-	PG_RETURN_NDBOX(result);
+	PG_RETURN_NDBOX_P(result);
 }
 
 /* Add a dimension to an existing cube with the same values for the new
@@ -1649,7 +1649,7 @@ cube_f8_f8(PG_FUNCTION_ARGS)
 Datum
 cube_c_f8(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *cube = PG_GETARG_NDBOX(0);
+	NDBOX	   *cube = PG_GETARG_NDBOX_P(0);
 	double		x = PG_GETARG_FLOAT8(1);
 	NDBOX	   *result;
 	int			size;
@@ -1682,14 +1682,14 @@ cube_c_f8(PG_FUNCTION_ARGS)
 	}
 
 	PG_FREE_IF_COPY(cube, 0);
-	PG_RETURN_NDBOX(result);
+	PG_RETURN_NDBOX_P(result);
 }
 
 /* Add a dimension to an existing cube */
 Datum
 cube_c_f8_f8(PG_FUNCTION_ARGS)
 {
-	NDBOX	   *cube = PG_GETARG_NDBOX(0);
+	NDBOX	   *cube = PG_GETARG_NDBOX_P(0);
 	double		x1 = PG_GETARG_FLOAT8(1);
 	double		x2 = PG_GETARG_FLOAT8(2);
 	NDBOX	   *result;
@@ -1723,5 +1723,4 @@ cube_c_f8_f8(PG_FUNCTION_ARGS)
 	}
 
 	PG_FREE_IF_COPY(cube, 0);
-	PG_RETURN_NDBOX(result);
-}
+	PG_RETURN_NDBOX_P(result); }
diff --git a/contrib/cube/cubedata.h b/contrib/cube/cubedata.h
index af02464..92d213b 100644
--- a/contrib/cube/cubedata.h
+++ b/contrib/cube/cubedata.h
@@ -49,9 +49,9 @@ typedef struct NDBOX
 #define CUBE_SIZE(_dim)		(offsetof(NDBOX, x) + sizeof(double)*(_dim)*2)
 
 /* fmgr interface macros */
-#define DatumGetNDBOX(x)	((NDBOX *) PG_DETOAST_DATUM(x))
-#define PG_GETARG_NDBOX(x)	DatumGetNDBOX(PG_GETARG_DATUM(x))
-#define PG_RETURN_NDBOX(x)	PG_RETURN_POINTER(x)
+#define DatumGetNDBOXP(x)	((NDBOX *) PG_DETOAST_DATUM(x))
+#define PG_GETARG_NDBOX_P(x)	DatumGetNDBOXP(PG_GETARG_DATUM(x))
+#define PG_RETURN_NDBOX_P(x)	PG_RETURN_POINTER(x)
 
 /* GiST operator strategy numbers */
 #define CubeKNNDistanceCoord			15		/* ~> */
diff --git a/contrib/hstore/hstore.h b/contrib/hstore/hstore.h
index 6bab08b..f10aa9b 100644
--- a/contrib/hstore/hstore.h
+++ b/contrib/hstore/hstore.h
@@ -151,7 +151,7 @@ extern HStore *hstoreUpgrade(Datum orig);
 
 #define DatumGetHStoreP(d) hstoreUpgrade(d)
 
-#define PG_GETARG_HS(x) DatumGetHStoreP(PG_GETARG_DATUM(x))
+#define PG_GETARG_HS_P(x) DatumGetHStoreP(PG_GETARG_DATUM(x))
 
 
 /*
diff --git a/contrib/hstore/hstore_gin.c b/contrib/hstore/hstore_gin.c
index d98fb38..207dc34 100644
--- a/contrib/hstore/hstore_gin.c
+++ b/contrib/hstore/hstore_gin.c
@@ -43,7 +43,7 @@ makeitem(char *str, int len, char flag)
 Datum
 gin_extract_hstore(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	int32	   *nentries = (int32 *) PG_GETARG_POINTER(1);
 	Datum	   *entries = NULL;
 	HEntry	   *hsent = ARRPTR(hs);
@@ -155,7 +155,7 @@ gin_consistent_hstore(PG_FUNCTION_ARGS)
 	bool	   *check = (bool *) PG_GETARG_POINTER(0);
 	StrategyNumber strategy = PG_GETARG_UINT16(1);
 
-	/* HStore	   *query = PG_GETARG_HS(2); */
+	/* HStore	   *query = PG_GETARG_HS_P(2); */
 	int32		nkeys = PG_GETARG_INT32(3);
 
 	/* Pointer	   *extra_data = (Pointer *) PG_GETARG_POINTER(4); */
diff --git a/contrib/hstore/hstore_gist.c b/contrib/hstore/hstore_gist.c
index f8f5934..5170f60 100644
--- a/contrib/hstore/hstore_gist.c
+++ b/contrib/hstore/hstore_gist.c
@@ -518,7 +518,7 @@ ghstore_consistent(PG_FUNCTION_ARGS)
 	if (strategy == HStoreContainsStrategyNumber ||
 		strategy == HStoreOldContainsStrategyNumber)
 	{
-		HStore	   *query = PG_GETARG_HS(1);
+		HStore	   *query = PG_GETARG_HS_P(1);
 		HEntry	   *qe = ARRPTR(query);
 		char	   *qv = STRPTR(query);
 		int			count = HS_COUNT(query);
diff --git a/contrib/hstore/hstore_io.c b/contrib/hstore/hstore_io.c
index 1cecf86..d19206d 100644
--- a/contrib/hstore/hstore_io.c
+++ b/contrib/hstore/hstore_io.c
@@ -961,7 +961,7 @@ hstore_populate_record(PG_FUNCTION_ARGS)
 		tupTypmod = HeapTupleHeaderGetTypMod(rec);
 	}
 
-	hs = PG_GETARG_HS(1);
+	hs = PG_GETARG_HS_P(1);
 	entries = ARRPTR(hs);
 	ptr = STRPTR(hs);
 
@@ -1125,7 +1125,7 @@ PG_FUNCTION_INFO_V1(hstore_out);
 Datum
 hstore_out(PG_FUNCTION_ARGS)
 {
-	HStore	   *in = PG_GETARG_HS(0);
+	HStore	   *in = PG_GETARG_HS_P(0);
 	int			buflen,
 				i;
 	int			count = HS_COUNT(in);
@@ -1196,7 +1196,7 @@ PG_FUNCTION_INFO_V1(hstore_send);
 Datum
 hstore_send(PG_FUNCTION_ARGS)
 {
-	HStore	   *in = PG_GETARG_HS(0);
+	HStore	   *in = PG_GETARG_HS_P(0);
 	int			i;
 	int			count = HS_COUNT(in);
 	char	   *base = STRPTR(in);
@@ -1242,7 +1242,7 @@ PG_FUNCTION_INFO_V1(hstore_to_json_loose);
 Datum
 hstore_to_json_loose(PG_FUNCTION_ARGS)
 {
-	HStore	   *in = PG_GETARG_HS(0);
+	HStore	   *in = PG_GETARG_HS_P(0);
 	int			i;
 	int			count = HS_COUNT(in);
 	char	   *base = STRPTR(in);
@@ -1297,7 +1297,7 @@ PG_FUNCTION_INFO_V1(hstore_to_json);
 Datum
 hstore_to_json(PG_FUNCTION_ARGS)
 {
-	HStore	   *in = PG_GETARG_HS(0);
+	HStore	   *in = PG_GETARG_HS_P(0);
 	int			i;
 	int			count = HS_COUNT(in);
 	char	   *base = STRPTR(in);
@@ -1342,7 +1342,7 @@ PG_FUNCTION_INFO_V1(hstore_to_jsonb);
 Datum
 hstore_to_jsonb(PG_FUNCTION_ARGS)
 {
-	HStore	   *in = PG_GETARG_HS(0);
+	HStore	   *in = PG_GETARG_HS_P(0);
 	int			i;
 	int			count = HS_COUNT(in);
 	char	   *base = STRPTR(in);
@@ -1385,7 +1385,7 @@ PG_FUNCTION_INFO_V1(hstore_to_jsonb_loose);
 Datum
 hstore_to_jsonb_loose(PG_FUNCTION_ARGS)
 {
-	HStore	   *in = PG_GETARG_HS(0);
+	HStore	   *in = PG_GETARG_HS_P(0);
 	int			i;
 	int			count = HS_COUNT(in);
 	char	   *base = STRPTR(in);
diff --git a/contrib/hstore/hstore_op.c b/contrib/hstore/hstore_op.c
index 1e2dc88..df64a04 100644
--- a/contrib/hstore/hstore_op.c
+++ b/contrib/hstore/hstore_op.c
@@ -130,7 +130,7 @@ PG_FUNCTION_INFO_V1(hstore_fetchval);
 Datum
 hstore_fetchval(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	text	   *key = PG_GETARG_TEXT_PP(1);
 	HEntry	   *entries = ARRPTR(hs);
 	text	   *out;
@@ -151,7 +151,7 @@ PG_FUNCTION_INFO_V1(hstore_exists);
 Datum
 hstore_exists(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	text	   *key = PG_GETARG_TEXT_PP(1);
 	int			idx = hstoreFindKey(hs, NULL,
 									VARDATA_ANY(key), VARSIZE_ANY_EXHDR(key));
@@ -164,7 +164,7 @@ PG_FUNCTION_INFO_V1(hstore_exists_any);
 Datum
 hstore_exists_any(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	ArrayType  *keys = PG_GETARG_ARRAYTYPE_P(1);
 	int			nkeys;
 	Pairs	   *key_pairs = hstoreArrayToPairs(keys, &nkeys);
@@ -198,7 +198,7 @@ PG_FUNCTION_INFO_V1(hstore_exists_all);
 Datum
 hstore_exists_all(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	ArrayType  *keys = PG_GETARG_ARRAYTYPE_P(1);
 	int			nkeys;
 	Pairs	   *key_pairs = hstoreArrayToPairs(keys, &nkeys);
@@ -232,7 +232,7 @@ PG_FUNCTION_INFO_V1(hstore_defined);
 Datum
 hstore_defined(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	text	   *key = PG_GETARG_TEXT_PP(1);
 	HEntry	   *entries = ARRPTR(hs);
 	int			idx = hstoreFindKey(hs, NULL,
@@ -247,7 +247,7 @@ PG_FUNCTION_INFO_V1(hstore_delete);
 Datum
 hstore_delete(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	text	   *key = PG_GETARG_TEXT_PP(1);
 	char	   *keyptr = VARDATA_ANY(key);
 	int			keylen = VARSIZE_ANY_EXHDR(key);
@@ -294,7 +294,7 @@ PG_FUNCTION_INFO_V1(hstore_delete_array);
 Datum
 hstore_delete_array(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	HStore	   *out = palloc(VARSIZE(hs));
 	int			hs_count = HS_COUNT(hs);
 	char	   *ps,
@@ -373,8 +373,8 @@ PG_FUNCTION_INFO_V1(hstore_delete_hstore);
 Datum
 hstore_delete_hstore(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
-	HStore	   *hs2 = PG_GETARG_HS(1);
+	HStore	   *hs = PG_GETARG_HS_P(0);
+	HStore	   *hs2 = PG_GETARG_HS_P(1);
 	HStore	   *out = palloc(VARSIZE(hs));
 	int			hs_count = HS_COUNT(hs);
 	int			hs2_count = HS_COUNT(hs2);
@@ -473,8 +473,8 @@ PG_FUNCTION_INFO_V1(hstore_concat);
 Datum
 hstore_concat(PG_FUNCTION_ARGS)
 {
-	HStore	   *s1 = PG_GETARG_HS(0);
-	HStore	   *s2 = PG_GETARG_HS(1);
+	HStore	   *s1 = PG_GETARG_HS_P(0);
+	HStore	   *s2 = PG_GETARG_HS_P(1);
 	HStore	   *out = palloc(VARSIZE(s1) + VARSIZE(s2));
 	char	   *ps1,
 			   *ps2,
@@ -571,7 +571,7 @@ PG_FUNCTION_INFO_V1(hstore_slice_to_array);
 Datum
 hstore_slice_to_array(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	HEntry	   *entries = ARRPTR(hs);
 	char	   *ptr = STRPTR(hs);
 	ArrayType  *key_array = PG_GETARG_ARRAYTYPE_P(1);
@@ -634,7 +634,7 @@ PG_FUNCTION_INFO_V1(hstore_slice_to_hstore);
 Datum
 hstore_slice_to_hstore(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	HEntry	   *entries = ARRPTR(hs);
 	char	   *ptr = STRPTR(hs);
 	ArrayType  *key_array = PG_GETARG_ARRAYTYPE_P(1);
@@ -696,7 +696,7 @@ PG_FUNCTION_INFO_V1(hstore_akeys);
 Datum
 hstore_akeys(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	Datum	   *d;
 	ArrayType  *a;
 	HEntry	   *entries = ARRPTR(hs);
@@ -731,7 +731,7 @@ PG_FUNCTION_INFO_V1(hstore_avals);
 Datum
 hstore_avals(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	Datum	   *d;
 	bool	   *nulls;
 	ArrayType  *a;
@@ -827,7 +827,7 @@ PG_FUNCTION_INFO_V1(hstore_to_array);
 Datum
 hstore_to_array(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	ArrayType  *out = hstore_to_array_internal(hs, 1);
 
 	PG_RETURN_POINTER(out);
@@ -837,7 +837,7 @@ PG_FUNCTION_INFO_V1(hstore_to_matrix);
 Datum
 hstore_to_matrix(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	ArrayType  *out = hstore_to_array_internal(hs, 2);
 
 	PG_RETURN_POINTER(out);
@@ -891,7 +891,7 @@ hstore_skeys(PG_FUNCTION_ARGS)
 
 	if (SRF_IS_FIRSTCALL())
 	{
-		hs = PG_GETARG_HS(0);
+		hs = PG_GETARG_HS_P(0);
 		funcctx = SRF_FIRSTCALL_INIT();
 		setup_firstcall(funcctx, hs, NULL);
 	}
@@ -925,7 +925,7 @@ hstore_svals(PG_FUNCTION_ARGS)
 
 	if (SRF_IS_FIRSTCALL())
 	{
-		hs = PG_GETARG_HS(0);
+		hs = PG_GETARG_HS_P(0);
 		funcctx = SRF_FIRSTCALL_INIT();
 		setup_firstcall(funcctx, hs, NULL);
 	}
@@ -967,8 +967,8 @@ PG_FUNCTION_INFO_V1(hstore_contains);
 Datum
 hstore_contains(PG_FUNCTION_ARGS)
 {
-	HStore	   *val = PG_GETARG_HS(0);
-	HStore	   *tmpl = PG_GETARG_HS(1);
+	HStore	   *val = PG_GETARG_HS_P(0);
+	HStore	   *tmpl = PG_GETARG_HS_P(1);
 	bool		res = true;
 	HEntry	   *te = ARRPTR(tmpl);
 	char	   *tstr = STRPTR(tmpl);
@@ -1032,7 +1032,7 @@ hstore_each(PG_FUNCTION_ARGS)
 
 	if (SRF_IS_FIRSTCALL())
 	{
-		hs = PG_GETARG_HS(0);
+		hs = PG_GETARG_HS_P(0);
 		funcctx = SRF_FIRSTCALL_INIT();
 		setup_firstcall(funcctx, hs, fcinfo);
 	}
@@ -1087,8 +1087,8 @@ PG_FUNCTION_INFO_V1(hstore_cmp);
 Datum
 hstore_cmp(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs1 = PG_GETARG_HS(0);
-	HStore	   *hs2 = PG_GETARG_HS(1);
+	HStore	   *hs1 = PG_GETARG_HS_P(0);
+	HStore	   *hs2 = PG_GETARG_HS_P(1);
 	int			hcount1 = HS_COUNT(hs1);
 	int			hcount2 = HS_COUNT(hs2);
 	int			res = 0;
@@ -1235,7 +1235,7 @@ PG_FUNCTION_INFO_V1(hstore_hash);
 Datum
 hstore_hash(PG_FUNCTION_ARGS)
 {
-	HStore	   *hs = PG_GETARG_HS(0);
+	HStore	   *hs = PG_GETARG_HS_P(0);
 	Datum		hval = hash_any((unsigned char *) VARDATA(hs),
 								VARSIZE(hs) - VARHDRSZ);
 
diff --git a/contrib/hstore_plperl/hstore_plperl.c b/contrib/hstore_plperl/hstore_plperl.c
index 480212f..48ffb53 100644
--- a/contrib/hstore_plperl/hstore_plperl.c
+++ b/contrib/hstore_plperl/hstore_plperl.c
@@ -67,7 +67,7 @@ PG_FUNCTION_INFO_V1(hstore_to_plperl);
 Datum
 hstore_to_plperl(PG_FUNCTION_ARGS)
 {
-	HStore	   *in = PG_GETARG_HS(0);
+	HStore	   *in = PG_GETARG_HS_P(0);
 	int			i;
 	int			count = HS_COUNT(in);
 	char	   *base = STRPTR(in);
diff --git a/contrib/hstore_plpython/hstore_plpython.c b/contrib/hstore_plpython/hstore_plpython.c
index b184324..edd82c1 100644
--- a/contrib/hstore_plpython/hstore_plpython.c
+++ b/contrib/hstore_plpython/hstore_plpython.c
@@ -85,7 +85,7 @@ PG_FUNCTION_INFO_V1(hstore_to_plpython);
 Datum
 hstore_to_plpython(PG_FUNCTION_ARGS)
 {
-	HStore	   *in = PG_GETARG_HS(0);
+	HStore	   *in = PG_GETARG_HS_P(0);
 	int			i;
 	int			count = HS_COUNT(in);
 	char	   *base = STRPTR(in);
diff --git a/contrib/ltree/_ltree_op.c b/contrib/ltree/_ltree_op.c
index c0c56a4..6848ac6 100644
--- a/contrib/ltree/_ltree_op.c
+++ b/contrib/ltree/_ltree_op.c
@@ -71,7 +71,7 @@ Datum
 _ltree_isparent(PG_FUNCTION_ARGS)
 {
 	ArrayType  *la = PG_GETARG_ARRAYTYPE_P(0);
-	ltree	   *query = PG_GETARG_LTREE(1);
+	ltree	   *query = PG_GETARG_LTREE_P(1);
 	bool		res = array_iterator(la, ltree_isparent, (void *) query, NULL);
 
 	PG_FREE_IF_COPY(la, 0);
@@ -92,7 +92,7 @@ Datum
 _ltree_risparent(PG_FUNCTION_ARGS)
 {
 	ArrayType  *la = PG_GETARG_ARRAYTYPE_P(0);
-	ltree	   *query = PG_GETARG_LTREE(1);
+	ltree	   *query = PG_GETARG_LTREE_P(1);
 	bool		res = array_iterator(la, ltree_risparent, (void *) query, NULL);
 
 	PG_FREE_IF_COPY(la, 0);
@@ -113,7 +113,7 @@ Datum
 _ltq_regex(PG_FUNCTION_ARGS)
 {
 	ArrayType  *la = PG_GETARG_ARRAYTYPE_P(0);
-	lquery	   *query = PG_GETARG_LQUERY(1);
+	lquery	   *query = PG_GETARG_LQUERY_P(1);
 	bool		res = array_iterator(la, ltq_regex, (void *) query, NULL);
 
 	PG_FREE_IF_COPY(la, 0);
@@ -178,7 +178,7 @@ Datum
 _ltxtq_exec(PG_FUNCTION_ARGS)
 {
 	ArrayType  *la = PG_GETARG_ARRAYTYPE_P(0);
-	ltxtquery  *query = PG_GETARG_LTXTQUERY(1);
+	ltxtquery  *query = PG_GETARG_LTXTQUERY_P(1);
 	bool		res = array_iterator(la, ltxtq_exec, (void *) query, NULL);
 
 	PG_FREE_IF_COPY(la, 0);
@@ -200,7 +200,7 @@ Datum
 _ltree_extract_isparent(PG_FUNCTION_ARGS)
 {
 	ArrayType  *la = PG_GETARG_ARRAYTYPE_P(0);
-	ltree	   *query = PG_GETARG_LTREE(1);
+	ltree	   *query = PG_GETARG_LTREE_P(1);
 	ltree	   *found,
 			   *item;
 
@@ -223,7 +223,7 @@ Datum
 _ltree_extract_risparent(PG_FUNCTION_ARGS)
 {
 	ArrayType  *la = PG_GETARG_ARRAYTYPE_P(0);
-	ltree	   *query = PG_GETARG_LTREE(1);
+	ltree	   *query = PG_GETARG_LTREE_P(1);
 	ltree	   *found,
 			   *item;
 
@@ -246,7 +246,7 @@ Datum
 _ltq_extract_regex(PG_FUNCTION_ARGS)
 {
 	ArrayType  *la = PG_GETARG_ARRAYTYPE_P(0);
-	lquery	   *query = PG_GETARG_LQUERY(1);
+	lquery	   *query = PG_GETARG_LQUERY_P(1);
 	ltree	   *found,
 			   *item;
 
@@ -269,7 +269,7 @@ Datum
 _ltxtq_extract_exec(PG_FUNCTION_ARGS)
 {
 	ArrayType  *la = PG_GETARG_ARRAYTYPE_P(0);
-	ltxtquery  *query = PG_GETARG_LTXTQUERY(1);
+	ltxtquery  *query = PG_GETARG_LTXTQUERY_P(1);
 	ltree	   *found,
 			   *item;
 
diff --git a/contrib/ltree/lquery_op.c b/contrib/ltree/lquery_op.c
index 31d150d..9e2fb5a 100644
--- a/contrib/ltree/lquery_op.c
+++ b/contrib/ltree/lquery_op.c
@@ -302,8 +302,8 @@ checkCond(lquery_level *curq, int query_numlevel, ltree_level *curt, int tree_nu
 Datum
 ltq_regex(PG_FUNCTION_ARGS)
 {
-	ltree	   *tree = PG_GETARG_LTREE(0);
-	lquery	   *query = PG_GETARG_LQUERY(1);
+	ltree	   *tree = PG_GETARG_LTREE_P(0);
+	lquery	   *query = PG_GETARG_LQUERY_P(1);
 	bool		res = false;
 
 	if (query->flag & LQUERY_HASNOT)
@@ -338,7 +338,7 @@ ltq_rregex(PG_FUNCTION_ARGS)
 Datum
 lt_q_regex(PG_FUNCTION_ARGS)
 {
-	ltree	   *tree = PG_GETARG_LTREE(0);
+	ltree	   *tree = PG_GETARG_LTREE_P(0);
 	ArrayType  *_query = PG_GETARG_ARRAYTYPE_P(1);
 	lquery	   *query = (lquery *) ARR_DATA_PTR(_query);
 	bool		res = false;
diff --git a/contrib/ltree/ltree.h b/contrib/ltree/ltree.h
index c604357..65861ad 100644
--- a/contrib/ltree/ltree.h
+++ b/contrib/ltree/ltree.h
@@ -165,11 +165,11 @@ bool compare_subnode(ltree_level *t, char *q, int len,
 ltree	   *lca_inner(ltree **a, int len);
 int			ltree_strncasecmp(const char *a, const char *b, size_t s);
 
-#define PG_GETARG_LTREE(x)	((ltree*)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(x))))
+#define PG_GETARG_LTREE_P(x)	((ltree*)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(x))))
 #define PG_GETARG_LTREE_COPY(x) ((ltree*)DatumGetPointer(PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(x))))
-#define PG_GETARG_LQUERY(x) ((lquery*)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(x))))
+#define PG_GETARG_LQUERY_P(x) ((lquery*)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(x))))
 #define PG_GETARG_LQUERY_COPY(x) ((lquery*)DatumGetPointer(PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(x))))
-#define PG_GETARG_LTXTQUERY(x) ((ltxtquery*)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(x))))
+#define PG_GETARG_LTXTQUERY_P(x) ((ltxtquery*)DatumGetPointer(PG_DETOAST_DATUM(PG_GETARG_DATUM(x))))
 #define PG_GETARG_LTXTQUERY_COPY(x) ((ltxtquery*)DatumGetPointer(PG_DETOAST_DATUM_COPY(PG_GETARG_DATUM(x))))
 
 /* GiST support for ltree */
diff --git a/contrib/ltree/ltree_gist.c b/contrib/ltree/ltree_gist.c
index 033a477c..cbb0274 100644
--- a/contrib/ltree/ltree_gist.c
+++ b/contrib/ltree/ltree_gist.c
@@ -621,18 +621,18 @@ ltree_consistent(PG_FUNCTION_ARGS)
 	switch (strategy)
 	{
 		case BTLessStrategyNumber:
-			query = PG_GETARG_LTREE(1);
+			query = PG_GETARG_LTREE_P(1);
 			res = (GIST_LEAF(entry)) ?
 				(ltree_compare((ltree *) query, LTG_NODE(key)) > 0)
 				:
 				(ltree_compare((ltree *) query, LTG_GETLNODE(key)) >= 0);
 			break;
 		case BTLessEqualStrategyNumber:
-			query = PG_GETARG_LTREE(1);
+			query = PG_GETARG_LTREE_P(1);
 			res = (ltree_compare((ltree *) query, LTG_GETLNODE(key)) >= 0);
 			break;
 		case BTEqualStrategyNumber:
-			query = PG_GETARG_LTREE(1);
+			query = PG_GETARG_LTREE_P(1);
 			if (GIST_LEAF(entry))
 				res = (ltree_compare((ltree *) query, LTG_NODE(key)) == 0);
 			else
@@ -643,11 +643,11 @@ ltree_consistent(PG_FUNCTION_ARGS)
 					);
 			break;
 		case BTGreaterEqualStrategyNumber:
-			query = PG_GETARG_LTREE(1);
+			query = PG_GETARG_LTREE_P(1);
 			res = (ltree_compare((ltree *) query, LTG_GETRNODE(key)) <= 0);
 			break;
 		case BTGreaterStrategyNumber:
-			query = PG_GETARG_LTREE(1);
+			query = PG_GETARG_LTREE_P(1);
 			res = (GIST_LEAF(entry)) ?
 				(ltree_compare((ltree *) query, LTG_GETRNODE(key)) < 0)
 				:
@@ -661,7 +661,7 @@ ltree_consistent(PG_FUNCTION_ARGS)
 				gist_isparent(key, (ltree *) query);
 			break;
 		case 11:
-			query = PG_GETARG_LTREE(1);
+			query = PG_GETARG_LTREE_P(1);
 			res = (GIST_LEAF(entry)) ?
 				inner_isparent(LTG_NODE(key), (ltree *) query)
 				:
@@ -669,7 +669,7 @@ ltree_consistent(PG_FUNCTION_ARGS)
 			break;
 		case 12:
 		case 13:
-			query = PG_GETARG_LQUERY(1);
+			query = PG_GETARG_LQUERY_P(1);
 			if (GIST_LEAF(entry))
 				res = DatumGetBool(DirectFunctionCall2(ltq_regex,
 											  PointerGetDatum(LTG_NODE(key)),
@@ -680,7 +680,7 @@ ltree_consistent(PG_FUNCTION_ARGS)
 			break;
 		case 14:
 		case 15:
-			query = PG_GETARG_LQUERY(1);
+			query = PG_GETARG_LQUERY_P(1);
 			if (GIST_LEAF(entry))
 				res = DatumGetBool(DirectFunctionCall2(ltxtq_exec,
 											  PointerGetDatum(LTG_NODE(key)),
diff --git a/contrib/ltree/ltree_io.c b/contrib/ltree/ltree_io.c
index a1d4a0d..98a7034 100644
--- a/contrib/ltree/ltree_io.c
+++ b/contrib/ltree/ltree_io.c
@@ -149,7 +149,7 @@ ltree_in(PG_FUNCTION_ARGS)
 Datum
 ltree_out(PG_FUNCTION_ARGS)
 {
-	ltree	   *in = PG_GETARG_LTREE(0);
+	ltree	   *in = PG_GETARG_LTREE_P(0);
 	char	   *buf,
 			   *ptr;
 	int			i;
@@ -521,7 +521,7 @@ lquery_in(PG_FUNCTION_ARGS)
 Datum
 lquery_out(PG_FUNCTION_ARGS)
 {
-	lquery	   *in = PG_GETARG_LQUERY(0);
+	lquery	   *in = PG_GETARG_LQUERY_P(0);
 	char	   *buf,
 			   *ptr;
 	int			i,
diff --git a/contrib/ltree/ltree_op.c b/contrib/ltree/ltree_op.c
index aa1e991..8e2a70a 100644
--- a/contrib/ltree/ltree_op.c
+++ b/contrib/ltree/ltree_op.c
@@ -67,8 +67,8 @@ ltree_compare(const ltree *a, const ltree *b)
 }
 
 #define RUNCMP						\
-ltree *a	= PG_GETARG_LTREE(0);			\
-ltree *b	= PG_GETARG_LTREE(1);			\
+ltree *a	= PG_GETARG_LTREE_P(0);			\
+ltree *b	= PG_GETARG_LTREE_P(1);			\
 int res = ltree_compare(a,b);				\
 PG_FREE_IF_COPY(a,0);					\
 PG_FREE_IF_COPY(b,1);					\
@@ -125,7 +125,7 @@ ltree_ne(PG_FUNCTION_ARGS)
 Datum
 nlevel(PG_FUNCTION_ARGS)
 {
-	ltree	   *a = PG_GETARG_LTREE(0);
+	ltree	   *a = PG_GETARG_LTREE_P(0);
 	int			res = a->numlevel;
 
 	PG_FREE_IF_COPY(a, 0);
@@ -159,8 +159,8 @@ inner_isparent(const ltree *c, const ltree *p)
 Datum
 ltree_isparent(PG_FUNCTION_ARGS)
 {
-	ltree	   *c = PG_GETARG_LTREE(1);
-	ltree	   *p = PG_GETARG_LTREE(0);
+	ltree	   *c = PG_GETARG_LTREE_P(1);
+	ltree	   *p = PG_GETARG_LTREE_P(0);
 	bool		res = inner_isparent(c, p);
 
 	PG_FREE_IF_COPY(c, 1);
@@ -171,8 +171,8 @@ ltree_isparent(PG_FUNCTION_ARGS)
 Datum
 ltree_risparent(PG_FUNCTION_ARGS)
 {
-	ltree	   *c = PG_GETARG_LTREE(0);
-	ltree	   *p = PG_GETARG_LTREE(1);
+	ltree	   *c = PG_GETARG_LTREE_P(0);
+	ltree	   *p = PG_GETARG_LTREE_P(1);
 	bool		res = inner_isparent(c, p);
 
 	PG_FREE_IF_COPY(c, 0);
@@ -223,7 +223,7 @@ inner_subltree(ltree *t, int32 startpos, int32 endpos)
 Datum
 subltree(PG_FUNCTION_ARGS)
 {
-	ltree	   *t = PG_GETARG_LTREE(0);
+	ltree	   *t = PG_GETARG_LTREE_P(0);
 	ltree	   *res = inner_subltree(t, PG_GETARG_INT32(1), PG_GETARG_INT32(2));
 
 	PG_FREE_IF_COPY(t, 0);
@@ -233,7 +233,7 @@ subltree(PG_FUNCTION_ARGS)
 Datum
 subpath(PG_FUNCTION_ARGS)
 {
-	ltree	   *t = PG_GETARG_LTREE(0);
+	ltree	   *t = PG_GETARG_LTREE_P(0);
 	int32		start = PG_GETARG_INT32(1);
 	int32		len = (fcinfo->nargs == 3) ? PG_GETARG_INT32(2) : 0;
 	int32		end;
@@ -282,8 +282,8 @@ ltree_concat(ltree *a, ltree *b)
 Datum
 ltree_addltree(PG_FUNCTION_ARGS)
 {
-	ltree	   *a = PG_GETARG_LTREE(0);
-	ltree	   *b = PG_GETARG_LTREE(1);
+	ltree	   *a = PG_GETARG_LTREE_P(0);
+	ltree	   *b = PG_GETARG_LTREE_P(1);
 	ltree	   *r;
 
 	r = ltree_concat(a, b);
@@ -295,7 +295,7 @@ ltree_addltree(PG_FUNCTION_ARGS)
 Datum
 ltree_addtext(PG_FUNCTION_ARGS)
 {
-	ltree	   *a = PG_GETARG_LTREE(0);
+	ltree	   *a = PG_GETARG_LTREE_P(0);
 	text	   *b = PG_GETARG_TEXT_PP(1);
 	char	   *s;
 	ltree	   *r,
@@ -320,8 +320,8 @@ ltree_addtext(PG_FUNCTION_ARGS)
 Datum
 ltree_index(PG_FUNCTION_ARGS)
 {
-	ltree	   *a = PG_GETARG_LTREE(0);
-	ltree	   *b = PG_GETARG_LTREE(1);
+	ltree	   *a = PG_GETARG_LTREE_P(0);
+	ltree	   *b = PG_GETARG_LTREE_P(1);
 	int			start = (fcinfo->nargs == 3) ? PG_GETARG_INT32(2) : 0;
 	int			i,
 				j;
@@ -380,7 +380,7 @@ ltree_index(PG_FUNCTION_ARGS)
 Datum
 ltree_textadd(PG_FUNCTION_ARGS)
 {
-	ltree	   *a = PG_GETARG_LTREE(1);
+	ltree	   *a = PG_GETARG_LTREE_P(1);
 	text	   *b = PG_GETARG_TEXT_PP(0);
 	char	   *s;
 	ltree	   *r,
@@ -476,7 +476,7 @@ lca(PG_FUNCTION_ARGS)
 
 	a = (ltree **) palloc(sizeof(ltree *) * fcinfo->nargs);
 	for (i = 0; i < fcinfo->nargs; i++)
-		a[i] = PG_GETARG_LTREE(i);
+		a[i] = PG_GETARG_LTREE_P(i);
 	res = lca_inner(a, (int) fcinfo->nargs);
 	for (i = 0; i < fcinfo->nargs; i++)
 		PG_FREE_IF_COPY(a[i], i);
@@ -508,7 +508,7 @@ text2ltree(PG_FUNCTION_ARGS)
 Datum
 ltree2text(PG_FUNCTION_ARGS)
 {
-	ltree	   *in = PG_GETARG_LTREE(0);
+	ltree	   *in = PG_GETARG_LTREE_P(0);
 	char	   *ptr;
 	int			i;
 	ltree_level *curlevel;
diff --git a/contrib/ltree/ltxtquery_io.c b/contrib/ltree/ltxtquery_io.c
index 9ca1994..56bf39d 100644
--- a/contrib/ltree/ltxtquery_io.c
+++ b/contrib/ltree/ltxtquery_io.c
@@ -515,7 +515,7 @@ infix(INFIX *in, bool first)
 Datum
 ltxtq_out(PG_FUNCTION_ARGS)
 {
-	ltxtquery  *query = PG_GETARG_LTXTQUERY(0);
+	ltxtquery  *query = PG_GETARG_LTXTQUERY_P(0);
 	INFIX		nrm;
 
 	if (query->size == 0)
diff --git a/contrib/ltree/ltxtquery_op.c b/contrib/ltree/ltxtquery_op.c
index 1428c8b..8427c8f 100644
--- a/contrib/ltree/ltxtquery_op.c
+++ b/contrib/ltree/ltxtquery_op.c
@@ -86,8 +86,8 @@ checkcondition_str(void *checkval, ITEM *val)
 Datum
 ltxtq_exec(PG_FUNCTION_ARGS)
 {
-	ltree	   *val = PG_GETARG_LTREE(0);
-	ltxtquery  *query = PG_GETARG_LTXTQUERY(1);
+	ltree	   *val = PG_GETARG_LTREE_P(0);
+	ltxtquery  *query = PG_GETARG_LTXTQUERY_P(1);
 	CHKVAL		chkval;
 	bool		result;
 
diff --git a/contrib/ltree_plpython/ltree_plpython.c b/contrib/ltree_plpython/ltree_plpython.c
index bdd462a..ae9b90d 100644
--- a/contrib/ltree_plpython/ltree_plpython.c
+++ b/contrib/ltree_plpython/ltree_plpython.c
@@ -40,7 +40,7 @@ PG_FUNCTION_INFO_V1(ltree_to_plpython);
 Datum
 ltree_to_plpython(PG_FUNCTION_ARGS)
 {
-	ltree	   *in = PG_GETARG_LTREE(0);
+	ltree	   *in = PG_GETARG_LTREE_P(0);
 	int			i;
 	PyObject   *list;
 	ltree_level *curlevel;
diff --git a/src/backend/executor/tqueue.c b/src/backend/executor/tqueue.c
index 8d7e711..4bdd7f5 100644
--- a/src/backend/executor/tqueue.c
+++ b/src/backend/executor/tqueue.c
@@ -485,7 +485,7 @@ static void
 TQExamineRange(TQueueDestReceiver *tqueue, RangeRemapInfo *remapinfo,
 			   Datum value)
 {
-	RangeType  *range = DatumGetRangeType(value);
+	RangeType  *range = DatumGetRangeTypeP(value);
 	RangeBound	lower;
 	RangeBound	upper;
 	bool		empty;
@@ -883,7 +883,7 @@ static Datum
 TQRemapRange(TupleQueueReader *reader, RangeRemapInfo *remapinfo,
 			 Datum value, bool *changed)
 {
-	RangeType  *range = DatumGetRangeType(value);
+	RangeType  *range = DatumGetRangeTypeP(value);
 	bool		bound_changed = false;
 	RangeBound	lower;
 	RangeBound	upper;
@@ -909,7 +909,7 @@ TQRemapRange(TupleQueueReader *reader, RangeRemapInfo *remapinfo,
 		/* Reserialize.  */
 		*changed = true;
 		range = range_serialize(remapinfo->typcache, &lower, &upper, empty);
-		return RangeTypeGetDatum(range);
+		return RangeTypePGetDatum(range);
 	}
 
 	/* Else just return the value as-is. */
diff --git a/src/backend/tsearch/to_tsany.c b/src/backend/tsearch/to_tsany.c
index 93c08bc..326b286 100644
--- a/src/backend/tsearch/to_tsany.c
+++ b/src/backend/tsearch/to_tsany.c
@@ -269,7 +269,7 @@ Datum
 jsonb_to_tsvector_byid(PG_FUNCTION_ARGS)
 {
 	Oid					cfgId = PG_GETARG_OID(0);
-	Jsonb				*jb = PG_GETARG_JSONB(1);
+	Jsonb				*jb = PG_GETARG_JSONB_P(1);
 	TSVectorBuildState	state;
 	ParsedText			*prs = (ParsedText *) palloc(sizeof(ParsedText));
 
@@ -301,7 +301,7 @@ jsonb_to_tsvector_byid(PG_FUNCTION_ARGS)
 Datum
 jsonb_to_tsvector(PG_FUNCTION_ARGS)
 {
-	Jsonb	*jb = PG_GETARG_JSONB(0);
+	Jsonb	*jb = PG_GETARG_JSONB_P(0);
 	Oid		cfgId;
 
 	cfgId = getTSCurrentConfig(true);
diff --git a/src/backend/tsearch/wparser.c b/src/backend/tsearch/wparser.c
index c19937d..99af741 100644
--- a/src/backend/tsearch/wparser.c
+++ b/src/backend/tsearch/wparser.c
@@ -381,7 +381,7 @@ ts_headline_opt(PG_FUNCTION_ARGS)
 Datum
 ts_headline_jsonb_byid_opt(PG_FUNCTION_ARGS)
 {
-	Jsonb			*out, *jb = PG_GETARG_JSONB(1);
+	Jsonb			*out, *jb = PG_GETARG_JSONB_P(1);
 	TSQuery			query = PG_GETARG_TSQUERY(2);
 	text			*opt = (PG_NARGS() > 3 && PG_GETARG_POINTER(3)) ? PG_GETARG_TEXT_P(3) : NULL;
 	JsonTransformStringValuesAction action = (JsonTransformStringValuesAction) headline_json_value;
@@ -422,7 +422,7 @@ ts_headline_jsonb_byid_opt(PG_FUNCTION_ARGS)
 		pfree(prs.stopsel);
 	}
 
-	PG_RETURN_JSONB(out);
+	PG_RETURN_JSONB_P(out);
 }
 
 Datum
diff --git a/src/backend/utils/adt/array_expanded.c b/src/backend/utils/adt/array_expanded.c
index f256c7f..31583f9 100644
--- a/src/backend/utils/adt/array_expanded.c
+++ b/src/backend/utils/adt/array_expanded.c
@@ -394,11 +394,11 @@ DatumGetExpandedArrayX(Datum d, ArrayMetaState *metacache)
 }
 
 /*
- * DatumGetAnyArray: return either an expanded array or a detoasted varlena
+ * DatumGetAnyArrayP: return either an expanded array or a detoasted varlena
  * array.  The result must not be modified in-place.
  */
 AnyArrayType *
-DatumGetAnyArray(Datum d)
+DatumGetAnyArrayP(Datum d)
 {
 	ExpandedArrayHeader *eah;
 
diff --git a/src/backend/utils/adt/arrayfuncs.c b/src/backend/utils/adt/arrayfuncs.c
index d9c8aa5..9d90135 100644
--- a/src/backend/utils/adt/arrayfuncs.c
+++ b/src/backend/utils/adt/arrayfuncs.c
@@ -1010,7 +1010,7 @@ CopyArrayEls(ArrayType *array,
 Datum
 array_out(PG_FUNCTION_ARGS)
 {
-	AnyArrayType *v = PG_GETARG_ANY_ARRAY(0);
+	AnyArrayType *v = PG_GETARG_ANY_ARRAY_P(0);
 	Oid			element_type = AARR_ELEMTYPE(v);
 	int			typlen;
 	bool		typbyval;
@@ -1533,7 +1533,7 @@ ReadArrayBinary(StringInfo buf,
 Datum
 array_send(PG_FUNCTION_ARGS)
 {
-	AnyArrayType *v = PG_GETARG_ANY_ARRAY(0);
+	AnyArrayType *v = PG_GETARG_ANY_ARRAY_P(0);
 	Oid			element_type = AARR_ELEMTYPE(v);
 	int			typlen;
 	bool		typbyval;
@@ -1637,7 +1637,7 @@ array_send(PG_FUNCTION_ARGS)
 Datum
 array_ndims(PG_FUNCTION_ARGS)
 {
-	AnyArrayType *v = PG_GETARG_ANY_ARRAY(0);
+	AnyArrayType *v = PG_GETARG_ANY_ARRAY_P(0);
 
 	/* Sanity check: does it look like an array at all? */
 	if (AARR_NDIM(v) <= 0 || AARR_NDIM(v) > MAXDIM)
@@ -1653,7 +1653,7 @@ array_ndims(PG_FUNCTION_ARGS)
 Datum
 array_dims(PG_FUNCTION_ARGS)
 {
-	AnyArrayType *v = PG_GETARG_ANY_ARRAY(0);
+	AnyArrayType *v = PG_GETARG_ANY_ARRAY_P(0);
 	char	   *p;
 	int			i;
 	int		   *dimv,
@@ -1691,7 +1691,7 @@ array_dims(PG_FUNCTION_ARGS)
 Datum
 array_lower(PG_FUNCTION_ARGS)
 {
-	AnyArrayType *v = PG_GETARG_ANY_ARRAY(0);
+	AnyArrayType *v = PG_GETARG_ANY_ARRAY_P(0);
 	int			reqdim = PG_GETARG_INT32(1);
 	int		   *lb;
 	int			result;
@@ -1718,7 +1718,7 @@ array_lower(PG_FUNCTION_ARGS)
 Datum
 array_upper(PG_FUNCTION_ARGS)
 {
-	AnyArrayType *v = PG_GETARG_ANY_ARRAY(0);
+	AnyArrayType *v = PG_GETARG_ANY_ARRAY_P(0);
 	int			reqdim = PG_GETARG_INT32(1);
 	int		   *dimv,
 			   *lb;
@@ -1748,7 +1748,7 @@ array_upper(PG_FUNCTION_ARGS)
 Datum
 array_length(PG_FUNCTION_ARGS)
 {
-	AnyArrayType *v = PG_GETARG_ANY_ARRAY(0);
+	AnyArrayType *v = PG_GETARG_ANY_ARRAY_P(0);
 	int			reqdim = PG_GETARG_INT32(1);
 	int		   *dimv;
 	int			result;
@@ -1775,7 +1775,7 @@ array_length(PG_FUNCTION_ARGS)
 Datum
 array_cardinality(PG_FUNCTION_ARGS)
 {
-	AnyArrayType *v = PG_GETARG_ANY_ARRAY(0);
+	AnyArrayType *v = PG_GETARG_ANY_ARRAY_P(0);
 
 	PG_RETURN_INT32(ArrayGetNItems(AARR_NDIM(v), AARR_DIMS(v)));
 }
@@ -3146,7 +3146,7 @@ array_map(FunctionCallInfo fcinfo, Oid retType, ArrayMapState *amstate)
 		elog(ERROR, "invalid nargs: %d", fcinfo->nargs);
 	if (PG_ARGISNULL(0))
 		elog(ERROR, "null input array");
-	v = PG_GETARG_ANY_ARRAY(0);
+	v = PG_GETARG_ANY_ARRAY_P(0);
 
 	inpType = AARR_ELEMTYPE(v);
 	ndim = AARR_NDIM(v);
@@ -3588,8 +3588,8 @@ array_contains_nulls(ArrayType *array)
 Datum
 array_eq(PG_FUNCTION_ARGS)
 {
-	AnyArrayType *array1 = PG_GETARG_ANY_ARRAY(0);
-	AnyArrayType *array2 = PG_GETARG_ANY_ARRAY(1);
+	AnyArrayType *array1 = PG_GETARG_ANY_ARRAY_P(0);
+	AnyArrayType *array2 = PG_GETARG_ANY_ARRAY_P(1);
 	Oid			collation = PG_GET_COLLATION();
 	int			ndims1 = AARR_NDIM(array1);
 	int			ndims2 = AARR_NDIM(array2);
@@ -3759,8 +3759,8 @@ btarraycmp(PG_FUNCTION_ARGS)
 static int
 array_cmp(FunctionCallInfo fcinfo)
 {
-	AnyArrayType *array1 = PG_GETARG_ANY_ARRAY(0);
-	AnyArrayType *array2 = PG_GETARG_ANY_ARRAY(1);
+	AnyArrayType *array1 = PG_GETARG_ANY_ARRAY_P(0);
+	AnyArrayType *array2 = PG_GETARG_ANY_ARRAY_P(1);
 	Oid			collation = PG_GET_COLLATION();
 	int			ndims1 = AARR_NDIM(array1);
 	int			ndims2 = AARR_NDIM(array2);
@@ -3930,7 +3930,7 @@ array_cmp(FunctionCallInfo fcinfo)
 Datum
 hash_array(PG_FUNCTION_ARGS)
 {
-	AnyArrayType *array = PG_GETARG_ANY_ARRAY(0);
+	AnyArrayType *array = PG_GETARG_ANY_ARRAY_P(0);
 	int			ndims = AARR_NDIM(array);
 	int		   *dims = AARR_DIMS(array);
 	Oid			element_type = AARR_ELEMTYPE(array);
@@ -4181,8 +4181,8 @@ array_contain_compare(AnyArrayType *array1, AnyArrayType *array2, Oid collation,
 Datum
 arrayoverlap(PG_FUNCTION_ARGS)
 {
-	AnyArrayType *array1 = PG_GETARG_ANY_ARRAY(0);
-	AnyArrayType *array2 = PG_GETARG_ANY_ARRAY(1);
+	AnyArrayType *array1 = PG_GETARG_ANY_ARRAY_P(0);
+	AnyArrayType *array2 = PG_GETARG_ANY_ARRAY_P(1);
 	Oid			collation = PG_GET_COLLATION();
 	bool		result;
 
@@ -4199,8 +4199,8 @@ arrayoverlap(PG_FUNCTION_ARGS)
 Datum
 arraycontains(PG_FUNCTION_ARGS)
 {
-	AnyArrayType *array1 = PG_GETARG_ANY_ARRAY(0);
-	AnyArrayType *array2 = PG_GETARG_ANY_ARRAY(1);
+	AnyArrayType *array1 = PG_GETARG_ANY_ARRAY_P(0);
+	AnyArrayType *array2 = PG_GETARG_ANY_ARRAY_P(1);
 	Oid			collation = PG_GET_COLLATION();
 	bool		result;
 
@@ -4217,8 +4217,8 @@ arraycontains(PG_FUNCTION_ARGS)
 Datum
 arraycontained(PG_FUNCTION_ARGS)
 {
-	AnyArrayType *array1 = PG_GETARG_ANY_ARRAY(0);
-	AnyArrayType *array2 = PG_GETARG_ANY_ARRAY(1);
+	AnyArrayType *array1 = PG_GETARG_ANY_ARRAY_P(0);
+	AnyArrayType *array2 = PG_GETARG_ANY_ARRAY_P(1);
 	Oid			collation = PG_GET_COLLATION();
 	bool		result;
 
@@ -5557,7 +5557,7 @@ generate_subscripts(PG_FUNCTION_ARGS)
 	/* stuff done only on the first call of the function */
 	if (SRF_IS_FIRSTCALL())
 	{
-		AnyArrayType *v = PG_GETARG_ANY_ARRAY(0);
+		AnyArrayType *v = PG_GETARG_ANY_ARRAY_P(0);
 		int			reqdim = PG_GETARG_INT32(1);
 		int		   *lb,
 				   *dimv;
@@ -5919,7 +5919,7 @@ array_unnest(PG_FUNCTION_ARGS)
 		 * and not before.  (If no detoast happens, we assume the originally
 		 * passed array will stick around till then.)
 		 */
-		arr = PG_GETARG_ANY_ARRAY(0);
+		arr = PG_GETARG_ANY_ARRAY_P(0);
 
 		/* allocate memory for user context */
 		fctx = (array_unnest_fctx *) palloc(sizeof(array_unnest_fctx));
diff --git a/src/backend/utils/adt/jsonb.c b/src/backend/utils/adt/jsonb.c
index 164f57e..c64d777 100644
--- a/src/backend/utils/adt/jsonb.c
+++ b/src/backend/utils/adt/jsonb.c
@@ -130,7 +130,7 @@ jsonb_recv(PG_FUNCTION_ARGS)
 Datum
 jsonb_out(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	char	   *out;
 
 	out = JsonbToCString(NULL, &jb->root, VARSIZE(jb));
@@ -146,7 +146,7 @@ jsonb_out(PG_FUNCTION_ARGS)
 Datum
 jsonb_send(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	StringInfoData buf;
 	StringInfo	jtext = makeStringInfo();
 	int			version = 1;
@@ -171,7 +171,7 @@ jsonb_send(PG_FUNCTION_ARGS)
 Datum
 jsonb_typeof(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *in = PG_GETARG_JSONB(0);
+	Jsonb	   *in = PG_GETARG_JSONB_P(0);
 	JsonbIterator *it;
 	JsonbValue	v;
 	char	   *result;
@@ -878,7 +878,7 @@ datum_to_jsonb(Datum val, bool is_null, JsonbInState *result,
 				break;
 			case JSONBTYPE_JSONB:
 				{
-					Jsonb	   *jsonb = DatumGetJsonb(val);
+					Jsonb	   *jsonb = DatumGetJsonbP(val);
 					JsonbIterator *it;
 
 					it = JsonbIteratorInit(&jsonb->root);
diff --git a/src/backend/utils/adt/jsonb_gin.c b/src/backend/utils/adt/jsonb_gin.c
index 8e8e8fd..4e1ba10 100644
--- a/src/backend/utils/adt/jsonb_gin.c
+++ b/src/backend/utils/adt/jsonb_gin.c
@@ -66,7 +66,7 @@ gin_compare_jsonb(PG_FUNCTION_ARGS)
 Datum
 gin_extract_jsonb(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = (Jsonb *) PG_GETARG_JSONB(0);
+	Jsonb	   *jb = (Jsonb *) PG_GETARG_JSONB_P(0);
 	int32	   *nentries = (int32 *) PG_GETARG_POINTER(1);
 	int			total = 2 * JB_ROOT_COUNT(jb);
 	JsonbIterator *it;
@@ -196,7 +196,7 @@ gin_consistent_jsonb(PG_FUNCTION_ARGS)
 	bool	   *check = (bool *) PG_GETARG_POINTER(0);
 	StrategyNumber strategy = PG_GETARG_UINT16(1);
 
-	/* Jsonb	   *query = PG_GETARG_JSONB(2); */
+	/* Jsonb	   *query = PG_GETARG_JSONB_P(2); */
 	int32		nkeys = PG_GETARG_INT32(3);
 
 	/* Pointer	   *extra_data = (Pointer *) PG_GETARG_POINTER(4); */
@@ -268,7 +268,7 @@ gin_triconsistent_jsonb(PG_FUNCTION_ARGS)
 	GinTernaryValue *check = (GinTernaryValue *) PG_GETARG_POINTER(0);
 	StrategyNumber strategy = PG_GETARG_UINT16(1);
 
-	/* Jsonb	   *query = PG_GETARG_JSONB(2); */
+	/* Jsonb	   *query = PG_GETARG_JSONB_P(2); */
 	int32		nkeys = PG_GETARG_INT32(3);
 
 	/* Pointer	   *extra_data = (Pointer *) PG_GETARG_POINTER(4); */
@@ -329,7 +329,7 @@ gin_triconsistent_jsonb(PG_FUNCTION_ARGS)
 Datum
 gin_extract_jsonb_path(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	int32	   *nentries = (int32 *) PG_GETARG_POINTER(1);
 	int			total = 2 * JB_ROOT_COUNT(jb);
 	JsonbIterator *it;
@@ -454,7 +454,7 @@ gin_consistent_jsonb_path(PG_FUNCTION_ARGS)
 	bool	   *check = (bool *) PG_GETARG_POINTER(0);
 	StrategyNumber strategy = PG_GETARG_UINT16(1);
 
-	/* Jsonb	   *query = PG_GETARG_JSONB(2); */
+	/* Jsonb	   *query = PG_GETARG_JSONB_P(2); */
 	int32		nkeys = PG_GETARG_INT32(3);
 
 	/* Pointer	   *extra_data = (Pointer *) PG_GETARG_POINTER(4); */
@@ -492,7 +492,7 @@ gin_triconsistent_jsonb_path(PG_FUNCTION_ARGS)
 	GinTernaryValue *check = (GinTernaryValue *) PG_GETARG_POINTER(0);
 	StrategyNumber strategy = PG_GETARG_UINT16(1);
 
-	/* Jsonb	   *query = PG_GETARG_JSONB(2); */
+	/* Jsonb	   *query = PG_GETARG_JSONB_P(2); */
 	int32		nkeys = PG_GETARG_INT32(3);
 
 	/* Pointer	   *extra_data = (Pointer *) PG_GETARG_POINTER(4); */
diff --git a/src/backend/utils/adt/jsonb_op.c b/src/backend/utils/adt/jsonb_op.c
index d4c490e..b104b2e 100644
--- a/src/backend/utils/adt/jsonb_op.c
+++ b/src/backend/utils/adt/jsonb_op.c
@@ -21,7 +21,7 @@
 Datum
 jsonb_exists(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	text	   *key = PG_GETARG_TEXT_PP(1);
 	JsonbValue	kval;
 	JsonbValue *v = NULL;
@@ -46,7 +46,7 @@ jsonb_exists(PG_FUNCTION_ARGS)
 Datum
 jsonb_exists_any(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	ArrayType  *keys = PG_GETARG_ARRAYTYPE_P(1);
 	int			i;
 	Datum	   *key_datums;
@@ -79,7 +79,7 @@ jsonb_exists_any(PG_FUNCTION_ARGS)
 Datum
 jsonb_exists_all(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	ArrayType  *keys = PG_GETARG_ARRAYTYPE_P(1);
 	int			i;
 	Datum	   *key_datums;
@@ -112,8 +112,8 @@ jsonb_exists_all(PG_FUNCTION_ARGS)
 Datum
 jsonb_contains(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *val = PG_GETARG_JSONB(0);
-	Jsonb	   *tmpl = PG_GETARG_JSONB(1);
+	Jsonb	   *val = PG_GETARG_JSONB_P(0);
+	Jsonb	   *tmpl = PG_GETARG_JSONB_P(1);
 
 	JsonbIterator *it1,
 			   *it2;
@@ -131,8 +131,8 @@ Datum
 jsonb_contained(PG_FUNCTION_ARGS)
 {
 	/* Commutator of "contains" */
-	Jsonb	   *tmpl = PG_GETARG_JSONB(0);
-	Jsonb	   *val = PG_GETARG_JSONB(1);
+	Jsonb	   *tmpl = PG_GETARG_JSONB_P(0);
+	Jsonb	   *val = PG_GETARG_JSONB_P(1);
 
 	JsonbIterator *it1,
 			   *it2;
@@ -149,8 +149,8 @@ jsonb_contained(PG_FUNCTION_ARGS)
 Datum
 jsonb_ne(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jba = PG_GETARG_JSONB(0);
-	Jsonb	   *jbb = PG_GETARG_JSONB(1);
+	Jsonb	   *jba = PG_GETARG_JSONB_P(0);
+	Jsonb	   *jbb = PG_GETARG_JSONB_P(1);
 	bool		res;
 
 	res = (compareJsonbContainers(&jba->root, &jbb->root) != 0);
@@ -166,8 +166,8 @@ jsonb_ne(PG_FUNCTION_ARGS)
 Datum
 jsonb_lt(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jba = PG_GETARG_JSONB(0);
-	Jsonb	   *jbb = PG_GETARG_JSONB(1);
+	Jsonb	   *jba = PG_GETARG_JSONB_P(0);
+	Jsonb	   *jbb = PG_GETARG_JSONB_P(1);
 	bool		res;
 
 	res = (compareJsonbContainers(&jba->root, &jbb->root) < 0);
@@ -180,8 +180,8 @@ jsonb_lt(PG_FUNCTION_ARGS)
 Datum
 jsonb_gt(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jba = PG_GETARG_JSONB(0);
-	Jsonb	   *jbb = PG_GETARG_JSONB(1);
+	Jsonb	   *jba = PG_GETARG_JSONB_P(0);
+	Jsonb	   *jbb = PG_GETARG_JSONB_P(1);
 	bool		res;
 
 	res = (compareJsonbContainers(&jba->root, &jbb->root) > 0);
@@ -194,8 +194,8 @@ jsonb_gt(PG_FUNCTION_ARGS)
 Datum
 jsonb_le(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jba = PG_GETARG_JSONB(0);
-	Jsonb	   *jbb = PG_GETARG_JSONB(1);
+	Jsonb	   *jba = PG_GETARG_JSONB_P(0);
+	Jsonb	   *jbb = PG_GETARG_JSONB_P(1);
 	bool		res;
 
 	res = (compareJsonbContainers(&jba->root, &jbb->root) <= 0);
@@ -208,8 +208,8 @@ jsonb_le(PG_FUNCTION_ARGS)
 Datum
 jsonb_ge(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jba = PG_GETARG_JSONB(0);
-	Jsonb	   *jbb = PG_GETARG_JSONB(1);
+	Jsonb	   *jba = PG_GETARG_JSONB_P(0);
+	Jsonb	   *jbb = PG_GETARG_JSONB_P(1);
 	bool		res;
 
 	res = (compareJsonbContainers(&jba->root, &jbb->root) >= 0);
@@ -222,8 +222,8 @@ jsonb_ge(PG_FUNCTION_ARGS)
 Datum
 jsonb_eq(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jba = PG_GETARG_JSONB(0);
-	Jsonb	   *jbb = PG_GETARG_JSONB(1);
+	Jsonb	   *jba = PG_GETARG_JSONB_P(0);
+	Jsonb	   *jbb = PG_GETARG_JSONB_P(1);
 	bool		res;
 
 	res = (compareJsonbContainers(&jba->root, &jbb->root) == 0);
@@ -236,8 +236,8 @@ jsonb_eq(PG_FUNCTION_ARGS)
 Datum
 jsonb_cmp(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jba = PG_GETARG_JSONB(0);
-	Jsonb	   *jbb = PG_GETARG_JSONB(1);
+	Jsonb	   *jba = PG_GETARG_JSONB_P(0);
+	Jsonb	   *jbb = PG_GETARG_JSONB_P(1);
 	int			res;
 
 	res = compareJsonbContainers(&jba->root, &jbb->root);
@@ -253,7 +253,7 @@ jsonb_cmp(PG_FUNCTION_ARGS)
 Datum
 jsonb_hash(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	JsonbIterator *it;
 	JsonbValue	v;
 	JsonbIteratorToken r;
diff --git a/src/backend/utils/adt/jsonfuncs.c b/src/backend/utils/adt/jsonfuncs.c
index 0db3723..2eda807 100644
--- a/src/backend/utils/adt/jsonfuncs.c
+++ b/src/backend/utils/adt/jsonfuncs.c
@@ -325,7 +325,7 @@ jsonb_object_keys(PG_FUNCTION_ARGS)
 	if (SRF_IS_FIRSTCALL())
 	{
 		MemoryContext oldcontext;
-		Jsonb	   *jb = PG_GETARG_JSONB(0);
+		Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 		bool		skipNested = false;
 		JsonbIterator *it;
 		JsonbValue	v;
@@ -529,7 +529,7 @@ json_object_field(PG_FUNCTION_ARGS)
 Datum
 jsonb_object_field(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	text	   *key = PG_GETARG_TEXT_PP(1);
 	JsonbValue *v;
 
@@ -541,7 +541,7 @@ jsonb_object_field(PG_FUNCTION_ARGS)
 									   VARSIZE_ANY_EXHDR(key));
 
 	if (v != NULL)
-		PG_RETURN_JSONB(JsonbValueToJsonb(v));
+		PG_RETURN_JSONB_P(JsonbValueToJsonb(v));
 
 	PG_RETURN_NULL();
 }
@@ -565,7 +565,7 @@ json_object_field_text(PG_FUNCTION_ARGS)
 Datum
 jsonb_object_field_text(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	text	   *key = PG_GETARG_TEXT_PP(1);
 	JsonbValue *v;
 
@@ -631,7 +631,7 @@ json_array_element(PG_FUNCTION_ARGS)
 Datum
 jsonb_array_element(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	int			element = PG_GETARG_INT32(1);
 	JsonbValue *v;
 
@@ -651,7 +651,7 @@ jsonb_array_element(PG_FUNCTION_ARGS)
 
 	v = getIthJsonbValueFromContainer(&jb->root, element);
 	if (v != NULL)
-		PG_RETURN_JSONB(JsonbValueToJsonb(v));
+		PG_RETURN_JSONB_P(JsonbValueToJsonb(v));
 
 	PG_RETURN_NULL();
 }
@@ -674,7 +674,7 @@ json_array_element_text(PG_FUNCTION_ARGS)
 Datum
 jsonb_array_element_text(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	int			element = PG_GETARG_INT32(1);
 	JsonbValue *v;
 
@@ -1201,7 +1201,7 @@ jsonb_extract_path_text(PG_FUNCTION_ARGS)
 static Datum
 get_jsonb_path_all(FunctionCallInfo fcinfo, bool as_text)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	ArrayType  *path = PG_GETARG_ARRAYTYPE_P(1);
 	Jsonb	   *res;
 	Datum	   *pathtext;
@@ -1261,7 +1261,7 @@ get_jsonb_path_all(FunctionCallInfo fcinfo, bool as_text)
 		else
 		{
 			/* not text mode - just hand back the jsonb */
-			PG_RETURN_JSONB(jb);
+			PG_RETURN_JSONB_P(jb);
 		}
 	}
 
@@ -1359,7 +1359,7 @@ get_jsonb_path_all(FunctionCallInfo fcinfo, bool as_text)
 	else
 	{
 		/* not text mode - just hand back the jsonb */
-		PG_RETURN_JSONB(res);
+		PG_RETURN_JSONB_P(res);
 	}
 }
 
@@ -1397,7 +1397,7 @@ json_array_length(PG_FUNCTION_ARGS)
 Datum
 jsonb_array_length(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 
 	if (JB_ROOT_IS_SCALAR(jb))
 		ereport(ERROR,
@@ -1487,7 +1487,7 @@ jsonb_each_text(PG_FUNCTION_ARGS)
 static Datum
 each_worker_jsonb(FunctionCallInfo fcinfo, const char *funcname, bool as_text)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	ReturnSetInfo *rsi;
 	Tuplestorestate *tuple_store;
 	TupleDesc	tupdesc;
@@ -1802,7 +1802,7 @@ static Datum
 elements_worker_jsonb(FunctionCallInfo fcinfo, const char *funcname,
 					  bool as_text)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	ReturnSetInfo *rsi;
 	Tuplestorestate *tuple_store;
 	TupleDesc	tupdesc;
@@ -2226,7 +2226,7 @@ populate_record_worker(FunctionCallInfo fcinfo, const char *funcname,
 	}
 	else
 	{
-		jb = PG_GETARG_JSONB(json_arg_num);
+		jb = PG_GETARG_JSONB_P(json_arg_num);
 
 		/* same logic as for json */
 		if (JB_ROOT_COUNT(jb) == 0 && rec)
@@ -2821,7 +2821,7 @@ populate_recordset_worker(FunctionCallInfo fcinfo, const char *funcname,
 	}
 	else
 	{
-		Jsonb	   *jb = PG_GETARG_JSONB(json_arg_num);
+		Jsonb	   *jb = PG_GETARG_JSONB_P(json_arg_num);
 		JsonbIterator *it;
 		JsonbValue	v;
 		bool		skipNested = false;
@@ -3259,7 +3259,7 @@ json_strip_nulls(PG_FUNCTION_ARGS)
 Datum
 jsonb_strip_nulls(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	JsonbIterator *it;
 	JsonbParseState *parseState = NULL;
 	JsonbValue *res = NULL;
@@ -3368,7 +3368,7 @@ addJsonbToParseState(JsonbParseState **jbps, Jsonb *jb)
 Datum
 jsonb_pretty(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb = PG_GETARG_JSONB(0);
+	Jsonb	   *jb = PG_GETARG_JSONB_P(0);
 	StringInfo	str = makeStringInfo();
 
 	JsonbToCStringIndent(str, &jb->root, VARSIZE(jb));
@@ -3384,8 +3384,8 @@ jsonb_pretty(PG_FUNCTION_ARGS)
 Datum
 jsonb_concat(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *jb1 = PG_GETARG_JSONB(0);
-	Jsonb	   *jb2 = PG_GETARG_JSONB(1);
+	Jsonb	   *jb1 = PG_GETARG_JSONB_P(0);
+	Jsonb	   *jb2 = PG_GETARG_JSONB_P(1);
 	JsonbParseState *state = NULL;
 	JsonbValue *res;
 	JsonbIterator *it1,
@@ -3400,9 +3400,9 @@ jsonb_concat(PG_FUNCTION_ARGS)
 	if (JB_ROOT_IS_OBJECT(jb1) == JB_ROOT_IS_OBJECT(jb2))
 	{
 		if (JB_ROOT_COUNT(jb1) == 0 && !JB_ROOT_IS_SCALAR(jb2))
-			PG_RETURN_JSONB(jb2);
+			PG_RETURN_JSONB_P(jb2);
 		else if (JB_ROOT_COUNT(jb2) == 0 && !JB_ROOT_IS_SCALAR(jb1))
-			PG_RETURN_JSONB(jb1);
+			PG_RETURN_JSONB_P(jb1);
 	}
 
 	it1 = JsonbIteratorInit(&jb1->root);
@@ -3412,7 +3412,7 @@ jsonb_concat(PG_FUNCTION_ARGS)
 
 	Assert(res != NULL);
 
-	PG_RETURN_JSONB(JsonbValueToJsonb(res));
+	PG_RETURN_JSONB_P(JsonbValueToJsonb(res));
 }
 
 
@@ -3425,7 +3425,7 @@ jsonb_concat(PG_FUNCTION_ARGS)
 Datum
 jsonb_delete(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *in = PG_GETARG_JSONB(0);
+	Jsonb	   *in = PG_GETARG_JSONB_P(0);
 	text	   *key = PG_GETARG_TEXT_PP(1);
 	char	   *keyptr = VARDATA_ANY(key);
 	int			keylen = VARSIZE_ANY_EXHDR(key);
@@ -3442,7 +3442,7 @@ jsonb_delete(PG_FUNCTION_ARGS)
 				 errmsg("cannot delete from scalar")));
 
 	if (JB_ROOT_COUNT(in) == 0)
-		PG_RETURN_JSONB(in);
+		PG_RETURN_JSONB_P(in);
 
 	it = JsonbIteratorInit(&in->root);
 
@@ -3466,7 +3466,7 @@ jsonb_delete(PG_FUNCTION_ARGS)
 
 	Assert(res != NULL);
 
-	PG_RETURN_JSONB(JsonbValueToJsonb(res));
+	PG_RETURN_JSONB_P(JsonbValueToJsonb(res));
 }
 
 /*
@@ -3478,7 +3478,7 @@ jsonb_delete(PG_FUNCTION_ARGS)
 Datum
 jsonb_delete_array(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *in = PG_GETARG_JSONB(0);
+	Jsonb	   *in = PG_GETARG_JSONB_P(0);
 	ArrayType  *keys = PG_GETARG_ARRAYTYPE_P(1);
 	Datum	   *keys_elems;
 	bool	   *keys_nulls;
@@ -3501,13 +3501,13 @@ jsonb_delete_array(PG_FUNCTION_ARGS)
 				 errmsg("cannot delete from scalar")));
 
 	if (JB_ROOT_COUNT(in) == 0)
-		PG_RETURN_JSONB(in);
+		PG_RETURN_JSONB_P(in);
 
 	deconstruct_array(keys, TEXTOID, -1, false, 'i',
 					  &keys_elems, &keys_nulls, &keys_len);
 
 	if (keys_len == 0)
-		PG_RETURN_JSONB(in);
+		PG_RETURN_JSONB_P(in);
 
 	it = JsonbIteratorInit(&in->root);
 
@@ -3552,7 +3552,7 @@ jsonb_delete_array(PG_FUNCTION_ARGS)
 
 	Assert(res != NULL);
 
-	PG_RETURN_JSONB(JsonbValueToJsonb(res));
+	PG_RETURN_JSONB_P(JsonbValueToJsonb(res));
 }
 
 /*
@@ -3565,7 +3565,7 @@ jsonb_delete_array(PG_FUNCTION_ARGS)
 Datum
 jsonb_delete_idx(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *in = PG_GETARG_JSONB(0);
+	Jsonb	   *in = PG_GETARG_JSONB_P(0);
 	int			idx = PG_GETARG_INT32(1);
 	JsonbParseState *state = NULL;
 	JsonbIterator *it;
@@ -3586,7 +3586,7 @@ jsonb_delete_idx(PG_FUNCTION_ARGS)
 				 errmsg("cannot delete from object using integer index")));
 
 	if (JB_ROOT_COUNT(in) == 0)
-		PG_RETURN_JSONB(in);
+		PG_RETURN_JSONB_P(in);
 
 	it = JsonbIteratorInit(&in->root);
 
@@ -3603,7 +3603,7 @@ jsonb_delete_idx(PG_FUNCTION_ARGS)
 	}
 
 	if (idx >= n)
-		PG_RETURN_JSONB(in);
+		PG_RETURN_JSONB_P(in);
 
 	pushJsonbValue(&state, r, NULL);
 
@@ -3620,7 +3620,7 @@ jsonb_delete_idx(PG_FUNCTION_ARGS)
 
 	Assert(res != NULL);
 
-	PG_RETURN_JSONB(JsonbValueToJsonb(res));
+	PG_RETURN_JSONB_P(JsonbValueToJsonb(res));
 }
 
 /*
@@ -3630,9 +3630,9 @@ jsonb_delete_idx(PG_FUNCTION_ARGS)
 Datum
 jsonb_set(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *in = PG_GETARG_JSONB(0);
+	Jsonb	   *in = PG_GETARG_JSONB_P(0);
 	ArrayType  *path = PG_GETARG_ARRAYTYPE_P(1);
-	Jsonb	   *newval = PG_GETARG_JSONB(2);
+	Jsonb	   *newval = PG_GETARG_JSONB_P(2);
 	bool		create = PG_GETARG_BOOL(3);
 	JsonbValue *res = NULL;
 	Datum	   *path_elems;
@@ -3652,13 +3652,13 @@ jsonb_set(PG_FUNCTION_ARGS)
 				 errmsg("cannot set path in scalar")));
 
 	if (JB_ROOT_COUNT(in) == 0 && !create)
-		PG_RETURN_JSONB(in);
+		PG_RETURN_JSONB_P(in);
 
 	deconstruct_array(path, TEXTOID, -1, false, 'i',
 					  &path_elems, &path_nulls, &path_len);
 
 	if (path_len == 0)
-		PG_RETURN_JSONB(in);
+		PG_RETURN_JSONB_P(in);
 
 	it = JsonbIteratorInit(&in->root);
 
@@ -3667,7 +3667,7 @@ jsonb_set(PG_FUNCTION_ARGS)
 
 	Assert(res != NULL);
 
-	PG_RETURN_JSONB(JsonbValueToJsonb(res));
+	PG_RETURN_JSONB_P(JsonbValueToJsonb(res));
 }
 
 
@@ -3677,7 +3677,7 @@ jsonb_set(PG_FUNCTION_ARGS)
 Datum
 jsonb_delete_path(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *in = PG_GETARG_JSONB(0);
+	Jsonb	   *in = PG_GETARG_JSONB_P(0);
 	ArrayType  *path = PG_GETARG_ARRAYTYPE_P(1);
 	JsonbValue *res = NULL;
 	Datum	   *path_elems;
@@ -3697,13 +3697,13 @@ jsonb_delete_path(PG_FUNCTION_ARGS)
 				 errmsg("cannot delete path in scalar")));
 
 	if (JB_ROOT_COUNT(in) == 0)
-		PG_RETURN_JSONB(in);
+		PG_RETURN_JSONB_P(in);
 
 	deconstruct_array(path, TEXTOID, -1, false, 'i',
 					  &path_elems, &path_nulls, &path_len);
 
 	if (path_len == 0)
-		PG_RETURN_JSONB(in);
+		PG_RETURN_JSONB_P(in);
 
 	it = JsonbIteratorInit(&in->root);
 
@@ -3712,7 +3712,7 @@ jsonb_delete_path(PG_FUNCTION_ARGS)
 
 	Assert(res != NULL);
 
-	PG_RETURN_JSONB(JsonbValueToJsonb(res));
+	PG_RETURN_JSONB_P(JsonbValueToJsonb(res));
 }
 
 /*
@@ -3722,9 +3722,9 @@ jsonb_delete_path(PG_FUNCTION_ARGS)
 Datum
 jsonb_insert(PG_FUNCTION_ARGS)
 {
-	Jsonb	   *in = PG_GETARG_JSONB(0);
+	Jsonb	   *in = PG_GETARG_JSONB_P(0);
 	ArrayType  *path = PG_GETARG_ARRAYTYPE_P(1);
-	Jsonb	   *newval = PG_GETARG_JSONB(2);
+	Jsonb	   *newval = PG_GETARG_JSONB_P(2);
 	bool		after = PG_GETARG_BOOL(3);
 	JsonbValue *res = NULL;
 	Datum	   *path_elems;
@@ -3747,7 +3747,7 @@ jsonb_insert(PG_FUNCTION_ARGS)
 					  &path_elems, &path_nulls, &path_len);
 
 	if (path_len == 0)
-		PG_RETURN_JSONB(in);
+		PG_RETURN_JSONB_P(in);
 
 	it = JsonbIteratorInit(&in->root);
 
@@ -3756,7 +3756,7 @@ jsonb_insert(PG_FUNCTION_ARGS)
 
 	Assert(res != NULL);
 
-	PG_RETURN_JSONB(JsonbValueToJsonb(res));
+	PG_RETURN_JSONB_P(JsonbValueToJsonb(res));
 }
 
 /*
diff --git a/src/backend/utils/adt/rangetypes.c b/src/backend/utils/adt/rangetypes.c
index 304345b..18dadd7 100644
--- a/src/backend/utils/adt/rangetypes.c
+++ b/src/backend/utils/adt/rangetypes.c
@@ -115,13 +115,13 @@ range_in(PG_FUNCTION_ARGS)
 	/* serialize and canonicalize */
 	range = make_range(cache->typcache, &lower, &upper, flags & RANGE_EMPTY);
 
-	PG_RETURN_RANGE(range);
+	PG_RETURN_RANGE_P(range);
 }
 
 Datum
 range_out(PG_FUNCTION_ARGS)
 {
-	RangeType  *range = PG_GETARG_RANGE(0);
+	RangeType  *range = PG_GETARG_RANGE_P(0);
 	char	   *output_str;
 	RangeIOData *cache;
 	char		flags;
@@ -238,13 +238,13 @@ range_recv(PG_FUNCTION_ARGS)
 	/* serialize and canonicalize */
 	range = make_range(cache->typcache, &lower, &upper, flags & RANGE_EMPTY);
 
-	PG_RETURN_RANGE(range);
+	PG_RETURN_RANGE_P(range);
 }
 
 Datum
 range_send(PG_FUNCTION_ARGS)
 {
-	RangeType  *range = PG_GETARG_RANGE(0);
+	RangeType  *range = PG_GETARG_RANGE_P(0);
 	StringInfo	buf = makeStringInfo();
 	RangeIOData *cache;
 	char		flags;
@@ -381,7 +381,7 @@ range_constructor2(PG_FUNCTION_ARGS)
 
 	range = make_range(typcache, &lower, &upper, false);
 
-	PG_RETURN_RANGE(range);
+	PG_RETURN_RANGE_P(range);
 }
 
 /* Construct general range value from three arguments */
@@ -418,7 +418,7 @@ range_constructor3(PG_FUNCTION_ARGS)
 
 	range = make_range(typcache, &lower, &upper, false);
 
-	PG_RETURN_RANGE(range);
+	PG_RETURN_RANGE_P(range);
 }
 
 
@@ -428,7 +428,7 @@ range_constructor3(PG_FUNCTION_ARGS)
 Datum
 range_lower(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
 	TypeCacheEntry *typcache;
 	RangeBound	lower;
 	RangeBound	upper;
@@ -449,7 +449,7 @@ range_lower(PG_FUNCTION_ARGS)
 Datum
 range_upper(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
 	TypeCacheEntry *typcache;
 	RangeBound	lower;
 	RangeBound	upper;
@@ -473,7 +473,7 @@ range_upper(PG_FUNCTION_ARGS)
 Datum
 range_empty(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
 	char		flags = range_get_flags(r1);
 
 	PG_RETURN_BOOL(flags & RANGE_EMPTY);
@@ -483,7 +483,7 @@ range_empty(PG_FUNCTION_ARGS)
 Datum
 range_lower_inc(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
 	char		flags = range_get_flags(r1);
 
 	PG_RETURN_BOOL(flags & RANGE_LB_INC);
@@ -493,7 +493,7 @@ range_lower_inc(PG_FUNCTION_ARGS)
 Datum
 range_upper_inc(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
 	char		flags = range_get_flags(r1);
 
 	PG_RETURN_BOOL(flags & RANGE_UB_INC);
@@ -503,7 +503,7 @@ range_upper_inc(PG_FUNCTION_ARGS)
 Datum
 range_lower_inf(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
 	char		flags = range_get_flags(r1);
 
 	PG_RETURN_BOOL(flags & RANGE_LB_INF);
@@ -513,7 +513,7 @@ range_lower_inf(PG_FUNCTION_ARGS)
 Datum
 range_upper_inf(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
 	char		flags = range_get_flags(r1);
 
 	PG_RETURN_BOOL(flags & RANGE_UB_INF);
@@ -526,7 +526,7 @@ range_upper_inf(PG_FUNCTION_ARGS)
 Datum
 range_contains_elem(PG_FUNCTION_ARGS)
 {
-	RangeType  *r = PG_GETARG_RANGE(0);
+	RangeType  *r = PG_GETARG_RANGE_P(0);
 	Datum		val = PG_GETARG_DATUM(1);
 	TypeCacheEntry *typcache;
 
@@ -540,7 +540,7 @@ Datum
 elem_contained_by_range(PG_FUNCTION_ARGS)
 {
 	Datum		val = PG_GETARG_DATUM(0);
-	RangeType  *r = PG_GETARG_RANGE(1);
+	RangeType  *r = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(r));
@@ -587,8 +587,8 @@ range_eq_internal(TypeCacheEntry *typcache, RangeType *r1, RangeType *r2)
 Datum
 range_eq(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(r1));
@@ -607,8 +607,8 @@ range_ne_internal(TypeCacheEntry *typcache, RangeType *r1, RangeType *r2)
 Datum
 range_ne(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(r1));
@@ -620,8 +620,8 @@ range_ne(PG_FUNCTION_ARGS)
 Datum
 range_contains(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(r1));
@@ -633,8 +633,8 @@ range_contains(PG_FUNCTION_ARGS)
 Datum
 range_contained_by(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(r1));
@@ -671,8 +671,8 @@ range_before_internal(TypeCacheEntry *typcache, RangeType *r1, RangeType *r2)
 Datum
 range_before(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(r1));
@@ -709,8 +709,8 @@ range_after_internal(TypeCacheEntry *typcache, RangeType *r1, RangeType *r2)
 Datum
 range_after(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(r1));
@@ -810,8 +810,8 @@ range_adjacent_internal(TypeCacheEntry *typcache, RangeType *r1, RangeType *r2)
 Datum
 range_adjacent(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(r1));
@@ -856,8 +856,8 @@ range_overlaps_internal(TypeCacheEntry *typcache, RangeType *r1, RangeType *r2)
 Datum
 range_overlaps(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(r1));
@@ -897,8 +897,8 @@ range_overleft_internal(TypeCacheEntry *typcache, RangeType *r1, RangeType *r2)
 Datum
 range_overleft(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(r1));
@@ -938,8 +938,8 @@ range_overright_internal(TypeCacheEntry *typcache, RangeType *r1, RangeType *r2)
 Datum
 range_overright(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(r1));
@@ -954,8 +954,8 @@ range_overright(PG_FUNCTION_ARGS)
 Datum
 range_minus(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 	RangeBound	lower1,
 				lower2;
@@ -979,7 +979,7 @@ range_minus(PG_FUNCTION_ARGS)
 
 	/* if either is empty, r1 is the correct answer */
 	if (empty1 || empty2)
-		PG_RETURN_RANGE(r1);
+		PG_RETURN_RANGE_P(r1);
 
 	cmp_l1l2 = range_cmp_bounds(typcache, &lower1, &lower2);
 	cmp_l1u2 = range_cmp_bounds(typcache, &lower1, &upper2);
@@ -992,23 +992,23 @@ range_minus(PG_FUNCTION_ARGS)
 			  errmsg("result of range difference would not be contiguous")));
 
 	if (cmp_l1u2 > 0 || cmp_u1l2 < 0)
-		PG_RETURN_RANGE(r1);
+		PG_RETURN_RANGE_P(r1);
 
 	if (cmp_l1l2 >= 0 && cmp_u1u2 <= 0)
-		PG_RETURN_RANGE(make_empty_range(typcache));
+		PG_RETURN_RANGE_P(make_empty_range(typcache));
 
 	if (cmp_l1l2 <= 0 && cmp_u1l2 >= 0 && cmp_u1u2 <= 0)
 	{
 		lower2.inclusive = !lower2.inclusive;
 		lower2.lower = false;	/* it will become the upper bound */
-		PG_RETURN_RANGE(make_range(typcache, &lower1, &lower2, false));
+		PG_RETURN_RANGE_P(make_range(typcache, &lower1, &lower2, false));
 	}
 
 	if (cmp_l1l2 >= 0 && cmp_u1u2 >= 0 && cmp_l1u2 <= 0)
 	{
 		upper2.inclusive = !upper2.inclusive;
 		upper2.lower = true;	/* it will become the lower bound */
-		PG_RETURN_RANGE(make_range(typcache, &upper2, &upper1, false));
+		PG_RETURN_RANGE_P(make_range(typcache, &upper2, &upper1, false));
 	}
 
 	elog(ERROR, "unexpected case in range_minus");
@@ -1068,13 +1068,13 @@ range_union_internal(TypeCacheEntry *typcache, RangeType *r1, RangeType *r2,
 Datum
 range_union(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(r1));
 
-	PG_RETURN_RANGE(range_union_internal(typcache, r1, r2, true));
+	PG_RETURN_RANGE_P(range_union_internal(typcache, r1, r2, true));
 }
 
 /*
@@ -1084,21 +1084,21 @@ range_union(PG_FUNCTION_ARGS)
 Datum
 range_merge(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(r1));
 
-	PG_RETURN_RANGE(range_union_internal(typcache, r1, r2, false));
+	PG_RETURN_RANGE_P(range_union_internal(typcache, r1, r2, false));
 }
 
 /* set intersection */
 Datum
 range_intersect(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 	RangeBound	lower1,
 				lower2;
@@ -1119,7 +1119,7 @@ range_intersect(PG_FUNCTION_ARGS)
 	range_deserialize(typcache, r2, &lower2, &upper2, &empty2);
 
 	if (empty1 || empty2 || !DatumGetBool(range_overlaps(fcinfo)))
-		PG_RETURN_RANGE(make_empty_range(typcache));
+		PG_RETURN_RANGE_P(make_empty_range(typcache));
 
 	if (range_cmp_bounds(typcache, &lower1, &lower2) >= 0)
 		result_lower = &lower1;
@@ -1131,7 +1131,7 @@ range_intersect(PG_FUNCTION_ARGS)
 	else
 		result_upper = &upper2;
 
-	PG_RETURN_RANGE(make_range(typcache, result_lower, result_upper, false));
+	PG_RETURN_RANGE_P(make_range(typcache, result_lower, result_upper, false));
 }
 
 /* Btree support */
@@ -1140,8 +1140,8 @@ range_intersect(PG_FUNCTION_ARGS)
 Datum
 range_cmp(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	TypeCacheEntry *typcache;
 	RangeBound	lower1,
 				lower2;
@@ -1221,7 +1221,7 @@ range_gt(PG_FUNCTION_ARGS)
 Datum
 hash_range(PG_FUNCTION_ARGS)
 {
-	RangeType  *r = PG_GETARG_RANGE(0);
+	RangeType  *r = PG_GETARG_RANGE_P(0);
 	uint32		result;
 	TypeCacheEntry *typcache;
 	TypeCacheEntry *scache;
@@ -1291,7 +1291,7 @@ hash_range(PG_FUNCTION_ARGS)
 Datum
 int4range_canonical(PG_FUNCTION_ARGS)
 {
-	RangeType  *r = PG_GETARG_RANGE(0);
+	RangeType  *r = PG_GETARG_RANGE_P(0);
 	TypeCacheEntry *typcache;
 	RangeBound	lower;
 	RangeBound	upper;
@@ -1302,7 +1302,7 @@ int4range_canonical(PG_FUNCTION_ARGS)
 	range_deserialize(typcache, r, &lower, &upper, &empty);
 
 	if (empty)
-		PG_RETURN_RANGE(r);
+		PG_RETURN_RANGE_P(r);
 
 	if (!lower.infinite && !lower.inclusive)
 	{
@@ -1316,13 +1316,13 @@ int4range_canonical(PG_FUNCTION_ARGS)
 		upper.inclusive = false;
 	}
 
-	PG_RETURN_RANGE(range_serialize(typcache, &lower, &upper, false));
+	PG_RETURN_RANGE_P(range_serialize(typcache, &lower, &upper, false));
 }
 
 Datum
 int8range_canonical(PG_FUNCTION_ARGS)
 {
-	RangeType  *r = PG_GETARG_RANGE(0);
+	RangeType  *r = PG_GETARG_RANGE_P(0);
 	TypeCacheEntry *typcache;
 	RangeBound	lower;
 	RangeBound	upper;
@@ -1333,7 +1333,7 @@ int8range_canonical(PG_FUNCTION_ARGS)
 	range_deserialize(typcache, r, &lower, &upper, &empty);
 
 	if (empty)
-		PG_RETURN_RANGE(r);
+		PG_RETURN_RANGE_P(r);
 
 	if (!lower.infinite && !lower.inclusive)
 	{
@@ -1347,13 +1347,13 @@ int8range_canonical(PG_FUNCTION_ARGS)
 		upper.inclusive = false;
 	}
 
-	PG_RETURN_RANGE(range_serialize(typcache, &lower, &upper, false));
+	PG_RETURN_RANGE_P(range_serialize(typcache, &lower, &upper, false));
 }
 
 Datum
 daterange_canonical(PG_FUNCTION_ARGS)
 {
-	RangeType  *r = PG_GETARG_RANGE(0);
+	RangeType  *r = PG_GETARG_RANGE_P(0);
 	TypeCacheEntry *typcache;
 	RangeBound	lower;
 	RangeBound	upper;
@@ -1364,7 +1364,7 @@ daterange_canonical(PG_FUNCTION_ARGS)
 	range_deserialize(typcache, r, &lower, &upper, &empty);
 
 	if (empty)
-		PG_RETURN_RANGE(r);
+		PG_RETURN_RANGE_P(r);
 
 	if (!lower.infinite && !lower.inclusive)
 	{
@@ -1378,7 +1378,7 @@ daterange_canonical(PG_FUNCTION_ARGS)
 		upper.inclusive = false;
 	}
 
-	PG_RETURN_RANGE(range_serialize(typcache, &lower, &upper, false));
+	PG_RETURN_RANGE_P(range_serialize(typcache, &lower, &upper, false));
 }
 
 /*
@@ -1735,8 +1735,8 @@ make_range(TypeCacheEntry *typcache, RangeBound *lower, RangeBound *upper,
 	/* no need to call canonical on empty ranges ... */
 	if (OidIsValid(typcache->rng_canonical_finfo.fn_oid) &&
 		!RangeIsEmpty(range))
-		range = DatumGetRangeType(FunctionCall1(&typcache->rng_canonical_finfo,
-												RangeTypeGetDatum(range)));
+		range = DatumGetRangeTypeP(FunctionCall1(&typcache->rng_canonical_finfo,
+												RangeTypePGetDatum(range)));
 
 	return range;
 }
diff --git a/src/backend/utils/adt/rangetypes_gist.c b/src/backend/utils/adt/rangetypes_gist.c
index f81b16c..bda06fb 100644
--- a/src/backend/utils/adt/rangetypes_gist.c
+++ b/src/backend/utils/adt/rangetypes_gist.c
@@ -177,7 +177,7 @@ range_gist_consistent(PG_FUNCTION_ARGS)
 
 	/* Oid subtype = PG_GETARG_OID(3); */
 	bool	   *recheck = (bool *) PG_GETARG_POINTER(4);
-	RangeType  *key = DatumGetRangeType(entry->key);
+	RangeType  *key = DatumGetRangeTypeP(entry->key);
 	TypeCacheEntry *typcache;
 
 	/* All operators served by this function are exact */
@@ -203,17 +203,17 @@ range_gist_union(PG_FUNCTION_ARGS)
 	TypeCacheEntry *typcache;
 	int			i;
 
-	result_range = DatumGetRangeType(ent[0].key);
+	result_range = DatumGetRangeTypeP(ent[0].key);
 
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(result_range));
 
 	for (i = 1; i < entryvec->n; i++)
 	{
 		result_range = range_super_union(typcache, result_range,
-										 DatumGetRangeType(ent[i].key));
+										 DatumGetRangeTypeP(ent[i].key));
 	}
 
-	PG_RETURN_RANGE(result_range);
+	PG_RETURN_RANGE_P(result_range);
 }
 
 /* compress, decompress, fetch are no-ops */
@@ -257,8 +257,8 @@ range_gist_penalty(PG_FUNCTION_ARGS)
 	GISTENTRY  *origentry = (GISTENTRY *) PG_GETARG_POINTER(0);
 	GISTENTRY  *newentry = (GISTENTRY *) PG_GETARG_POINTER(1);
 	float	   *penalty = (float *) PG_GETARG_POINTER(2);
-	RangeType  *orig = DatumGetRangeType(origentry->key);
-	RangeType  *new = DatumGetRangeType(newentry->key);
+	RangeType  *orig = DatumGetRangeTypeP(origentry->key);
+	RangeType  *new = DatumGetRangeTypeP(newentry->key);
 	TypeCacheEntry *typcache;
 	bool		has_subtype_diff;
 	RangeBound	orig_lower,
@@ -526,7 +526,7 @@ range_gist_picksplit(PG_FUNCTION_ARGS)
 	int			total_count;
 
 	/* use first item to look up range type's info */
-	pred_left = DatumGetRangeType(entryvec->vector[FirstOffsetNumber].key);
+	pred_left = DatumGetRangeTypeP(entryvec->vector[FirstOffsetNumber].key);
 	typcache = range_get_typcache(fcinfo, RangeTypeGetOid(pred_left));
 
 	maxoff = entryvec->n - 1;
@@ -540,7 +540,7 @@ range_gist_picksplit(PG_FUNCTION_ARGS)
 	memset(count_in_classes, 0, sizeof(count_in_classes));
 	for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i))
 	{
-		RangeType  *range = DatumGetRangeType(entryvec->vector[i].key);
+		RangeType  *range = DatumGetRangeTypeP(entryvec->vector[i].key);
 
 		count_in_classes[get_gist_range_class(range)]++;
 	}
@@ -670,8 +670,8 @@ range_gist_picksplit(PG_FUNCTION_ARGS)
 Datum
 range_gist_same(PG_FUNCTION_ARGS)
 {
-	RangeType  *r1 = PG_GETARG_RANGE(0);
-	RangeType  *r2 = PG_GETARG_RANGE(1);
+	RangeType  *r1 = PG_GETARG_RANGE_P(0);
+	RangeType  *r2 = PG_GETARG_RANGE_P(1);
 	bool	   *result = (bool *) PG_GETARG_POINTER(2);
 
 	/*
@@ -787,39 +787,39 @@ range_gist_consistent_int(TypeCacheEntry *typcache, StrategyNumber strategy,
 	switch (strategy)
 	{
 		case RANGESTRAT_BEFORE:
-			if (RangeIsEmpty(key) || RangeIsEmpty(DatumGetRangeType(query)))
+			if (RangeIsEmpty(key) || RangeIsEmpty(DatumGetRangeTypeP(query)))
 				return false;
 			return (!range_overright_internal(typcache, key,
-											  DatumGetRangeType(query)));
+											  DatumGetRangeTypeP(query)));
 		case RANGESTRAT_OVERLEFT:
-			if (RangeIsEmpty(key) || RangeIsEmpty(DatumGetRangeType(query)))
+			if (RangeIsEmpty(key) || RangeIsEmpty(DatumGetRangeTypeP(query)))
 				return false;
 			return (!range_after_internal(typcache, key,
-										  DatumGetRangeType(query)));
+										  DatumGetRangeTypeP(query)));
 		case RANGESTRAT_OVERLAPS:
 			return range_overlaps_internal(typcache, key,
-										   DatumGetRangeType(query));
+										   DatumGetRangeTypeP(query));
 		case RANGESTRAT_OVERRIGHT:
-			if (RangeIsEmpty(key) || RangeIsEmpty(DatumGetRangeType(query)))
+			if (RangeIsEmpty(key) || RangeIsEmpty(DatumGetRangeTypeP(query)))
 				return false;
 			return (!range_before_internal(typcache, key,
-										   DatumGetRangeType(query)));
+										   DatumGetRangeTypeP(query)));
 		case RANGESTRAT_AFTER:
-			if (RangeIsEmpty(key) || RangeIsEmpty(DatumGetRangeType(query)))
+			if (RangeIsEmpty(key) || RangeIsEmpty(DatumGetRangeTypeP(query)))
 				return false;
 			return (!range_overleft_internal(typcache, key,
-											 DatumGetRangeType(query)));
+											 DatumGetRangeTypeP(query)));
 		case RANGESTRAT_ADJACENT:
-			if (RangeIsEmpty(key) || RangeIsEmpty(DatumGetRangeType(query)))
+			if (RangeIsEmpty(key) || RangeIsEmpty(DatumGetRangeTypeP(query)))
 				return false;
 			if (range_adjacent_internal(typcache, key,
-										DatumGetRangeType(query)))
+										DatumGetRangeTypeP(query)))
 				return true;
 			return range_overlaps_internal(typcache, key,
-										   DatumGetRangeType(query));
+										   DatumGetRangeTypeP(query));
 		case RANGESTRAT_CONTAINS:
 			return range_contains_internal(typcache, key,
-										   DatumGetRangeType(query));
+										   DatumGetRangeTypeP(query));
 		case RANGESTRAT_CONTAINED_BY:
 
 			/*
@@ -830,7 +830,7 @@ range_gist_consistent_int(TypeCacheEntry *typcache, StrategyNumber strategy,
 			if (RangeIsOrContainsEmpty(key))
 				return true;
 			return range_overlaps_internal(typcache, key,
-										   DatumGetRangeType(query));
+										   DatumGetRangeTypeP(query));
 		case RANGESTRAT_CONTAINS_ELEM:
 			return range_contains_elem_internal(typcache, key, query);
 		case RANGESTRAT_EQ:
@@ -839,10 +839,10 @@ range_gist_consistent_int(TypeCacheEntry *typcache, StrategyNumber strategy,
 			 * If query is empty, descend only if the key is or contains any
 			 * empty ranges.  Otherwise, descend if key contains query.
 			 */
-			if (RangeIsEmpty(DatumGetRangeType(query)))
+			if (RangeIsEmpty(DatumGetRangeTypeP(query)))
 				return RangeIsOrContainsEmpty(key);
 			return range_contains_internal(typcache, key,
-										   DatumGetRangeType(query));
+										   DatumGetRangeTypeP(query));
 		default:
 			elog(ERROR, "unrecognized range strategy: %d", strategy);
 			return false;		/* keep compiler quiet */
@@ -860,32 +860,32 @@ range_gist_consistent_leaf(TypeCacheEntry *typcache, StrategyNumber strategy,
 	{
 		case RANGESTRAT_BEFORE:
 			return range_before_internal(typcache, key,
-										 DatumGetRangeType(query));
+										 DatumGetRangeTypeP(query));
 		case RANGESTRAT_OVERLEFT:
 			return range_overleft_internal(typcache, key,
-										   DatumGetRangeType(query));
+										   DatumGetRangeTypeP(query));
 		case RANGESTRAT_OVERLAPS:
 			return range_overlaps_internal(typcache, key,
-										   DatumGetRangeType(query));
+										   DatumGetRangeTypeP(query));
 		case RANGESTRAT_OVERRIGHT:
 			return range_overright_internal(typcache, key,
-											DatumGetRangeType(query));
+											DatumGetRangeTypeP(query));
 		case RANGESTRAT_AFTER:
 			return range_after_internal(typcache, key,
-										DatumGetRangeType(query));
+										DatumGetRangeTypeP(query));
 		case RANGESTRAT_ADJACENT:
 			return range_adjacent_internal(typcache, key,
-										   DatumGetRangeType(query));
+										   DatumGetRangeTypeP(query));
 		case RANGESTRAT_CONTAINS:
 			return range_contains_internal(typcache, key,
-										   DatumGetRangeType(query));
+										   DatumGetRangeTypeP(query));
 		case RANGESTRAT_CONTAINED_BY:
 			return range_contained_by_internal(typcache, key,
-											   DatumGetRangeType(query));
+											   DatumGetRangeTypeP(query));
 		case RANGESTRAT_CONTAINS_ELEM:
 			return range_contains_elem_internal(typcache, key, query);
 		case RANGESTRAT_EQ:
-			return range_eq_internal(typcache, key, DatumGetRangeType(query));
+			return range_eq_internal(typcache, key, DatumGetRangeTypeP(query));
 		default:
 			elog(ERROR, "unrecognized range strategy: %d", strategy);
 			return false;		/* keep compiler quiet */
@@ -915,7 +915,7 @@ range_gist_fallback_split(TypeCacheEntry *typcache,
 	v->spl_nright = 0;
 	for (i = FirstOffsetNumber; i <= maxoff; i++)
 	{
-		RangeType  *range = DatumGetRangeType(entryvec->vector[i].key);
+		RangeType  *range = DatumGetRangeTypeP(entryvec->vector[i].key);
 
 		if (i < split_idx)
 			PLACE_LEFT(range, i);
@@ -923,8 +923,8 @@ range_gist_fallback_split(TypeCacheEntry *typcache,
 			PLACE_RIGHT(range, i);
 	}
 
-	v->spl_ldatum = RangeTypeGetDatum(left_range);
-	v->spl_rdatum = RangeTypeGetDatum(right_range);
+	v->spl_ldatum = RangeTypePGetDatum(left_range);
+	v->spl_rdatum = RangeTypePGetDatum(right_range);
 }
 
 /*
@@ -951,7 +951,7 @@ range_gist_class_split(TypeCacheEntry *typcache,
 	v->spl_nright = 0;
 	for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i))
 	{
-		RangeType  *range = DatumGetRangeType(entryvec->vector[i].key);
+		RangeType  *range = DatumGetRangeTypeP(entryvec->vector[i].key);
 		int			class;
 
 		/* Get class of range */
@@ -967,8 +967,8 @@ range_gist_class_split(TypeCacheEntry *typcache,
 		}
 	}
 
-	v->spl_ldatum = RangeTypeGetDatum(left_range);
-	v->spl_rdatum = RangeTypeGetDatum(right_range);
+	v->spl_ldatum = RangeTypePGetDatum(left_range);
+	v->spl_rdatum = RangeTypePGetDatum(right_range);
 }
 
 /*
@@ -1000,7 +1000,7 @@ range_gist_single_sorting_split(TypeCacheEntry *typcache,
 	 */
 	for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i))
 	{
-		RangeType  *range = DatumGetRangeType(entryvec->vector[i].key);
+		RangeType  *range = DatumGetRangeTypeP(entryvec->vector[i].key);
 		RangeBound	bound2;
 		bool		empty;
 
@@ -1026,7 +1026,7 @@ range_gist_single_sorting_split(TypeCacheEntry *typcache,
 	for (i = 0; i < maxoff; i++)
 	{
 		int			idx = sortItems[i].index;
-		RangeType  *range = DatumGetRangeType(entryvec->vector[idx].key);
+		RangeType  *range = DatumGetRangeTypeP(entryvec->vector[idx].key);
 
 		if (i < split_idx)
 			PLACE_LEFT(range, idx);
@@ -1034,8 +1034,8 @@ range_gist_single_sorting_split(TypeCacheEntry *typcache,
 			PLACE_RIGHT(range, idx);
 	}
 
-	v->spl_ldatum = RangeTypeGetDatum(left_range);
-	v->spl_rdatum = RangeTypeGetDatum(right_range);
+	v->spl_ldatum = RangeTypePGetDatum(left_range);
+	v->spl_rdatum = RangeTypePGetDatum(right_range);
 }
 
 /*
@@ -1102,7 +1102,7 @@ range_gist_double_sorting_split(TypeCacheEntry *typcache,
 	/* Fill arrays of bounds */
 	for (i = FirstOffsetNumber; i <= maxoff; i = OffsetNumberNext(i))
 	{
-		RangeType  *range = DatumGetRangeType(entryvec->vector[i].key);
+		RangeType  *range = DatumGetRangeTypeP(entryvec->vector[i].key);
 		bool		empty;
 
 		range_deserialize(typcache, range,
@@ -1277,7 +1277,7 @@ range_gist_double_sorting_split(TypeCacheEntry *typcache,
 		/*
 		 * Get upper and lower bounds along selected axis.
 		 */
-		range = DatumGetRangeType(entryvec->vector[i].key);
+		range = DatumGetRangeTypeP(entryvec->vector[i].key);
 
 		range_deserialize(typcache, range, &lower, &upper, &empty);
 
@@ -1347,7 +1347,7 @@ range_gist_double_sorting_split(TypeCacheEntry *typcache,
 		{
 			int			idx = common_entries[i].index;
 
-			range = DatumGetRangeType(entryvec->vector[idx].key);
+			range = DatumGetRangeTypeP(entryvec->vector[idx].key);
 
 			/*
 			 * Check if we have to place this entry in either group to achieve
diff --git a/src/backend/utils/adt/rangetypes_selfuncs.c b/src/backend/utils/adt/rangetypes_selfuncs.c
index 2997edd..b4ff499 100644
--- a/src/backend/utils/adt/rangetypes_selfuncs.c
+++ b/src/backend/utils/adt/rangetypes_selfuncs.c
@@ -202,7 +202,7 @@ rangesel(PG_FUNCTION_ARGS)
 		/* Both sides are the same range type */
 		typcache = range_get_typcache(fcinfo, vardata.vartype);
 
-		constrange = DatumGetRangeType(((Const *) other)->constvalue);
+		constrange = DatumGetRangeTypeP(((Const *) other)->constvalue);
 	}
 
 	/*
@@ -401,7 +401,7 @@ calc_hist_selectivity(TypeCacheEntry *typcache, VariableStatData *vardata,
 	hist_upper = (RangeBound *) palloc(sizeof(RangeBound) * nhist);
 	for (i = 0; i < nhist; i++)
 	{
-		range_deserialize(typcache, DatumGetRangeType(hist_values[i]),
+		range_deserialize(typcache, DatumGetRangeTypeP(hist_values[i]),
 						  &hist_lower[i], &hist_upper[i], &empty);
 		/* The histogram should not contain any empty ranges */
 		if (empty)
diff --git a/src/backend/utils/adt/rangetypes_spgist.c b/src/backend/utils/adt/rangetypes_spgist.c
index a887e55..33c220b 100644
--- a/src/backend/utils/adt/rangetypes_spgist.c
+++ b/src/backend/utils/adt/rangetypes_spgist.c
@@ -132,7 +132,7 @@ spg_range_quad_choose(PG_FUNCTION_ARGS)
 {
 	spgChooseIn *in = (spgChooseIn *) PG_GETARG_POINTER(0);
 	spgChooseOut *out = (spgChooseOut *) PG_GETARG_POINTER(1);
-	RangeType  *inRange = DatumGetRangeType(in->datum),
+	RangeType  *inRange = DatumGetRangeTypeP(in->datum),
 			   *centroid;
 	int16		quadrant;
 	TypeCacheEntry *typcache;
@@ -142,7 +142,7 @@ spg_range_quad_choose(PG_FUNCTION_ARGS)
 		out->resultType = spgMatchNode;
 		/* nodeN will be set by core */
 		out->result.matchNode.levelAdd = 0;
-		out->result.matchNode.restDatum = RangeTypeGetDatum(inRange);
+		out->result.matchNode.restDatum = RangeTypePGetDatum(inRange);
 		PG_RETURN_VOID();
 	}
 
@@ -161,11 +161,11 @@ spg_range_quad_choose(PG_FUNCTION_ARGS)
 		else
 			out->result.matchNode.nodeN = 1;
 		out->result.matchNode.levelAdd = 1;
-		out->result.matchNode.restDatum = RangeTypeGetDatum(inRange);
+		out->result.matchNode.restDatum = RangeTypePGetDatum(inRange);
 		PG_RETURN_VOID();
 	}
 
-	centroid = DatumGetRangeType(in->prefixDatum);
+	centroid = DatumGetRangeTypeP(in->prefixDatum);
 	quadrant = getQuadrant(typcache, centroid, inRange);
 
 	Assert(quadrant <= in->nNodes);
@@ -174,7 +174,7 @@ spg_range_quad_choose(PG_FUNCTION_ARGS)
 	out->resultType = spgMatchNode;
 	out->result.matchNode.nodeN = quadrant - 1;
 	out->result.matchNode.levelAdd = 1;
-	out->result.matchNode.restDatum = RangeTypeGetDatum(inRange);
+	out->result.matchNode.restDatum = RangeTypePGetDatum(inRange);
 
 	PG_RETURN_VOID();
 }
@@ -213,7 +213,7 @@ spg_range_quad_picksplit(PG_FUNCTION_ARGS)
 			   *upperBounds;
 
 	typcache = range_get_typcache(fcinfo,
-						  RangeTypeGetOid(DatumGetRangeType(in->datums[0])));
+						  RangeTypeGetOid(DatumGetRangeTypeP(in->datums[0])));
 
 	/* Allocate memory for bounds */
 	lowerBounds = palloc(sizeof(RangeBound) * in->nTuples);
@@ -223,7 +223,7 @@ spg_range_quad_picksplit(PG_FUNCTION_ARGS)
 	/* Deserialize bounds of ranges, count non-empty ranges */
 	for (i = 0; i < in->nTuples; i++)
 	{
-		range_deserialize(typcache, DatumGetRangeType(in->datums[i]),
+		range_deserialize(typcache, DatumGetRangeTypeP(in->datums[i]),
 						  &lowerBounds[j], &upperBounds[j], &empty);
 		if (!empty)
 			j++;
@@ -249,9 +249,9 @@ spg_range_quad_picksplit(PG_FUNCTION_ARGS)
 		/* Place all ranges into node 0 */
 		for (i = 0; i < in->nTuples; i++)
 		{
-			RangeType  *range = DatumGetRangeType(in->datums[i]);
+			RangeType  *range = DatumGetRangeTypeP(in->datums[i]);
 
-			out->leafTupleDatums[i] = RangeTypeGetDatum(range);
+			out->leafTupleDatums[i] = RangeTypePGetDatum(range);
 			out->mapTuplesToNodes[i] = 0;
 		}
 		PG_RETURN_VOID();
@@ -267,7 +267,7 @@ spg_range_quad_picksplit(PG_FUNCTION_ARGS)
 	centroid = range_serialize(typcache, &lowerBounds[nonEmptyCount / 2],
 							   &upperBounds[nonEmptyCount / 2], false);
 	out->hasPrefix = true;
-	out->prefixDatum = RangeTypeGetDatum(centroid);
+	out->prefixDatum = RangeTypePGetDatum(centroid);
 
 	/* Create node for empty ranges only if it is a root node */
 	out->nNodes = (in->level == 0) ? 5 : 4;
@@ -282,10 +282,10 @@ spg_range_quad_picksplit(PG_FUNCTION_ARGS)
 	 */
 	for (i = 0; i < in->nTuples; i++)
 	{
-		RangeType  *range = DatumGetRangeType(in->datums[i]);
+		RangeType  *range = DatumGetRangeTypeP(in->datums[i]);
 		int16		quadrant = getQuadrant(typcache, centroid, range);
 
-		out->leafTupleDatums[i] = RangeTypeGetDatum(range);
+		out->leafTupleDatums[i] = RangeTypePGetDatum(range);
 		out->mapTuplesToNodes[i] = quadrant - 1;
 	}
 
@@ -347,7 +347,7 @@ spg_range_quad_inner_consistent(PG_FUNCTION_ARGS)
 			 */
 			if (strategy != RANGESTRAT_CONTAINS_ELEM)
 				empty = RangeIsEmpty(
-							 DatumGetRangeType(in->scankeys[i].sk_argument));
+							 DatumGetRangeTypeP(in->scankeys[i].sk_argument));
 			else
 				empty = false;
 
@@ -415,9 +415,9 @@ spg_range_quad_inner_consistent(PG_FUNCTION_ARGS)
 		RangeType  *centroid;
 
 		/* This node has a centroid. Fetch it. */
-		centroid = DatumGetRangeType(in->prefixDatum);
+		centroid = DatumGetRangeTypeP(in->prefixDatum);
 		typcache = range_get_typcache(fcinfo,
-							   RangeTypeGetOid(DatumGetRangeType(centroid)));
+							   RangeTypeGetOid(DatumGetRangeTypeP(centroid)));
 		range_deserialize(typcache, centroid, &centroidLower, &centroidUpper,
 						  &centroidEmpty);
 
@@ -482,7 +482,7 @@ spg_range_quad_inner_consistent(PG_FUNCTION_ARGS)
 			}
 			else
 			{
-				range = DatumGetRangeType(in->scankeys[i].sk_argument);
+				range = DatumGetRangeTypeP(in->scankeys[i].sk_argument);
 				range_deserialize(typcache, range, &lower, &upper, &empty);
 			}
 
@@ -558,7 +558,7 @@ spg_range_quad_inner_consistent(PG_FUNCTION_ARGS)
 					 */
 					if (in->traversalValue != (Datum) 0)
 					{
-						prevCentroid = DatumGetRangeType(in->traversalValue);
+						prevCentroid = DatumGetRangeTypeP(in->traversalValue);
 						range_deserialize(typcache, prevCentroid,
 										  &prevLower, &prevUpper, &prevEmpty);
 					}
@@ -921,7 +921,7 @@ spg_range_quad_leaf_consistent(PG_FUNCTION_ARGS)
 {
 	spgLeafConsistentIn *in = (spgLeafConsistentIn *) PG_GETARG_POINTER(0);
 	spgLeafConsistentOut *out = (spgLeafConsistentOut *) PG_GETARG_POINTER(1);
-	RangeType  *leafRange = DatumGetRangeType(in->leafDatum);
+	RangeType  *leafRange = DatumGetRangeTypeP(in->leafDatum);
 	TypeCacheEntry *typcache;
 	bool		res;
 	int			i;
@@ -945,35 +945,35 @@ spg_range_quad_leaf_consistent(PG_FUNCTION_ARGS)
 		{
 			case RANGESTRAT_BEFORE:
 				res = range_before_internal(typcache, leafRange,
-											DatumGetRangeType(keyDatum));
+											DatumGetRangeTypeP(keyDatum));
 				break;
 			case RANGESTRAT_OVERLEFT:
 				res = range_overleft_internal(typcache, leafRange,
-											  DatumGetRangeType(keyDatum));
+											  DatumGetRangeTypeP(keyDatum));
 				break;
 			case RANGESTRAT_OVERLAPS:
 				res = range_overlaps_internal(typcache, leafRange,
-											  DatumGetRangeType(keyDatum));
+											  DatumGetRangeTypeP(keyDatum));
 				break;
 			case RANGESTRAT_OVERRIGHT:
 				res = range_overright_internal(typcache, leafRange,
-											   DatumGetRangeType(keyDatum));
+											   DatumGetRangeTypeP(keyDatum));
 				break;
 			case RANGESTRAT_AFTER:
 				res = range_after_internal(typcache, leafRange,
-										   DatumGetRangeType(keyDatum));
+										   DatumGetRangeTypeP(keyDatum));
 				break;
 			case RANGESTRAT_ADJACENT:
 				res = range_adjacent_internal(typcache, leafRange,
-											  DatumGetRangeType(keyDatum));
+											  DatumGetRangeTypeP(keyDatum));
 				break;
 			case RANGESTRAT_CONTAINS:
 				res = range_contains_internal(typcache, leafRange,
-											  DatumGetRangeType(keyDatum));
+											  DatumGetRangeTypeP(keyDatum));
 				break;
 			case RANGESTRAT_CONTAINED_BY:
 				res = range_contained_by_internal(typcache, leafRange,
-												DatumGetRangeType(keyDatum));
+												DatumGetRangeTypeP(keyDatum));
 				break;
 			case RANGESTRAT_CONTAINS_ELEM:
 				res = range_contains_elem_internal(typcache, leafRange,
@@ -981,7 +981,7 @@ spg_range_quad_leaf_consistent(PG_FUNCTION_ARGS)
 				break;
 			case RANGESTRAT_EQ:
 				res = range_eq_internal(typcache, leafRange,
-										DatumGetRangeType(keyDatum));
+										DatumGetRangeTypeP(keyDatum));
 				break;
 			default:
 				elog(ERROR, "unrecognized range strategy: %d",
diff --git a/src/backend/utils/adt/rangetypes_typanalyze.c b/src/backend/utils/adt/rangetypes_typanalyze.c
index a8d585ce..7178397 100644
--- a/src/backend/utils/adt/rangetypes_typanalyze.c
+++ b/src/backend/utils/adt/rangetypes_typanalyze.c
@@ -144,7 +144,7 @@ compute_range_stats(VacAttrStats *stats, AnalyzeAttrFetchFunc fetchfunc,
 		total_width += VARSIZE_ANY(DatumGetPointer(value));
 
 		/* Get range and deserialize it for further analysis. */
-		range = DatumGetRangeType(value);
+		range = DatumGetRangeTypeP(value);
 		range_deserialize(typcache, range, &lower, &upper, &empty);
 
 		if (!empty)
diff --git a/src/include/utils/array.h b/src/include/utils/array.h
index b0ff73b..9f514a2 100644
--- a/src/include/utils/array.h
+++ b/src/include/utils/array.h
@@ -252,7 +252,7 @@ typedef struct ArrayIteratorData *ArrayIterator;
 #define PG_RETURN_EXPANDED_ARRAY(x)  PG_RETURN_DATUM(EOHPGetRWDatum(&(x)->hdr))
 
 /* fmgr macros for AnyArrayType (ie, get either varlena or expanded form) */
-#define PG_GETARG_ANY_ARRAY(n)	DatumGetAnyArray(PG_GETARG_DATUM(n))
+#define PG_GETARG_ANY_ARRAY_P(n)	DatumGetAnyArrayP(PG_GETARG_DATUM(n))
 
 /*
  * Access macros for varlena array header fields.
@@ -440,7 +440,7 @@ extern Datum expand_array(Datum arraydatum, MemoryContext parentcontext,
 extern ExpandedArrayHeader *DatumGetExpandedArray(Datum d);
 extern ExpandedArrayHeader *DatumGetExpandedArrayX(Datum d,
 					   ArrayMetaState *metacache);
-extern AnyArrayType *DatumGetAnyArray(Datum d);
+extern AnyArrayType *DatumGetAnyArrayP(Datum d);
 extern void deconstruct_expanded_array(ExpandedArrayHeader *eah);
 
 /*
diff --git a/src/include/utils/jsonb.h b/src/include/utils/jsonb.h
index 411e158..d9466db 100644
--- a/src/include/utils/jsonb.h
+++ b/src/include/utils/jsonb.h
@@ -65,10 +65,10 @@ typedef enum
 #define JGIN_MAXLENGTH	125		/* max length of text part before hashing */
 
 /* Convenience macros */
-#define DatumGetJsonb(d)	((Jsonb *) PG_DETOAST_DATUM(d))
+#define DatumGetJsonbP(d)	((Jsonb *) PG_DETOAST_DATUM(d))
 #define JsonbGetDatum(p)	PointerGetDatum(p)
-#define PG_GETARG_JSONB(x)	DatumGetJsonb(PG_GETARG_DATUM(x))
-#define PG_RETURN_JSONB(x)	PG_RETURN_POINTER(x)
+#define PG_GETARG_JSONB_P(x)	DatumGetJsonbP(PG_GETARG_DATUM(x))
+#define PG_RETURN_JSONB_P(x)	PG_RETURN_POINTER(x)
 
 typedef struct JsonbPair JsonbPair;
 typedef struct JsonbValue JsonbValue;
diff --git a/src/include/utils/rangetypes.h b/src/include/utils/rangetypes.h
index abb2223..d54506b 100644
--- a/src/include/utils/rangetypes.h
+++ b/src/include/utils/rangetypes.h
@@ -68,12 +68,12 @@ typedef struct
 /*
  * fmgr macros for range type objects
  */
-#define DatumGetRangeType(X)		((RangeType *) PG_DETOAST_DATUM(X))
-#define DatumGetRangeTypeCopy(X)	((RangeType *) PG_DETOAST_DATUM_COPY(X))
-#define RangeTypeGetDatum(X)		PointerGetDatum(X)
-#define PG_GETARG_RANGE(n)			DatumGetRangeType(PG_GETARG_DATUM(n))
-#define PG_GETARG_RANGE_COPY(n)		DatumGetRangeTypeCopy(PG_GETARG_DATUM(n))
-#define PG_RETURN_RANGE(x)			return RangeTypeGetDatum(x)
+#define DatumGetRangeTypeP(X)		((RangeType *) PG_DETOAST_DATUM(X))
+#define DatumGetRangeTypePCopy(X)	((RangeType *) PG_DETOAST_DATUM_COPY(X))
+#define RangeTypePGetDatum(X)		PointerGetDatum(X)
+#define PG_GETARG_RANGE_P(n)		DatumGetRangeTypeP(PG_GETARG_DATUM(n))
+#define PG_GETARG_RANGE_P_COPY(n)	DatumGetRangeTypePCopy(PG_GETARG_DATUM(n))
+#define PG_RETURN_RANGE_P(x)		return RangeTypePGetDatum(x)
 
 /* Operator strategy numbers used in the GiST and SP-GiST range opclasses */
 /* Numbers are chosen to match up operator names with existing usages */
#6Tom Lane
tgl@sss.pgh.pa.us
In reply to: Mark Dilger (#5)
Re: PG_GETARG_GISTENTRY?

Mark Dilger <hornschnorter@gmail.com> writes:

I have written a patch to fix these macro definitions across src/ and contrib/.
Find the patch, attached. All regression tests pass on my Mac laptop.

Thanks for doing the legwork on that. This seems a bit late for v10,
especially since it's only cosmetic, but please put it in the first
v11 commitfest.

I don't find any inappropriate uses of _P where _PP would be called for. I do,
however, notice that some datatypes' functions are written to use PG_GETARG_*_P
where PG_GETARG_*_PP might be more efficient.

Yeah. I think Noah did some work in that direction already, but I don't
believe he claimed to have caught everything. Feel free to push further.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#7Mark Dilger
hornschnorter@gmail.com
In reply to: Tom Lane (#6)
Re: PG_GETARG_GISTENTRY?

On Apr 5, 2017, at 1:12 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Mark Dilger <hornschnorter@gmail.com> writes:

I have written a patch to fix these macro definitions across src/ and contrib/.
Find the patch, attached. All regression tests pass on my Mac laptop.

Thanks for doing the legwork on that.

You are welcome.

This seems a bit late for v10,
especially since it's only cosmetic

Agreed.

, but please put it in the first
v11 commitfest.

Done.

I don't find any inappropriate uses of _P where _PP would be called for. I do,
however, notice that some datatypes' functions are written to use PG_GETARG_*_P
where PG_GETARG_*_PP might be more efficient.

Yeah. I think Noah did some work in that direction already, but I don't
believe he claimed to have caught everything. Feel free to push further.

Thanks for clarifying.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#8Mark Dilger
hornschnorter@gmail.com
In reply to: Mark Dilger (#7)
1 attachment(s)
Re: PG_GETARG_GISTENTRY?

On Apr 5, 2017, at 1:27 PM, Mark Dilger <hornschnorter@gmail.com> wrote:

On Apr 5, 2017, at 1:12 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Mark Dilger <hornschnorter@gmail.com> writes:

I have written a patch to fix these macro definitions across src/ and contrib/.
Find the patch, attached. All regression tests pass on my Mac laptop.

Thanks for doing the legwork on that.

You are welcome.

This seems a bit late for v10,
especially since it's only cosmetic

Agreed.

, but please put it in the first
v11 commitfest.

Done.

I don't find any inappropriate uses of _P where _PP would be called for. I do,
however, notice that some datatypes' functions are written to use PG_GETARG_*_P
where PG_GETARG_*_PP might be more efficient.

Yeah. I think Noah did some work in that direction already, but I don't
believe he claimed to have caught everything. Feel free to push further.

Thanks for clarifying.

Here is a small patch for the next open commitfest which handles a case
that Noah's commits 9d7726c2ba06b932f791f2d0cc5acf73cc0b4dca and
3a0d473192b2045cbaf997df8437e7762d34f3ba apparently missed.

Noah, if you left this case out intentionally, sorry for the noise. I did not
immediately see any reason not to follow your lead for this function.

Mark Dilger

Attachments:

varbit_packed.patch.1application/octet-stream; name=varbit_packed.patch.1Download
diff --git a/src/backend/utils/adt/varbit.c b/src/backend/utils/adt/varbit.c
index e947785..d1d0dd6 100644
--- a/src/backend/utils/adt/varbit.c
+++ b/src/backend/utils/adt/varbit.c
@@ -1187,7 +1187,7 @@ bit_overlay(VarBit *t1, VarBit *t2, int sp, int sl)
 Datum
 bitlength(PG_FUNCTION_ARGS)
 {
-	VarBit	   *arg = PG_GETARG_VARBIT_P(0);
+	VarBit	   *arg = PG_GETARG_VARBIT_P_SLICE(0,0,VARHDRSZ+VARBITHDRSZ);
 
 	PG_RETURN_INT32(VARBITLEN(arg));
 }
diff --git a/src/include/utils/varbit.h b/src/include/utils/varbit.h
index 2a4ec67..811efeb 100644
--- a/src/include/utils/varbit.h
+++ b/src/include/utils/varbit.h
@@ -36,9 +36,11 @@ typedef struct
  * BIT and BIT VARYING are toastable varlena types.  They are the same
  * as far as representation goes, so we just have one set of macros.
  */
+#define DatumGetVarBitPSlice(X,m,n)	((VarBit *) PG_DETOAST_DATUM_SLICE(X,m,n))
 #define DatumGetVarBitP(X)		   ((VarBit *) PG_DETOAST_DATUM(X))
 #define DatumGetVarBitPCopy(X)	   ((VarBit *) PG_DETOAST_DATUM_COPY(X))
 #define VarBitPGetDatum(X)		   PointerGetDatum(X)
+#define PG_GETARG_VARBIT_P_SLICE(n,a,b)	DatumGetVarBitPSlice(PG_GETARG_DATUM(n),a,b)
 #define PG_GETARG_VARBIT_P(n)	   DatumGetVarBitP(PG_GETARG_DATUM(n))
 #define PG_GETARG_VARBIT_P_COPY(n) DatumGetVarBitPCopy(PG_GETARG_DATUM(n))
 #define PG_RETURN_VARBIT_P(x)	   return VarBitPGetDatum(x)
diff --git a/src/test/regress/expected/bit.out b/src/test/regress/expected/bit.out
index 9c7d202..d440dbd 100644
--- a/src/test/regress/expected/bit.out
+++ b/src/test/regress/expected/bit.out
@@ -80,6 +80,20 @@ SELECT v, length(v) AS lv
  01010101010 | 11
 (4 rows)
 
+SELECT length(string_agg('1','')::BIT VARYING)
+	   FROM generate_series(1,1000) gs;
+ length 
+--------
+   1000
+(1 row)
+
+SELECT length(string_agg('1','')::BIT VARYING)
+	   FROM generate_series(1,65536) gs;
+ length 
+--------
+  65536
+(1 row)
+
 -- Substring
 SELECT b,
        SUBSTRING(b FROM 2 FOR 4) AS sub_2_4,
diff --git a/src/test/regress/sql/bit.sql b/src/test/regress/sql/bit.sql
index 419d47c..a60870c 100644
--- a/src/test/regress/sql/bit.sql
+++ b/src/test/regress/sql/bit.sql
@@ -40,6 +40,10 @@ SELECT b, length(b) AS lb
        FROM BIT_TABLE;
 SELECT v, length(v) AS lv
        FROM VARBIT_TABLE;
+SELECT length(string_agg('1','')::BIT VARYING)
+	   FROM generate_series(1,1000) gs;
+SELECT length(string_agg('1','')::BIT VARYING)
+	   FROM generate_series(1,65536) gs;
 
 -- Substring
 SELECT b,
#9Noah Misch
noah@leadboat.com
In reply to: Mark Dilger (#8)
Re: PG_GETARG_GISTENTRY?

On Mon, Apr 24, 2017 at 09:25:25AM -0700, Mark Dilger wrote:

Here is a small patch for the next open commitfest which handles a case
that Noah's commits 9d7726c2ba06b932f791f2d0cc5acf73cc0b4dca and
3a0d473192b2045cbaf997df8437e7762d34f3ba apparently missed.

The scope for those commits was wrappers of PG_DETOAST_DATUM_PACKED(), which
does not include PG_DETOAST_DATUM_SLICE().

Noah, if you left this case out intentionally, sorry for the noise. I did not
immediately see any reason not to follow your lead for this function.

This is not following my lead, but that doesn't make it bad. It's just a
different topic.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#10Heikki Linnakangas
hlinnaka@iki.fi
In reply to: Noah Misch (#9)
Use PG_DETOAST_DATUM_SLICE in bitlength() (was Re: PG_GETARG_GISTENTRY?)

On 04/25/2017 04:10 AM, Noah Misch wrote:

On Mon, Apr 24, 2017 at 09:25:25AM -0700, Mark Dilger wrote:

Noah, if you left this case out intentionally, sorry for the noise. I did not
immediately see any reason not to follow your lead for this function.

This is not following my lead, but that doesn't make it bad. It's just a
different topic.

(Changed subject line accordingly.)

From the patch:

--- a/src/backend/utils/adt/varbit.c
+++ b/src/backend/utils/adt/varbit.c
@@ -1187,7 +1187,7 @@ bit_overlay(VarBit *t1, VarBit *t2, int sp, int sl)
Datum
bitlength(PG_FUNCTION_ARGS)
{
-       VarBit     *arg = PG_GETARG_VARBIT_P(0);
+       VarBit     *arg = PG_GETARG_VARBIT_P_SLICE(0,0,VARHDRSZ+VARBITHDRSZ);

PG_RETURN_INT32(VARBITLEN(arg));
}

That doesn't look quite right. PG_GETARG_VARBIT_P_SLICE(X, m, n) returns
n bytes, from offset m, within the varlena. Offset 0 points to just
after the varlen header, i.e. the bit length. AFAICS, there's no need to
include VARHDRSZ here, and this should be just "arg =
PG_GETARG_VARBIT_P_SLICE(0, 0, VARBITHDRSZ)". It's a harmless mistake to
fetch more data than needed, but let's try to not be confused over how
slices work.

I wonder if having a PG_GETARG_VARBIT_P_SLICE macro like this is really
a good idea. It might be useful to be able to fetch just the header, to
get the length, like in this function. And bitgetbit() function would
benefit from being able to fetch just a slice of the data, containing
the bit its interested in. But this macro seems quite inconvenient for
both of those use cases. I'm not sure what to do instead, but I think
that needs some more thought.

I'd suggest expanding this patch, to also make bitgetbit to fetch just a
slice, and see what that looks like.

- Heikki

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#11Tom Lane
tgl@sss.pgh.pa.us
In reply to: Mark Dilger (#5)
Renaming PG_GETARG functions (was Re: PG_GETARG_GISTENTRY?)

[ changing subject line to possibly draw more attention ]

Mark Dilger <hornschnorter@gmail.com> writes:

On Apr 5, 2017, at 9:23 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
In short, if you are supposed to write
FOO *val = PG_GETARG_FOO(n);
then the macro designer blew it, because the name implies that it
returns FOO, not pointer to FOO. This should be
FOO *val = PG_GETARG_FOO_P(n);

I have written a patch to fix these macro definitions across src/ and
contrib/.

So to summarize, this patch proposes to rename some DatumGetFoo,
PG_GETARG_FOO, and PG_RETURN_FOO macros for these datatypes:

NDBOX (contrib/cube)
HSTORE
LTREE and other contrib/ltree types

PG_GETARG_ANY_ARRAY (and there are some related macros it maybe should
have touched, like PG_RETURN_EXPANDED_ARRAY)

JSONB

RANGE

The contrib types don't seem like much of a problem, but I wonder
whether anyone feels that rationalizing the names for array, JSON,
or range-type macros will break too much code.

One option if we do feel that way is that we could provide the
old names as alternatives, thus not breaking external modules.
But that seems like it's sabotaging the basic goal of improving
consistency of naming.

If there are not objections, I plan to push forward with this.

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#12Mark Dilger
hornschnorter@gmail.com
In reply to: Tom Lane (#11)
Re: Renaming PG_GETARG functions (was Re: PG_GETARG_GISTENTRY?)

On Sep 12, 2017, at 1:07 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

[ changing subject line to possibly draw more attention ]

Mark Dilger <hornschnorter@gmail.com> writes:

On Apr 5, 2017, at 9:23 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
In short, if you are supposed to write
FOO *val = PG_GETARG_FOO(n);
then the macro designer blew it, because the name implies that it
returns FOO, not pointer to FOO. This should be
FOO *val = PG_GETARG_FOO_P(n);

I have written a patch to fix these macro definitions across src/ and
contrib/.

Thanks, Tom, for reviewing my patch.

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#13Daniel Gustafsson
daniel@yesql.se
In reply to: Tom Lane (#11)
Re: Renaming PG_GETARG functions (was Re: PG_GETARG_GISTENTRY?)

On 12 Sep 2017, at 22:07, Tom Lane <tgl@sss.pgh.pa.us> wrote:

[ changing subject line to possibly draw more attention ]

Mark Dilger <hornschnorter@gmail.com> writes:

On Apr 5, 2017, at 9:23 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
In short, if you are supposed to write
FOO *val = PG_GETARG_FOO(n);
then the macro designer blew it, because the name implies that it
returns FOO, not pointer to FOO. This should be
FOO *val = PG_GETARG_FOO_P(n);

I have written a patch to fix these macro definitions across src/ and
contrib/.

So to summarize, this patch proposes to rename some DatumGetFoo,
PG_GETARG_FOO, and PG_RETURN_FOO macros for these datatypes:

NDBOX (contrib/cube)
HSTORE
LTREE and other contrib/ltree types

PG_GETARG_ANY_ARRAY (and there are some related macros it maybe should
have touched, like PG_RETURN_EXPANDED_ARRAY)

JSONB

RANGE

The contrib types don't seem like much of a problem, but I wonder
whether anyone feels that rationalizing the names for array, JSON,
or range-type macros will break too much code.

One option if we do feel that way is that we could provide the
old names as alternatives, thus not breaking external modules.
But that seems like it's sabotaging the basic goal of improving
consistency of naming.

If there are not objections, I plan to push forward with this.

Judging by this post, I’m updating this to “Ready for Committer”.

cheers ./daniel

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

#14Tom Lane
tgl@sss.pgh.pa.us
In reply to: Mark Dilger (#5)
Re: PG_GETARG_GISTENTRY?

Mark Dilger <hornschnorter@gmail.com> writes:

I have written a patch to fix these macro definitions across src/ and contrib/.
Find the patch, attached. All regression tests pass on my Mac laptop.

Pushed after some rebasing and some minor additional editorialization.

The original point about adding a wrapper for GISTENTRY fetches remains
open ...

regards, tom lane

--
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers