This is an automated email from the ASF dual-hosted git repository. haonan pushed a commit to branch opt_aligned_tvlist in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 037b9ed60be2ab32eadbbbe9c5b3ec186223bb9a Author: HTHou <[email protected]> AuthorDate: Thu Aug 21 22:46:41 2025 +0800 dev --- .../rescon/memory/PrimitiveArrayManager.java | 3 ++ .../db/utils/datastructure/AlignedTVList.java | 53 +++++++++++----------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/PrimitiveArrayManager.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/PrimitiveArrayManager.java index e8a2a9bb837..9b66fdf5160 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/PrimitiveArrayManager.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/rescon/memory/PrimitiveArrayManager.java @@ -265,6 +265,9 @@ public class PrimitiveArrayManager { */ public static void release(Object array) { int order; + if (array == null) { + return; + } if (array instanceof boolean[]) { order = TSDataType.BOOLEAN.serialize(); } else if (array instanceof int[]) { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java index 80649eb182d..a396c84f1b2 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java @@ -357,32 +357,7 @@ public abstract class AlignedTVList extends TVList { List<Object> columnValue = new ArrayList<>(timestamps.size()); List<BitMap> columnBitMaps = new ArrayList<>(timestamps.size()); for (int i = 0; i < timestamps.size(); i++) { - switch (dataType) { - case TEXT: - case STRING: - case BLOB: - columnValue.add(getPrimitiveArraysByType(TSDataType.TEXT)); - break; - case FLOAT: - columnValue.add(getPrimitiveArraysByType(TSDataType.FLOAT)); - break; - case INT32: - case DATE: - columnValue.add(getPrimitiveArraysByType(TSDataType.INT32)); - break; - case INT64: - case TIMESTAMP: - columnValue.add(getPrimitiveArraysByType(TSDataType.INT64)); - break; - case DOUBLE: - columnValue.add(getPrimitiveArraysByType(TSDataType.DOUBLE)); - break; - case BOOLEAN: - columnValue.add(getPrimitiveArraysByType(TSDataType.BOOLEAN)); - break; - default: - break; - } + columnValue.add(null); BitMap bitMap = new BitMap(ARRAY_SIZE); // The following code is for these 2 kinds of scenarios. @@ -708,7 +683,7 @@ public abstract class AlignedTVList extends TVList { indices.add((int[]) getPrimitiveArraysByType(TSDataType.INT32)); } for (int i = 0; i < dataTypes.size(); i++) { - values.get(i).add(getPrimitiveArraysByType(dataTypes.get(i))); + values.get(i).add(null); if (bitMaps != null && bitMaps.get(i) != null) { bitMaps.get(i).add(null); } @@ -835,6 +810,10 @@ public abstract class AlignedTVList extends TVList { case BLOB: case STRING: Binary[] arrayT = ((Binary[]) columnValues.get(arrayIndex)); + if (arrayT == null) { + arrayT = (Binary[]) getPrimitiveArraysByType(TSDataType.TEXT); + columnValues.set(arrayIndex, arrayT); + } System.arraycopy(value[i], idx, arrayT, elementIndex, remaining); // update raw size of Text chunk @@ -845,24 +824,44 @@ public abstract class AlignedTVList extends TVList { break; case FLOAT: float[] arrayF = ((float[]) columnValues.get(arrayIndex)); + if (arrayF == null) { + arrayF = (float[]) getPrimitiveArraysByType(TSDataType.FLOAT); + columnValues.set(arrayIndex, arrayF); + } System.arraycopy(value[i], idx, arrayF, elementIndex, remaining); break; case INT32: case DATE: int[] arrayI = ((int[]) columnValues.get(arrayIndex)); + if (arrayI == null) { + arrayI = (int[]) getPrimitiveArraysByType(TSDataType.INT32); + columnValues.set(arrayIndex, arrayI); + } System.arraycopy(value[i], idx, arrayI, elementIndex, remaining); break; case INT64: case TIMESTAMP: long[] arrayL = ((long[]) columnValues.get(arrayIndex)); + if (arrayL == null) { + arrayL = (long[]) getPrimitiveArraysByType(TSDataType.INT64); + columnValues.set(arrayIndex, arrayL); + } System.arraycopy(value[i], idx, arrayL, elementIndex, remaining); break; case DOUBLE: double[] arrayD = ((double[]) columnValues.get(arrayIndex)); + if (arrayD == null) { + arrayD = (double[]) getPrimitiveArraysByType(TSDataType.DOUBLE); + columnValues.set(arrayIndex, arrayD); + } System.arraycopy(value[i], idx, arrayD, elementIndex, remaining); break; case BOOLEAN: boolean[] arrayB = ((boolean[]) columnValues.get(arrayIndex)); + if (arrayB == null) { + arrayB = (boolean[]) getPrimitiveArraysByType(TSDataType.BOOLEAN); + columnValues.set(arrayIndex, arrayB); + } System.arraycopy(value[i], idx, arrayB, elementIndex, remaining); break; default:
