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

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

commit 62ad263486d4891d9eb09c24278a3ad264bf2143
Author: JackieTien97 <[email protected]>
AuthorDate: Mon Jan 5 09:58:52 2026 +0800

    Improve DeviceViewIntoOperator's return style to pipeline
---
 .../execution/operator/process/AbstractIntoOperator.java       |  6 ++++--
 .../execution/operator/process/DeviceViewIntoOperator.java     | 10 ++++++++++
 .../queryengine/execution/operator/process/IntoOperator.java   |  5 +++++
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/AbstractIntoOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/AbstractIntoOperator.java
index 99317ba7b09..507e6946bcf 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/AbstractIntoOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/AbstractIntoOperator.java
@@ -152,7 +152,7 @@ public abstract class AbstractIntoOperator implements 
ProcessOperator {
     checkLastWriteOperation();
 
     if (!processTsBlock(cachedTsBlock)) {
-      return null;
+      return tryToReturnPartialResult();
     }
     cachedTsBlock = null;
     if (child.hasNextWithTimer()) {
@@ -160,7 +160,7 @@ public abstract class AbstractIntoOperator implements 
ProcessOperator {
       processTsBlock(inputTsBlock);
 
       // call child.next only once
-      return null;
+      return tryToReturnPartialResult();
     } else {
       return tryToReturnResultTsBlock();
     }
@@ -218,6 +218,8 @@ public abstract class AbstractIntoOperator implements 
ProcessOperator {
 
   protected abstract TsBlock tryToReturnResultTsBlock();
 
+  protected abstract TsBlock tryToReturnPartialResult();
+
   protected static List<InsertTabletStatementGenerator> 
constructInsertTabletStatementGenerators(
       Map<PartialPath, Map<String, InputLocation>> 
targetPathToSourceInputLocationMap,
       Map<PartialPath, Map<String, TSDataType>> targetPathToDataTypeMap,
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/DeviceViewIntoOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/DeviceViewIntoOperator.java
index e584f79d1b6..539a65bfede 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/DeviceViewIntoOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/DeviceViewIntoOperator.java
@@ -144,6 +144,16 @@ public class DeviceViewIntoOperator extends 
AbstractIntoOperator {
     return resultTsBlockBuilder.build();
   }
 
+  @Override
+  protected TsBlock tryToReturnPartialResult() {
+    if (resultTsBlockBuilder.isFull()) {
+      TsBlock res = resultTsBlockBuilder.build();
+      resultTsBlockBuilder.reset();
+      return res;
+    }
+    return null;
+  }
+
   private List<AbstractIntoOperator.InsertTabletStatementGenerator>
       constructInsertTabletStatementGeneratorsByDevice(String currentDevice) {
     Map<PartialPath, Map<String, InputLocation>> 
targetPathToSourceInputLocationMap =
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/IntoOperator.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/IntoOperator.java
index 5e516eeacfa..a30cab76ae0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/IntoOperator.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/process/IntoOperator.java
@@ -102,6 +102,11 @@ public class IntoOperator extends AbstractIntoOperator {
     return constructResultTsBlock();
   }
 
+  @Override
+  protected TsBlock tryToReturnPartialResult() {
+    return null;
+  }
+
   private TsBlock constructResultTsBlock() {
     List<TSDataType> outputDataTypes =
         ColumnHeaderConstant.selectIntoColumnHeaders.stream()

Reply via email to