fix(sidebar): preserve MySQL data tabs on reopen

This commit is contained in:
t8y2 2026-07-31 09:34:26 +08:00
parent 2f9fbb4e0a
commit 2dbb32ab5e
No known key found for this signature in database
2 changed files with 12 additions and 1 deletions

View File

@ -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: [] };

View File

@ -34,7 +34,8 @@ function isSameDatabase(tab: DataTabLike, target: Pick<DataTabTarget, "connectio
}
function isSameTable(tab: DataTabLike, target: DataTabTarget): boolean {
return isSameDatabase(tab, target) && (tab.tableMeta?.catalog || "") === (target.catalog || "") && (tab.schema || tab.tableMeta?.schema || "") === (target.schema || "") && (tab.tableMeta?.tableName || tab.title) === target.tableName;
const tabSchema = tab.schema || (target.schema ? tab.tableMeta?.schema : undefined) || "";
return isSameDatabase(tab, target) && (tab.tableMeta?.catalog || "") === (target.catalog || "") && tabSchema === (target.schema || "") && (tab.tableMeta?.tableName || tab.title) === target.tableName;
}
export function canApplyDataTabMetadata(tab: DataTabLike | undefined, target: DataTabTarget, signal?: AbortSignal): boolean {