This is an automated email from the ASF dual-hosted git repository. morrysnow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push: new d1ab6b1db2 [enhancement](nereids) add syntax support for fractional literal (#12444) d1ab6b1db2 is described below commit d1ab6b1db285eeadfa4e779e9157dda56610cfcc Author: Kikyou1997 <33112463+kikyou1...@users.noreply.github.com> AuthorDate: Thu Sep 8 15:54:20 2022 +0800 [enhancement](nereids) add syntax support for fractional literal (#12444) Just as legacy planner, Nereids parse all fractional literal to decimal. In the future, we will add more syntax for user to control the fractional literal type. --- .../main/antlr4/org/apache/doris/nereids/DorisLexer.g4 | 10 ---------- .../main/antlr4/org/apache/doris/nereids/DorisParser.g4 | 1 + .../apache/doris/nereids/parser/LogicalPlanBuilder.java | 8 ++++++++ .../apache/doris/nereids/parser/NereidsParserTest.java | 15 +++++++++++++++ 4 files changed, 24 insertions(+), 10 deletions(-) diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4 b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4 index acdc465851..f076731864 100644 --- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4 +++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisLexer.g4 @@ -432,16 +432,6 @@ DECIMAL_VALUE : DECIMAL_DIGITS {isValidDecimal()}? ; -FLOAT_LITERAL - : DIGIT+ EXPONENT? 'F' - | DECIMAL_DIGITS EXPONENT? 'F' {isValidDecimal()}? - ; - -DOUBLE_LITERAL - : DIGIT+ EXPONENT? 'D' - | DECIMAL_DIGITS EXPONENT? 'D' {isValidDecimal()}? - ; - BIGDECIMAL_LITERAL : DIGIT+ EXPONENT? 'BD' | DECIMAL_DIGITS EXPONENT? 'BD' {isValidDecimal()}? diff --git a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 index e1eba3ce6a..d2a03ecccf 100644 --- a/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 +++ b/fe/fe-core/src/main/antlr4/org/apache/doris/nereids/DorisParser.g4 @@ -294,6 +294,7 @@ quotedIdentifier number : MINUS? INTEGER_VALUE #integerLiteral + | MINUS? (EXPONENT_VALUE | DECIMAL_VALUE) #decimalLiteral ; diff --git a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java index 3f534c1c27..8874d0f047 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java +++ b/fe/fe-core/src/main/java/org/apache/doris/nereids/parser/LogicalPlanBuilder.java @@ -27,6 +27,7 @@ import org.apache.doris.nereids.DorisParser.ArithmeticUnaryContext; import org.apache.doris.nereids.DorisParser.BooleanLiteralContext; import org.apache.doris.nereids.DorisParser.ColumnReferenceContext; import org.apache.doris.nereids.DorisParser.ComparisonContext; +import org.apache.doris.nereids.DorisParser.DecimalLiteralContext; import org.apache.doris.nereids.DorisParser.DereferenceContext; import org.apache.doris.nereids.DorisParser.ExistContext; import org.apache.doris.nereids.DorisParser.ExplainContext; @@ -113,6 +114,7 @@ import org.apache.doris.nereids.trees.expressions.literal.BigIntLiteral; import org.apache.doris.nereids.trees.expressions.literal.BooleanLiteral; import org.apache.doris.nereids.trees.expressions.literal.DateLiteral; import org.apache.doris.nereids.trees.expressions.literal.DateTimeLiteral; +import org.apache.doris.nereids.trees.expressions.literal.DecimalLiteral; import org.apache.doris.nereids.trees.expressions.literal.IntegerLiteral; import org.apache.doris.nereids.trees.expressions.literal.IntervalLiteral; import org.apache.doris.nereids.trees.expressions.literal.LargeIntLiteral; @@ -147,6 +149,7 @@ import org.antlr.v4.runtime.tree.ParseTree; import org.antlr.v4.runtime.tree.RuleNode; import org.antlr.v4.runtime.tree.TerminalNode; +import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; import java.util.Arrays; @@ -975,4 +978,9 @@ public class LogicalPlanBuilder extends DorisParserBaseVisitor<Object> { public List<Expression> withInList(PredicateContext ctx) { return ctx.expression().stream().map(this::getExpression).collect(ImmutableList.toImmutableList()); } + + @Override + public DecimalLiteral visitDecimalLiteral(DecimalLiteralContext ctx) { + return new DecimalLiteral(new BigDecimal(ctx.getText())); + } } diff --git a/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java b/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java index 208a45b09b..2fd3d757ac 100644 --- a/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java +++ b/fe/fe-core/src/test/java/org/apache/doris/nereids/parser/NereidsParserTest.java @@ -21,6 +21,7 @@ import org.apache.doris.analysis.ExplainOptions; import org.apache.doris.analysis.StatementBase; import org.apache.doris.nereids.exceptions.ParseException; import org.apache.doris.nereids.glue.LogicalPlanAdapter; +import org.apache.doris.nereids.trees.expressions.literal.DecimalLiteral; import org.apache.doris.nereids.trees.plans.JoinType; import org.apache.doris.nereids.trees.plans.Plan; import org.apache.doris.nereids.trees.plans.commands.ExplainCommand; @@ -33,6 +34,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.util.List; +import java.util.Set; public class NereidsParserTest extends ParserTestBase { @@ -187,4 +189,17 @@ public class NereidsParserTest extends ParserTestBase { logicalJoin = (LogicalJoin) logicalPlan.child(0); Assertions.assertEquals(JoinType.CROSS_JOIN, logicalJoin.getJoinType()); } + + @Test + public void parseDecimal() { + String f1 = "SELECT col1 * 0.267081789095306 FROM t"; + NereidsParser nereidsParser = new NereidsParser(); + LogicalPlan logicalPlan = nereidsParser.parseSingle(f1); + long doubleCount = logicalPlan + .getExpressions() + .stream() + .mapToLong(e -> e.<Set<DecimalLiteral>>collect(DecimalLiteral.class::isInstance).size()) + .sum(); + Assertions.assertEquals(doubleCount, 1); + } } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org