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 <mbu...@gmail.com> 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 <mbu...@gmail.com> --- .../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)";