Re: inappropriate use of NameGetDatum macro - Mailing list pgsql-hackers

From Tom Lane
Subject Re: inappropriate use of NameGetDatum macro
Date
Msg-id 13677.1473710134@sss.pgh.pa.us
Whole thread Raw
In response to inappropriate use of NameGetDatum macro  (Mark Dilger <hornschnorter@gmail.com>)
Responses Re: inappropriate use of NameGetDatum macro  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Mark Dilger <hornschnorter@gmail.com> writes:
> there are several places in the code where variables defined as
> (char *) or as (const char *) are passed to the NameGetDatum()
> macro.  I believe it would be better form to use CStringGetDatum()
> in these locations.  I am aware that these two macros are internally
> the same.

Hm, I agree, this feels wrong.  I suppose you could argue that the
called functions are expecting Name pointers not CString pointers,
but that type cheat is happening anyway.  It would be better form
to explicitly pass a CString datum if that's what we're passing.

I'm tempted to propose that we redefine NameGetDatum as

#define NameGetDatum(X) CStringGetDatum(NameStr(*(X)))

which should do the same thing at runtime, but would result in a
compile error if what's passed isn't declared as Name (or NameData*).
This would be asymmetrical with the way DatumGetName looks, though.
        regards, tom lane



pgsql-hackers by date:

Previous
From: Andres Freund
Date:
Subject: Re: Logical Replication WIP
Next
From: Petr Jelinek
Date:
Subject: Re: Logical Replication WIP