aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authora-romanov <a-romanov@yandex-team.ru>2022-06-20 18:55:19 +0300
committera-romanov <a-romanov@yandex-team.ru>2022-06-20 18:55:19 +0300
commit41b00c12faf1a4cebd46cb98a724c9e010e4fe6e (patch)
tree671ac80fe3bbd236730ed7042f47c091083a24af
parent798d25a291578fceb2223382b508fba1723fef4a (diff)
downloadydb-41b00c12faf1a4cebd46cb98a724c9e010e4fe6e.tar.gz
YQL-14458 fix.
ref:5002450b816094acdb1159c412ddc86f6118fd7c
-rw-r--r--ydb/library/yql/core/yql_expr_constraint.cpp38
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()) {