Mihai Budiu created CALCITE-6238:
------------------------------------
Summary: 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
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)