From 153daf6c09ad54a981bc193ab280d96e9022cb9a Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Sun, 17 May 2026 15:13:16 +0800 Subject: [PATCH] fix(sidebar): avoid opening schema browser from pg database --- src/components/sidebar/TreeItem.vue | 7 ++----- src/lib/databaseFeatureSupport.ts | 8 +++++++- tests/databaseCapabilities.test.ts | 8 ++++++++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/components/sidebar/TreeItem.vue b/src/components/sidebar/TreeItem.vue index 6e40d88f84..d02a1ae137 100644 --- a/src/components/sidebar/TreeItem.vue +++ b/src/components/sidebar/TreeItem.vue @@ -76,7 +76,7 @@ import { supportsDatabaseCreation, supportsDatabaseSearch, supportsFieldLineage, - supportsObjectBrowser, + supportsObjectBrowserTreeNode, supportsSchemaDiagram, supportsSqlFileExecution, supportsTableImport, @@ -1283,10 +1283,7 @@ const canOpenDatabaseSearch = computed(() => { return !!props.node.database && supportsDatabaseSearch(nodeConfig.value?.db_type); }); const canOpenObjectBrowser = computed(() => { - return ( - (props.node.type === "database" || props.node.type === "schema" || props.node.type === "object-browser") && - supportsObjectBrowser(nodeConfig.value?.db_type) - ); + return supportsObjectBrowserTreeNode(nodeConfig.value?.db_type, props.node.type); }); const canOpenTableImport = computed(() => { return props.node.type === "table" && !!props.node.database && supportsTableImport(nodeConfig.value?.db_type); diff --git a/src/lib/databaseFeatureSupport.ts b/src/lib/databaseFeatureSupport.ts index a49557bd69..05c669472c 100644 --- a/src/lib/databaseFeatureSupport.ts +++ b/src/lib/databaseFeatureSupport.ts @@ -1,4 +1,4 @@ -import type { DatabaseType } from "@/types/database"; +import type { DatabaseType, TreeNodeType } from "@/types/database"; import { AGENT_DRIVER_TYPES, CREATE_DATABASE_SUPPORTED_TYPES, @@ -72,6 +72,12 @@ export function supportsObjectBrowser(dbType?: DatabaseType): boolean { return !!dbType && !["redis", "mongodb", "elasticsearch"].includes(dbType); } +export function supportsObjectBrowserTreeNode(dbType: DatabaseType | undefined, nodeType: TreeNodeType): boolean { + if (!supportsObjectBrowser(dbType)) return false; + if (nodeType === "database" && isSchemaAware(dbType)) return false; + return nodeType === "database" || nodeType === "schema" || nodeType === "object-browser"; +} + export function supportsTableTruncate(dbType?: DatabaseType): boolean { return !!dbType && dbType !== "sqlite" && dbType !== "duckdb"; } diff --git a/tests/databaseCapabilities.test.ts b/tests/databaseCapabilities.test.ts index fe9cd0a7a7..34c2cad744 100644 --- a/tests/databaseCapabilities.test.ts +++ b/tests/databaseCapabilities.test.ts @@ -9,6 +9,7 @@ import { supportsDriverManagement, supportsFieldLineage, supportsObjectBrowser, + supportsObjectBrowserTreeNode, supportsSchemaDiagram, supportsSqlFileExecution, supportsTableImport, @@ -111,3 +112,10 @@ test("describes feature support through capability helpers", () => { assert.equal(supportsTableTruncate("mysql"), true); assert.equal(supportsTableTruncate("duckdb"), false); }); + +test("schema-aware database nodes do not open an object browser tab", () => { + assert.equal(supportsObjectBrowserTreeNode("postgres", "database"), false); + assert.equal(supportsObjectBrowserTreeNode("postgres", "schema"), true); + assert.equal(supportsObjectBrowserTreeNode("mysql", "database"), true); + assert.equal(supportsObjectBrowserTreeNode("mongodb", "database"), false); +});