diff options
author | a-romanov <a-romanov@yandex-team.ru> | 2022-06-20 18:55:19 +0300 |
---|---|---|
committer | a-romanov <a-romanov@yandex-team.ru> | 2022-06-20 18:55:19 +0300 |
commit | 41b00c12faf1a4cebd46cb98a724c9e010e4fe6e (patch) | |
tree | 671ac80fe3bbd236730ed7042f47c091083a24af | |
parent | 798d25a291578fceb2223382b508fba1723fef4a (diff) | |
download | ydb-41b00c12faf1a4cebd46cb98a724c9e010e4fe6e.tar.gz |
YQL-14458 fix.
ref:5002450b816094acdb1159c412ddc86f6118fd7c
-rw-r--r-- | ydb/library/yql/core/yql_expr_constraint.cpp | 38 |
1 files changed, 19 insertions, 19 deletions
diff --git a/ydb/library/yql/core/yql_expr_constraint.cpp b/ydb/library/yql/core/yql_expr_constraint.cpp index f211c8e7fb..0db3056b81 100644 --- a/ydb/library/yql/core/yql_expr_constraint.cpp +++ b/ydb/library/yql/core/yql_expr_constraint.cpp @@ -1133,8 +1133,6 @@ private: } TStatus MemberWrap(const TExprNode::TPtr& input, TExprNode::TPtr& /*output*/, TExprContext& ctx) const { - TVector<TStringBuf> unique; - const auto& memberName = input->Tail().Content(); const auto& structNode = input->Head(); if (const auto structPassthrough = structNode.GetConstraint<TPassthroughConstraintNode>()) { @@ -1142,16 +1140,18 @@ private: input->AddConstraint(p); } } - if (!TCoNothing::Match(&structNode)) { + if (const auto emptyConstraint = structNode.GetConstraint<TEmptyConstraintNode>()) { + input->AddConstraint(emptyConstraint); + } else { + TVector<TStringBuf> unique; if (auto structUnique = structNode.GetConstraint<TUniqueConstraintNode>()) { if (structUnique->GetColumns().has(memberName)) { unique.push_back(memberName); } } - } - - if (!unique.empty()) { - input->AddConstraint(ctx.MakeConstraint<TUniqueConstraintNode>(std::move(unique))); + if (!unique.empty()) { + input->AddConstraint(ctx.MakeConstraint<TUniqueConstraintNode>(std::move(unique))); + } } if (structNode.IsCallable("AsStruct")) { @@ -1320,11 +1320,11 @@ private: TVector<TStringBuf> unique; TNodeSet srcStructs; - if (!TCoNothing::Match(&addStructNode)) { - if (auto structUnique = addStructNode.GetConstraint<TUniqueConstraintNode>()) { - srcStructs.insert(&addStructNode); - unique.insert(unique.end(), structUnique->GetColumns().begin(), structUnique->GetColumns().end()); - } + if (const auto emptyConstraint = addStructNode.GetConstraint<TEmptyConstraintNode>()) { + input->AddConstraint(emptyConstraint); + } else if (const auto structUnique = addStructNode.GetConstraint<TUniqueConstraintNode>()) { + srcStructs.insert(&addStructNode); + unique.insert(unique.end(), structUnique->GetColumns().begin(), structUnique->GetColumns().end()); } if (TCoMember::Match(valueNode)) { @@ -1901,8 +1901,6 @@ private: } TStatus NthWrap(const TExprNode::TPtr& input, TExprNode::TPtr& /*output*/, TExprContext& ctx) const { - TVector<TStringBuf> unique; - const auto& memberName = input->Tail().Content(); const auto& structNode = input->Head(); if (const auto structPassthrough = structNode.GetConstraint<TPassthroughConstraintNode>()) { @@ -1910,16 +1908,18 @@ private: input->AddConstraint(p); } } - if (!TCoNothing::Match(&structNode)) { + if (const auto emptyConstraint = structNode.GetConstraint<TEmptyConstraintNode>()) { + input->AddConstraint(emptyConstraint); + } else { + TVector<TStringBuf> unique; if (auto structUnique = structNode.GetConstraint<TUniqueConstraintNode>()) { if (structUnique->GetColumns().has(memberName)) { unique.push_back(memberName); } } - } - - if (!unique.empty()) { - input->AddConstraint(ctx.MakeConstraint<TUniqueConstraintNode>(std::move(unique))); + if (!unique.empty()) { + input->AddConstraint(ctx.MakeConstraint<TUniqueConstraintNode>(std::move(unique))); + } } if (input->Child(0)->IsList()) { |