PG_GETARG_TEXT_PP vs PG_GETARG_TEXT_P

Started by Markur Sensalmost 4 years ago4 messagesgeneral
Jump to latest
#1Markur Sens
markursens@gmail.com

In the “Extending SQL” chapter I see both of these forms are mentioned.

But can’t find info about when to use which one.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Markur Sens (#1)
Re: PG_GETARG_TEXT_PP vs PG_GETARG_TEXT_P

Markur Sens <markursens@gmail.com> writes:

In the “Extending SQL” chapter I see both of these forms are mentioned.
But can’t find info about when to use which one.

PG_GETARG_TEXT_P returns a traditional-format, 4-byte-header value.

PG_GETARG_TEXT_PP is allowed to return either that or a 1-byte-header
value, in case that's what the input is.

PG_GETARG_TEXT_PP is preferred in new code since it can avoid one
step of palloc-and-copy-the-value; the only real downside is you
have to use the appropriate macros to get the string's start address
and length.

regards, tom lane

#3Markur Sens
markursens@gmail.com
In reply to: Tom Lane (#2)
Re: PG_GETARG_TEXT_PP vs PG_GETARG_TEXT_P

On 12 Jun 2022, at 12:06 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Markur Sens <markursens@gmail.com> writes:

In the “Extending SQL” chapter I see both of these forms are mentioned.
But can’t find info about when to use which one.

PG_GETARG_TEXT_P returns a traditional-format, 4-byte-header value.

PG_GETARG_TEXT_PP is allowed to return either that or a 1-byte-header
value, in case that's what the input is.

PG_GETARG_TEXT_PP is preferred in new code since it can avoid one
step of palloc-and-copy-the-value; the only real downside is you
have to use the appropriate macros to get the string's start address
and length.

regards, tom lane

Ah Thanks. I wouldn’t have guessed that.
And I don’t see this mentioned in the header files either.

Is it worth adding a relevant comment in the documentation section?

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Markur Sens (#3)
Re: PG_GETARG_TEXT_PP vs PG_GETARG_TEXT_P

Markur Sens <markursens@gmail.com> writes:

On 12 Jun 2022, at 12:06 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

PG_GETARG_TEXT_PP is preferred in new code since it can avoid one
step of palloc-and-copy-the-value; the only real downside is you
have to use the appropriate macros to get the string's start address
and length.

Is it worth adding a relevant comment in the documentation section?

It is documented in the source code where these macros are defined
(fmgr.h).

regards, tom lane