{"record":{"id":"046b0e31b7196eb4","repo":"pentaho/pentaho-kettle","slug":"setting-a-directory-on-a-database-connection-is-not","errorCode":null,"errorMessage":"Setting a directory on a database connection is not supported","messagePattern":"Setting a directory on a database connection is not supported","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"core/src/main/java/org/pentaho/di/core/database/DatabaseMeta.java","lineNumber":2946,"sourceCode":"  public String getPreferredSchemaName() {\n    return databaseInterface.getPreferredSchemaName();\n  }\n\n  public void setPreferredSchemaName( String preferredSchemaName ) {\n    databaseInterface.setPreferredSchemaName( preferredSchemaName );\n  }\n\n  /**\n   * Not used in this case, simply return root /\n   */\n  @Override\n  public RepositoryDirectoryInterface getRepositoryDirectory() {\n    return new RepositoryDirectory();\n  }\n\n  @Override\n  public void setRepositoryDirectory( RepositoryDirectoryInterface repositoryDirectory ) {\n    throw new RuntimeException( \"Setting a directory on a database connection is not supported\" );\n  }\n\n  @Override\n  public RepositoryObjectType getRepositoryElementType() {\n    return REPOSITORY_ELEMENT_TYPE;\n  }\n\n  @Override\n  public ObjectRevision getObjectRevision() {\n    return objectRevision;\n  }\n\n  @Override\n  public void setObjectRevision( ObjectRevision objectRevision ) {\n    this.objectRevision = objectRevision;\n  }\n\n  @Override","sourceCodeStart":2928,"sourceCodeEnd":2964,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/core/src/main/java/org/pentaho/di/core/database/DatabaseMeta.java#L2928-L2964","documentation":"DatabaseMeta implements RepositoryElementInterface; its setRepositoryDirectory override unconditionally throws RuntimeException because database connections always live at the repository root and cannot be placed in folders. Assigning a directory to a connection object is a programming error by contract.","triggerScenarios":"Calling meta.setRepositoryDirectory(dir) — typically from generic repository code that sets directories on every repository element type (jobs, transformations, connections) uniformly, hitting the connection case.","commonSituations":"Bulk repository import/export scripts that iterate repository objects and assign target directories; refactored repository browsers applying directory moves to DatabaseMeta objects.","solutions":["Skip DatabaseMeta objects in generic code that sets repository directories (check getRepositoryElementType() == REPOSITORY_ELEMENT_TYPE).","Use the explicit repository API (Repository.save(meta, version, comment, directory)) instead of setting a directory field on the meta.","For moving connections in a repository, use repository-specific move/rename methods rather than setRepositoryDirectory.","Wrap the call defensively if the element type is unknown at compile time."],"exampleFix":"// before\nrepoElement.setRepositoryDirectory(targetDir); // applied to all element types\n// after\nif (repoElement.getRepositoryElementType() != RepositoryObjectType.DATABASE) {\n  repoElement.setRepositoryDirectory(targetDir);\n} else {\n  repository.moveToRepositoryElement(...); // or leave connections at root\n}","handlingStrategy":"type-guard","validationCode":"if (element instanceof DatabaseMeta) {\n  // connections live at repository root; do not assign a directory\n} else {\n  element.setRepositoryDirectory(dir);\n}","typeGuard":"boolean supportsDirectory(RepositoryElementInterface e) {\n  return !(e instanceof DatabaseMeta);\n}","tryCatchPattern":"try {\n  element.setRepositoryDirectory(dir);\n} catch (RuntimeException e) {\n  if (\"Setting a directory on a database connection is not supported\".equals(e.getMessage())) {\n    // handle connection case: save at root via repository API instead\n    return;\n  }\n  throw e;\n}","preventionTips":["Branch on getRepositoryElementType() before directory assignment in generic repository code.","Use repository.save(...directory) for placement instead of mutating the meta.","Document that DatabaseMeta objects are root-level repository elements."],"tags":["repository","unsupported-operation","api-misuse"],"backgroundTag":"unsupported-operation","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"}