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 ddfdf62993 [opt](planner) support to parse scientific notation(aEb) 
(#22248)
ddfdf62993 is described below

commit ddfdf62993603fd2bd03108b505f393c7baf0388
Author: zhangstar333 <87313068+zhangstar...@users.noreply.github.com>
AuthorDate: Thu Jul 27 13:31:37 2023 +0800

    [opt](planner) support to parse scientific notation(aEb) (#22248)
---
 fe/fe-core/src/main/jflex/sql_scanner.flex             | 14 +++++++++++++-
 .../data/datatype_p0/decimalv3/test_decimalv3.out      | 18 ++++++++++++++++++
 .../suites/datatype_p0/decimalv3/test_decimalv3.groovy |  8 ++++++++
 3 files changed, 39 insertions(+), 1 deletion(-)

diff --git a/fe/fe-core/src/main/jflex/sql_scanner.flex 
b/fe/fe-core/src/main/jflex/sql_scanner.flex
index c2cae6532f..62e7c6f339 100644
--- a/fe/fe-core/src/main/jflex/sql_scanner.flex
+++ b/fe/fe-core/src/main/jflex/sql_scanner.flex
@@ -634,7 +634,8 @@ FLit1 = [0-9]+ \. [0-9]*
 FLit2 = \. [0-9]+
 FLit3 = [0-9]+
 Exponent = [eE] [+-]? [0-9]+
-DoubleLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}?
+DoubleLiteral = ({FLit1}|{FLit2}|{FLit3})
+ExponentLiteral = ({FLit1}|{FLit2}|{FLit3}) {Exponent}
 
 EolHintBegin = "--" " "* "+"
 CommentedHintBegin = "/*" " "* "+"
@@ -697,6 +698,17 @@ EndOfLineComment = "--" 
!({HintContent}|{ContainsLineTerminator}) {LineTerminato
 "`" { return newToken(SqlParserSymbols.UNMATCHED_STRING_LITERAL, null); }
 "?" { return newToken(SqlParserSymbols.PLACEHOLDER, null); }
 
+{ExponentLiteral} {
+  BigDecimal decimal_val;
+  try {
+    decimal_val = new BigDecimal(yytext());
+  } catch (NumberFormatException e) {
+    return newToken(SqlParserSymbols.NUMERIC_OVERFLOW, yytext());
+  }
+
+  return newToken(SqlParserSymbols.DECIMAL_LITERAL, decimal_val);
+}
+
 {QuotedIdentifier} {
     // Remove the quotes
     String trimmedIdent = yytext().substring(1, yytext().length() - 1);
diff --git a/regression-test/data/datatype_p0/decimalv3/test_decimalv3.out 
b/regression-test/data/datatype_p0/decimalv3/test_decimalv3.out
index f8d56b4c41..0482cc4164 100644
--- a/regression-test/data/datatype_p0/decimalv3/test_decimalv3.out
+++ b/regression-test/data/datatype_p0/decimalv3/test_decimalv3.out
@@ -5,3 +5,21 @@
 -- !decimalv3 --
 100.00000000000000000000
 
+-- !aEb_test1 --
+0
+
+-- !aEb_test2 --
+0.1
+
+-- !aEb_test3 --
+-0.01
+
+-- !aEb_test4 --
+101234560000
+
+-- !aEb_test5 --
+0.0123456789
+
+-- !aEb_test6 --
+1234450000
+
diff --git a/regression-test/suites/datatype_p0/decimalv3/test_decimalv3.groovy 
b/regression-test/suites/datatype_p0/decimalv3/test_decimalv3.groovy
index 8b8b010240..2b72c36867 100644
--- a/regression-test/suites/datatype_p0/decimalv3/test_decimalv3.groovy
+++ b/regression-test/suites/datatype_p0/decimalv3/test_decimalv3.groovy
@@ -27,4 +27,12 @@ suite("test_decimalv3") {
 
        qt_decimalv3 "select * from test5_v"
        qt_decimalv3 "select cast(a as decimalv3(12,10)) * cast(b as 
decimalv3(18,10)) from test5"
+
+       sql "set experimental_enable_nereids_planner =false;"
+       qt_aEb_test1 "select 0e0;"
+       qt_aEb_test2 "select 1e-1"
+       qt_aEb_test3 "select -1e-2"
+       qt_aEb_test4 "select 10.123456e10;"
+       qt_aEb_test5 "select 123456789e-10"
+       qt_aEb_test6 "select 0.123445e10;"
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to