From 4687dbe0db59e6228d7e9d42c61cdd7f7c0f33a7 Mon Sep 17 00:00:00 2001
From: Mohammad Linjawi <Mohammad.Linjawi@ibm.com>
Date: Mon, 2 Dec 2024 17:55:21 +0300
Subject: [PATCH] Refactor FileReader::Make methods to align with Result-based
 API

---
 cpp/src/parquet/arrow/reader.cc | 20 ++++++++++++++++----
 cpp/src/parquet/arrow/reader.h  | 23 ++++++++++++-----------
 2 files changed, 28 insertions(+), 15 deletions(-)

diff --git a/cpp/src/parquet/arrow/reader.cc b/cpp/src/parquet/arrow/reader.cc
index 212cfb669270f..53197e46f4f75 100644
--- a/cpp/src/parquet/arrow/reader.cc
+++ b/cpp/src/parquet/arrow/reader.cc
@@ -1315,20 +1315,32 @@ Status FileReader::GetRecordBatchReader(const std::vector<int>& row_group_indice
   return Status::OK();
 }
 
-Result<std::unique_ptr<FileReader>> Make(::arrow::MemoryPool* pool,
-                        std::unique_ptr<ParquetFileReader> reader,
+Status FileReader::Make(MemoryPool* pool, std::unique_ptr<ParquetFileReader> reader,
                         const ArrowReaderProperties& properties,
                         std::unique_ptr<FileReader>* out) {
   *out = std::make_unique<FileReaderImpl>(pool, std::move(reader), properties);
   return static_cast<FileReaderImpl*>(out->get())->Init();
 }
 
-Result<std::unique_ptr<FileReader>> Make(::arrow::MemoryPool* pool,
-                        std::unique_ptr<ParquetFileReader> reader,
+Result<std::unique_ptr<FileReader>> FileReader::Make(
+    MemoryPool* pool, std::unique_ptr<ParquetFileReader> reader,
+    const ArrowReaderProperties& properties) {
+  auto file_reader =
+      std::make_unique<FileReaderImpl>(pool, std::move(reader), properties);
+  RETURN_NOT_OK(file_reader->Init());
+  return file_reader;
+}
+
+Status FileReader::Make(MemoryPool* pool, std::unique_ptr<ParquetFileReader> reader,
                         std::unique_ptr<FileReader>* out) {
   return Make(pool, std::move(reader), default_arrow_reader_properties(), out);
 }
 
+Result<std::unique_ptr<FileReader>> FileReader::Make(
+    MemoryPool* pool, std::unique_ptr<ParquetFileReader> reader) {
+  return Make(pool, std::move(reader), default_arrow_reader_properties());
+}
+
 FileReaderBuilder::FileReaderBuilder()
     : pool_(::arrow::default_memory_pool()),
       properties_(default_arrow_reader_properties()) {}
diff --git a/cpp/src/parquet/arrow/reader.h b/cpp/src/parquet/arrow/reader.h
index c0300f51d87b9..6fc8828c37616 100644
--- a/cpp/src/parquet/arrow/reader.h
+++ b/cpp/src/parquet/arrow/reader.h
@@ -118,27 +118,28 @@ class PARQUET_EXPORT FileReader {
   // Factory function to create a FileReader from a ParquetFileReader and properties.
   // \deprecated Deprecated in 19.0.0. Use arrow::Result version instead.
   ARROW_DEPRECATED("Deprecated in 19.0.0. Use arrow::Result version instead.")
-  static ::arrow::Status Make(
-      ::arrow::MemoryPool* pool, std::unique_ptr<ParquetFileReader> reader,
-      const ArrowReaderProperties& properties, std::unique_ptr<FileReader>* out);
-      
-  /// Factory function to create a FileReader from a ParquetFileReader and properties
+  static ::arrow::Status Make(::arrow::MemoryPool* pool,
+                              std::unique_ptr<ParquetFileReader> reader,
+                              const ArrowReaderProperties& properties,
+                              std::unique_ptr<FileReader>* out);
+
+  // Factory function to create a FileReader from a ParquetFileReader and properties
+  // Returns an arrow::Result containing a unique pointer to the FileReader.
   static ::arrow::Result<std::unique_ptr<FileReader>> Make(
       ::arrow::MemoryPool* pool, std::unique_ptr<ParquetFileReader> reader,
-      const ArrowReaderProperties& properties, std::unique_ptr<FileReader>* out);
+      const ArrowReaderProperties& properties);
 
   // Factory function to create a FileReader from a ParquetFileReader.
   // \deprecated Deprecated in 19.0.0. Use arrow::Result version instead.
   ARROW_DEPRECATED("Deprecated in 19.0.0. Use arrow::Result version instead.")
-  static ::arrow::Result<std::unique_ptr<FileReader>> Make(
-      ::arrow::MemoryPool* pool, std::unique_ptr<ParquetFileReader> reader,
-      std::unique_ptr<FileReader>* out);
+  static ::arrow::Status Make(::arrow::MemoryPool* pool,
+                              std::unique_ptr<ParquetFileReader> reader,
+                              std::unique_ptr<FileReader>* out);
 
   // Factory function to create a FileReader from a ParquetFileReader.
   // Returns an arrow::Result containing a unique pointer to the FileReader.
   static ::arrow::Result<std::unique_ptr<FileReader>> Make(
-      ::arrow::MemoryPool* pool, std::unique_ptr<ParquetFileReader> reader,
-      std::unique_ptr<FileReader>* out);
+      ::arrow::MemoryPool* pool, std::unique_ptr<ParquetFileReader> reader);
 
   // Since the distribution of columns amongst a Parquet file's row groups may
   // be uneven (the number of values in each column chunk can be different), we