You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hu...@apache.org on 2022/11/29 12:20:15 UTC
[iotdb] 03/03: fix appendTsBlockToBuilder
This is an automated email from the ASF dual-hosted git repository.
hui pushed a commit to branch lmh/scanOpBatchProcess
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 3b92929358dbc9d6f669162b97856e6783d3665a
Author: Minghui Liu <li...@foxmail.com>
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);
}
}