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

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


The following commit(s) were added to refs/heads/main by this push:
     new 896e91308d GH-51264: [C++][Parquet] Make MemoryPool settable on 
ReaderProperties (#51269)
896e91308d is described below

commit 896e91308d1d25b906421ad5775e0604fea12b76
Author: Diveyam Mishra <[email protected]>
AuthorDate: Mon Sep 14 18:38:09 2026 +0530

    GH-51264: [C++][Parquet] Make MemoryPool settable on ReaderProperties 
(#51269)
    
    **Rationale for this change**
    In arrow::dataset::MakeReaderProperties, all parquet::ReaderProperties 
options had to be copied field-by-field from 
parquet_scan_options->reader_properties because ReaderProperties did not 
support mutating or setting MemoryPool* after construction.
    
    **What changes are included in this PR?**
    Added set_memory_pool to parquet::ReaderProperties in 
cpp/src/parquet/properties.h.
    Added unit test TestReaderProperties.SetMemoryPool in 
cpp/src/parquet/properties_test.cc.
    
    Are these changes tested?
    Yes
    
    Are there any user-facing changes?
    No
    * GitHub Issue: #51264
    
    Authored-by: Diveyam Mishra <[email protected]>
    Signed-off-by: Antoine Pitrou <[email protected]>
---
 cpp/src/arrow/dataset/file_parquet.cc  | 31 +++++--------------------------
 cpp/src/parquet/properties.h           |  2 ++
 cpp/src/parquet/properties_test.cc     | 17 +++++++++++++++++
 python/pyarrow/includes/libparquet.pxd |  3 +++
 4 files changed, 27 insertions(+), 26 deletions(-)

diff --git a/cpp/src/arrow/dataset/file_parquet.cc 
b/cpp/src/arrow/dataset/file_parquet.cc
index a1fcfe7090..8aa96926e4 100644
--- a/cpp/src/arrow/dataset/file_parquet.cc
+++ b/cpp/src/arrow/dataset/file_parquet.cc
@@ -68,28 +68,19 @@ parquet::ReaderProperties MakeReaderProperties(
     const ParquetFileFormat& format, ParquetFragmentScanOptions* 
parquet_scan_options,
     const std::string& path = "", std::shared_ptr<fs::FileSystem> filesystem = 
nullptr,
     MemoryPool* pool = default_memory_pool()) {
-  // FIXME (GH-51264): Can't mutate pool after ReaderProperties construction.
-  parquet::ReaderProperties properties(pool);
-  if (parquet_scan_options->reader_properties->is_buffered_stream_enabled()) {
-    properties.enable_buffered_stream();
-  } else {
-    properties.disable_buffered_stream();
-  }
-  
properties.set_buffer_size(parquet_scan_options->reader_properties->buffer_size());
-  properties.set_footer_read_size(
-      parquet_scan_options->reader_properties->footer_read_size());
-
-  auto file_decryption_prop =
-      parquet_scan_options->reader_properties->file_decryption_properties();
+  parquet::ReaderProperties properties = 
*parquet_scan_options->reader_properties;
+  properties.set_memory_pool(pool);
+  properties.disable_read_dense_for_nullable();
 
 #ifdef PARQUET_REQUIRE_ENCRYPTION
   auto parquet_decrypt_config = 
parquet_scan_options->parquet_decryption_config;
 
   if (parquet_decrypt_config != nullptr) {
-    file_decryption_prop =
+    auto file_decryption_prop =
         parquet_decrypt_config->crypto_factory->GetFileDecryptionProperties(
             *parquet_decrypt_config->kms_connection_config,
             *parquet_decrypt_config->decryption_config, path, filesystem);
+    properties.file_decryption_properties(file_decryption_prop);
   }
 #else
   if (parquet_scan_options->parquet_decryption_config != nullptr) {
@@ -97,18 +88,6 @@ parquet::ReaderProperties MakeReaderProperties(
   }
 #endif
 
-  properties.file_decryption_properties(file_decryption_prop);
-
-  properties.set_thrift_string_size_limit(
-      parquet_scan_options->reader_properties->thrift_string_size_limit());
-  properties.set_thrift_container_size_limit(
-      parquet_scan_options->reader_properties->thrift_container_size_limit());
-  properties.set_schema_depth_limit(
-      parquet_scan_options->reader_properties->schema_depth_limit());
-
-  properties.set_page_checksum_verification(
-      parquet_scan_options->reader_properties->page_checksum_verification());
-
   return properties;
 }
 
diff --git a/cpp/src/parquet/properties.h b/cpp/src/parquet/properties.h
index f135faa018..f8ad605dec 100644
--- a/cpp/src/parquet/properties.h
+++ b/cpp/src/parquet/properties.h
@@ -81,6 +81,8 @@ class PARQUET_EXPORT ReaderProperties {
       : pool_(pool) {}
 
   MemoryPool* memory_pool() const { return pool_; }
+  /// Set the memory pool.
+  void set_memory_pool(MemoryPool* pool) { pool_ = pool; }
 
   std::shared_ptr<ArrowInputStream> GetStream(std::shared_ptr<ArrowInputFile> 
source,
                                               int64_t start, int64_t 
num_bytes);
diff --git a/cpp/src/parquet/properties_test.cc 
b/cpp/src/parquet/properties_test.cc
index 324ea2026a..2f22844f8b 100644
--- a/cpp/src/parquet/properties_test.cc
+++ b/cpp/src/parquet/properties_test.cc
@@ -24,6 +24,7 @@
 
 #include "arrow/buffer.h"
 #include "arrow/io/memory.h"
+#include "arrow/memory_pool.h"
 
 #include "parquet/file_reader.h"
 #include "parquet/properties.h"
@@ -44,6 +45,22 @@ TEST(TestReaderProperties, Basics) {
   ASSERT_FALSE(props.page_checksum_verification());
 }
 
+TEST(TestReaderProperties, SetMemoryPool) {
+  ReaderProperties props;
+  ASSERT_EQ(props.memory_pool(), ::arrow::default_memory_pool());
+
+  ::arrow::ProxyMemoryPool custom_pool(::arrow::default_memory_pool());
+  props.set_memory_pool(&custom_pool);
+  ASSERT_EQ(props.memory_pool(), &custom_pool);
+
+  ReaderProperties copied_props = props;
+  ASSERT_EQ(copied_props.memory_pool(), &custom_pool);
+
+  copied_props.set_memory_pool(::arrow::default_memory_pool());
+  ASSERT_EQ(copied_props.memory_pool(), ::arrow::default_memory_pool());
+  ASSERT_EQ(props.memory_pool(), &custom_pool);
+}
+
 TEST(TestWriterProperties, Basics) {
   std::shared_ptr<WriterProperties> props = 
WriterProperties::Builder().build();
 
diff --git a/python/pyarrow/includes/libparquet.pxd 
b/python/pyarrow/includes/libparquet.pxd
index 915b1d6dd3..3a5f91716c 100644
--- a/python/pyarrow/includes/libparquet.pxd
+++ b/python/pyarrow/includes/libparquet.pxd
@@ -418,6 +418,9 @@ cdef extern from "parquet/api/reader.h" namespace "parquet" 
nogil:
                                        uint32_t* metadata_len)
 
     cdef cppclass CReaderProperties" parquet::ReaderProperties":
+        CMemoryPool* memory_pool() const
+        void set_memory_pool(CMemoryPool* pool)
+
         c_bool is_buffered_stream_enabled() const
         void enable_buffered_stream()
         void disable_buffered_stream()

Reply via email to