apache/seatunnel · error · IllegalArgumentException

Unsupported AlterTableColumnEvent: ${event}

Error message

Unsupported AlterTableColumnEvent: ${event}

What it means

buildUpdateColumnSQL only knows how to translate AlterTableModifyColumnEvent and AlterTableAddColumnEvent into Oracle ALTER TABLE DDL; any other AlterTableColumnEvent subclass reaches the else branch and throws IllegalArgumentException. It guards the schema-evolution event dispatch from being silently ignored.

Source

Thrown at seatunnel-connectors-v2/connector-jdbc/src/main/java/org/apache/seatunnel/connectors/seatunnel/jdbc/internal/dialect/oracle/OracleDialect.java:456

                log.info("Executing modify column SQL: {}", sql);
                statement.execute(sql);
            }
        }
    }

    private String buildUpdateColumnSQL(
            Connection connection, TablePath tablePath, AlterTableColumnEvent event)
            throws SQLException {
        String actionType;
        Column column;
        if (event instanceof AlterTableModifyColumnEvent) {
            actionType = "MODIFY";
            column = ((AlterTableModifyColumnEvent) event).getColumn();
        } else if (event instanceof AlterTableAddColumnEvent) {
            actionType = "ADD";
            column = ((AlterTableAddColumnEvent) event).getColumn();
        } else {
            throw new IllegalArgumentException("Unsupported AlterTableColumnEvent: " + event);
        }
        String sourceDialectName = event.getSourceDialectName();
        boolean sameCatalog = StringUtils.equals(dialectName(), sourceDialectName);
        BasicTypeDefine typeDefine = getTypeConverter().reconvert(column);
        String columnType = sameCatalog ? column.getSourceType() : typeDefine.getColumnType();
        StringBuilder sqlBuilder =
                new StringBuilder()
                        .append("ALTER TABLE  ")
                        .append(tableIdentifier(tablePath))
                        .append(" ")
                        .append(actionType)
                        .append(" ")
                        .append(quoteIdentifier(column.getName()))
                        .append(" ")
                        .append(columnType);
        // Only decorate with default value when source dialect is same as sink dialect
        // Todo Support for cross-database default values for ddl statements
        if (column.getDefaultValue() != null && sameCatalog) {

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Check the emitted event type before enabling schema evolution to Oracle; only ADD/MODIFY column events are supported
  2. Convert or filter unsupported events (rename -> modify or drop+add) in the sink schema-change handling
  3. Upgrade SeaTunnel if support for the event type was added in a newer version
  4. If you control the event source, emit AlterTableAddColumnEvent/AlterTableModifyColumnEvent instead of the unsupported subtype

Example fix

// before
if (event instanceof AlterTableRenameColumnEvent) {
    applySchemaChange(conn, event); // hits IllegalArgumentException
}
// after
if (event instanceof AlterTableAddColumnEvent || event instanceof AlterTableModifyColumnEvent) {
    applySchemaChange(conn, event);
} else {
    log.warn("Skipping unsupported schema change event: {}", event);
}
Defensive patterns

Strategy: validation

Validate before calling

if (!(event instanceof AlterTableAddColumnEvent) && !(event instanceof AlterTableModifyColumnEvent)) {
    throw new IllegalArgumentException("Event not supported by Oracle dialect: " + event.getClass().getSimpleName());
}

Type guard

boolean supported = event instanceof AlterTableAddColumnEvent || event instanceof AlterTableModifyColumnEvent;

Try / catch

try {
    applySchemaChange(conn, event);
} catch (IllegalArgumentException e) {
    log.warn("Unsupported schema change skipped: {}", e.getMessage());
}

Prevention

When it happens

Trigger: applySchemaChange is invoked with an AlterTableColumnEvent that is neither AlterTableModifyColumnEvent nor AlterTableAddColumnEvent, e.g. a rename-column or drop-column event from a CDC source.

Common situations: Schema evolution enabled with a connector that emits unsupported event types (RENAME/DROP); a newer event type added upstream but not handled by the Oracle dialect; event routed to the wrong dialect.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/6ec0c24e0b950804. Report an issue: GitHub.