This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 2488001e808 SeriesScanUtil throws exception when using filters that
could not match any time range (#16691)
2488001e808 is described below
commit 2488001e8087ef76821ae1782cd54ff1d8b416f7
Author: shuwenwei <[email protected]>
AuthorDate: Tue Nov 4 10:22:33 2025 +0800
SeriesScanUtil throws exception when using filters that could not match any
time range (#16691)
---
.../test/java/org/apache/iotdb/db/it/IoTDBFilterIT.java | 14 ++++++++++++++
.../it/query/recent/IoTDBTableAggregationIT.java | 11 +++++++++++
.../execution/operator/source/SeriesScanUtil.java | 5 +++++
.../db/storageengine/dataregion/read/QueryDataSource.java | 5 +++++
4 files changed, 35 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/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBTableAggregationIT.java
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBTableAggregationIT.java
index c6e5fc138ce..0143bdb6e3b 100644
---
a/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBTableAggregationIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/relational/it/query/recent/IoTDBTableAggregationIT.java
@@ -5480,4 +5480,15 @@ public class IoTDBTableAggregationIT {
retArray,
DATABASE_NAME);
}
+
+ @Test
+ public void emptyTimeRangeQueryTest() {
+ String[] expectedHeader = new String[] {"_col0"};
+ String[] retArray = new String[] {"0,"};
+ tableResultSetEqualTest(
+ "select count(*) from table1 where time >= 0 and time < -1",
+ expectedHeader,
+ retArray,
+ DATABASE_NAME);
+ }
}
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 078408c8ff9..233d24bf097 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
@@ -219,6 +219,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 10f843c8173..28164934016 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
@@ -100,6 +100,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 =