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

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

commit 3c3efe2c1bac40e60fe0072c545c8ffe09d6e70e
Author: YangYumings <[email protected]>
AuthorDate: Mon Aug 5 10:24:38 2024 +0800

    Convert date to LocalDate in sortlist()
    
    (cherry picked from commit 0733a499a0f0ca468d9a6b4cc61ee0cf50f3d5fc)
---
 iotdb                                              |  1 +
 .../java/org/apache/iotdb/session/Session.java     |  9 ++-
 .../java/org/apache/iotdb/session/TabletTest.java  | 75 +++++++++++++++++++---
 .../planner/plan/node/write/InsertTabletNode.java  |  1 +
 .../node/write/InsertTabletNodeSerdeTest.java      | 35 ++++++++++
 5 files changed, 112 insertions(+), 9 deletions(-)

diff --git a/iotdb b/iotdb
new file mode 160000
index 00000000000..6ade33a6b9a
--- /dev/null
+++ b/iotdb
@@ -0,0 +1 @@
+Subproject commit 6ade33a6b9a90820d0f2d536d81136b4af6a98c7
diff --git 
a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java 
b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
index caa02baee3f..35229b54162 100644
--- a/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
+++ b/iotdb-client/session/src/main/java/org/apache/iotdb/session/Session.java
@@ -79,6 +79,7 @@ import org.slf4j.LoggerFactory;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.time.LocalDate;
 import java.time.ZoneId;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -3361,13 +3362,19 @@ public class Session implements ISession {
         }
         return sortedValues;
       case INT32:
-      case DATE:
         int[] intValues = (int[]) valueList;
         int[] sortedIntValues = new int[intValues.length];
         for (int i = 0; i < index.length; i++) {
           sortedIntValues[i] = intValues[index[i]];
         }
         return sortedIntValues;
+      case DATE:
+        LocalDate[] date = (LocalDate[]) valueList;
+        LocalDate[] sortedDateValues = new LocalDate[date.length];
+        for (int i = 0; i < index.length; i++) {
+          sortedDateValues[i] = date[index[i]];
+        }
+        return sortedDateValues;
       case INT64:
       case TIMESTAMP:
         long[] longValues = (long[]) valueList;
diff --git 
a/iotdb-client/session/src/test/java/org/apache/iotdb/session/TabletTest.java 
b/iotdb-client/session/src/test/java/org/apache/iotdb/session/TabletTest.java
index 7df3ce16150..9f8c178e3d0 100644
--- 
a/iotdb-client/session/src/test/java/org/apache/iotdb/session/TabletTest.java
+++ 
b/iotdb-client/session/src/test/java/org/apache/iotdb/session/TabletTest.java
@@ -21,11 +21,14 @@ package org.apache.iotdb.session;
 
 import org.apache.tsfile.enums.TSDataType;
 import org.apache.tsfile.file.metadata.enums.TSEncoding;
+import org.apache.tsfile.utils.Binary;
 import org.apache.tsfile.write.record.Tablet;
 import org.apache.tsfile.write.schema.IMeasurementSchema;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 import org.junit.Test;
 
