[
https://issues.apache.org/jira/browse/FLINK-41243?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ramin Gharib updated FLINK-41243:
---------------------------------
Fix Version/s: 2.4.0
> VARIANT field access with a non-literal key fails in code generation
> --------------------------------------------------------------------
>
> Key: FLINK-41243
> URL: https://issues.apache.org/jira/browse/FLINK-41243
> Project: Flink
> Issue Type: Bug
> Components: Table SQL / Planner
> Affects Versions: 2.3.0
> Reporter: Ramin Gharib
> Assignee: Ramin Gharib
> Priority: Major
> Fix For: 2.4.0, 2.5.0
>
>
> VARIANT field access accepts any character string key, but the code
> generation only handles a literal key. A column or any other expression as
> the key fails while the planner generates code:
> {code:sql}
> -- v VARIANT, k STRING
> SELECT v[k] FROM t;
> SELECT v[LOWER(k)] FROM t;
> {code}
> {noformat}
> java.util.NoSuchElementException: None.get
> at
> org.apache.flink.table.planner.codegen.calls.ScalarOperatorGens$.generateVariantGet(ScalarOperatorGens.scala:1750)
> at
> org.apache.flink.table.planner.codegen.ExprCodeGenerator.generateCallExpression(ExprCodeGenerator.scala:865)
> {noformat}
> The Table API fails the same way for $("v").at($("k")). A NULL literal key
> fails with a NullPointerException at the same place:
> {code:sql}
> SELECT v[CAST(NULL AS STRING)] FROM t;
> {code}
> Validation accepts these keys in SqlItemOperator and
> ItemAtIndexArgumentTypeStrategy. The code generation reads the key's literal
> value without checking that it is a literal, since FLINK-37924. A key that is
> not a literal should read the field per row.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)