{"record":{"id":"335fbb0fa2bfba5c","repo":"pentaho/pentaho-kettle","slug":"mysqldatabasemeta-exception-335fbb","errorCode":"MySQLDatabaseMeta.Exception.LegacyColumnNameNoRSMetaDataException","errorMessage":"MySQLDatabaseMeta.Exception.LegacyColumnNameNoRSMetaDataException (localized via BaseMessages)","messagePattern":"MySQLDatabaseMeta\\.Exception\\.LegacyColumnNameNoRSMetaDataException \\(localized via BaseMessages\\)","errorType":"exception","errorClass":"KettleDatabaseException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/pentaho/di/core/database/MariaDBDatabaseMeta.java","lineNumber":68,"sourceCode":"    return !( cause != null && SHORT_MESSAGE_EXCEPTIONS.contains( cause.getClass().getName() ) );\n  }\n\n  /**\n   * Returns the column name for a MariaDB field.\n   *\n   * @param dbMetaData\n   * @param rsMetaData\n   * @param index\n   * @return The column label.\n   * @throws KettleDatabaseException\n   */\n  @Override public String getLegacyColumnName( DatabaseMetaData dbMetaData, ResultSetMetaData rsMetaData, int index ) throws KettleDatabaseException {\n    if ( dbMetaData == null ) {\n      throw new KettleDatabaseException( BaseMessages.getString( PKG, \"MySQLDatabaseMeta.Exception.LegacyColumnNameNoDBMetaDataException\" ) );\n    }\n\n    if ( rsMetaData == null ) {\n      throw new KettleDatabaseException( BaseMessages.getString( PKG, \"MySQLDatabaseMeta.Exception.LegacyColumnNameNoRSMetaDataException\" ) );\n    }\n\n    try {\n      return rsMetaData.getColumnLabel( index );\n    } catch ( Exception e ) {\n      throw new KettleDatabaseException( String.format( \"%s: %s\", BaseMessages.getString( PKG, \"MySQLDatabaseMeta.Exception.LegacyColumnNameException\" ), e.getMessage() ), e );\n    }\n  }\n}\n","sourceCodeStart":50,"sourceCodeEnd":78,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/core/src/main/java/org/pentaho/di/core/database/MariaDBDatabaseMeta.java#L50-L78","documentation":"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.","triggerScenarios":"Calling getLegacyColumnName(dbMetaData, null, index) — e.g. after a query that returned no ResultSet, or rs.getMetaData() returned null.","commonSituations":"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.","solutions":["Obtain ResultSetMetaData via resultSet.getMetaData() and verify it is non-null before calling getLegacyColumnName","Ensure the query actually produced a ResultSet (executeQuery, not executeUpdate) before reading column metadata","Refactor to read metadata immediately after executing the statement, while the ResultSet is still open"],"exampleFix":"// before\nString label = meta.getLegacyColumnName(dbMetaData, null, index);\n// after\nResultSetMetaData rsMetaData = resultSet.getMetaData();\nif (rsMetaData != null) {\n  String label = meta.getLegacyColumnName(dbMetaData, rsMetaData, index);\n}","handlingStrategy":"type-guard","validationCode":"if (resultSet == null || resultSet.getMetaData() == null) throw new IllegalStateException(\"ResultSet or its metadata is null\");","typeGuard":"function hasRsMetaData(ResultSet rs) { try { return rs != null && rs.getMetaData() != null; } catch (SQLException e) { return false; } }","tryCatchPattern":"try {\n  String label = meta.getLegacyColumnName(dbMetaData, rsMetaData, index);\n} catch (KettleDatabaseException e) {\n  log.error(\"No ResultSet metadata available for legacy column lookup\", e);\n}","preventionTips":["Read column metadata immediately after executeQuery while the ResultSet is open","Never pass ResultSets from executeUpdate/no-result statements to metadata APIs","Null-check rs.getMetaData() before use"],"tags":["jdbc","null-argument","metadata","resultset"],"backgroundTag":"null-argument","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}