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/05/28 15:18:40 UTC
[iotdb] 01/03: fix sql parser error in GroupByFill
This is an automated email from the ASF dual-hosted git repository.
hui pushed a commit to branch lmh/mppSqlParserBug
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 6d3e68ec7ed22d2be5237bfbff25d7986df78317
Author: liuminghui233 <54...@qq.com>
AuthorDate: Sat May 28 22:40:13 2022 +0800
fix sql parser error in GroupByFill
---
.../iotdb/db/mpp/plan/parser/ASTVisitor.java | 52 ++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
index f01b7b1a61..652a8dbe3a 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
@@ -754,6 +754,23 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
return queryStatement;
}
+ @Override
+ public Statement visitGroupByFillStatement(IoTDBSqlParser.GroupByFillStatementContext ctx) {
+ // parse group by time clause & fill clause
+ parseGroupByTimeClause(ctx.groupByFillClause());
+
+ // parse order by time
+ if (ctx.orderByTimeClause() != null) {
+ parseOrderByTimeClause(ctx.orderByTimeClause());
+ }
+
+ // parse limit & offset
+ if (ctx.specialLimit() != null) {
+ return visit(ctx.specialLimit());
+ }
+ return queryStatement;
+ }
+
private void parseGroupByTimeClause(IoTDBSqlParser.GroupByTimeClauseContext ctx) {
GroupByTimeComponent groupByTimeComponent = new GroupByTimeComponent();
@@ -800,6 +817,41 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
queryStatement.setGroupByTimeComponent(groupByTimeComponent);
}
+ private void parseGroupByTimeClause(IoTDBSqlParser.GroupByFillClauseContext ctx) {
+ GroupByTimeComponent groupByTimeComponent = new GroupByTimeComponent();
+
+ // parse time range
+ parseTimeRange(ctx.timeRange(), groupByTimeComponent);
+ groupByTimeComponent.setLeftCRightO(ctx.timeRange().LS_BRACKET() != null);
+
+ // parse time interval
+ groupByTimeComponent.setInterval(
+ parseTimeIntervalOrSlidingStep(
+ ctx.DURATION_LITERAL(0).getText(), true, groupByTimeComponent));
+ if (groupByTimeComponent.getInterval() <= 0) {
+ throw new SemanticException(
+ "The second parameter time interval should be a positive integer.");
+ }
+
+ // parse sliding step
+ if (ctx.DURATION_LITERAL().size() == 2) {
+ groupByTimeComponent.setSlidingStep(
+ parseTimeIntervalOrSlidingStep(
+ ctx.DURATION_LITERAL(1).getText(), false, groupByTimeComponent));
+ } else {
+ groupByTimeComponent.setSlidingStep(groupByTimeComponent.getInterval());
+ groupByTimeComponent.setSlidingStepByMonth(groupByTimeComponent.isIntervalByMonth());
+ }
+
+ // parse fill clause
+ if (ctx.fillClause() != null) {
+ parseFillClause(ctx.fillClause());
+ }
+
+ // set groupByTimeComponent
+ queryStatement.setGroupByTimeComponent(groupByTimeComponent);
+ }
+
/** parse time range (startTime and endTime) in group by query. */
private void parseTimeRange(
IoTDBSqlParser.TimeRangeContext timeRange, GroupByTimeComponent groupByClauseComponent) {