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
- Check the emitted event type before enabling schema evolution to Oracle; only ADD/MODIFY column events are supported
- Convert or filter unsupported events (rename -> modify or drop+add) in the sink schema-change handling
- Upgrade SeaTunnel if support for the event type was added in a newer version
- 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
- Only enable schema evolution with sources emitting ADD/MODIFY column events
- Map rename/drop events to supported events before applying
- Test schema-change pipelines against the target dialect
- Pin SeaTunnel versions and review dialect event support before upgrading sources
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
- Failed to read schema for table %s
- No result returned after running query [%s]
- Failed to build the split data read statement.
- Invalid Oracle JDBC URL format: [%s], expected pattern: jdbc
- oracle_insert_mode=APPEND_VALUES only supports generated INS
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/6ec0c24e0b950804.
Report an issue: GitHub.