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 ^'-'^")