mirror of
https://github.com/postgres/postgres.git
synced 2025-06-26 12:21:12 +03:00
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
This commit is contained in:
@ -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;
|
||||
|
Reference in New Issue
Block a user