From 63ff9321a4519892c322c6857da8811ae0b5e7a2 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Tue, 7 Jul 2026 21:51:04 +0800 Subject: [PATCH] fix(editor): cover cross-database column completion --- .../sql/sqlCompletion.context.spec.ts | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/apps/desktop/src/lib/__tests__/sql/sqlCompletion.context.spec.ts b/apps/desktop/src/lib/__tests__/sql/sqlCompletion.context.spec.ts index b0fa4f26cf..ca6e2140f0 100644 --- a/apps/desktop/src/lib/__tests__/sql/sqlCompletion.context.spec.ts +++ b/apps/desktop/src/lib/__tests__/sql/sqlCompletion.context.spec.ts @@ -243,6 +243,30 @@ describe("sqlCompletion scoped context classification", () => { expect(context.referencedTables).toEqual(expect.arrayContaining([expect.objectContaining({ name: "sq", alias: "sq", columns: ["id", "user_name"] })])); }); + + it("suggests columns for cross-database qualified table references", () => { + const sql = "SELECT * FROM current_orders WHERE reporting.orders."; + const context = getSqlCompletionContext(sql, sql.length); + const items = buildSqlCompletionItems(sql, sql.length, { + tables: [], + columnsByTable: new Map([ + [ + "reporting.orders", + [ + { name: "id", table: "orders", schema: "reporting", dataType: "int" }, + { name: "status", table: "orders", schema: "reporting", dataType: "varchar" }, + ], + ], + ["archive.orders", [{ name: "archived_at", table: "orders", schema: "archive", dataType: "datetime" }]], + ]), + }); + + expect(context.qualifier).toBe("reporting.orders"); + expect(context.qualifierParts).toEqual(["reporting", "orders"]); + expect(context.suggestColumns).toBe(true); + expect(items).toEqual(expect.arrayContaining([expect.objectContaining({ label: "id", type: "column" }), expect.objectContaining({ label: "status", type: "column" })])); + expect(items.some((item) => item.label === "archived_at")).toBe(false); + }); }); describe("sqlCompletion scoped metadata ranking", () => {