From 717fa274d14d9cd25396b85bb92f567e1c623f0c Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Thu, 8 Oct 2009 02:39:25 +0000 Subject: Support use of function argument names to identify which actual arguments match which function parameters. The syntax uses AS, for example funcname(value AS arg1, anothervalue AS arg2) Pavel Stehule --- src/backend/nodes/nodeFuncs.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src/backend/nodes/nodeFuncs.c') diff --git a/src/backend/nodes/nodeFuncs.c b/src/backend/nodes/nodeFuncs.c index 61c0e21db08..04a39f17526 100644 --- a/src/backend/nodes/nodeFuncs.c +++ b/src/backend/nodes/nodeFuncs.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/nodes/nodeFuncs.c,v 1.42 2009/07/30 02:45:37 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/nodes/nodeFuncs.c,v 1.43 2009/10/08 02:39:21 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -69,6 +69,9 @@ exprType(Node *expr) case T_FuncExpr: type = ((FuncExpr *) expr)->funcresulttype; break; + case T_NamedArgExpr: + type = exprType((Node *) ((NamedArgExpr *) expr)->arg); + break; case T_OpExpr: type = ((OpExpr *) expr)->opresulttype; break; @@ -259,6 +262,8 @@ exprTypmod(Node *expr) return coercedTypmod; } break; + case T_NamedArgExpr: + return exprTypmod((Node *) ((NamedArgExpr *) expr)->arg); case T_SubLink: { SubLink *sublink = (SubLink *) expr; @@ -676,6 +681,15 @@ exprLocation(Node *expr) exprLocation((Node *) fexpr->args)); } break; + case T_NamedArgExpr: + { + NamedArgExpr *na = (NamedArgExpr *) expr; + + /* consider both argument name and value */ + loc = leftmostLoc(na->location, + exprLocation((Node *) na->arg)); + } + break; case T_OpExpr: case T_DistinctExpr: /* struct-equivalent to OpExpr */ case T_NullIfExpr: /* struct-equivalent to OpExpr */ @@ -1117,6 +1131,8 @@ expression_tree_walker(Node *node, return true; } break; + case T_NamedArgExpr: + return walker(((NamedArgExpr *) node)->arg, context); case T_OpExpr: { OpExpr *expr = (OpExpr *) node; @@ -1623,6 +1639,16 @@ expression_tree_mutator(Node *node, return (Node *) newnode; } break; + case T_NamedArgExpr: + { + NamedArgExpr *nexpr = (NamedArgExpr *) node; + NamedArgExpr *newnode; + + FLATCOPY(newnode, nexpr, NamedArgExpr); + MUTATE(newnode->arg, nexpr->arg, Expr *); + return (Node *) newnode; + } + break; case T_OpExpr: { OpExpr *expr = (OpExpr *) node; @@ -2382,6 +2408,8 @@ bool /* function name is deemed uninteresting */ } break; + case T_NamedArgExpr: + return walker(((NamedArgExpr *) node)->arg, context); case T_A_Indices: { A_Indices *indices = (A_Indices *) node; -- cgit v1.2.3