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;
}