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 2022/05/02 09:36:51 UTC
[iotdb] 01/03: tvlist -> tsblock
This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch memtsblock
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 178959f32e3ef3ed60f2e7d6ff8af62aad2be078
Author: HTHou <hh...@outlook.com>
AuthorDate: Mon May 2 14:56:09 2022 +0800
tvlist -> tsblock
---
.../db/engine/querycontext/ReadOnlyMemChunk.java | 60 ++++++++++++++++++++--
.../db/utils/datastructure/AlignedTVList.java | 7 +++
.../iotdb/db/utils/datastructure/BinaryTVList.java | 22 ++++++++
.../db/utils/datastructure/BooleanTVList.java | 22 ++++++++
.../iotdb/db/utils/datastructure/DoubleTVList.java | 22 ++++++++
.../iotdb/db/utils/datastructure/FloatTVList.java | 22 ++++++++
.../iotdb/db/utils/datastructure/IntTVList.java | 22 ++++++++
.../iotdb/db/utils/datastructure/LongTVList.java | 22 ++++++++
.../iotdb/db/utils/datastructure/TVList.java | 8 +++
.../read/common/block/column/ColumnBuilder.java | 38 ++++++++++++--
.../common/block/column/TimeColumnBuilder.java | 15 ++++++
11 files changed, 252 insertions(+), 8 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java
index b24313f4f4..40ce93b523 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/querycontext/ReadOnlyMemChunk.java
@@ -18,6 +18,7 @@
*/
package org.apache.iotdb.db.engine.querycontext;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
import org.apache.iotdb.db.exception.query.QueryProcessException;
import org.apache.iotdb.db.query.reader.chunk.MemChunkLoader;
import org.apache.iotdb.db.utils.datastructure.TVList;
@@ -30,6 +31,7 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
import org.apache.iotdb.tsfile.read.TimeValuePair;
import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
import org.apache.iotdb.tsfile.read.reader.IPointReader;
import org.slf4j.Logger;
@@ -62,6 +64,8 @@ public class ReadOnlyMemChunk {
protected IPointReader chunkPointReader;
+ protected TsBlock tsblock;
+
private int chunkDataSize;
public ReadOnlyMemChunk() {
@@ -101,9 +105,15 @@ public class ReadOnlyMemChunk {
this.chunkDataSize = size;
this.deletionList = deletionList;
- this.chunkPointReader =
- tvList.getIterator(floatPrecision, encoding, chunkDataSize, deletionList);
- initChunkMeta();
+ if (IoTDBDescriptor.getInstance().getConfig().isMppMode()) {
+ this.tsblock = tvList.getTsBlock(floatPrecision, encoding, chunkDataSize, deletionList);
+ initChunkMetaFromTsBlock();
+ this.chunkPointReader = tsblock.getTsBlockSingleColumnIterator();
+ } else {
+ this.chunkPointReader =
+ tvList.getIterator(floatPrecision, encoding, chunkDataSize, deletionList);
+ initChunkMeta();
+ }
}
private void initChunkMeta() throws IOException, QueryProcessException {
@@ -144,12 +154,54 @@ public class ReadOnlyMemChunk {
cachedMetaData = metaData;
}
+ private void initChunkMetaFromTsBlock() throws IOException, QueryProcessException {
+ Statistics statsByType = Statistics.getStatsByType(dataType);
+ IChunkMetadata metaData = new ChunkMetadata(measurementUid, dataType, 0, statsByType);
+ if (!isEmpty()) {
+ IPointReader iterator =
+ chunkData.getTsBlock(floatPrecision, encoding, chunkDataSize, deletionList).getTsBlockSingleColumnIterator();
+ while (iterator.hasNextTimeValuePair()) {
+ TimeValuePair timeValuePair = iterator.nextTimeValuePair();
+ switch (dataType) {
+ case BOOLEAN:
+ statsByType.update(timeValuePair.getTimestamp(), timeValuePair.getValue().getBoolean());
+ break;
+ case TEXT:
+ statsByType.update(timeValuePair.getTimestamp(), timeValuePair.getValue().getBinary());
+ break;
+ case FLOAT:
+ statsByType.update(timeValuePair.getTimestamp(), timeValuePair.getValue().getFloat());
+ break;
+ case INT32:
+ statsByType.update(timeValuePair.getTimestamp(), timeValuePair.getValue().getInt());
+ break;
+ case INT64:
+ statsByType.update(timeValuePair.getTimestamp(), timeValuePair.getValue().getLong());
+ break;
+ case DOUBLE:
+ statsByType.update(timeValuePair.getTimestamp(), timeValuePair.getValue().getDouble());
+ break;
+ default:
+ throw new QueryProcessException("Unsupported data type:" + dataType);
+ }
+ }
+ }
+ statsByType.setEmpty(isEmpty());
+ metaData.setChunkLoader(new MemChunkLoader(this));
+ metaData.setVersion(Long.MAX_VALUE);
+ cachedMetaData = metaData;
+ }
+
public TSDataType getDataType() {
return dataType;
}
public boolean isEmpty() throws IOException {
- return !chunkPointReader.hasNextTimeValuePair();
+ if (IoTDBDescriptor.getInstance().getConfig().isMppMode()) {
+ return tsblock.isEmpty();
+ } else {
+ return !chunkPointReader.hasNextTimeValuePair();
+ }
}
public IChunkMetadata getChunkMetaData() {
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 e8d4af943e..4819d1cd89 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
@@ -28,6 +28,7 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.TimeValuePair;
import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
import org.apache.iotdb.tsfile.read.reader.IPointReader;
import org.apache.iotdb.tsfile.utils.Binary;
import org.apache.iotdb.tsfile.utils.BitMap;
@@ -915,6 +916,12 @@ public class AlignedTVList extends TVList {
throw new UnsupportedOperationException(ERR_DATATYPE_NOT_CONSISTENT);
}
+ @Override
+ public TsBlock getTsBlock(int floatPrecision, TSEncoding encoding, int size,
+ List<TimeRange> deletionList) {
+ return null;
+ }
+
public IPointReader getAlignedIterator(
int floatPrecision,
List<TSEncoding> encodingList,
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BinaryTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BinaryTVList.java
index 4a711a7b0f..fc15313619 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BinaryTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BinaryTVList.java
@@ -18,12 +18,18 @@
*/
package org.apache.iotdb.db.utils.datastructure;
+import java.util.Collections;
import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
import org.apache.iotdb.db.wal.utils.WALWriteUtils;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
import org.apache.iotdb.tsfile.utils.Binary;
import org.apache.iotdb.tsfile.utils.BitMap;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
@@ -196,6 +202,22 @@ public class BinaryTVList extends TVList {
return new TimeValuePair(time, TsPrimitiveType.getByType(TSDataType.TEXT, getBinary(index)));
}
+ @Override
+ public TsBlock getTsBlock(int floatPrecision, TSEncoding encoding, int size,
+ List<TimeRange> deletionList) {
+ TsBlockBuilder builder = new TsBlockBuilder(Collections.singletonList(this.getDataType()));
+ TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
+ ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
+ for (int i = 0; i < timestamps.size() - 1; i++) {
+ timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+ valueBuilder.writeBinaries(values.get(i), ARRAY_SIZE);
+ }
+ timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+ valueBuilder.writeBinaries(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+ builder.declarePositions(size);
+ return builder.build();
+ }
+
@Override
protected void releaseLastValueArray() {
PrimitiveArrayManager.release(values.remove(values.size() - 1));
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BooleanTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BooleanTVList.java
index 2b15a4e286..93df9b173f 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BooleanTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/BooleanTVList.java
@@ -18,12 +18,18 @@
*/
package org.apache.iotdb.db.utils.datastructure;
+import java.util.Collections;
import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
import org.apache.iotdb.db.wal.utils.WALWriteUtils;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
import org.apache.iotdb.tsfile.utils.BitMap;
import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
@@ -196,6 +202,22 @@ public class BooleanTVList extends TVList {
time, TsPrimitiveType.getByType(TSDataType.BOOLEAN, getBoolean(index)));
}
+ @Override
+ public TsBlock getTsBlock(int floatPrecision, TSEncoding encoding, int size,
+ List<TimeRange> deletionList) {
+ TsBlockBuilder builder = new TsBlockBuilder(Collections.singletonList(this.getDataType()));
+ TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
+ ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
+ for (int i = 0; i < timestamps.size() - 1; i++) {
+ timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+ valueBuilder.writeBooleans(values.get(i), ARRAY_SIZE);
+ }
+ timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+ valueBuilder.writeBooleans(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+ builder.declarePositions(size);
+ return builder.build();
+ }
+
@Override
protected void releaseLastValueArray() {
PrimitiveArrayManager.release(values.remove(values.size() - 1));
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
index 3fe9f016d6..517bd5a574 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/DoubleTVList.java
@@ -18,6 +18,7 @@
*/
package org.apache.iotdb.db.utils.datastructure;
+import java.util.Collections;
import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
import org.apache.iotdb.db.utils.MathUtils;
import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
@@ -25,6 +26,11 @@ import org.apache.iotdb.db.wal.utils.WALWriteUtils;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
import org.apache.iotdb.tsfile.utils.BitMap;
import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
@@ -199,6 +205,22 @@ public class DoubleTVList extends TVList {
return new TimeValuePair(time, TsPrimitiveType.getByType(TSDataType.DOUBLE, value));
}
+ @Override
+ public TsBlock getTsBlock(int floatPrecision, TSEncoding encoding, int size,
+ List<TimeRange> deletionList) {
+ TsBlockBuilder builder = new TsBlockBuilder(Collections.singletonList(this.getDataType()));
+ TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
+ ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
+ for (int i = 0; i < timestamps.size() - 1; i++) {
+ timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+ valueBuilder.writeDoubles(values.get(i), ARRAY_SIZE);
+ }
+ timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+ valueBuilder.writeDoubles(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+ builder.declarePositions(size);
+ return builder.build();
+ }
+
@Override
protected void releaseLastValueArray() {
PrimitiveArrayManager.release(values.remove(values.size() - 1));
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
index b11d26360d..df5eaa4029 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/FloatTVList.java
@@ -18,6 +18,7 @@
*/
package org.apache.iotdb.db.utils.datastructure;
+import java.util.Collections;
import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
import org.apache.iotdb.db.utils.MathUtils;
import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
@@ -25,6 +26,11 @@ import org.apache.iotdb.db.wal.utils.WALWriteUtils;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
import org.apache.iotdb.tsfile.utils.BitMap;
import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
@@ -199,6 +205,22 @@ public class FloatTVList extends TVList {
return new TimeValuePair(time, TsPrimitiveType.getByType(TSDataType.FLOAT, value));
}
+ @Override
+ public TsBlock getTsBlock(int floatPrecision, TSEncoding encoding, int size,
+ List<TimeRange> deletionList) {
+ TsBlockBuilder builder = new TsBlockBuilder(Collections.singletonList(this.getDataType()));
+ TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
+ ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
+ for (int i = 0; i < timestamps.size() - 1; i++) {
+ timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+ valueBuilder.writeFloats(values.get(i), ARRAY_SIZE);
+ }
+ timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+ valueBuilder.writeFloats(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+ builder.declarePositions(size);
+ return builder.build();
+ }
+
@Override
protected void releaseLastValueArray() {
PrimitiveArrayManager.release(values.remove(values.size() - 1));
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/IntTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/IntTVList.java
index c6779acf17..e785c3ab91 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/IntTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/IntTVList.java
@@ -18,12 +18,18 @@
*/
package org.apache.iotdb.db.utils.datastructure;
+import java.util.Collections;
import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
import org.apache.iotdb.db.wal.utils.WALWriteUtils;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
import org.apache.iotdb.tsfile.utils.BitMap;
import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
@@ -194,6 +200,22 @@ public class IntTVList extends TVList {
return new TimeValuePair(time, TsPrimitiveType.getByType(TSDataType.INT32, getInt(index)));
}
+ @Override
+ public TsBlock getTsBlock(int floatPrecision, TSEncoding encoding, int size,
+ List<TimeRange> deletionList) {
+ TsBlockBuilder builder = new TsBlockBuilder(Collections.singletonList(this.getDataType()));
+ TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
+ ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
+ for (int i = 0; i < timestamps.size() - 1; i++) {
+ timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+ valueBuilder.writeInts(values.get(i), ARRAY_SIZE);
+ }
+ timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+ valueBuilder.writeInts(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+ builder.declarePositions(size);
+ return builder.build();
+ }
+
@Override
protected void releaseLastValueArray() {
PrimitiveArrayManager.release(values.remove(values.size() - 1));
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java
index cd7e1e5124..9d7f6d4af5 100644
--- a/server/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java
+++ b/server/src/main/java/org/apache/iotdb/db/utils/datastructure/LongTVList.java
@@ -18,12 +18,18 @@
*/
package org.apache.iotdb.db.utils.datastructure;
+import java.util.Collections;
import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
import org.apache.iotdb.db.wal.utils.WALWriteUtils;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.TimeValuePair;
+import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
import org.apache.iotdb.tsfile.utils.BitMap;
import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
@@ -194,6 +200,22 @@ public class LongTVList extends TVList {
return new TimeValuePair(time, TsPrimitiveType.getByType(TSDataType.INT64, getLong(index)));
}
+ @Override
+ public TsBlock getTsBlock(int floatPrecision, TSEncoding encoding, int size,
+ List<TimeRange> deletionList) {
+ TsBlockBuilder builder = new TsBlockBuilder(Collections.singletonList(this.getDataType()));
+ TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
+ ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
+ for (int i = 0; i < timestamps.size() - 1; i++) {
+ timeBuilder.writeLongs(timestamps.get(i), ARRAY_SIZE);
+ valueBuilder.writeLongs(values.get(i), ARRAY_SIZE);
+ }
+ timeBuilder.writeLongs(timestamps.get(timestamps.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+ valueBuilder.writeLongs(values.get(values.size() - 1), size % ARRAY_SIZE == 0 ? ARRAY_SIZE : size % ARRAY_SIZE);
+ builder.declarePositions(size);
+ return builder.build();
+ }
+
@Override
protected void releaseLastValueArray() {
PrimitiveArrayManager.release(values.remove(values.size() - 1));
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 56ac6e1205..fb9f790bff 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
@@ -19,6 +19,7 @@
package org.apache.iotdb.db.utils.datastructure;
+import java.util.Collections;
import org.apache.iotdb.commons.utils.TestOnly;
import org.apache.iotdb.db.rescon.PrimitiveArrayManager;
import org.apache.iotdb.db.wal.buffer.WALEntryValue;
@@ -26,6 +27,10 @@ import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.TimeValuePair;
import org.apache.iotdb.tsfile.read.common.TimeRange;
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+import org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder;
+import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder;
import org.apache.iotdb.tsfile.read.reader.IPointReader;
import org.apache.iotdb.tsfile.utils.Binary;
import org.apache.iotdb.tsfile.utils.BitMap;
@@ -616,6 +621,9 @@ public abstract class TVList implements WALEntryValue {
}
}
+ public abstract TsBlock getTsBlock(
+ int floatPrecision, TSEncoding encoding, int size, List<TimeRange> deletionList);
+
public abstract TSDataType getDataType();
public static TVList deserialize(DataInputStream stream) throws IOException {
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/ColumnBuilder.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/ColumnBuilder.java
index 95e71edc06..ad959a4992 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/ColumnBuilder.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/ColumnBuilder.java
@@ -29,22 +29,22 @@ public interface ColumnBuilder {
throw new UnsupportedOperationException(getClass().getName());
}
- /** Write a short to the current entry; */
+ /** Write a int to the current entry; */
default ColumnBuilder writeInt(int value) {
throw new UnsupportedOperationException(getClass().getName());
}
- /** Write a int to the current entry; */
+ /** Write a long to the current entry; */
default ColumnBuilder writeLong(long value) {
throw new UnsupportedOperationException(getClass().getName());
}
- /** Write a long to the current entry; */
+ /** Write a float to the current entry; */
default ColumnBuilder writeFloat(float value) {
throw new UnsupportedOperationException(getClass().getName());
}
- /** Write a byte sequences to the current entry; */
+ /** Write a double to the current entry; */
default ColumnBuilder writeDouble(double value) {
throw new UnsupportedOperationException(getClass().getName());
}
@@ -54,6 +54,36 @@ public interface ColumnBuilder {
throw new UnsupportedOperationException(getClass().getName());
}
+ /** Write a boolean array to the current entry; */
+ default ColumnBuilder writeBooleans(boolean[] values, int length) {
+ throw new UnsupportedOperationException(getClass().getName());
+ }
+
+ /** Write a int array to the current entry; */
+ default ColumnBuilder writeInts(int[] values, int length) {
+ throw new UnsupportedOperationException(getClass().getName());
+ }
+
+ /** Write a long array to the current entry; */
+ default ColumnBuilder writeLongs(long[] values, int length) {
+ throw new UnsupportedOperationException(getClass().getName());
+ }
+
+ /** Write a float array to the current entry; */
+ default ColumnBuilder writeFloats(float[] values, int length) {
+ throw new UnsupportedOperationException(getClass().getName());
+ }
+
+ /** Write a double array to the current entry; */
+ default ColumnBuilder writeDoubles(double[] values, int length) {
+ throw new UnsupportedOperationException(getClass().getName());
+ }
+
+ /** Write a Binary array to the current entry; */
+ default ColumnBuilder writeBinaries(Binary[] values, int length) {
+ throw new UnsupportedOperationException(getClass().getName());
+ }
+
/** Write a TsPrimitiveType sequences to the current entry; */
default ColumnBuilder writeTsPrimitiveType(TsPrimitiveType value) {
throw new UnsupportedOperationException(getClass().getName());
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumnBuilder.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumnBuilder.java
index 59157916be..7ace64aeca 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumnBuilder.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/column/TimeColumnBuilder.java
@@ -66,6 +66,21 @@ public class TimeColumnBuilder implements ColumnBuilder {
return this;
}
+ @Override
+ public ColumnBuilder writeLongs(long[] valuesToBeWritten, int length) {
+ if (values.length <= positionCount + length) {
+ growCapacity();
+ }
+
+ System.arraycopy(valuesToBeWritten, 0, values, values.length, length);
+
+ positionCount += length;
+ if (columnBuilderStatus != null) {
+ columnBuilderStatus.addBytes(TimeColumn.SIZE_IN_BYTES_PER_POSITION * length);
+ }
+ return this;
+ }
+
/** Write an Object to the current entry, which should be the Long type; */
@Override
public ColumnBuilder writeObject(Object value) {