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

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


The following commit(s) were added to refs/heads/develop by this push:
     new 250e9367 add a new util method: applyFilterAndLimitOffsetToTsBlock
250e9367 is described below

commit 250e9367efc08c53d48eaf8ae6952e90c59b81e5
Author: liuminghui233 <[email protected]>
AuthorDate: Fri Feb 23 10:25:09 2024 +0800

    add a new util method: applyFilterAndLimitOffsetToTsBlock
---
 .../tsfile/read/common/block/TsBlockUtil.java      | 55 ++++++++++++++++++++++
 .../tsfile/read/reader/page/AlignedPageReader.java | 54 +++------------------
 2 files changed, 61 insertions(+), 48 deletions(-)

diff --git 
a/tsfile/src/main/java/org/apache/tsfile/read/common/block/TsBlockUtil.java 
b/tsfile/src/main/java/org/apache/tsfile/read/common/block/TsBlockUtil.java
index 0f05afd5..f0dd1551 100644
--- a/tsfile/src/main/java/org/apache/tsfile/read/common/block/TsBlockUtil.java
+++ b/tsfile/src/main/java/org/apache/tsfile/read/common/block/TsBlockUtil.java
@@ -21,6 +21,8 @@ package org.apache.tsfile.read.common.block;
 
 import org.apache.tsfile.read.common.TimeRange;
 import org.apache.tsfile.read.common.block.column.TimeColumn;
+import org.apache.tsfile.read.filter.basic.Filter;
+import org.apache.tsfile.read.reader.series.PaginationController;
 
 public class TsBlockUtil {
 
@@ -65,4 +67,57 @@ public class TsBlockUtil {
     }
     return left;
   }
+
+  public static TsBlock applyFilterAndLimitOffsetToTsBlock(
+      TsBlock unFilteredBlock,
+      TsBlockBuilder builder,
+      Filter pushDownFilter,
+      PaginationController paginationController) {
+    boolean[] keepCurrentRow = pushDownFilter.satisfyTsBlock(unFilteredBlock);
+
+    // construct time column
+    int readEndIndex =
+        buildTimeColumnWithPagination(
+            unFilteredBlock, builder, keepCurrentRow, paginationController);
+
+    // construct value columns
+    for (int i = 0; i < builder.getValueColumnBuilders().length; i++) {
+      for (int rowIndex = 0; rowIndex < readEndIndex; rowIndex++) {
+        if (keepCurrentRow[rowIndex]) {
+          if (unFilteredBlock.getValueColumns()[i].isNull(rowIndex)) {
+            builder.getColumnBuilder(i).appendNull();
+          } else {
+            builder
+                .getColumnBuilder(i)
+                
.writeObject(unFilteredBlock.getValueColumns()[i].getObject(rowIndex));
+          }
+        }
+      }
+    }
+    return builder.build();
+  }
+
+  private static int buildTimeColumnWithPagination(
+      TsBlock unFilteredBlock,
+      TsBlockBuilder builder,
+      boolean[] keepCurrentRow,
+      PaginationController paginationController) {
+    int readEndIndex = unFilteredBlock.getPositionCount();
+    for (int rowIndex = 0; rowIndex < readEndIndex; rowIndex++) {
+      if (keepCurrentRow[rowIndex]) {
+        if (paginationController.hasCurOffset()) {
+          paginationController.consumeOffset();
+          keepCurrentRow[rowIndex] = false;
+        } else if (paginationController.hasCurLimit()) {
+          
builder.getTimeColumnBuilder().writeLong(unFilteredBlock.getTimeByIndex(rowIndex));
+          builder.declarePosition();
+          paginationController.consumeLimit();
+        } else {
+          readEndIndex = rowIndex;
+          break;
+        }
+      }
+    }
+    return readEndIndex;
+  }
 }
diff --git 
a/tsfile/src/main/java/org/apache/tsfile/read/reader/page/AlignedPageReader.java
 
