From 2dbb32ab5eb57cbba4355a43eb5cc9d6dae7cabc Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Fri, 31 Jul 2026 09:34:26 +0800 Subject: [PATCH] fix(sidebar): preserve MySQL data tabs on reopen --- .../lib/__tests__/sidebar/dataTabOpenPolicy.spec.ts | 10 ++++++++++ apps/desktop/src/lib/sidebar/dataTabOpenPolicy.ts | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/desktop/src/lib/__tests__/sidebar/dataTabOpenPolicy.spec.ts b/apps/desktop/src/lib/__tests__/sidebar/dataTabOpenPolicy.spec.ts index 31786c23f..eaaae262b 100644 --- a/apps/desktop/src/lib/__tests__/sidebar/dataTabOpenPolicy.spec.ts +++ b/apps/desktop/src/lib/__tests__/sidebar/dataTabOpenPolicy.spec.ts @@ -82,6 +82,16 @@ describe("dataTabOpenPolicy", () => { expect(findExistingDataTabCandidate([tab], usersTarget, { openMode: "default", reuseDataTab: false })).toEqual({ tab, match: "same-table" }); }); + it("ignores metadata query schemas for database-scoped tables", () => { + const tab = dataTab("users", "users"); + tab.schema = undefined; + tab.tableMeta = { schema: "app", tableName: "users", columns: [], primaryKeys: [] }; + const mysqlTarget = { connectionId: "conn", database: "app", tableName: "users" }; + + expect(canApplyDataTabMetadata(tab, mysqlTarget, new AbortController().signal)).toBe(true); + expect(findExistingDataTabCandidate([tab], mysqlTarget, { openMode: "default", reuseDataTab: false })).toEqual({ tab, match: "same-table" }); + }); + it("rejects metadata after its request is cancelled", () => { const tab = dataTab("users", "users"); tab.tableMeta = { schema: "public", tableName: "users", columns: [], primaryKeys: [] }; diff --git a/apps/desktop/src/lib/sidebar/dataTabOpenPolicy.ts b/apps/desktop/src/lib/sidebar/dataTabOpenPolicy.ts index 94d527060..814508d29 100644 --- a/apps/desktop/src/lib/sidebar/dataTabOpenPolicy.ts +++ b/apps/desktop/src/lib/sidebar/dataTabOpenPolicy.ts @@ -34,7 +34,8 @@ function isSameDatabase(tab: DataTabLike, target: Pick