Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Add new getTargetColumns to DynamicTableSink#Context.

Code Block
languagejava
        /**
         * Returns an array of column index paths related to user specified target column list or an
         * empty array when not specified. The indices are 0-based and support composite columns
         * within (possibly nested) structures.
         *
         * <p>This information comes from the column list of the DML clause, e.g., for a sink table
         * t1 which schema is: {@code a STRING, b ROW < b1 INT, b2 STRING>, c BIGINT}
         *
         * <ul>
         *   <li>insert: 'insert into t1(a, b.b2) ...', the column list will be 'a, b.b2', and will
         *       return {@code [[0], [1, 1]]}. The column list will be empty for 'insert into target
         *       select ...'.
         *   <li>update: 'update target set a=1, b.b1=2 where ...', the column list will be 'a,
         *       b.b1', will return {@code [[0], [1, 0]]}.
         * </ul>
         *
         * <p>Note: will always return empty array for the delete statement because it has no column
         * list.
         */
        int[][] getTargetColumns();

...

The internal SinkRuntimeProviderContext will support new constructor with targetColumns param, this can be used by connectors to recognize the user-specified column list.

Note: currently nested columns in column list of an insert statement is unsupported (as described in FLINK-31301), so we can make this flip support simple columns first and then support nested columns after FLINK-31301 fixed. 

Compatibility, Deprecation, and Migration Plan

...