You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hu...@apache.org on 2022/10/25 01:49:42 UTC

[iotdb] 02/02: compatible with old version

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

hui pushed a commit to branch lmh/mppCQ
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 6a94ae4bbacd6957b0776a00208299615258455d
Author: Minghui Liu <li...@foxmail.com>
AuthorDate: Mon Oct 24 14:51:21 2022 +0800

    compatible with old version
---
 .../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4   |  8 ++--
 .../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java    | 56 +++++++++++++---------
 2 files changed, 38 insertions(+), 26 deletions(-)

diff --git a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
index 07cba3a7c6..5710bbbb57 100644
--- a/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
+++ b/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4
@@ -471,15 +471,15 @@ sortKey
     ;
 
 groupByTimeClause
-    : GROUP BY LR_BRACKET timeRange COMMA DURATION_LITERAL (COMMA DURATION_LITERAL)? fillClause? RR_BRACKET
-    | GROUP BY LR_BRACKET timeRange COMMA DURATION_LITERAL (COMMA DURATION_LITERAL)? RR_BRACKET
+    : GROUP BY TIME? LR_BRACKET (timeRange COMMA)? interval=DURATION_LITERAL (COMMA step=DURATION_LITERAL)? fillClause? RR_BRACKET
+    | GROUP BY TIME? LR_BRACKET (timeRange COMMA)? interval=DURATION_LITERAL (COMMA step=DURATION_LITERAL)? RR_BRACKET
     COMMA LEVEL operator_eq INTEGER_LITERAL (COMMA INTEGER_LITERAL)* fillClause?
-    | GROUP BY LR_BRACKET timeRange COMMA DURATION_LITERAL (COMMA DURATION_LITERAL)? RR_BRACKET
+    | GROUP BY TIME? LR_BRACKET (timeRange COMMA)? interval=DURATION_LITERAL (COMMA step=DURATION_LITERAL)? RR_BRACKET
     COMMA TAGS LR_BRACKET identifier (COMMA identifier)* RR_BRACKET
     ;
 
 groupByFillClause
-    : GROUP BY LR_BRACKET timeRange COMMA DURATION_LITERAL (COMMA DURATION_LITERAL)? RR_BRACKET
+    : GROUP BY TIME? LR_BRACKET (timeRange COMMA)? interval=DURATION_LITERAL (COMMA step=DURATION_LITERAL)? RR_BRACKET
     fillClause
     ;
 
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
index d6fa5100e1..7c3aafec55 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
@@ -151,7 +151,6 @@ import org.apache.iotdb.db.qp.logical.sys.UnSetTTLOperator;
 import org.apache.iotdb.db.qp.logical.sys.UnloadFileOperator;
 import org.apache.iotdb.db.qp.logical.sys.UnsetTemplateOperator;
 import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.ConstantContext;
-import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.CqGroupByTimeClauseContext;
 import org.apache.iotdb.db.qp.sql.IoTDBSqlParser.ExpressionContext;
 import org.apache.iotdb.db.qp.utils.DateTimeUtils;
 import org.apache.iotdb.db.query.executor.fill.IFill;
