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 <[email protected]> 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) {
