[
https://issues.apache.org/jira/browse/CALCITE-3563?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16999496#comment-16999496
]
Julian Hyde commented on CALCITE-3563:
--------------------------------------
bq. shall we make strict check in validation phase before entring into runtime?
I think it is worthwhile validating more strictly when doing code generation
(i.e. when creating a {{MethodCallExpression}}). We will find problems earlier.
There will be some work to do - there are a few places where we call overloaded
methods (e.g. we only have one {{BuiltInMethod.SUBSTRING}} enum constant but
there are 4 {{substring}} methods in {{SqlFunctions}}).
> When resolving method call in calcite runtime, add type check and match
> mechanism for input arguments
> -----------------------------------------------------------------------------------------------------
>
> Key: CALCITE-3563
> URL: https://issues.apache.org/jira/browse/CALCITE-3563
> Project: Calcite
> Issue Type: Sub-task
> Components: core
> Reporter: Feng Zhu
> Assignee: Feng Zhu
> Priority: Major
> Labels: pull-request-available
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> Sub-task targets on following issue.
>
> (1)Validation phase allows a wide range of operand types, but the runtime
> implementation does not cover all cases.
> For example, _*SqlFunction(MOD)*_ adopts
> _*OperandTypes.EXACT_NUMERIC_EXACT_NUMERIC*_.
> {code:java}
> @Test public void test0() {
> final String sql = "SELECT mod(12.5, cast(1 as bigint))";
> CalciteAssert.that()
> .query(sql)
> .returns("EXPR$0=0.5\n");
> }{code}
> We will get:
> {code:java}
> java.lang.RuntimeException: while resolving method 'mod[class
> java.math.BigDecimal, long]' in class class
> org.apache.calcite.runtime.SqlFunctions
> at org.apache.calcite.linq4j.tree.Types.lookupMethod(Types.java:323)
> at org.apache.calcite.linq4j.tree.Expressions.call(Expressions.java:445)
> at
> org.apache.calcite.adapter.enumerable.RexImpTable$MethodNameImplementor.implement(RexImpTable.java:2253)
> at
> org.apache.calcite.adapter.enumerable.RexImpTable.implementCall(RexImpTable.java:1195){code}
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)