This is an automated email from the ASF dual-hosted git repository. hui pushed a commit to branch lmh/scanOpBatchProcess1.0 in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 1c97ac21468a564b3aa1d05597dbf46a1b1af0c1 Author: Minghui Liu <[email protected]> AuthorDate: Tue Nov 29 20:12:55 2022 +0800 fix appendTsBlockToBuilder --- .../tsfile/read/common/block/TsBlockUtil.java | 32 ++++++++++++++++++++++ .../iotdb/tsfile/read/reader/IPageReader.java | 16 ++--------- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlockUtil.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlockUtil.java index 34f1cd42dc..cf52289a3e 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlockUtil.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlockUtil.java @@ -20,7 +20,10 @@ package org.apache.iotdb.tsfile.read.common.block; import org.apache.iotdb.tsfile.read.common.TimeRange; +import org.apache.iotdb.tsfile.read.common.block.column.Column; +import org.apache.iotdb.tsfile.read.common.block.column.ColumnBuilder; import org.apache.iotdb.tsfile.read.common.block.column.TimeColumn; +import org.apache.iotdb.tsfile.read.common.block.column.TimeColumnBuilder; public class TsBlockUtil { @@ -63,4 +66,33 @@ public class TsBlockUtil { } return left; } + + public static void appendTsBlockToBuilder(TsBlock tsBlock, TsBlockBuilder builder) { + int size = tsBlock.getPositionCount(); + TimeColumnBuilder timeColumnBuilder = builder.getTimeColumnBuilder(); + TimeColumn timeColumn = tsBlock.getTimeColumn(); + for (int i = 0; i < size; i++) { + timeColumnBuilder.writeLong(timeColumn.getLong(i)); + builder.declarePosition(); + } + for (int columnIndex = 0, columnSize = tsBlock.getValueColumnCount(); + columnIndex < columnSize; + columnIndex++) { + ColumnBuilder columnBuilder = builder.getColumnBuilder(columnIndex); + Column column = tsBlock.getColumn(columnIndex); + if (column.mayHaveNull()) { + for (int i = 0; i < size; i++) { + if (column.isNull(i)) { + columnBuilder.appendNull(); + } else { + columnBuilder.write(column, i); + } + } + } else { + for (int i = 0; i < size; i++) { + columnBuilder.write(column, i); + } + } + } + } } diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/IPageReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/IPageReader.java index a967cae19c..1ba2f30218 100644 --- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/IPageReader.java +++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/IPageReader.java @@ -23,13 +23,13 @@ import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics; import org.apache.iotdb.tsfile.read.common.BatchData; 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.filter.basic.Filter; import java.io.IOException; import java.util.List; +import static org.apache.iotdb.tsfile.read.common.block.TsBlockUtil.appendTsBlockToBuilder; + public interface IPageReader { default BatchData getAllSatisfiedPageData() throws IOException { @@ -46,19 +46,9 @@ public interface IPageReader { if (ascending) { writeDataToBuilder(builder); } else { - TimeColumnBuilder timeColumnBuilder = builder.getTimeColumnBuilder(); - ColumnBuilder[] valueColumnBuilders = builder.getValueColumnBuilders(); - int columnNum = valueColumnBuilders.length; - TsBlock tsBlock = getAllSatisfiedData(); tsBlock.reverse(); - for (int i = 0, size = tsBlock.getPositionCount(); i < size; i++) { - timeColumnBuilder.write(tsBlock.getTimeColumn(), i); - for (int columnIndex = 0; columnIndex < columnNum; columnIndex++) { - valueColumnBuilders[columnIndex].write(tsBlock.getColumn(columnIndex), i); - } - builder.declarePosition(); - } + appendTsBlockToBuilder(tsBlock, builder); } }
