[
https://issues.apache.org/jira/browse/FLINK-30452?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17649222#comment-17649222
]
luoyuxia commented on FLINK-30452:
----------------------------------
We can just return void type instead of string type while doing type inference.
But HiveParserCalcitePlanner#convertNullLiteral will try to convert null
literal to string, then the concern will be for null, the argument type will be
null type, but the actuall passed value's type will be string.
But from the call stack of method HiveParserCalcitePlanner#convertNullLiteral,
I can conclude such case won't happen for the conversion.
> Wrong argument type is used when call Hive's function
> -----------------------------------------------------
>
> Key: FLINK-30452
> URL: https://issues.apache.org/jira/browse/FLINK-30452
> Project: Flink
> Issue Type: Sub-task
> Components: Connectors / Hive
> Reporter: luoyuxia
> Priority: Major
>
> While calling Hive function, if the argument is void type, it will be
> [considered as string type|#L553]], which may bring wrong type inference and
> thus may well cause other problems.
>
> For example,
> {code:java}
> timestamp(if(a = 0, null, a))
> {code}
> the argument for function `if` is `null` and `a`, null is void type, `a` is
> bigint type represents a timestamp, so the inferred return type should be
> bigint for the `if` function will ignore void type and just consider the
> other argument type. But we consider the void type as string type, the
> return type inferred will be string according to the `if` function inference
> logic.
> And then when we try to converted the value returned by `if(a = 0, null, a)`
> to timestamp, the unexpected behavior will happen:
> Since we infer the returned value of `if(a = 0, null, a)` as string, so
> `if(a = 0, null, a)` will return some thing like "1671058803926",but
> cast ("1671058803926" as timestamp) will return null.
>
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)