You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Ramin Gharib (Jira)" <ji...@apache.org> on 2026/10/07 06:27:00 UTC

[jira] [Created] (FLINK-40934) Table API row() fails when AS aliases produce duplicate field names

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)