pentaho/pentaho-kettle · error · KettleDatabaseException
MySQLDatabaseMeta.Exception.LegacyColumnNameNoDBMetaDataException
MySQLDatabaseMeta.Exception.LegacyColumnNameNoDBMetaDataException
Error message
MySQLDatabaseMeta.Exception.LegacyColumnNameNoDBMetaDataException (localized via BaseMessages)
What it means
Thrown by MySQLDatabaseMeta.getLegacyColumnName when the JDBC DatabaseMetaData argument is null. The method needs the driver's major version (from DatabaseMetaData) to decide between getColumnLabel and getColumnName, so a null argument causes a localized KettleDatabaseException.
Solutions
- Acquire DatabaseMetaData from an open Connection and null-check it before calling
- Fix upstream code that produced the null metadata so a valid connection is always available
- If driver version is known another way, use the appropriate ColumnLabel/ColumnName path directly instead of this method
Example fix
// before
String name = meta.getLegacyColumnName(null, rsMetaData, index);
// after
DatabaseMetaData dbMetaData = connection.getMetaData();
if (dbMetaData != null) {
String name = meta.getLegacyColumnName(dbMetaData, rsMetaData, index);
} Defensive patterns
Strategy: type-guard
Validate before calling
DatabaseMetaData dbMeta = connection != null ? connection.getMetaData() : null;
if (dbMeta == null) throw new IllegalStateException("No DatabaseMetaData: connection closed or invalid"); Type guard
function hasDbMetaData(Connection c) { try { return c != null && c.getMetaData() != null; } catch (SQLException e) { return false; } } Try / catch
try {
String name = mysqlMeta.getLegacyColumnName(dbMetaData, rsMetaData, index);
} catch (KettleDatabaseException e) {
log.error("No DB metadata available for MySQL legacy column lookup", e);
} Prevention
- Verify MySQL Connector/J connectivity before metadata operations
- Obtain DatabaseMetaData from an open Connection and null-check it
- Do not pass null metadata from mocks/factories into production paths
When it happens
Trigger: Calling getLegacyColumnName(null, rsMetaData, index) — the caller had no DatabaseMetaData from its Connection (closed connection or getMetaData() returned null).
Common situations: Custom plugin/fork code calling the legacy API without a live connection; MySQL Connector/J connection failure leaving metadata null; test mocks returning null.
Related errors
- MySQLDatabaseMeta.Exception.LegacyColumnNameNoDBMetaDataException
- MySQLDatabaseMeta.Exception.LegacyColumnNameNoRSMetaDataException
- MySQLDatabaseMeta.Exception.LegacyColumnNameNoRSMetaDataException
- MySQLDatabaseMeta.Exception.LegacyColumnNameException
- Annotation
AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13).
Data as JSON: /api/errors/c4cee032f810c8ca.
Report an issue: GitHub.
Appendix: source
Thrown at core/src/main/java/org/pentaho/di/core/database/MySQLDatabaseMeta.java:525
}
@Override
public int getMaxTextFieldLength() {
return Integer.MAX_VALUE;
}
/**
* Returns the column name for a MySQL field checking if the driver major version is "greater than" or "lower or equal" to 3.
*
* @param dbMetaData
* @param rsMetaData
* @param index
* @return The column label if version is greater than 3 or the column name if version is lower or equal to 3.
* @throws KettleDatabaseException
*/
public String getLegacyColumnName( DatabaseMetaData dbMetaData, ResultSetMetaData rsMetaData, int index ) throws KettleDatabaseException {
if ( dbMetaData == null ) {
throw new KettleDatabaseException( BaseMessages.getString( PKG, "MySQLDatabaseMeta.Exception.LegacyColumnNameNoDBMetaDataException" ) );
}
if ( rsMetaData == null ) {
throw new KettleDatabaseException( BaseMessages.getString( PKG, "MySQLDatabaseMeta.Exception.LegacyColumnNameNoRSMetaDataException" ) );
}
try {
return dbMetaData.getDriverMajorVersion() > 3 ? rsMetaData.getColumnLabel( index ) : rsMetaData.getColumnName( index );
} catch ( Exception e ) {
throw new KettleDatabaseException( String.format( "%s: %s", BaseMessages.getString( PKG, "MySQLDatabaseMeta.Exception.LegacyColumnNameException" ), e.getMessage() ), e );
}
}
}
View on GitHub (pinned to f3058517a1)