From 381bdfdfd7e63ddabd216d14f4d4c55adde71e91 Mon Sep 17 00:00:00 2001 From: t8y2 <1156263951@qq.com> Date: Wed, 3 Jun 2026 14:27:26 +0800 Subject: [PATCH] fix(sidebar): dedupe MySQL table objects --- apps/desktop/src/lib/tableTree.ts | 11 +++++++++-- packages/app-tests/tableTree.test.ts | 23 +++++++++++++++++++++++ 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/apps/desktop/src/lib/tableTree.ts b/apps/desktop/src/lib/tableTree.ts index acf0baa12..a6c54b474 100644 --- a/apps/desktop/src/lib/tableTree.ts +++ b/apps/desktop/src/lib/tableTree.ts @@ -231,13 +231,20 @@ export function mergeTableInfosIntoObjects( if (objectType !== "TABLE" && objectType !== "VIEW") continue; const name = normalizeDatabaseObjectName(table.name); if (!name) continue; - const key = `${objectType}\0${(schema || "").toLowerCase()}\0${name.toLowerCase()}`; + const matchingObject = objects.find((obj) => { + const objName = normalizeDatabaseObjectName(obj.name); + if (objName.toLowerCase() !== name.toLowerCase()) return false; + return normalizeObjectType(obj.object_type) === objectType; + }); + const tableSchema = + schema ?? (matchingObject?.schema ? normalizeDatabaseObjectName(matchingObject.schema) : undefined); + const key = `${objectType}\0${(tableSchema || "").toLowerCase()}\0${name.toLowerCase()}`; if (seen.has(key)) continue; seen.add(key); merged.push({ name, object_type: objectType, - schema, + schema: tableSchema, comment: table.comment, created_at: undefined, updated_at: undefined, diff --git a/packages/app-tests/tableTree.test.ts b/packages/app-tests/tableTree.test.ts index 3c148040a..193fbcf5d 100644 --- a/packages/app-tests/tableTree.test.ts +++ b/packages/app-tests/tableTree.test.ts @@ -193,3 +193,26 @@ test("mergeTableInfosIntoObjects restores views missing from object metadata", ( ], ); }); + +test("mergeTableInfosIntoObjects dedupes MySQL tables when object metadata carries database as schema", () => { + const merged = mergeTableInfosIntoObjects( + [ + { + name: "orders", + object_type: "TABLE", + schema: "app", + comment: null, + created_at: null, + updated_at: null, + parent_schema: null, + parent_name: null, + }, + ], + [table("orders")], + ); + + assert.deepEqual( + merged.map((item) => ({ name: item.name, type: item.object_type, schema: item.schema })), + [{ name: "orders", type: "TABLE", schema: "app" }], + ); +});