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 56cdef7  support insert vector s1s2s3 then s2s1s3
56cdef7 is described below

commit 56cdef75e79d57b4767826cd051aeb7df265f5de
Author: HTHou <[email protected]>
AuthorDate: Thu Oct 28 18:10:10 2021 +0800

    support insert vector s1s2s3 then s2s1s3
---
 .../iotdb/db/engine/flush/NotifyFlushMemTable.java |  5 ++++
 .../db/engine/memtable/IWritableMemChunk.java      |  6 +++--
 .../db/engine/memtable/VectorWritableMemChunk.java | 26 +++++++++++++-------
 .../iotdb/db/engine/memtable/WritableMemChunk.java |  9 +++++--
 .../iotdb/db/utils/datastructure/TVList.java       |  4 ++--
 .../iotdb/db/utils/datastructure/VectorTVList.java | 28 +++++++++++-----------
 .../db/utils/datastructure/VectorTVListTest.java   | 22 +++++++++++++----
 7 files changed, 66 insertions(+), 34 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/flush/NotifyFlushMemTable.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/flush/NotifyFlushMemTable.java
index 4aeb66c..5bc95c9 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/flush/NotifyFlushMemTable.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/flush/NotifyFlushMemTable.java
@@ -35,6 +35,11 @@ public class NotifyFlushMemTable extends AbstractMemTable {
   }
 
   @Override
