pentaho/pentaho-kettle · error · KettleDatabaseException

MySQLDatabaseMeta.Exception.LegacyColumnNameNoRSMetaDataException

MySQLDatabaseMeta.Exception.LegacyColumnNameNoRSMetaDataException

Error message

MySQLDatabaseMeta.Exception.LegacyColumnNameNoRSMetaDataException (localized via BaseMessages)

What it means

Thrown by MariaDBDatabaseMeta.getLegacyColumnName when the ResultSetMetaData argument is null. Without result set metadata there is no column label/name to return, so the method fails fast with a localized KettleDatabaseException.

Solutions

  1. Obtain ResultSetMetaData via resultSet.getMetaData() and verify it is non-null before calling getLegacyColumnName
  2. Ensure the query actually produced a ResultSet (executeQuery, not executeUpdate) before reading column metadata
  3. Refactor to read metadata immediately after executing the statement, while the ResultSet is still open

Example fix

// before
String label = meta.getLegacyColumnName(dbMetaData, null, index);
// after
ResultSetMetaData rsMetaData = resultSet.getMetaData();
if (rsMetaData != null) {
  String label = meta.getLegacyColumnName(dbMetaData, rsMetaData, index);
}
Defensive patterns

Strategy: type-guard

Validate before calling

if (resultSet == null || resultSet.getMetaData() == null) throw new IllegalStateException("ResultSet or its metadata is null");

Type guard

function hasRsMetaData(ResultSet rs) { try { return rs != null && rs.getMetaData() != null; } catch (SQLException e) { return false; } }

Try / catch

try {
  String label = meta.getLegacyColumnName(dbMetaData, rsMetaData, index);
} catch (KettleDatabaseException e) {
  log.error("No ResultSet metadata available for legacy column lookup", e);
}

Prevention

When it happens

Trigger: Calling getLegacyColumnName(dbMetaData, null, index) — e.g. after a query that returned no ResultSet, or rs.getMetaData() returned null.

Common situations: Working with a closed/empty ResultSet, a statement executed without a result set, or refactored code that lost the ResultSet reference before reading column labels.

Related errors


AI-assisted analysis of pentaho/pentaho-kettle@f3058517a1 (2026-09-13). Data as JSON: /api/errors/335fbb0fa2bfba5c. Report an issue: GitHub.

Appendix: source

Thrown at core/src/main/java/org/pentaho/di/core/database/MariaDBDatabaseMeta.java:68

    return !( cause != null && SHORT_MESSAGE_EXCEPTIONS.contains( cause.getClass().getName() ) );
  }

  /**
   * Returns the column name for a MariaDB field.
   *
   * @param dbMetaData
   * @param rsMetaData
   * @param index
   * @return The column label.
   * @throws KettleDatabaseException
   */
  @Override 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 rsMetaData.getColumnLabel( 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)