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

Reply via email to