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;