diff options
author | pnv1 <[email protected]> | 2023-01-10 15:56:26 +0300 |
---|---|---|
committer | pnv1 <[email protected]> | 2023-01-10 15:56:26 +0300 |
commit | 9c2656be278f707dd2ed430b385352254ea2ec6a (patch) | |
tree | b2d0785b5e6b4fee09ced5e4ce61f5772a4c46b4 | |
parent | 2b51fc1f75ba6ed8b013f3a00b7081c23fdf0dba (diff) |
Add Int64 to partition at keys available types
-rw-r--r-- | ydb/core/kqp/gateway/kqp_ic_gateway.cpp | 4 | ||||
-rw-r--r-- | ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp | 55 |
2 files changed, 59 insertions, 0 deletions
diff --git a/ydb/core/kqp/gateway/kqp_ic_gateway.cpp b/ydb/core/kqp/gateway/kqp_ic_gateway.cpp index ae39f774766..e575d9b18a9 100644 --- a/ydb/core/kqp/gateway/kqp_ic_gateway.cpp +++ b/ydb/core/kqp/gateway/kqp_ic_gateway.cpp @@ -2218,6 +2218,10 @@ private: toType->set_type_id(Ydb::Type::UINT32); toValue->set_uint32_value(FromString<ui32>(fromValue)); break; + case NYql::EDataSlot::Int64: + toType->set_type_id(Ydb::Type::INT64); + toValue->set_int64_value(FromString<i64>(fromValue)); + break; case NYql::EDataSlot::Uint64: toType->set_type_id(Ydb::Type::UINT64); toValue->set_uint64_value(FromString<ui64>(fromValue)); diff --git a/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp b/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp index 4e6a46686b2..13604632311 100644 --- a/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp +++ b/ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp @@ -1659,6 +1659,61 @@ Y_UNIT_TEST_SUITE(KqpScheme) { CreateTableWithPartitionAtKeysSimple(true); } + Y_UNIT_TEST(CreateTableWithPartitionAtKeysSigned) { + TKikimrRunner kikimr; + auto db = kikimr.GetTableClient(); + auto session = db.CreateSession().GetValueSync().GetSession(); + TString tableName = "/Root/TableWithPartitionAtKeysSigned"; + auto query = TStringBuilder() << R"( + --!syntax_v1 + CREATE TABLE `)" << tableName << R"(` ( + Key1 Int64, + Key2 String, + Value String, + PRIMARY KEY (Key1, Key2) + ) + WITH ( + PARTITION_AT_KEYS = ( 0, 10, 10000 ) + );)"; + auto result = session.ExecuteSchemeQuery(query).GetValueSync(); + UNIT_ASSERT_VALUES_EQUAL_C(result.GetStatus(), EStatus::SUCCESS, result.GetIssues().ToString()); + + auto describeResult = session.DescribeTable(tableName, + TDescribeTableSettings().WithTableStatistics(true).WithKeyShardBoundary(true)).GetValueSync(); + UNIT_ASSERT_C(describeResult.IsSuccess(), result.GetIssues().ToString()); + UNIT_ASSERT_VALUES_EQUAL(describeResult.GetTableDescription().GetPartitionsCount(), 4); + + auto extractValue = [](const TValue& val) { + auto parser = TValueParser(val); + parser.OpenTuple(); + UNIT_ASSERT(parser.TryNextElement()); + return parser.GetOptionalInt64().GetRef(); + }; + + const TVector<TKeyRange>& keyRanges = describeResult.GetTableDescription().GetKeyRanges(); + + size_t n = 0; + const TVector<i64> expectedRanges = { 0l, 10l, 10000l }; + + for (const auto& range : keyRanges) { + if (n == 0) { + UNIT_ASSERT(!range.From()); + } else { + UNIT_ASSERT(range.From()->IsInclusive()); + auto left = extractValue(range.From()->GetValue()); + UNIT_ASSERT_VALUES_EQUAL(left, expectedRanges[n - 1]); + } + if (n == expectedRanges.size()) { + UNIT_ASSERT(!range.To()); + } else { + UNIT_ASSERT(!range.To()->IsInclusive()); + auto right = extractValue(range.To()->GetValue()); + UNIT_ASSERT_VALUES_EQUAL(right, expectedRanges[n]); + } + ++n; + } + } + Y_UNIT_TEST(CreateTableWithPartitionAtKeysComplex) { TKikimrRunner kikimr; auto db = kikimr.GetTableClient(); |