@@ -340,30 +340,80 @@ std::unique_ptr<liborc::Writer> CreateWriter(uint64_t stripe_size,
340340
341341Result<adapters::orc::Statistics> GetFileColumnStatistics (
342342 adapters::orc::ORCFileReader* reader, int column_index) {
343- ARROW_ASSIGN_OR_RAISE (auto file_meta, reader->GetFileMetaData ());
344- ARROW_ASSIGN_OR_RAISE (auto column_meta, file_meta.Column (column_index));
345- return column_meta.statistics ();
343+ auto file_meta = reader->GetFileMetaData ();
344+ if (file_meta == nullptr ) {
345+ return Status::Invalid (" Failed to read ORC file metadata" );
346+ }
347+ if (column_index < 0 || column_index >= file_meta->num_columns ()) {
348+ return Status::Invalid (" Column index " , column_index, " out of range" );
349+ }
350+ auto column_meta = file_meta->Column (column_index);
351+ if (column_meta == nullptr ) {
352+ return Status::Invalid (" Failed to read ORC file column metadata" );
353+ }
354+ auto column_stats = column_meta->statistics ();
355+ if (column_stats == nullptr ) {
356+ return Status::Invalid (" Failed to read ORC file column statistics" );
357+ }
358+ return *column_stats;
346359}
347360
348361Result<adapters::orc::Statistics> GetStripeColumnStatistics (
349362 adapters::orc::ORCFileReader* reader, int64_t stripe_index, int column_index) {
350- ARROW_ASSIGN_OR_RAISE (auto file_meta, reader->GetFileMetaData ());
351- ARROW_ASSIGN_OR_RAISE (auto stripe_meta, file_meta.Stripe (static_cast <int >(stripe_index)));
352- ARROW_ASSIGN_OR_RAISE (auto column_meta, stripe_meta.Column (column_index));
353- return column_meta.statistics ();
363+ auto file_meta = reader->GetFileMetaData ();
364+ if (file_meta == nullptr ) {
365+ return Status::Invalid (" Failed to read ORC file metadata" );
366+ }
367+ if (stripe_index < 0 || stripe_index >= file_meta->num_stripes ()) {
368+ return Status::Invalid (" Stripe index " , stripe_index, " out of range" );
369+ }
370+ auto stripe_meta = file_meta->Stripe (static_cast <int >(stripe_index));
371+ if (stripe_meta == nullptr ) {
372+ return Status::Invalid (" Failed to read ORC stripe metadata" );
373+ }
374+ if (column_index < 0 || column_index >= stripe_meta->num_columns ()) {
375+ return Status::Invalid (" Column index " , column_index, " out of range" );
376+ }
377+ auto column_meta = stripe_meta->Column (column_index);
378+ if (column_meta == nullptr ) {
379+ return Status::Invalid (" Failed to read ORC stripe column metadata" );
380+ }
381+ auto column_stats = column_meta->statistics ();
382+ if (column_stats == nullptr ) {
383+ return Status::Invalid (" Failed to read ORC stripe column statistics" );
384+ }
385+ return *column_stats;
354386}
355387
356388Result<std::vector<adapters::orc::Statistics>> GetStripeColumnStatisticsBulk (
357389 adapters::orc::ORCFileReader* reader, int64_t stripe_index,
358390 const std::vector<int >& column_indices) {
359- ARROW_ASSIGN_OR_RAISE (auto file_meta, reader->GetFileMetaData ());
360- ARROW_ASSIGN_OR_RAISE (auto stripe_meta, file_meta.Stripe (static_cast <int >(stripe_index)));
391+ auto file_meta = reader->GetFileMetaData ();
392+ if (file_meta == nullptr ) {
393+ return Status::Invalid (" Failed to read ORC file metadata" );
394+ }
395+ if (stripe_index < 0 || stripe_index >= file_meta->num_stripes ()) {
396+ return Status::Invalid (" Stripe index " , stripe_index, " out of range" );
397+ }
398+ auto stripe_meta = file_meta->Stripe (static_cast <int >(stripe_index));
399+ if (stripe_meta == nullptr ) {
400+ return Status::Invalid (" Failed to read ORC stripe metadata" );
401+ }
361402 std::vector<adapters::orc::Statistics> stats;
362403 stats.reserve (column_indices.size ());
363404 for (int column_index : column_indices) {
364- ARROW_ASSIGN_OR_RAISE (auto column_meta, stripe_meta.Column (column_index));
365- ARROW_ASSIGN_OR_RAISE (auto column_stats, column_meta.statistics ());
366- stats.push_back (std::move (column_stats));
405+ if (column_index < 0 || column_index >= stripe_meta->num_columns ()) {
406+ return Status::Invalid (" Column index " , column_index, " out of range" );
407+ }
408+ auto column_meta = stripe_meta->Column (column_index);
409+ if (column_meta == nullptr ) {
410+ return Status::Invalid (" Failed to read ORC stripe column metadata" );
411+ }
412+ auto column_stats = column_meta->statistics ();
413+ if (column_stats == nullptr ) {
414+ return Status::Invalid (" Failed to read ORC stripe column statistics" );
415+ }
416+ stats.push_back (std::move (*column_stats));
367417 }
368418 return stats;
369419}
@@ -422,23 +472,27 @@ TEST(TestAdapterRead, FileMetaDataViewAccessors) {
422472 ASSERT_OK_AND_ASSIGN (auto reader,
423473 adapters::orc::ORCFileReader::Open (in_stream, default_memory_pool ()));
424474
425- ASSERT_OK_AND_ASSIGN (auto file_meta, reader->GetFileMetaData ());
426- EXPECT_TRUE (file_meta.valid ());
427- EXPECT_EQ (file_meta.num_stripes (), reader->NumberOfStripes ());
428- EXPECT_EQ (file_meta.num_rows (), reader->NumberOfRows ());
429- ASSERT_OK_AND_ASSIGN (auto metadata, file_meta.key_value_metadata ());
475+ auto file_meta = reader->GetFileMetaData ();
476+ ASSERT_NE (file_meta, nullptr );
477+ EXPECT_TRUE (file_meta->valid ());
478+ EXPECT_EQ (file_meta->num_stripes (), reader->NumberOfStripes ());
479+ EXPECT_EQ (file_meta->num_rows (), reader->NumberOfRows ());
480+ auto metadata = file_meta->key_value_metadata ();
430481 ASSERT_NE (metadata, nullptr );
431- EXPECT_EQ (file_meta.schema_root ().getKind (), liborc::STRUCT );
432-
433- ASSERT_OK_AND_ASSIGN (auto stripe_meta, file_meta.Stripe (0 ));
434- EXPECT_TRUE (stripe_meta.valid ());
435- EXPECT_EQ (stripe_meta.stripe_index (), 0 );
436- EXPECT_GT (stripe_meta.num_rows (), 0 );
437- ASSERT_OK_AND_ASSIGN (auto column_meta, stripe_meta.Column (1 ));
438- EXPECT_TRUE (column_meta.valid ());
439- EXPECT_EQ (column_meta.column_index (), 1 );
440- ASSERT_OK_AND_ASSIGN (auto column_stats, column_meta.statistics ());
441- EXPECT_TRUE (column_stats.valid ());
482+ EXPECT_EQ (file_meta->schema_root ().getKind (), liborc::STRUCT );
483+
484+ auto stripe_meta = file_meta->Stripe (0 );
485+ ASSERT_NE (stripe_meta, nullptr );
486+ EXPECT_TRUE (stripe_meta->valid ());
487+ EXPECT_EQ (stripe_meta->stripe_index (), 0 );
488+ EXPECT_GT (stripe_meta->num_rows (), 0 );
489+ auto column_meta = stripe_meta->Column (1 );
490+ ASSERT_NE (column_meta, nullptr );
491+ EXPECT_TRUE (column_meta->valid ());
492+ EXPECT_EQ (column_meta->column_index (), 1 );
493+ auto column_stats = column_meta->statistics ();
494+ ASSERT_NE (column_stats, nullptr );
495+ EXPECT_TRUE (column_stats->valid ());
442496}
443497
444498TEST (TestAdapterRead, ReadIntAndStringFileMultipleStripes) {
0 commit comments