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

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


The following commit(s) were added to refs/heads/dev/1.3 by this push:
     new 4cdb8e7e7a6 [To dev/1.3] SeriesScanUtil throws exception when using 
filters that could not match any time range (#16692)
4cdb8e7e7a6 is described below

commit 4cdb8e7e7a64a8a9fe041d1ba0e499007fabe0cc
Author: shuwenwei <[email protected]>
AuthorDate: Tue Nov 4 10:22:56 2025 +0800

    [To dev/1.3] SeriesScanUtil throws exception when using filters that could 
not match any time range (#16692)
---
 .../test/java/org/apache/iotdb/db/it/IoTDBFilterIT.java    | 14 ++++++++++++++
 .../execution/operator/source/SeriesScanUtil.java          |  5 +++++
 .../db/storageengine/dataregion/read/QueryDataSource.java  |  5 +++++
 3 files changed, 24 insertions(+)

diff --git 
a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBFilterIT.java 
b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBFilterIT.java
index 306346e2bdc..b8dd88ea9d7 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBFilterIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBFilterIT.java
@@ -24,6 +24,7 @@ import org.apache.iotdb.it.framework.IoTDBTestRunner;
 import org.apache.iotdb.itbase.category.ClusterIT;
 
 import org.junit.AfterClass;
+import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
 import org.junit.experimental.categories.Category;
@@ -238,4 +239,17 @@ public class IoTDBFilterIT {
       fail(throwable.getMessage());
     }
   }
+
+  @Test
+  public void testFilterWithEmptySatisfiedTimeRanges() {
+    try (Connection connection = EnvFactory.getEnv().getConnection();
+        Statement statement = connection.createStatement();
+        ResultSet resultSet =
+            statement.executeQuery("select count(*) from root.** where time >= 
0 and time < 0")) {
+      Assert.assertTrue(resultSet.next());
+      Assert.assertEquals(0, resultSet.getInt(1));
+    } catch (SQLException throwable) {
+      fail(throwable.getMessage());
+    }
+  }
 }
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 2df717d9738..a136ec4e8c5 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
@@ -198,6 +198,11 @@ public class SeriesScanUtil implements Accountable {
     orderUtils.setCurSeqFileIndex(dataSource);
     curUnseqFileIndex = 0;
 
+    if (dataSource.isEmpty()) {
+      // no satisfied resources
+      return;
+    }
+
     if (satisfiedTimeRange == null) {
       long startTime = Long.MAX_VALUE;
       long endTime = Long.MIN_VALUE;
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 0bc85d4cbad..1324194b86a 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
@@ -90,6 +90,11 @@ public class QueryDataSource implements IQueryDataSource {
     return unseqResources;
   }
 
+  public boolean isEmpty() {
+    return (seqResources == null || seqResources.isEmpty())
+        && (unseqResources == null || unseqResources.isEmpty());
+  }
+
   @Override
   public IQueryDataSource clone() {
     QueryDataSource queryDataSource = new QueryDataSource(getSeqResources(), 
getUnseqResources());

Reply via email to