pgsql: Add castNode(type, ptr) for safe casting between NodeTag based t

From: Andres Freund <andres(at)anarazel(dot)de>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Add castNode(type, ptr) for safe casting between NodeTag based t
Date: 2017-01-27 00:58:00
Message-ID: E1cWurY-0004Hu-0P@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Add castNode(type, ptr) for safe casting between NodeTag based types.

The new function allows to cast from one NodeTag based type to
another, while asserting that the conversion is valid. This replaces
the common pattern of doing a cast and a Assert(IsA(ptr, type))
close-by.

As this seems likely to be used pervasively, we decided to backpatch
this change the addition of this macro. Otherwise backpatched fixes
are more likely not to work on back-branches.

On branches before 9.6, where we do not yet rely on inline functions
being available, the type assertion is only performed if PG_USE_INLINE
support is detected. The cast obviously is performed regardless.

For the benefit of verifying the macro compiles in the back-branches,
this commit contains a single use of the new macro. On master, a
somewhat larger conversion will be committed separately.

Author: Peter Eisentraut and Andres Freund
Reviewed-By: Tom Lane
Discussion: https://postgr.es/m/c5d387d9-3440-f5e0-f9d4-71d53b9fbe52@2ndquadrant.com
Backpatch: 9.2-

Branch
------
REL9_2_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/14d0e290cbe72aac7911c159f40406dd7242353e

Modified Files
--------------
src/backend/tcop/postgres.c | 2 +-
src/include/nodes/nodes.h | 22 ++++++++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Michael Paquier 2017-01-27 02:24:16 Re: [COMMITTERS] pgsql: Check interrupts during hot standby waits
Previous Message Andres Freund 2017-01-27 00:57:58 pgsql: Add castNode(type, ptr) for safe casting between NodeTag based t