@@ -671,27 +670,30 @@ public class IoTDBSqlVisitor extends IoTDBSqlParserBaseVisitor<Operator> {
   public Operator visitCreateContinuousQuery(IoTDBSqlParser.CreateContinuousQueryContext ctx) {
     CreateContinuousQueryOperator createContinuousQueryOperator =
         new CreateContinuousQueryOperator(SQLConstant.TOK_CONTINUOUS_QUERY_CREATE);
-
-    createContinuousQueryOperator.setQuerySql(ctx.getText());
-
-    createContinuousQueryOperator.setContinuousQueryName(
-        parseIdentifier(ctx.continuousQueryName.getText()));
+    createContinuousQueryOperator.setContinuousQueryName(parseIdentifier(ctx.cqId.getText()));
 
     if (ctx.resampleClause() != null) {
       parseResampleClause(ctx.resampleClause(), createContinuousQueryOperator);
     }
 
-    parseCqSelectIntoClause(ctx.cqSelectIntoClause(), createContinuousQueryOperator);
+    if (ctx.timeoutPolicyClause() != null) {
+      throw new SQLParserException("CQ: CQ does not support to set timeout policy before v0.14.");
+    }
+
+    parseCqSelectIntoClause(ctx.selectStatement(), createContinuousQueryOperator);
 
     StringBuilder sb = new StringBuilder();
     sb.append("select ");
-    sb.append(ctx.cqSelectIntoClause().selectClause().getText().substring(6));
+    sb.append(ctx.selectStatement().selectClause().getText().substring(6));
     sb.append(" from ");
-    sb.append(ctx.cqSelectIntoClause().fromClause().prefixPath(0).getText());
+    sb.append(ctx.selectStatement().fromClause().prefixPath(0).getText());
 
     sb.append(" group by ([now() - ");
     String groupByInterval =
-        ctx.cqSelectIntoClause().cqGroupByTimeClause().DURATION_LITERAL().getText();
+        ((IoTDBSqlParser.GroupByTimeStatementContext) ctx.selectStatement().specialClause())
+            .groupByTimeClause()
+            .interval
+            .getText();
     if (createContinuousQueryOperator.getForInterval() == 0) {
       sb.append(groupByInterval);
     } else {
@@ -731,7 +733,7 @@ public class IoTDBSqlVisitor extends IoTDBSqlParserBaseVisitor<Operator> {
   }
 
   public void parseCqSelectIntoClause(
-      IoTDBSqlParser.CqSelectIntoClauseContext ctx,
+      IoTDBSqlParser.SelectStatementContext ctx,
       CreateContinuousQueryOperator createContinuousQueryOperator) {
     queryOp = new GroupByQueryOperator();
 
@@ -745,7 +747,7 @@ public class IoTDBSqlVisitor extends IoTDBSqlParserBaseVisitor<Operator> {
       throw new SQLParserException("CQ: CQ currently does not support multiple series.");
     }
 
-    parseCqGroupByTimeClause(ctx.cqGroupByTimeClause(), createContinuousQueryOperator);
+    parseCqGroupByTimeClause(ctx.specialClause(), createContinuousQueryOperator);
 
     if (queryOp.isGroupByLevel()) {
       int[] groupByQueryLevels = queryOp.getSpecialClauseComponent().getLevels();
@@ -755,29 +757,36 @@ public class IoTDBSqlVisitor extends IoTDBSqlParserBaseVisitor<Operator> {
       }
     }
 
-    createContinuousQueryOperator.setTargetPath(parseIntoPath(ctx.intoPath()));
+    createContinuousQueryOperator.setTargetPath(parseIntoPath(ctx.intoClause().intoPath(0)));
     createContinuousQueryOperator.setQueryOperator(queryOp);
   }
 
   public void parseCqGroupByTimeClause(
-      CqGroupByTimeClauseContext ctx, CreateContinuousQueryOperator createContinuousQueryOperator) {
+      IoTDBSqlParser.SpecialClauseContext ctx,
+      CreateContinuousQueryOperator createContinuousQueryOperator) {
+    if (!(ctx instanceof IoTDBSqlParser.GroupByTimeStatementContext)) {
+      throw new SQLParserException("CQ: Query body in CQ must be group by time query.");
+    }
+    IoTDBSqlParser.GroupByTimeClauseContext groupByCtx =
+        ((IoTDBSqlParser.GroupByTimeStatementContext) ctx).groupByTimeClause();
+
     GroupByClauseComponent groupByClauseComponent = new GroupByClauseComponent();
 
     long groupByInterval =
-        parseTimeUnitOrSlidingStep(ctx.DURATION_LITERAL().getText(), true, groupByClauseComponent);
+        parseTimeUnitOrSlidingStep(groupByCtx.interval.getText(), true, groupByClauseComponent);
     groupByClauseComponent.setUnit(groupByInterval);
     createContinuousQueryOperator.setGroupByTimeInterval(groupByInterval);
-    createContinuousQueryOperator.setGroupByTimeIntervalString(ctx.DURATION_LITERAL().getText());
+    createContinuousQueryOperator.setGroupByTimeIntervalString(groupByCtx.interval.getText());
 
     groupByClauseComponent.setSlidingStep(groupByClauseComponent.getUnit());
     groupByClauseComponent.setSlidingStepByMonth(groupByClauseComponent.isIntervalByMonth());
 
     groupByClauseComponent.setLeftCRightO(true);
 
-    if (ctx.LEVEL() != null && ctx.INTEGER_LITERAL() != null) {
-      int[] levels = new int[ctx.INTEGER_LITERAL().size()];
-      for (int i = 0; i < ctx.INTEGER_LITERAL().size(); i++) {
-        levels[i] = Integer.parseInt(ctx.INTEGER_LITERAL().get(i).getText());
+    if (groupByCtx.LEVEL() != null && groupByCtx.INTEGER_LITERAL() != null) {
+      int[] levels = new int[groupByCtx.INTEGER_LITERAL().size()];
+      for (int i = 0; i < groupByCtx.INTEGER_LITERAL().size(); i++) {
+        levels[i] = Integer.parseInt(groupByCtx.INTEGER_LITERAL().get(i).getText());
       }
       groupByClauseComponent.setLevels(levels);
     }
@@ -787,6 +796,10 @@ public class IoTDBSqlVisitor extends IoTDBSqlParserBaseVisitor<Operator> {
 
   public void parseResampleClause(
       IoTDBSqlParser.ResampleClauseContext ctx, CreateContinuousQueryOperator operator) {
+    if (ctx.RANGE() != null) {
+      throw new SQLParserException("CQ: CQ does not support to set RANGE before v0.14.");
+    }
+
     if (ctx.DURATION_LITERAL().size() == 1) {
       if (ctx.EVERY() != null) {
         operator.setEveryInterval(
@@ -936,8 +949,7 @@ public class IoTDBSqlVisitor extends IoTDBSqlParserBaseVisitor<Operator> {
   public Operator visitDropContinuousQuery(IoTDBSqlParser.DropContinuousQueryContext ctx) {
     DropContinuousQueryOperator dropContinuousQueryOperator =
         new DropContinuousQueryOperator(SQLConstant.TOK_CONTINUOUS_QUERY_DROP);
-    dropContinuousQueryOperator.setContinuousQueryName(
-        parseIdentifier(ctx.continuousQueryName.getText()));
+    dropContinuousQueryOperator.setContinuousQueryName(parseIdentifier(ctx.cqId.getText()));
     return dropContinuousQueryOperator;
   }