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 0733a499a0f Convert date to LocalDate in sortlist()
0733a499a0f is described below
commit 0733a499a0f0ca468d9a6b4cc61ee0cf50f3d5fc
Author: YangYumings <[email protected]>
AuthorDate: Mon Aug 5 10:24:38 2024 +0800
Convert date to LocalDate in sortlist()
---
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 a552002fdae..dea03f91ea7 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
@@ -78,6 +78,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;
@@ -3295,13 +3296,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 689ebab4684..fdf019bb8c8 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,10 +21,13 @@ 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.MeasurementSchema;
import org.junit.Test;
+import java.nio.charset.StandardCharsets;
+import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List;
@@ -36,6 +39,15 @@ public class TabletTest {
Session session = new Session("127.0.0.1", 1234);
List<MeasurementSchema> 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;
@@ -52,11 +64,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);
@@ -72,10 +105,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 58f6dd363c7..4dc8abe11b4 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
@@ -328,6 +328,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 4ff6454eca2..754e7a6e138 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
@@ -27,6 +27,7 @@ import
org.apache.iotdb.db.queryengine.plan.planner.plan.node.write.InsertTablet
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;
@@ -34,6 +35,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 {
@@ -90,6 +93,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];