b/tsfile/src/main/java/org/apache/tsfile/read/reader/page/AlignedPageReader.java
index b60a0b8d..383f4195 100644
--- 
a/tsfile/src/main/java/org/apache/tsfile/read/reader/page/AlignedPageReader.java
+++ 
b/tsfile/src/main/java/org/apache/tsfile/read/reader/page/AlignedPageReader.java
@@ -28,6 +28,7 @@ import org.apache.tsfile.read.common.BatchDataFactory;
 import org.apache.tsfile.read.common.TimeRange;
 import org.apache.tsfile.read.common.block.TsBlock;
 import org.apache.tsfile.read.common.block.TsBlockBuilder;
+import org.apache.tsfile.read.common.block.TsBlockUtil;
 import org.apache.tsfile.read.filter.basic.Filter;
 import org.apache.tsfile.read.reader.IPageReader;
 import org.apache.tsfile.read.reader.IPointReader;
@@ -205,11 +206,14 @@ public class AlignedPageReader implements IPageReader {
     // construct value columns
     buildValueColumns(readEndIndex, keepCurrentRow, isDeleted);
 
+    TsBlock unFilteredBlock = builder.build();
     if (pushDownFilterAllSatisfy) {
       // OFFSET & LIMIT has been consumed in buildTimeColumn
-      return builder.build();
+      return unFilteredBlock;
     }
-    return applyPushDownFilter();
+    builder.reset();
+    return TsBlockUtil.applyFilterAndLimitOffsetToTsBlock(
+        unFilteredBlock, builder, pushDownFilter, paginationController);
   }
 
   private void buildResultWithoutAnyFilterAndDelete(long[] timeBatch) {
@@ -279,26 +283,6 @@ public class AlignedPageReader implements IPageReader {
     return readEndIndex;
   }
 
-  private int buildTimeColumnWithPagination(TsBlock unFilteredBlock, boolean[] 
keepCurrentRow) {
-    int readEndIndex = unFilteredBlock.getPositionCount();
-    for (int rowIndex = 0; rowIndex < readEndIndex; rowIndex++) {
-      if (keepCurrentRow[rowIndex]) {
-        if (paginationController.hasCurOffset()) {
-          paginationController.consumeOffset();
-          keepCurrentRow[rowIndex] = false;
-        } else if (paginationController.hasCurLimit()) {
-          
builder.getTimeColumnBuilder().writeLong(unFilteredBlock.getTimeByIndex(rowIndex));
-          builder.declarePosition();
-          paginationController.consumeLimit();
-        } else {
-          readEndIndex = rowIndex;
-          break;
-        }
-      }
-    }
-    return readEndIndex;
-  }
-
   private int buildTimeColumnWithoutPagination(long[] timeBatch, boolean[] 
keepCurrentRow) {
     int readEndIndex = 0;
     for (int i = 0; i < timeBatch.length; i++) {
@@ -386,32 +370,6 @@ public class AlignedPageReader implements IPageReader {
     }
   }
 
-  private TsBlock applyPushDownFilter() {
-    TsBlock unFilteredBlock = builder.build();
-    builder.reset();
-
-    boolean[] keepCurrentRow = pushDownFilter.satisfyTsBlock(unFilteredBlock);
-
-    // construct time column
-    int readEndIndex = buildTimeColumnWithPagination(unFilteredBlock, 
keepCurrentRow);
-
-    // construct value columns
-    for (int i = 0; i < valueCount; i++) {
-      for (int rowIndex = 0; rowIndex < readEndIndex; rowIndex++) {
-        if (keepCurrentRow[rowIndex]) {
-          if (unFilteredBlock.getValueColumns()[i].isNull(rowIndex)) {
-            builder.getColumnBuilder(i).appendNull();
-          } else {
-            builder
-                .getColumnBuilder(i)
-                
.writeObject(unFilteredBlock.getValueColumns()[i].getObject(rowIndex));
-          }
-        }
-      }
-    }
-    return builder.build();
-  }
-
   public void setDeleteIntervalList(List<List<TimeRange>> list) {
     for (int i = 0; i < valueCount; i++) {
       if (valuePageReaderList.get(i) != null) {

Reply via email to