Re: [HACKERS] Cache lookup errors with functions manipulation object addresses

Michael Paquier <michael@paquier.xyz>

From: Michael Paquier <michael@paquier.xyz>
To: Alvaro Herrera <alvherre@alvh.no-ip.org>
Cc: Michael Paquier <michael.paquier@gmail.com>, Thomas Munro <thomas.munro@enterprisedb.com>, Aleksander Alekseev <a.alekseev@postgrespro.ru>, PostgreSQL mailing lists <pgsql-hackers@postgresql.org>
Date: 2018-02-13T03:51:07Z
Lists: pgsql-hackers

Attachments

On Mon, Feb 12, 2018 at 07:57:34PM -0300, Alvaro Herrera wrote:
> Pushed 0001, which was easy enough to deal with.

Thanks.

> I think 0002 and 0003 should be changed similarly: the elog(ERROR)
> code should be inside "if" and the "return NULL" case the straight
> path, rather than the other way around.  That seems more robust than
> the compiler relying on knowledge that elog(ERROR) does not return.

OK, I updated the patches to do so and rebased.  Those are now 0001 and
0002.  For 0002, I have added more adapted comments at the top of
get_publication_name and get_subscription_name.

> As far as format_type_extended() is concerned, IMO we've gone far enough
> with the number of variants of format_type().  Making the function
> public makes sense to me, but let's add a bits32 flags argument instead
> of exposing the messy set of booleans.  We can add compatibility
> wrappers for the flag combinations most used in core code, and maybe
> take the opportunity phase out the uncommon ones.

OK, I was a bit hesitant to propose that without more input, so I
definitely agree with this API interface.  I have tackled that in 0003,
with the following changes:
- let's get rid of format_type_with_typemod_qualified.  This is only
used by postgres_fdw in one place.
- format_type_be_qualified is also rather localized, but I have kept
it.  Perhaps this could be nuked as well.  Input is welcome.
- let's keep format_type_be and format_type_with_typemod.  Those are
largely more spread in the core code, so I don't think that we need to
invade things more than necessary.

Attached is a rebased and updated patch set.  I have also reworked the
dance with elog calls and missing_ok to match with what you have already
committed.
--
Michael

Commits

  1. Eliminate cache lookup errors in SQL functions for object addresses

  2. Refactor routines for name lookups of procedures and operators

  3. Add new flag to format_type_extended() to get NULL for undefined type

  4. Introduce new extended routines for FDW and foreign server lookups

  5. Refactor routines for subscription and publication lookups

  6. get_relid_attribute_name is dead, long live get_attname

  7. Tweak parser so that there is a defined representation for datatypes