From 8058c238b8ec4ba37336035a1d5895b65bd11cbc Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Tue, 2 Jun 2026 02:13:09 +0800 Subject: [PATCH] fix(desktop): allow multiple new table structure tabs --- apps/desktop/src/stores/queryStore.ts | 22 ++++++++++++---------- packages/app-tests/queryStore.test.ts | 19 +++++++++++++++++++ 2 files changed, 31 insertions(+), 10 deletions(-) diff --git a/apps/desktop/src/stores/queryStore.ts b/apps/desktop/src/stores/queryStore.ts index 862074033..beb41f327 100644 --- a/apps/desktop/src/stores/queryStore.ts +++ b/apps/desktop/src/stores/queryStore.ts @@ -234,16 +234,18 @@ export const useQueryStore = defineStore("query", () => { function openTableStructure(connectionId: string, database: string, schema?: string, tableName?: string) { const resolvedTableName = tableName || ""; - const existing = tabs.value.find( - (tab) => - tab.mode === "structure" && - tab.connectionId === connectionId && - tab.database === database && - (tab.structureTableName || "") === resolvedTableName, - ); - if (existing) { - activeTabId.value = existing.id; - return existing.id; + if (resolvedTableName) { + const existing = tabs.value.find( + (tab) => + tab.mode === "structure" && + tab.connectionId === connectionId && + tab.database === database && + (tab.structureTableName || "") === resolvedTableName, + ); + if (existing) { + activeTabId.value = existing.id; + return existing.id; + } } const title = resolvedTableName diff --git a/packages/app-tests/queryStore.test.ts b/packages/app-tests/queryStore.test.ts index d9549b20a..abd68f839 100644 --- a/packages/app-tests/queryStore.test.ts +++ b/packages/app-tests/queryStore.test.ts @@ -748,3 +748,22 @@ test("tab reuse is scoped by mode and schema instead of title alone", () => { restoreStorage(); } }); + +test("new table structure tabs can open multiple drafts while existing tables still reuse tabs", () => { + const restoreStorage = installMemoryStorage(); + try { + setActivePinia(createPinia()); + const store = useQueryStore(); + + const firstDraftId = store.openTableStructure("conn-1", "db", "public", ""); + const secondDraftId = store.openTableStructure("conn-1", "db", "public", ""); + const firstEditId = store.openTableStructure("conn-1", "db", "public", "users"); + const secondEditId = store.openTableStructure("conn-1", "db", "public", "users"); + + assert.notEqual(secondDraftId, firstDraftId); + assert.equal(secondEditId, firstEditId); + assert.equal(store.tabs.length, 3); + } finally { + restoreStorage(); + } +});