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++) {