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

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

commit 6f7a4b82962c136af70776255be41e8049fcf56e
Author: JackieTien97 <[email protected]>
AuthorDate: Sat Mar 23 09:23:52 2024 +0800

    opt
---
 .../db/queryengine/execution/driver/DataDriver.java  |  2 ++
 .../execution/fragment/FragmentInstanceContext.java  |  1 +
 .../execution/operator/source/SeriesScanUtil.java    | 20 ++++++++++++--------
 .../dataregion/read/QueryDataSource.java             | 10 ++++++++++
 4 files changed, 25 insertions(+), 8 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/DataDriver.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/DataDriver.java
index ea658fcaf2b..6c8c9d1143c 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/DataDriver.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/driver/DataDriver.java
@@ -95,6 +95,8 @@ public class DataDriver extends Driver {
               QueryDataSource queryDataSource =
                   new QueryDataSource(dataSource.getSeqResources(), 
dataSource.getUnseqResources());
 
+              
queryDataSource.setSingleDevice(queryDataSource.isSingleDevice());
+
               queryDataSource.setDataTTL(dataSource.getDataTTL());
 
               sourceOperator.initQueryDataSource(queryDataSource);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
index b752c398818..e3025bd1497 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
@@ -372,6 +372,7 @@ public class FragmentInstanceContext extends QueryContext {
         closedFilePaths = new HashSet<>();
         unClosedFilePaths = new HashSet<>();
         addUsedFilesForQuery(sharedQueryDataSource);
+        sharedQueryDataSource.setSingleDevice(selectedDeviceIdSet.size() == 1);
       }
     } finally {
       setInitQueryDataSourceCost(System.nanoTime() - startTime);
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
index 7f4a98c8ddc..d86b01dd6d0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/SeriesScanUtil.java
@@ -1368,8 +1368,9 @@ public class SeriesScanUtil {
       while (dataSource.hasNextSeqResource(curSeqFileIndex, getAscending())) {
         TsFileResource tsFileResource = 
dataSource.getSeqResourceByIndex(curSeqFileIndex);
         if (tsFileResource != null
-            && tsFileResource.isSatisfied(
-                seriesPath.getIDeviceID(), scanOptions.getGlobalTimeFilter(), 
true, false)) {
+            && (dataSource.isSingleDevice()
+                || tsFileResource.isSatisfied(
+                    seriesPath.getIDeviceID(), 
scanOptions.getGlobalTimeFilter(), true, false))) {
           break;
         }
         curSeqFileIndex--;
@@ -1382,8 +1383,9 @@ public class SeriesScanUtil {
       while (dataSource.hasNextUnseqResource(curUnseqFileIndex)) {
         TsFileResource tsFileResource = 
dataSource.getUnseqResourceByIndex(curUnseqFileIndex);
         if (tsFileResource != null
-            && tsFileResource.isSatisfied(
-                seriesPath.getIDeviceID(), scanOptions.getGlobalTimeFilter(), 
false, false)) {
+            && (dataSource.isSingleDevice()
+                || tsFileResource.isSatisfied(
+                    seriesPath.getIDeviceID(), 
scanOptions.getGlobalTimeFilter(), false, false))) {
           break;
         }
         curUnseqFileIndex++;
@@ -1491,8 +1493,9 @@ public class SeriesScanUtil {
       while (dataSource.hasNextSeqResource(curSeqFileIndex, getAscending())) {
         TsFileResource tsFileResource = 
dataSource.getSeqResourceByIndex(curSeqFileIndex);
         if (tsFileResource != null
-            && tsFileResource.isSatisfied(
-                seriesPath.getIDeviceID(), scanOptions.getGlobalTimeFilter(), 
true, false)) {
+            && (dataSource.isSingleDevice()
+                || tsFileResource.isSatisfied(
+                    seriesPath.getIDeviceID(), 
scanOptions.getGlobalTimeFilter(), true, false))) {
           break;
         }
         curSeqFileIndex++;
@@ -1505,8 +1508,9 @@ public class SeriesScanUtil {
       while (dataSource.hasNextUnseqResource(curUnseqFileIndex)) {
         TsFileResource tsFileResource = 
dataSource.getUnseqResourceByIndex(curUnseqFileIndex);
         if (tsFileResource != null
-            && tsFileResource.isSatisfied(
-                seriesPath.getIDeviceID(), scanOptions.getGlobalTimeFilter(), 
false, false)) {
+            && (dataSource.isSingleDevice()
+                || tsFileResource.isSatisfied(
+                    seriesPath.getIDeviceID(), 
scanOptions.getGlobalTimeFilter(), false, false))) {
           break;
         }
         curUnseqFileIndex++;
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/QueryDataSource.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/QueryDataSource.java
index 41b45bd3641..87dabd465c0 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/QueryDataSource.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/read/QueryDataSource.java
@@ -43,6 +43,8 @@ public class QueryDataSource {
 
   private final List<TsFileResource> unseqResources;
 
+  private boolean isSingleDevice;
+
   /* The traversal order of unseqResources (different for each device) */
   private int[] unSeqFileOrderIndex;
 
@@ -124,4 +126,12 @@ public class QueryDataSource {
     }
     this.unSeqFileOrderIndex = unSeqFileOrderIndexArray;
   }
+
+  public boolean isSingleDevice() {
+    return isSingleDevice;
+  }
+
+  public void setSingleDevice(boolean singleDevice) {
+    isSingleDevice = singleDevice;
+  }
 }

Reply via email to