From b6b61234346c56f6f6291aa6f66df7f365128621 Mon Sep 17 00:00:00 2001 From: "SPRINX0\\prochazka" Date: Tue, 2 Dec 2025 18:07:28 +0100 Subject: [PATCH] refresh DB - don't offer incremental analysis when not supported --- packages/types/engines.d.ts | 1 + .../web/src/commands/changeDatabaseStatusCommand.ts | 6 ++++-- packages/web/src/utility/common.ts | 12 +++++++----- packages/web/src/widgets/SqlObjectList.svelte | 2 +- .../dbgate-plugin-clickhouse/src/frontend/driver.js | 1 + plugins/dbgate-plugin-mssql/src/frontend/driver.js | 1 + plugins/dbgate-plugin-mysql/src/frontend/drivers.js | 1 + .../dbgate-plugin-postgres/src/frontend/drivers.js | 1 + plugins/dbgate-plugin-sqlite/src/frontend/drivers.js | 1 + 9 files changed, 18 insertions(+), 8 deletions(-) diff --git a/packages/types/engines.d.ts b/packages/types/engines.d.ts index c583ff88a..5556b5b10 100644 --- a/packages/types/engines.d.ts +++ b/packages/types/engines.d.ts @@ -238,6 +238,7 @@ export interface EngineDriver extends FilterBeha supportsDatabaseRestore?: boolean; supportsServerSummary?: boolean; supportsDatabaseProfiler?: boolean; + supportsIncrementalAnalysis?: boolean; requiresDefaultSortCriteria?: boolean; profilerFormatterFunction?: string; profilerTimestampFunction?: string; diff --git a/packages/web/src/commands/changeDatabaseStatusCommand.ts b/packages/web/src/commands/changeDatabaseStatusCommand.ts index d5ed17452..8323060c6 100644 --- a/packages/web/src/commands/changeDatabaseStatusCommand.ts +++ b/packages/web/src/commands/changeDatabaseStatusCommand.ts @@ -1,10 +1,11 @@ import _ from 'lodash'; -import { currentDatabase, getCurrentDatabase } from '../stores'; +import { currentDatabase, getCurrentDatabase, getExtensions } from '../stores'; import getElectron from '../utility/getElectron'; import registerCommand from './registerCommand'; import { apiCall } from '../utility/api'; import { getDatabasStatusMenu, switchCurrentDatabase } from '../utility/common'; import { __t } from '../translations'; +import { findEngineDriver } from 'dbgate-tools'; registerCommand({ id: 'database.changeState', @@ -18,7 +19,8 @@ registerCommand({ conid: connection._id, database: name, }; + const driver = findEngineDriver(connection, getExtensions()); - return getDatabasStatusMenu(dbid); + return getDatabasStatusMenu(dbid, driver); }, }); diff --git a/packages/web/src/utility/common.ts b/packages/web/src/utility/common.ts index 71bcca5c8..a08b8e370 100644 --- a/packages/web/src/utility/common.ts +++ b/packages/web/src/utility/common.ts @@ -155,12 +155,12 @@ export function getKeyTextFromEvent(e) { return keyText; } -export function getDatabasStatusMenu(dbid) { +export function getDatabasStatusMenu(dbid, driver = null) { function callSchemalListChanged() { apiCall('database-connections/dispatch-database-changed-event', { event: 'schema-list-changed', ...dbid }); } - return [ - { + return _.compact([ + driver?.supportsIncrementalAnalysis && { text: _t('command.database.refreshIncremental', { defaultMessage: 'Refresh DB structure (incremental)' }), onClick: () => { apiCall('database-connections/sync-model', dbid); @@ -168,7 +168,9 @@ export function getDatabasStatusMenu(dbid) { }, }, { - text: _t('command.database.refreshFull', { defaultMessage: 'Refresh DB structure (full)' }), + text: driver?.supportsIncrementalAnalysis + ? _t('command.database.refreshFull', { defaultMessage: 'Refresh DB structure (full)' }) + : _t('command.database.refresh', { defaultMessage: 'Refresh DB structure' }), onClick: () => { apiCall('database-connections/sync-model', { ...dbid, isFullRefresh: true }); callSchemalListChanged(); @@ -189,5 +191,5 @@ export function getDatabasStatusMenu(dbid) { switchCurrentDatabase(null); }, }, - ]; + ]); } diff --git a/packages/web/src/widgets/SqlObjectList.svelte b/packages/web/src/widgets/SqlObjectList.svelte index 604a3c5c9..58d8f8710 100644 --- a/packages/web/src/widgets/SqlObjectList.svelte +++ b/packages/web/src/widgets/SqlObjectList.svelte @@ -143,7 +143,7 @@ } function createRefreshDatabaseMenu() { - return getDatabasStatusMenu({ conid, database }); + return getDatabasStatusMenu({ conid, database }, driver); } function handleFullRefreshDatabase() { diff --git a/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js b/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js index 33a2a884c..5db8c7d38 100644 --- a/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js +++ b/plugins/dbgate-plugin-clickhouse/src/frontend/driver.js @@ -147,6 +147,7 @@ const driver = { dialect, engine: 'clickhouse@dbgate-plugin-clickhouse', title: 'ClickHouse', + supportsIncrementalAnalysis: true, showConnectionField: (field, values) => { return ['databaseUrl', 'defaultDatabase', 'singleDatabase', 'isReadOnly', 'user', 'password'].includes(field); }, diff --git a/plugins/dbgate-plugin-mssql/src/frontend/driver.js b/plugins/dbgate-plugin-mssql/src/frontend/driver.js index 13520b105..7f9961202 100644 --- a/plugins/dbgate-plugin-mssql/src/frontend/driver.js +++ b/plugins/dbgate-plugin-mssql/src/frontend/driver.js @@ -171,6 +171,7 @@ const driver = { defaultPort: 1433, defaultAuthTypeName: 'tedious', supportsTransactions: true, + supportsIncrementalAnalysis: true, // databaseUrlPlaceholder: 'e.g. server=localhost&authentication.type=default&authentication.type.user=myuser&authentication.type.password=pwd&options.database=mydb', getNewObjectTemplates() { diff --git a/plugins/dbgate-plugin-mysql/src/frontend/drivers.js b/plugins/dbgate-plugin-mysql/src/frontend/drivers.js index 8e605068c..9ae5c4946 100644 --- a/plugins/dbgate-plugin-mysql/src/frontend/drivers.js +++ b/plugins/dbgate-plugin-mysql/src/frontend/drivers.js @@ -184,6 +184,7 @@ const mysqlDriverBase = { defaultAuthTypeName: 'hostPort', defaultSocketPath: '/var/run/mysqld/mysqld.sock', supportsTransactions: true, + supportsIncrementalAnalysis: true, getNewObjectTemplates() { return [ diff --git a/plugins/dbgate-plugin-postgres/src/frontend/drivers.js b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js index c67f1577e..190e92ba9 100644 --- a/plugins/dbgate-plugin-postgres/src/frontend/drivers.js +++ b/plugins/dbgate-plugin-postgres/src/frontend/drivers.js @@ -121,6 +121,7 @@ const dialect = { const postgresDriverBase = { ...driverBase, supportsTransactions: true, + supportsIncrementalAnalysis: true, dumperClass: Dumper, dialect, // showConnectionField: (field, values) => diff --git a/plugins/dbgate-plugin-sqlite/src/frontend/drivers.js b/plugins/dbgate-plugin-sqlite/src/frontend/drivers.js index 4dbedeb63..91fc37fa3 100644 --- a/plugins/dbgate-plugin-sqlite/src/frontend/drivers.js +++ b/plugins/dbgate-plugin-sqlite/src/frontend/drivers.js @@ -48,6 +48,7 @@ const sqliteDriverBase = { dialect, readOnlySessions: true, supportsTransactions: true, + supportsIncrementalAnalysis: true, getQuerySplitterOptions: (usage) => usage == 'editor'