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());