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/parser/parse_clause.c | |
parent | de25638d2fbe9e56ecfc60a7dda8a0c56028317a (diff) | |
download | postgresql-51972a9d5d068dd34b24ff4923981ffb90e5cc2d.tar.gz postgresql-51972a9d5d068dd34b24ff4923981ffb90e5cc2d.zip |
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/parser/parse_clause.c')
-rw-r--r-- | src/backend/parser/parse_clause.c | 17 |
1 files changed, 5 insertions, 12 deletions
diff --git a/src/backend/parser/parse_clause.c b/src/backend/parser/parse_clause.c index d65df553acf..33e7cce4203 100644 --- a/src/backend/parser/parse_clause.c +++ b/src/backend/parser/parse_clause.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.109 2003/02/13 20:45:21 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/parse_clause.c,v 1.110 2003/02/16 02:30:38 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -922,17 +922,10 @@ buildMergedJoinVar(JoinType jointype, Var *l_colvar, Var *r_colvar) * Here we must build a COALESCE expression to ensure that * the join output is non-null if either input is. */ - CaseExpr *c = makeNode(CaseExpr); - CaseWhen *w = makeNode(CaseWhen); - NullTest *n = makeNode(NullTest); - - n->arg = (Expr *) l_node; - n->nulltesttype = IS_NOT_NULL; - w->expr = (Expr *) n; - w->result = (Expr *) l_node; - c->casetype = outcoltype; - c->args = makeList1(w); - c->defresult = (Expr *) r_node; + CoalesceExpr *c = makeNode(CoalesceExpr); + + c->coalescetype = outcoltype; + c->args = makeList2(l_node, r_node); res_node = (Node *) c; break; } |