From 763be8532d2b61d0b4d45e72343f6a2e5fee1db9 Mon Sep 17 00:00:00 2001 From: Fabio Di Stasio Date: Sat, 5 Mar 2022 21:58:56 +0100 Subject: [PATCH 1/7] fix: wrong soft sort algorithm for numeric fields, closes #199 --- src/renderer/components/WorkspaceTabQueryTable.vue | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/renderer/components/WorkspaceTabQueryTable.vue b/src/renderer/components/WorkspaceTabQueryTable.vue index fbd33279..08283527 100644 --- a/src/renderer/components/WorkspaceTabQueryTable.vue +++ b/src/renderer/components/WorkspaceTabQueryTable.vue @@ -175,8 +175,10 @@ export default { if (this.currentSort && !this.isHardSort) { return [...this.localResults].sort((a, b) => { let modifier = 1; - const valA = typeof a[this.currentSort] === 'string' ? a[this.currentSort].toLowerCase() : a[this.currentSort]; - const valB = typeof b[this.currentSort] === 'string' ? b[this.currentSort].toLowerCase() : b[this.currentSort]; + let valA = typeof a[this.currentSort] === 'string' ? a[this.currentSort].toLowerCase() : a[this.currentSort]; + if (!isNaN(valA)) valA = Number(valA); + let valB = typeof b[this.currentSort] === 'string' ? b[this.currentSort].toLowerCase() : b[this.currentSort]; + if (!isNaN(valB)) valB = Number(valB); if (this.currentSortDir === 'desc') modifier = -1; if (valA < valB) return -1 * modifier; if (valA > valB) return 1 * modifier; From 6305752ad117cc29c04bce3ce3df321f743cdc44 Mon Sep 17 00:00:00 2001 From: Topollo <30502407+raliqala@users.noreply.github.com> Date: Sun, 6 Mar 2022 02:20:10 +0200 Subject: [PATCH 2/7] feat(PostgreSQL): :sparkles: Postgress connection string feature for local and server connection string This feature is based on this [issue](https://github.com/Fabio286/antares/issues/193) I tested with the following posgress connection strings postgresql://postgres:pgpassword@127.0.0.1:5432/my_local_databse?connection=local postgres://serveruser:serverpass@test.db.elephantsql.com/my_remote_databse?connection=server postgres://serveruser:serverpass@test.db.elephantsql.com:5432/my_remote_databse postgresql://postgres:pgpassword@127.0.0.1:5432/my_local_databse. The connection string decoder is loaded before "test-connection", "check-connection", and "connect" --- ...che_logs2022-03-05T07_59_37_036Z-debug.log | 0 package.json | 3 +- src/renderer/components/BaseMap.vue | 18 +-- .../WorkspaceAddConnectionPanel.vue | 16 ++- .../WorkspaceEditConnectionPanel.vue | 13 ++ src/renderer/i18n/en-US.js | 3 +- src/renderer/ipc-api/Connection.js | 13 +- src/renderer/libs/connStringDecode.js | 112 ++++++++++++++++++ 8 files changed, 162 insertions(+), 16 deletions(-) create mode 100644 UsersraliqAppDataLocalnpm-cache_logs2022-03-05T07_59_37_036Z-debug.log create mode 100644 src/renderer/libs/connStringDecode.js diff --git a/UsersraliqAppDataLocalnpm-cache_logs2022-03-05T07_59_37_036Z-debug.log b/UsersraliqAppDataLocalnpm-cache_logs2022-03-05T07_59_37_036Z-debug.log new file mode 100644 index 00000000..e69de29b diff --git a/package.json b/package.json index 4920ee1c..820d1bd8 100644 --- a/package.json +++ b/package.json @@ -109,7 +109,7 @@ "@turf/helpers": "^6.5.0", "@vscode/vscode-languagedetection": "^1.0.21", "ace-builds": "^1.4.13", - "better-sqlite3": "^7.4.4", + "better-sqlite3": "^7.5.0", "electron-log": "^4.4.1", "electron-store": "^8.0.1", "electron-updater": "^4.6.1", @@ -142,6 +142,7 @@ "electron": "^17.0.1", "electron-builder": "^22.14.11", "electron-devtools-installer": "^3.2.0", + "electron-rebuild": "^3.2.7", "eslint": "^7.32.0", "eslint-config-standard": "^16.0.3", "eslint-plugin-import": "^2.24.2", diff --git a/src/renderer/components/BaseMap.vue b/src/renderer/components/BaseMap.vue index c1cbb836..e4424a83 100644 --- a/src/renderer/components/BaseMap.vue +++ b/src/renderer/components/BaseMap.vue @@ -93,16 +93,16 @@ export default { diff --git a/src/renderer/components/WorkspaceAddConnectionPanel.vue b/src/renderer/components/WorkspaceAddConnectionPanel.vue index 8d6b144c..d16b2ed9 100644 --- a/src/renderer/components/WorkspaceAddConnectionPanel.vue +++ b/src/renderer/components/WorkspaceAddConnectionPanel.vue @@ -45,6 +45,19 @@ > +
+
+ +
+
+ +
+
@@ -412,7 +425,8 @@ export default { sshUser: '', sshPass: '', sshKey: '', - sshPort: 22 + sshPort: 22, + pgConnString: '' }, isConnecting: false, isTesting: false, diff --git a/src/renderer/components/WorkspaceEditConnectionPanel.vue b/src/renderer/components/WorkspaceEditConnectionPanel.vue index c62a02bf..4cd04512 100644 --- a/src/renderer/components/WorkspaceEditConnectionPanel.vue +++ b/src/renderer/components/WorkspaceEditConnectionPanel.vue @@ -45,6 +45,19 @@ >
+
+
+ +
+
+ +
+
diff --git a/src/renderer/i18n/en-US.js b/src/renderer/i18n/en-US.js index b812c506..1ee3b26b 100644 --- a/src/renderer/i18n/en-US.js +++ b/src/renderer/i18n/en-US.js @@ -126,7 +126,8 @@ module.exports = { enable: 'Enable', disable: 'Disable', commit: 'Commit', - rollback: 'Rollback' + rollback: 'Rollback', + connectionString: 'Conn String' }, message: { appWelcome: 'Welcome to Antares SQL Client!', diff --git a/src/renderer/ipc-api/Connection.js b/src/renderer/ipc-api/Connection.js index 03d20938..c6dad0f9 100644 --- a/src/renderer/ipc-api/Connection.js +++ b/src/renderer/ipc-api/Connection.js @@ -1,20 +1,25 @@ 'use strict'; import { ipcRenderer } from 'electron'; +import connStringConstruct from '../libs/connStringDecode'; + export default class { - static makeTest (params) { + static makeTest(params) { + params = connStringConstruct(params); return ipcRenderer.invoke('test-connection', params); } - static checkConnection (params) { + static checkConnection(params) { + params = connStringConstruct(params); return ipcRenderer.invoke('check-connection', params); } - static connect (params) { + static connect(params) { + params = connStringConstruct(params); return ipcRenderer.invoke('connect', params); } - static disconnect (uid) { + static disconnect(uid) { return ipcRenderer.invoke('disconnect', uid); } } diff --git a/src/renderer/libs/connStringDecode.js b/src/renderer/libs/connStringDecode.js new file mode 100644 index 00000000..a270f1cf --- /dev/null +++ b/src/renderer/libs/connStringDecode.js @@ -0,0 +1,112 @@ + +const getUrlScheme = pgString => { + const scheme = pgString ? pgString.split('://')[0] : ''; + + return scheme === 'postgresql' ? 'postgres' : scheme; +}; + +const passAndHost = part => { + const host = part.split('@')[1] === 'localhost' ? '127.0.0.1' : part.split('@')[1]; + return [part.split('@')[0], host]; +}; + +const portAndDb = part => { + return part.split('/'); +}; + +const pass = (part) => { + return part.split('@'); +}; + +const hostAndDb = (part) => { + return part.split('/'); +}; + +const localConnectionString = (stringArgs, args) => { + let scheme = ''; + if (getUrlScheme(stringArgs) === 'postgres' || getUrlScheme(stringArgs) === 'postgresql') + scheme = 'pg'; + + const values = stringArgs.split('://')[1]; + const parts = values.split(':'); + + const userName = parts[0]; + + const password = passAndHost(parts[1])[0]; + const host = passAndHost(parts[1])[1]; + + const port = portAndDb(parts[2])[0]; + const dbName = portAndDb(parts[2])[1]; + + const client = args.client ? args.client : scheme; + + args.client = client; + args.host = host; + args.database = dbName; + args.port = port; + args.user = userName; + args.password = password; + + return args; +}; + +const onlineConnectionString = (stringArgs, args) => { + let scheme = ''; + const defaultPort = '5432'; + if (getUrlScheme(stringArgs) === 'postgres' || getUrlScheme(stringArgs) === 'postgresql') + scheme = 'pg'; + + const values = stringArgs.split('://')[1]; + const parts = values.split(':'); + + const userName = parts[0]; + + const password = pass(parts[1])[0]; + + const host = hostAndDb(pass(parts[1])[1])[0]; + const dbName = hostAndDb(pass(parts[1])[1])[1]; + + const port = defaultPort; + + console.log(userName, password, host, dbName, port); + + const client = args.client ? args.client : scheme; + + args.client = client; + args.host = host; + args.database = dbName; + args.port = port; + args.user = userName; + args.password = password; + + return args; +}; + +const connectionType = part => { + return part.split('=')[1]; +}; + +const connStringConstruct = args => { + if (!args.pgConnString) + return args; + + const pgConnString = args.pgConnString; + + if (!pgConnString.includes('?')) + return localConnectionString(pgConnString, args); + + const pgConnStringPrepared = pgConnString.split('?')[0]; + + switch (connectionType(pgConnString.split('?')[1])) { + case 'local': + return localConnectionString(pgConnStringPrepared, args); + + case 'server': + return onlineConnectionString(pgConnStringPrepared, args); + + default: + return args; + }; +}; + +export default connStringConstruct; From 8e983ad2cbe1c7c4f9e1566c231530d4e7c39bf6 Mon Sep 17 00:00:00 2001 From: Fabio Di Stasio Date: Sun, 6 Mar 2022 09:40:11 +0100 Subject: [PATCH 3/7] refactor(PostgreSQL): minor refactor on UI and code for pg connection string --- package.json | 1 - .../WorkspaceAddConnectionPanel.vue | 26 +++++++++---------- .../WorkspaceEditConnectionPanel.vue | 26 +++++++++---------- src/renderer/i18n/en-US.js | 2 +- src/renderer/ipc-api/Connection.js | 15 +++++------ src/renderer/libs/connStringDecode.js | 2 -- 6 files changed, 34 insertions(+), 38 deletions(-) diff --git a/package.json b/package.json index 820d1bd8..fd1b89b7 100644 --- a/package.json +++ b/package.json @@ -142,7 +142,6 @@ "electron": "^17.0.1", "electron-builder": "^22.14.11", "electron-devtools-installer": "^3.2.0", - "electron-rebuild": "^3.2.7", "eslint": "^7.32.0", "eslint-config-standard": "^16.0.3", "eslint-plugin-import": "^2.24.2", diff --git a/src/renderer/components/WorkspaceAddConnectionPanel.vue b/src/renderer/components/WorkspaceAddConnectionPanel.vue index d16b2ed9..276f2d48 100644 --- a/src/renderer/components/WorkspaceAddConnectionPanel.vue +++ b/src/renderer/components/WorkspaceAddConnectionPanel.vue @@ -45,19 +45,6 @@ >
-
-
- -
-
- -
-
@@ -74,6 +61,19 @@
+
+
+ +
+
+ +
+
diff --git a/src/renderer/components/WorkspaceEditConnectionPanel.vue b/src/renderer/components/WorkspaceEditConnectionPanel.vue index 4cd04512..ec413f43 100644 --- a/src/renderer/components/WorkspaceEditConnectionPanel.vue +++ b/src/renderer/components/WorkspaceEditConnectionPanel.vue @@ -45,19 +45,6 @@ >
-
-
- -
-
- -
-
@@ -74,6 +61,19 @@
+
+
+ +
+
+ +
+
diff --git a/src/renderer/i18n/en-US.js b/src/renderer/i18n/en-US.js index 1ee3b26b..8b24be5b 100644 --- a/src/renderer/i18n/en-US.js +++ b/src/renderer/i18n/en-US.js @@ -127,7 +127,7 @@ module.exports = { disable: 'Disable', commit: 'Commit', rollback: 'Rollback', - connectionString: 'Conn String' + connectionString: 'Connection string' }, message: { appWelcome: 'Welcome to Antares SQL Client!', diff --git a/src/renderer/ipc-api/Connection.js b/src/renderer/ipc-api/Connection.js index c6dad0f9..12f1ccce 100644 --- a/src/renderer/ipc-api/Connection.js +++ b/src/renderer/ipc-api/Connection.js @@ -4,22 +4,21 @@ import { ipcRenderer } from 'electron'; import connStringConstruct from '../libs/connStringDecode'; export default class { - static makeTest(params) { + static makeTest (params) { params = connStringConstruct(params); return ipcRenderer.invoke('test-connection', params); } - static checkConnection(params) { - params = connStringConstruct(params); - return ipcRenderer.invoke('check-connection', params); - } - - static connect(params) { + static connect (params) { params = connStringConstruct(params); return ipcRenderer.invoke('connect', params); } - static disconnect(uid) { + static checkConnection (uid) { + return ipcRenderer.invoke('check-connection', uid); + } + + static disconnect (uid) { return ipcRenderer.invoke('disconnect', uid); } } diff --git a/src/renderer/libs/connStringDecode.js b/src/renderer/libs/connStringDecode.js index a270f1cf..fb9b169d 100644 --- a/src/renderer/libs/connStringDecode.js +++ b/src/renderer/libs/connStringDecode.js @@ -68,8 +68,6 @@ const onlineConnectionString = (stringArgs, args) => { const port = defaultPort; - console.log(userName, password, host, dbName, port); - const client = args.client ? args.client : scheme; args.client = client; From 40e4fbda1512d35ac2ad1fb47117e25d66f78783 Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 6 Mar 2022 08:48:08 +0000 Subject: [PATCH 4/7] docs: update README.md [skip ci] --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index c0aa199b..9c04cfae 100644 --- a/README.md +++ b/README.md @@ -132,6 +132,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
文杰

💻
goYou

🌍 + +
Topollo

💻 + From 110adf90de15905c0eb788e9ffbb82978ed96f9e Mon Sep 17 00:00:00 2001 From: "allcontributors[bot]" <46447321+allcontributors[bot]@users.noreply.github.com> Date: Sun, 6 Mar 2022 08:48:09 +0000 Subject: [PATCH 5/7] docs: update .all-contributorsrc [skip ci] --- .all-contributorsrc | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.all-contributorsrc b/.all-contributorsrc index 531e03bd..824b6771 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -138,6 +138,15 @@ "contributions": [ "translation" ] + }, + { + "login": "raliqala", + "name": "Topollo", + "avatar_url": "https://avatars.githubusercontent.com/u/30502407?v=4", + "profile": "https://github.com/raliqala", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, From 9db6bfd255f515f5d8e75ad39a27c17badd78899 Mon Sep 17 00:00:00 2001 From: Fabio Di Stasio Date: Sun, 6 Mar 2022 16:02:24 +0100 Subject: [PATCH 6/7] refactor: show contributors in settings --- src/renderer/components/ModalSettings.vue | 22 ++++++++++++++++++---- src/renderer/i18n/en-US.js | 3 ++- webpack.renderer.config.js | 9 ++++++++- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/renderer/components/ModalSettings.vue b/src/renderer/components/ModalSettings.vue index 8c1f5f39..bb8ccd1f 100644 --- a/src/renderer/components/ModalSettings.vue +++ b/src/renderer/components/ModalSettings.vue @@ -282,12 +282,18 @@

{{ appName }}

-

+

{{ $t('word.version') }} {{ appVersion }}
GitHub Twitter Website
- {{ $t('word.author') }} Fabio Di Stasio
- {{ $t('message.madeWithJS') }} + {{ $t('word.author') }} {{ appAuthor }}

+
+ {{ $t('word.contributors') }}: +
+ {{ i !== 0 ? ', ' : '' }}{{ contributor }} +
+ {{ $t('message.madeWithJS') }} +
@@ -313,6 +319,7 @@ export default { }, data () { return { + appAuthor: 'Fabio Di Stasio', localLocale: null, localPageSize: null, localTimeout: null, @@ -367,7 +374,8 @@ export default { { code: 'vibrant_ink', name: 'Vibrant Ink' } ] } - ] + ], + contributors: process.env.APP_CONTRIBUTORS }; }, computed: { @@ -417,6 +425,12 @@ GROUP BY ORDER BY employee.id ASC; `; + }, + otherContributors () { + return this.contributors + .split(',') + .filter(c => !c.includes(this.appAuthor)) + .sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())); } }, created () { diff --git a/src/renderer/i18n/en-US.js b/src/renderer/i18n/en-US.js index 8b24be5b..af84f7f6 100644 --- a/src/renderer/i18n/en-US.js +++ b/src/renderer/i18n/en-US.js @@ -127,7 +127,8 @@ module.exports = { disable: 'Disable', commit: 'Commit', rollback: 'Rollback', - connectionString: 'Connection string' + connectionString: 'Connection string', + contributors: 'Contributors' }, message: { appWelcome: 'Welcome to Antares SQL Client!', diff --git a/webpack.renderer.config.js b/webpack.renderer.config.js index 27d6dc7e..9bb9cb8a 100644 --- a/webpack.renderer.config.js +++ b/webpack.renderer.config.js @@ -1,3 +1,4 @@ +const fs = require('fs'); const path = require('path'); const webpack = require('webpack'); const HtmlWebpackPlugin = require('html-webpack-plugin'); @@ -6,6 +7,11 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const ProgressPlugin = require('progress-webpack-plugin'); const { dependencies, devDependencies, version } = require('./package.json'); +const { contributors } = JSON.parse(fs.readFileSync('./.all-contributorsrc', 'utf-8')); +const parsedContributors = contributors.reduce((acc, c) => { + acc.push(c.name); + return acc; +}, []).join(','); const externals = Object.keys(dependencies).concat(Object.keys(devDependencies)); const isDevMode = process.env.NODE_ENV === 'development'; @@ -64,7 +70,8 @@ const config = { new VueLoaderPlugin(), new webpack.DefinePlugin({ 'process.env': { - PACKAGE_VERSION: `"${version}"` + PACKAGE_VERSION: `"${version}"`, + APP_CONTRIBUTORS: `"${parsedContributors}"` } }) ], From e85197a2cc42d295d016fd22ff1a32a7cc046626 Mon Sep 17 00:00:00 2001 From: Fabio Di Stasio Date: Mon, 7 Mar 2022 20:10:44 +0100 Subject: [PATCH 7/7] chore: UsersraliqAppDataLocalnpm-cache_logs2022-03-05T07_59_37_036Z-debug.log --- ...iqAppDataLocalnpm-cache_logs2022-03-05T07_59_37_036Z-debug.log | 0 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 UsersraliqAppDataLocalnpm-cache_logs2022-03-05T07_59_37_036Z-debug.log diff --git a/UsersraliqAppDataLocalnpm-cache_logs2022-03-05T07_59_37_036Z-debug.log b/UsersraliqAppDataLocalnpm-cache_logs2022-03-05T07_59_37_036Z-debug.log deleted file mode 100644 index e69de29b..00000000