This is an automated email from the ASF dual-hosted git repository. hui pushed a commit to branch lmh/AggregationDebug0.13 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit f5f0bbec659a73665ec231b9a7f704d61cc48a24 Author: Minghui Liu <[email protected]> AuthorDate: Fri Jun 24 21:25:14 2022 +0800 fix bug --- .../groupby/LocalAlignedGroupByExecutor.java | 81 +++++++++++----------- .../dataset/groupby/LocalGroupByExecutor.java | 56 +++++++-------- 2 files changed, 71 insertions(+), 66 deletions(-) diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalAlignedGroupByExecutor.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalAlignedGroupByExecutor.java index 87faffebbb..fd00c3d3e3 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalAlignedGroupByExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalAlignedGroupByExecutor.java @@ -124,27 +124,29 @@ public class LocalAlignedGroupByExecutor implements AlignedGroupByExecutor { // read from file while (reader.hasNextFile()) { // try to calc from fileMetaData - Statistics fileTimeStatistics = reader.currentFileTimeStatistics(); - if (fileTimeStatistics.getStartTime() >= curEndTime) { - if (ascending) { - return results; - } else { + if (reader.canUseCurrentFileStatistics()) { + Statistics fileTimeStatistics = reader.currentFileTimeStatistics(); + if (fileTimeStatistics.getStartTime() >= curEndTime) { + if (ascending) { + return results; + } else { + reader.skipCurrentFile(); + continue; + } + } + if (timeRange.contains( + fileTimeStatistics.getStartTime(), fileTimeStatistics.getEndTime())) { + // calc from fileMetaData + while (reader.hasNextSubSeries()) { + Statistics currentFileStatistics = reader.currentFileStatistics(); + calcFromStatistics(currentFileStatistics, results.get(reader.getCurIndex())); + reader.nextSeries(); + } reader.skipCurrentFile(); continue; } } - if (reader.canUseCurrentFileStatistics() - && timeRange.contains( - fileTimeStatistics.getStartTime(), fileTimeStatistics.getEndTime())) { - // calc from fileMetaData - while (reader.hasNextSubSeries()) { - Statistics currentFileStatistics = reader.currentFileStatistics(); - calcFromStatistics(currentFileStatistics, results.get(reader.getCurIndex())); - reader.nextSeries(); - } - reader.skipCurrentFile(); - continue; - } + // read chunk if (readAndCalcFromChunk(curStartTime, curEndTime)) { return results; @@ -175,27 +177,29 @@ public class LocalAlignedGroupByExecutor implements AlignedGroupByExecutor { throws IOException, QueryProcessException { while (reader.hasNextChunk()) { // try to calc from chunkMetaData - Statistics chunkTimeStatistics = reader.currentChunkTimeStatistics(); - if (chunkTimeStatistics.getStartTime() >= curEndTime) { - if (ascending) { - return true; - } else { + if (reader.canUseCurrentChunkStatistics()) { + Statistics chunkTimeStatistics = reader.currentChunkTimeStatistics(); + if (chunkTimeStatistics.getStartTime() >= curEndTime) { + if (ascending) { + return true; + } else { + reader.skipCurrentChunk(); + continue; + } + } + if (timeRange.contains( + chunkTimeStatistics.getStartTime(), chunkTimeStatistics.getEndTime())) { + // calc from chunkMetaData + while (reader.hasNextSubSeries()) { + Statistics currentChunkStatistics = reader.currentChunkStatistics(); + calcFromStatistics(currentChunkStatistics, results.get(reader.getCurIndex())); + reader.nextSeries(); + } reader.skipCurrentChunk(); continue; } } - if (reader.canUseCurrentChunkStatistics() - && timeRange.contains( - chunkTimeStatistics.getStartTime(), chunkTimeStatistics.getEndTime())) { - // calc from chunkMetaData - while (reader.hasNextSubSeries()) { - Statistics currentChunkStatistics = reader.currentChunkStatistics(); - calcFromStatistics(currentChunkStatistics, results.get(reader.getCurIndex())); - reader.nextSeries(); - } - reader.skipCurrentChunk(); - continue; - } + // read page if (readAndCalcFromPage(curStartTime, curEndTime)) { return true; @@ -208,8 +212,8 @@ public class LocalAlignedGroupByExecutor implements AlignedGroupByExecutor { throws IOException, QueryProcessException { while (reader.hasNextPage()) { // try to calc from pageHeader - Statistics pageTimeStatistics = reader.currentPageTimeStatistics(); - if (pageTimeStatistics != null) { + if (reader.canUseCurrentPageStatistics()) { + Statistics pageTimeStatistics = reader.currentPageTimeStatistics(); // current page max than time range if (pageTimeStatistics.getStartTime() >= curEndTime) { if (ascending) { @@ -219,9 +223,8 @@ public class LocalAlignedGroupByExecutor implements AlignedGroupByExecutor { continue; } } - if (reader.canUseCurrentPageStatistics() - && timeRange.contains( - pageTimeStatistics.getStartTime(), pageTimeStatistics.getEndTime())) { + if (timeRange.contains( + pageTimeStatistics.getStartTime(), pageTimeStatistics.getEndTime())) { // calc from pageHeader while (reader.hasNextSubSeries()) { int subIndex = reader.getCurIndex(); diff --git a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java index fd692c410a..1b96765e21 100644 --- a/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java +++ b/server/src/main/java/org/apache/iotdb/db/query/dataset/groupby/LocalGroupByExecutor.java @@ -212,22 +212,23 @@ public class LocalGroupByExecutor implements GroupByExecutor { // read from file first while (reader.hasNextFile()) { - Statistics fileStatistics = reader.currentFileStatistics(); - if (fileStatistics.getStartTime() >= curEndTime) { - if (ascending) { - return results; - } else { + if (reader.canUseCurrentFileStatistics()) { + Statistics fileStatistics = reader.currentFileStatistics(); + if (fileStatistics.getStartTime() >= curEndTime) { + if (ascending) { + return results; + } else { + reader.skipCurrentFile(); + continue; + } + } + // calc from fileMetaData + if (timeRange.contains(fileStatistics.getStartTime(), fileStatistics.getEndTime())) { + calcFromStatistics(fileStatistics); reader.skipCurrentFile(); continue; } } - // calc from fileMetaData - if (reader.canUseCurrentFileStatistics() - && timeRange.contains(fileStatistics.getStartTime(), fileStatistics.getEndTime())) { - calcFromStatistics(fileStatistics); - reader.skipCurrentFile(); - continue; - } // read chunk if (readAndCalcFromChunk(curStartTime, curEndTime)) { @@ -281,22 +282,24 @@ public class LocalGroupByExecutor implements GroupByExecutor { private boolean readAndCalcFromChunk(long curStartTime, long curEndTime) throws IOException, QueryProcessException { while (reader.hasNextChunk()) { - Statistics chunkStatistics = reader.currentChunkStatistics(); - if (chunkStatistics.getStartTime() >= curEndTime) { - if (ascending) { - return true; - } else { + if (reader.canUseCurrentChunkStatistics()) { + Statistics chunkStatistics = reader.currentChunkStatistics(); + if (chunkStatistics.getStartTime() >= curEndTime) { + if (ascending) { + return true; + } else { + reader.skipCurrentChunk(); + continue; + } + } + // calc from chunkMetaData + if (timeRange.contains(chunkStatistics.getStartTime(), chunkStatistics.getEndTime())) { + calcFromStatistics(chunkStatistics); reader.skipCurrentChunk(); continue; } } - // calc from chunkMetaData - if (reader.canUseCurrentChunkStatistics() - && timeRange.contains(chunkStatistics.getStartTime(), chunkStatistics.getEndTime())) { - calcFromStatistics(chunkStatistics); - reader.skipCurrentChunk(); - continue; - } + // read page if (readAndCalcFromPage(curStartTime, curEndTime)) { return true; @@ -309,9 +312,8 @@ public class LocalGroupByExecutor implements GroupByExecutor { private boolean readAndCalcFromPage(long curStartTime, long curEndTime) throws IOException, QueryProcessException { while (reader.hasNextPage()) { - Statistics pageStatistics = reader.currentPageStatistics(); - // must be non overlapped page - if (pageStatistics != null) { + if (reader.canUseCurrentPageStatistics()) { + Statistics pageStatistics = reader.currentPageStatistics(); // current page max than time range if (pageStatistics.getStartTime() >= curEndTime) { if (ascending) {
