Ramin Gharib created FLINK-40934:
------------------------------------
Summary: Table API row() fails when AS aliases produce duplicate
field names
Key: FLINK-40934
URL: https://issues.apache.org/jira/browse/FLINK-40934
Project: Flink
Issue Type: Bug
Components: Table SQL / API
Affects Versions: 2.4.0
Reporter: Ramin Gharib
Assignee: Mika Naylor
FLINK-39253 names the fields of the Table API \{{row()}} function after the
\{{AS}} aliases of its arguments. An argument without an alias still gets
\{{f<index>}}. The names are not de-duplicated, so the call fails when two of
them collide:
{code:java}
row($("a").as("f1"), $("b")) // f1, f1
row($("a").as("x"), $("b").as("x")) // x, x
row($("a"), $("b").as("f0")) // f0, f0
{code}
Each fails during resolution with:
{noformat}
org.apache.flink.table.api.ValidationException: Invalid function call:
...
Caused by: org.apache.flink.table.api.ValidationException: Field names must be
unique. Found duplicates: [f1]
{noformat}
Before FLINK-39253, all three calls resolved and named the fields f0 and f1.
FLINK-39253 is only on master, so the regression would first ship in 2.4.0. SQL
\{{ROW(...)}} is not affected.
Suggested fix: when the resolved names are not unique, fall back to
\{{f<index>}} for every field. That keeps every call that resolved before
FLINK-39253 working. A narrower option is to fall back only for the clashing
field, but then a field's name depends on its neighbours.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)