Skip to content

Commit 211dcb8

Browse files
author
kenny1847
committed
feat ydb: extend integer types support
Added support for `std::[u]int8_t` and `std::[u]int16_t` to userver YDB IO. Tests: CI commit_hash:af103b5c95c63accfbf3e97e89daefa389e278fd
1 parent 2da4308 commit 211dcb8

5 files changed

Lines changed: 120 additions & 4 deletions

File tree

ydb/include/userver/ydb/io/primitives.hpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,34 @@ struct BoolTrait {
5757
static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
5858
};
5959

60+
struct Int8Trait {
61+
using Type = std::int8_t;
62+
static Type Parse(const NYdb::TValueParser& value_parser);
63+
template <typename Builder>
64+
static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
65+
};
66+
67+
struct Uint8Trait {
68+
using Type = std::uint8_t;
69+
static Type Parse(const NYdb::TValueParser& value_parser);
70+
template <typename Builder>
71+
static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
72+
};
73+
74+
struct Int16Trait {
75+
using Type = std::int16_t;
76+
static Type Parse(const NYdb::TValueParser& value_parser);
77+
template <typename Builder>
78+
static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
79+
};
80+
81+
struct Uint16Trait {
82+
using Type = std::uint16_t;
83+
static Type Parse(const NYdb::TValueParser& value_parser);
84+
template <typename Builder>
85+
static void Write(NYdb::TValueBuilderBase<Builder>& builder, Type value);
86+
};
87+
6088
struct Int32Trait {
6189
using Type = std::int32_t;
6290
static Type Parse(const NYdb::TValueParser& value_parser);
@@ -200,6 +228,30 @@ struct ValueTraits<std::optional<Int32Trait::Type>> : OptionalPrimitiveTraits<In
200228
template <>
201229
struct ValueTraits<Int32Trait::Type> : PrimitiveTraits<Int32Trait> {};
202230

231+
template <>
232+
struct ValueTraits<std::optional<Uint16Trait::Type>> : OptionalPrimitiveTraits<Uint16Trait> {};
233+
234+
template <>
235+
struct ValueTraits<Uint16Trait::Type> : PrimitiveTraits<Uint16Trait> {};
236+
237+
template <>
238+
struct ValueTraits<std::optional<Int16Trait::Type>> : OptionalPrimitiveTraits<Int16Trait> {};
239+
240+
template <>
241+
struct ValueTraits<Int16Trait::Type> : PrimitiveTraits<Int16Trait> {};
242+
243+
template <>
244+
struct ValueTraits<std::optional<Uint8Trait::Type>> : OptionalPrimitiveTraits<Uint8Trait> {};
245+
246+
template <>
247+
struct ValueTraits<Uint8Trait::Type> : PrimitiveTraits<Uint8Trait> {};
248+
249+
template <>
250+
struct ValueTraits<std::optional<Int8Trait::Type>> : OptionalPrimitiveTraits<Int8Trait> {};
251+
252+
template <>
253+
struct ValueTraits<Int8Trait::Type> : PrimitiveTraits<Int8Trait> {};
254+
203255
template <>
204256
struct ValueTraits<std::optional<BoolTrait::Type>> : OptionalPrimitiveTraits<BoolTrait> {};
205257

ydb/include/userver/ydb/io/supported_types.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44
///
55
/// Available primitive types:
66
/// * ValueType::Bool, bool
7+
/// * ValueType::Int8, std::int8_t
8+
/// * ValueType::UInt8, std::uint8_t
9+
/// * ValueType::Int16, std::int16_t
10+
/// * ValueType::UInt16, std::uint16_t
711
/// * ValueType::Int32, std::int32_t
812
/// * ValueType::Uint32, std::uint32_t
913
/// * ValueType::Int64, std::int64_t

ydb/include/userver/ydb/types.hpp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ namespace ydb {
1717
* YDB type | C++ type
1818
* ------------------------------
1919
* Bool | bool
20-
* Int8 | N/A
21-
* Uint8 | N/A
22-
* Int16 | N/A
23-
* Uint16 | N/A
20+
* Int8 | std::int8_t
21+
* Uint8 | std::uint8_t
22+
* Int16 | std::int16_t
23+
* Uint16 | std::uint16_t
2424
* Int32 | std::int32_t
2525
* Uint32 | std::uint32_t
2626
* Int64 | std::int64_t
@@ -55,6 +55,10 @@ using JsonDocument = utils::StrongTypedef<JsonDocumentTag, formats::json::Value>
5555
using InsertColumnValue = std::variant<
5656
std::string,
5757
bool,
58+
std::int8_t,
59+
std::uint8_t,
60+
std::int16_t,
61+
std::uint16_t,
5862
std::int32_t,
5963
std::uint32_t,
6064
std::int64_t,
@@ -64,6 +68,10 @@ using InsertColumnValue = std::variant<
6468
Timestamp,
6569
std::optional<std::string>,
6670
std::optional<bool>,
71+
std::optional<std::int8_t>,
72+
std::optional<std::uint8_t>,
73+
std::optional<std::int16_t>,
74+
std::optional<std::uint16_t>,
6775
std::optional<std::int32_t>,
6876
std::optional<std::uint32_t>,
6977
std::optional<std::int64_t>,

ydb/src/ydb/impl/type_category.hpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,18 @@ inline constexpr auto kTypeCategory = UndefinedTypeCategory{};
2323
template <>
2424
inline constexpr auto kTypeCategory<bool> = NYdb::EPrimitiveType::Bool;
2525

26+
template <>
27+
inline constexpr auto kTypeCategory<std::int8_t> = NYdb::EPrimitiveType::Int8;
28+
29+
template <>
30+
inline constexpr auto kTypeCategory<std::uint8_t> = NYdb::EPrimitiveType::Uint8;
31+
32+
template <>
33+
inline constexpr auto kTypeCategory<std::int16_t> = NYdb::EPrimitiveType::Int16;
34+
35+
template <>
36+
inline constexpr auto kTypeCategory<std::uint16_t> = NYdb::EPrimitiveType::Uint16;
37+
2638
template <>
2739
inline constexpr auto kTypeCategory<std::int32_t> = NYdb::EPrimitiveType::Int32;
2840

ydb/src/ydb/io/primitives.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,46 @@ void BoolTrait::Write(NYdb::TValueBuilderBase<Builder>& builder, Type value) {
155155
builder.Bool(value);
156156
}
157157

158+
template struct OptionalPrimitiveTraits<Int8Trait>;
159+
template struct PrimitiveTraits<Int8Trait>;
160+
161+
Int8Trait::Type Int8Trait::Parse(const NYdb::TValueParser& value_parser) { return value_parser.GetInt8(); }
162+
163+
template <typename Builder>
164+
void Int8Trait::Write(NYdb::TValueBuilderBase<Builder>& builder, Type value) {
165+
builder.Int8(value);
166+
}
167+
168+
template struct OptionalPrimitiveTraits<Uint8Trait>;
169+
template struct PrimitiveTraits<Uint8Trait>;
170+
171+
Uint8Trait::Type Uint8Trait::Parse(const NYdb::TValueParser& value_parser) { return value_parser.GetUint8(); }
172+
173+
template <typename Builder>
174+
void Uint8Trait::Write(NYdb::TValueBuilderBase<Builder>& builder, Type value) {
175+
builder.Uint8(value);
176+
}
177+
178+
template struct OptionalPrimitiveTraits<Int16Trait>;
179+
template struct PrimitiveTraits<Int16Trait>;
180+
181+
Int16Trait::Type Int16Trait::Parse(const NYdb::TValueParser& value_parser) { return value_parser.GetInt16(); }
182+
183+
template <typename Builder>
184+
void Int16Trait::Write(NYdb::TValueBuilderBase<Builder>& builder, Type value) {
185+
builder.Int16(value);
186+
}
187+
188+
template struct OptionalPrimitiveTraits<Uint16Trait>;
189+
template struct PrimitiveTraits<Uint16Trait>;
190+
191+
Uint16Trait::Type Uint16Trait::Parse(const NYdb::TValueParser& value_parser) { return value_parser.GetUint16(); }
192+
193+
template <typename Builder>
194+
void Uint16Trait::Write(NYdb::TValueBuilderBase<Builder>& builder, Type value) {
195+
builder.Uint16(value);
196+
}
197+
158198
template struct OptionalPrimitiveTraits<Int32Trait>;
159199
template struct PrimitiveTraits<Int32Trait>;
160200

0 commit comments

Comments
 (0)