[
https://issues.apache.org/jira/browse/FLINK-14036?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16927346#comment-16927346
]
Leonard Xu commented on FLINK-14036:
------------------------------------
[~lzljs3620320] Thanks for your reply.
Well,I debug this case and found it really caused by
TypeCoercion.canSafelyCast(), You can set a breakpoint here and repeat it with
following simple code:
{code:java}
@Test
def testApi(): Unit ={
assert(TypeCoercion.canSafelyCast(new DecimalType(10,0),new DoubleType))
}{code}
BTW, Sql also requires Double returnTypes , you could see detail in
org.apache.calcite.sql.fun.SqlStdOperatorTable
> function log(f0,f1) in Table API do not support decimal type
> ---------------------------------------------------------------
>
> Key: FLINK-14036
> URL: https://issues.apache.org/jira/browse/FLINK-14036
> Project: Flink
> Issue Type: Bug
> Components: Table SQL / API, Table SQL / Planner
> Affects Versions: 1.9.0
> Reporter: Leonard Xu
> Priority: Major
> Fix For: 1.10.0
>
>
> function log(f0,f1) in Table API module do not support decimal type, but it
> works in Table SQL module. The following code will run fail:
>
> {code:java}
> testTableApi(
> 'f0.log(f1),
> "log(f0,f1)",
> "2.0")
> override def testData: Row = {
> val testData = new Row(2)
> testData.setField(0, BigDecimal("3").bigDecimal)
> testData.setField(1, 9)
> testData
> }
>
> override def typeInfo: RowTypeInfo = {
> new RowTypeInfo(
> /* 0 */ fromLogicalTypeToTypeInfo(DECIMAL(1, 0)),
> /* 1 */ Types.INT
> )
> }{code}
>
> The real cause is that the return type of *log()* function must be Double
> type,planner will cast all oprands' type to Double Type before function
> execution, however *org.apache.flink.table.planner.typeutils.TypeCoercion*
> can not yet cast Decimal type to Double type。
--
This message was sent by Atlassian Jira
(v8.3.2#803003)