From c4f4ce246026fb77ceac97619f61293e44bf4e38 Mon Sep 17 00:00:00 2001 From: zipg Date: Thu, 16 Jul 2026 17:30:49 +0800 Subject: [PATCH] fix(sqlserver): restore view selection after reconnect --- .../src/components/sidebar/ConnectionTree.vue | 6 ++++++ packages/app-tests/queryCursorTableTarget.test.ts | 12 ++++++++++++ 2 files changed, 18 insertions(+) diff --git a/apps/desktop/src/components/sidebar/ConnectionTree.vue b/apps/desktop/src/components/sidebar/ConnectionTree.vue index df37609ba..cc83dff08 100644 --- a/apps/desktop/src/components/sidebar/ConnectionTree.vue +++ b/apps/desktop/src/components/sidebar/ConnectionTree.vue @@ -783,6 +783,12 @@ async function ensureTreeLoadedForTarget(target: ActiveTabSidebarTarget, opts?: if (force || !databaseChildrenLoaded) { await store.loadSqlServerDatabaseObjects(connId, target.database, loadOptions); } + if (targetSchema) { + const schemaNode = findSchemaNode(store.treeNodes, connId, target.database, targetSchema); + if (schemaNode && (force || !schemaNode.children || schemaNode.children.length === 0)) { + await store.loadTables(connId, target.database, targetSchema, loadOptions); + } + } } else if (usesSchemaTree) { if (force || !databaseChildrenLoaded) { await store.loadSchemas(connId, target.database, loadOptions); diff --git a/packages/app-tests/queryCursorTableTarget.test.ts b/packages/app-tests/queryCursorTableTarget.test.ts index 95f3bba81..46765fcab 100644 --- a/packages/app-tests/queryCursorTableTarget.test.ts +++ b/packages/app-tests/queryCursorTableTarget.test.ts @@ -63,6 +63,18 @@ test("builds schema-aware cursor table candidates", () => { }); }); +test("builds SQL Server view candidates from bracket-quoted identifiers", () => { + const sql = "SELECT * FROM [sales].[v_city_sales]"; + const tab = queryTab(sql, sql.length, undefined); + + assert.deepEqual(queryCursorTableCandidate(tab, "sqlserver"), { + connectionId: "conn-1", + database: "app", + schema: "sales", + tableName: "v_city_sales", + }); +}); + test("builds database-qualified candidates for multi-database non-schema engines", () => { const tab = queryTab("select * from analytics.events", "select * from analytics.events".length, undefined);