summaryrefslogtreecommitdiffstats
path: root/yql/essentials/core/yql_expr_constraint.cpp
diff options
context:
space:
mode:
authormpereskokova <[email protected]>2025-03-19 15:28:46 +0300
committermpereskokova <[email protected]>2025-03-19 15:47:24 +0300
commit95040611fee3b60e9fb35829f51822b8970d7d70 (patch)
tree26f0a5f502795661fa5ecf9849219c0e448c39e3 /yql/essentials/core/yql_expr_constraint.cpp
parent58b29f8c8934d54a748f4638ce45afcd376cf250 (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.cpp14
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);