strip out client-type checks in each connector
Signed-off-by: Fredrik Adelöw <freben@gmail.com>
This commit is contained in:
@@ -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') {
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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';
|
||||
|
||||
Reference in New Issue
Block a user