[ 
https://issues.apache.org/jira/browse/FLINK-41301?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Yuepeng Pan updated FLINK-41301:
--------------------------------
    Fix Version/s: 2.4.0
                   2.5.0

> Throw TableRuntimeException for every failed cast from VARIANT
> --------------------------------------------------------------
>
>                 Key: FLINK-41301
>                 URL: https://issues.apache.org/jira/browse/FLINK-41301
>             Project: Flink
>          Issue Type: Improvement
>          Components: Table SQL / Runtime
>            Reporter: Ramin Gharib
>            Assignee: Ramin Gharib
>            Priority: Major
>             Fix For: 2.4.0, 2.5.0
>
>
> h3. Problem
> A failed cast from {{VARIANT}} throws a different exception type depending on 
> the target. For most targets, {{FromVariantConverter}} throws a 
> {{TableRuntimeException}} built by {{VariantCastUtils.unsupportedKind}}. The 
> {{BOOLEAN}}, {{DATE}}, {{BINARY}} and {{VARBINARY}} readers call the strict 
> {{Variant}} getters instead, which throw a {{VariantTypeException}} with the 
> getter's own message. A malformed variant escapes 
> {{FromVariantConverter#convert}} the same way. The Javadoc of {{convert}} 
> documents both.
> ||Query||Exception||Message||
> |{{CAST(PARSE_JSON('"abc"') AS INT)}}|{{TableRuntimeException}}|{{Cannot cast 
> a VARIANT STRING value to INTEGER. ...}}|
> |{{CAST(PARSE_JSON('"abc"') AS BOOLEAN)}}|{{VariantTypeException}}|{{Expected 
> type BOOLEAN but got STRING}}|
> {{BYTES}} and {{DATE}} fail like {{BOOLEAN}}, because {{getBytes}} and 
> {{getDate}} check the type the same way. The {{VariantTypeException}} message 
> names neither the cast nor the target SQL type, and its type differs from 
> every other failed cast from {{VARIANT}}. {{TRY_CAST}} is not affected, 
> because it catches any {{Throwable}}.
> h3. Proposal
> * Have the {{BOOLEAN}}, {{DATE}} and binary readers check the kind and throw 
> {{unsupportedKind}}, like every other reader.
> * In {{FromVariantConverter#convert}}, wrap a {{VariantTypeException}} that 
> still escapes a reader, such as for a malformed variant, in a 
> {{TableRuntimeException}}. {{ToVariantConverter}} already does this for the 
> other direction.
> * Update the Javadoc of {{convert}}.
> FLINK-40319 and FLINK-41281 would let some of these kinds reach the target. 
> The kinds that remain still need the error.
> h3. Tests
> * A cast to {{BOOLEAN}}, {{DATE}}, {{BINARY}} and {{VARBINARY}} from a kind 
> the target doesn't accept fails with a {{TableRuntimeException}} and the 
> {{unsupportedKind}} message.
> * A malformed variant fails with a {{TableRuntimeException}}.



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to