aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authora-romanov <Anton.Romanov@ydb.tech>2023-10-02 12:20:29 +0300
committera-romanov <Anton.Romanov@ydb.tech>2023-10-02 12:43:43 +0300
commit277fd1ec2282bd4abfd8cc7c4993b90b2b6d204e (patch)
tree7334deca1f204478546c576bce074ca311df9711
parent89221ca32611ba853f2242314b1090034559aac8 (diff)
downloadydb-277fd1ec2282bd4abfd8cc7c4993b90b2b6d204e.tar.gz
YQL-16773 Fix unique by key tuple with size 1.
-rw-r--r--ydb/library/yql/core/yql_expr_constraint.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/ydb/library/yql/core/yql_expr_constraint.cpp b/ydb/library/yql/core/yql_expr_constraint.cpp
index fe9e79f814e..5731a32c169 100644
--- a/ydb/library/yql/core/yql_expr_constraint.cpp
+++ b/ydb/library/yql/core/yql_expr_constraint.cpp
@@ -2811,7 +2811,7 @@ private:
if (const auto updatePart = GetConstraintFromLambda<TConstraint, Wide>(input->Tail(), ctx))
if (const auto update = TConstraint::MakeComplete(ctx, updatePart->GetColumnMapping(), original))
if (const auto common = init->MakeCommon(update, ctx))
- input->AddConstraint(common);
+ input->AddConstraint(common->GetSimplifiedForType(*input->GetTypeAnn(), ctx));
}
template<bool Wide>
@@ -2826,13 +2826,14 @@ private:
const auto chopped = input->Head().GetConstraint<TChoppedConstraintNode>();
if (sorted || chopped) {
if (const auto& keys = GetSimpleKeys<Wide>(*FuseInitLambda(*initLambda, *switchLambda, ctx), ctx); !keys.empty()) {
- if (sorted && sorted->StartsWith(keys) || chopped && chopped->Equals(keys)) {
+ if (sorted && sorted->GetSimplifiedForType(*input->Head().GetTypeAnn(), ctx)->StartsWith(keys) ||
+ chopped && chopped->GetSimplifiedForType(*input->Head().GetTypeAnn(), ctx)->Equals(keys)) {
TPartOfConstraintBase::TSetOfSetsType sets;
sets.reserve(keys.size());
for (const auto& key : keys)
sets.insert_unique(TPartOfConstraintBase::TSetType{key});
- unique = ctx.MakeConstraint<TUniqueConstraintNode>(TUniqueConstraintNode::TContentType{sets});
- distinct = ctx.MakeConstraint<TDistinctConstraintNode>(TDistinctConstraintNode::TContentType{sets});
+ unique = ctx.MakeConstraint<TUniqueConstraintNode>(TUniqueConstraintNode::TContentType{sets})->GetComplicatedForType(*input->Head().GetTypeAnn(), ctx);
+ distinct = ctx.MakeConstraint<TDistinctConstraintNode>(TDistinctConstraintNode::TContentType{sets})->GetComplicatedForType(*input->Head().GetTypeAnn(), ctx);
if constexpr (Wide) {
if (const auto& mapping = TPartOfUniqueConstraintNode::GetCommonMapping(unique); !mapping.empty()) {
for (ui32 i = 0U; i < argsConstraints.size(); ++i) {
@@ -2890,7 +2891,7 @@ private:
if (const auto updatePart = GetConstraintFromLambda<TConstraint, Wide>(input->Tail(), ctx))
if (const auto update = TConstraint::MakeComplete(ctx, updatePart->GetColumnMapping(), original))
if (const auto common = init->MakeCommon(update, ctx))
- input->AddConstraint(common);
+ input->AddConstraint(common->GetSimplifiedForType(*input->GetTypeAnn(), ctx));
}
template<bool Wide>
@@ -3017,7 +3018,7 @@ private:
if constexpr (Partitions) {
if (!keys.empty())
- argConstraints.emplace_back(ctx.MakeConstraint<TChoppedConstraintNode>(keys));
+ argConstraints.emplace_back(ctx.MakeConstraint<TChoppedConstraintNode>(keys)->GetComplicatedForType(*input->Head().GetTypeAnn(), ctx));
}
if (const auto status = UpdateLambdaConstraints(input->ChildRef(TCoBase::idx_ListHandlerLambda), ctx, {argConstraints}); status != TStatus::Ok) {