mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-29 23:53:57 +00:00
more flexible connection dialog, improved UX when connecting to redshift
This commit is contained in:
@@ -34,6 +34,14 @@ const driver = {
|
||||
supportsDatabaseUrl: true,
|
||||
databaseUrlPlaceholder: 'e.g. mongodb://username:password@mongodb.mydomain.net/dbname',
|
||||
|
||||
showConnectionField: (field, values) => {
|
||||
if (field == 'useDatabaseUrl') return true;
|
||||
if (values.useDatabaseUrl) {
|
||||
return ['databaseUrl', 'defaultDatabase', 'singleDatabase'].includes(field);
|
||||
}
|
||||
return ['server', 'port', 'user', 'password', 'defaultDatabase', 'singleDatabase'].includes(field);
|
||||
},
|
||||
|
||||
getCollectionUpdateScript(changeSet) {
|
||||
let res = '';
|
||||
for (const insert of changeSet.inserts) {
|
||||
|
||||
@@ -32,6 +32,9 @@ const driver = {
|
||||
}
|
||||
return dialect;
|
||||
},
|
||||
showConnectionField: (field, values) =>
|
||||
['authType', 'server', 'port', 'user', 'password', 'defaultDatabase', 'singleDatabase'].includes(field),
|
||||
|
||||
engine: 'mssql@dbgate-plugin-mssql',
|
||||
title: 'Microsoft SQL Server',
|
||||
defaultPort: 1433,
|
||||
|
||||
@@ -14,24 +14,27 @@ const dialect = {
|
||||
},
|
||||
};
|
||||
|
||||
/** @type {import('dbgate-types').EngineDriver} */
|
||||
const mysqlDriver = {
|
||||
const mysqlDriverBase = {
|
||||
...driverBase,
|
||||
showConnectionField: (field, values) =>
|
||||
['server', 'port', 'user', 'password', 'defaultDatabase', 'singleDatabase'].includes(field),
|
||||
dumperClass: Dumper,
|
||||
dialect,
|
||||
defaultPort: 3306,
|
||||
};
|
||||
|
||||
/** @type {import('dbgate-types').EngineDriver} */
|
||||
const mysqlDriver = {
|
||||
...mysqlDriverBase,
|
||||
engine: 'mysql@dbgate-plugin-mysql',
|
||||
title: 'MySQL',
|
||||
defaultPort: 3306,
|
||||
};
|
||||
|
||||
/** @type {import('dbgate-types').EngineDriver} */
|
||||
const mariaDriver = {
|
||||
...driverBase,
|
||||
dumperClass: Dumper,
|
||||
dialect,
|
||||
...mysqlDriverBase,
|
||||
engine: 'mariadb@dbgate-plugin-mysql',
|
||||
title: 'MariaDB',
|
||||
defaultPort: 3306,
|
||||
};
|
||||
|
||||
module.exports = [mysqlDriver, mariaDriver];
|
||||
|
||||
@@ -97,16 +97,38 @@ const drivers = driverBases.map(driverBase => ({
|
||||
...driverBase,
|
||||
analyserClass: Analyser,
|
||||
|
||||
async connect({ server, port, user, password, database, ssl }) {
|
||||
const client = new pg.Client({
|
||||
// connectionString: 'postgres://root@localhost:26257/postgres?sslmode=disabke'
|
||||
host: server,
|
||||
port,
|
||||
user,
|
||||
password,
|
||||
database: database || 'postgres',
|
||||
ssl,
|
||||
});
|
||||
async connect({ engine, server, port, user, password, database, databaseUrl, ssl }) {
|
||||
let options = null;
|
||||
|
||||
if (engine == 'redshift@dbgate-plugin-postgres') {
|
||||
let url = databaseUrl;
|
||||
if (url && url.startsWith('jdbc:redshift://')) {
|
||||
url = url.substring('jdbc:redshift://'.length);
|
||||
}
|
||||
if (user && password) {
|
||||
url = `postgres://${user}:${password}@${url}`;
|
||||
} else if (user) {
|
||||
url = `postgres://${user}@${url}`;
|
||||
} else {
|
||||
url = `postgres://${url}`;
|
||||
}
|
||||
|
||||
options = {
|
||||
connectionString: url,
|
||||
};
|
||||
} else {
|
||||
options = {
|
||||
// connectionString: 'postgres://root@localhost:26257/postgres?sslmode=disabke'
|
||||
host: server,
|
||||
port,
|
||||
user,
|
||||
password,
|
||||
database: database || 'postgres',
|
||||
ssl,
|
||||
};
|
||||
}
|
||||
|
||||
const client = new pg.Client(options);
|
||||
await client.connect();
|
||||
return client;
|
||||
},
|
||||
|
||||
@@ -15,11 +15,17 @@ const dialect = {
|
||||
stringAgg: true,
|
||||
};
|
||||
|
||||
/** @type {import('dbgate-types').EngineDriver} */
|
||||
const postgresDriver = {
|
||||
const postgresDriverBase = {
|
||||
...driverBase,
|
||||
dumperClass: Dumper,
|
||||
dialect,
|
||||
showConnectionField: (field, values) =>
|
||||
['server', 'port', 'user', 'password', 'defaultDatabase', 'singleDatabase'].includes(field),
|
||||
};
|
||||
|
||||
/** @type {import('dbgate-types').EngineDriver} */
|
||||
const postgresDriver = {
|
||||
...postgresDriverBase,
|
||||
engine: 'postgres@dbgate-plugin-postgres',
|
||||
title: 'Postgre SQL',
|
||||
defaultPort: 5432,
|
||||
@@ -27,9 +33,7 @@ const postgresDriver = {
|
||||
|
||||
/** @type {import('dbgate-types').EngineDriver} */
|
||||
const cockroachDriver = {
|
||||
...driverBase,
|
||||
dumperClass: Dumper,
|
||||
dialect,
|
||||
...postgresDriverBase,
|
||||
engine: 'cockroach@dbgate-plugin-postgres',
|
||||
title: 'CockroachDB',
|
||||
defaultPort: 26257,
|
||||
@@ -37,15 +41,30 @@ const cockroachDriver = {
|
||||
|
||||
/** @type {import('dbgate-types').EngineDriver} */
|
||||
const redshiftDriver = {
|
||||
...driverBase,
|
||||
dumperClass: Dumper,
|
||||
...postgresDriverBase,
|
||||
dialect: {
|
||||
...dialect,
|
||||
stringAgg: false,
|
||||
},
|
||||
engine: 'red@dbgate-plugin-postgres',
|
||||
engine: 'redshift@dbgate-plugin-postgres',
|
||||
title: 'Amazon Redshift',
|
||||
defaultPort: 5439,
|
||||
showConnectionField: (field, values) => ['databaseUrl', 'user', 'password'].includes(field),
|
||||
beforeConnectionSave: connection => {
|
||||
const { databaseUrl } = connection;
|
||||
if (databaseUrl) {
|
||||
const m = databaseUrl.match(/\/([^/]+)$/);
|
||||
if (m) {
|
||||
return {
|
||||
...connection,
|
||||
singleDatabase: true,
|
||||
defaultDatabase: m[1],
|
||||
// displayName: connection.displayName || `${m[1]} on Amazon Redshift`,
|
||||
};
|
||||
}
|
||||
}
|
||||
return connection;
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = [postgresDriver, cockroachDriver, redshiftDriver];
|
||||
|
||||
@@ -1,6 +1,13 @@
|
||||
const { driverBase } = require('dbgate-tools');
|
||||
const Dumper = require('./Dumper');
|
||||
|
||||
function getDatabaseFileLabel(databaseFile) {
|
||||
if (!databaseFile) return databaseFile;
|
||||
const m = databaseFile.match(/[\/]([^\/]+)$/);
|
||||
if (m) return m[1];
|
||||
return databaseFile;
|
||||
}
|
||||
|
||||
/** @type {import('dbgate-types').SqlDialect} */
|
||||
const dialect = {
|
||||
limitSelect: true,
|
||||
@@ -13,7 +20,6 @@ const dialect = {
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
/** @type {import('dbgate-types').EngineDriver} */
|
||||
const driver = {
|
||||
...driverBase,
|
||||
@@ -21,7 +27,15 @@ const driver = {
|
||||
dialect,
|
||||
engine: 'sqlite@dbgate-plugin-sqlite',
|
||||
title: 'SQLite',
|
||||
isFileDatabase: true,
|
||||
showConnectionField: (field, values) => field == 'databaseFile',
|
||||
showConnectionTab: (field) => false,
|
||||
beforeConnectionSave: (connection) => ({
|
||||
...connection,
|
||||
singleDatabase: true,
|
||||
defaultDatabase: getDatabaseFileLabel(connection.databaseFile),
|
||||
}),
|
||||
// isFileDatabase: true,
|
||||
isElectronOnly: true,
|
||||
};
|
||||
|
||||
module.exports = driver;
|
||||
|
||||
Reference in New Issue
Block a user