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/27 01:43:33 UTC
[iotdb] branch master updated: [IOTDB-3017] Reorder expression priority according to standard (#5669)
This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 5708dfd192 [IOTDB-3017] Reorder expression priority according to standard (#5669)
5708dfd192 is described below
commit 5708dfd192dd7a91cab5948b0d8d50cb62ab007a
Author: Steve Yurong Su <ro...@apache.org>
AuthorDate: Wed Apr 27 09:43:26 2022 +0800
[IOTDB-3017] Reorder expression priority according to standard (#5669)
---
.../org/apache/iotdb/db/qp/sql/IoTDBSqlParser.g4 | 14 ++---
docs/UserGuide/Query-Data/Select-Expression.md | 7 ++-
docs/zh/UserGuide/Query-Data/Select-Expression.md | 7 ++-
.../iotdb/db/integration/IoTDBSelectSchemaIT.java | 9 ++--
.../apache/iotdb/db/mpp/sql/parser/ASTVisitor.java | 58 +++++++++-----------
.../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java | 58 +++++++++-----------
.../iotdb/db/query/expression/Expression.java | 5 +-
.../iotdb/db/query/expression/ExpressionType.java | 61 ++++++++++++++--------
.../expression/binary/AdditionExpression.java | 4 +-
.../query/expression/binary/BinaryExpression.java | 5 +-
.../expression/binary/DivisionExpression.java | 4 +-
.../query/expression/binary/EqualToExpression.java | 4 +-
.../expression/binary/GreaterEqualExpression.java | 4 +-
.../expression/binary/GreaterThanExpression.java | 4 +-
.../expression/binary/LessEqualExpression.java | 4 +-
.../expression/binary/LessThanExpression.java | 4 +-
.../expression/binary/LogicAndExpression.java | 4 +-
.../query/expression/binary/LogicOrExpression.java | 4 +-
.../query/expression/binary/ModuloExpression.java | 4 +-
.../binary/MultiplicationExpression.java | 4 +-
.../expression/binary/NonEqualExpression.java | 4 +-
.../expression/binary/SubtractionExpression.java | 4 +-
.../db/query/expression/unary/ConstantOperand.java | 10 +++-
.../query/expression/unary/FunctionExpression.java | 4 +-
.../query/expression/unary/LogicNotExpression.java | 16 +++---
.../query/expression/unary/NegationExpression.java | 17 +++---
.../query/expression/unary/RegularExpression.java | 7 ++-
.../query/expression/unary/TimeSeriesOperand.java | 4 +-
28 files changed, 172 insertions(+), 162 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..e5f1ea3e62 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
+ | functionName LR_BRACKET expression (COMMA expression)* functionAttribute* RR_BRACKET
+ | (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
- | functionName LR_BRACKET expression (COMMA expression)* functionAttribute* RR_BRACKET
- | suffixPathCanInExpr
- | time=(TIME | TIMESTAMP)
- | constant
+ | leftExpression=expression OPERATOR_AND rightExpression=expression
+ | leftExpression=expression OPERATOR_OR rightExpression=expression
;
functionName
diff --git a/docs/UserGuide/Query-Data/Select-Expression.md b/docs/UserGuide/Query-Data/Select-Expression.md
index 6ab41d2b46..e3cf02c00b 100644
--- a/docs/UserGuide/Query-Data/Select-Expression.md
+++ b/docs/UserGuide/Query-Data/Select-Expression.md
@@ -176,8 +176,11 @@ IoTDB> select a, b, a > 10, a <= b, !(a <= b), a > 10 && a > b from root.test;
|4 |`<=` |Binary compare operator less or equal to|
|4 |`==` |Binary compare operator equal to|
|4 |`!=`/`<>` |Binary compare operator non-equal to|
-|5 |`and`/`&`/`&&` |Binary logic operator and|
-|5 |`or`/ | / || |Binary logic operator or|
+|5 |`REGEXP` |`REGEXP` operator|
+|5 |`LIKE` |`LIKE` operator|
+|6 |`IN` |`IN` operator|
+|7 |`and`/`&`/`&&` |Binary logic operator and|
+|8 |`or`/ | / || |Binary logic operator or|
## Time Series Generating Functions
diff --git a/docs/zh/UserGuide/Query-Data/Select-Expression.md b/docs/zh/UserGuide/Query-Data/Select-Expression.md
index 0e1ca6f8ab..316fe113bd 100644
--- a/docs/zh/UserGuide/Query-Data/Select-Expression.md
+++ b/docs/zh/UserGuide/Query-Data/Select-Expression.md
@@ -178,8 +178,11 @@ IoTDB> select a, b, a > 10, a <= b, !(a <= b), a > 10 && a > b from root.test;
|4 |`<=` |双目比较运算符小于等于|
|4 |`==` |双目比较运算符等于|
|4 |`!=`/`<>` |双目比较运算符不等于|
-|5 |`and`/`&`/`&&`|双目逻辑运算符与|
-|5 |`or`/ | / |||双目逻辑运算符或|
+|5 |`REGEXP` |`REGEXP`运算符|
+|5 |`LIKE` |`LIKE`运算符|
+|6 |`IN` |`IN`运算符|
+|7 |`and`/`&`/`&&`|双目逻辑运算符与|
+|8 |`or`/ | / |||双目逻辑运算符或|
<!--- |即管道符 转义不能用在``里, 表格内不允许使用管道符 -->
## 内置时间序列生成函数
diff --git a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectSchemaIT.java b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectSchemaIT.java
index a266768166..efbcf2db3e 100644
--- a/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectSchemaIT.java
+++ b/integration/src/test/java/org/apache/iotdb/db/integration/IoTDBSelectSchemaIT.java
@@ -86,6 +86,7 @@ public class IoTDBSelectSchemaIT {
"-2+s1",
"!true||s1>0",
"-(-1)+s1",
+ "sin(s1)+s1",
};
String[] completeExpressions = {
"root.sg.d1.s1+root.sg.d1.s2",
@@ -95,15 +96,16 @@ public class IoTDBSelectSchemaIT {
"-(-root.sg.d1.s1)",
"(root.sg.d1.s1+root.sg.d1.s2)*root.sg.d1.s3",
"-2+root.sg.d1.s1",
- "!true|(root.sg.d1.s1>0)",
+ "!true|root.sg.d1.s1>0",
"-(-1)+root.sg.d1.s1",
+ "sin(root.sg.d1.s1)+root.sg.d1.s1",
};
try (Connection connection = EnvFactory.getEnv().getConnection();
Statement statement = connection.createStatement()) {
ResultSet resultSet =
statement.executeQuery(
String.format(
- "select %s, %s, %s, %s, %s, %s, %s, %s, %s from root.sg.d1",
+ "select %s, %s, %s, %s, %s, %s, %s, %s, %s, %s from root.sg.d1",
expressions[0],
expressions[1],
expressions[2],
@@ -112,7 +114,8 @@ public class IoTDBSelectSchemaIT {
expressions[5],
expressions[6],
expressions[7],
- expressions[8]));
+ expressions[8],
+ expressions[9]));
int columnCount = resultSet.getMetaData().getColumnCount();
assertEquals(1 + expressions.length, columnCount);
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..2f4a4d8f8a 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();
}
@@ -1740,24 +1732,22 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
private Expression parseConstantOperand(ConstantContext constantContext) {
try {
+ String text = constantContext.getText();
if (clientVersion.equals(IoTDBConstant.ClientVersion.V_0_13)) {
if (constantContext.BOOLEAN_LITERAL() != null) {
- return new ConstantOperand(
- TSDataType.BOOLEAN, constantContext.BOOLEAN_LITERAL().getText());
+ return new ConstantOperand(TSDataType.BOOLEAN, text);
} else if (constantContext.STRING_LITERAL() != null) {
- String text = constantContext.STRING_LITERAL().getText();
return new ConstantOperand(TSDataType.TEXT, parseStringLiteral(text));
} else if (constantContext.INTEGER_LITERAL() != null) {
- return new ConstantOperand(TSDataType.INT64, constantContext.INTEGER_LITERAL().getText());
+ return new ConstantOperand(TSDataType.INT64, text);
} else if (constantContext.realLiteral() != null) {
- return new ConstantOperand(TSDataType.DOUBLE, constantContext.realLiteral().getText());
+ return new ConstantOperand(TSDataType.DOUBLE, text);
} else {
- throw new SQLParserException(
- "Unsupported constant operand: " + constantContext.getText());
+ throw new SQLParserException("Unsupported constant operand: " + text);
}
} else if (clientVersion.equals(IoTDBConstant.ClientVersion.V_0_12)) {
// if client version is before 0.13, node name in expression may be a constant
- return new TimeSeriesOperand(convertConstantToPath(constantContext.getText()));
+ return new TimeSeriesOperand(convertConstantToPath(text));
} else {
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..c384720ed8 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));
+ }
+
+ if (context.time != null) {
+ throw new UnsupportedOperationException();
+ }
+
+ if (context.suffixPathCanInExpr() != null) {
+ return new TimeSeriesOperand(parseSuffixPathCanInExpr(context.suffixPathCanInExpr()));
}
- // OPERATOR_NOT unaryAfterNot=expression
- if (context.OPERATOR_NOT() != null) {
- return new LogicNotExpression(parseExpression(context.unaryAfterNot));
+ 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();
}
@@ -2644,24 +2636,22 @@ public class IoTDBSqlVisitor extends IoTDBSqlParserBaseVisitor<Operator> {
private Expression parseConstantOperand(ConstantContext constantContext) {
try {
+ String text = constantContext.getText();
if (clientVersion.equals(IoTDBConstant.ClientVersion.V_0_13)) {
if (constantContext.BOOLEAN_LITERAL() != null) {
- return new ConstantOperand(
- TSDataType.BOOLEAN, constantContext.BOOLEAN_LITERAL().getText());
+ return new ConstantOperand(TSDataType.BOOLEAN, text);
} else if (constantContext.STRING_LITERAL() != null) {
- String text = constantContext.STRING_LITERAL().getText();
return new ConstantOperand(TSDataType.TEXT, parseStringLiteral(text));
} else if (constantContext.INTEGER_LITERAL() != null) {
- return new ConstantOperand(TSDataType.INT64, constantContext.INTEGER_LITERAL().getText());
+ return new ConstantOperand(TSDataType.INT64, text);
} else if (constantContext.realLiteral() != null) {
- return new ConstantOperand(TSDataType.DOUBLE, constantContext.realLiteral().getText());
+ return new ConstantOperand(TSDataType.DOUBLE, text);
} else {
- throw new SQLParserException(
- "Unsupported constant operand: " + constantContext.getText());
+ throw new SQLParserException("Unsupported constant operand: " + text);
}
} else if (clientVersion.equals(IoTDBConstant.ClientVersion.V_0_12)) {
// if client version is before 0.13, node name in expression may be a constant
- return new TimeSeriesOperand(convertConstantToPath(constantContext.getText()));
+ return new TimeSeriesOperand(convertConstantToPath(text));
} else {
throw new UnsupportedOperationException();
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
index 8f202932e7..b79c145b62 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/Expression.java
@@ -215,10 +215,11 @@ public abstract class Expression {
}
}
- protected abstract short getExpressionType();
+ public abstract ExpressionType getExpressionType();
public static void serialize(Expression expression, ByteBuffer byteBuffer) {
- ReadWriteIOUtils.write(expression.getExpressionType(), byteBuffer);
+ ReadWriteIOUtils.write(
+ expression.getExpressionType().getExpressionTypeInShortEnum(), byteBuffer);
expression.serialize(byteBuffer);
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/ExpressionType.java b/server/src/main/java/org/apache/iotdb/db/query/expression/ExpressionType.java
index 4510f4a4a1..d53f55a689 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/ExpressionType.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/ExpressionType.java
@@ -19,34 +19,51 @@
package org.apache.iotdb.db.query.expression;
public enum ExpressionType {
- ADDITION((short) 0),
- DIVISION((short) 1),
- EQUAL_TO((short) 2),
- GREATER_EQUAL((short) 3),
- GREATER_THAN((short) 4),
- LESS_EQUAL((short) 5),
- LESS_THAN((short) 6),
- LOGIC_AND((short) 7),
- LOGIC_OR((short) 8),
- MODULO((short) 9),
- MULTIPLICATION((short) 10),
- NON_EQUAL((short) 11),
- SUBTRACTION((short) 12),
- FUNCTION((short) 13),
- LOGIC_NOT((short) 14),
- NEGATION((short) 15),
- TIME_SERIES((short) 16),
- CONSTANT((short) 17),
- IN((short) 18),
- REGULAR((short) 19);
+ CONSTANT((short) -4, (short) 1400),
+ TIME_COLUMN((short) -3, (short) 1300),
+ TIME_SERIES((short) -2, (short) 1200),
+ FUNCTION((short) -1, (short) 1100),
+
+ NEGATION((short) 0, (short) 1000),
+ LOGIC_NOT((short) 1, (short) 1000),
+
+ MULTIPLICATION((short) 2, (short) 900),
+ DIVISION((short) 3, (short) 900),
+ MODULO((short) 4, (short) 900),
+
+ ADDITION((short) 5, (short) 800),
+ SUBTRACTION((short) 6, (short) 800),
+
+ EQUAL_TO((short) 7, (short) 600),
+ NON_EQUAL((short) 8, (short) 600),
+ GREATER_EQUAL((short) 9, (short) 600),
+ GREATER_THAN((short) 10, (short) 600),
+ LESS_EQUAL((short) 11, (short) 600),
+ LESS_THAN((short) 12, (short) 600),
+
+ REGEXP((short) 13, (short) 500),
+ LIKE((short) 14, (short) 500),
+
+ IN((short) 15, (short) 400),
+
+ LOGIC_AND((short) 16, (short) 300),
+
+ LOGIC_OR((short) 17, (short) 200),
+ ;
private final short expressionType;
+ private final short priority;
- ExpressionType(short expressionType) {
+ ExpressionType(short expressionType, short priority) {
this.expressionType = expressionType;
+ this.priority = priority;
}
- public short getExpressionType() {
+ public short getExpressionTypeInShortEnum() {
return expressionType;
}
+
+ public short getPriority() {
+ return priority;
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java
index 9ad079daf1..a4ba44b3c7 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/AdditionExpression.java
@@ -50,7 +50,7 @@ public class AdditionExpression extends BinaryExpression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.ADDITION.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.ADDITION;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
index d822a00801..c535d97faa 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/BinaryExpression.java
@@ -281,13 +281,14 @@ public abstract class BinaryExpression extends Expression {
@Override
public final String getExpressionStringInternal() {
StringBuilder builder = new StringBuilder();
- if (leftExpression instanceof BinaryExpression) {
+ if (leftExpression.getExpressionType().getPriority() < this.getExpressionType().getPriority()) {
builder.append("(").append(leftExpression.getExpressionString()).append(")");
} else {
builder.append(leftExpression.getExpressionString());
}
builder.append(" ").append(operator()).append(" ");
- if (rightExpression instanceof BinaryExpression) {
+ if (rightExpression.getExpressionType().getPriority()
+ < this.getExpressionType().getPriority()) {
builder.append("(").append(rightExpression.getExpressionString()).append(")");
} else {
builder.append(rightExpression.getExpressionString());
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java
index e72fe7ea86..b73e156a07 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/DivisionExpression.java
@@ -50,7 +50,7 @@ public class DivisionExpression extends BinaryExpression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.DIVISION.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.DIVISION;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/EqualToExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/EqualToExpression.java
index d506f15ae6..5edc7e8ae8 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/EqualToExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/EqualToExpression.java
@@ -49,7 +49,7 @@ public class EqualToExpression extends BinaryExpression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.EQUAL_TO.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.EQUAL_TO;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterEqualExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterEqualExpression.java
index 2a7944dfb1..2e7594d403 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterEqualExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterEqualExpression.java
@@ -50,7 +50,7 @@ public class GreaterEqualExpression extends BinaryExpression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.GREATER_EQUAL.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.GREATER_EQUAL;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterThanExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterThanExpression.java
index 40e3c26ae0..14f2e4321d 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterThanExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/GreaterThanExpression.java
@@ -50,7 +50,7 @@ public class GreaterThanExpression extends BinaryExpression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.GREATER_THAN.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.GREATER_THAN;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessEqualExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessEqualExpression.java
index 9fe0213afa..0368c02290 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessEqualExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessEqualExpression.java
@@ -49,7 +49,7 @@ public class LessEqualExpression extends BinaryExpression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.LESS_EQUAL.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.LESS_EQUAL;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessThanExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessThanExpression.java
index e0a9e2e4f5..2a05a80c4a 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessThanExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LessThanExpression.java
@@ -49,7 +49,7 @@ public class LessThanExpression extends BinaryExpression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.LESS_THAN.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.LESS_THAN;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicAndExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicAndExpression.java
index a35ef9cf8c..a7f905ad1f 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicAndExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicAndExpression.java
@@ -49,7 +49,7 @@ public class LogicAndExpression extends BinaryExpression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.LOGIC_AND.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.LOGIC_AND;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicOrExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicOrExpression.java
index 2c031fb746..e0a7e1437d 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicOrExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/LogicOrExpression.java
@@ -49,7 +49,7 @@ public class LogicOrExpression extends BinaryExpression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.LOGIC_OR.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.LOGIC_OR;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java
index 39f1b90a3f..44d7d01b02 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/ModuloExpression.java
@@ -49,7 +49,7 @@ public class ModuloExpression extends BinaryExpression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.MODULO.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.MODULO;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java
index 86a3539c10..1a52b209c8 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/MultiplicationExpression.java
@@ -50,7 +50,7 @@ public class MultiplicationExpression extends BinaryExpression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.MULTIPLICATION.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.MULTIPLICATION;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/NonEqualExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/NonEqualExpression.java
index 159ff11522..3169ed1834 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/NonEqualExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/NonEqualExpression.java
@@ -49,7 +49,7 @@ public class NonEqualExpression extends BinaryExpression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.NON_EQUAL.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.NON_EQUAL;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java
index dd91f9e7d5..b2a0fd6151 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/binary/SubtractionExpression.java
@@ -50,7 +50,7 @@ public class SubtractionExpression extends BinaryExpression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.SUBTRACTION.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.SUBTRACTION;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/ConstantOperand.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/ConstantOperand.java
index 8da3c75ee7..b50c3c06f9 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/ConstantOperand.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/ConstantOperand.java
@@ -64,6 +64,12 @@ public class ConstantOperand extends Expression {
return dataType;
}
+ public boolean isNegativeNumber() {
+ return !dataType.equals(TSDataType.TEXT)
+ && !dataType.equals(TSDataType.BOOLEAN)
+ && Double.parseDouble(valueString) < 0;
+ }
+
@Override
public boolean isConstantOperandInternal() {
return true;
@@ -146,8 +152,8 @@ public class ConstantOperand extends Expression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.CONSTANT.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.CONSTANT;
}
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java
index 43ff8c5162..892ef2e1ec 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/FunctionExpression.java
@@ -458,8 +458,8 @@ public class FunctionExpression extends Expression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.FUNCTION.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.FUNCTION;
}
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LogicNotExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LogicNotExpression.java
index 9c36b3a810..cd657230a9 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LogicNotExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/LogicNotExpression.java
@@ -192,18 +192,16 @@ public class LogicNotExpression extends Expression {
@Override
public String getExpressionStringInternal() {
- if (expression instanceof FunctionExpression
- || expression instanceof ConstantOperand
- || expression instanceof TimeSeriesOperand) {
- return "!" + expression.toString();
- } else {
- return "!(" + expression.toString() + ")";
- }
+ return expression instanceof FunctionExpression
+ || expression instanceof ConstantOperand
+ || expression instanceof TimeSeriesOperand
+ ? "!" + expression
+ : "!(" + expression + ")";
}
@Override
- protected short getExpressionType() {
- return ExpressionType.LOGIC_NOT.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.LOGIC_NOT;
}
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
index 28ed84613e..101c1b1795 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/NegationExpression.java
@@ -192,18 +192,17 @@ public class NegationExpression extends Expression {
@Override
public String getExpressionStringInternal() {
- if (expression instanceof FunctionExpression
- || expression instanceof ConstantOperand
- || expression instanceof TimeSeriesOperand) {
- return "-" + expression.toString();
- } else {
- return "-(" + expression.toString() + ")";
- }
+ return expression instanceof TimeSeriesOperand
+ || expression instanceof FunctionExpression
+ || (expression instanceof ConstantOperand
+ && !((ConstantOperand) expression).isNegativeNumber())
+ ? "-" + expression
+ : "-(" + expression + ")";
}
@Override
- protected short getExpressionType() {
- return ExpressionType.NEGATION.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.NEGATION;
}
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java
index 0ce8f8589f..2bdafb1804 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/RegularExpression.java
@@ -163,13 +163,12 @@ public class RegularExpression extends Expression {
@Override
protected String getExpressionStringInternal() {
- // TODO
- throw new RuntimeException();
+ return expression + " REGEXP " + patternString;
}
@Override
- protected short getExpressionType() {
- return ExpressionType.REGULAR.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.REGEXP;
}
@Override
diff --git a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
index e8cf2566d1..ea83b01c32 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/expression/unary/TimeSeriesOperand.java
@@ -167,8 +167,8 @@ public class TimeSeriesOperand extends Expression {
}
@Override
- protected short getExpressionType() {
- return ExpressionType.TIME_SERIES.getExpressionType();
+ public ExpressionType getExpressionType() {
+ return ExpressionType.TIME_SERIES;
}
@Override