You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2023/03/09 01:48:17 UTC

[iotdb] 01/02: opt page reader

This is an automated email from the ASF dual-hosted git repository.

jackietien pushed a commit to branch SeriesScanOperatorImprove
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 0139a731a3aa6a4b5539e955e5364e5945737dfb
Author: JackieTien97 <ja...@gmail.com>
AuthorDate: Thu Mar 9 09:47:39 2023 +0800

    opt page reader
---
 .../iotdb/tsfile/read/reader/page/PageReader.java      | 18 +++++++++++++-----
 .../read/reader/series/PaginationController.java       |  4 ++++
 2 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java
index 795116ccb5..fa165dad7a 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java
@@ -46,7 +46,7 @@ import static org.apache.iotdb.tsfile.read.reader.series.PaginationController.UN
 
 public class PageReader implements IPageReader {
 
-  private PageHeader pageHeader;
+  private final PageHeader pageHeader;
 
   protected TSDataType dataType;
 
@@ -70,6 +70,8 @@ public class PageReader implements IPageReader {
 
   private int deleteCursor = 0;
 
+  private final TsBlock EMPTY;
+
   public PageReader(
       ByteBuffer pageData,
       TSDataType dataType,
@@ -91,6 +93,7 @@ public class PageReader implements IPageReader {
     this.timeDecoder = timeDecoder;
     this.filter = filter;
     this.pageHeader = pageHeader;
+    EMPTY = new TsBlockBuilder(0, Collections.singletonList(dataType)).build();
     splitDataToTimeStampAndValue(pageData);
   }
 
@@ -177,10 +180,13 @@ public class PageReader implements IPageReader {
 
   @Override
   public TsBlock getAllSatisfiedData() throws IOException {
-    TsBlockBuilder builder = new TsBlockBuilder(Collections.singletonList(dataType));
-    TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
-    ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
     if (pageSatisfy()) {
+      TsBlockBuilder builder =
+          new TsBlockBuilder(
+              (int) (pageHeader.getStatistics().getCount() - paginationController.getCurOffset()),
+              Collections.singletonList(dataType));
+      TimeColumnBuilder timeBuilder = builder.getTimeColumnBuilder();
+      ColumnBuilder valueBuilder = builder.getColumnBuilder(0);
       switch (dataType) {
         case BOOLEAN:
           while (timeDecoder.hasNext(timeBuffer)) {
@@ -311,8 +317,10 @@ public class PageReader implements IPageReader {
         default:
           throw new UnSupportedDataTypeException(String.valueOf(dataType));
       }
+      return builder.build();
+    } else {
+      return EMPTY;
     }
-    return builder.build();
   }
 
   @Override
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java
index a35867645a..ac9c7b296c 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java
@@ -54,6 +54,10 @@ public class PaginationController {
     curOffset -= rowCount;
   }
 
+  public long getCurOffset() {
+    return curOffset;
+  }
+
   public void consumeOffset() {
     curOffset--;
   }