From d104bf89f7870609d3562478f4e049086357d743 Mon Sep 17 00:00:00 2001 From: Yaobin Chen Date: Thu, 28 May 2026 16:03:44 +0800 Subject: [PATCH] modify the antlr syntax to adapt the calc-point project --- .../iotdb/db/qp/sql/IdentifierParser.g4 | 2 ++ .../apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 | 27 +++++++++++++++++++ .../org/apache/iotdb/db/qp/sql/SqlLexer.g4 | 12 +++++++++ .../queryengine/plan/parser/ASTVisitor.java | 12 ++++++--- 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4 b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4 index fa13e29475190..10b2a4cf97f11 100644 --- a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4 +++ b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IdentifierParser.g4 @@ -180,6 +180,8 @@ keyWords | PIPESINKTYPE | PIPEPLUGIN | PIPEPLUGINS + | POINT + | POINTS | POLICY | PREVIOUS | PREVIOUSUNTILLAST diff --git a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 index 31d1007867a50..390292ea1f7c3 100644 --- a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 +++ b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 @@ -76,6 +76,8 @@ ddlStatement | createLogicalView | dropLogicalView | showLogicalView | renameLogicalView | alterLogicalView // Table View | createTableView + // for calculation point + | createCalcPoint | alterCalcPoint | dropCalcPoint | showCalcPoint ; dmlStatement @@ -854,6 +856,30 @@ createTableView AS prefixPath ; +createCalcPoint + : CREATE CALCULATION POINT fullPath + AS expression + STRING_LITERAL + comment? + ; + +alterCalcPoint + : ALTER CALCULATION POINT fullPath + (AS expression)? + (STRING_LITERAL)? + comment? + (DROP COMMENT)? + ; + +dropCalcPoint + : DROP CALCULATION POINTS prefixPath + ; + +showCalcPoint + : SHOW CALCULATION POINTS prefixPath + rowPaginationClause? + ; + viewColumnDefinition : identifier columnCategory=(TAG | TIME | FIELD) comment? | identifier type (columnCategory=(TAG | TIME | FIELD))? comment? @@ -1478,6 +1504,7 @@ expression | leftExpression=expression operator_or rightExpression=expression ; + caseWhenThenExpression : CASE caseExpression=expression? whenThenExpression+ (ELSE elseExpression=expression)? END ; diff --git a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4 b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4 index 5c5cbe4a186a9..59bac72fc7813 100644 --- a/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4 +++ b/iotdb-core/antlr/src/main/antlr4/org/apache/iotdb/db/qp/sql/SqlLexer.g4 @@ -137,6 +137,10 @@ CACHE : C A C H E ; +CALCULATION + : C A L C U L A T I O N + ; + CALL : C A L L ; @@ -663,6 +667,14 @@ PIPEPLUGINS : P I P E P L U G I N S ; +POINT + : P O I N T + ; + +POINTS + : P O I N T S + ; + POLICY : P O L I C Y ; diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java index c7a4acfcd59c8..b1341107d6560 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java @@ -358,6 +358,10 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor { public static final String INCORRECT_DATA_TYPE_MSG = "Incorrect Data type"; private ZoneId zoneId; + public boolean isUseWildcard() { + return useWildcard; + } + private boolean useWildcard = false; private boolean lastLevelUseWildcard = false; @@ -2365,7 +2369,7 @@ private void parseLoadFileAttributeClause( /** Common Parsers. */ // IoTDB Objects ======================================================================== - private MeasurementPath parseFullPath(IoTDBSqlParser.FullPathContext ctx) { + protected MeasurementPath parseFullPath(IoTDBSqlParser.FullPathContext ctx) { List nodeNamesWithoutStar = ctx.nodeNameWithoutWildcard(); String[] path = new String[nodeNamesWithoutStar.size() + 1]; @@ -2396,7 +2400,7 @@ private PartialPath parseAlignedDevice(IoTDBSqlParser.FullPathContext ctx) { return new PartialPath(path); } - private PartialPath parseFullPathInExpression( + protected PartialPath parseFullPathInExpression( IoTDBSqlParser.FullPathInExpressionContext ctx, boolean canUseFullPath) { List nodeNames = ctx.nodeName(); int size = nodeNames.size(); @@ -2440,7 +2444,7 @@ private PartialPath parseFullPathInIntoPath(IoTDBSqlParser.FullPathInIntoPathCon return new PartialPath(path); } - private PartialPath parsePrefixPath(IoTDBSqlParser.PrefixPathContext ctx) { + protected PartialPath parsePrefixPath(IoTDBSqlParser.PrefixPathContext ctx) { List nodeNames = ctx.nodeName(); String[] path = new String[nodeNames.size() + 1]; path[0] = ctx.ROOT().getText(); @@ -3530,7 +3534,7 @@ private String parseConstant(ConstantContext constantContext) { } } - private Expression parseConstantOperand(ConstantContext constantContext) { + protected Expression parseConstantOperand(ConstantContext constantContext) { String text = constantContext.getText(); if (constantContext.boolean_literal() != null) { return new ConstantOperand(TSDataType.BOOLEAN, text);