diff options
| author | kniv <[email protected]> | 2022-04-01 15:27:40 +0300 |
|---|---|---|
| committer | kniv <[email protected]> | 2022-04-01 15:27:40 +0300 |
| commit | 4e76cc5d4cc746da6a513b9d90741a18c89c5326 (patch) | |
| tree | 464958d180f5d7af2a099b237bbad62d0ddace00 | |
| parent | eee44268f518941bea82eddf06ced9a7dd0c5c1a (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.cpp | 4 | ||||
| -rw-r--r-- | ydb/library/yql/core/type_ann/type_ann_list.cpp | 16 | ||||
| -rw-r--r-- | ydb/library/yql/core/type_ann/type_ann_list.h | 4 | ||||
| -rw-r--r-- | ydb/library/yql/sql/v1/builtin.cpp | 4 |
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>()}, |
