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 <[email protected]> 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(); }
