diff --git a/packages/api/src/controllers/plugins.js b/packages/api/src/controllers/plugins.js index a14ff6e14..6800ba791 100644 --- a/packages/api/src/controllers/plugins.js +++ b/packages/api/src/controllers/plugins.js @@ -135,8 +135,9 @@ module.exports = { async authTypes({ engine }) { const packageName = extractPackageName(engine); const content = requirePlugin(packageName); - if (!content.driver || content.driver.engine != engine || !content.driver.getAuthTypes) return null; - return content.driver.getAuthTypes() || null; + const driver = content.drivers.find(x => x.engine == engine); + if (!driver || !driver.getAuthTypes) return null; + return driver.getAuthTypes() || null; }, // async _init() { diff --git a/packages/api/src/utility/requireEngineDriver.js b/packages/api/src/utility/requireEngineDriver.js index 2a8688f8b..dabdf2be0 100644 --- a/packages/api/src/utility/requireEngineDriver.js +++ b/packages/api/src/utility/requireEngineDriver.js @@ -15,7 +15,7 @@ function requireEngineDriver(connection) { if (engine.includes('@')) { const [shortName, packageName] = engine.split('@'); const plugin = requirePlugin(packageName); - return plugin.driver; + return plugin.drivers.find(x => x.engine == engine); } throw new Error(`Could not found engine driver ${engine}`); } diff --git a/packages/web/src/plugins/PluginsProvider.svelte b/packages/web/src/plugins/PluginsProvider.svelte index 880c1f9fc..bf90c5c0e 100644 --- a/packages/web/src/plugins/PluginsProvider.svelte +++ b/packages/web/src/plugins/PluginsProvider.svelte @@ -28,7 +28,7 @@ function buildDrivers(plugins) { const res = []; for (const { content } of plugins) { - if (content.driver) res.push(content.driver); + // if (content.driver) res.push(content.driver); if (content.drivers) res.push(...content.drivers); } return res; diff --git a/plugins/dbgate-plugin-mongo/src/backend/index.js b/plugins/dbgate-plugin-mongo/src/backend/index.js index 34eb83d74..df0b602e4 100644 --- a/plugins/dbgate-plugin-mongo/src/backend/index.js +++ b/plugins/dbgate-plugin-mongo/src/backend/index.js @@ -2,5 +2,5 @@ const driver = require('./driver'); module.exports = { packageName: 'dbgate-plugin-mongo', - driver, + drivers: [driver], }; diff --git a/plugins/dbgate-plugin-mongo/src/frontend/index.js b/plugins/dbgate-plugin-mongo/src/frontend/index.js index b8b61e8d6..3bf256c7c 100644 --- a/plugins/dbgate-plugin-mongo/src/frontend/index.js +++ b/plugins/dbgate-plugin-mongo/src/frontend/index.js @@ -2,5 +2,5 @@ import driver from './driver'; export default { packageName: 'dbgate-plugin-mongo', - driver, + drivers: [driver], }; diff --git a/plugins/dbgate-plugin-mssql/src/backend/index.js b/plugins/dbgate-plugin-mssql/src/backend/index.js index 4277c5283..cc3f74066 100644 --- a/plugins/dbgate-plugin-mssql/src/backend/index.js +++ b/plugins/dbgate-plugin-mssql/src/backend/index.js @@ -2,7 +2,7 @@ const driver = require('./driver'); module.exports = { packageName: 'dbgate-plugin-mssql', - driver, + drivers: [driver], initialize(dbgateEnv) { driver.initialize(dbgateEnv); }, diff --git a/plugins/dbgate-plugin-mssql/src/frontend/index.js b/plugins/dbgate-plugin-mssql/src/frontend/index.js index 841ed051a..e0cefdc68 100644 --- a/plugins/dbgate-plugin-mssql/src/frontend/index.js +++ b/plugins/dbgate-plugin-mssql/src/frontend/index.js @@ -1,5 +1,5 @@ import driver from './driver'; export default { - driver, + drivers: [driver], }; diff --git a/plugins/dbgate-plugin-mysql/src/backend/driver.js b/plugins/dbgate-plugin-mysql/src/backend/drivers.js similarity index 97% rename from plugins/dbgate-plugin-mysql/src/backend/driver.js rename to plugins/dbgate-plugin-mysql/src/backend/drivers.js index 760bac900..c11af3f17 100644 --- a/plugins/dbgate-plugin-mysql/src/backend/driver.js +++ b/plugins/dbgate-plugin-mysql/src/backend/drivers.js @@ -1,6 +1,6 @@ const _ = require('lodash'); const stream = require('stream'); -const driverBase = require('../frontend/driver'); +const driverBases = require('../frontend/drivers'); const Analyser = require('./Analyser'); const mysql2 = require('mysql2'); const { createBulkInsertStreamBase, makeUniqueColumnNames } = require('dbgate-tools'); @@ -90,7 +90,7 @@ async function runStreamItem(connection, sql, options) { } /** @type {import('dbgate-types').EngineDriver} */ -const driver = { +const drivers = driverBases.map(driverBase => ({ ...driverBase, analyserClass: Analyser, @@ -184,6 +184,6 @@ const driver = { // @ts-ignore return createBulkInsertStreamBase(this, stream, pool, name, options); }, -}; +})); -module.exports = driver; +module.exports = drivers; diff --git a/plugins/dbgate-plugin-mysql/src/backend/index.js b/plugins/dbgate-plugin-mysql/src/backend/index.js index ef1600fd9..feb15704a 100644 --- a/plugins/dbgate-plugin-mysql/src/backend/index.js +++ b/plugins/dbgate-plugin-mysql/src/backend/index.js @@ -1,6 +1,6 @@ -const driver = require('./driver'); +const drivers = require('./drivers'); module.exports = { packageName: 'dbgate-plugin-mysql', - driver, + drivers, }; diff --git a/plugins/dbgate-plugin-mysql/src/frontend/driver.js b/plugins/dbgate-plugin-mysql/src/frontend/drivers.js similarity index 65% rename from plugins/dbgate-plugin-mysql/src/frontend/driver.js rename to plugins/dbgate-plugin-mysql/src/frontend/drivers.js index 93465e2d6..aa8c48cec 100644 --- a/plugins/dbgate-plugin-mysql/src/frontend/driver.js +++ b/plugins/dbgate-plugin-mysql/src/frontend/drivers.js @@ -15,13 +15,23 @@ const dialect = { }; /** @type {import('dbgate-types').EngineDriver} */ -const driver = { +const mysqlDriver = { ...driverBase, dumperClass: Dumper, dialect, engine: 'mysql@dbgate-plugin-mysql', - title: 'MySQL / MariaDB', + title: 'MySQL', defaultPort: 3306, }; -module.exports = driver; +/** @type {import('dbgate-types').EngineDriver} */ +const mariaDriver = { + ...driverBase, + dumperClass: Dumper, + dialect, + engine: 'mariadb@dbgate-plugin-mysql', + title: 'MariaDB', + defaultPort: 3306, +}; + +module.exports = [mysqlDriver, mariaDriver]; diff --git a/plugins/dbgate-plugin-mysql/src/frontend/index.js b/plugins/dbgate-plugin-mysql/src/frontend/index.js index 424f70e0a..59a711c80 100644 --- a/plugins/dbgate-plugin-mysql/src/frontend/index.js +++ b/plugins/dbgate-plugin-mysql/src/frontend/index.js @@ -1,6 +1,6 @@ -import driver from './driver'; +import drivers from './drivers'; export default { packageName: 'dbgate-plugin-mysql', - driver, + drivers, }; diff --git a/plugins/dbgate-plugin-postgres/src/backend/driver.js b/plugins/dbgate-plugin-postgres/src/backend/drivers.js similarity index 97% rename from plugins/dbgate-plugin-postgres/src/backend/driver.js rename to plugins/dbgate-plugin-postgres/src/backend/drivers.js index 9b7444af6..b5275c25e 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/driver.js +++ b/plugins/dbgate-plugin-postgres/src/backend/drivers.js @@ -2,7 +2,7 @@ const _ = require('lodash'); const stream = require('stream'); const { identify } = require('sql-query-identifier'); -const driverBase = require('../frontend/driver'); +const driverBases = require('../frontend/drivers'); const Analyser = require('./Analyser'); const pg = require('pg'); const pgQueryStream = require('pg-query-stream'); @@ -93,7 +93,7 @@ async function runStreamItem(client, sql, options) { } /** @type {import('dbgate-types').EngineDriver} */ -const driver = { +const drivers = driverBases.map(driverBase => ({ ...driverBase, analyserClass: Analyser, @@ -220,6 +220,6 @@ const driver = { const { rows } = await this.query(client, 'SELECT datname AS name FROM pg_database WHERE datistemplate = false'); return rows; }, -}; +})); -module.exports = driver; +module.exports = drivers; diff --git a/plugins/dbgate-plugin-postgres/src/backend/index.js b/plugins/dbgate-plugin-postgres/src/backend/index.js index 4a2c8d0cd..1e2c3310e 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/index.js +++ b/plugins/dbgate-plugin-postgres/src/backend/index.js @@ -1,6 +1,6 @@ -const driver = require('./driver'); +const drivers = require('./drivers'); module.exports = { packageName: 'dbgate-plugin-postgres', - driver, + drivers, }; diff --git a/plugins/dbgate-plugin-postgres/src/frontend/driver.js b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js similarity index 51% rename from plugins/dbgate-plugin-postgres/src/frontend/driver.js rename to plugins/dbgate-plugin-postgres/src/frontend/drivers.js index 425f6a6a6..0c7e9a955 100644 --- a/plugins/dbgate-plugin-postgres/src/frontend/driver.js +++ b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js @@ -15,7 +15,7 @@ const dialect = { }; /** @type {import('dbgate-types').EngineDriver} */ -const driver = { +const postgresDriver = { ...driverBase, dumperClass: Dumper, dialect, @@ -24,4 +24,24 @@ const driver = { defaultPort: 5432, }; -module.exports = driver; +/** @type {import('dbgate-types').EngineDriver} */ +const cockroachDriver = { + ...driverBase, + dumperClass: Dumper, + dialect, + engine: 'cockroach@dbgate-plugin-postgres', + title: 'CockroachDB', + defaultPort: 26257, +}; + +/** @type {import('dbgate-types').EngineDriver} */ +const redshiftDriver = { + ...driverBase, + dumperClass: Dumper, + dialect, + engine: 'red@dbgate-plugin-postgres', + title: 'Amazon Redshift', + defaultPort: 5432, +}; + +module.exports = [postgresDriver, cockroachDriver, redshiftDriver]; diff --git a/plugins/dbgate-plugin-postgres/src/frontend/index.js b/plugins/dbgate-plugin-postgres/src/frontend/index.js index c7606431f..ee44ddad5 100644 --- a/plugins/dbgate-plugin-postgres/src/frontend/index.js +++ b/plugins/dbgate-plugin-postgres/src/frontend/index.js @@ -1,6 +1,6 @@ -import driver from './driver'; +import drivers from './drivers'; export default { packageName: 'dbgate-plugin-postgres', - driver, + drivers, }; diff --git a/plugins/dbgate-plugin-sqlite/src/backend/index.js b/plugins/dbgate-plugin-sqlite/src/backend/index.js index 7e72de053..0d1244a34 100644 --- a/plugins/dbgate-plugin-sqlite/src/backend/index.js +++ b/plugins/dbgate-plugin-sqlite/src/backend/index.js @@ -2,7 +2,7 @@ const driver = require('./driver'); module.exports = { packageName: 'dbgate-plugin-sqlite', - driver, + drivers: [driver], initialize(dbgateEnv) { driver.initialize(dbgateEnv); }, diff --git a/plugins/dbgate-plugin-sqlite/src/frontend/index.js b/plugins/dbgate-plugin-sqlite/src/frontend/index.js index acb656b99..773ab5845 100644 --- a/plugins/dbgate-plugin-sqlite/src/frontend/index.js +++ b/plugins/dbgate-plugin-sqlite/src/frontend/index.js @@ -2,5 +2,5 @@ import driver from './driver'; export default { packageName: 'dbgate-plugin-sqlite', - driver, + drivers: [driver], };