This is an automated email from the ASF dual-hosted git repository. hui pushed a commit to branch lmh/FixOffsetPushDown in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit d9c70dbf1e035c9676a37f16f049be7a6a0d93c9 Author: liuminghui233 <[email protected]> AuthorDate: Thu Apr 13 23:16:47 2023 +0800 opt with allSatisfy --- .../execution/operator/source/SeriesScanUtil.java | 24 +++++++++------------- .../iotdb/db/query/reader/chunk/MemPageReader.java | 12 ++++++----- .../iotdb/tsfile/read/reader/page/PageReader.java | 12 ++++++----- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java index d42c2ff931..d3988be366 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java @@ -288,17 +288,15 @@ public class SeriesScanUtil { protected void filterFirstChunkMetadata() throws IOException { if (firstChunkMetadata != null && !isChunkOverlapped() && !firstChunkMetadata.isModified()) { Filter queryFilter = scanOptions.getQueryFilter(); - if (queryFilter != null) { - if (!queryFilter.satisfy(firstChunkMetadata.getStatistics())) { - skipCurrentChunk(); - } - // TODO implement allSatisfied interface for filter, then we can still skip offset. - } else { - long rowCount = firstChunkMetadata.getStatistics().getCount(); + Statistics statistics = firstChunkMetadata.getStatistics(); + if (queryFilter == null || queryFilter.allSatisfy(statistics)) { + long rowCount = statistics.getCount(); if (paginationController.hasCurOffset(rowCount)) { skipCurrentChunk(); paginationController.consumeOffset(rowCount); } + } else if (!queryFilter.satisfy(statistics)) { + skipCurrentChunk(); } } } @@ -1041,17 +1039,15 @@ public class SeriesScanUtil { && !isFileOverlapped() && !firstTimeSeriesMetadata.isModified()) { Filter queryFilter = scanOptions.getQueryFilter(); - if (queryFilter != null) { - if (!queryFilter.satisfy(firstTimeSeriesMetadata.getStatistics())) { - skipCurrentFile(); - } - // TODO implement allSatisfied interface for filter, then we can still skip offset. - } else { - long rowCount = firstTimeSeriesMetadata.getStatistics().getCount(); + Statistics statistics = firstTimeSeriesMetadata.getStatistics(); + if (queryFilter == null || queryFilter.allSatisfy(statistics)) { + long rowCount = statistics.getCount(); if (paginationController.hasCurOffset(rowCount)) { skipCurrentFile(); paginationController.consumeOffset(rowCount); } + } else if (!queryFilter.satisfy(statistics)) { + skipCurrentFile(); } } } diff --git a/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemPageReader.java b/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemPageReader.java index ad6916103b..4e4c4916ed 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemPageReader.java +++ b/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemPageReader.java @@ -94,16 +94,18 @@ public class MemPageReader implements IPageReader { } private boolean pageSatisfy() { - if (valueFilter != null) { - return valueFilter.satisfy(getStatistics()); - } else { - long rowCount = getStatistics().getCount(); + Statistics statistics = getStatistics(); + if (valueFilter == null || valueFilter.allSatisfy(statistics)) { + long rowCount = statistics.getCount(); if (paginationController.hasCurOffset(rowCount)) { paginationController.consumeOffset(rowCount); return false; + } else { + return true; } + } else { + return valueFilter.satisfy(statistics); } - return true; } @Override diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java index 795116ccb5..60b74a1870 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java @@ -163,16 +163,18 @@ public class PageReader implements IPageReader { } private boolean pageSatisfy() { - if (filter != null) { - return filter.satisfy(getStatistics()); - } else { - long rowCount = getStatistics().getCount(); + Statistics statistics = getStatistics(); + if (filter == null || filter.allSatisfy(statistics)) { + long rowCount = statistics.getCount(); if (paginationController.hasCurOffset(rowCount)) { paginationController.consumeOffset(rowCount); return false; + } else { + return true; } + } else { + return filter.satisfy(statistics); } - return true; } @Override
