[ https://issues.apache.org/jira/browse/CALCITE-6238?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
ASF GitHub Bot updated CALCITE-6238: ------------------------------------ Labels: pull-request-available (was: ) > Exception while evaluating ROUND function > ----------------------------------------- > > Key: CALCITE-6238 > URL: https://issues.apache.org/jira/browse/CALCITE-6238 > Project: Calcite > Issue Type: Bug > Components: core > Affects Versions: 1.36.0 > Reporter: Mihai Budiu > Priority: Minor > Labels: pull-request-available > > The following test in CalciteSqlOperatorTest: > {code:java} > @Test void testRoundFunc() { > final SqlOperatorFixture f = fixture(); > f.checkScalar("round(42, CAST(2 as BIGINT))", 42, "INTEGER NOT NULL"); > } > {code} > causes an exception; here is the relevant part of the stack trace: > {code} > java.sql.SQLException: Error while executing SQL "values (round(42, CAST(2 as > BIGINT)))": Unable to implement EnumerableCalc(expr#0=[{inputs}], > expr#1=[42], expr#2=[2:BIGINT], expr#3=[ROUND($t1, $t2)], EXPR$0=[$t3]): > rowcount = 1.0, cumulative cost = {2.0 rows, 6.0 cpu, 0.0 io}, id = 20 > EnumerableValues(tuples=[[{ 0 }]]): rowcount = 1.0, cumulative cost = {1.0 > rows, 1.0 cpu, 0.0 io}, id = 13 > ... > Suppressed: java.lang.RuntimeException: while resolving method > 'sround[int, long]' in class class org.apache.calcite.runtime.SqlFunctions > at > org.apache.calcite.adapter.enumerable.EnumUtils.call(EnumUtils.java:679) > at > org.apache.calcite.adapter.enumerable.RexImpTable$MethodImplementor.call(RexImpTable.java:2818) > at > org.apache.calcite.adapter.enumerable.RexImpTable$MethodImplementor.implementSafe(RexImpTable.java:2799) > at > org.apache.calcite.adapter.enumerable.RexImpTable$AbstractRexCallImplementor.genValueStatement(RexImpTable.java:3857) > at > org.apache.calcite.adapter.enumerable.RexImpTable$AbstractRexCallImplementor.implement(RexImpTable.java:3819) > {code} > And indeed, SqlFunctions does not have a function sround with this signature. > There are several possible fixes: > - reject calls to ROUND that have a BIGINT second argument > - have the validator insert an implicit cast for the second argument to > INTEGER > - implement more Java versions of the SROUND function in SqlFunctions. > Probably many more. > Which one of these is the right one? I suspect this problem applies to other > SQL functions as well. -- This message was sent by Atlassian Jira (v8.20.10#820010)