This is an automated email from the ASF dual-hosted git repository.

jiajunxie pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/main by this push:
     new 008c553aef [CALCITE-5999] DECIMAL literals as sometimes unparsed 
looking as DOUBLE literals
008c553aef is described below

commit 008c553aefacbe14787f50510c660a4dd739b54e
Author: Mihai Budiu <[email protected]>
AuthorDate: Sat Sep 16 10:15:14 2023 -0700

    [CALCITE-5999] DECIMAL literals as sometimes unparsed looking as DOUBLE 
literals
    
    Signed-off-by: Mihai Budiu <[email protected]>
---
 core/src/main/java/org/apache/calcite/sql/SqlNumericLiteral.java      | 4 ++--
 .../java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java    | 2 +-
 .../src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java    | 4 ++++
 3 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/sql/SqlNumericLiteral.java 
b/core/src/main/java/org/apache/calcite/sql/SqlNumericLiteral.java
index 8cf6bd1ff0..25205b99ab 100644
--- a/core/src/main/java/org/apache/calcite/sql/SqlNumericLiteral.java
+++ b/core/src/main/java/org/apache/calcite/sql/SqlNumericLiteral.java
@@ -88,9 +88,9 @@ public class SqlNumericLiteral extends SqlLiteral {
   }
 
   @Override public String toValue() {
-    BigDecimal bd = getValueNonNull();
+    final BigDecimal bd = getValueNonNull();
     if (isExact) {
-      return getValueNonNull().toString();
+      return bd.toPlainString();
     }
     return Util.toScientificNotation(bd);
   }
diff --git 
a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java 
b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
index 212336abf6..661f7163cb 100644
--- 
a/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
+++ 
b/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java
@@ -1167,7 +1167,7 @@ class RelToSqlConverterTest {
   @Test void testCastDecimal1() {
     final String query = "select -0.0000000123\n"
         + " from \"expense_fact\"";
-    final String expected = "SELECT -1.23E-8\n"
+    final String expected = "SELECT -0.0000000123\n"
         + "FROM \"foodmart\".\"expense_fact\"";
     sql(query).ok(expected);
   }
diff --git 
a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java 
b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
index bd3ad987ee..60606f58ac 100644
--- a/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
+++ b/testkit/src/main/java/org/apache/calcite/sql/parser/SqlParserTest.java
@@ -937,6 +937,10 @@ public class SqlParserTest {
         .ok("SELECT 211");
     sql("select DECIMAL '.11E-2'")
         .ok("SELECT 0.0011");
+    // Test case for [CALCITE-5999] DECIMAL literals as sometimes unparsed
+    // looking as DOUBLE literals.
+    sql("select DECIMAL '0.00000000000000001'")
+        .ok("SELECT 0.00000000000000001");
     sql("select DECIMAL ^''^")
         .fails("(?s)Literal '' can not be parsed to type 'DECIMAL'.*");
     sql("select DECIMAL ^'-'^")

Reply via email to