diff --git a/lib/trino-orc/src/main/java/io/trino/orc/OrcRecordReader.java b/lib/trino-orc/src/main/java/io/trino/orc/OrcRecordReader.java index 6be76c041b02..dee2a5cdd25a 100644 --- a/lib/trino-orc/src/main/java/io/trino/orc/OrcRecordReader.java +++ b/lib/trino-orc/src/main/java/io/trino/orc/OrcRecordReader.java @@ -122,6 +122,9 @@ public class OrcRecordReader private final Optional stripeStatisticsValidation; private final Optional fileStatisticsValidation; + private final Optional startRowPosition; + private final Optional endRowPosition; + public OrcRecordReader( List readColumns, List readTypes, @@ -192,6 +195,8 @@ public OrcRecordReader( long totalRowCount = 0; long fileRowCount = 0; long totalDataLength = 0; + Optional startRowPosition = Optional.empty(); + Optional endRowPosition = Optional.empty(); ImmutableList.Builder stripes = ImmutableList.builder(); ImmutableList.Builder stripeFilePositions = ImmutableList.builder(); if (fileStats.isEmpty() || predicate.matches(numberOfRows, fileStats.get())) { @@ -203,10 +208,19 @@ public OrcRecordReader( stripeFilePositions.add(fileRowCount); totalRowCount += stripe.getNumberOfRows(); totalDataLength += stripe.getDataLength(); + + if (startRowPosition.isEmpty()) { + startRowPosition = Optional.of(fileRowCount); + } + endRowPosition = Optional.of(fileRowCount + stripe.getNumberOfRows()); } fileRowCount += stripe.getNumberOfRows(); } } + + this.startRowPosition = startRowPosition; + this.endRowPosition = endRowPosition; + this.totalRowCount = totalRowCount; this.totalDataLength = totalDataLength; this.stripes = stripes.build(); @@ -352,6 +366,16 @@ public ColumnMetadata getColumnTypes() return orcTypes; } + public Optional getStartRowPosition() + { + return startRowPosition; + } + + public Optional getEndRowPosition() + { + return endRowPosition; + } + @Override public void close() throws IOException diff --git a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergPageSourceProvider.java b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergPageSourceProvider.java index bfd1fca51759..3cfff42752ff 100644 --- a/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergPageSourceProvider.java +++ b/plugin/trino-iceberg/src/main/java/io/trino/plugin/iceberg/IcebergPageSourceProvider.java @@ -673,8 +673,8 @@ else if (orcColumn != null) { stats, reader.getCompressionKind()), columnProjections), - Optional.empty(), - Optional.empty()); + recordReader.getStartRowPosition(), + recordReader.getEndRowPosition()); } catch (IOException | RuntimeException e) { if (orcDataSource != null) {