From e5fb3414febb50ae038ddea10e215ffab318bbd3 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Wed, 24 Jul 2024 13:20:44 +0200 Subject: [PATCH 1/4] ensure window bounds within display on startup #856 --- app/src/electron.js | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/app/src/electron.js b/app/src/electron.js index 88808ad9b..b1909b567 100644 --- a/app/src/electron.js +++ b/app/src/electron.js @@ -276,6 +276,28 @@ function fillMissingSettings(value) { return res; } +function ensureBoundsVisible(bounds) { + const area = electron.screen.getDisplayMatching(bounds).workArea; + + let { x, y, width, height } = bounds; + + const isWithinDisplay = + x >= area.x && x + width <= area.x + area.width && y >= area.y && y + height <= area.y + area.height; + + if (!isWithinDisplay) { + width = Math.min(width, area.width); + height = Math.min(height, area.height); + + if (width < 400) width = 400; + if (height < 300) height = 300; + + x = area.x; // + Math.round(area.width - width / 2); + y = area.y; // + Math.round(area.height - height / 2); + } + + return { x, y, width, height }; +} + function createWindow() { let settingsJson = {}; try { @@ -288,7 +310,8 @@ function createWindow() { settingsJson = fillMissingSettings({}); } - const bounds = initialConfig['winBounds']; + let bounds = initialConfig['winBounds']; + bounds = ensureBoundsVisible(bounds); useNativeMenu = settingsJson['app.useNativeMenu']; mainWindow = new BrowserWindow({ @@ -353,6 +376,11 @@ function createWindow() { mainWindow.on('unmaximize', () => { mainWindow.webContents.send('setIsMaximized', false); }); + + // app.on('browser-window-focus', () => { + // const bounds = ensureBoundsVisible(mainWindow.getBounds()); + // mainWindow.setBounds(bounds); + // }); } if (!apiLoaded) { From 315c0670d0ff3ea8a594a128afb84e42f2196127 Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Wed, 24 Jul 2024 13:52:34 +0200 Subject: [PATCH 2/4] improved multi column filter #855 --- packages/datalib/src/GridDisplay.ts | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/packages/datalib/src/GridDisplay.ts b/packages/datalib/src/GridDisplay.ts index 70656e76d..9a6f34e53 100644 --- a/packages/datalib/src/GridDisplay.ts +++ b/packages/datalib/src/GridDisplay.ts @@ -214,14 +214,14 @@ export abstract class GridDisplay { } if (this.baseTableOrView && this.config.multiColumnFilter) { - try { - const condition = parseFilter(this.config.multiColumnFilter, 'string'); - if (condition) { - const orCondition: CompoudCondition = { - conditionType: 'or', - conditions: [], - }; - for (const column of this.baseTableOrView.columns) { + const orCondition: CompoudCondition = { + conditionType: 'or', + conditions: [], + }; + for (const column of this.baseTableOrView.columns) { + try { + const condition = parseFilter(this.config.multiColumnFilter, getFilterType(column.dataType)); + if (condition) { orCondition.conditions.push( _.cloneDeepWith(condition, (expr: Expression) => { if (expr.exprType == 'placeholder') { @@ -230,12 +230,13 @@ export abstract class GridDisplay { }) ); } - if (orCondition.conditions.length > 0) { - conditions.push(orCondition); - } + } catch (err) { + // skip for this column + continue; } - } catch (err) { - console.warn(err.message); + } + if (orCondition.conditions.length > 0) { + conditions.push(orCondition); } } @@ -482,6 +483,7 @@ export abstract class GridDisplay { this.setConfig(cfg => ({ ...cfg, filters: {}, + multiColumnFilter: null, })); this.reload(); } From 97753e2b11d06330d56be345a26696183b45b8ce Mon Sep 17 00:00:00 2001 From: Jan Prochazka Date: Wed, 24 Jul 2024 15:31:48 +0200 Subject: [PATCH 3/4] #839 filter out timescaledb internal objects --- .../dbgate-plugin-postgres/src/backend/sql/columns.js | 1 + .../src/backend/sql/routineModifications.js | 2 +- .../src/backend/sql/routines.js | 11 ++++++----- .../src/backend/sql/tableList.js | 1 + .../src/backend/sql/tableModifications.js | 1 + .../src/backend/sql/viewModifications.js | 2 +- .../dbgate-plugin-postgres/src/backend/sql/views.js | 2 +- 7 files changed, 12 insertions(+), 8 deletions(-) diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/columns.js b/plugins/dbgate-plugin-postgres/src/backend/sql/columns.js index 0be8a81df..32b0b16f5 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/columns.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/columns.js @@ -14,6 +14,7 @@ where table_schema <> 'information_schema' and table_schema <> 'pg_catalog' and table_schema !~ '^pg_toast' + and table_schema !~ '^_timescaledb_' and ( ('tables:' || table_schema || '.' || table_name) =OBJECT_ID_CONDITION or diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/routineModifications.js b/plugins/dbgate-plugin-postgres/src/backend/sql/routineModifications.js index ad93e9734..1eae4ca88 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/routineModifications.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/routineModifications.js @@ -5,6 +5,6 @@ select md5(routine_definition) as "hash_code", routine_type as "object_type" from - information_schema.routines where routine_schema != 'information_schema' and routine_schema != 'pg_catalog' + information_schema.routines where routine_schema != 'information_schema' and routine_schema != 'pg_catalog' and routine_schema !~ '^_timescaledb_' and routine_type in ('PROCEDURE', 'FUNCTION') `; diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/routines.js b/plugins/dbgate-plugin-postgres/src/backend/sql/routines.js index f136eebac..24e7aabc1 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/routines.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/routines.js @@ -2,16 +2,17 @@ module.exports = ` select routine_name as "pure_name", routine_schema as "schema_name", - routine_definition as "definition", - md5(routine_definition) as "hash_code", + max(routine_definition) as "definition", + max(md5(routine_definition)) as "hash_code", routine_type as "object_type", - data_type as "data_type", - external_language as "language" + string_agg(data_type, '|') as "data_type", + max(external_language) as "language" from - information_schema.routines where routine_schema != 'information_schema' and routine_schema != 'pg_catalog' + information_schema.routines where routine_schema != 'information_schema' and routine_schema != 'pg_catalog' and routine_schema !~ '^_timescaledb_' and ( (routine_type = 'PROCEDURE' and ('procedures:' || routine_schema || '.' || routine_name) =OBJECT_ID_CONDITION) or (routine_type = 'FUNCTION' and ('functions:' || routine_schema || '.' || routine_name) =OBJECT_ID_CONDITION) ) + group by routine_name, routine_schema, routine_type `; diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/tableList.js b/plugins/dbgate-plugin-postgres/src/backend/sql/tableList.js index e416ed85f..1e9f44db2 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/tableList.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/tableList.js @@ -7,4 +7,5 @@ and infoTables.table_schema <> 'pg_catalog' and infoTables.table_schema <> 'information_schema' and infoTables.table_schema <> 'pg_internal' and infoTables.table_schema !~ '^pg_toast' +and infoTables.table_schema !~ '^_timescaledb_' `; diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/tableModifications.js b/plugins/dbgate-plugin-postgres/src/backend/sql/tableModifications.js index 700405dac..1e074769b 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/tableModifications.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/tableModifications.js @@ -25,4 +25,5 @@ and infoTables.table_schema <> 'pg_catalog' and infoTables.table_schema <> 'information_schema' and infoTables.table_schema <> 'pg_internal' and infoTables.table_schema !~ '^pg_toast' +and infoTables.table_schema !~ '^_timescaledb_' `; diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/viewModifications.js b/plugins/dbgate-plugin-postgres/src/backend/sql/viewModifications.js index 9a61358a9..e344bbddc 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/viewModifications.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/viewModifications.js @@ -4,5 +4,5 @@ select table_schema as "schema_name", md5(view_definition) as "hash_code" from - information_schema.views where table_schema != 'information_schema' and table_schema != 'pg_catalog' + information_schema.views where table_schema != 'information_schema' and table_schema != 'pg_catalog' and table_schema !~ '^_timescaledb_' `; diff --git a/plugins/dbgate-plugin-postgres/src/backend/sql/views.js b/plugins/dbgate-plugin-postgres/src/backend/sql/views.js index aa25a0cf9..a009f3ac5 100644 --- a/plugins/dbgate-plugin-postgres/src/backend/sql/views.js +++ b/plugins/dbgate-plugin-postgres/src/backend/sql/views.js @@ -6,6 +6,6 @@ select md5(view_definition) as "hash_code" from information_schema.views -where table_schema != 'information_schema' and table_schema != 'pg_catalog' +where table_schema != 'information_schema' and table_schema != 'pg_catalog' and table_schema !~ '^_timescaledb_' and ('views:' || table_schema || '.' || table_name) =OBJECT_ID_CONDITION `; From c3e05e22ad3b61ef4148fca5b3d28ab24cc0301d Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Wed, 24 Jul 2024 15:37:51 +0200 Subject: [PATCH 4/4] v5.3.2-beta.1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index de6bf204e..ea905be0c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "private": true, - "version": "5.3.1", + "version": "5.3.2-beta.1", "name": "dbgate-all", "workspaces": [ "packages/*",