+  protected IWritableMemChunk genVectorMemSeries(IMeasurementSchema schema) {
+    return null;
+  }
+
+  @Override
   public IMemTable copy() {
     return null;
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/IWritableMemChunk.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/IWritableMemChunk.java
index c3fbe96..42e678b 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/IWritableMemChunk.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/IWritableMemChunk.java
@@ -41,7 +41,7 @@ public interface IWritableMemChunk {
 
   void putBoolean(long t, boolean v);
 
-  void putVector(long t, Object[] v);
+  void putVector(long t, Object[] v, int[] columnOrder);
 
   void putLongs(long[] t, long[] v, BitMap bitMap, int start, int end);
 
@@ -55,10 +55,12 @@ public interface IWritableMemChunk {
 
   void putBooleans(long[] t, boolean[] v, BitMap bitMap, int start, int end);
 
-  void putVectors(long[] t, Object[] v, BitMap[] bitMaps, int start, int end);
+  void putVectors(long[] t, Object[] v, BitMap[] bitMaps, int[] columnOrder, 
int start, int end);
 
   void write(long insertTime, Object objectValue);
 
+  void writeVector(long insertTime, String[] measurements, Object[] 
objectValue);
+
   /**
    * write data in the range [start, end). Null value in the valueList will be 
replaced by the
    * subsequent non-null value, e.g., {1, null, 3, null, 5} will be {1, 3, 5, 
null, 5}
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/VectorWritableMemChunk.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/VectorWritableMemChunk.java
index 8a2a815..e0577bf 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/VectorWritableMemChunk.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/VectorWritableMemChunk.java
@@ -67,8 +67,8 @@ public class VectorWritableMemChunk implements 
IWritableMemChunk {
   }
 
   @Override
-  public void putVector(long t, Object[] v) {
-    list.putVector(t, v);
+  public void putVector(long t, Object[] v, int[] columnOrder) {
+    list.putVector(t, v, columnOrder);
   }
 
   @Override
@@ -102,13 +102,19 @@ public class VectorWritableMemChunk implements 
IWritableMemChunk {
   }
 
   @Override
-  public void putVectors(long[] t, Object[] v, BitMap[] bitMaps, int start, 
int end) {
-    list.putVectors(t, v, bitMaps, start, end);
+  public void putVectors(long[] t, Object[] v, BitMap[] bitMaps, int[] 
columnOrder, int start, int end) {
+    list.putVectors(t, v, bitMaps, columnOrder, start, end);
   }
 
   @Override
   public void write(long insertTime, Object objectValue) {
-    putVector(insertTime, (Object[]) objectValue);
+    throw new UnSupportedDataTypeException(UNSUPPORTED_TYPE + 
schema.getType());
+  }
+
+  @Override
+  public void writeVector(long insertTime, String[] measurementIds, Object[] 
objectValue) {
+    int[] columnOrder = checkColumnOrder(measurementIds);
+    putVector(insertTime, objectValue, columnOrder);
   }
 
   @Override
@@ -125,12 +131,14 @@ public class VectorWritableMemChunk implements 
IWritableMemChunk {
       BitMap[] bitMaps,
       int start,
       int end) {
-    checkColumnOrder(measurementIds);
-    putVectors(times, valueList, bitMaps, start, end);
+    int[] columnOrder = checkColumnOrder(measurementIds);
+    putVectors(times, valueList, bitMaps, columnOrder, start, end);
   }
 
-  private void checkColumnOrder(String[] measurementIds) {
-    // TODO HTHou
+  private int[] checkColumnOrder(String[] measurementIds) {
+    int[] columnOrder = new int[measurementIds.length];
+    
+    return columnOrder;
   }
 
   @Override
diff --git 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/WritableMemChunk.java
 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/WritableMemChunk.java
index 9561515..19a87a1 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/engine/memtable/WritableMemChunk.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/engine/memtable/WritableMemChunk.java
@@ -72,6 +72,11 @@ public class WritableMemChunk implements IWritableMemChunk {
   }
 
   @Override
+  public void writeVector(long insertTime, String[] measurementIds, Object[] 
objectValue) {
+    throw new UnSupportedDataTypeException(UNSUPPORTED_TYPE + 
list.getDataType());
+  }
+
+  @Override
   public void write(
       long[] times, Object valueList, BitMap bitMap, TSDataType dataType, int 
start, int end) {
     switch (dataType) {
@@ -146,7 +151,7 @@ public class WritableMemChunk implements IWritableMemChunk {
   }
 
   @Override
-  public void putVector(long t, Object[] v) {
+  public void putVector(long t, Object[] v, int[] columnOrder) {
     throw new UnSupportedDataTypeException(UNSUPPORTED_TYPE + 
schema.getType());
   }
 
@@ -181,7 +186,7 @@ public class WritableMemChunk implements IWritableMemChunk {
   }
 
   @Override
-  public void putVectors(long[] t, Object[] v, BitMap[] bitMaps, int start, 
int end) {
+  public void putVectors(long[] t, Object[] v, BitMap[] bitMaps, int[] 
columnOrder, int start, int end) {
     throw new UnSupportedDataTypeException(UNSUPPORTED_TYPE + 
schema.getType());
   }
 
diff --git 
a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java 
b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java
index 796b6e9..e549978 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/TVList.java
@@ -163,7 +163,7 @@ public abstract class TVList {
     throw new UnsupportedOperationException(ERR_DATATYPE_NOT_CONSISTENT);
   }
 
-  public void putVector(long time, Object[] value) {
+  public void putVector(long time, Object[] value, int[] columnOrder) {
     throw new UnsupportedOperationException(ERR_DATATYPE_NOT_CONSISTENT);
   }
 
@@ -191,7 +191,7 @@ public abstract class TVList {
     throw new UnsupportedOperationException(ERR_DATATYPE_NOT_CONSISTENT);
   }
 
-  public void putVectors(long[] time, Object[] value, BitMap[] bitMaps, int 
start, int end) {
+  public void putVectors(long[] time, Object[] value, BitMap[] bitMaps, int[] 
columnOrder, int start, int end) {
     throw new UnsupportedOperationException(ERR_DATATYPE_NOT_CONSISTENT);
   }
 
diff --git 
a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/VectorTVList.java
 
b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/VectorTVList.java
index c786c8f..e636208 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/VectorTVList.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/VectorTVList.java
@@ -67,14 +67,14 @@ public class VectorTVList extends TVList {
 
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity 
warning
   @Override
-  public void putVector(long timestamp, Object[] value) {
+  public void putVector(long timestamp, Object[] value, int[] columnOrder) {
     checkExpansion();
     int arrayIndex = size / ARRAY_SIZE;
     int elementIndex = size % ARRAY_SIZE;
     minTime = Math.min(minTime, timestamp);
     timestamps.get(arrayIndex)[elementIndex] = timestamp;
     for (int i = 0; i < values.size(); i++) {
-      Object columnValue = value[i];
+      Object columnValue = value[columnOrder[i]];
       List<Object> columnValues = values.get(i);
       if (columnValue == null) {
         markNullValue(i, arrayIndex, elementIndex);
@@ -602,7 +602,7 @@ public class VectorTVList extends TVList {
 
   @SuppressWarnings("squid:S3776") // Suppress high Cognitive Complexity 
warning
   @Override
-  public void putVectors(long[] time, Object[] value, BitMap[] bitMaps, int 
start, int end) {
+  public void putVectors(long[] time, Object[] value, BitMap[] bitMaps, int[] 
columnOrder, int start, int end) {
     checkExpansion();
     int idx = start;
 
@@ -616,12 +616,12 @@ public class VectorTVList extends TVList {
       if (internalRemaining >= inputRemaining) {
         // the remaining inputs can fit the last array, copy all remaining 
inputs into last array
         System.arraycopy(time, idx, timestamps.get(arrayIdx), elementIdx, 
inputRemaining);
-        arrayCopy(value, idx, arrayIdx, elementIdx, inputRemaining);
+        arrayCopy(value, idx, arrayIdx, elementIdx, inputRemaining, 
columnOrder);
         for (int i = 0; i < inputRemaining; i++) {
           indices.get(arrayIdx)[elementIdx + i] = size;
           if (bitMaps != null) {
             for (int j = 0; j < bitMaps.length; j++) {
-              if (bitMaps[j] != null && bitMaps[j].isMarked(idx + i)) {
+              if (bitMaps[columnOrder[j]] != null && 
bitMaps[columnOrder[j]].isMarked(idx + i)) {
                 markNullValue(j, arrayIdx, elementIdx + i);
               }
             }
@@ -633,12 +633,12 @@ public class VectorTVList extends TVList {
         // the remaining inputs cannot fit the last array, fill the last array 
and create a new
         // one and enter the next loop
         System.arraycopy(time, idx, timestamps.get(arrayIdx), elementIdx, 
internalRemaining);
-        arrayCopy(value, idx, arrayIdx, elementIdx, internalRemaining);
+        arrayCopy(value, idx, arrayIdx, elementIdx, internalRemaining, 
columnOrder);
         for (int i = 0; i < internalRemaining; i++) {
           indices.get(arrayIdx)[elementIdx + i] = size;
           if (bitMaps != null) {
             for (int j = 0; j < bitMaps.length; j++) {
-              if (bitMaps[j] != null && bitMaps[j].isMarked(idx + i)) {
+              if (bitMaps[columnOrder[j]] != null && 
bitMaps[columnOrder[j]].isMarked(idx + i)) {
                 markNullValue(j, arrayIdx, elementIdx + i);
               }
             }
@@ -651,33 +651,33 @@ public class VectorTVList extends TVList {
     }
   }
 
-  private void arrayCopy(Object[] value, int idx, int arrayIndex, int 
elementIndex, int remaining) {
+  private void arrayCopy(Object[] value, int idx, int arrayIndex, int 
elementIndex, int remaining, int[] columnOrder) {
     for (int i = 0; i < values.size(); i++) {
       List<Object> columnValues = values.get(i);
       switch (dataTypes.get(i)) {
         case TEXT:
           Binary[] arrayT = ((Binary[]) columnValues.get(arrayIndex));
-          System.arraycopy(value[i], idx, arrayT, elementIndex, remaining);
+          System.arraycopy(value[columnOrder[i]], idx, arrayT, elementIndex, 
remaining);
           break;
         case FLOAT:
           float[] arrayF = ((float[]) columnValues.get(arrayIndex));
-          System.arraycopy(value[i], idx, arrayF, elementIndex, remaining);
+          System.arraycopy(value[columnOrder[i]], idx, arrayF, elementIndex, 
remaining);
           break;
         case INT32:
           int[] arrayI = ((int[]) columnValues.get(arrayIndex));
-          System.arraycopy(value[i], idx, arrayI, elementIndex, remaining);
+          System.arraycopy(value[columnOrder[i]], idx, arrayI, elementIndex, 
remaining);
           break;
         case INT64:
           long[] arrayL = ((long[]) columnValues.get(arrayIndex));
-          System.arraycopy(value[i], idx, arrayL, elementIndex, remaining);
+          System.arraycopy(value[columnOrder[i]], idx, arrayL, elementIndex, 
remaining);
           break;
         case DOUBLE:
           double[] arrayD = ((double[]) columnValues.get(arrayIndex));
-          System.arraycopy(value[i], idx, arrayD, elementIndex, remaining);
+          System.arraycopy(value[columnOrder[i]], idx, arrayD, elementIndex, 
remaining);
           break;
         case BOOLEAN:
           boolean[] arrayB = ((boolean[]) columnValues.get(arrayIndex));
-          System.arraycopy(value[i], idx, arrayB, elementIndex, remaining);
+          System.arraycopy(value[columnOrder[i]], idx, arrayB, elementIndex, 
remaining);
           break;
         default:
           break;
diff --git 
a/server/src/test/java/org/apache/iotdb/db/utils/datastructure/VectorTVListTest.java
 
b/server/src/test/java/org/apache/iotdb/db/utils/datastructure/VectorTVListTest.java
index e1c11e3..21431c2 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/utils/datastructure/VectorTVListTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/utils/datastructure/VectorTVListTest.java
@@ -40,10 +40,12 @@ public class VectorTVListTest {
     VectorTVList tvList = new VectorTVList(dataTypes);
     for (long i = 0; i < 1000; i++) {
       Object[] value = new Object[5];
+      int[] columnOrder = new int[5];
       for (int j = 0; j < 5; j++) {
         value[j] = i;
+        columnOrder[j] = j;
       }
-      tvList.putVector(i, value);
+      tvList.putVector(i, value, columnOrder);
     }
     for (int i = 0; i < tvList.size; i++) {
       StringBuilder builder = new StringBuilder("[");
@@ -75,7 +77,11 @@ public class VectorTVListTest {
       value[3] = 0.1f;
       value[4] = 0.2d;
       value[5] = new Binary("Test");
-      tvList.putVector(i, value);
+      int[] columnOrder = new int[6];
+      for (int j = 0; j < 6; j++) {
+        columnOrder[j] = j;
+      }
+      tvList.putVector(i, value, columnOrder);
     }
     tvList.sort();
     for (int i = 0; i < tvList.size; i++) {
@@ -96,15 +102,17 @@ public class VectorTVListTest {
     VectorTVList tvList = new VectorTVList(dataTypes);
     long[][] vectorArray = new long[5][1001];
     List<Long> timeList = new ArrayList<>();
+    int[] columnOrder = new int[5];
     for (int i = 1000; i >= 0; i--) {
       timeList.add((long) i);
       for (int j = 0; j < 5; j++) {
         vectorArray[j][i] = (long) i;
+        columnOrder[j] = j;
       }
     }
 
     tvList.putVectors(
-        ArrayUtils.toPrimitive(timeList.toArray(new Long[0])), vectorArray, 
null, 0, 1000);
+        ArrayUtils.toPrimitive(timeList.toArray(new Long[0])), vectorArray, 
null, columnOrder, 0, 1000);
     for (long i = 0; i < tvList.size; i++) {
       Assert.assertEquals(tvList.size - i, tvList.getTime((int) i));
     }
@@ -120,6 +128,7 @@ public class VectorTVListTest {
     }
     VectorTVList tvList = new VectorTVList(dataTypes);
     long[][] vectorArray = new long[5][1001];
+    int[] columnOrder = new int[5];
     List<Long> timeList = new ArrayList<>();
     for (int i = 1000; i >= 0; i--) {
       timeList.add((long) i);
@@ -128,11 +137,12 @@ public class VectorTVListTest {
         if (i % 100 == 0) {
           bitMaps[j].mark(i);
         }
+        columnOrder[j] = j;
       }
     }
 
     tvList.putVectors(
-        ArrayUtils.toPrimitive(timeList.toArray(new Long[0])), vectorArray, 
bitMaps, 0, 1000);
+        ArrayUtils.toPrimitive(timeList.toArray(new Long[0])), vectorArray, 
bitMaps, columnOrder, 0, 1000);
     for (long i = 0; i < tvList.size; i++) {
       Assert.assertEquals(tvList.size - i, tvList.getTime((int) i));
       if (i % 100 == 0) {
@@ -151,6 +161,7 @@ public class VectorTVListTest {
     }
     VectorTVList tvList = new VectorTVList(dataTypes);
     long[][] vectorArray = new long[5][1001];
+    int[] columnOrder = new int[5];
     List<Long> timeList = new ArrayList<>();
     for (int i = 1000; i >= 0; i--) {
       timeList.add((long) i);
@@ -159,11 +170,12 @@ public class VectorTVListTest {
         if (i % 100 == 0) {
           bitMaps[j].mark(i);
         }
+        columnOrder[j] = j;
       }
     }
 
     tvList.putVectors(
-        ArrayUtils.toPrimitive(timeList.toArray(new Long[0])), vectorArray, 
bitMaps, 0, 1000);
+        ArrayUtils.toPrimitive(timeList.toArray(new Long[0])), vectorArray, 
bitMaps, columnOrder, 0, 1000);
 
     VectorTVList clonedTvList = tvList.clone();
     for (long i = 0; i < tvList.size; i++) {

Reply via email to