From 5aad3c0d594a2c859ff8d024bee58d445328fee2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Adel=C3=B6w?= Date: Sun, 28 Apr 2024 12:05:14 +0200 Subject: [PATCH] strip out client-type checks in each connector MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Fredrik Adelöw --- .../src/database/DatabaseManager.ts | 2 +- .../src/database/connectors/mysql.ts | 39 ++---------------- .../src/database/connectors/postgres.ts | 41 +++---------------- .../src/database/connectors/sqlite3.ts | 6 --- packages/backend-common/src/database/index.ts | 10 ----- 5 files changed, 10 insertions(+), 88 deletions(-) diff --git a/packages/backend-common/src/database/DatabaseManager.ts b/packages/backend-common/src/database/DatabaseManager.ts index a261cd13fc..66fef056bc 100644 --- a/packages/backend-common/src/database/DatabaseManager.ts +++ b/packages/backend-common/src/database/DatabaseManager.ts @@ -170,7 +170,7 @@ export class DatabaseManager implements LegacyRootDatabaseService { return this.databaseCache.get(pluginId)!; } - const clientPromise = connector.getClient(pluginId, deps).then(); + const clientPromise = connector.getClient(pluginId, deps); this.databaseCache.set(pluginId, clientPromise); if (process.env.NODE_ENV !== 'test') { diff --git a/packages/backend-common/src/database/connectors/mysql.ts b/packages/backend-common/src/database/connectors/mysql.ts index a7cbad271f..418466e3c6 100644 --- a/packages/backend-common/src/database/connectors/mysql.ts +++ b/packages/backend-common/src/database/connectors/mysql.ts @@ -367,21 +367,6 @@ export class MysqlConnector implements Connector { private getDatabaseName(pluginId: string): string | undefined { const connection = this.getConnectionConfig(pluginId); - if (this.getClientType(pluginId).client.includes('sqlite3')) { - const sqliteFilename: string | undefined = ( - connection as Knex.Sqlite3ConnectionConfig - ).filename; - - if (sqliteFilename === ':memory:') { - return sqliteFilename; - } - - const sqliteDirectory = - (connection as { directory?: string }).directory ?? '.'; - - return path.join(sqliteDirectory, sqliteFilename ?? `${pluginId}.sqlite`); - } - const databaseName = (connection as Knex.ConnectionConfig)?.database; // `pluginDivisionMode` as `schema` should use overridden databaseName if supplied or fallback to default knex database @@ -464,9 +449,8 @@ export class MysqlConnector implements Connector { * This method provides a baseConfig for a plugin database connector. If the * client type has not been overridden, the global connection config will be * included with plugin specific config as the base. Values from the plugin - * connection take precedence over the base. Base database name is omitted for - * all supported databases excluding SQLite unless `pluginDivisionMode` is set - * to `schema`. + * connection take precedence over the base. Base database name is omitted + * unless `pluginDivisionMode` is set to `schema`. */ private getConnectionConfig(pluginId: string): Knex.StaticConnectionConfig { const { client, overridden } = this.getClientType(pluginId); @@ -476,20 +460,9 @@ export class MysqlConnector implements Connector { this.config.getString('client'), ); - if ( - client.includes('sqlite3') && - 'filename' in baseConnection && - baseConnection.filename !== ':memory:' - ) { - throw new Error( - '`connection.filename` is not supported for the base sqlite connection. Prefer `connection.directory` or provide a filename for the plugin connection instead.', - ); - } - // Databases cannot be shared unless the `pluginDivisionMode` is set to `schema`. The // `database` property from the base connection is omitted unless `pluginDivisionMode` - // is set to `schema`. SQLite3's `filename` property is an exception as this is used as a - // directory elsewhere so we preserve `filename`. + // is set to `schema`. if (this.getPluginDivisionModeConfig() !== 'schema') { baseConnection = omit(baseConnection, 'database'); } @@ -500,12 +473,6 @@ export class MysqlConnector implements Connector { client, ); - if (client === 'pg') { - ( - baseConnection as Knex.PgConnectionConfig - ).application_name ||= `backstage_plugin_${pluginId}`; - } - return { // include base connection if client type has not been overridden ...(overridden ? {} : baseConnection), diff --git a/packages/backend-common/src/database/connectors/postgres.ts b/packages/backend-common/src/database/connectors/postgres.ts index 4e3ed9aa1d..5cc81591ad 100644 --- a/packages/backend-common/src/database/connectors/postgres.ts +++ b/packages/backend-common/src/database/connectors/postgres.ts @@ -364,21 +364,6 @@ export class PgConnector implements Connector { private getDatabaseName(pluginId: string): string | undefined { const connection = this.getConnectionConfig(pluginId); - if (this.getClientType(pluginId).client.includes('sqlite3')) { - const sqliteFilename: string | undefined = ( - connection as Knex.Sqlite3ConnectionConfig - ).filename; - - if (sqliteFilename === ':memory:') { - return sqliteFilename; - } - - const sqliteDirectory = - (connection as { directory?: string }).directory ?? '.'; - - return path.join(sqliteDirectory, sqliteFilename ?? `${pluginId}.sqlite`); - } - const databaseName = (connection as Knex.ConnectionConfig)?.database; // `pluginDivisionMode` as `schema` should use overridden databaseName if supplied or fallback to default knex database @@ -461,9 +446,8 @@ export class PgConnector implements Connector { * This method provides a baseConfig for a plugin database connector. If the * client type has not been overridden, the global connection config will be * included with plugin specific config as the base. Values from the plugin - * connection take precedence over the base. Base database name is omitted for - * all supported databases excluding SQLite unless `pluginDivisionMode` is set - * to `schema`. + * connection take precedence over the base. Base database name is omitted + * unless `pluginDivisionMode` is set to `schema`. */ private getConnectionConfig(pluginId: string): Knex.StaticConnectionConfig { const { client, overridden } = this.getClientType(pluginId); @@ -473,20 +457,9 @@ export class PgConnector implements Connector { this.config.getString('client'), ); - if ( - client.includes('sqlite3') && - 'filename' in baseConnection && - baseConnection.filename !== ':memory:' - ) { - throw new Error( - '`connection.filename` is not supported for the base sqlite connection. Prefer `connection.directory` or provide a filename for the plugin connection instead.', - ); - } - // Databases cannot be shared unless the `pluginDivisionMode` is set to `schema`. The // `database` property from the base connection is omitted unless `pluginDivisionMode` - // is set to `schema`. SQLite3's `filename` property is an exception as this is used as a - // directory elsewhere so we preserve `filename`. + // is set to `schema`. if (this.getPluginDivisionModeConfig() !== 'schema') { baseConnection = omit(baseConnection, 'database'); } @@ -497,11 +470,9 @@ export class PgConnector implements Connector { client, ); - if (client === 'pg') { - ( - baseConnection as Knex.PgConnectionConfig - ).application_name ||= `backstage_plugin_${pluginId}`; - } + ( + baseConnection as Knex.PgConnectionConfig + ).application_name ||= `backstage_plugin_${pluginId}`; return { // include base connection if client type has not been overridden diff --git a/packages/backend-common/src/database/connectors/sqlite3.ts b/packages/backend-common/src/database/connectors/sqlite3.ts index 514af6d69f..a9c2b93d1c 100644 --- a/packages/backend-common/src/database/connectors/sqlite3.ts +++ b/packages/backend-common/src/database/connectors/sqlite3.ts @@ -432,12 +432,6 @@ export class Sqlite3Connector implements Connector { client, ); - if (client === 'pg') { - ( - baseConnection as Knex.PgConnectionConfig - ).application_name ||= `backstage_plugin_${pluginId}`; - } - return { // include base connection if client type has not been overridden ...(overridden ? {} : baseConnection), diff --git a/packages/backend-common/src/database/index.ts b/packages/backend-common/src/database/index.ts index f8bdc22f6d..464cf4a4de 100644 --- a/packages/backend-common/src/database/index.ts +++ b/packages/backend-common/src/database/index.ts @@ -16,15 +16,5 @@ export * from './DatabaseManager'; -/* - * Undocumented API surface from connection is being reduced for future deprecation. - * Avoid exporting additional symbols. - */ -export { - createDatabaseClient, - dropDatabase, - ensureDatabaseExists, -} from './connection'; - export type { PluginDatabaseManager } from './types'; export { isDatabaseConflictError } from './util';