From c2f0c2d033c156c943eda04ff30f292af16c4f22 Mon Sep 17 00:00:00 2001 From: Andrew Slabko Date: Tue, 30 Jun 2026 17:35:46 +0200 Subject: [PATCH] Deprecate Abseil-backed 128-bit value APIs Add conditional deprecation warnings for public APIs that pass, return, or expose Int128/UInt128 values when clickhouse-cpp is built with CH_USE_ABSEIL_FOR_BIGNUM enabled. The Int128/UInt128 aliases themselves are not deprecated to avoid warnings for plain declarations. Instead, warnings are emitted at value-facing API use sites, including Bignum helpers, Decimal Int128 accessors, Type::CreateSimple specializations, and ColumnVector/ColumnVector value accessors. Users can opt into the future non-Abseil implementation with: -DCH_USE_ABSEIL_FOR_BIGNUM=OFF --- clickhouse/columns/decimal.cpp | 4 +++ clickhouse/columns/decimal.h | 6 ++--- clickhouse/columns/numeric.cpp | 45 ++++++++++++++++++++++++++++++++++ clickhouse/columns/numeric.h | 20 ++++++++++++++- clickhouse/types/bignum.h | 27 ++++++++++++-------- 5 files changed, 88 insertions(+), 14 deletions(-) diff --git a/clickhouse/columns/decimal.cpp b/clickhouse/columns/decimal.cpp index a714991c..30c4f9f1 100644 --- a/clickhouse/columns/decimal.cpp +++ b/clickhouse/columns/decimal.cpp @@ -158,6 +158,10 @@ Int128 ColumnDecimal::At(size_t i) const { } } +Int128 ColumnDecimal::operator[](size_t i) const { + return At(i); +} + std::string ColumnDecimal::StringAt(size_t i) const { auto scale = GetScale(); diff --git a/clickhouse/columns/decimal.h b/clickhouse/columns/decimal.h index ded0c1d4..d59f08e0 100644 --- a/clickhouse/columns/decimal.h +++ b/clickhouse/columns/decimal.h @@ -14,11 +14,11 @@ class ColumnDecimal : public Column { ColumnDecimal(size_t precision, size_t scale); - void Append(const Int128& value); + CH_ABSEIL_BIGNUM_DEPRECATED void Append(const Int128& value); void Append(const std::string& value); - Int128 At(size_t i) const; - inline auto operator[](size_t i) const { return At(i); } + CH_ABSEIL_BIGNUM_DEPRECATED Int128 At(size_t i) const; + CH_ABSEIL_BIGNUM_DEPRECATED Int128 operator[](size_t i) const; // Returns string representation of the decimal value std::string StringAt(size_t i) const; diff --git a/clickhouse/columns/numeric.cpp b/clickhouse/columns/numeric.cpp index 4819f37a..cc33d19d 100644 --- a/clickhouse/columns/numeric.cpp +++ b/clickhouse/columns/numeric.cpp @@ -63,6 +63,11 @@ const T& ColumnVector::At(size_t n) const { return data_.at(n); } +template +const T& ColumnVector::operator [] (size_t n) const { + return data_.at(n); +} + template void ColumnVector::Append(ColumnRef column) { if (auto col = column->As>()) { @@ -108,6 +113,46 @@ ItemView ColumnVector::GetItem(size_t index) const { return ItemView{type_->GetCode(), data_[index]}; } +template <> +void ColumnVector::Append(const Int128& value) { + data_.push_back(value); +} + +template <> +const Int128& ColumnVector::At(size_t n) const { + return data_.at(n); +} + +template <> +const Int128& ColumnVector::operator [] (size_t n) const { + return data_.at(n); +} + +template <> +std::vector& ColumnVector::GetWritableData() { + return data_; +} + +template <> +void ColumnVector::Append(const UInt128& value) { + data_.push_back(value); +} + +template <> +const UInt128& ColumnVector::At(size_t n) const { + return data_.at(n); +} + +template <> +const UInt128& ColumnVector::operator [] (size_t n) const { + return data_.at(n); +} + +template <> +std::vector& ColumnVector::GetWritableData() { + return data_; +} + template class ColumnVector; template class ColumnVector; template class ColumnVector; diff --git a/clickhouse/columns/numeric.h b/clickhouse/columns/numeric.h index 7caedd71..e40c9ba2 100644 --- a/clickhouse/columns/numeric.h +++ b/clickhouse/columns/numeric.h @@ -28,7 +28,7 @@ class ColumnVector : public Column { const T& At(size_t n) const; /// Returns element at given row number. - inline const T& operator [] (size_t n) const { return At(n); } + const T& operator [] (size_t n) const; void Erase(size_t pos, size_t count = 1); @@ -80,4 +80,22 @@ using ColumnInt128 = ColumnVector; using ColumnFloat32 = ColumnVector; using ColumnFloat64 = ColumnVector; +template <> +CH_ABSEIL_BIGNUM_DEPRECATED void ColumnVector::Append(const Int128& value); +template <> +CH_ABSEIL_BIGNUM_DEPRECATED const Int128& ColumnVector::At(size_t n) const; +template <> +CH_ABSEIL_BIGNUM_DEPRECATED const Int128& ColumnVector::operator [] (size_t n) const; +template <> +CH_ABSEIL_BIGNUM_DEPRECATED std::vector& ColumnVector::GetWritableData(); + +template <> +CH_ABSEIL_BIGNUM_DEPRECATED void ColumnVector::Append(const UInt128& value); +template <> +CH_ABSEIL_BIGNUM_DEPRECATED const UInt128& ColumnVector::At(size_t n) const; +template <> +CH_ABSEIL_BIGNUM_DEPRECATED const UInt128& ColumnVector::operator [] (size_t n) const; +template <> +CH_ABSEIL_BIGNUM_DEPRECATED std::vector& ColumnVector::GetWritableData(); + } diff --git a/clickhouse/types/bignum.h b/clickhouse/types/bignum.h index ca8aee62..eadcabbe 100644 --- a/clickhouse/types/bignum.h +++ b/clickhouse/types/bignum.h @@ -4,6 +4,13 @@ #include #include +#if CH_USE_ABSEIL_FOR_BIGNUM +#define CH_ABSEIL_BIGNUM_DEPRECATED \ + [[deprecated("clickhouse-cpp Abseil-backed Int128/UInt128 APIs are deprecated and will be removed soon; configure with -DCH_USE_ABSEIL_FOR_BIGNUM=OFF to use the non-Abseil implementation.")]] +#else +#define CH_ABSEIL_BIGNUM_DEPRECATED +#endif + #if defined(__SIZEOF_INT128__) #define CH_CPP_HAS_INT128 1 @@ -157,36 +164,36 @@ namespace clickhouse { class Bignum { public: - static Int128 StringToInt128(std::string_view str); - static UInt128 StringToUInt128(std::string_view str); + CH_ABSEIL_BIGNUM_DEPRECATED static Int128 StringToInt128(std::string_view str); + CH_ABSEIL_BIGNUM_DEPRECATED static UInt128 StringToUInt128(std::string_view str); - static std::string Int128ToString(const Int128 x); - static std::string UInt128ToString(const UInt128 x); + CH_ABSEIL_BIGNUM_DEPRECATED static std::string Int128ToString(const Int128 x); + CH_ABSEIL_BIGNUM_DEPRECATED static std::string UInt128ToString(const UInt128 x); #if CH_USE_ABSEIL_FOR_BIGNUM - static inline Int128 MakeInt128(int64_t hi, uint64_t lo) { + CH_ABSEIL_BIGNUM_DEPRECATED static inline Int128 MakeInt128(int64_t hi, uint64_t lo) { return absl::MakeInt128(hi, lo); } - static inline UInt128 MakeUInt128(uint64_t hi, uint64_t lo) { + CH_ABSEIL_BIGNUM_DEPRECATED static inline UInt128 MakeUInt128(uint64_t hi, uint64_t lo) { return absl::MakeUint128(hi, lo); } - static inline uint64_t Int128Low64(Int128 v) { + CH_ABSEIL_BIGNUM_DEPRECATED static inline uint64_t Int128Low64(Int128 v) { return absl::Int128Low64(v); } - static inline int64_t Int128High64(Int128 v) { + CH_ABSEIL_BIGNUM_DEPRECATED static inline int64_t Int128High64(Int128 v) { return absl::Int128High64(v); } - static inline uint64_t UInt128Low64(UInt128 v) { + CH_ABSEIL_BIGNUM_DEPRECATED static inline uint64_t UInt128Low64(UInt128 v) { return absl::Uint128Low64(v); } - static inline uint64_t UInt128High64(UInt128 v) { + CH_ABSEIL_BIGNUM_DEPRECATED static inline uint64_t UInt128High64(UInt128 v) { return absl::Uint128High64(v); }