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