diff options
author | a-romanov <Anton.Romanov@ydb.tech> | 2023-04-09 08:20:10 +0300 |
---|---|---|
committer | a-romanov <Anton.Romanov@ydb.tech> | 2023-04-09 08:20:10 +0300 |
commit | 41d195f84607adc2883263000ecb9ba49e907ae9 (patch) | |
tree | 1a5ad70406a0c34138458f0ed86b142581a9a9e0 | |
parent | 7c973fcc5aa3d41f1c2fe34e71b7d03a9be5dedc (diff) | |
download | ydb-41d195f84607adc2883263000ecb9ba49e907ae9.tar.gz |
YQL-8971 YQL-15435 Fix unique for Condense1 corner case.
-rw-r--r-- | ydb/library/yql/ast/yql_constraint.cpp | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/ydb/library/yql/ast/yql_constraint.cpp b/ydb/library/yql/ast/yql_constraint.cpp index ac248dd7c02..190c323e83b 100644 --- a/ydb/library/yql/ast/yql_constraint.cpp +++ b/ydb/library/yql/ast/yql_constraint.cpp @@ -527,7 +527,7 @@ TUniqueConstraintNodeBase<Distinct>::ColumnsListToSet(const std::vector<std::str YQL_ENSURE(!columns.empty()); TSetType set; set.reserve(columns.size()); - std::transform(columns.cbegin(), columns.cend(), std::back_inserter(set), [](const std::string_view& column) { return TPathType(1U, column); }); + std::transform(columns.cbegin(), columns.cend(), std::back_inserter(set), [](const std::string_view& column) { return column.empty() ? TPathType() : TPathType(1U, column); }); std::sort(set.begin(), set.end()); return set; } @@ -1448,15 +1448,13 @@ TPassthroughConstraintNode::TMapType TPassthroughConstraintNode::GetColumnMappin } TPassthroughConstraintNode::TReverseMapType TPassthroughConstraintNode::GetReverseMapping() const { - if (1U == Mapping_.size() && 1U == Mapping_.cbegin()->second.size() && Mapping_.cbegin()->second.cbegin()->first.empty()) - return {{Mapping_.cbegin()->second.cbegin()->second, Mapping_.cbegin()->second.cbegin()->second}}; - TReverseMapType reverseMapping; for (const auto& part : Mapping_) { for (const auto& item : part.second) { - if (1U == item.first.size()) { + if (item.first.empty()) + reverseMapping.emplace_back(item.second, std::string_view()); + else if (1U == item.first.size()) reverseMapping.emplace_back(item.second, item.first.front()); - } } } ::Sort(reverseMapping); |