diff options
| author | mpereskokova <[email protected]> | 2025-03-19 15:28:46 +0300 |
|---|---|---|
| committer | mpereskokova <[email protected]> | 2025-03-19 15:47:24 +0300 |
| commit | 95040611fee3b60e9fb35829f51822b8970d7d70 (patch) | |
| tree | 26f0a5f502795661fa5ecf9849219c0e448c39e3 /yql/essentials/core/yql_expr_constraint.cpp | |
| parent | 58b29f8c8934d54a748f4638ce45afcd376cf250 (diff) | |
Introduce PruneKeys Callables
commit_hash:ca25a6ece5ae902c4b93846f69bc33b6336a669c
Diffstat (limited to 'yql/essentials/core/yql_expr_constraint.cpp')
| -rw-r--r-- | yql/essentials/core/yql_expr_constraint.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/yql/essentials/core/yql_expr_constraint.cpp b/yql/essentials/core/yql_expr_constraint.cpp index 7921e31f97e..32cba8f9d28 100644 --- a/yql/essentials/core/yql_expr_constraint.cpp +++ b/yql/essentials/core/yql_expr_constraint.cpp @@ -112,6 +112,8 @@ public: Functions["ToStream"] = &TCallableConstraintTransformer::CopyAllFrom<0>; Functions["ToSequence"] = &TCallableConstraintTransformer::CopyAllFrom<0>; Functions["Collect"] = &TCallableConstraintTransformer::CopyAllFrom<0>; + Functions["PruneAdjacentKeys"] = &TCallableConstraintTransformer::PruneKeysWrap<true>; + Functions["PruneKeys"] = &TCallableConstraintTransformer::PruneKeysWrap<false>; Functions["FilterNullMembers"] = &TCallableConstraintTransformer::FromFirst<TSortedConstraintNode, TPartOfSortedConstraintNode, TChoppedConstraintNode, TPartOfChoppedConstraintNode, TEmptyConstraintNode, TUniqueConstraintNode, TPartOfUniqueConstraintNode, TDistinctConstraintNode, TPartOfDistinctConstraintNode, TVarIndexConstraintNode>; Functions["SkipNullMembers"] = &TCallableConstraintTransformer::FromFirst<TSortedConstraintNode, TPartOfSortedConstraintNode, TChoppedConstraintNode, TPartOfChoppedConstraintNode, TEmptyConstraintNode, TUniqueConstraintNode, TPartOfUniqueConstraintNode, TDistinctConstraintNode, TPartOfDistinctConstraintNode, TVarIndexConstraintNode>; Functions["FilterNullElements"] = &TCallableConstraintTransformer::FromFirst<TSortedConstraintNode, TPartOfSortedConstraintNode, TChoppedConstraintNode, TPartOfChoppedConstraintNode, TEmptyConstraintNode, TUniqueConstraintNode, TPartOfUniqueConstraintNode, TDistinctConstraintNode, TPartOfDistinctConstraintNode, TVarIndexConstraintNode>; @@ -805,6 +807,18 @@ private: return FromFirst<TEmptyConstraintNode, TUniqueConstraintNode, TPartOfUniqueConstraintNode, TDistinctConstraintNode, TPartOfDistinctConstraintNode, TVarIndexConstraintNode, TMultiConstraintNode>(input, output, ctx); } + template <bool Adjacent> + TStatus PruneKeysWrap(const TExprNode::TPtr& input, TExprNode::TPtr& output, TExprContext& ctx) const { + if (const auto status = UpdateLambdaConstraints(*input->Child(1)); status != TStatus::Ok) { + return status; + } + + if constexpr (Adjacent) { + return CopyAllFrom<0>(input, output, ctx); + } + return FromFirst<TEmptyConstraintNode, TUniqueConstraintNode, TPartOfUniqueConstraintNode, TDistinctConstraintNode, TPartOfDistinctConstraintNode>(input, output, ctx); + } + template<class TConstraint> static const TConstraint* GetConstraintFromWideResultLambda(const TExprNode& lambda, TExprContext& ctx); |
