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 ef4e64c5b01 [FLINK-40606][table-planner] Fix code generation for
binary array casts
ef4e64c5b01 is described below
commit ef4e64c5b018a6f82888e4d07e4c7273d400a8ec
Author: dylanhz <[email protected]>
AuthorDate: Thu Sep 10 02:35:52 2026 +0800
[FLINK-40606][table-planner] Fix code generation for binary array casts
---
.../planner/functions/casting/CastRuleUtils.java | 5 ++++-
.../planner/functions/casting/CastRulesTest.java | 25 ++++++++++++++++++++++
2 files changed, 29 insertions(+), 1 deletion(-)
diff --git
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/CastRuleUtils.java
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/CastRuleUtils.java
index 1126492cfed..cda0bd3ddf3 100644
---
a/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/CastRuleUtils.java
+++
b/flink-table/flink-table-planner/src/main/java/org/apache/flink/table/planner/functions/casting/CastRuleUtils.java
@@ -72,7 +72,10 @@ final class CastRuleUtils {
}
static String newArray(String innerType, String arraySize) {
- return "new " + innerType + "[" + arraySize + "]";
+ final int arrayIndex = innerType.indexOf('[');
+ final String baseType = arrayIndex < 0 ? innerType :
innerType.substring(0, arrayIndex);
+ final String dimensions = arrayIndex < 0 ? "" :
innerType.substring(arrayIndex);
+ return "new " + baseType + "[" + arraySize + "]" + dimensions;
}
static String stringConcat(Object... args) {
diff --git
a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/casting/CastRulesTest.java
b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/casting/CastRulesTest.java
index 440ff8a5826..f5e98a0fc0a 100644
---
a/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/casting/CastRulesTest.java
+++
b/flink-table/flink-table-planner/src/test/java/org/apache/flink/table/planner/functions/casting/CastRulesTest.java
@@ -1543,6 +1543,21 @@ class CastRulesTest {
null,
fromString("2021-09-24
14:34:56.123456")
})),
+ CastTestSpecBuilder.testCastTo(ARRAY(VARBINARY(1)))
+ .fromCase(ARRAY(BYTES()), null, null)
+ .fromCase(
+ ARRAY(BYTES()),
+ new GenericArrayData(new byte[][] {}),
+ new GenericArrayData(new byte[][] {}))
+ .fromCase(
+ ARRAY(BYTES()),
+ new GenericArrayData(new byte[][] {{1}, {2,
3}, null, {}}),
+ new GenericArrayData(new byte[][] {{1}, {2},
null, {}})),
+ CastTestSpecBuilder.testCastTo(ARRAY(BINARY(2).notNull()))
+ .fromCase(
+ ARRAY(BYTES().notNull()),
+ new GenericArrayData(new byte[][] {{1}, {2, 3,
4}}),
+ new GenericArrayData(new byte[][] {{1, 0}, {2,
3}})),
CastTestSpecBuilder.testCastTo(ARRAY(BIGINT().nullable()))
.fromCase(
ARRAY(INT().nullable()),
@@ -2119,6 +2134,16 @@ class CastRulesTest {
new GenericArrayData(new int[] {1, 2, 3}))
// a VARIANT null element fails a NOT NULL element type
.fail(VARIANT(), VARIANT_INT_ARRAY_WITH_NULL,
TableRuntimeException.class),
+ CastTestSpecBuilder.testCastTo(ARRAY(BYTES()))
+ .fromCase(
+ VARIANT(),
+ VARIANT_BUILDER
+ .array()
+ .add(VARIANT_BUILDER.of(new byte[]
{1}))
+ .add(VARIANT_BUILDER.of(new byte[] {2,
3}))
+ .add(VARIANT_BUILDER.ofNull())
+ .build(),
+ new GenericArrayData(new byte[][] {{1}, {2,
3}, null})),
CastTestSpecBuilder.testCastTo(ARRAY(STRING()))
// each element renders to string like the scalar cast
.fromCase(