Skip to content

Commit cd2de68

Browse files
committed
GH-44810: [C++][Parquet] Add arrow::Result version of parquet::arrow::FileReader::Make()
1 parent f8ae141 commit cd2de68

File tree

3 files changed

+36
-6
lines changed

3 files changed

+36
-6
lines changed

cpp/src/parquet/arrow/arrow_reader_writer_test.cc

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4165,10 +4165,11 @@ void TryReadDataFile(const std::string& path,
41654165
auto pool = ::arrow::default_memory_pool();
41664166

41674167
std::unique_ptr<FileReader> arrow_reader;
4168-
Status s =
4169-
FileReader::Make(pool, ParquetFileReader::OpenFile(path, false), &arrow_reader);
4170-
if (s.ok()) {
4168+
Status s;
4169+
Result result = FileReader::Make(pool, ParquetFileReader::OpenFile(path, false));
4170+
if (result.ok()) {
41714171
std::shared_ptr<::arrow::Table> table;
4172+
auto arrow_reader = result->get();
41724173
s = arrow_reader->ReadTable(&table);
41734174
}
41744175

cpp/src/parquet/arrow/reader.cc

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1343,14 +1343,35 @@ Status FileReader::Make(::arrow::MemoryPool* pool,
13431343
std::unique_ptr<ParquetFileReader> reader,
13441344
const ArrowReaderProperties& properties,
13451345
std::unique_ptr<FileReader>* out) {
1346-
*out = std::make_unique<FileReaderImpl>(pool, std::move(reader), properties);
1347-
return static_cast<FileReaderImpl*>(out->get())->Init();
1346+
ARROW_ASSIGN_OR_RAISE(auto result, Make(pool, std::move(reader), properties));
1347+
*out = std::move(result);
1348+
return Status::OK();
13481349
}
13491350

13501351
Status FileReader::Make(::arrow::MemoryPool* pool,
13511352
std::unique_ptr<ParquetFileReader> reader,
13521353
std::unique_ptr<FileReader>* out) {
1353-
return Make(pool, std::move(reader), default_arrow_reader_properties(), out);
1354+
ARROW_ASSIGN_OR_RAISE(auto result,
1355+
Make(pool, std::move(reader), default_arrow_reader_properties()));
1356+
*out = std::move(result);
1357+
return Status::OK();
1358+
}
1359+
1360+
Result<std::unique_ptr<FileReader>> FileReader::Make(
1361+
::arrow::MemoryPool* pool, std::unique_ptr<ParquetFileReader> parquet_reader,
1362+
const ArrowReaderProperties& properties) {
1363+
std::unique_ptr<FileReader> reader =
1364+
std::make_unique<FileReaderImpl>(pool, std::move(parquet_reader), properties);
1365+
RETURN_NOT_OK(static_cast<FileReaderImpl*>(reader.get())->Init());
1366+
return reader;
1367+
}
1368+
1369+
Result<std::unique_ptr<FileReader>> FileReader::Make(
1370+
::arrow::MemoryPool* pool, std::unique_ptr<ParquetFileReader> parquet_reader) {
1371+
std::unique_ptr<FileReader> reader = std::make_unique<FileReaderImpl>(
1372+
pool, std::move(parquet_reader), default_arrow_reader_properties());
1373+
RETURN_NOT_OK(static_cast<FileReaderImpl*>(reader.get())->Init());
1374+
return reader;
13541375
}
13551376

13561377
FileReaderBuilder::FileReaderBuilder()

cpp/src/parquet/arrow/reader.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,14 @@ class PARQUET_EXPORT FileReader {
126126
std::unique_ptr<ParquetFileReader> reader,
127127
std::unique_ptr<FileReader>* out);
128128

129+
/// Factory function to create a FileReader from a ParquetFileReader and properties
130+
static ::arrow::Result<std::unique_ptr<FileReader>> Make(
131+
::arrow::MemoryPool* pool, std::unique_ptr<ParquetFileReader> reader,
132+
const ArrowReaderProperties& properties);
133+
134+
/// Factory function to create a FileReader from a ParquetFileReader
135+
static ::arrow::Result<std::unique_ptr<FileReader>> Make(
136+
::arrow::MemoryPool* pool, std::unique_ptr<ParquetFileReader> reader);
129137
// Since the distribution of columns amongst a Parquet file's row groups may
130138
// be uneven (the number of values in each column chunk can be different), we
131139
// provide a column-oriented read interface. The ColumnReader hides the

0 commit comments

Comments
 (0)