aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp/skiff/skiff.cpp
diff options
context:
space:
mode:
authorAndrey Chulkov <achulkov2@nebius.com>2024-10-15 14:10:17 +0300
committerrobot-piglet <robot-piglet@yandex-team.com>2024-10-15 14:27:22 +0300
commit05cf1efb77e08298322326fe748b6bcdb7b6526e (patch)
treeb55a13dc9277ebf98872ee1ddee93e8f24781265 /library/cpp/skiff/skiff.cpp
parent2ff5baf34b9dea61580028eb4c4afde7601232a7 (diff)
downloadydb-05cf1efb77e08298322326fe748b6bcdb7b6526e.tar.gz
Increase max decimal precision to 76 (decimal256)
* Changelog entry Type: feature Component: type system Support for decimals with precision from 35 to 76. This PR adds decimal256 support to YT. Additionally: - Decimal256 is supported in skiff as int256. - ClickHouse decimal precisions from 35 to 76 are supported in CHYT. --- Pull Request resolved: https://github.com/ytsaurus/ytsaurus/pull/798 Co-authored-by: ermolovd <ermolovd@yandex-team.com> Co-authored-by: dakovalkov <dakovalkov@yandex-team.com> commit_hash:73c4809966cf4c625e6007d31b5dde14bd80e829
Diffstat (limited to 'library/cpp/skiff/skiff.cpp')
-rw-r--r--library/cpp/skiff/skiff.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/library/cpp/skiff/skiff.cpp b/library/cpp/skiff/skiff.cpp
index cbdbdfe364..9b42628cc6 100644
--- a/library/cpp/skiff/skiff.cpp
+++ b/library/cpp/skiff/skiff.cpp
@@ -32,6 +32,18 @@ bool operator!=(TUint128 lhs, TUint128 rhs)
////////////////////////////////////////////////////////////////////////////////
+bool operator==(const TInt256& lhs, const TInt256& rhs)
+{
+ return lhs.Parts == rhs.Parts;
+}
+
+bool operator==(const TUint256& lhs, const TUint256& rhs)
+{
+ return lhs.Parts == rhs.Parts;
+}
+
+////////////////////////////////////////////////////////////////////////////////
+
TUncheckedSkiffParser::TUncheckedSkiffParser(IZeroCopyInput* underlying)
: Underlying_(underlying)
, Buffer_(512 * 1024)
@@ -95,6 +107,26 @@ TUint128 TUncheckedSkiffParser::ParseUint128()
return {low, high};
}
+TInt256 TUncheckedSkiffParser::ParseInt256()
+{
+ TInt256 result;
+ for (auto& part : result.Parts) {
+ part = ParseSimple<ui64>();
+ }
+
+ return result;
+}
+
+TUint256 TUncheckedSkiffParser::ParseUint256()
+{
+ TUint256 result;
+ for (auto& part : result.Parts) {
+ part = ParseSimple<ui64>();
+ }
+
+ return result;
+}
+
double TUncheckedSkiffParser::ParseDouble()
{
return ParseSimple<double>();
@@ -274,6 +306,18 @@ TUint128 TCheckedSkiffParser::ParseUint128()
return Parser_.ParseUint128();
}
+TInt256 TCheckedSkiffParser::ParseInt256()
+{
+ Validator_->OnSimpleType(EWireType::Int256);
+ return Parser_.ParseInt256();
+}
+
+TUint256 TCheckedSkiffParser::ParseUint256()
+{
+ Validator_->OnSimpleType(EWireType::Uint256);
+ return Parser_.ParseUint256();
+}
+
double TCheckedSkiffParser::ParseDouble()
{
Validator_->OnSimpleType(EWireType::Double);
@@ -389,6 +433,20 @@ void TUncheckedSkiffWriter::WriteUint128(TUint128 value)
WriteSimple<ui64>(value.High);
}
+void TUncheckedSkiffWriter::WriteInt256(const TInt256& value)
+{
+ for (auto part : value.Parts) {
+ WriteSimple<ui64>(part);
+ }
+}
+
+void TUncheckedSkiffWriter::WriteUint256(const TUint256& value)
+{
+ for (auto part : value.Parts) {
+ WriteSimple<ui64>(part);
+ }
+}
+
void TUncheckedSkiffWriter::WriteUint8(ui8 value)
{
WriteSimple<ui8>(value);
@@ -551,6 +609,18 @@ void TCheckedSkiffWriter::WriteUint128(TUint128 value)
Writer_.WriteUint128(value);
}
+void TCheckedSkiffWriter::WriteInt256(TInt256 value)
+{
+ Validator_->OnSimpleType(EWireType::Int256);
+ Writer_.WriteInt256(std::move(value));
+}
+
+void TCheckedSkiffWriter::WriteUint256(TUint256 value)
+{
+ Validator_->OnSimpleType(EWireType::Uint256);
+ Writer_.WriteUint256(std::move(value));
+}
+
void TCheckedSkiffWriter::WriteString32(TStringBuf value)
{
Validator_->OnSimpleType(EWireType::String32);