aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2017-06-27 17:51:11 -0400
committerTom Lane <tgl@sss.pgh.pa.us>2017-06-27 17:51:11 -0400
commit3a7bd59c4496b5b9a7cec9ab6f1eb6b111a8b046 (patch)
treecfc9c5f373f3495024d6ad4524181475c15dae5d
parentdf31a9fc66f11e824872dc09d22f389cbd5bc803 (diff)
downloadpostgresql-3a7bd59c4496b5b9a7cec9ab6f1eb6b111a8b046.tar.gz
postgresql-3a7bd59c4496b5b9a7cec9ab6f1eb6b111a8b046.zip
Re-allow SRFs and window functions within sub-selects within aggregates.
check_agg_arguments_walker threw an error upon seeing a SRF or window function, but that is too aggressive: if the function is within a sub-select then it's perfectly fine. I broke the SRF case in commit 0436f6bde by copying the logic for window functions ... but that was broken too, and had been since commit eaccfded9. Repair both cases in HEAD, and the window function case back to 9.3. 9.2 gets this right.
-rw-r--r--src/backend/parser/parse_agg.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c
index 481a4ddc484..f7975abe093 100644
--- a/src/backend/parser/parse_agg.c
+++ b/src/backend/parser/parse_agg.c
@@ -700,7 +700,7 @@ check_agg_arguments_walker(Node *node,
/* Continue and descend into subtree */
}
/* We can throw error on sight for a window function */
- if (IsA(node, WindowFunc))
+ if (IsA(node, WindowFunc) && context->sublevels_up == 0)
ereport(ERROR,
(errcode(ERRCODE_GROUPING_ERROR),
errmsg("aggregate function calls cannot contain window function calls"),