mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-29 16:53:58 +00:00
driver plugins supports more drivers. Added derived drivers for MariaDB, CockroachDB, Amazon Redshift
This commit is contained in:
@@ -135,8 +135,9 @@ module.exports = {
|
|||||||
async authTypes({ engine }) {
|
async authTypes({ engine }) {
|
||||||
const packageName = extractPackageName(engine);
|
const packageName = extractPackageName(engine);
|
||||||
const content = requirePlugin(packageName);
|
const content = requirePlugin(packageName);
|
||||||
if (!content.driver || content.driver.engine != engine || !content.driver.getAuthTypes) return null;
|
const driver = content.drivers.find(x => x.engine == engine);
|
||||||
return content.driver.getAuthTypes() || null;
|
if (!driver || !driver.getAuthTypes) return null;
|
||||||
|
return driver.getAuthTypes() || null;
|
||||||
},
|
},
|
||||||
|
|
||||||
// async _init() {
|
// async _init() {
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ function requireEngineDriver(connection) {
|
|||||||
if (engine.includes('@')) {
|
if (engine.includes('@')) {
|
||||||
const [shortName, packageName] = engine.split('@');
|
const [shortName, packageName] = engine.split('@');
|
||||||
const plugin = requirePlugin(packageName);
|
const plugin = requirePlugin(packageName);
|
||||||
return plugin.driver;
|
return plugin.drivers.find(x => x.engine == engine);
|
||||||
}
|
}
|
||||||
throw new Error(`Could not found engine driver ${engine}`);
|
throw new Error(`Could not found engine driver ${engine}`);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
function buildDrivers(plugins) {
|
function buildDrivers(plugins) {
|
||||||
const res = [];
|
const res = [];
|
||||||
for (const { content } of plugins) {
|
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);
|
if (content.drivers) res.push(...content.drivers);
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
|||||||
@@ -2,5 +2,5 @@ const driver = require('./driver');
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
packageName: 'dbgate-plugin-mongo',
|
packageName: 'dbgate-plugin-mongo',
|
||||||
driver,
|
drivers: [driver],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,5 +2,5 @@ import driver from './driver';
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
packageName: 'dbgate-plugin-mongo',
|
packageName: 'dbgate-plugin-mongo',
|
||||||
driver,
|
drivers: [driver],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ const driver = require('./driver');
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
packageName: 'dbgate-plugin-mssql',
|
packageName: 'dbgate-plugin-mssql',
|
||||||
driver,
|
drivers: [driver],
|
||||||
initialize(dbgateEnv) {
|
initialize(dbgateEnv) {
|
||||||
driver.initialize(dbgateEnv);
|
driver.initialize(dbgateEnv);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import driver from './driver';
|
import driver from './driver';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
driver,
|
drivers: [driver],
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
const _ = require('lodash');
|
const _ = require('lodash');
|
||||||
const stream = require('stream');
|
const stream = require('stream');
|
||||||
const driverBase = require('../frontend/driver');
|
const driverBases = require('../frontend/drivers');
|
||||||
const Analyser = require('./Analyser');
|
const Analyser = require('./Analyser');
|
||||||
const mysql2 = require('mysql2');
|
const mysql2 = require('mysql2');
|
||||||
const { createBulkInsertStreamBase, makeUniqueColumnNames } = require('dbgate-tools');
|
const { createBulkInsertStreamBase, makeUniqueColumnNames } = require('dbgate-tools');
|
||||||
@@ -90,7 +90,7 @@ async function runStreamItem(connection, sql, options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @type {import('dbgate-types').EngineDriver} */
|
/** @type {import('dbgate-types').EngineDriver} */
|
||||||
const driver = {
|
const drivers = driverBases.map(driverBase => ({
|
||||||
...driverBase,
|
...driverBase,
|
||||||
analyserClass: Analyser,
|
analyserClass: Analyser,
|
||||||
|
|
||||||
@@ -184,6 +184,6 @@ const driver = {
|
|||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
return createBulkInsertStreamBase(this, stream, pool, name, options);
|
return createBulkInsertStreamBase(this, stream, pool, name, options);
|
||||||
},
|
},
|
||||||
};
|
}));
|
||||||
|
|
||||||
module.exports = driver;
|
module.exports = drivers;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
const driver = require('./driver');
|
const drivers = require('./drivers');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
packageName: 'dbgate-plugin-mysql',
|
packageName: 'dbgate-plugin-mysql',
|
||||||
driver,
|
drivers,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,13 +15,23 @@ const dialect = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/** @type {import('dbgate-types').EngineDriver} */
|
/** @type {import('dbgate-types').EngineDriver} */
|
||||||
const driver = {
|
const mysqlDriver = {
|
||||||
...driverBase,
|
...driverBase,
|
||||||
dumperClass: Dumper,
|
dumperClass: Dumper,
|
||||||
dialect,
|
dialect,
|
||||||
engine: 'mysql@dbgate-plugin-mysql',
|
engine: 'mysql@dbgate-plugin-mysql',
|
||||||
title: 'MySQL / MariaDB',
|
title: 'MySQL',
|
||||||
defaultPort: 3306,
|
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];
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import driver from './driver';
|
import drivers from './drivers';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
packageName: 'dbgate-plugin-mysql',
|
packageName: 'dbgate-plugin-mysql',
|
||||||
driver,
|
drivers,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ const _ = require('lodash');
|
|||||||
const stream = require('stream');
|
const stream = require('stream');
|
||||||
const { identify } = require('sql-query-identifier');
|
const { identify } = require('sql-query-identifier');
|
||||||
|
|
||||||
const driverBase = require('../frontend/driver');
|
const driverBases = require('../frontend/drivers');
|
||||||
const Analyser = require('./Analyser');
|
const Analyser = require('./Analyser');
|
||||||
const pg = require('pg');
|
const pg = require('pg');
|
||||||
const pgQueryStream = require('pg-query-stream');
|
const pgQueryStream = require('pg-query-stream');
|
||||||
@@ -93,7 +93,7 @@ async function runStreamItem(client, sql, options) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** @type {import('dbgate-types').EngineDriver} */
|
/** @type {import('dbgate-types').EngineDriver} */
|
||||||
const driver = {
|
const drivers = driverBases.map(driverBase => ({
|
||||||
...driverBase,
|
...driverBase,
|
||||||
analyserClass: Analyser,
|
analyserClass: Analyser,
|
||||||
|
|
||||||
@@ -220,6 +220,6 @@ const driver = {
|
|||||||
const { rows } = await this.query(client, 'SELECT datname AS name FROM pg_database WHERE datistemplate = false');
|
const { rows } = await this.query(client, 'SELECT datname AS name FROM pg_database WHERE datistemplate = false');
|
||||||
return rows;
|
return rows;
|
||||||
},
|
},
|
||||||
};
|
}));
|
||||||
|
|
||||||
module.exports = driver;
|
module.exports = drivers;
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
const driver = require('./driver');
|
const drivers = require('./drivers');
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
packageName: 'dbgate-plugin-postgres',
|
packageName: 'dbgate-plugin-postgres',
|
||||||
driver,
|
drivers,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ const dialect = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/** @type {import('dbgate-types').EngineDriver} */
|
/** @type {import('dbgate-types').EngineDriver} */
|
||||||
const driver = {
|
const postgresDriver = {
|
||||||
...driverBase,
|
...driverBase,
|
||||||
dumperClass: Dumper,
|
dumperClass: Dumper,
|
||||||
dialect,
|
dialect,
|
||||||
@@ -24,4 +24,24 @@ const driver = {
|
|||||||
defaultPort: 5432,
|
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];
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import driver from './driver';
|
import drivers from './drivers';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
packageName: 'dbgate-plugin-postgres',
|
packageName: 'dbgate-plugin-postgres',
|
||||||
driver,
|
drivers,
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ const driver = require('./driver');
|
|||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
packageName: 'dbgate-plugin-sqlite',
|
packageName: 'dbgate-plugin-sqlite',
|
||||||
driver,
|
drivers: [driver],
|
||||||
initialize(dbgateEnv) {
|
initialize(dbgateEnv) {
|
||||||
driver.initialize(dbgateEnv);
|
driver.initialize(dbgateEnv);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -2,5 +2,5 @@ import driver from './driver';
|
|||||||
|
|
||||||
export default {
|
export default {
|
||||||
packageName: 'dbgate-plugin-sqlite',
|
packageName: 'dbgate-plugin-sqlite',
|
||||||
driver,
|
drivers: [driver],
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user