summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpnv1 <[email protected]>2023-01-10 15:56:26 +0300
committerpnv1 <[email protected]>2023-01-10 15:56:26 +0300
commit9c2656be278f707dd2ed430b385352254ea2ec6a (patch)
treeb2d0785b5e6b4fee09ced5e4ce61f5772a4c46b4
parent2b51fc1f75ba6ed8b013f3a00b7081c23fdf0dba (diff)
Add Int64 to partition at keys available types
-rw-r--r--ydb/core/kqp/gateway/kqp_ic_gateway.cpp4
-rw-r--r--ydb/core/kqp/ut/scheme/kqp_scheme_ut.cpp55
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();