[
https://issues.apache.org/jira/browse/FLINK-14036?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16927354#comment-16927354
]
Jingsong Lee commented on FLINK-14036:
--------------------------------------
First, in the table api, canSafelyCast is invoked PlannerTypeInferenceUtilImpl,
it is just for safely cast, not loose any precision. So, we can not do the
safely cast from decimal to double, it will loose precision. The
org.apache.flink.table.planner.expressions.Log expect double argument types.
The fail is reasonable.
Second, in the sql, FlinkSqlOperatorTable(Not SqlStdOperatorTable) has LOG
function, you can see it:
{code:java}
public static final SqlFunction LOG = new SqlFunction(
"LOG",
SqlKind.OTHER_FUNCTION,
ReturnTypes.DOUBLE_NULLABLE,
null,
OperandTypes.or(
OperandTypes.NUMERIC,
OperandTypes.family(SqlTypeFamily.NUMERIC, SqlTypeFamily.NUMERIC)),
SqlFunctionCategory.NUMERIC);
{code}
It require NUMERIC, not only double.
> 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)