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);
     }
   }