From 51972a9d5d068dd34b24ff4923981ffb90e5cc2d Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Sun, 16 Feb 2003 02:30:39 +0000 Subject: COALESCE() and NULLIF() are now first-class expressions, not macros that turn into CASE expressions. They evaluate their arguments at most once. Patch by Kris Jurka, review and (very light) editorializing by me. --- src/backend/nodes/outfuncs.c | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) (limited to 'src/backend/nodes/outfuncs.c') diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c index 134ee4328e7..8485244492c 100644 --- a/src/backend/nodes/outfuncs.c +++ b/src/backend/nodes/outfuncs.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.199 2003/02/10 04:44:45 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/nodes/outfuncs.c,v 1.200 2003/02/16 02:30:37 tgl Exp $ * * NOTES * Every node type that can appear in stored rules' parsetrees *must* @@ -753,6 +753,27 @@ _outCaseWhen(StringInfo str, CaseWhen *node) WRITE_NODE_FIELD(result); } +static void +_outCoalesceExpr(StringInfo str, CoalesceExpr *node) +{ + WRITE_NODE_TYPE("COALESCE"); + + WRITE_OID_FIELD(coalescetype); + WRITE_NODE_FIELD(args); +} + +static void +_outNullIfExpr(StringInfo str, NullIfExpr *node) +{ + WRITE_NODE_TYPE("NULLIFEXPR"); + + WRITE_OID_FIELD(opno); + WRITE_OID_FIELD(opfuncid); + WRITE_OID_FIELD(opresulttype); + WRITE_BOOL_FIELD(opretset); + WRITE_NODE_FIELD(args); +} + static void _outNullTest(StringInfo str, NullTest *node) { @@ -1277,6 +1298,10 @@ _outAExpr(StringInfo str, A_Expr *node) appendStringInfo(str, " DISTINCT "); WRITE_NODE_FIELD(name); break; + case AEXPR_NULLIF: + appendStringInfo(str, " NULLIF "); + WRITE_NODE_FIELD(name); + break; case AEXPR_OF: appendStringInfo(str, " OF "); WRITE_NODE_FIELD(name); @@ -1576,6 +1601,12 @@ _outNode(StringInfo str, void *obj) case T_CaseWhen: _outCaseWhen(str, obj); break; + case T_CoalesceExpr: + _outCoalesceExpr(str, obj); + break; + case T_NullIfExpr: + _outNullIfExpr(str, obj); + break; case T_NullTest: _outNullTest(str, obj); break; -- cgit v1.2.3