This is an automated email from the ASF dual-hosted git repository.

gongxun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudberry.git


The following commit(s) were added to refs/heads/main by this push:
     new 1ca7a645469 perf: use unique_ptr instead of shared_ptr (#1374)
1ca7a645469 is described below

commit 1ca7a645469f175349887a63960b9daa1ed415c5
Author: Xun Gong <[email protected]>
AuthorDate: Wed Oct 8 23:24:47 2025 +0800

    perf: use unique_ptr instead of shared_ptr (#1374)
    
    performance: replace unnecessary shared_ptr with unique_ptr to eliminate 
atomic refcounting and reduce contention on hot insert paths.
---
 .../src/cpp/storage/columns/pax_column.cc          | 12 ++---
 .../src/cpp/storage/columns/pax_column.h           | 16 ++++---
 .../src/cpp/storage/columns/pax_column_test.cc     | 26 +++++------
 .../src/cpp/storage/columns/pax_encoding_column.cc |  6 +--
 .../src/cpp/storage/columns/pax_encoding_column.h  |  2 +-
 .../columns/pax_encoding_non_fixed_column.cc       | 12 ++---
 .../columns/pax_encoding_non_fixed_column.h        |  4 +-
 .../src/cpp/storage/orc/orc_format_reader.cc       | 52 +++++++++++-----------
 8 files changed, 66 insertions(+), 64 deletions(-)

diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_column.cc 
b/contrib/pax_storage/src/cpp/storage/columns/pax_column.cc
index 7d4daf6aaf0..eb1a47aa41e 100644
--- a/contrib/pax_storage/src/cpp/storage/columns/pax_column.cc
+++ b/contrib/pax_storage/src/cpp/storage/columns/pax_column.cc
@@ -208,7 +208,7 @@ std::string PaxColumn::DebugString() {
 
 template <typename T>
 PaxCommColumn<T>::PaxCommColumn(uint32 capacity) {
-  data_ = std::make_shared<DataBuffer<T>>(capacity * sizeof(T));
+  data_ = std::make_unique<DataBuffer<T>>(capacity * sizeof(T));
 }
 
 template <typename T>
@@ -218,7 +218,7 @@ template <typename T>  // NOLINT: redirect constructor
 PaxCommColumn<T>::PaxCommColumn() : PaxCommColumn(DEFAULT_CAPACITY) {}
 
 template <typename T>
-void PaxCommColumn<T>::Set(std::shared_ptr<DataBuffer<T>> data) {
+void PaxCommColumn<T>::Set(std::unique_ptr<DataBuffer<T>> data) {
   data_ = std::move(data);
 }
 
@@ -318,8 +318,8 @@ template class PaxCommColumn<double>;
 PaxNonFixedColumn::PaxNonFixedColumn(uint32 data_capacity,
                                      uint32 offsets_capacity)
     : estimated_size_(0),
-      data_(std::make_shared<DataBuffer<char>>(data_capacity)),
-      offsets_(std::make_shared<DataBuffer<int32>>(offsets_capacity)),
+      data_(std::make_unique<DataBuffer<char>>(data_capacity)),
+      offsets_(std::make_unique<DataBuffer<int32>>(offsets_capacity)),
       next_offsets_(0) {}
 
 PaxNonFixedColumn::PaxNonFixedColumn()
@@ -327,8 +327,8 @@ PaxNonFixedColumn::PaxNonFixedColumn()
 
 PaxNonFixedColumn::~PaxNonFixedColumn() {}
 
-void PaxNonFixedColumn::Set(std::shared_ptr<DataBuffer<char>> data,
-                            std::shared_ptr<DataBuffer<int32>> offsets,
+void PaxNonFixedColumn::Set(std::unique_ptr<DataBuffer<char>> data,
+                            std::unique_ptr<DataBuffer<int32>> offsets,
                             size_t total_size) {
   estimated_size_ = total_size;
   data_ = std::move(data);
diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_column.h 
b/contrib/pax_storage/src/cpp/storage/columns/pax_column.h
index 45c78bc0de0..569293fb512 100644
--- a/contrib/pax_storage/src/cpp/storage/columns/pax_column.h
+++ b/contrib/pax_storage/src/cpp/storage/columns/pax_column.h
@@ -239,7 +239,9 @@ class PaxColumn {
   }
 
   // Get the null bitmap
-  inline const std::unique_ptr<Bitmap8>& GetBitmap() const { return 
null_bitmap_; }
+  inline const std::unique_ptr<Bitmap8> &GetBitmap() const {
+    return null_bitmap_;
+  }
 
   // Set the column kv attributes
   void SetAttributes(const std::map<std::string, std::string> &attrs);
@@ -425,7 +427,7 @@ class PaxCommColumn : public PaxColumn {
 
   PaxCommColumn();
 
-  virtual void Set(std::shared_ptr<DataBuffer<T>> data);
+  virtual void Set(std::unique_ptr<DataBuffer<T>> data);
 
   PaxColumnTypeInMem GetPaxColumnTypeInMem() const override;
 
@@ -455,7 +457,7 @@ class PaxCommColumn : public PaxColumn {
   int32 GetTypeLength() const override;
 
  protected:
-  std::shared_ptr<DataBuffer<T>> data_;
+  std::unique_ptr<DataBuffer<T>> data_;
 };
 
 extern template class PaxCommColumn<char>;
@@ -474,8 +476,8 @@ class PaxNonFixedColumn : public PaxColumn {
 
   ~PaxNonFixedColumn() override;
 
-  virtual void Set(std::shared_ptr<DataBuffer<char>> data,
-                   std::shared_ptr<DataBuffer<int32>> offsets,
+  virtual void Set(std::unique_ptr<DataBuffer<char>> data,
+                   std::unique_ptr<DataBuffer<int32>> offsets,
                    size_t total_size);
 
   void Append(char *buffer, size_t size) override;
@@ -514,13 +516,13 @@ class PaxNonFixedColumn : public PaxColumn {
 
  protected:
   size_t estimated_size_;
-  std::shared_ptr<DataBuffer<char>> data_;
+  std::unique_ptr<DataBuffer<char>> data_;
 
   // orc needs to serialize int32 array
   // the length of a single tuple field will not exceed 2GB,
   // so a variable-length element of the offsets stream can use int32
   // to represent the length
-  std::shared_ptr<DataBuffer<int32>> offsets_;
+  std::unique_ptr<DataBuffer<int32>> offsets_;
 
   // used to record next offset in write path
   // in read path, next_offsets_ always be -1
diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc 
b/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc
index f39e453cfee..b1c75c39217 100644
--- a/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc
+++ b/contrib/pax_storage/src/cpp/storage/columns/pax_column_test.cc
@@ -137,7 +137,7 @@ static std::unique_ptr<PaxColumn> CreateDecodeColumn(
   std::unique_ptr<PaxColumn> column_rc;
   switch (bits) {
     case 16: {
-      auto buffer_for_read = std::make_shared<DataBuffer<int16>>(
+      auto buffer_for_read = std::make_unique<DataBuffer<int16>>(
           reinterpret_cast<int16 *>(encoded_buff), encoded_len, false, false);
       buffer_for_read->Brush(encoded_len);
 
@@ -145,19 +145,19 @@ static std::unique_ptr<PaxColumn> CreateDecodeColumn(
         auto int_column =
             ColumnOptCreateTraits<PaxEncodingColumn, int16>::create_decoding(
                 origin_len / sizeof(int16), std::move(decoding_option));
-        int_column->Set(buffer_for_read);
+        int_column->Set(std::move(buffer_for_read));
         column_rc = std::move(int_column);
       } else {
         auto int_column =
             ColumnOptCreateTraits<PaxVecEncodingColumn, 
int16>::create_decoding(
                 origin_len / sizeof(int16), std::move(decoding_option));
-        int_column->Set(buffer_for_read, column_not_nulls);
+        int_column->Set(std::move(buffer_for_read), column_not_nulls);
         column_rc = std::move(int_column);
       }
       break;
     }
     case 32: {
-      auto buffer_for_read = std::make_shared<DataBuffer<int32>>(
+      auto buffer_for_read = std::make_unique<DataBuffer<int32>>(
           reinterpret_cast<int32 *>(encoded_buff), encoded_len, false, false);
       buffer_for_read->Brush(encoded_len);
 
@@ -165,19 +165,19 @@ static std::unique_ptr<PaxColumn> CreateDecodeColumn(
         auto int_column =
             ColumnOptCreateTraits<PaxEncodingColumn, int32>::create_decoding(
                 origin_len / sizeof(int32), std::move(decoding_option));
-        int_column->Set(buffer_for_read);
+        int_column->Set(std::move(buffer_for_read));
         column_rc = std::move(int_column);
       } else {
         auto int_column =
             ColumnOptCreateTraits<PaxVecEncodingColumn, 
int32>::create_decoding(
                 origin_len / sizeof(int32), std::move(decoding_option));
-        int_column->Set(buffer_for_read, column_not_nulls);
+        int_column->Set(std::move(buffer_for_read), column_not_nulls);
         column_rc = std::move(int_column);
       }
       break;
     }
     case 64: {
-      auto buffer_for_read = std::make_shared<DataBuffer<int64>>(
+      auto buffer_for_read = std::make_unique<DataBuffer<int64>>(
           reinterpret_cast<int64 *>(encoded_buff), encoded_len, false, false);
       buffer_for_read->Brush(encoded_len);
 
@@ -185,13 +185,13 @@ static std::unique_ptr<PaxColumn> CreateDecodeColumn(
         auto int_column =
             ColumnOptCreateTraits<PaxEncodingColumn, int64>::create_decoding(
                 origin_len / sizeof(int64), std::move(decoding_option));
-        int_column->Set(buffer_for_read);
+        int_column->Set(std::move(buffer_for_read));
         column_rc = std::move(int_column);
       } else {
         auto int_column =
             ColumnOptCreateTraits<PaxVecEncodingColumn, 
int64>::create_decoding(
                 origin_len / sizeof(int64), std::move(decoding_option));
-        int_column->Set(buffer_for_read, column_not_nulls);
+        int_column->Set(std::move(buffer_for_read), column_not_nulls);
         column_rc = std::move(int_column);
       }
       break;
@@ -749,14 +749,14 @@ TEST_P(PaxNonFixedColumnCompressTest,
   auto non_fixed_column_for_read = new PaxNonFixedEncodingColumn(
       number_of_rows * number, sizeof(int32) * number_of_rows,
       std::move(decoding_option));
-  auto data_buffer_for_read = std::make_shared<DataBuffer<char>>(
+  auto data_buffer_for_read = std::make_unique<DataBuffer<char>>(
       encoded_buff, encoded_len, false, false);
   data_buffer_for_read->Brush(encoded_len);
-  auto length_buffer_cpy = std::make_shared<DataBuffer<int32>>(
+  auto length_buffer_cpy = std::make_unique<DataBuffer<int32>>(
       (int32 *)offset_stream_buff, offset_stream_len, false, false);
   length_buffer_cpy->BrushAll();
-  non_fixed_column_for_read->Set(data_buffer_for_read, length_buffer_cpy,
-                                 origin_len);
+  non_fixed_column_for_read->Set(std::move(data_buffer_for_read),
+                                 std::move(length_buffer_cpy), origin_len);
   ASSERT_EQ(non_fixed_column_for_read->GetCompressLevel(), 5);
   char *verify_buff;
   size_t verify_len;
diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.cc 
b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.cc
index b59a5b879c1..0f93467812b 100644
--- a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.cc
+++ b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.cc
@@ -124,7 +124,7 @@ void PaxEncodingColumn<T>::InitDecoder() {
 }
 
 template <typename T>
-void PaxEncodingColumn<T>::Set(std::shared_ptr<DataBuffer<T>> data) {
+void PaxEncodingColumn<T>::Set(std::unique_ptr<DataBuffer<T>> data) {
   if (decoder_) {
     // should not decoding null
     if (data->Used() != 0) {
@@ -155,7 +155,7 @@ void 
PaxEncodingColumn<T>::Set(std::shared_ptr<DataBuffer<T>> data) {
 
     Assert(!data->IsMemTakeOver());
   } else {
-    PaxCommColumn<T>::Set(data);
+    PaxCommColumn<T>::Set(std::move(data));
   }
 }
 
@@ -175,7 +175,7 @@ std::pair<char *, size_t> PaxEncodingColumn<T>::GetBuffer() 
{
     if (encoder_) {
       // changed streaming encode to blocking encode
       // because we still need store a origin data in `PaxCommColumn<T>`
-      auto origin_data_buffer = PaxCommColumn<T>::data_;
+      auto origin_data_buffer = PaxCommColumn<T>::data_.get();
 
       shared_data_ = 
std::make_shared<DataBuffer<char>>(origin_data_buffer->Used());
       encoder_->SetDataBuffer(shared_data_);
diff --git a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.h 
b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.h
index 773a7848f2f..5a5f1c378ba 100644
--- a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.h
+++ b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_column.h
@@ -44,7 +44,7 @@ class PaxEncodingColumn : public PaxCommColumn<T> {
 
   ~PaxEncodingColumn() override;
 
-  void Set(std::shared_ptr<DataBuffer<T>> data) override;
+  void Set(std::unique_ptr<DataBuffer<T>> data) override;
 
   std::pair<char *, size_t> GetBuffer() override;
 
diff --git 
a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.cc 
b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.cc
index 90060050236..359a1c483a9 100644
--- 
a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.cc
+++ 
b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.cc
@@ -145,8 +145,8 @@ PaxNonFixedEncodingColumn::PaxNonFixedEncodingColumn(
 
 PaxNonFixedEncodingColumn::~PaxNonFixedEncodingColumn() {}
 
-void PaxNonFixedEncodingColumn::Set(std::shared_ptr<DataBuffer<char>> data,
-                                    std::shared_ptr<DataBuffer<int32>> offsets,
+void PaxNonFixedEncodingColumn::Set(std::unique_ptr<DataBuffer<char>> data,
+                                    std::unique_ptr<DataBuffer<int32>> offsets,
                                     size_t total_size) {
   bool exist_decoder;
   Assert(data && offsets);
@@ -179,7 +179,7 @@ void 
PaxNonFixedEncodingColumn::Set(std::shared_ptr<DataBuffer<char>> data,
       // `data_` have the same buffer with `shared_data_`
       PaxNonFixedColumn::data_->Brush(shared_data_->Used());
       // no delete the origin data
-      shared_data_ = data;
+      shared_data_ = std::move(data);
     }
   };
 
@@ -228,16 +228,16 @@ void 
PaxNonFixedEncodingColumn::Set(std::shared_ptr<DataBuffer<char>> data,
     PaxNonFixedColumn::next_offsets_ = -1;
   } else if (exist_decoder && !has_offsets_processor) {
     data_decompress();
-    PaxNonFixedColumn::offsets_ = offsets;
+    PaxNonFixedColumn::offsets_ = std::move(offsets);
     PaxNonFixedColumn::estimated_size_ = total_size;
     PaxNonFixedColumn::next_offsets_ = -1;
   } else if (!exist_decoder && has_offsets_processor) {
-    PaxNonFixedColumn::data_ = data;
+    PaxNonFixedColumn::data_ = std::move(data);
     offsets_decompress();
     PaxNonFixedColumn::estimated_size_ = total_size;
     PaxNonFixedColumn::next_offsets_ = -1;
   } else {  // (!compressor_ && !offsets_compressor_)
-    PaxNonFixedColumn::Set(data, offsets, total_size);
+    PaxNonFixedColumn::Set(std::move(data), std::move(offsets), total_size);
   }
 }
 
diff --git 
a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.h 
b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.h
index 06b60d02ac2..f5f5fd82128 100644
--- 
a/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.h
+++ 
b/contrib/pax_storage/src/cpp/storage/columns/pax_encoding_non_fixed_column.h
@@ -42,8 +42,8 @@ class PaxNonFixedEncodingColumn : public PaxNonFixedColumn {
 
   ~PaxNonFixedEncodingColumn() override;
 
-  void Set(std::shared_ptr<DataBuffer<char>> data,
-           std::shared_ptr<DataBuffer<int32>> offsets,
+  void Set(std::unique_ptr<DataBuffer<char>> data,
+           std::unique_ptr<DataBuffer<int32>> offsets,
            size_t total_size) override;
 
   std::pair<char *, size_t> GetBuffer() override;
diff --git a/contrib/pax_storage/src/cpp/storage/orc/orc_format_reader.cc 
b/contrib/pax_storage/src/cpp/storage/orc/orc_format_reader.cc
index 2fa58790d97..9e939305c61 100644
--- a/contrib/pax_storage/src/cpp/storage/orc/orc_format_reader.cc
+++ b/contrib/pax_storage/src/cpp/storage/orc/orc_format_reader.cc
@@ -413,14 +413,14 @@ static std::unique_ptr<PaxColumn> BuildEncodingColumn(
     const ColumnEncoding &data_encoding, bool is_vec) {
   uint32 not_null_rows = 0;
   uint64 data_stream_len = 0;
-  std::shared_ptr<DataBuffer<T>> data_stream_buffer;
+  std::unique_ptr<DataBuffer<T>> data_stream_buffer;
 
   Assert(data_stream.kind() == pax::porc::proto::Stream_Kind_DATA);
 
   not_null_rows = static_cast<uint32>(data_stream.column());
   data_stream_len = static_cast<uint64>(data_stream.length());
 
-  data_stream_buffer = std::make_shared<DataBuffer<T>>(
+  data_stream_buffer = std::make_unique<DataBuffer<T>>(
       reinterpret_cast<T *>(data_buffer->GetAvailableBuffer()), 
data_stream_len,
       false, false);
 
@@ -443,7 +443,7 @@ static std::unique_ptr<PaxColumn> BuildEncodingColumn(
     auto pax_column =
         traits::ColumnOptCreateTraits<PaxVecEncodingColumn, 
T>::create_decoding(
             alloc_size, decoding_option);
-    pax_column->Set(data_stream_buffer, (size_t)not_null_rows);
+    pax_column->Set(std::move(data_stream_buffer), (size_t)not_null_rows);
     return pax_column;
   } else {
     AssertImply(data_encoding.kind() ==
@@ -455,7 +455,7 @@ static std::unique_ptr<PaxColumn> BuildEncodingColumn(
     auto pax_column =
         traits::ColumnOptCreateTraits<PaxEncodingColumn, T>::create_decoding(
             alloc_size, decoding_option);
-    pax_column->Set(data_stream_buffer);
+    pax_column->Set(std::move(data_stream_buffer));
     return pax_column;
   }
 }
@@ -466,14 +466,14 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingBitPackedColumn(
     bool is_vec) {
   uint32 not_null_rows = 0;
   uint64 column_data_len = 0;
-  std::shared_ptr<DataBuffer<int8>> column_data_buffer;
+  std::unique_ptr<DataBuffer<int8>> column_data_buffer;
 
   Assert(data_stream.kind() == pax::porc::proto::Stream_Kind_DATA);
 
   not_null_rows = static_cast<uint32>(data_stream.column());
   column_data_len = static_cast<uint64>(data_stream.length());
 
-  column_data_buffer = std::make_shared<DataBuffer<int8>>(
+  column_data_buffer = std::make_unique<DataBuffer<int8>>(
       reinterpret_cast<int8 *>(data_buffer->GetAvailableBuffer()),
       column_data_len, false, false);
 
@@ -496,7 +496,7 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingBitPackedColumn(
     auto pax_column =
         traits::ColumnOptCreateTraits2<PaxVecBitPackedColumn>::create_decoding(
             alloc_size, decoding_option);
-    pax_column->Set(column_data_buffer, (size_t)not_null_rows);
+    pax_column->Set(std::move(column_data_buffer), (size_t)not_null_rows);
     return pax_column;
   } else {
     AssertImply(data_encoding.kind() ==
@@ -508,7 +508,7 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingBitPackedColumn(
     auto pax_column =
         traits::ColumnOptCreateTraits2<PaxBitPackedColumn>::create_decoding(
             alloc_size, decoding_option);
-    pax_column->Set(column_data_buffer);
+    pax_column->Set(std::move(column_data_buffer));
     return pax_column;
   }
 }
@@ -521,8 +521,8 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingDecimalColumn(
   uint32 not_null_rows = 0;
   uint64 offset_stream_len = 0;
   uint64 data_stream_len = 0;
-  std::shared_ptr<DataBuffer<int32>> offset_stream_buffer;
-  std::shared_ptr<DataBuffer<char>> data_stream_buffer;
+  std::unique_ptr<DataBuffer<int32>> offset_stream_buffer;
+  std::unique_ptr<DataBuffer<char>> data_stream_buffer;
   std::unique_ptr<PaxNonFixedColumn> pax_column;
   uint64 padding = 0;
 
@@ -530,7 +530,7 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingDecimalColumn(
   offset_stream_len = static_cast<uint64>(len_stream.length());
   padding = len_stream.padding();
 
-  offset_stream_buffer = std::make_shared<DataBuffer<int32>>(
+  offset_stream_buffer = std::make_unique<DataBuffer<int32>>(
       reinterpret_cast<int32 *>(data_buffer->GetAvailableBuffer()),
       offset_stream_len, false, false);
 
@@ -560,7 +560,7 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingDecimalColumn(
   }
 #endif
 
-  data_stream_buffer = std::make_shared<DataBuffer<char>>(
+  data_stream_buffer = std::make_unique<DataBuffer<char>>(
       data_buffer->GetAvailableBuffer(), data_stream_len, false, false);
   data_stream_buffer->BrushAll();
   data_buffer->Brush(data_stream_len);
@@ -591,7 +591,7 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingDecimalColumn(
           data_cap, offsets_cap, std::move(decoding_option));
 
   // current memory will be freed in pax_columns->data_
-  pax_column->Set(data_stream_buffer, offset_stream_buffer, data_stream_len);
+  pax_column->Set(std::move(data_stream_buffer), 
std::move(offset_stream_buffer), data_stream_len);
   return pax_column;
 }
 
@@ -601,7 +601,7 @@ static std::unique_ptr<PaxColumn> 
BuildVecEncodingDecimalColumn(
     const ColumnEncoding &data_encoding, bool is_vec) {
   uint32 not_null_rows = 0;
   uint64 data_stream_len = 0;
-  std::shared_ptr<DataBuffer<int8>> data_stream_buffer;
+  std::unique_ptr<DataBuffer<int8>> data_stream_buffer;
 
   CBDB_CHECK(is_vec, cbdb::CException::ExType::kExTypeLogicError);
 
@@ -610,7 +610,7 @@ static std::unique_ptr<PaxColumn> 
BuildVecEncodingDecimalColumn(
   not_null_rows = static_cast<uint32>(data_stream.column());
   data_stream_len = static_cast<uint64>(data_stream.length());
 
-  data_stream_buffer = std::make_shared<DataBuffer<int8>>(
+  data_stream_buffer = std::make_unique<DataBuffer<int8>>(
       reinterpret_cast<int8 *>(data_buffer->GetAvailableBuffer()),
       data_stream_len, false, false);
 
@@ -630,7 +630,7 @@ static std::unique_ptr<PaxColumn> 
BuildVecEncodingDecimalColumn(
 
   auto pax_column = traits::ColumnOptCreateTraits2<PaxShortNumericColumn>::  //
       create_decoding(alloc_size, decoding_option);
-  pax_column->Set(data_stream_buffer, (size_t)not_null_rows);
+  pax_column->Set(std::move(data_stream_buffer), (size_t)not_null_rows);
 
   return pax_column;
 }
@@ -644,8 +644,8 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingVecNonFixedColumn(
   uint64 offset_stream_len = 0;
   uint64 padding = 0;
   uint64 data_stream_len = 0;
-  std::shared_ptr<DataBuffer<int32>> offset_stream_buffer;
-  std::shared_ptr<DataBuffer<char>> data_stream_buffer;
+  std::unique_ptr<DataBuffer<int32>> offset_stream_buffer;
+  std::unique_ptr<DataBuffer<char>> data_stream_buffer;
   std::unique_ptr<PaxVecNonFixedColumn> pax_column;
   PaxDecoder::DecodingOption decoding_option;
   size_t data_cap, offsets_cap;
@@ -658,7 +658,7 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingVecNonFixedColumn(
   offset_stream_len = static_cast<uint64>(len_stream.length());
   padding = len_stream.padding();
 
-  offset_stream_buffer = std::make_shared<DataBuffer<int32>>(
+  offset_stream_buffer = std::make_unique<DataBuffer<int32>>(
       reinterpret_cast<int32 *>(data_buffer->GetAvailableBuffer()),
       offset_stream_len, false, false);
 
@@ -676,7 +676,7 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingVecNonFixedColumn(
   }
 
   data_buffer->Brush(offset_stream_len);
-  data_stream_buffer = std::make_shared<DataBuffer<char>>(
+  data_stream_buffer = std::make_unique<DataBuffer<char>>(
       data_buffer->GetAvailableBuffer(), data_stream_len, false, false);
 
   decoding_option.column_encode_type = data_encoding.kind();
@@ -730,7 +730,7 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingVecNonFixedColumn(
           create_decoding(data_cap, offsets_cap, std::move(decoding_option));
     }
   }
-  pax_column->Set(data_stream_buffer, offset_stream_buffer, data_stream_len,
+  pax_column->Set(std::move(data_stream_buffer), 
std::move(offset_stream_buffer), data_stream_len,
                   not_null_rows);
   return pax_column;
 }
@@ -743,8 +743,8 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingNonFixedColumn(
   [[maybe_unused]] uint32 not_null_rows = 0;
   uint64 offset_stream_len = 0;
   uint64 data_stream_len = 0;
-  std::shared_ptr<DataBuffer<int32>> offset_stream_buffer;
-  std::shared_ptr<DataBuffer<char>> data_stream_buffer;
+  std::unique_ptr<DataBuffer<int32>> offset_stream_buffer;
+  std::unique_ptr<DataBuffer<char>> data_stream_buffer;
   std::unique_ptr<PaxNonFixedColumn> pax_column;
   uint64 padding = 0;
   PaxDecoder::DecodingOption decoding_option;
@@ -754,7 +754,7 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingNonFixedColumn(
   offset_stream_len = static_cast<uint64>(len_stream.length());
   padding = len_stream.padding();
 
-  offset_stream_buffer = std::make_shared<DataBuffer<int32>>(
+  offset_stream_buffer = std::make_unique<DataBuffer<int32>>(
       reinterpret_cast<int32 *>(data_buffer->GetAvailableBuffer()),
       offset_stream_len, false, false);
 
@@ -776,7 +776,7 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingNonFixedColumn(
   }
 #endif
 
-  data_stream_buffer = std::make_shared<DataBuffer<char>>(
+  data_stream_buffer = std::make_unique<DataBuffer<char>>(
       data_buffer->GetAvailableBuffer(), data_stream_len, false, false);
   data_stream_buffer->BrushAll();
   data_buffer->Brush(data_stream_len);
@@ -819,7 +819,7 @@ static std::unique_ptr<PaxColumn> 
BuildEncodingNonFixedColumn(
   }
 
   // current memory will be freed in pax_columns->data_
-  pax_column->Set(data_stream_buffer, offset_stream_buffer, data_stream_len);
+  pax_column->Set(std::move(data_stream_buffer), 
std::move(offset_stream_buffer), data_stream_len);
   return pax_column;
 }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to