diff options
author | mpereskokova <[email protected]> | 2025-04-17 07:34:43 +0300 |
---|---|---|
committer | mpereskokova <[email protected]> | 2025-04-17 07:49:22 +0300 |
commit | 9b44be1dd627cdc45103e07c3186eda2a400d8dd (patch) | |
tree | ecb8b7f238380035708e34ee15b7df898ea55dc4 /yql/essentials/core/yql_expr_constraint.cpp | |
parent | bd352209a921603d0bb9876b7bf6f72cee7be91e (diff) |
Add pruneKeys in EquiJoin
commit_hash:24b52143fbef864df48f3359b14f9e0294f367f5
Diffstat (limited to 'yql/essentials/core/yql_expr_constraint.cpp')
-rw-r--r-- | yql/essentials/core/yql_expr_constraint.cpp | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/yql/essentials/core/yql_expr_constraint.cpp b/yql/essentials/core/yql_expr_constraint.cpp index e67557d9645..7fcf560a2cf 100644 --- a/yql/essentials/core/yql_expr_constraint.cpp +++ b/yql/essentials/core/yql_expr_constraint.cpp @@ -822,9 +822,23 @@ private: } if constexpr (Adjacent) { - return CopyAllFrom<0>(input, output, ctx); + if (const auto status = CopyAllFrom<0>(input, output, ctx); status != TStatus::Ok) { + return status; + } + + TPartOfConstraintBase::TSetType keys = GetPathsToKeys<true>(input->Child(1)->Tail(), input->Child(1)->Head().Head()); + TPartOfConstraintBase::TSetOfSetsType uniqueKeys; + for (const auto& elem : keys) { + uniqueKeys.insert(TPartOfConstraintBase::TSetType{elem}); + } + if (!keys.empty()) { + input->AddConstraint(ctx.MakeConstraint<TUniqueConstraintNode>(TUniqueConstraintNode::TContentType{uniqueKeys})); + input->AddConstraint(ctx.MakeConstraint<TDistinctConstraintNode>(TDistinctConstraintNode::TContentType{uniqueKeys})); + } + return TStatus::Ok; } - return FromFirst<TEmptyConstraintNode, TUniqueConstraintNode, TPartOfUniqueConstraintNode, TDistinctConstraintNode, TPartOfDistinctConstraintNode>(input, output, ctx); + + return FromFirst<TEmptyConstraintNode>(input, output, ctx); } template<class TConstraint> |