diff options
author | Andrey Chulkov <achulkov2@nebius.com> | 2024-10-15 14:10:17 +0300 |
---|---|---|
committer | robot-piglet <robot-piglet@yandex-team.com> | 2024-10-15 14:27:22 +0300 |
commit | 05cf1efb77e08298322326fe748b6bcdb7b6526e (patch) | |
tree | b55a13dc9277ebf98872ee1ddee93e8f24781265 /library/cpp/skiff/skiff.cpp | |
parent | 2ff5baf34b9dea61580028eb4c4afde7601232a7 (diff) | |
download | ydb-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.cpp | 70 |
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); |