{
targs = lappend(targs, transformExpr(pstate,
(Node *) lfirst(lc),
- EXPR_KIND_CALL));
+ EXPR_KIND_CALL_ARGUMENT));
}
node = ParseFuncOrColumn(pstate,
break;
case EXPR_KIND_PARTITION_EXPRESSION:
if (isAgg)
- err = _("aggregate functions are not allowed in partition key expression");
+ err = _("aggregate functions are not allowed in partition key expressions");
else
- err = _("grouping operations are not allowed in partition key expression");
+ err = _("grouping operations are not allowed in partition key expressions");
break;
- case EXPR_KIND_CALL:
+ case EXPR_KIND_CALL_ARGUMENT:
if (isAgg)
err = _("aggregate functions are not allowed in CALL arguments");
else
err = _("window functions are not allowed in trigger WHEN conditions");
break;
case EXPR_KIND_PARTITION_EXPRESSION:
- err = _("window functions are not allowed in partition key expression");
+ err = _("window functions are not allowed in partition key expressions");
break;
- case EXPR_KIND_CALL:
+ case EXPR_KIND_CALL_ARGUMENT:
err = _("window functions are not allowed in CALL arguments");
break;
}
/*
- * transformExpr() should have already rejected subqueries,
- * aggregates, and window functions, based on the EXPR_KIND_ for an
- * index expression. Expressions returning sets won't have been
- * rejected, but don't bother doing so here; there should be no
- * available expression unique index to match any such expression
- * against anyway.
+ * transformExpr() will reject subqueries, aggregates, window
+ * functions, and SRFs, based on being passed
+ * EXPR_KIND_INDEX_EXPRESSION. So we needn't worry about those
+ * further ... not that they would match any available index
+ * expression anyway.
*/
pInfer->expr = transformExpr(pstate, parse, EXPR_KIND_INDEX_EXPRESSION);
case EXPR_KIND_RETURNING:
case EXPR_KIND_VALUES:
case EXPR_KIND_VALUES_SINGLE:
- case EXPR_KIND_CALL:
/* okay */
break;
case EXPR_KIND_CHECK_CONSTRAINT:
case EXPR_KIND_PARTITION_EXPRESSION:
err = _("cannot use subquery in partition key expression");
break;
+ case EXPR_KIND_CALL_ARGUMENT:
+ err = _("cannot use subquery in CALL argument");
+ break;
/*
* There is intentionally no default: case here, so that the
return "WHEN";
case EXPR_KIND_PARTITION_EXPRESSION:
return "PARTITION BY";
- case EXPR_KIND_CALL:
+ case EXPR_KIND_CALL_ARGUMENT:
return "CALL";
/*
case EXPR_KIND_PARTITION_EXPRESSION:
err = _("set-returning functions are not allowed in partition key expressions");
break;
- case EXPR_KIND_CALL:
+ case EXPR_KIND_CALL_ARGUMENT:
err = _("set-returning functions are not allowed in CALL arguments");
break;
EXPR_KIND_TRIGGER_WHEN, /* WHEN condition in CREATE TRIGGER */
EXPR_KIND_POLICY, /* USING or WITH CHECK expr in policy */
EXPR_KIND_PARTITION_EXPRESSION, /* PARTITION BY expression */
- EXPR_KIND_CALL /* CALL argument */
+ EXPR_KIND_CALL_ARGUMENT /* procedure argument in CALL */
} ParseExprKind;
CREATE TABLE partitioned (
a int
) PARTITION BY RANGE ((avg(a)));
-ERROR: aggregate functions are not allowed in partition key expression
+ERROR: aggregate functions are not allowed in partition key expressions
CREATE TABLE partitioned (
a int,
b int
) PARTITION BY RANGE ((avg(a) OVER (PARTITION BY b)));
-ERROR: window functions are not allowed in partition key expression
+ERROR: window functions are not allowed in partition key expressions
CREATE TABLE partitioned (
a int
) PARTITION BY LIST ((a LIKE (SELECT 1)));