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(),