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 <[email protected]> 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;
