You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by qi...@apache.org on 2020/03/11 09:45:43 UTC
[incubator-iotdb] branch master updated: Fix a NPE when concat
filter with multiple devices (#900)
This is an automated email from the ASF dual-hosted git repository.
qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 6ba8aa8 Fix a NPE when concat filter with multiple devices (#900)
6ba8aa8 is described below
commit 6ba8aa8a0ff46b90f674f2c99d4a9085fad4e022
Author: Jiang Tian <jt...@163.com>
AuthorDate: Wed Mar 11 17:45:36 2020 +0800
Fix a NPE when concat filter with multiple devices (#900)
* fix ConcatPathOptimizer
---
.../qp/strategy/optimizer/ConcatPathOptimizer.java | 2 +-
.../iotdb/db/qp/plan/ConcatOptimizerTest.java | 22 ++++++++++++++++++++++
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java b/server/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java
index 32a9a50..0cf280f 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/optimizer/ConcatPathOptimizer.java
@@ -119,7 +119,7 @@ public class ConcatPathOptimizer implements ILogicalOptimizer {
if(!isAlignByDevice){
sfwOperator.setFilterOperator(concatFilter(prefixPaths, filter, filterPaths));
}
- filter.setPathSet(filterPaths);
+ sfwOperator.getFilterOperator().setPathSet(filterPaths);
// GROUP_BY_DEVICE leaves the concatFilter to PhysicalGenerator to optimize filter without prefix first
return sfwOperator;
diff --git a/server/src/test/java/org/apache/iotdb/db/qp/plan/ConcatOptimizerTest.java b/server/src/test/java/org/apache/iotdb/db/qp/plan/ConcatOptimizerTest.java
index 015a094..ffa3526 100644
--- a/server/src/test/java/org/apache/iotdb/db/qp/plan/ConcatOptimizerTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/qp/plan/ConcatOptimizerTest.java
@@ -34,6 +34,8 @@ import org.apache.iotdb.tsfile.file.metadata.enums.CompressionType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.file.metadata.enums.TSEncoding;
import org.apache.iotdb.tsfile.read.common.Path;
+import org.apache.iotdb.tsfile.read.expression.IExpression;
+import org.apache.iotdb.tsfile.read.expression.impl.BinaryExpression;
import org.apache.iotdb.tsfile.read.expression.impl.SingleSeriesExpression;
import org.apache.iotdb.tsfile.read.filter.ValueFilter;
import org.junit.After;
@@ -97,4 +99,24 @@ public class ConcatOptimizerTest {
ValueFilter.lt(10));
assertEquals(seriesExpression.toString(), ((RawDataQueryPlan) plan).getExpression().toString());
}
+
+ @Test
+ public void testConcatMultipleDeviceInFilter() throws QueryProcessException {
+ String inputSQL = "select s1 from root.laptop.* where s1 < 10";
+ PhysicalPlan plan = processor.parseSQLToPhysicalPlan(inputSQL);
+ IExpression expression = BinaryExpression.and(
+ BinaryExpression.and(
+ new SingleSeriesExpression(
+ new Path("root.laptop.d1.s1"),
+ ValueFilter.lt(10)),
+ new SingleSeriesExpression(
+ new Path("root.laptop.d2.s1"),
+ ValueFilter.lt(10))
+ ),
+ new SingleSeriesExpression(
+ new Path("root.laptop.d3.s1"),
+ ValueFilter.lt(10))
+ );
+ assertEquals(expression.toString(), ((RawDataQueryPlan) plan).getExpression().toString());
+ }
}
\ No newline at end of file