From 7c6c2a1b553dfb6b7db019b16ff688a0577c665c Mon Sep 17 00:00:00 2001 From: wangfeihuo Date: Sat, 21 Sep 2024 10:30:20 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=81=9A=E5=90=88=E5=B5=8C?= =?UTF-8?q?=E5=A5=97=E6=97=B6=E7=9A=84core=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/common/backend/parser/parse_agg.cpp | 3 ++- src/test/regress/expected/aggregates_part3.out | 3 +++ src/test/regress/sql/aggregates_part3.sql | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/common/backend/parser/parse_agg.cpp b/src/common/backend/parser/parse_agg.cpp index af09c7165..d667f39c0 100644 --- a/src/common/backend/parser/parse_agg.cpp +++ b/src/common/backend/parser/parse_agg.cpp @@ -225,7 +225,8 @@ void transformAggregateCall(ParseState* pstate, Aggref* agg, List* args, List* a * didn't find any local vars or aggs. */ if (min_varlevel == 0) { - if (pstate->p_hasAggs && checkExprHasAggs((Node*)agg->args)) { + if (pstate->p_hasAggs && + (checkExprHasAggs((Node*)agg->args) || checkExprHasAggs((Node*)agg->aggdirectargs))) { ereport(ERROR, (errcode(ERRCODE_GROUPING_ERROR), errmsg("aggregate function calls cannot be nested"), diff --git a/src/test/regress/expected/aggregates_part3.out b/src/test/regress/expected/aggregates_part3.out index 7b19f51c1..1747c426a 100644 --- a/src/test/regress/expected/aggregates_part3.out +++ b/src/test/regress/expected/aggregates_part3.out @@ -579,6 +579,9 @@ GROUP BY c2,c3; ----+----+----+------------ (0 rows) +SELECT percentile_cont(sum(value)) WITHIN GROUP (ORDER BY value) FROM (VALUES ('2019-07-12 00:00:01'::timestamptz,'red',1),('2019-07-12 00:00:01'::timestamptz,'blue',2)) v(time,color,value); +ERROR: aggregate function calls cannot be nested +CONTEXT: referenced column: percentile_cont reset current_schema; drop schema if exists distribute_aggregates_part3 cascade; NOTICE: drop cascades to 2 other objects diff --git a/src/test/regress/sql/aggregates_part3.sql b/src/test/regress/sql/aggregates_part3.sql index e90d304ed..fe8a303ab 100644 --- a/src/test/regress/sql/aggregates_part3.sql +++ b/src/test/regress/sql/aggregates_part3.sql @@ -117,5 +117,7 @@ SELECT FROM sales_transaction_line GROUP BY c2,c3; +SELECT percentile_cont(sum(value)) WITHIN GROUP (ORDER BY value) FROM (VALUES ('2019-07-12 00:00:01'::timestamptz,'red',1),('2019-07-12 00:00:01'::timestamptz,'blue',2)) v(time,color,value); + reset current_schema; drop schema if exists distribute_aggregates_part3 cascade;