{"record":{"id":"697476a4186ab966","repo":"pentaho/pentaho-kettle","slug":"mysqldatabasemeta-exception-697476","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/MySQLDatabaseMeta.java","lineNumber":529,"sourceCode":"    return Integer.MAX_VALUE;\n  }\n\n  /**\n   * Returns the column name for a MySQL field checking if the driver major version is \"greater than\" or \"lower or equal\" to 3.\n   *\n   * @param dbMetaData\n   * @param rsMetaData\n   * @param index\n   * @return The column label if version is greater than 3 or the column name if version is lower or equal to 3.\n   * @throws KettleDatabaseException\n   */\n  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 dbMetaData.getDriverMajorVersion() > 3 ? rsMetaData.getColumnLabel( index ) : rsMetaData.getColumnName( 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":511,"sourceCodeEnd":539,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/core/src/main/java/org/pentaho/di/core/database/MySQLDatabaseMeta.java#L511-L539","documentation":"Thrown by MySQLDatabaseMeta.getLegacyColumnName when the ResultSetMetaData argument is null. Column names/labels cannot be resolved without it, so the method throws a localized KettleDatabaseException.","triggerScenarios":"Calling getLegacyColumnName(dbMetaData, null, index) — e.g. a statement executed without a result set, a closed ResultSet, or rs.getMetaData() returning null.","commonSituations":"Reading columns after the ResultSet was closed; using execute() return values incorrectly; refactors dropping the ResultSet before metadata access.","solutions":["Call resultSet.getMetaData() and null-check before invoking","Ensure the query produced a ResultSet and keep it open while reading column metadata","Read metadata immediately after executing the statement"],"exampleFix":"// before\nString name = meta.getLegacyColumnName(dbMetaData, null, index);\n// after\nResultSetMetaData rsMetaData = resultSet.getMetaData();\nif (rsMetaData != null) {\n  String name = 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 name = mysqlMeta.getLegacyColumnName(dbMetaData, rsMetaData, index);\n} catch (KettleDatabaseException e) {\n  log.error(\"No ResultSet metadata available for MySQL legacy column lookup\", e);\n}","preventionTips":["Use executeQuery so a ResultSet always exists before metadata access","Read metadata while the ResultSet is still open","Null-check rs.getMetaData() before invoking the API"],"tags":["jdbc","mysql","null-argument","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"}