{"record":{"id":"d1a4da53db24a994","repo":"OtterMind/Chat2DB","slug":"database-delete-databasenotexists","errorCode":"database.delete.databaseNotExists","errorMessage":"database.delete.databaseNotExists","messagePattern":"database\\.delete\\.databaseNotExists","errorType":"validation","errorClass":"BusinessException","httpStatus":null,"severity":"error","filePath":"chat2db-community-server/chat2db-community-domain/chat2db-community-domain-core/src/main/java/ai/chat2db/community/domain/core/impl/db/DbDatabaseObjectDeleteServiceImpl.java","lineNumber":208,"sourceCode":"                && POSTGRESQL_SYSTEM_DATABASES.contains(StringUtils.lowerCase(databaseName))) {\n            throw new BusinessException(\"database.delete.systemDatabaseForbidden\");\n        }\n    }\n\n    private Connection requireConnection() {\n        Connection connection = Chat2DBContext.getConnection();\n        if (connection == null) {\n            throw new BusinessException(\"database.delete.connectionFailed\");\n        }\n        return connection;\n    }\n\n    private void assertDatabaseExists(Connection connection, String dbType, String databaseName) {\n        List<Database> databases = Chat2DBContext.getDbMetaData(dbType).databases(connection);\n        boolean exists = databases != null && databases.stream()\n                .anyMatch(database -> StringUtils.equals(database.getName(), databaseName));\n        if (!exists) {\n            throw new BusinessException(\"database.delete.databaseNotExists\");\n        }\n    }\n\n    private DatabaseObjectDeletePrepare prepareResult(String confirmName, String sqlPreview, String objectType,\n                                                       String dbType) {\n        return DatabaseObjectDeletePrepare.builder()\n                .confirmName(confirmName)\n                .sqlPreview(sqlPreview)\n                .objectType(objectType)\n                .dbType(dbType)\n                .build();\n    }\n\n    private String databaseConfirmName(String databaseName) {\n        return databaseName;\n    }\n\n    private String buildDropDatabase(String dbType, String databaseName) {","sourceCodeStart":190,"sourceCodeEnd":226,"githubUrl":"https://github.com/OtterMind/Chat2DB/blob/5ee1e990e73fbcae1969dc554be254fedb3ab888/chat2db-community-server/chat2db-community-domain/chat2db-community-domain-core/src/main/java/ai/chat2db/community/domain/core/impl/db/DbDatabaseObjectDeleteServiceImpl.java#L190-L226","documentation":"Thrown by assertDatabaseExists when the named database is not found in the server's metadata listing (Chat2DBContext.getDbMetaData(dbType).databases(connection)). The metadata query succeeds but no returned Database has a name equal to the requested databaseName. This guards against dropping a database that was already removed or never existed.","triggerScenarios":"Calling prepareDatabaseDelete or executeDatabaseDelete with a databaseName that does not match any Database.getName() returned by the dialect's databases() metadata call. Common when the database was dropped by another session between listing and confirmation.","commonSituations":"Race condition: database deleted by another admin between the UI listing and the user confirming; typo or wrong-case database name; metadata listing filtered or cached and stale.","solutions":["Refresh the database list and confirm the database still exists before retrying.","Check for exact case sensitivity in the databaseName parameter.","If already deleted externally, no action is needed — report success/idempotency to the user."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"List<Database> dbs = Chat2DBContext.getDbMetaData(dbType).databases(connection);\nboolean exists = dbs != null && dbs.stream().anyMatch(d -> StringUtils.equals(d.getName(), databaseName));\nif (!exists) { /* do not call delete */ }","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Refresh the database list immediately before confirming deletion.","Handle 'already deleted' gracefully (treat as idempotent success)."],"tags":["database-delete","not-found","metadata"],"backgroundTag":null,"analyzedSha":"5ee1e990e73fbcae1969dc554be254fedb3ab888","analyzedAt":"2026-08-14T07:05:03.077Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}