This is an automated email from the ASF dual-hosted git repository.
rubenql 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 5b9e768d72 [CALCITE-5877] AssertionError during MOD operation if
result scale is greater than maximum numeric scale
5b9e768d72 is described below
commit 5b9e768d72bd5ed7aa3ca7aa6317060b6fc2b627
Author: Mihai Budiu <[email protected]>
AuthorDate: Tue Aug 1 10:59:40 2023 -0700
[CALCITE-5877] AssertionError during MOD operation if result scale is
greater than maximum numeric scale
Signed-off-by: Mihai Budiu <[email protected]>
---
.../org/apache/calcite/rel/type/RelDataTypeSystem.java | 4 +---
.../apache/calcite/rel/rel2sql/RelToSqlConverterTest.java | 14 ++++++++++++--
2 files changed, 13 insertions(+), 5 deletions(-)
diff --git
a/core/src/main/java/org/apache/calcite/rel/type/RelDataTypeSystem.java
b/core/src/main/java/org/apache/calcite/rel/type/RelDataTypeSystem.java
index 9332eaba20..f67f1cd286 100644
--- a/core/src/main/java/org/apache/calcite/rel/type/RelDataTypeSystem.java
+++ b/core/src/main/java/org/apache/calcite/rel/type/RelDataTypeSystem.java
@@ -379,9 +379,7 @@ public interface RelDataTypeSystem {
return type2;
}
- int scale = Math.max(s1, s2);
- assert scale <= getMaxNumericScale();
-
+ int scale = Math.min(Math.max(s1, s2), getMaxNumericScale());
int precision = Math.min(p1 - s1, p2 - s2) + Math.max(s1, s2);
precision = Math.min(precision, getMaxNumericPrecision());
assert precision > 0;
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 8e57e64c9e..92a934c707 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
@@ -4760,8 +4760,18 @@ class RelToSqlConverterTest {
sql(sql).ok(expected);
}
- // Test for [CALCITE-5651] Inferred scale for decimal should
- // not exceed maximum allowed scale
+ /** Test for <a
href="https://issues.apache.org/jira/browse/CALCITE-5877">[CALCITE-5877]
+ * AssertionError during MOD operation if result scale
+ * is greater than maximum numeric scale</a>. */
+ @Test void testNumericScaleMod() {
+ final String sql = "SELECT MOD(CAST(2 AS DECIMAL(39, 20)), 2)";
+ final String expected = "SELECT MOD(2, 2)\nFROM (VALUES (0)) AS \"t\"
(\"ZERO\")";
+ sql(sql).withPostgresqlModifiedDecimalTypeSystem()
+ .ok(expected);
+ }
+
+ /** Test for <a
href="https://issues.apache.org/jira/browse/CALCITE-5651">[CALCITE-5651]
+ * Inferred scale for decimal should not exceed maximum allowed scale</a>. */
@Test void testNumericScale() {
final String sql = "WITH v(x) AS (VALUES('4.2')) "
+ " SELECT x1 + x2 FROM v AS v1(x1), v AS V2(x2)";