aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/parse_agg.c
diff options
context:
space:
mode:
authorJoe Conway <mail@joeconway.com>2015-07-29 15:37:48 -0700
committerJoe Conway <mail@joeconway.com>2015-07-29 15:40:24 -0700
commit632cd9f892119858bc5b617bb60c0377a8a2ed13 (patch)
treea68b80b1cbbccf4b8b42086e9984e651c6956720 /src/backend/parser/parse_agg.c
parentf04ce3147560de90d5250ae822d8d714b76f61cd (diff)
downloadpostgresql-632cd9f892119858bc5b617bb60c0377a8a2ed13.tar.gz
postgresql-632cd9f892119858bc5b617bb60c0377a8a2ed13.zip
Create new ParseExprKind for use by policy expressions.
Policy USING and WITH CHECK expressions were using EXPR_KIND_WHERE for parse analysis, which results in inappropriate ERROR messages when the expression contains unsupported constructs such as aggregates. Create a new ParseExprKind called EXPR_KIND_POLICY and tailor the related messages to fit. Reported by Noah Misch. Reviewed by Dean Rasheed, Alvaro Herrera, and Robert Haas. Back-patch to 9.5 where RLS was introduced.
Diffstat (limited to 'src/backend/parser/parse_agg.c')
-rw-r--r--src/backend/parser/parse_agg.c10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/backend/parser/parse_agg.c b/src/backend/parser/parse_agg.c
index 478d8ca70bd..3846b569d6f 100644
--- a/src/backend/parser/parse_agg.c
+++ b/src/backend/parser/parse_agg.c
@@ -373,6 +373,13 @@ check_agglevels_and_constraints(ParseState *pstate, Node *expr)
case EXPR_KIND_WHERE:
errkind = true;
break;
+ case EXPR_KIND_POLICY:
+ if (isAgg)
+ err = _("aggregate functions are not allowed in policy expressions");
+ else
+ err = _("grouping operations are not allowed in policy expressions");
+
+ break;
case EXPR_KIND_HAVING:
/* okay */
break;
@@ -770,6 +777,9 @@ transformWindowFuncCall(ParseState *pstate, WindowFunc *wfunc,
case EXPR_KIND_WHERE:
errkind = true;
break;
+ case EXPR_KIND_POLICY:
+ err = _("window functions are not allowed in policy expressions");
+ break;
case EXPR_KIND_HAVING:
errkind = true;
break;