From 0143ca249fe5e8e7254726a3e69871d8fd8c2225 Mon Sep 17 00:00:00 2001 From: Nikita Vasilev Date: Wed, 27 Nov 2024 10:54:28 +0300 Subject: [PATCH 1/5] fix --- ydb/core/kqp/runtime/kqp_read_actor.cpp | 17 ++++++++++ ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp | 32 +++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/ydb/core/kqp/runtime/kqp_read_actor.cpp b/ydb/core/kqp/runtime/kqp_read_actor.cpp index b30875968bf6..9f1aeabc7735 100644 --- a/ydb/core/kqp/runtime/kqp_read_actor.cpp +++ b/ydb/core/kqp/runtime/kqp_read_actor.cpp @@ -575,6 +575,23 @@ class TKqpReadActor : public TActorBootstrapped, public NYql::NDq ReadActorStateSpan.EndOk(); + if (state->HasRanges()) { + TVector ranges; + state->FillUnprocessedRanges(ranges, KeyColumnTypes, false); + + const auto& tr = *AppData()->TypeRegistry; + + for (ui64 i = 0; i < ranges.size(); ++i) { + CA_LOG_D("RANGE:: >> " << DebugPrintRange(KeyColumnTypes, ranges[i].ToTableRange(), tr)); + } + + for (ui64 i = 1; i < ranges.size(); ++i) { + auto comparison = CompareRanges(ranges[i - 1].ToTableRange(), ranges[i].ToTableRange(), KeyColumnTypes); + CA_LOG_D("TEST:: >> " << i << " RESULT: " << comparison); + YQL_ENSURE(comparison < 0); + } + } + auto keyDesc = std::move(request->ResultSet[0].KeyDescription); if (keyDesc->GetPartitions().empty()) { diff --git a/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp b/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp index 22aa68373965..36663ced239b 100644 --- a/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp +++ b/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp @@ -5221,6 +5221,38 @@ Y_UNIT_TEST_SUITE(KqpQueryService) { UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); CompareYson(R"([[6u]])", FormatResultSetYson(result.GetResultSet(0))); } + + { + auto result = client.ExecuteQuery(R"( + SELECT COUNT(*) FROM `/Root/DataShard` WHERE Col1 = "y"; + )", NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + CompareYson(R"([[2u]])", FormatResultSetYson(result.GetResultSet(0))); + } + + { + auto result = client.ExecuteQuery(R"( + SELECT COUNT(*) FROM `/Root/DataShard` WHERE Col1 > "j"; + )", NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + CompareYson(R"([[6u]])", FormatResultSetYson(result.GetResultSet(0))); + } + + { + auto result = client.ExecuteQuery(R"( + SELECT COUNT(*) FROM `/Root/DataShard` WHERE Col1 > "g"; + )", NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + CompareYson(R"([[6u]])", FormatResultSetYson(result.GetResultSet(0))); + } + + { + auto result = client.ExecuteQuery(R"( + SELECT COUNT(*) FROM `/Root/DataShard` WHERE Col1 >= "g"; + )", NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync(); + UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); + CompareYson(R"([[6u]])", FormatResultSetYson(result.GetResultSet(0))); + } } Y_UNIT_TEST(ReadManyShardsRange) { From 989dc97364c64446e889ec17d204f13671bc45bd Mon Sep 17 00:00:00 2001 From: Nikita Vasilev Date: Wed, 27 Nov 2024 13:24:17 +0300 Subject: [PATCH 2/5] fix --- ydb/core/kqp/runtime/kqp_read_actor.cpp | 17 ----------------- ydb/core/scheme/scheme_tabledefs.h | 8 ++++---- ydb/core/scheme/ut/ya.make | 1 + 3 files changed, 5 insertions(+), 21 deletions(-) diff --git a/ydb/core/kqp/runtime/kqp_read_actor.cpp b/ydb/core/kqp/runtime/kqp_read_actor.cpp index 9f1aeabc7735..b30875968bf6 100644 --- a/ydb/core/kqp/runtime/kqp_read_actor.cpp +++ b/ydb/core/kqp/runtime/kqp_read_actor.cpp @@ -575,23 +575,6 @@ class TKqpReadActor : public TActorBootstrapped, public NYql::NDq ReadActorStateSpan.EndOk(); - if (state->HasRanges()) { - TVector ranges; - state->FillUnprocessedRanges(ranges, KeyColumnTypes, false); - - const auto& tr = *AppData()->TypeRegistry; - - for (ui64 i = 0; i < ranges.size(); ++i) { - CA_LOG_D("RANGE:: >> " << DebugPrintRange(KeyColumnTypes, ranges[i].ToTableRange(), tr)); - } - - for (ui64 i = 1; i < ranges.size(); ++i) { - auto comparison = CompareRanges(ranges[i - 1].ToTableRange(), ranges[i].ToTableRange(), KeyColumnTypes); - CA_LOG_D("TEST:: >> " << i << " RESULT: " << comparison); - YQL_ENSURE(comparison < 0); - } - } - auto keyDesc = std::move(request->ResultSet[0].KeyDescription); if (keyDesc->GetPartitions().empty()) { diff --git a/ydb/core/scheme/scheme_tabledefs.h b/ydb/core/scheme/scheme_tabledefs.h index 2e8dc6941b45..e1ce5a0e38bd 100644 --- a/ydb/core/scheme/scheme_tabledefs.h +++ b/ydb/core/scheme/scheme_tabledefs.h @@ -333,19 +333,19 @@ int CompareBorders(TConstArrayRef first, TConstArrayRef second, bo if (FirstLeft && SecondLeft) { if (inclusiveFirst == inclusiveSecond) return 0; - return (inclusiveFirst ? 1 : -1); + return (inclusiveFirst ? -1 : 1); } else if (FirstLeft && !SecondLeft) { if (inclusiveFirst && inclusiveSecond) return 0; - return -1; + return 1; } else if (!FirstLeft && SecondLeft) { if (inclusiveFirst && inclusiveSecond) return 0; - return 1; + return -1; } else { // !FirstLeft && !SecondLeft if (inclusiveFirst == inclusiveSecond) return 0; - return (inclusiveFirst ? -1 : 1); + return (inclusiveFirst ? 1 : -1); } } diff --git a/ydb/core/scheme/ut/ya.make b/ydb/core/scheme/ut/ya.make index 0bcbd8ac8ba3..97b01cdeb8d9 100644 --- a/ydb/core/scheme/ut/ya.make +++ b/ydb/core/scheme/ut/ya.make @@ -12,6 +12,7 @@ PEERDIR( SRCS( scheme_borders_ut.cpp + scheme_ranges_ut.cpp scheme_tablecell_ut.cpp ) From 56fbdfb7cc1cf12e9098e57ce347a203f1506054 Mon Sep 17 00:00:00 2001 From: Nikita Vasilev Date: Wed, 27 Nov 2024 13:25:10 +0300 Subject: [PATCH 3/5] test --- ydb/core/scheme/scheme_ranges_ut.cpp | 139 +++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 ydb/core/scheme/scheme_ranges_ut.cpp diff --git a/ydb/core/scheme/scheme_ranges_ut.cpp b/ydb/core/scheme/scheme_ranges_ut.cpp new file mode 100644 index 000000000000..c11196f2747c --- /dev/null +++ b/ydb/core/scheme/scheme_ranges_ut.cpp @@ -0,0 +1,139 @@ +#include + +#include + +#include + +#include + +namespace NKikimr { + +Y_UNIT_TEST_SUITE(SchemeRanges) { + + TVector MakeTypes(size_t keysCount) { + TVector types; + types.reserve(keysCount); + for (size_t i = 0; i < keysCount; ++i) { + types.push_back(NScheme::TTypeInfo(NScheme::NTypeIds::Uint32)); + } + return types; + } + + TCell MakeUi32(ui32 key) { + return TCell::Make(ui32(key)); + } + + TCell MakeNull() { + return TCell(); + } + + Y_UNIT_TEST(RangesBorders) { + auto types = MakeTypes(1); + + for (ui32 flags = 0; flags < (1 << 4); ++flags) { + TVector firstLeft = {MakeUi32(1)}; + TVector firstRight = {MakeUi32(10)}; + TVector secondLeft = {MakeUi32(1)}; + TVector sedondRight = {MakeUi32(10)}; + TTableRange first(firstLeft, ((flags >> 0) & 1), firstRight, ((flags >> 1) & 1)); + TTableRange second(secondLeft, ((flags >> 2) & 1), sedondRight, ((flags >> 3) & 1)); + UNIT_ASSERT_EQUAL(CompareRanges(first, second, types), 0); + } + + TVector firstLeft = {MakeUi32(1)}; + TVector firstRight = {MakeUi32(10)}; + TVector secondLeft = {MakeUi32(10)}; + TVector sedondRight = {MakeUi32(100)}; + + { + TTableRange first(firstLeft, true, firstRight, true); + TTableRange second(secondLeft, true, sedondRight, true); + UNIT_ASSERT_EQUAL(CompareRanges(first, second, types), 0); + UNIT_ASSERT_EQUAL(CompareRanges(second, first, types), 0); + } + + { + TTableRange first(firstLeft, true, firstRight, false); + TTableRange second(secondLeft, true, sedondRight, true); + UNIT_ASSERT_EQUAL(CompareRanges(first, second, types), -1); + UNIT_ASSERT_EQUAL(CompareRanges(second, first, types), 1); + } + + { + TTableRange first(firstLeft, true, firstRight, true); + TTableRange second(secondLeft, false, sedondRight, true); + UNIT_ASSERT_EQUAL(CompareRanges(first, second, types), -1); + UNIT_ASSERT_EQUAL(CompareRanges(second, first, types), 1); + } + + { + TTableRange first(firstLeft, true, firstRight, false); + TTableRange second(secondLeft, false, sedondRight, true); + UNIT_ASSERT_EQUAL(CompareRanges(first, second, types), -1); + UNIT_ASSERT_EQUAL(CompareRanges(second, first, types), 1); + } + + { + TTableRange first(firstLeft, false, firstRight, false); + TTableRange second(secondLeft, false, sedondRight, false); + UNIT_ASSERT_EQUAL(CompareRanges(first, second, types), -1); + UNIT_ASSERT_EQUAL(CompareRanges(second, first, types), 1); + } + + { + TTableRange first(firstLeft, false, firstRight, true); + TTableRange second(secondLeft, false, sedondRight, false); + UNIT_ASSERT_EQUAL(CompareRanges(first, second, types), -1); + UNIT_ASSERT_EQUAL(CompareRanges(second, first, types), 1); + } + + { + TTableRange first(firstLeft, false, firstRight, false); + TTableRange second(secondLeft, true, sedondRight, false); + UNIT_ASSERT_EQUAL(CompareRanges(first, second, types), -1); + UNIT_ASSERT_EQUAL(CompareRanges(second, first, types), 1); + } + + { + TTableRange first(firstLeft, false, firstRight, true); + TTableRange second(secondLeft, true, sedondRight, false); + UNIT_ASSERT_EQUAL(CompareRanges(first, second, types), 0); + UNIT_ASSERT_EQUAL(CompareRanges(second, first, types), 0); + } + } + + Y_UNIT_TEST(CmpBorders) { + auto types = MakeTypes(1); + + TVector b1 = {MakeUi32(1)}; + TVector b10 = {MakeUi32(10)}; + TVector b100 = {MakeUi32(100)}; + + for (ui32 flags = 0; flags < (1 << 2); ++flags) { + UNIT_ASSERT_EQUAL((CompareBorders(b1, b10, ((flags >> 0) & 1), ((flags >> 1) & 1), types)), -1); + UNIT_ASSERT_EQUAL((CompareBorders(b100, b10, ((flags >> 0) & 1), ((flags >> 1) & 1), types)), 1); + } + + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, true, types)), 0); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, true, types)), 1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, false, types)), -1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, false, types)), 0); + + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, true, types)), 0); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, true, types)), -1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, false, types)), 1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, false, types)), 0); + + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, true, types)), 0); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, true, types)), 1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, false, types)), 1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, false, types)), 1); + + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, true, types)), 0); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, true, types)), -1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, false, types)), -1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, false, types)), -1); + } +} + +} From 8d1822bca7cc0aa64d60bb57925503d9e500bc2d Mon Sep 17 00:00:00 2001 From: Nikita Vasilev Date: Wed, 27 Nov 2024 13:42:00 +0300 Subject: [PATCH 4/5] fix --- ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp | 24 ------------------- 1 file changed, 24 deletions(-) diff --git a/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp b/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp index 36663ced239b..4268b42a4031 100644 --- a/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp +++ b/ydb/core/kqp/ut/service/kqp_qs_queries_ut.cpp @@ -5229,30 +5229,6 @@ Y_UNIT_TEST_SUITE(KqpQueryService) { UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); CompareYson(R"([[2u]])", FormatResultSetYson(result.GetResultSet(0))); } - - { - auto result = client.ExecuteQuery(R"( - SELECT COUNT(*) FROM `/Root/DataShard` WHERE Col1 > "j"; - )", NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync(); - UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); - CompareYson(R"([[6u]])", FormatResultSetYson(result.GetResultSet(0))); - } - - { - auto result = client.ExecuteQuery(R"( - SELECT COUNT(*) FROM `/Root/DataShard` WHERE Col1 > "g"; - )", NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync(); - UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); - CompareYson(R"([[6u]])", FormatResultSetYson(result.GetResultSet(0))); - } - - { - auto result = client.ExecuteQuery(R"( - SELECT COUNT(*) FROM `/Root/DataShard` WHERE Col1 >= "g"; - )", NYdb::NQuery::TTxControl::BeginTx().CommitTx()).ExtractValueSync(); - UNIT_ASSERT_C(result.IsSuccess(), result.GetIssues().ToString()); - CompareYson(R"([[6u]])", FormatResultSetYson(result.GetResultSet(0))); - } } Y_UNIT_TEST(ReadManyShardsRange) { From 6ce63938ef59ba0fc7e4564b4590b106efb55bf1 Mon Sep 17 00:00:00 2001 From: Nikita Vasilev Date: Wed, 27 Nov 2024 16:10:33 +0300 Subject: [PATCH 5/5] fix --- ydb/core/scheme/scheme_ranges_ut.cpp | 20 ++++++++++---------- ydb/core/scheme/scheme_tabledefs.h | 12 ++++++------ 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/ydb/core/scheme/scheme_ranges_ut.cpp b/ydb/core/scheme/scheme_ranges_ut.cpp index c11196f2747c..5a613290b754 100644 --- a/ydb/core/scheme/scheme_ranges_ut.cpp +++ b/ydb/core/scheme/scheme_ranges_ut.cpp @@ -115,24 +115,24 @@ Y_UNIT_TEST_SUITE(SchemeRanges) { } UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, true, types)), 0); - UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, true, types)), 1); - UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, false, types)), -1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, true, types)), -1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, false, types)), 1); UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, false, types)), 0); UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, true, types)), 0); - UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, true, types)), -1); - UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, false, types)), 1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, true, types)), 1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, false, types)), -1); UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, false, types)), 0); UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, true, types)), 0); - UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, true, types)), 1); - UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, false, types)), 1); - UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, false, types)), 1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, true, types)), -1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, false, types)), -1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, false, types)), -1); UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, true, types)), 0); - UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, true, types)), -1); - UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, false, types)), -1); - UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, false, types)), -1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, true, types)), 1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, true, false, types)), 1); + UNIT_ASSERT_EQUAL((CompareBorders(b10, b10, false, false, types)), 1); } } diff --git a/ydb/core/scheme/scheme_tabledefs.h b/ydb/core/scheme/scheme_tabledefs.h index e1ce5a0e38bd..7b406b557b40 100644 --- a/ydb/core/scheme/scheme_tabledefs.h +++ b/ydb/core/scheme/scheme_tabledefs.h @@ -333,19 +333,19 @@ int CompareBorders(TConstArrayRef first, TConstArrayRef second, bo if (FirstLeft && SecondLeft) { if (inclusiveFirst == inclusiveSecond) return 0; - return (inclusiveFirst ? -1 : 1); + return (inclusiveFirst ? 1 : -1); } else if (FirstLeft && !SecondLeft) { if (inclusiveFirst && inclusiveSecond) return 0; - return 1; + return -1; } else if (!FirstLeft && SecondLeft) { if (inclusiveFirst && inclusiveSecond) return 0; - return -1; + return 1; } else { // !FirstLeft && !SecondLeft if (inclusiveFirst == inclusiveSecond) return 0; - return (inclusiveFirst ? 1 : -1); + return (inclusiveFirst ? -1 : 1); } } @@ -356,12 +356,12 @@ inline int CompareRanges(const TTableRange& rangeX, const TTableRange& rangeY, Y_ABORT_UNLESS(!rangeX.Point); Y_ABORT_UNLESS(!rangeY.Point); - int xStart_yEnd = CompareBorders( + int xStart_yEnd = CompareBorders( rangeX.From, rangeY.To, rangeX.InclusiveFrom, rangeY.InclusiveTo, types); if (xStart_yEnd > 0) return 1; - int xEnd_yStart = CompareBorders( + int xEnd_yStart = CompareBorders( rangeX.To, rangeY.From, rangeX.InclusiveTo, rangeY.InclusiveFrom, types); if (xEnd_yStart < 0) return -1;