1
1
mirror of https://github.com/Fabio286/antares.git synced 2025-06-05 21:59:22 +02:00

perf(PostgreSQL): improved support of connection strings, closes #893

This commit is contained in:
2024-11-08 18:09:37 +01:00
parent c97ade949c
commit f0d312fb59
10 changed files with 15 additions and 73 deletions

8
package-lock.json generated
View File

@ -42,7 +42,6 @@
"node-firebird": "~1.1.8",
"node-loader": "~2.0.0",
"pg": "~8.11.5",
"pg-connection-string": "~2.5.0",
"pg-query-stream": "~4.2.3",
"pgsql-ast-parser": "~7.2.1",
"pinia": "~2.1.7",
@ -12142,10 +12141,6 @@
"license": "MIT",
"optional": true
},
"node_modules/pg-connection-string": {
"version": "2.5.0",
"license": "MIT"
},
"node_modules/pg-cursor": {
"version": "2.10.3",
"license": "MIT",
@ -24507,9 +24502,6 @@
"version": "1.1.1",
"optional": true
},
"pg-connection-string": {
"version": "2.5.0"
},
"pg-cursor": {
"version": "2.10.3",
"requires": {}

View File

@ -151,7 +151,6 @@
"node-firebird": "~1.1.8",
"node-loader": "~2.0.0",
"pg": "~8.11.5",
"pg-connection-string": "~2.5.0",
"pg-query-stream": "~4.2.3",
"pgsql-ast-parser": "~7.2.1",
"pinia": "~2.1.7",

View File

@ -57,6 +57,7 @@ export interface ConnectionParams {
cert?: string;
key?: string;
ca?: string;
connString?: string;
untrustedConnection: boolean;
ciphers?: string;
ssh: boolean;

View File

@ -26,6 +26,7 @@ export default (connections: Record<string, antares.Client>) => {
user: conn.user,
password: conn.password,
readonly: conn.readonly,
connectionString: conn.connString,
database: '',
schema: '',
databasePath: '',
@ -122,6 +123,7 @@ export default (connections: Record<string, antares.Client>) => {
password: conn.password,
application_name: 'Antares SQL',
readonly: conn.readonly,
connectionString: conn.connString,
database: '',
schema: '',
databasePath: '',

View File

@ -155,6 +155,7 @@ export class PostgreSQLClient extends BaseClient {
host: this._params.host,
port: this._params.port,
user: this._params.user,
connectionString: this._params.connectionString,
database: 'postgres' as string,
password: this._params.password,
ssl: null as ConnectionOptions

View File

@ -67,7 +67,7 @@
<div class="column col-7 col-sm-12">
<input
ref="pgString"
v-model="connection.pgConnString"
v-model="connection.connString"
class="form-input"
type="text"
>
@ -502,8 +502,8 @@ const connection = ref({
sshKey: '',
sshPort: 22,
sshKeepAliveInterval: 1800,
pgConnString: ''
}) as Ref<ConnectionParams & { pgConnString: string }>;
connString: ''
}) as Ref<ConnectionParams & { connString: string }>;
const firstInput: Ref<HTMLInputElement> = ref(null);
const isConnecting = ref(false);

View File

@ -68,7 +68,7 @@
<div class="column col-7 col-sm-12">
<input
ref="pgString"
v-model="localConnection.pgConnString"
v-model="localConnection.connString"
class="form-input"
type="text"
>
@ -502,7 +502,7 @@ const clients = [
];
const firstInput: Ref<HTMLInputElement> = ref(null);
const localConnection: Ref<ConnectionParams & { pgConnString: string }> = ref(null);
const localConnection: Ref<ConnectionParams & { connString: string }> = ref(null);
const isConnecting = ref(false);
const isTesting = ref(false);
const isAsking = ref(false);

View File

@ -1,18 +1,15 @@
import { ConnectionParams, IpcResponse } from 'common/interfaces/antares';
import { ipcRenderer } from 'electron';
import connStringConstruct from '../libs/connStringDecode';
import { unproxify } from '../libs/unproxify';
export default class {
static makeTest (params: ConnectionParams & { pgConnString?: string }): Promise<IpcResponse> {
const newParams = connStringConstruct(params) as ConnectionParams;
return ipcRenderer.invoke('test-connection', unproxify(newParams));
static makeTest (params: ConnectionParams & { connString?: string }): Promise<IpcResponse> {
return ipcRenderer.invoke('test-connection', unproxify(params));
}
static connect (params: ConnectionParams & { pgConnString?: string }): Promise<IpcResponse> {
const newParams = connStringConstruct(params) as ConnectionParams;
return ipcRenderer.invoke('connect', unproxify(newParams));
static connect (params: ConnectionParams & { connString?: string }): Promise<IpcResponse> {
return ipcRenderer.invoke('connect', unproxify(params));
}
static abortConnection (uid: string): void {

View File

@ -1,50 +0,0 @@
import { ConnectionParams } from 'common/interfaces/antares';
import * as formatter from 'pg-connection-string'; // parses a connection string
const formatHost = (host: string) => {
const results = host === 'localhost' ? '127.0.0.1' : host;
return results;
};
const checkForSSl = (conn: string) => {
return conn.includes('ssl=true');
};
const connStringConstruct = (args: ConnectionParams & { pgConnString?: string }): ConnectionParams => {
if (!args.pgConnString)
return args;
if (typeof args.pgConnString !== 'string')
return args;
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const stringArgs: any = formatter.parse(args.pgConnString);
const client = args.client || 'pg';
args.client = client;
args.host = formatHost(stringArgs.host);
args.database = stringArgs.database;
args.port = stringArgs.port || '5432';
args.user = stringArgs.user;
args.password = stringArgs.password;
// ssh
args.ssh = stringArgs.ssh || args.ssh;
args.sshHost = stringArgs.sshHost;
args.sshUser = stringArgs.sshUser;
args.sshPass = stringArgs.sshPass;
args.sshKey = stringArgs.sshKey;
args.sshPort = stringArgs.sshPort;
// ssl mode
args.ssl = checkForSSl(args.pgConnString) || args.ssl;
args.cert = stringArgs.sslcert;
args.key = stringArgs.sslkey;
args.ca = stringArgs.sslrootcert;
args.ciphers = stringArgs.ciphers;
return args;
};
export default connStringConstruct;

View File

@ -147,7 +147,7 @@ export const useWorkspacesStore = defineStore('workspaces', {
else
this.selectedWorkspace = uid;
},
async connectWorkspace (connection: ConnectionParams & { pgConnString?: string }, args?: {mode?: string; signal?: AbortSignal}) {
async connectWorkspace (connection: ConnectionParams & { connString?: string }, args?: {mode?: string; signal?: AbortSignal}) {
this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === connection.uid
? {
...workspace,
@ -427,7 +427,7 @@ export const useWorkspacesStore = defineStore('workspaces', {
this.selectTab({ uid, tab: 0 });
},
async switchConnection (connection: ConnectionParams & { pgConnString?: string }) {
async switchConnection (connection: ConnectionParams & { connString?: string }) {
await Connection.disconnect(connection.uid);
return this.connectWorkspace(connection, { mode: 'switch' });
},