You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by lt...@apache.org on 2020/02/03 13:43:53 UTC

[incubator-iotdb] 01/01: merge master

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

lta pushed a commit to branch add_in_operation
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git

commit dd4840b4028f060b02afcb892309798a65ff1b31
Merge: 6b6bfe4 615b856
Author: lta <li...@163.com>
AuthorDate: Mon Feb 3 21:43:07 2020 +0800

    merge master

 .../org/apache/iotdb/db/qp/strategy/SqlBase.g4     | 10 ++-
 .../iotdb/db/qp/strategy/LogicalGenerator.java     |  3 +
 .../org/apache/iotdb/db/qp/QueryProcessorTest.java |  4 ++
 .../iotdb/db/qp/plan/LogicalPlanSmallTest.java     | 12 ++++
 .../apache/iotdb/db/qp/plan/PhysicalPlanTest.java  | 74 +++++++++++-----------
 5 files changed, 63 insertions(+), 40 deletions(-)

diff --cc server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4
index ab0e68e,24fa59a..5ed3853
--- a/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4
+++ b/server/src/main/antlr4/org/apache/iotdb/db/qp/strategy/SqlBase.g4
@@@ -136,8 -136,7 +136,8 @@@ andExpressio
      ;
  
  predicate
-     : (suffixPath | prefixPath) comparisonOperator constant
-     | (suffixPath | prefixPath) inClause
+     : (TIME | TIMESTAMP | suffixPath | prefixPath) comparisonOperator constant
++    | (TIME | TIMESTAMP | suffixPath | prefixPath) inClause
      | OPERATOR_NOT? LR_BRACKET orExpression RR_BRACKET
      ;
  
diff --cc server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
index 349d2ed,6c93df5..492ec3a
--- a/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/strategy/LogicalGenerator.java
@@@ -1176,6 -1167,7 +1176,9 @@@ public class LogicalGenerator extends S
        return parseOrExpression(ctx.orExpression());
      } else {
        Path path = null;
 -      BasicFunctionOperator basic;
++      if(ctx.TIME() != null || ctx.TIMESTAMP() != null) {
++        path = new Path(SQLConstant.RESERVED_TIME);
++      }
        if (ctx.prefixPath() != null) {
          path = parsePrefixPath(ctx.prefixPath());
        }
diff --cc server/src/test/java/org/apache/iotdb/db/qp/plan/PhysicalPlanTest.java
index f6f3ce2,7eb34b5..4a063fd
--- a/server/src/test/java/org/apache/iotdb/db/qp/plan/PhysicalPlanTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/qp/plan/PhysicalPlanTest.java
@@@ -515,53 -510,8 +515,53 @@@ public class PhysicalPlanTest 
    }
  
    @Test
 +  public void testInOperator() throws QueryProcessException {
 +    String sqlStr = "SELECT s1 FROM root.vehicle.d1 WHERE s1 in (25, 30, 40)";
 +    PhysicalPlan plan = processor.parseSQLToPhysicalPlan(sqlStr);
 +    IExpression queryFilter = ((QueryPlan) plan).getExpression();
 +    List<String> valuesList = new ArrayList<>();
 +    valuesList.add("25");
 +    valuesList.add("30");
 +    valuesList.add("40");
 +    Collections.sort(valuesList);
 +    Set<Float> values = new HashSet<>();
 +    values.add(25.0f);
 +    values.add(30.0f);
 +    values.add(40.0f);
 +    IExpression expect = new SingleSeriesExpression(new Path("root.vehicle.d1.s1"),
 +        ValueFilter.in(values, false, valuesList.toString()));
 +    assertEquals(expect.toString(), queryFilter.toString());
 +  }
 +
 +  @Test
 +  public void testNotInOperator() throws QueryProcessException {
 +    String sqlStr = "SELECT s1 FROM root.vehicle.d1 WHERE s1 not in (25, 30, 40)";
 +    PhysicalPlan plan = processor.parseSQLToPhysicalPlan(sqlStr);
 +    IExpression queryFilter = ((QueryPlan) plan).getExpression();
 +    List<String> valuesList = new ArrayList<>();
 +    valuesList.add("25");
 +    valuesList.add("30");
 +    valuesList.add("40");
 +    Collections.sort(valuesList);
 +    Set<Float> values = new HashSet<>();
 +    values.add(25.0f);
 +    values.add(30.0f);
 +    values.add(40.0f);
 +    IExpression expect = new SingleSeriesExpression(new Path("root.vehicle.d1.s1"),
 +        ValueFilter.in(values, true, valuesList.toString()));
 +    assertEquals(expect.toString(), queryFilter.toString());
 +
 +    sqlStr = "SELECT s1 FROM root.vehicle.d1 WHERE not(s1 not in (25, 30, 40))";
 +    plan = processor.parseSQLToPhysicalPlan(sqlStr);
 +    queryFilter = ((QueryPlan) plan).getExpression();
 +    expect = new SingleSeriesExpression(new Path("root.vehicle.d1.s1"),
 +        ValueFilter.in(values, false, valuesList.toString()));
 +    assertEquals(expect.toString(), queryFilter.toString());
 +  }
 +
 +  @Test
    public void testGrantWatermarkEmbedding()
-       throws QueryProcessException, MetadataException {
+       throws QueryProcessException {
      String sqlStr = "GRANT WATERMARK_EMBEDDING to a,b";
      PhysicalPlan plan = processor.parseSQLToPhysicalPlan(sqlStr);
      DataAuthPlan dataAuthPlan = (DataAuthPlan) plan;