+import java.nio.charset.StandardCharsets;
+import java.time.LocalDate;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -37,6 +40,15 @@ public class TabletTest {
     Session session = new Session("127.0.0.1", 1234);
     List<IMeasurementSchema> schemaList = new ArrayList<>();
     schemaList.add(new MeasurementSchema("s1", TSDataType.INT64, 
TSEncoding.RLE));
+    schemaList.add(new MeasurementSchema("s2", TSDataType.TIMESTAMP));
+    schemaList.add(new MeasurementSchema("s3", TSDataType.INT32));
+    schemaList.add(new MeasurementSchema("s4", TSDataType.DATE));
+    schemaList.add(new MeasurementSchema("s5", TSDataType.BOOLEAN));
+    schemaList.add(new MeasurementSchema("s6", TSDataType.DOUBLE));
+    schemaList.add(new MeasurementSchema("s7", TSDataType.BLOB));
+    schemaList.add(new MeasurementSchema("s8", TSDataType.TEXT));
+    schemaList.add(new MeasurementSchema("s9", TSDataType.STRING));
+    ;
     // insert three rows data
     Tablet tablet = new Tablet("root.sg1.d1", schemaList, 3);
     long[] timestamps = tablet.timestamps;
@@ -53,11 +65,32 @@ public class TabletTest {
     timestamps[0] = 2;
     timestamps[1] = 0;
     timestamps[2] = 1;
-    // just one column INT64 data
-    long[] sensor = (long[]) values[0];
-    sensor[0] = 0;
-    sensor[1] = 1;
-    sensor[2] = 2;
+    values[0] = new long[] {0, 1, 2};
+    values[1] = new long[] {0, 1, 2};
+    values[2] = new int[] {0, 1, 2};
+    values[3] =
+        new LocalDate[] {LocalDate.ofEpochDay(0), LocalDate.ofEpochDay(1), 
LocalDate.ofEpochDay(2)};
+    values[4] = new boolean[] {true, false, true};
+    values[5] = new double[] {0.0, 1.0, 2.0};
+    values[6] =
+        new Binary[] {
+          new Binary("0".getBytes(StandardCharsets.UTF_8)),
+          new Binary("1".getBytes(StandardCharsets.UTF_8)),
+          new Binary("2".getBytes(StandardCharsets.UTF_8))
+        };
+    values[7] =
+        new Binary[] {
+          new Binary("0".getBytes(StandardCharsets.UTF_8)),
+          new Binary("1".getBytes(StandardCharsets.UTF_8)),
+          new Binary("2".getBytes(StandardCharsets.UTF_8))
+        };
+    values[8] =
+        new Binary[] {
+          new Binary("0".getBytes(StandardCharsets.UTF_8)),
+          new Binary("1".getBytes(StandardCharsets.UTF_8)),
+          new Binary("2".getBytes(StandardCharsets.UTF_8))
+        };
+
     tablet.rowSize = 3;
 
     session.sortTablet(tablet);
@@ -73,10 +106,36 @@ public class TabletTest {
     If the data equal to above tablet, test pass, otherwise test fialed
      */
     long[] resTimestamps = tablet.timestamps;
-    long[] resValues = (long[]) tablet.values[0];
     long[] expectedTimestamps = new long[] {0, 1, 2};
-    long[] expectedValues = new long[] {1, 2, 0};
     assertArrayEquals(expectedTimestamps, resTimestamps);
-    assertArrayEquals(expectedValues, resValues);
+    assertArrayEquals(new long[] {1, 2, 0}, ((long[]) tablet.values[0]));
+    assertArrayEquals(new long[] {1, 2, 0}, ((long[]) tablet.values[1]));
+    assertArrayEquals(new int[] {1, 2, 0}, ((int[]) tablet.values[2]));
+    assertArrayEquals(
+        new LocalDate[] {LocalDate.ofEpochDay(1), LocalDate.ofEpochDay(2), 
LocalDate.ofEpochDay(0)},
+        ((LocalDate[]) tablet.values[3]));
+    assertArrayEquals(new boolean[] {false, true, true}, ((boolean[]) 
tablet.values[4]));
+    assertArrayEquals(new double[] {1.0, 2.0, 0.0}, ((double[]) 
tablet.values[5]), 0.001);
+    assertArrayEquals(
+        new Binary[] {
+          new Binary("1".getBytes(StandardCharsets.UTF_8)),
+          new Binary("2".getBytes(StandardCharsets.UTF_8)),
+          new Binary("0".getBytes(StandardCharsets.UTF_8))
+        },
+        ((Binary[]) tablet.values[6]));
+    assertArrayEquals(
+        new Binary[] {
+          new Binary("1".getBytes(StandardCharsets.UTF_8)),
+          new Binary("2".getBytes(StandardCharsets.UTF_8)),
+          new Binary("0".getBytes(StandardCharsets.UTF_8))
+        },
+        ((Binary[]) tablet.values[7]));
+    assertArrayEquals(
+        new Binary[] {
+          new Binary("1".getBytes(StandardCharsets.UTF_8)),
+          new Binary("2".getBytes(StandardCharsets.UTF_8)),
+          new Binary("0".getBytes(StandardCharsets.UTF_8))
+        },
+        ((Binary[]) tablet.values[8]));
   }
 }
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertTabletNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertTabletNode.java
index 4f46c6fda54..9a35947edf2 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertTabletNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/node/write/InsertTabletNode.java
@@ -386,6 +386,7 @@ public class InsertTabletNode extends InsertNode implements 
WALEntryValue {
           case DATE:
             values[i] = new int[rowSize];
             break;
+          case TIMESTAMP:
           case INT64:
             values[i] = new long[rowSize];
             break;
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertTabletNodeSerdeTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertTabletNodeSerdeTest.java
index 183b95fe0a1..013aad45b95 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertTabletNodeSerdeTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/node/write/InsertTabletNodeSerdeTest.java
@@ -29,6 +29,7 @@ import 
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.RelationalIn
 import 
org.apache.iotdb.db.storageengine.dataregion.wal.utils.WALByteBufferForTest;
 
 import org.apache.tsfile.enums.TSDataType;
+import org.apache.tsfile.utils.Binary;
 import org.apache.tsfile.write.schema.MeasurementSchema;
 import org.junit.Assert;
 import org.junit.Test;
@@ -36,6 +37,8 @@ import org.junit.Test;
 import java.io.ByteArrayInputStream;
 import java.io.DataInputStream;
 import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.nio.ByteBuffer;
 
 public class InsertTabletNodeSerdeTest {
@@ -147,6 +150,38 @@ public class InsertTabletNodeSerdeTest {
     Assert.assertEquals(insertTabletNode, tmpNode);
   }
 
+  @Test
+  public void testInitTabletValuesWithAllTypes()
+      throws NoSuchMethodException, InvocationTargetException, 
IllegalAccessException {
+    InsertTabletNode insertTabletNode = new InsertTabletNode(new 
PlanNodeId("1"));
+    Method initTabletValuesMethod =
+        InsertTabletNode.class.getDeclaredMethod(
+            "initTabletValues", int.class, int.class, TSDataType[].class);
+    initTabletValuesMethod.setAccessible(true);
+
+    TSDataType[] dataTypes = {
+      TSDataType.TEXT, TSDataType.FLOAT, TSDataType.INT32,
+      TSDataType.TIMESTAMP, TSDataType.DOUBLE, TSDataType.BOOLEAN
+    };
+
+    int columnSize = dataTypes.length;
+    int rowSize = 5;
+
+    Object[] values =
+        (Object[]) initTabletValuesMethod.invoke(insertTabletNode, columnSize, 
rowSize, dataTypes);
+
+    // Assert the result
+    Assert.assertEquals(columnSize, values.length);
+
+    // Validate each element in the values array
+    Assert.assertEquals(Binary[].class, values[0].getClass());
+    Assert.assertEquals(float[].class, values[1].getClass());
+    Assert.assertEquals(int[].class, values[2].getClass());
+    Assert.assertEquals(long[].class, values[3].getClass());
+    Assert.assertEquals(double[].class, values[4].getClass());
+    Assert.assertEquals(boolean[].class, values[5].getClass());
+  }
+
   private InsertTabletNode getInsertTabletNode() throws IllegalPathException {
     long[] times = new long[] {110L, 111L, 112L, 113L};
     TSDataType[] dataTypes = new TSDataType[5];

Reply via email to