in iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java [2892:3013]
private Expression parseExpression(
IoTDBSqlParser.ExpressionContext context, boolean canUseFullPath) {
if (context.unaryInBracket != null) {
return parseExpression(context.unaryInBracket, canUseFullPath);
}
if (context.expressionAfterUnaryOperator != null) {
if (context.MINUS() != null) {
return new NegationExpression(
parseExpression(context.expressionAfterUnaryOperator, canUseFullPath));
}
if (context.operator_not() != null) {
return new LogicNotExpression(
parseExpression(context.expressionAfterUnaryOperator, canUseFullPath));
}
return parseExpression(context.expressionAfterUnaryOperator, canUseFullPath);
}
if (context.leftExpression != null && context.rightExpression != null) {
Expression leftExpression = parseExpression(context.leftExpression, canUseFullPath);
Expression rightExpression = parseExpression(context.rightExpression, canUseFullPath);
if (context.STAR() != null) {
return new MultiplicationExpression(leftExpression, rightExpression);
}
if (context.DIV() != null) {
return new DivisionExpression(leftExpression, rightExpression);
}
if (context.MOD() != null) {
return new ModuloExpression(leftExpression, rightExpression);
}
if (context.PLUS() != null) {
return new AdditionExpression(leftExpression, rightExpression);
}
if (context.MINUS() != null) {
return new SubtractionExpression(leftExpression, rightExpression);
}
if (context.OPERATOR_GT() != null) {
return new GreaterThanExpression(leftExpression, rightExpression);
}
if (context.OPERATOR_GTE() != null) {
return new GreaterEqualExpression(leftExpression, rightExpression);
}
if (context.OPERATOR_LT() != null) {
return new LessThanExpression(leftExpression, rightExpression);
}
if (context.OPERATOR_LTE() != null) {
return new LessEqualExpression(leftExpression, rightExpression);
}
if (context.OPERATOR_DEQ() != null || context.OPERATOR_SEQ() != null) {
return new EqualToExpression(leftExpression, rightExpression);
}
if (context.OPERATOR_NEQ() != null) {
return new NonEqualExpression(leftExpression, rightExpression);
}
if (context.operator_and() != null) {
return new LogicAndExpression(leftExpression, rightExpression);
}
if (context.operator_or() != null) {
return new LogicOrExpression(leftExpression, rightExpression);
}
throw new UnsupportedOperationException();
}
if (context.unaryBeforeRegularOrLikeExpression != null) {
if (context.REGEXP() != null) {
return parseRegularExpression(context, canUseFullPath);
}
if (context.LIKE() != null) {
return parseLikeExpression(context, canUseFullPath);
}
throw new UnsupportedOperationException();
}
if (context.unaryBeforeIsNullExpression != null) {
return parseIsNullExpression(context, canUseFullPath);
}
if (context.firstExpression != null
&& context.secondExpression != null
&& context.thirdExpression != null) {
Expression firstExpression = parseExpression(context.firstExpression, canUseFullPath);
Expression secondExpression = parseExpression(context.secondExpression, canUseFullPath);
Expression thirdExpression = parseExpression(context.thirdExpression, canUseFullPath);
if (context.operator_between() != null) {
return new BetweenExpression(
firstExpression, secondExpression, thirdExpression, context.operator_not() != null);
}
throw new UnsupportedOperationException();
}
if (context.unaryBeforeInExpression != null) {
return parseInExpression(context, canUseFullPath);
}
if (context.scalarFunctionExpression() != null) {
return parseScalarFunctionExpression(context.scalarFunctionExpression(), canUseFullPath);
}
if (context.functionName() != null) {
return parseFunctionExpression(context, canUseFullPath);
}
if (context.fullPathInExpression() != null) {
return new TimeSeriesOperand(
parseFullPathInExpression(context.fullPathInExpression(), canUseFullPath));
}
if (context.time != null) {
return new TimestampOperand();
}
if (context.constant() != null && !context.constant().isEmpty()) {
return parseConstantOperand(context.constant(0));
}
if (context.caseWhenThenExpression() != null) {
return parseCaseWhenThenExpression(context.caseWhenThenExpression(), canUseFullPath);
}
throw new UnsupportedOperationException();
}