You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ro...@apache.org on 2022/04/26 03:31:19 UTC
[iotdb] 02/02: g4 and visitors
This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch expression-priority
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit db124eca54eafa7d66daf8137ffc21a0b497f7a8
Author: Steve Yurong Su <ro...@apache.org>
AuthorDate: Tue Apr 26 11:30:55 2022 +0800
g4 and visitors
---
.../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 | 12 +++---
.../apache/iotdb/db/mpp/sql/parser/ASTVisitor.java | 44 +++++++++-------------
.../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java | 44 +++++++++-------------
3 files changed, 42 insertions(+), 58 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 24c8dfb88c..2fa8663537 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
@@ -840,18 +840,18 @@ dateExpression
// multiplication, division, and modulus higher than that of addition and substraction.
expression
: LR_BRACKET unaryInBracket=expression RR_BRACKET
- | (PLUS | MINUS) unaryAfterSign=expression
- | OPERATOR_NOT unaryAfterNot=expression
+ | constant
+ | time=(TIME | TIMESTAMP)
+ | suffixPathCanInExpr
+ | (PLUS | MINUS | OPERATOR_NOT) expressionAfterUnaryOperator=expression
| leftExpression=expression (STAR | DIV | MOD) rightExpression=expression
| leftExpression=expression (PLUS | MINUS) rightExpression=expression
| leftExpression=expression (OPERATOR_GT | OPERATOR_GTE | OPERATOR_LT | OPERATOR_LTE | OPERATOR_DEQ | OPERATOR_NEQ) rightExpression=expression
| unaryBeforeRegularExpression=expression (REGEXP | LIKE) STRING_LITERAL
| unaryBeforeInExpression=expression OPERATOR_IN LR_BRACKET constant (COMMA constant)* RR_BRACKET
- | leftExpression=expression (OPERATOR_AND | OPERATOR_OR) rightExpression=expression
+ | leftExpression=expression OPERATOR_AND rightExpression=expression
+ | leftExpression=expression OPERATOR_OR rightExpression=expression
| functionName LR_BRACKET expression (COMMA expression)* functionAttribute* RR_BRACKET
- | suffixPathCanInExpr
- | time=(TIME | TIMESTAMP)
- | constant
;
functionName
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/parser/ASTVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/parser/ASTVisitor.java
index 69b1439040..435605afe9 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/parser/ASTVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/parser/ASTVisitor.java
@@ -1604,25 +1604,32 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
// Expression & Predicate ========================================================================
private Expression parseExpression(IoTDBSqlParser.ExpressionContext context) {
- // LR_BRACKET unaryInBracket=expression RR_BRACKET
if (context.unaryInBracket != null) {
return parseExpression(context.unaryInBracket);
}
- // (PLUS | MINUS) unaryAfterSign=expression
- if (context.unaryAfterSign != null) {
- return context.MINUS() != null
- ? new NegationExpression(parseExpression(context.unaryAfterSign))
- : parseExpression(context.unaryAfterSign);
+ if (context.constant() != null && !context.constant().isEmpty()) {
+ return parseConstantOperand(context.constant(0));
}
- // OPERATOR_NOT unaryAfterNot=expression
- if (context.OPERATOR_NOT() != null) {
- return new LogicNotExpression(parseExpression(context.unaryAfterNot));
+ if (context.time != null) {
+ throw new UnsupportedOperationException();
+ }
+
+ if (context.suffixPathCanInExpr() != null) {
+ return new TimeSeriesOperand(parseSuffixPathCanInExpr(context.suffixPathCanInExpr()));
+ }
+
+ if (context.expressionAfterUnaryOperator != null) {
+ if (context.MINUS() != null) {
+ return new NegationExpression(parseExpression(context.expressionAfterUnaryOperator));
+ }
+ if (context.OPERATOR_NOT() != null) {
+ return new LogicNotExpression(parseExpression(context.expressionAfterUnaryOperator));
+ }
+ return parseExpression(context.expressionAfterUnaryOperator);
}
- // leftExpression=expression (STAR | DIV | MOD) rightExpression=expression
- // leftExpression=expression (PLUS | MINUS) rightExpression=expression
if (context.leftExpression != null && context.rightExpression != null) {
Expression leftExpression = parseExpression(context.leftExpression);
Expression rightExpression = parseExpression(context.rightExpression);
@@ -1667,33 +1674,18 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
}
}
- // functionName=suffixPath LR_BRACKET expression (COMMA expression)* functionAttribute*
- // RR_BRACKET
if (context.functionName() != null) {
return parseFunctionExpression(context);
}
- // unaryBeforeRegularExpression=expression (REGEXP | LIKE) STRING_LITERAL
if (context.unaryBeforeRegularExpression != null) {
return parseRegularExpression(context);
}
- // unaryBeforeInExpression=expression OPERATOR_IN LR_BRACKET constant (COMMA constant)*
- // RR_BRACKET
if (context.unaryBeforeInExpression != null) {
return parseInExpression(context);
}
- // suffixPath
- if (context.suffixPathCanInExpr() != null) {
- return new TimeSeriesOperand(parseSuffixPathCanInExpr(context.suffixPathCanInExpr()));
- }
-
- // constant
- if (context.constant() != null && !context.constant().isEmpty()) {
- return parseConstantOperand(context.constant(0));
- }
-
throw new UnsupportedOperationException();
}
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 4c1c8319ab..f1bcf80905 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
@@ -2508,25 +2508,32 @@ public class IoTDBSqlVisitor extends IoTDBSqlParserBaseVisitor<Operator> {
@SuppressWarnings("squid:S3776")
private Expression parseExpression(IoTDBSqlParser.ExpressionContext context) {
- // LR_BRACKET unaryInBracket=expression RR_BRACKET
if (context.unaryInBracket != null) {
return parseExpression(context.unaryInBracket);
}
- // (PLUS | MINUS) unaryAfterSign=expression
- if (context.unaryAfterSign != null) {
- return context.MINUS() != null
- ? new NegationExpression(parseExpression(context.unaryAfterSign))
- : parseExpression(context.unaryAfterSign);
+ if (context.constant() != null && !context.constant().isEmpty()) {
+ return parseConstantOperand(context.constant(0));
}
- // OPERATOR_NOT unaryAfterNot=expression
- if (context.OPERATOR_NOT() != null) {
- return new LogicNotExpression(parseExpression(context.unaryAfterNot));
+ if (context.time != null) {
+ throw new UnsupportedOperationException();
+ }
+
+ if (context.suffixPathCanInExpr() != null) {
+ return new TimeSeriesOperand(parseSuffixPathCanInExpr(context.suffixPathCanInExpr()));
+ }
+
+ if (context.expressionAfterUnaryOperator != null) {
+ if (context.MINUS() != null) {
+ return new NegationExpression(parseExpression(context.expressionAfterUnaryOperator));
+ }
+ if (context.OPERATOR_NOT() != null) {
+ return new LogicNotExpression(parseExpression(context.expressionAfterUnaryOperator));
+ }
+ return parseExpression(context.expressionAfterUnaryOperator);
}
- // leftExpression=expression (STAR | DIV | MOD) rightExpression=expression
- // leftExpression=expression (PLUS | MINUS) rightExpression=expression
if (context.leftExpression != null && context.rightExpression != null) {
Expression leftExpression = parseExpression(context.leftExpression);
Expression rightExpression = parseExpression(context.rightExpression);
@@ -2571,33 +2578,18 @@ public class IoTDBSqlVisitor extends IoTDBSqlParserBaseVisitor<Operator> {
}
}
- // functionName=suffixPath LR_BRACKET expression (COMMA expression)* functionAttribute*
- // RR_BRACKET
if (context.functionName() != null) {
return parseFunctionExpression(context);
}
- // unaryBeforeRegularExpression=expression (REGEXP | LIKE) STRING_LITERAL
if (context.unaryBeforeRegularExpression != null) {
return parseRegularExpression(context);
}
- // unaryBeforeInExpression=expression OPERATOR_IN LR_BRACKET constant (COMMA constant)*
- // RR_BRACKET
if (context.unaryBeforeInExpression != null) {
return parseInExpression(context);
}
- // suffixPath
- if (context.suffixPathCanInExpr() != null) {
- return new TimeSeriesOperand(parseSuffixPathCanInExpr(context.suffixPathCanInExpr()));
- }
-
- // constant
- if (context.constant() != null && !context.constant().isEmpty()) {
- return parseConstantOperand(context.constant(0));
- }
-
throw new UnsupportedOperationException();
}