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

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

commit 22c6429d7b39d94d5a3e424c68443c63e2855cea
Author: JackieTien97 <[email protected]>
AuthorDate: Mon Jul 8 11:36:20 2024 +0800

    Try previously break if limit has been consumed up in TableScanOperator
---
 .../operator/source/relational/TableScanOperator.java         |  4 ++--
 .../plan/planner/plan/parameter/SeriesScanOptions.java        | 11 +++++++++++
 .../plan/relational/planner/node/TableScanNode.java           |  4 ++++
 3 files changed, 17 insertions(+), 2 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableScanOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableScanOperator.java
index deded9e1bd6..7ceefaa9310 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableScanOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/relational/TableScanOperator.java
@@ -245,12 +245,12 @@ public class TableScanOperator extends 
AbstractSeriesScanOperator {
 
   @Override
   public boolean hasNext() throws Exception {
-    return currentDeviceIndex < deviceCount;
+    return !isFinished();
   }
 
   @Override
   public boolean isFinished() throws Exception {
-    return currentDeviceIndex >= deviceCount;
+    return currentDeviceIndex >= deviceCount || 
seriesScanOptions.limitConsumedUp();
   }
 
   @Override
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/SeriesScanOptions.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/SeriesScanOptions.java
index 1bd6892541c..dea62b9cf05 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/SeriesScanOptions.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/parameter/SeriesScanOptions.java
@@ -117,6 +117,17 @@ public class SeriesScanOptions {
     return filter;
   }
 
+  /**
+   * pushLimitToEachDevice==false means that all devices return total limit 
rows.
+   *
+   * @return true only if pushLimitToEachDevice==false and limit in 
paginationController has already
+   *     consumed up
+   */
+  public boolean limitConsumedUp() {
+    return !pushLimitToEachDevice
+        && (paginationController != null && 
!paginationController.hasCurLimit());
+  }
+
   public static class Builder {
 
     private Filter globalTimeFilter = null;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
index d8380bd892f..c4283bb654a 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/planner/node/TableScanNode.java
@@ -81,6 +81,10 @@ public class TableScanNode extends SourceNode {
   // push down offset for result set. The default value is 0
   private long pushDownOffset;
 
+  // pushLimitToEachDevice == true means that each device in TableScanNode 
need to return
+  // `pushDownLimit` row number
+  // pushLimitToEachDevice == false means that all devices in TableScanNode 
totally need to return
+  // `pushDownLimit` row number
   private boolean pushLimitToEachDevice = false;
 
   // The id of DataRegion where the node will run

Reply via email to