diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-02-16 02:30:39 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-02-16 02:30:39 +0000 |
commit | 51972a9d5d068dd34b24ff4923981ffb90e5cc2d (patch) | |
tree | c68fddbb3eaafbd332e84afbafe3c171f6372d4e /src/backend/nodes/outfuncs.c | |
parent | de25638d2fbe9e56ecfc60a7dda8a0c56028317a (diff) |
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.
Diffstat (limited to 'src/backend/nodes/outfuncs.c')
-rw-r--r-- | src/backend/nodes/outfuncs.c | 33 |
1 files changed, 32 insertions, 1 deletions
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* @@ -754,6 +754,27 @@ _outCaseWhen(StringInfo str, CaseWhen *node) } 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) { WRITE_NODE_TYPE("NULLTEST"); @@ -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; |