dylanhz created FLINK-40606:
-------------------------------
Summary: Casting binary arrays generates invalid Java array
allocation
Key: FLINK-40606
URL: https://issues.apache.org/jira/browse/FLINK-40606
Project: Flink
Issue Type: Bug
Components: Table SQL / Planner
Affects Versions: 2.4.0
Reporter: dylanhz
Casting an array to {{ARRAY<VARBINARY(1)>}} fails during generated code
compilation.
Reproduced on community master ({{e57428cafc9}}, Flink {{2.4-SNAPSHOT}}, Java
17):
{code:sql}
SELECT event_id,
CAST(ARRAY[byte_a, byte_b] AS ARRAY<VARBINARY(1)>)
FROM (VALUES
('a', CAST(X'01' AS BYTES), CAST(X'0203' AS BYTES)),
('b', CAST(X'0405' AS BYTES), CAST(X'06' AS BYTES))
) AS v(event_id, byte_a, byte_b);
{code}
*Expected:* Two rows with each binary array element truncated to at most one
byte.
*Actual:*
{noformat}
CompileException: Line 80, Column 44: '{' expected instead of '['
{noformat}
{{ArrayToArrayCastRule}} calls {{CastRuleUtils.newArray()}} with element type
{{byte[]}}, producing:
{code:java}
byte[][] objArray$8 = new byte[][arraySize$7];
{code}
The allocation should be {{new byte[arraySize$7][]}}.
Casting to {{ARRAY<BYTES>}} does not expose this on current master because
{{IdentityCastRule}} bypasses the element conversion.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)