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

caogaofei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 1f518743f9f Fix aggregation error when inserting negative timestamp
1f518743f9f is described below

commit 1f518743f9fdd635132f38d2cc9f85719be003b1
Author: Beyyes <[email protected]>
AuthorDate: Thu Nov 9 10:52:47 2023 +0800

    Fix aggregation error when inserting negative timestamp
---
 .../apache/iotdb/db/it/IoTDBInsertWithQueryIT.java | 23 ++++++++++++++++++++++
 .../SingleTimeWindowIterator.java                  |  3 ++-
 .../execution/operator/AggregationUtil.java        |  2 +-
 3 files changed, 26 insertions(+), 2 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBInsertWithQueryIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBInsertWithQueryIT.java
index 403aa35fcef..2ef61ed7b28 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBInsertWithQueryIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBInsertWithQueryIT.java
@@ -37,6 +37,7 @@ import java.sql.Statement;
 import java.util.ArrayList;
 import java.util.List;
 
+import static org.apache.iotdb.db.it.utils.TestUtils.resultSetEqualTest;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
@@ -159,6 +160,8 @@ public class IoTDBInsertWithQueryIT {
 
     // select
     selectAndCount(2001);
+
+    negativeTimestampAggregationTest();
   }
 
   @Test
@@ -480,4 +483,24 @@ public class IoTDBInsertWithQueryIT {
       fail(e.getMessage());
     }
   }
+
+  private void negativeTimestampAggregationTest() {
+    String[] expectedHeader = new String[] {"count(root.fans.d0.s0)"};
+    String[] retArray = new String[] {"2001,"};
+    resultSetEqualTest("SELECT count(s0) FROM root.fans.d0;", expectedHeader, 
retArray);
+
+    expectedHeader = new String[] {"count(root.fans.d0.s0)"};
+    retArray = new String[] {"1999,"};
+    resultSetEqualTest(
+        "SELECT count(s0) FROM root.fans.d0 WHERE time<-1;", expectedHeader, 
retArray);
+
+    expectedHeader = new String[] {"min_time(root.fans.d0.s0)"};
+    retArray = new String[] {"-2000,"};
+    resultSetEqualTest("SELECT min_time(s0) FROM root.fans.d0;", 
expectedHeader, retArray);
+
+    expectedHeader = new String[] {"max_time(root.fans.d0.s0)"};
+    retArray = new String[] {"-2,"};
+    resultSetEqualTest(
+        "SELECT max_time(s0) FROM root.fans.d0 WHERE time<-1;", 
expectedHeader, retArray);
+  }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/SingleTimeWindowIterator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/SingleTimeWindowIterator.java
index 9137abb3794..9b9c809e69f 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/SingleTimeWindowIterator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/aggregation/timerangeiterator/SingleTimeWindowIterator.java
@@ -69,7 +69,8 @@ public class SingleTimeWindowIterator implements 
ITimeRangeIterator {
 
   @Override
   public long currentOutputTime() {
-    return curTimeRange.getMin();
+    // display time as 0 in aggregation result
+    return curTimeRange.getMin() == Long.MIN_VALUE ? 0 : curTimeRange.getMin();
   }
 
   @Override
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationUtil.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationUtil.java
index b72ad3c6da6..07e30824165 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationUtil.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/AggregationUtil.java
@@ -68,7 +68,7 @@ public class AggregationUtil {
       boolean ascending,
       boolean outputPartialTimeWindow) {
     if (groupByTimeParameter == null) {
-      return new SingleTimeWindowIterator(0, Long.MAX_VALUE);
+      return new SingleTimeWindowIterator(Long.MIN_VALUE, Long.MAX_VALUE);
     } else {
       return TimeRangeIteratorFactory.getTimeRangeIterator(
           groupByTimeParameter.getStartTime(),

Reply via email to