mirror of
https://github.com/DeNNiiInc/dbgate.git
synced 2026-04-18 04:26:01 +00:00
connecting via socket for mysql and postgres #358
This commit is contained in:
@@ -29,10 +29,11 @@ const drivers = driverBases.map(driverBase => ({
|
||||
...driverBase,
|
||||
analyserClass: Analyser,
|
||||
|
||||
async connect({ server, port, user, password, database, ssl, isReadOnly, forceRowsAsObjects }) {
|
||||
const connection = mysql2.createConnection({
|
||||
host: server,
|
||||
port,
|
||||
async connect({ server, port, user, password, database, ssl, isReadOnly, forceRowsAsObjects, socketPath, authType }) {
|
||||
const options = {
|
||||
host: authType == 'socket' ? null : server,
|
||||
port: authType == 'socket' ? null : port,
|
||||
socketPath: authType == 'socket' ? socketPath || driverBase.defaultSocketPath : null,
|
||||
user,
|
||||
password,
|
||||
database,
|
||||
@@ -43,7 +44,9 @@ const drivers = driverBases.map(driverBase => ({
|
||||
dateStrings: true,
|
||||
// TODO: test following options
|
||||
// multipleStatements: true,
|
||||
});
|
||||
};
|
||||
|
||||
const connection = mysql2.createConnection(options);
|
||||
connection._database_name = database;
|
||||
if (isReadOnly) {
|
||||
await this.query(connection, 'SET SESSION TRANSACTION READ ONLY');
|
||||
@@ -182,6 +185,20 @@ const drivers = driverBases.map(driverBase => ({
|
||||
});
|
||||
return res;
|
||||
},
|
||||
getAuthTypes() {
|
||||
return [
|
||||
{
|
||||
title: 'Host and port',
|
||||
name: 'hostPort',
|
||||
disabledFields: ['socketPath'],
|
||||
},
|
||||
{
|
||||
title: 'Socket',
|
||||
name: 'socket',
|
||||
disabledFields: ['server', 'port'],
|
||||
},
|
||||
];
|
||||
},
|
||||
}));
|
||||
|
||||
module.exports = drivers;
|
||||
|
||||
@@ -102,21 +102,25 @@ const dialect = {
|
||||
const mysqlDriverBase = {
|
||||
...driverBase,
|
||||
showConnectionField: (field, values) =>
|
||||
['server', 'port', 'user', 'password', 'defaultDatabase', 'singleDatabase', 'isReadOnly'].includes(field),
|
||||
['authType', 'user', 'password', 'defaultDatabase', 'singleDatabase', 'isReadOnly'].includes(field) ||
|
||||
(values.authType == 'socket' && ['socketPath'].includes(field)) ||
|
||||
(values.authType != 'socket' && ['server', 'port'].includes(field)),
|
||||
dumperClass: Dumper,
|
||||
dialect,
|
||||
defaultPort: 3306,
|
||||
getQuerySplitterOptions: () => mysqlSplitterOptions,
|
||||
readOnlySessions: true,
|
||||
supportsDatabaseDump: true,
|
||||
authTypeLabel: 'Connection mode',
|
||||
defaultAuthTypeName: 'hostPort',
|
||||
defaultSocketPath: '/var/run/mysqld/mysqld.sock',
|
||||
|
||||
getNewObjectTemplates() {
|
||||
return [
|
||||
{ label: 'New view', sql: 'CREATE VIEW myview\nAS\nSELECT * FROM table1' },
|
||||
{
|
||||
label: 'New procedure',
|
||||
sql:
|
||||
'DELIMITER //\n\nCREATE PROCEDURE myproc (IN arg1 INT)\nBEGIN\n SELECT * FROM table1;\nEND\n\nDELIMITER ;',
|
||||
sql: 'DELIMITER //\n\nCREATE PROCEDURE myproc (IN arg1 INT)\nBEGIN\n SELECT * FROM table1;\nEND\n\nDELIMITER ;',
|
||||
},
|
||||
{ label: 'New function', sql: 'CREATE FUNCTION myfunc (arg1 INT)\nRETURNS INT DETERMINISTIC\nRETURN 1' },
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user