[ https://issues.apache.org/jira/browse/CALCITE-5877?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mihai Budiu updated CALCITE-5877: --------------------------------- Fix Version/s: 1.36.0 > Calcite crashes with AssertionError when compiling MOD with arguments with > large scales > --------------------------------------------------------------------------------------- > > Key: CALCITE-5877 > URL: https://issues.apache.org/jira/browse/CALCITE-5877 > Project: Calcite > Issue Type: Bug > Components: core > Affects Versions: 1.35.0 > Reporter: Mihai Budiu > Priority: Minor > Labels: pull-request-available > Fix For: 1.36.0 > > > Adding the following test to RelToSqlConverterTest produces an > AssertionFailure: > {code:java} > @Test void testNumericScaleMod() { > final String sql = "SELECT MOD(CAST(2 AS DECIMAL(39, 20)), 2)"; > final String expected = ""; > sql(sql).withPostgresqlModifiedDecimalTypeSystem() > .ok(expected); > } > {code} > The exception is here: > {code:java} > java.lang.AssertionError > at > org.apache.calcite.rel.type.RelDataTypeSystem.deriveDecimalModType(RelDataTypeSystem.java:383) > at > org.apache.calcite.sql.type.ReturnTypes.lambda$static$11(ReturnTypes.java:849) > at > org.apache.calcite.sql.type.SqlTypeTransformCascade.inferReturnType(SqlTypeTransformCascade.java:58) > at > org.apache.calcite.sql.type.SqlReturnTypeInferenceChain.inferReturnType(SqlReturnTypeInferenceChain.java:55) > {code} > In this line: > {code:java} > int scale = Math.max(s1, s2); > assert scale <= getMaxNumericScale(); > {code} > I suspect that doing a Math.max with the getMaxNumericScale (instead of an > Assert) is sufficient to fix this particular problem. The question is whether > the compiler should really enforce the invariant that this assertion checks. -- This message was sent by Atlassian Jira (v8.20.10#820010)