@@ -368,6 +368,23 @@ Result<std::vector<adapters::orc::Statistics>> GetStripeColumnStatisticsBulk(
368368 return stats;
369369}
370370
371+ struct ScalarStats {
372+ bool has_null;
373+ int64_t num_values;
374+ bool has_min_max;
375+ std::shared_ptr<Scalar> min;
376+ std::shared_ptr<Scalar> max;
377+ };
378+
379+ Result<ScalarStats> ToScalarStats (const adapters::orc::Statistics& statistics) {
380+ ScalarStats converted;
381+ converted.has_null = statistics.HasNullCount ();
382+ converted.num_values = statistics.num_values ();
383+ RETURN_NOT_OK (adapters::orc::StatisticsAsScalars (statistics, &converted.min , &converted.max ));
384+ converted.has_min_max = converted.min != nullptr && converted.max != nullptr ;
385+ return converted;
386+ }
387+
371388TEST (TestAdapterRead, FileMetaDataViewAccessors) {
372389 MemoryOutputStream mem_stream (kDefaultMemStreamSize );
373390 std::unique_ptr<liborc::Type> type (
@@ -1302,7 +1319,7 @@ TEST(TestAdapterRead, GetColumnStatisticsInteger) {
13021319 adapters::orc::ORCFileReader::Open (in_stream, default_memory_pool ()));
13031320
13041321 ASSERT_OK_AND_ASSIGN (auto col1_stats, GetFileColumnStatistics (reader.get (), 1 ));
1305- ASSERT_OK_AND_ASSIGN (auto col1_scalars, adapters::orc::StatisticsAsScalars (col1_stats));
1322+ ASSERT_OK_AND_ASSIGN (auto col1_scalars, ToScalarStats (col1_stats));
13061323 EXPECT_EQ (col1_scalars.num_values , row_count);
13071324 EXPECT_TRUE (col1_scalars.has_min_max );
13081325 ASSERT_NE (col1_scalars.min , nullptr );
@@ -1311,7 +1328,7 @@ TEST(TestAdapterRead, GetColumnStatisticsInteger) {
13111328 EXPECT_EQ (checked_pointer_cast<Int64Scalar>(col1_scalars.max )->value , 999 );
13121329
13131330 ASSERT_OK_AND_ASSIGN (auto col2_stats, GetFileColumnStatistics (reader.get (), 2 ));
1314- ASSERT_OK_AND_ASSIGN (auto col2_scalars, adapters::orc::StatisticsAsScalars (col2_stats));
1331+ ASSERT_OK_AND_ASSIGN (auto col2_scalars, ToScalarStats (col2_stats));
13151332 EXPECT_EQ (col2_scalars.num_values , row_count);
13161333 EXPECT_TRUE (col2_scalars.has_min_max );
13171334 ASSERT_NE (col2_scalars.min , nullptr );
@@ -1351,8 +1368,7 @@ TEST(TestAdapterRead, GetStripeColumnStatistics) {
13511368
13521369 ASSERT_OK_AND_ASSIGN (auto stripe0_stats,
13531370 GetStripeColumnStatistics (reader.get (), 0 , 1 ));
1354- ASSERT_OK_AND_ASSIGN (auto stripe0_scalars,
1355- adapters::orc::StatisticsAsScalars (stripe0_stats));
1371+ ASSERT_OK_AND_ASSIGN (auto stripe0_scalars, ToScalarStats (stripe0_stats));
13561372 EXPECT_TRUE (stripe0_scalars.has_min_max );
13571373 EXPECT_EQ (checked_pointer_cast<Int64Scalar>(stripe0_scalars.min )->value , 100 );
13581374 EXPECT_EQ (checked_pointer_cast<Int64Scalar>(stripe0_scalars.max )->value , 599 );
@@ -1397,7 +1413,7 @@ TEST(TestAdapterRead, GetColumnStatisticsString) {
13971413 adapters::orc::ORCFileReader::Open (in_stream, default_memory_pool ()));
13981414
13991415 ASSERT_OK_AND_ASSIGN (auto col_stats, GetFileColumnStatistics (reader.get (), 1 ));
1400- ASSERT_OK_AND_ASSIGN (auto col_scalars, adapters::orc::StatisticsAsScalars (col_stats));
1416+ ASSERT_OK_AND_ASSIGN (auto col_scalars, ToScalarStats (col_stats));
14011417 EXPECT_EQ (col_scalars.num_values , row_count);
14021418 EXPECT_TRUE (col_scalars.has_min_max );
14031419 ASSERT_NE (col_scalars.min , nullptr );
@@ -1474,8 +1490,8 @@ TEST(TestAdapterRead, GetColumnStatisticsWithNulls) {
14741490 adapters::orc::ORCFileReader::Open (in_stream, default_memory_pool ()));
14751491
14761492 ASSERT_OK_AND_ASSIGN (auto col_stats, GetFileColumnStatistics (reader.get (), 1 ));
1477- ASSERT_OK_AND_ASSIGN (auto col_scalars, adapters::orc::StatisticsAsScalars (col_stats));
1478- EXPECT_TRUE (col_stats.has_null ());
1493+ ASSERT_OK_AND_ASSIGN (auto col_scalars, ToScalarStats (col_stats));
1494+ EXPECT_TRUE (col_stats.HasNullCount ());
14791495 EXPECT_TRUE (col_scalars.has_min_max );
14801496}
14811497
@@ -1510,7 +1526,7 @@ TEST(TestAdapterRead, GetColumnStatisticsBoolean) {
15101526 adapters::orc::ORCFileReader::Open (in_stream, default_memory_pool ()));
15111527
15121528 ASSERT_OK_AND_ASSIGN (auto col_stats, GetFileColumnStatistics (reader.get (), 1 ));
1513- ASSERT_OK_AND_ASSIGN (auto col_scalars, adapters::orc::StatisticsAsScalars (col_stats));
1529+ ASSERT_OK_AND_ASSIGN (auto col_scalars, ToScalarStats (col_stats));
15141530 EXPECT_EQ (col_scalars.num_values , row_count);
15151531 EXPECT_FALSE (col_scalars.has_min_max ); // Boolean types don't have min/max
15161532 EXPECT_EQ (col_scalars.min , nullptr );
@@ -1548,7 +1564,7 @@ TEST(TestAdapterRead, GetColumnStatisticsDate) {
15481564 adapters::orc::ORCFileReader::Open (in_stream, default_memory_pool ()));
15491565
15501566 ASSERT_OK_AND_ASSIGN (auto col_stats, GetFileColumnStatistics (reader.get (), 1 ));
1551- ASSERT_OK_AND_ASSIGN (auto col_scalars, adapters::orc::StatisticsAsScalars (col_stats));
1567+ ASSERT_OK_AND_ASSIGN (auto col_scalars, ToScalarStats (col_stats));
15521568 EXPECT_EQ (col_scalars.num_values , row_count);
15531569 EXPECT_TRUE (col_scalars.has_min_max );
15541570 ASSERT_NE (col_scalars.min , nullptr );
@@ -1589,7 +1605,7 @@ TEST(TestAdapterRead, GetColumnStatisticsTimestamp) {
15891605 adapters::orc::ORCFileReader::Open (in_stream, default_memory_pool ()));
15901606
15911607 ASSERT_OK_AND_ASSIGN (auto col_stats, GetFileColumnStatistics (reader.get (), 1 ));
1592- ASSERT_OK_AND_ASSIGN (auto col_scalars, adapters::orc::StatisticsAsScalars (col_stats));
1608+ ASSERT_OK_AND_ASSIGN (auto col_scalars, ToScalarStats (col_stats));
15931609 EXPECT_EQ (col_scalars.num_values , row_count);
15941610 EXPECT_TRUE (col_scalars.has_min_max );
15951611 ASSERT_NE (col_scalars.min , nullptr );
@@ -1880,7 +1896,7 @@ TEST(TestAdapterRead, GetColumnStatisticsDoubleNaN) {
18801896 adapters::orc::ORCFileReader::Open (in_stream, default_memory_pool ()));
18811897
18821898 ASSERT_OK_AND_ASSIGN (auto col_stats, GetFileColumnStatistics (reader.get (), 1 ));
1883- ASSERT_OK_AND_ASSIGN (auto col_scalars, adapters::orc::StatisticsAsScalars (col_stats));
1899+ ASSERT_OK_AND_ASSIGN (auto col_scalars, ToScalarStats (col_stats));
18841900 // When NaN values are present, ORC may report NaN as min or max.
18851901 // Our guard should detect this and set has_min_max = false.
18861902 if (col_scalars.has_min_max ) {
@@ -1982,11 +1998,9 @@ TEST(TestAdapterRead, GetStripeStatisticsBulk) {
19821998 ASSERT_OK_AND_ASSIGN (
19831999 auto individual_stats,
19842000 GetStripeColumnStatistics (reader.get (), 0 , column_indices[i]));
1985- ASSERT_OK_AND_ASSIGN (auto bulk_scalars,
1986- adapters::orc::StatisticsAsScalars (bulk_stats[i]));
1987- ASSERT_OK_AND_ASSIGN (auto individual_scalars,
1988- adapters::orc::StatisticsAsScalars (individual_stats));
1989- EXPECT_EQ (bulk_stats[i].has_null (), individual_stats.has_null ());
2001+ ASSERT_OK_AND_ASSIGN (auto bulk_scalars, ToScalarStats (bulk_stats[i]));
2002+ ASSERT_OK_AND_ASSIGN (auto individual_scalars, ToScalarStats (individual_stats));
2003+ EXPECT_EQ (bulk_stats[i].HasNullCount (), individual_stats.HasNullCount ());
19902004 EXPECT_EQ (bulk_scalars.num_values , individual_scalars.num_values );
19912005 EXPECT_EQ (bulk_scalars.has_min_max , individual_scalars.has_min_max );
19922006 if (bulk_scalars.has_min_max && individual_scalars.has_min_max ) {
@@ -2042,9 +2056,9 @@ TEST(TestAdapterRead, GetColumnStatisticsDecimal) {
20422056 adapters::orc::ORCFileReader::Open (in_stream, default_memory_pool ()));
20432057
20442058 ASSERT_OK_AND_ASSIGN (auto col_stats, GetFileColumnStatistics (reader.get (), 1 ));
2045- ASSERT_OK_AND_ASSIGN (auto col_scalars, adapters::orc::StatisticsAsScalars (col_stats));
2059+ ASSERT_OK_AND_ASSIGN (auto col_scalars, ToScalarStats (col_stats));
20462060 EXPECT_EQ (col_scalars.num_values , row_count);
2047- EXPECT_FALSE (col_stats.has_null ());
2061+ EXPECT_FALSE (col_stats.HasNullCount ());
20482062 EXPECT_TRUE (col_scalars.has_min_max );
20492063 ASSERT_NE (col_scalars.min , nullptr );
20502064 ASSERT_NE (col_scalars.max , nullptr );
0 commit comments