[
https://issues.apache.org/jira/browse/FLINK-41086?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ramin Gharib reassigned FLINK-41086:
------------------------------------
Assignee: Yahya Kisana (was: Ramin Gharib)
> JSON_LENGTH and JSON_TYPE fail the job when a JSON path function throws
> -----------------------------------------------------------------------
>
> Key: FLINK-41086
> URL: https://issues.apache.org/jira/browse/FLINK-41086
> Project: Flink
> Issue Type: Bug
> Components: Table SQL / Runtime
> Affects Versions: 2.4.0
> Reporter: Ramin Gharib
> Assignee: Yahya Kisana
> Priority: Major
>
> h3. Problem
> {{JSON_LENGTH(json, path)}} and {{JSON_TYPE(json, path)}} should return NULL
> when the path does not locate a value. {{SqlJsonUtils#jsonLength}} and
> {{SqlJsonUtils#jsonType}} only catch {{InvalidPathException}} around
> {{JsonPath#read}}. Path functions such as {{min()}} or {{avg()}} throw the
> parent {{JsonPathException}} on their own, for example over an empty array.
> {{JsonPathInputTypeStrategy}} only rejects the {{lax}}/{{strict}} prefix, so
> these paths pass validation. The exception escapes and fails the job. With
> {{f0}} as a STRING column:
> ||{{f0}}||Query||Expected||Actual||
> |{{[]}}|{{JSON_LENGTH(f0, '$.min()')}}|NULL|{{JsonPathException: Aggregation
> function attempted to calculate value using empty array}}|
> |{{\{"a": []\}}}|{{JSON_TYPE(f0, '$.a.avg()')}}|NULL|the same exception|
> |{{\{"a": [1, 2]\}}}|{{JSON_LENGTH(f0, '$.a[*].min()')}}|NULL|the same
> exception|
> {{JSON_VALUE}}, {{JSON_QUERY}} and {{JSON_EXISTS}} go through
> {{SqlJsonUtils#jsonApiCommonSyntax}}, which catches any {{Exception}} around
> the same call.
> h3. Proposal
> Catch {{JsonPathException}} in both methods. It is the parent of
> {{InvalidPathException}} and {{PathNotFoundException}}, so the existing cases
> keep returning NULL.
> h3. Tests
> * The queries above in {{JsonFunctionsITCase}}, for SQL and the Table API.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)