feat(sidebar): wildcard patterns for visible databases

Closes #7164
This commit is contained in:
t8y2 committed 2026-08-26 18:43:31 +08:00
1 parent 71344c637c
commit d06f62f9f4
36 files changed
+232 -19

No files matched your search

+36 -2
View File
@@ -104,7 +104,7 @@ import { migrateSqlServerLegacyCompatibilityConfig, requiresSqlServerLegacyCompa
import { gaussdbMTypeDisplayName } from "@/lib/table/postgresDataTypeHelp";
import { deleteTabResultSnapshotsForOwner } from "@/lib/tabs/tabResultCache";
import { disposeSqlServerActivityTracesForConnection, hasSqlServerActivityTraceForConnection } from "@/lib/sqlserver/sqlServerActivityTraceRuntime";
import { connectionUsesVisibleSchemaFilter, filterDatabaseNamesForConnection, filterSchemaNamesForConnection, filterVisibleDatabaseNames, normalizeVisibleDatabaseSelection } from "@/lib/database/visibleDatabases";
import { connectionUsesVisibleSchemaFilter, filterDatabaseNamesForConnection, filterSchemaNamesForConnection, filterVisibleDatabaseNames, normalizeVisibleDatabaseSelection, visibleDatabasePatternsAreEnabled } from "@/lib/database/visibleDatabases";
import {
buildObjectGroupPlaceholderNodes,
buildGroupedObjectTreeNodes,
@@ -3442,6 +3442,26 @@ export const useConnectionStore = defineStore("connection", () => {
await reloadConnectionDatabaseChildren(connectionId);
}
// 显式勾选 + 通配符模式一并保存(#7164):模式对之后新建的库持续生效
async function setVisibleDatabaseFilter(connectionId: string, databaseNames: string[], patterns: string[]) {
const config = getConfig(connectionId);
if (!config) return;
const normalizedPatterns = patterns.map((pattern) => pattern.trim()).filter((pattern) => pattern !== "");
const idx = connections.value.findIndex((connection) => connection.id === connectionId);
if (idx < 0) return;
const nextConnections = [...connections.value];
nextConnections[idx] = {
...nextConnections[idx],
visible_databases: normalizeVisibleDatabaseSelection(databaseNames, databaseNames),
visible_database_patterns: normalizedPatterns.length > 0 ? normalizedPatterns : undefined,
};
await persistConnections(nextConnections);
connections.value = nextConnections;
invalidateCompletionCache(connectionId);
rebuildTreeNodes();
await reloadConnectionDatabaseChildren(connectionId);
}
function recordPrimaryVisibleObjectNames(connectionId: string, objectNames: readonly string[]) {
const names = [...objectNames];
const existing = primaryVisibleObjectNames.value[connectionId];
@@ -3473,7 +3493,20 @@ export const useConnectionStore = defineStore("connection", () => {
async function clearVisibleDatabases(connectionId: string) {
const config = getConfig(connectionId);
if (!config || !Array.isArray(config.visible_databases)) return;
if (!config || (!Array.isArray(config.visible_databases) && !visibleDatabasePatternsAreEnabled(config.visible_database_patterns))) return;
if (visibleDatabasePatternsAreEnabled(config.visible_database_patterns)) {
const idx = connections.value.findIndex((connection) => connection.id === connectionId);
if (idx >= 0) {
const nextConnections = [...connections.value];
nextConnections[idx] = { ...nextConnections[idx], visible_databases: undefined, visible_database_patterns: undefined };
await persistConnections(nextConnections);
connections.value = nextConnections;
invalidateCompletionCache(connectionId);
rebuildTreeNodes();
await reloadConnectionDatabaseChildren(connectionId);
return;
}
}
await updateVisibleDatabasesConfig(connectionId, undefined);
await reloadConnectionDatabaseChildren(connectionId);
}
@@ -8743,6 +8776,7 @@ export const useConnectionStore = defineStore("connection", () => {
getRedisDatabaseAlias,
setRedisDatabaseAlias,
setVisibleDatabases,
setVisibleDatabaseFilter,
clearVisibleDatabases,
ensureVisibleDatabase,
setVisibleSchemas,