This is an automated email from the ASF dual-hosted git repository.
jackietien 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 942e9118eb7 Fix some Accumulator when process TIMESTAMP Type
942e9118eb7 is described below
commit 942e9118eb79635ef3dc8b99da58013b9f2eebfd
Author: Weihao Li <[email protected]>
AuthorDate: Thu Jul 17 18:14:43 2025 +0800
Fix some Accumulator when process TIMESTAMP Type
---
.../db/it/IoTDBMultiTAGsWithAttributesTableIT.java | 20 ++++++++++++++++++--
.../relational/aggregation/FirstAccumulator.java | 4 +---
.../relational/aggregation/FirstByAccumulator.java | 6 ------
.../relational/aggregation/LastAccumulator.java | 4 +---
.../relational/aggregation/LastByAccumulator.java | 6 ------
.../relational/aggregation/MaxAccumulator.java | 4 +---
.../relational/aggregation/MinAccumulator.java | 4 +---
7 files changed, 22 insertions(+), 26 deletions(-)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiTAGsWithAttributesTableIT.java
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiTAGsWithAttributesTableIT.java
index cd23dcadd9e..403077e3436 100644
---
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiTAGsWithAttributesTableIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBMultiTAGsWithAttributesTableIT.java
@@ -155,7 +155,9 @@ public class IoTDBMultiTAGsWithAttributesTableIT {
"insert into tableB(time,device,value) values('2020-01-01
00:00:03.000', 'd333', 333)",
"flush",
"insert into tableB(time,device,value) values('2020-01-01
00:00:04.000', 'd2', 40)",
- "insert into tableB(time,device,value) values('2020-01-01
00:00:05.000', 'd2', 50)"
+ "insert into tableB(time,device,value) values('2020-01-01
00:00:05.000', 'd2', 50)",
+ "create table tableD(device STRING TAG, value TIMESTAMP FIELD)",
+ "insert into tableD(time,device,value) values('2020-01-01
00:00:07.000', 'd2', '1970-01-01 00:00:00.000')"
};
String[] expectedHeader;
@@ -1229,7 +1231,7 @@ public class IoTDBMultiTAGsWithAttributesTableIT {
expectedHeader = buildHeaders(24);
retArray =
new String[] {
-
"1971-08-20T11:33:20.000Z,d2,l5,yy,zz,15,3147483648,4654.231,2023-01-01,1971-01-01T00:01:40.000Z,test-string3,6666.8,1970-01-01T00:00:00.000Z,d1,l1,c,a,1,2107483648,12.123,2022-01-01,1970-01-01T00:00:00.020Z,test-string1,6666.3,",
+
"1971-08-20T11:33:20.000Z,d2,l5,yy,zz,15,3147483648,4654.231,2023-01-01,2024-09-25T06:15:35.000Z,test-string3,6666.8,1970-01-01T00:00:00.000Z,d1,l1,c,a,1,2107483648,12.123,2022-01-01,2024-08-01T06:15:35.000Z,test-string1,6666.3,",
};
sql =
"select
max(time),max(device),max(level),max(attr1),max(attr2),max(num),max(bignum),max(floatnum),max(date),max(ts),max(stringv),max(doubleNum),min(time),min(device),min(level),min(attr1),min(attr2),min(num),min(bignum),min(floatnum),min(date),min(ts),min(stringv),min(doubleNum)
from table0";
@@ -2815,6 +2817,20 @@ public class IoTDBMultiTAGsWithAttributesTableIT {
DATABASE_NAME);
}
+ @Test
+ public void timestampTypeTest() {
+ expectedHeader = new String[] {"_col0", "_col1", "_col2", "_col3",
"_col4", "_col5"};
+ retArray =
+ new String[] {
+
"1970-01-01T00:00:00.000Z,1970-01-01T00:00:00.000Z,1970-01-01T00:00:00.000Z,1970-01-01T00:00:00.000Z,1970-01-01T00:00:00.000Z,1970-01-01T00:00:00.000Z,"
+ };
+ tableResultSetEqualTest(
+ "select
last(value),first(value),last_by(value,time),first_by(value,time),max(value),min(value)
from tableD",
+ expectedHeader,
+ retArray,
+ DATABASE_NAME);
+ }
+
public static void repeatTest(
String sql, String[] expectedHeader, String[] retArray, String dbName,
int repeatTimes) {
for (int i = 0; i < repeatTimes; i++) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstAccumulator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstAccumulator.java
index 4bfc981c5a3..b01349e6082 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstAccumulator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstAccumulator.java
@@ -210,10 +210,8 @@ public class FirstAccumulator implements TableAccumulator {
updateIntFirstValue((int) statistics[0].getFirstValue(),
statistics[0].getStartTime());
break;
case INT64:
- updateLongFirstValue((long) statistics[0].getFirstValue(),
statistics[0].getStartTime());
- break;
case TIMESTAMP:
- updateLongFirstValue(statistics[0].getStartTime(),
statistics[0].getStartTime());
+ updateLongFirstValue((long) statistics[0].getFirstValue(),
statistics[0].getStartTime());
break;
case FLOAT:
updateFloatFirstValue((float) statistics[0].getFirstValue(),
statistics[0].getStartTime());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstByAccumulator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstByAccumulator.java
index 3691a13e5f6..63c87bc65d1 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstByAccumulator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/FirstByAccumulator.java
@@ -23,7 +23,6 @@ import org.apache.tsfile.block.column.Column;
import org.apache.tsfile.block.column.ColumnBuilder;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.statistics.Statistics;
-import org.apache.tsfile.file.metadata.statistics.TimeStatistics;
import org.apache.tsfile.read.common.block.column.BinaryColumn;
import org.apache.tsfile.read.common.block.column.BinaryColumnBuilder;
import org.apache.tsfile.read.common.block.column.RunLengthEncodedColumn;
@@ -254,11 +253,6 @@ public class FirstByAccumulator implements
TableAccumulator {
yFirstTime = yStatistics.getStartTime();
xIsNull = false;
- if (xStatistics instanceof TimeStatistics) {
- xResult.setLong(xStatistics.getStartTime());
- return;
- }
-
switch (xDataType) {
case INT32:
case DATE:
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastAccumulator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastAccumulator.java
index 2745ee1dff9..14e652d675a 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastAccumulator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastAccumulator.java
@@ -229,10 +229,8 @@ public class LastAccumulator implements TableAccumulator {
updateIntLastValue((int) statistics[0].getLastValue(),
statistics[0].getEndTime());
break;
case INT64:
- updateLongLastValue((long) statistics[0].getLastValue(),
statistics[0].getEndTime());
- break;
case TIMESTAMP:
- updateLongLastValue(statistics[0].getEndTime(),
statistics[0].getEndTime());
+ updateLongLastValue((long) statistics[0].getLastValue(),
statistics[0].getEndTime());
break;
case FLOAT:
updateFloatLastValue((float) statistics[0].getLastValue(),
statistics[0].getEndTime());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastByAccumulator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastByAccumulator.java
index 1e457c19afa..9428e83e8d3 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastByAccumulator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/LastByAccumulator.java
@@ -23,7 +23,6 @@ import org.apache.tsfile.block.column.Column;
import org.apache.tsfile.block.column.ColumnBuilder;
import org.apache.tsfile.enums.TSDataType;
import org.apache.tsfile.file.metadata.statistics.Statistics;
-import org.apache.tsfile.file.metadata.statistics.TimeStatistics;
import org.apache.tsfile.read.common.block.column.BinaryColumn;
import org.apache.tsfile.read.common.block.column.BinaryColumnBuilder;
import org.apache.tsfile.read.common.block.column.RunLengthEncodedColumn;
@@ -278,11 +277,6 @@ public class LastByAccumulator implements TableAccumulator
{
yLastTime = yStatistics.getEndTime();
xIsNull = false;
- if (xStatistics instanceof TimeStatistics) {
- xResult.setLong(xStatistics.getEndTime());
- return;
- }
-
switch (xDataType) {
case INT32:
case DATE:
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MaxAccumulator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MaxAccumulator.java
index 2f5d7611355..e1a4b323694 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MaxAccumulator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MaxAccumulator.java
@@ -209,10 +209,8 @@ public class MaxAccumulator implements TableAccumulator {
updateIntMaxValue((int) statistics[0].getMaxValue());
break;
case INT64:
- updateLongMaxValue((long) statistics[0].getMaxValue());
- break;
case TIMESTAMP:
- updateLongMaxValue(statistics[0].getEndTime());
+ updateLongMaxValue((long) statistics[0].getMaxValue());
break;
case FLOAT:
updateFloatMaxValue((float) statistics[0].getMaxValue());
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MinAccumulator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MinAccumulator.java
index 88b8cc89267..67e84e94406 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MinAccumulator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/aggregation/MinAccumulator.java
@@ -209,10 +209,8 @@ public class MinAccumulator implements TableAccumulator {
updateIntMinValue((int) statistics[0].getMinValue());
break;
case INT64:
- updateLongMinValue((long) statistics[0].getMinValue());
- break;
case TIMESTAMP:
- updateLongMinValue(statistics[0].getStartTime());
+ updateLongMinValue((long) statistics[0].getMinValue());
break;
case FLOAT:
updateFloatMinValue((float) statistics[0].getMinValue());