You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@flink.apache.org by "Gustavo de Morais (Jira)" <ji...@apache.org> on 2026/07/24 10:51:00 UTC
[jira] [Created] (FLINK-40233) JSON functions return NULL when sharing a parsed input
Gustavo de Morais created FLINK-40233:
-----------------------------------------
Summary: JSON functions return NULL when sharing a parsed input
Key: FLINK-40233
URL: https://issues.apache.org/jira/browse/FLINK-40233
Project: Flink
Issue Type: Bug
Components: Table SQL / API
Affects Versions: 2.3.0
Reporter: Gustavo de Morais
Assignee: Gustavo de Morais
When two JSON functions share the same input in one query, the second call can wrongly return NULL.
The parse result is cached and reused to avoid re-parsing the same input. But if an earlier JSON call short-circuits and returns NULL before parsing (for example a NULL path argument), the cache is marked as populated while the parse never actually ran. The second function then reuses an empty parse result and returns NULL.
{code:java}
SELECT json_value(v, cast(null as string)), json_length(v)
FROM (values('{"a":1, "b":2}')) AS t(v);
-- returns (NULL, NULL), expected (NULL, 2)
SELECT json_value(v, cast(null as string)), json_value(v, '$.a')
FROM (values('{"a":1, "b":2}')) AS t(v);
-- returns (NULL, NULL), expected (NULL, 1)
SELECT json_value(v, cast(null as string)), json_query(v, '$.a')
FROM (values('{"a":{"b":1}, "b":2}')) AS t(v);
-- returns (NULL, NULL), expected (NULL, {"b":1}) {code}
The reusable-parse tracking in {{CodeGeneratorContext}} records the input as already parsed even though the first call exited before parsing it.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)