summaryrefslogtreecommitdiffstats
path: root/yql/essentials/core/yql_expr_constraint.cpp
diff options
context:
space:
mode:
authormpereskokova <[email protected]>2025-04-17 07:34:43 +0300
committermpereskokova <[email protected]>2025-04-17 07:49:22 +0300
commit9b44be1dd627cdc45103e07c3186eda2a400d8dd (patch)
treeecb8b7f238380035708e34ee15b7df898ea55dc4 /yql/essentials/core/yql_expr_constraint.cpp
parentbd352209a921603d0bb9876b7bf6f72cee7be91e (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.cpp18
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>