You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ha...@apache.org on 2021/11/05 10:00:37 UTC

[iotdb] branch new_vector updated: fix extends tvlist column bug

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

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


The following commit(s) were added to refs/heads/new_vector by this push:
     new d550f1b  fix extends tvlist column bug
d550f1b is described below

commit d550f1bbc18cdd1a801809ce4db0a6ab87ba3919
Author: HTHou <hh...@outlook.com>
AuthorDate: Fri Nov 5 17:54:47 2021 +0800

    fix extends tvlist column bug
---
 .../iotdb/db/engine/memtable/AlignedWritableMemChunk.java    | 12 ++++++------
 .../apache/iotdb/db/utils/datastructure/AlignedTVList.java   |  3 ++-
 .../iotdb/tsfile/write/schema/VectorMeasurementSchema.java   |  5 +++--
 3 files changed, 11 insertions(+), 9 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java
index 38e6e58..e9dbfd3 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/memtable/AlignedWritableMemChunk.java
@@ -140,12 +140,6 @@ public class AlignedWritableMemChunk implements IWritableMemChunk {
     List<String> measurementIdsInInsertPlan = vectorSchema.getSubMeasurementsList();
     List<TSDataType> dataTypesInInsertPlan = vectorSchema.getSubMeasurementsTSDataTypeList();
     List<TSEncoding> encodingsInInsertPlan = vectorSchema.getSubMeasurementsTSEncodingList();
-    List<String> measurementIdsInTVList =
-        ((VectorMeasurementSchema) this.schema).getSubMeasurementsList();
-    int[] columnIndexArray = new int[measurementIdsInTVList.size()];
-    for (int i = 0; i < columnIndexArray.length; i++) {
-      columnIndexArray[i] = measurementIdsInInsertPlan.indexOf(measurementIdsInTVList.get(i));
-    }
     for (int i = 0; i < measurementIdsInInsertPlan.size(); i++) {
       if (!containsMeasurement(measurementIdsInInsertPlan.get(i))) {
         this.schema.addSubMeasurement(
@@ -155,6 +149,12 @@ public class AlignedWritableMemChunk implements IWritableMemChunk {
         this.list.extendColumn(dataTypesInInsertPlan.get(i));
       }
     }
+    List<String> measurementIdsInTVList =
+        ((VectorMeasurementSchema) this.schema).getSubMeasurementsList();
+    int[] columnIndexArray = new int[measurementIdsInTVList.size()];
+    for (int i = 0; i < columnIndexArray.length; i++) {
+      columnIndexArray[i] = measurementIdsInInsertPlan.indexOf(measurementIdsInTVList.get(i));
+    }
     return columnIndexArray;
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
index c82ab5b..3eec517 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/AlignedTVList.java
@@ -299,7 +299,7 @@ public class AlignedTVList extends TVList {
       }
       BitMap bitMap = new BitMap(ARRAY_SIZE);
       // last bitmap should be marked to the tslist size's position
-      if (i == timestamps.size()) {
+      if (i == timestamps.size() - 1) {
         for (int j = 0; j < size % ARRAY_SIZE; j++) {
           bitMap.mark(j);
         }
@@ -311,6 +311,7 @@ public class AlignedTVList extends TVList {
     // values.size() is the index of column
     this.bitMaps.set(values.size(), columnBitMaps);
     this.values.add(columnValue);
+    this.dataTypes.add(dataType);
   }
 
   /**
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/VectorMeasurementSchema.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/VectorMeasurementSchema.java
index fb4a75f..fec2796 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/VectorMeasurementSchema.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/write/schema/VectorMeasurementSchema.java
@@ -226,17 +226,18 @@ public class VectorMeasurementSchema
   public void addSubMeasurement(String measurementId, TSDataType dataType, TSEncoding encoding) {
     subMeasurementsToIndexMap.put(measurementId, subMeasurementsToIndexMap.size());
     byte[] typesInByte = new byte[subMeasurementsToIndexMap.size()];
-    for (int i = 0; i < subMeasurementsToIndexMap.size(); i++) {
+    for (int i = 0; i < subMeasurementsToIndexMap.size() - 1; i++) {
       typesInByte[i] = types[i];
     }
     typesInByte[typesInByte.length - 1] = dataType.serialize();
     this.types = typesInByte;
     byte[] encodingsInByte = new byte[subMeasurementsToIndexMap.size()];
-    for (int i = 0; i < subMeasurementsToIndexMap.size(); i++) {
+    for (int i = 0; i < subMeasurementsToIndexMap.size() - 1; i++) {
       encodingsInByte[i] = encodings[i];
     }
     encodingsInByte[encodingsInByte.length - 1] = encoding.serialize();
     this.encodings = encodingsInByte;
+    this.encodingConverters = new TSEncodingBuilder[subMeasurementsToIndexMap.size()];
   }
 
   @Override