[
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)