You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by jc...@apache.org on 2019/05/15 18:14:21 UTC

[calcite] 01/02: [CALCITE-3066] RelToSqlConverter may incorrectly throw an AssertionError for some decimal literals

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

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

commit d6896202c865b38b7821f1e0b644e1de0c95eda2
Author: Jesus Camacho Rodriguez <jc...@apache.org>
AuthorDate: Mon May 13 18:35:09 2019 -0700

    [CALCITE-3066] RelToSqlConverter may incorrectly throw an AssertionError for some decimal literals
    
    Close apache/calcite#1213
---
 .../main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java  | 4 ++--
 .../org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java     | 8 ++++++++
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
index 8b51530..39f6b4b 100644
--- a/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
+++ b/core/src/main/java/org/apache/calcite/rel/rel2sql/SqlImplementor.java
@@ -500,10 +500,10 @@ public abstract class SqlImplementor {
         case NUMERIC:
         case EXACT_NUMERIC:
           return SqlLiteral.createExactNumeric(
-              literal.getValueAs(BigDecimal.class).toString(), POS);
+              literal.getValueAs(BigDecimal.class).toPlainString(), POS);
         case APPROXIMATE_NUMERIC:
           return SqlLiteral.createApproxNumeric(
-              literal.getValueAs(BigDecimal.class).toString(), POS);
+              literal.getValueAs(BigDecimal.class).toPlainString(), POS);
         case BOOLEAN:
           return SqlLiteral.createBoolean(literal.getValueAs(Boolean.class),
               POS);
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 8dc4cc5..e4fe971 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
@@ -408,6 +408,14 @@ public class RelToSqlConverterTest {
     sql(query).ok(expected);
   }
 
+  @Test public void testCastDecimal1() {
+    final String query = "select -0.0000000123\n"
+        + " from \"expense_fact\"";
+    final String expected = "SELECT -1.23E-8\n"
+        + "FROM \"foodmart\".\"expense_fact\"";
+    sql(query).ok(expected);
+  }
+
   /** Test case for
    * <a href="https://issues.apache.org/jira/browse/CALCITE-2713">[CALCITE-2713]
    * JDBC adapter may generate casts on PostgreSQL for VARCHAR type exceeding