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)";

Reply via email to