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

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


The following commit(s) were added to refs/heads/dev/1.3 by this push:
     new 87c597d97f0 Fix error in string/timestamp/date/blob data type + sort + 
limit usage in version 1.3.x (#14323)
87c597d97f0 is described below

commit 87c597d97f00ae7b737f45c6da4741e4dc6a1df0
Author: Beyyes <[email protected]>
AuthorDate: Thu Dec 5 18:39:26 2024 +0800

    Fix error in string/timestamp/date/blob data type + sort + limit usage in 
version 1.3.x (#14323)
---
 .../apache/iotdb/db/it/orderBy/IoTDBOrderByIT.java | 35 ++++++++++++++++++----
 .../execution/operator/process/TopKOperator.java   |  8 +++++
 .../process/join/merge/MergeSortComparator.java    |  4 +++
 3 files changed, 42 insertions(+), 5 deletions(-)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/orderBy/IoTDBOrderByIT.java
 
b/integration-test/src/test/java/org/apache/iotdb/db/it/orderBy/IoTDBOrderByIT.java
index 6a65ab1ed7e..097fa98281f 100644
--- 
a/integration-test/src/test/java/org/apache/iotdb/db/it/orderBy/IoTDBOrderByIT.java
+++ 
b/integration-test/src/test/java/org/apache/iotdb/db/it/orderBy/IoTDBOrderByIT.java
@@ -38,6 +38,7 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Objects;
 
+import static org.apache.iotdb.db.it.utils.TestUtils.resultSetEqualTest;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.fail;
@@ -97,6 +98,12 @@ public class IoTDBOrderByIT {
         "insert into root.sg.d2(timestamp,num,bigNum,floatNum,str,bool) 
values(51536000000,15,3147483648,235.213,\"watermelon\",TRUE)"
       };
 
+  private static final String[] sql3 =
+      new String[] {
+        "create aligned timeseries root.test.dev (v_timestamp TIMESTAMP, 
v_string STRING, v_date DATE, v_blob BLOB encoding=PLAIN, v_int32 INT32);",
+        "insert into root.test.dev(timestamp, v_timestamp, v_string, v_date, 
v_blob, v_int32) aligned values(1, 2024-09-20T06:15:35.000+00:00, 'e1', 
'2012-12-12', X'108DCD62', 1);"
+      };
+
   @BeforeClass
   public static void setUp() throws Exception {
     
EnvFactory.getEnv().getConfig().getDataNodeCommonConfig().setSortBufferSize(1024
 * 1024L);
@@ -112,12 +119,13 @@ public class IoTDBOrderByIT {
   protected static void insertData() {
     try (Connection connection = EnvFactory.getEnv().getConnection();
         Statement statement = connection.createStatement()) {
-      for (String sql : sql) {
-        statement.execute(sql);
-      }
-      for (String sql : sql2) {
-        statement.execute(sql);
+
+      for (String[] sqlList : java.util.Arrays.asList(sql, sql2, sql3)) {
+        for (String sql : sqlList) {
+          statement.execute(sql);
+        }
       }
+
     } catch (Exception e) {
       e.printStackTrace();
     }
@@ -192,6 +200,23 @@ public class IoTDBOrderByIT {
     }
   }
 
+  @Test
+  public void newDataTypeTest() {
+    String[] expectedHeader =
+        new String[] 
{"Time,Device,v_int32,v_blob,v_date,v_timestamp,v_string"};
+    String[] retArray =
+        new String[] {
+          "1,root.test.dev,1,0x108dcd62,2012-12-12,1726812935000,e1,",
+        };
+
+    for (String key : new String[] {"time", "v_int32", "v_date", 
"v_timestamp", "v_string"}) {
+      resultSetEqualTest(
+          String.format("SELECT * FROM root.test.dev ORDER BY %s LIMIT 1 ALIGN 
BY DEVICE", key),
+          expectedHeader,
+          retArray);
+    }
+  }
+
   // 1. One-level order by test
   @Test
   public void orderByTest1() {
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TopKOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TopKOperator.java
index ad4e04e2aed..08d03384693 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TopKOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/TopKOperator.java
@@ -281,11 +281,13 @@ public class TopKOperator implements ProcessOperator {
                   new boolean[positionCount]);
           break;
         case INT32:
+        case DATE:
           columns[i] =
               new IntColumn(
                   positionCount, Optional.of(new boolean[positionCount]), new 
int[positionCount]);
           break;
         case INT64:
+        case TIMESTAMP:
           columns[i] =
               new LongColumn(
                   positionCount, Optional.of(new boolean[positionCount]), new 
long[positionCount]);
@@ -303,6 +305,8 @@ public class TopKOperator implements ProcessOperator {
                   new double[positionCount]);
           break;
         case TEXT:
+        case STRING:
+        case BLOB:
           columns[i] =
               new BinaryColumn(
                   positionCount,
@@ -366,14 +370,18 @@ public class TopKOperator implements ProcessOperator {
           break;
         case INT32:
         case FLOAT:
+        case DATE:
           memory += 4;
           break;
         case INT64:
         case DOUBLE:
         case VECTOR:
+        case TIMESTAMP:
           memory += 8;
           break;
         case TEXT:
+        case STRING:
+        case BLOB:
           memory += 16;
           break;
         default:
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/join/merge/MergeSortComparator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/join/merge/MergeSortComparator.java
index c299a368e73..4b8afe4e39e 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/join/merge/MergeSortComparator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/join/merge/MergeSortComparator.java
@@ -70,11 +70,13 @@ public class MergeSortComparator {
     Comparator<SortKey> comparator;
     switch (dataType) {
       case INT32:
+      case DATE:
         comparator =
             Comparator.comparingInt(
                 (SortKey sortKey) -> 
sortKey.tsBlock.getColumn(index).getInt(sortKey.rowIndex));
         break;
       case INT64:
+      case TIMESTAMP:
         comparator =
             Comparator.comparingLong(
                 (SortKey sortKey) -> 
sortKey.tsBlock.getColumn(index).getLong(sortKey.rowIndex));
@@ -90,6 +92,8 @@ public class MergeSortComparator {
                 (SortKey sortKey) -> 
sortKey.tsBlock.getColumn(index).getDouble(sortKey.rowIndex));
         break;
       case TEXT:
+      case BLOB:
+      case STRING:
         comparator =
             Comparator.comparing(
                 (SortKey sortKey) -> 
sortKey.tsBlock.getColumn(index).getBinary(sortKey.rowIndex));

Reply via email to