summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkniv <[email protected]>2022-04-01 15:27:40 +0300
committerkniv <[email protected]>2022-04-01 15:27:40 +0300
commit4e76cc5d4cc746da6a513b9d90741a18c89c5326 (patch)
tree464958d180f5d7af2a099b237bbad62d0ddace00
parenteee44268f518941bea82eddf06ced9a7dd0c5c1a (diff)
YQL-6437: Add ListFold(), ListFoldMap() functions
https://paste.yandex-team.ru/8321186 ref:d11800f527ab684a36333b794aaec36f4cc3b8cd
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_core.cpp4
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_list.cpp16
-rw-r--r--ydb/library/yql/core/type_ann/type_ann_list.h4
-rw-r--r--ydb/library/yql/sql/v1/builtin.cpp4
4 files changed, 28 insertions, 0 deletions
diff --git a/ydb/library/yql/core/type_ann/type_ann_core.cpp b/ydb/library/yql/core/type_ann/type_ann_core.cpp
index b42d82b83af..ee397871822 100644
--- a/ydb/library/yql/core/type_ann/type_ann_core.cpp
+++ b/ydb/library/yql/core/type_ann/type_ann_core.cpp
@@ -13874,6 +13874,10 @@ template <NKikimr::NUdf::EDataSlot DataSlot>
Functions["ListMin"] = &ListMinWrapper;
Functions["ListMax"] = &ListMaxWrapper;
Functions["ListSum"] = &ListSumWrapper;
+ Functions["ListFold"] = &ListFoldWrapper;
+ Functions["ListFold1"] = &ListFold1Wrapper;
+ Functions["ListFoldMap"] = &ListFoldMapWrapper;
+ Functions["ListFold1Map"] = &ListFold1MapWrapper;
Functions["ListConcat"] = &ListConcatWrapper;
Functions["ListHas"] = &ContainsLookupWrapper<true, true>;
Functions["ListAvg"] = &ListAvgWrapper;
diff --git a/ydb/library/yql/core/type_ann/type_ann_list.cpp b/ydb/library/yql/core/type_ann/type_ann_list.cpp
index 55f177b44dc..4b099648326 100644
--- a/ydb/library/yql/core/type_ann/type_ann_list.cpp
+++ b/ydb/library/yql/core/type_ann/type_ann_list.cpp
@@ -1402,6 +1402,22 @@ namespace {
return OptListFold1WrapperImpl(input, output, ctx, std::move(lambda));
}
+ IGraphTransformer::TStatus ListFoldWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) {
+ return OptListWrapperImpl<3U>(input, output, ctx, "Fold");
+ }
+
+ IGraphTransformer::TStatus ListFold1Wrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) {
+ return OptListWrapperImpl<3U, 3U, true>(input, output, ctx, "Fold1");
+ }
+
+ IGraphTransformer::TStatus ListFoldMapWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) {
+ return OptListWrapperImpl<3U>(input, output, ctx, "FoldMap");
+ }
+
+ IGraphTransformer::TStatus ListFold1MapWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) {
+ return OptListWrapperImpl<3U>(input, output, ctx, "Fold1Map");
+ }
+
IGraphTransformer::TStatus ListMinWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx) {
return OptListFold1WrapperImpl(input, output, ctx, "AggrMin");
}
diff --git a/ydb/library/yql/core/type_ann/type_ann_list.h b/ydb/library/yql/core/type_ann/type_ann_list.h
index 4b84ae9846d..2c0fd69ed13 100644
--- a/ydb/library/yql/core/type_ann/type_ann_list.h
+++ b/ydb/library/yql/core/type_ann/type_ann_list.h
@@ -110,6 +110,10 @@ namespace NTypeAnnImpl {
IGraphTransformer::TStatus ListMinWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
IGraphTransformer::TStatus ListMaxWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
IGraphTransformer::TStatus ListSumWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
+ IGraphTransformer::TStatus ListFoldWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
+ IGraphTransformer::TStatus ListFold1Wrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
+ IGraphTransformer::TStatus ListFoldMapWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
+ IGraphTransformer::TStatus ListFold1MapWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
IGraphTransformer::TStatus ListConcatWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
IGraphTransformer::TStatus ListAvgWrapper(const TExprNode::TPtr& input, TExprNode::TPtr& output, TContext& ctx);
template <bool AllOrAny>
diff --git a/ydb/library/yql/sql/v1/builtin.cpp b/ydb/library/yql/sql/v1/builtin.cpp
index 767b7996466..64716427fca 100644
--- a/ydb/library/yql/sql/v1/builtin.cpp
+++ b/ydb/library/yql/sql/v1/builtin.cpp
@@ -2653,6 +2653,10 @@ struct TBuiltinFuncData {
{"listmax", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListMax", 1, 1)},
{"listmin", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListMin", 1, 1)},
{"listsum", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListSum", 1, 1)},
+ {"listfold", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListFold", 3, 3)},
+ {"listfold1", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListFold1", 3, 3)},
+ {"listfoldmap", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListFoldMap", 3, 3)},
+ {"listfold1map", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListFold1Map", 3, 3)},
{"listavg", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListAvg", 1, 1)},
{"listconcat", BuildNamedArgcBuiltinFactoryCallback<TCallNodeImpl>("ListConcat", 1, 2)},
{"listextract", BuildSimpleBuiltinFactoryCallback<TListExtractBuiltin>()},