diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2014-02-03 14:46:54 -0500 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2014-02-03 14:46:54 -0500 |
commit | 641c08041fab8270e23017c27935951c3d080501 (patch) | |
tree | 6ed84cdd48c11b2535b657f0a74508bef13ceaf2 /src/backend/executor/functions.c | |
parent | 5056607ae3b51b8aff0ca4726edb19db7f72f7a9 (diff) | |
download | postgresql-641c08041fab8270e23017c27935951c3d080501.tar.gz postgresql-641c08041fab8270e23017c27935951c3d080501.zip |
Fix *-qualification of named parameters in SQL-language functions.
Given a composite-type parameter named x, "$1.*" worked fine, but "x.*"
not so much. This has been broken since named parameter references were
added in commit 9bff0780cf5be2193a5bad0d3df2dbe143085264, so patch back
to 9.2. Per bug #9085 from Hardy Falk.
Diffstat (limited to 'src/backend/executor/functions.c')
-rw-r--r-- | src/backend/executor/functions.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c index 12e1b8ef599..e8022c5b913 100644 --- a/src/backend/executor/functions.c +++ b/src/backend/executor/functions.c @@ -310,6 +310,11 @@ sql_fn_post_column_ref(ParseState *pstate, ColumnRef *cref, Node *var) * (the first possibility takes precedence) * A.B.C A = function name, B = record-typed parameter name, * C = field name + * A.* Whole-row reference to composite parameter A. + * A.B.* Same, with A = function name, B = parameter name + * + * Here, it's sufficient to ignore the "*" in the last two cases --- the + * main parser will take care of expanding the whole-row reference. *---------- */ nnames = list_length(cref->fields); @@ -317,6 +322,9 @@ sql_fn_post_column_ref(ParseState *pstate, ColumnRef *cref, Node *var) if (nnames > 3) return NULL; + if (IsA(llast(cref->fields), A_Star)) + nnames--; + field1 = (Node *) linitial(cref->fields); Assert(IsA(field1, String)); name1 = strVal(field1); |