summaryrefslogtreecommitdiffstats
path: root/yql/essentials/sql/v1/aggregation.cpp
diff options
context:
space:
mode:
authorvitya-smirnov <[email protected]>2025-09-05 11:36:09 +0300
committervitya-smirnov <[email protected]>2025-09-05 13:24:55 +0300
commit2db41830cd5fce47e0bac5493c1e1472908cc4c5 (patch)
treee69466e8db1cd55453de95f6ca7d108cae990466 /yql/essentials/sql/v1/aggregation.cpp
parentc16c8277df06c43957bef277c57200b22772d046 (diff)
YQL-20234: Remove predicate argument on middle aggregation phases
Also added tests for: - max_by - agg_list - some - avg_if - sum_if - count_if commit_hash:0da4f3b9b1767850e65c914b727bc362cf4cc125
Diffstat (limited to 'yql/essentials/sql/v1/aggregation.cpp')
-rw-r--r--yql/essentials/sql/v1/aggregation.cpp25
1 files changed, 23 insertions, 2 deletions
diff --git a/yql/essentials/sql/v1/aggregation.cpp b/yql/essentials/sql/v1/aggregation.cpp
index d7324012c13..87a1859f208 100644
--- a/yql/essentials/sql/v1/aggregation.cpp
+++ b/yql/essentials/sql/v1/aggregation.cpp
@@ -370,7 +370,24 @@ public:
private:
bool InitAggr(TContext& ctx, bool isFactory, ISource* src, TAstListNode& node, const TVector<TNodePtr>& exprs) final {
- ui32 adjustArgsCount = isFactory ? 0 : 2;
+ TStringBuf suffix;
+ if (src != nullptr) {
+ suffix = src->GetGroupBySuffix();
+ } else {
+ suffix = "";
+ }
+
+ bool isStateRecieving = !(suffix == "" || suffix == "Combine" || suffix == "Finalize");
+
+ ui32 adjustArgsCount;
+ if (isFactory) {
+ adjustArgsCount = 0;
+ } else if (isStateRecieving) {
+ adjustArgsCount = 1;
+ } else {
+ adjustArgsCount = 2;
+ }
+
if (exprs.size() != adjustArgsCount) {
ctx.Error(Pos_) << "Aggregation function " << (isFactory ? "factory " : "") << Name_ << " requires " <<
adjustArgsCount << " arguments, given: " << exprs.size();
@@ -383,7 +400,11 @@ private:
if (!isFactory) {
Payload_ = exprs.front();
- Predicate_ = exprs.back();
+ if (!isStateRecieving) {
+ Predicate_ = exprs.back();
+ } else {
+ Predicate_ = Y("InstanceOf", Y("DataType", Q("Bool")));
+ }
Name_ = src->MakeLocalName(Name_);
}