This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch TyPageDebug
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit a69d0b7bf7bdaca28e9cabe6c04b1a382ba4c1b0
Author: JackieTien97 <[email protected]>
AuthorDate: Fri May 8 13:27:30 2020 +0800

    page not consumed bug
---
 .../db/query/executor/AggregationExecutor.java     | 31 +++++++++++-----
 .../IoTDBMultiOverlappedChunkInUnseqIT.java        | 17 +++++----
 .../db/integration/IoTDBMultiOverlappedPageIT.java | 42 +++++++++++++++++-----
 3 files changed, 63 insertions(+), 27 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/executor/AggregationExecutor.java
 
b/server/src/main/java/org/apache/iotdb/db/query/executor/AggregationExecutor.java
index 9b7567d..f102f54 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/executor/AggregationExecutor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/executor/AggregationExecutor.java
@@ -175,8 +175,12 @@ public class AggregationExecutor {
           seriesReader.skipCurrentChunk();
           continue;
         }
-        remainingToCalculate = aggregateOverlappedPages(seriesReader, 
aggregateResultList,
+
+        remainingToCalculate = aggregatePages(seriesReader, 
aggregateResultList,
                 isCalculatedArray, remainingToCalculate);
+        if (remainingToCalculate == 0) {
+          return;
+        }
       }
     }
 
@@ -211,12 +215,21 @@ public class AggregationExecutor {
     return newRemainingToCalculate;
   }
 
-  private static int aggregateOverlappedPages(IAggregateReader seriesReader,
+  private static int aggregatePages(IAggregateReader seriesReader,
       List<AggregateResult> aggregateResultList, boolean[] isCalculatedArray, 
int remainingToCalculate)
-      throws IOException {
-    // cal by page data
-    int newRemainingToCalculate = remainingToCalculate;
+      throws IOException, QueryProcessException {
     while (seriesReader.hasNextPage()) {
+      //cal by page statistics
+      if (seriesReader.canUseCurrentPageStatistics()) {
+        Statistics pageStatistic = seriesReader.currentPageStatistics();
+        remainingToCalculate = aggregateStatistics(aggregateResultList, 
isCalculatedArray,
+            remainingToCalculate, pageStatistic);
+        if (remainingToCalculate == 0) {
+          return 0;
+        }
+        seriesReader.skipCurrentChunk();
+        continue;
+      }
       BatchData nextOverlappedPageData = seriesReader.nextPage();
       for (int i = 0; i < aggregateResultList.size(); i++) {
         if (!isCalculatedArray[i]) {
@@ -225,15 +238,15 @@ public class AggregationExecutor {
           nextOverlappedPageData.resetBatchData();
           if (aggregateResult.isCalculatedAggregationResult()) {
             isCalculatedArray[i] = true;
-            newRemainingToCalculate--;
-            if (newRemainingToCalculate == 0) {
-              return newRemainingToCalculate;
+            remainingToCalculate--;
+            if (remainingToCalculate == 0) {
+              return 0;
             }
           }
         }
       }
     }
-    return newRemainingToCalculate;
+    return remainingToCalculate;
   }
 
   /**
diff --git 
a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiOverlappedChunkInUnseqIT.java
 
b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiOverlappedChunkInUnseqIT.java
index 294481d..13fbd5e 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiOverlappedChunkInUnseqIT.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiOverlappedChunkInUnseqIT.java
@@ -19,6 +19,14 @@
 
 package org.apache.iotdb.db.integration;
 
+import static org.apache.iotdb.db.constant.TestConstant.count;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.Statement;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.jdbc.Config;
@@ -26,15 +34,6 @@ import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.Statement;
-
-import static org.apache.iotdb.db.constant.TestConstant.count;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
 /**
  * Notice that, all test begins with "IoTDB" is integration test. All test 
which will start the
  * IoTDB server should be defined as integration test.
diff --git 
a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiOverlappedPageIT.java
 
b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiOverlappedPageIT.java
index ea74a16..a874594 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiOverlappedPageIT.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/integration/IoTDBMultiOverlappedPageIT.java
@@ -19,6 +19,15 @@
 
 package org.apache.iotdb.db.integration;
 
+import static org.apache.iotdb.db.constant.TestConstant.TIMESTAMP_STR;
+import static org.apache.iotdb.db.constant.TestConstant.first_value;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.Statement;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
 import org.apache.iotdb.db.utils.EnvironmentUtils;
 import org.apache.iotdb.jdbc.Config;
@@ -27,15 +36,6 @@ import org.junit.AfterClass;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.ResultSet;
-import java.sql.Statement;
-
-import static org.apache.iotdb.db.constant.TestConstant.TIMESTAMP_STR;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
 /**
  * Notice that, all test begins with "IoTDB" is integration test. All test 
which will start the
  * IoTDB server should be defined as integration test.
@@ -102,6 +102,24 @@ public class IoTDBMultiOverlappedPageIT {
     }
   }
 
+  @Test
+  public void selectOverlappedPageTest2() {
+
+    try (Connection connection = DriverManager
+        .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", "root", 
"root");
+        Statement statement = connection.createStatement()) {
+      String sql = "select first_value(s0) from root.vehicle.d0 where time > 
18";
+      ResultSet resultSet = statement.executeQuery(sql);
+      while (resultSet.next()) {
+        String ans = resultSet.getString(first_value("root.vehicle.d0.s0"));
+        assertEquals("219", ans);
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail(e.getMessage());
+    }
+  }
+
   private static void insertData() {
     try (Connection connection = DriverManager
             .getConnection(Config.IOTDB_URL_PREFIX + "127.0.0.1:6667/", 
"root", "root");
@@ -119,6 +137,12 @@ public class IoTDBMultiOverlappedPageIT {
                 .format("insert into root.vehicle.d0(timestamp,s0) 
values(%s,%s)", time, 100+time);
         statement.execute(sql);
       }
+
+      for (long time = 21; time <= 30; time++) {
+        String sql = String
+            .format("insert into root.vehicle.d0(timestamp,s0) values(%s,%s)", 
time, time);
+        statement.execute(sql);
+      }
       statement.execute("flush");
       for (long time = 101; time <= 110; time++) {
         String sql = String

Reply via email to