Leonid Chistov created CALCITE-6114:
---------------------------------------

             Summary: RexExecutor fails on interval expressions with fractional 
second parts 
                 Key: CALCITE-6114
                 URL: https://issues.apache.org/jira/browse/CALCITE-6114
             Project: Calcite
          Issue Type: Bug
    Affects Versions: 1.35.0
            Reporter: Leonid Chistov


Consider query like:
{code:java}
select interval 1.234 second as inr
from "scott".emp {code}
When trying to run expression reduce step on that query, RexExecutor fails with 
following error:
{code:java}
Exception in thread "main" java.lang.RuntimeException: while resolving method 
'multiply[class java.math.BigDecimal, long]' in class class 
org.apache.calcite.runtime.SqlFunctions
    at org.apache.calcite.linq4j.tree.Types.lookupMethod(Types.java:318)
    at org.apache.calcite.linq4j.tree.Expressions.call(Expressions.java:449)
    at 
org.apache.calcite.adapter.enumerable.RexImpTable$BinaryImplementor.implementSafe(RexImpTable.java:2797)
    at 
org.apache.calcite.adapter.enumerable.RexImpTable$AbstractRexCallImplementor.genValueStatement(RexImpTable.java:3691)
    at 
org.apache.calcite.adapter.enumerable.RexImpTable$AbstractRexCallImplementor.implement(RexImpTable.java:3643)
    at 
org.apache.calcite.adapter.enumerable.RexToLixTranslator.visitCall(RexToLixTranslator.java:1184)
    at 
org.apache.calcite.adapter.enumerable.RexToLixTranslator.visitCall(RexToLixTranslator.java:101)
    at org.apache.calcite.rex.RexCall.accept(RexCall.java:189)
    at 
org.apache.calcite.adapter.enumerable.RexToLixTranslator.visitLocalRef(RexToLixTranslator.java:1060)
    at 
org.apache.calcite.adapter.enumerable.RexToLixTranslator.visitLocalRef(RexToLixTranslator.java:101)
    at org.apache.calcite.rex.RexLocalRef.accept(RexLocalRef.java:77)
    at 
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate(RexToLixTranslator.java:253)
    at 
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translate(RexToLixTranslator.java:247)
    at 
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translateList(RexToLixTranslator.java:899)
    at 
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translateProjects(RexToLixTranslator.java:201)
    at 
org.apache.calcite.adapter.enumerable.RexToLixTranslator.translateProjects(RexToLixTranslator.java:209)
 {code}
The reason why expression reduction step is required for such expressions is 
that interval expressions are internally translated to multiplication 
expressions like:
{code:java}
*(1.234:decimal32(4, 3), 1000:interval_second(2, 6)) {code}
In order to reproduce the issue, one can add following test case to the 
"misc.iq" file and run CoreQuidemTest:
{code:java}
!ok

# Interval expressions
select interval 1.234 second as inr
from "scott".emp;
+-------+------+------------+---------------------+
| INR                                             |
+-------+------+------------+---------------------+
|  1.234                                          |
+-------+------+------------+---------------------+
(1 rows) {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to