This is an automated email from the ASF dual-hosted git repository.

snuyanzin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/flink.git


The following commit(s) were added to refs/heads/master by this push:
     new de793af8458 [FLINK-40373][table] `JSON_VALUE` might fail on code gen 
for null input
de793af8458 is described below

commit de793af84589d32fe712ba598502533fdd84f4cd
Author: Sergey Nuyanzin <[email protected]>
AuthorDate: Wed Aug 12 14:54:58 2026 +0200

    [FLINK-40373][table] `JSON_VALUE` might fail on code gen for null input
---
 .../table/planner/codegen/calls/JsonParseReuse.scala     |  2 +-
 .../table/planner/functions/JsonFunctionsITCase.java     | 16 +++++++++++++---
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git 
a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/JsonParseReuse.scala
 
b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/JsonParseReuse.scala
index 7a340dee049..9da1cabcfbf 100644
--- 
a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/JsonParseReuse.scala
+++ 
b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/planner/codegen/calls/JsonParseReuse.scala
@@ -57,7 +57,7 @@ object JsonParseReuse {
         val lastInputName = CodeGenUtils.newName(ctx, "jsonParsedInput")
         val methodName = CodeGenUtils.newName(ctx, "parseJson")
         val typeName = classOf[SqlJsonUtils.JsonValueContext].getName
-        val inputType = CodeGenUtils.BINARY_STRING
+        val inputType = CodeGenUtils.boxedTypeTermForType(input.resultType)
         ctx.addReusableMember(s"$typeName $varName;")
         ctx.addReusableMember(s"$inputType $lastInputName;")
 
diff --git 
a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/JsonFunctionsITCase.java
 
b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/JsonFunctionsITCase.java
index b1fc7ee891a..9f3b1e377c3 100644
--- 
a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/JsonFunctionsITCase.java
+++ 
b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/JsonFunctionsITCase.java
@@ -41,6 +41,7 @@ import java.nio.charset.StandardCharsets;
 import java.time.Instant;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -50,6 +51,7 @@ import java.util.stream.Stream;
 import static org.apache.flink.table.api.DataTypes.ARRAY;
 import static org.apache.flink.table.api.DataTypes.BINARY;
 import static org.apache.flink.table.api.DataTypes.BOOLEAN;
+import static org.apache.flink.table.api.DataTypes.BYTES;
 import static org.apache.flink.table.api.DataTypes.DECIMAL;
 import static org.apache.flink.table.api.DataTypes.DOUBLE;
 import static org.apache.flink.table.api.DataTypes.FIELD;
@@ -407,8 +409,9 @@ class JsonFunctionsITCase extends BuiltInFunctionTestBase {
     private static TestSetSpec jsonValueSpec() {
         final String jsonValue = getJsonFromResource("/json/json-value.json");
         return TestSetSpec.forFunction(BuiltInFunctionDefinitions.JSON_VALUE)
-                .onFieldsWithData(jsonValue)
-                .andDataTypes(STRING())
+                .onFieldsWithData(
+                        jsonValue, jsonValue.getBytes(StandardCharsets.UTF_8), 
Row.of(jsonValue))
+                .andDataTypes(STRING(), BYTES(), ROW(FIELD("json", STRING())))
 
                 // NULL and invalid types
                 .testResult(
@@ -525,7 +528,14 @@ class JsonFunctionsITCase extends BuiltInFunctionTestBase {
                 .testSqlResult(
                         "JSON_VALUE(f0, '$.type'), JSON_VALUE(f0, '$.age')",
                         List.of("account", "42"),
-                        List.of(STRING(), STRING()));
+                        List.of(STRING(), STRING()))
+                .testSqlResult(
+                        "JSON_VALUE(f1, '$.type'), "
+                                + "JSON_VALUE(f2, '$.type'), "
+                                + "JSON_VALUE(CAST(NULL AS INT), '$.type'), "
+                                + "JSON_VALUE(CAST(NULL AS DATE), '$.type')",
+                        Arrays.asList(null, null, null, null),
+                        List.of(STRING(), STRING(), STRING(), STRING()));
     }
 
     private static List<TestSetSpec> isJsonSpec() {

Reply via email to