From cfdcd9041bfb3c7e990e5b84d379a52656cca7d0 Mon Sep 17 00:00:00 2001 From: zipg Date: Wed, 14 Oct 2026 16:25:44 +0800 Subject: [PATCH] perf(dameng): defer cold query metadata until after execution --- .../queryStore.hiddenPrimaryKey.spec.ts | 114 +++++- apps/desktop/src/stores/queryStore.ts | 8 + .../first-result-latency.png | Bin 0 -> 46710 bytes .../live-results.json | 369 ++++++++++++++++++ .../dameng-query-metadata-2026-10-14.md | 43 ++ 5 files changed, 532 insertions(+), 2 deletions(-) create mode 100644 docs/assets/pr-dameng-query-metadata/first-result-latency.png create mode 100644 docs/assets/pr-dameng-query-metadata/live-results.json create mode 100644 docs/performance/dameng-query-metadata-2026-10-14.md diff --git a/apps/desktop/src/stores/__tests__/queryStore.hiddenPrimaryKey.spec.ts b/apps/desktop/src/stores/__tests__/queryStore.hiddenPrimaryKey.spec.ts index d68f981339..7749b6374a 100644 --- a/apps/desktop/src/stores/__tests__/queryStore.hiddenPrimaryKey.spec.ts +++ b/apps/desktop/src/stores/__tests__/queryStore.hiddenPrimaryKey.spec.ts @@ -188,7 +188,112 @@ describe("queryStore hidden primary key editing", () => { expect(executeMulti).toHaveBeenCalledWith("mysql-1", "app", "SELECT name FROM users", undefined, expect.any(String), expect.objectContaining({ timeoutSecs: 30 })); }, 10_000); - it("appends the hidden primary key for Dameng tables whose columns keep the created case", async () => { + it.each((["dameng", "jdbc"] as const).flatMap((dbType) => [true, false].flatMap((autoCommit) => [true, false].map((returnsPrimaryKey) => ({ dbType, autoCommit, returnsPrimaryKey })))))( + "dispatches cold Dameng SQL before metadata with $dbType, autoCommit=$autoCommit, returnsPrimaryKey=$returnsPrimaryKey", + async ({ dbType, autoCommit, returnsPrimaryKey }) => { + const columnsGate = deferred>>(); + const resultGate = deferred>>(); + getConnectionConfig.mockReturnValue({ id: "dameng-1", name: "Dameng", db_type: dbType, driver_profile: "dameng", database: "SYSDBA", query_timeout_secs: 30 }); + const columns = [ + { name: "ID", data_type: "INT", is_nullable: false, column_default: null, is_primary_key: true, extra: null }, + { name: "NAME", data_type: "VARCHAR(50)", is_nullable: true, column_default: null, is_primary_key: false, extra: null }, + ]; + const resultColumns = returnsPrimaryKey ? ["ID", "NAME"] : ["NAME"]; + const sql = `SELECT ${resultColumns.join(", ")} FROM APP.USERS`; + analyzeEditableQueryEditability.mockResolvedValue({ + editable: true, + analysis: { schema: "APP", tableName: "USERS", selectStar: false, columns: resultColumns.map((name) => ({ sourceName: name, resultName: name, expression: name })) }, + }); + getColumns.mockReturnValue(columnsGate.promise); + executeMulti.mockReturnValue(resultGate.promise); + executeInManualTransaction.mockReturnValue(resultGate.promise); + + const { useQueryStore } = await import("@/stores/queryStore"); + const store = useQueryStore(); + const tabId = store.createTab("dameng-1", "SYSDBA", "Query"); + store.setAutoCommit(tabId, autoCommit); + const tab = store.tabs.find((item) => item.id === tabId)!; + const execution = store.executeTabSql(tabId, sql); + const dispatch = autoCommit ? executeMulti : executeInManualTransaction; + await vi.waitFor(() => expect(dispatch).toHaveBeenCalledOnce()); + expect(dispatch.mock.calls[0]?.[autoCommit ? 2 : 1]).toBe(sql); + expect(getColumns).not.toHaveBeenCalled(); + expect(listIndexes).not.toHaveBeenCalled(); + + resultGate.resolve([{ columns: resultColumns, rows: [returnsPrimaryKey ? [1, "Alice"] : ["Alice"]], affected_rows: 0, execution_time_ms: 1 }]); + await execution; + expect(tab.isExecuting).toBe(false); + expect(tab.result?.columns).toEqual(resultColumns); + expect(tab.queryAnalysis).toBeUndefined(); + await vi.waitFor(() => expect(getColumns).toHaveBeenCalledOnce()); + + columnsGate.resolve(columns); + await vi.waitFor(() => expect(tab.tableMeta?.primaryKeys).toEqual(["ID"])); + expect(tab.result?.columns).toEqual(resultColumns); + if (returnsPrimaryKey) { + expect(tab.queryAnalysis).toBeDefined(); + expect(tab.queryEditabilityReason).toBeUndefined(); + } else { + expect(tab.queryAnalysis).toBeUndefined(); + expect(tab.queryEditabilityReason).toBe("primary-key-not-returned"); + } + }, + ); + + it("does not apply delayed Dameng metadata to a newer result", async () => { + const firstColumns = deferred>>(); + const columns = [ + { name: "ID", data_type: "INT", is_nullable: false, column_default: null, is_primary_key: true, extra: null }, + { name: "NAME", data_type: "VARCHAR(50)", is_nullable: true, column_default: null, is_primary_key: false, extra: null }, + ]; + getConnectionConfig.mockReturnValue({ id: "dameng-1", name: "Dameng", db_type: "dameng", database: "SYSDBA", query_timeout_secs: 30 }); + analyzeEditableQueryEditability.mockImplementation(async (sql: string) => ({ + editable: true, + analysis: { schema: "APP", tableName: sql.includes("ARCHIVE") ? "ARCHIVE" : "USERS", selectStar: false, columns: ["ID", "NAME"].map((name) => ({ sourceName: name, resultName: name, expression: name })) }, + })); + getColumns.mockImplementation((_connectionId: string, _database: string, _schema: string, table: string) => (table === "USERS" ? firstColumns.promise : Promise.resolve(columns))); + executeMulti.mockResolvedValueOnce([{ columns: ["ID", "NAME"], rows: [[1, "Alice"]], affected_rows: 0, execution_time_ms: 1 }]); + executeMulti.mockResolvedValueOnce([{ columns: ["ID", "NAME"], rows: [[2, "Bob"]], affected_rows: 0, execution_time_ms: 1 }]); + const { useQueryStore } = await import("@/stores/queryStore"); + const store = useQueryStore(); + const tabId = store.createTab("dameng-1", "SYSDBA", "Query"); + store.setAutoCommit(tabId, true); + const tab = store.tabs.find((item) => item.id === tabId)!; + + await store.executeTabSql(tabId, "SELECT ID, NAME FROM APP.USERS"); + await vi.waitFor(() => expect(getColumns).toHaveBeenCalledOnce()); + await store.executeTabSql(tabId, "SELECT ID, NAME FROM APP.ARCHIVE"); + await vi.waitFor(() => expect(tab.tableMeta?.tableName).toBe("ARCHIVE")); + const newerMetadata = tab.tableMeta; + + firstColumns.resolve(columns); + const { loadTableMetadata } = await import("@/lib/metadata/tableMetadataCache"); + await loadTableMetadata({ connectionId: "dameng-1", database: "SYSDBA", schema: "APP", tableName: "USERS", databaseType: "dameng" }); + expect(tab.tableMeta).toBe(newerMetadata); + expect(tab.tableMeta?.tableName).toBe("ARCHIVE"); + expect(tab.result?.rows).toEqual([[2, "Bob"]]); + expect(tab.queryEditabilityReason).toBeUndefined(); + }); + + it("keeps a successful Dameng result available when background metadata fails", async () => { + getConnectionConfig.mockReturnValue({ id: "dameng-1", name: "Dameng", db_type: "dameng", database: "SYSDBA", query_timeout_secs: 30 }); + getColumns.mockRejectedValue(new Error("dictionary unavailable")); + executeMulti.mockResolvedValue([{ columns: ["name"], rows: [["Alice"]], affected_rows: 0, execution_time_ms: 1 }]); + const { useQueryStore } = await import("@/stores/queryStore"); + const store = useQueryStore(); + const tabId = store.createTab("dameng-1", "SYSDBA", "Query"); + store.setAutoCommit(tabId, true); + + await store.executeTabSql(tabId, "SELECT name FROM users"); + const tab = store.tabs.find((item) => item.id === tabId)!; + await vi.waitFor(() => expect(tab.queryEditabilityReason).toBe("metadata-unavailable")); + expect(tab.isExecuting).toBe(false); + expect(tab.error).toBeUndefined(); + expect(tab.result?.rows).toEqual([["Alice"]]); + expect(tab.queryAnalysis).toBeUndefined(); + }); + + it("appends the cached hidden primary key for Dameng tables whose columns keep the created case", async () => { // #10233: Dameng keeps the case an unquoted identifier was created with, so the // server reports `name` while the Oracle-family dialect handling folds the SQL // token to `NAME`. The binding has to survive that mismatch, otherwise the result @@ -214,10 +319,15 @@ describe("queryStore hidden primary key editing", () => { const { useQueryStore } = await import("@/stores/queryStore"); const store = useQueryStore(); const tabId = store.createTab("dameng-1", "SYSDBA", "Query"); + executeMulti.mockResolvedValueOnce([{ columns: ["name"], rows: [["Alice"]], affected_rows: 0, execution_time_ms: 1 }]); + + await store.executeTabSql(tabId, "SELECT name FROM users"); + expect(executeMulti).toHaveBeenCalledWith("dameng-1", "SYSDBA", "SELECT name FROM users", undefined, expect.any(String), expect.objectContaining({ timeoutSecs: 30 })); + await vi.waitFor(() => expect(store.tabs.find((item) => item.id === tabId)?.queryEditabilityReason).toBe("primary-key-not-returned")); await store.executeTabSql(tabId, "SELECT name FROM users"); - expect(executeMulti).toHaveBeenCalledWith("dameng-1", "SYSDBA", 'SELECT name, "id" AS "__DBX_PK_0" FROM users', undefined, expect.any(String), expect.objectContaining({ timeoutSecs: 30 })); + expect(executeMulti).toHaveBeenLastCalledWith("dameng-1", "SYSDBA", 'SELECT name, "id" AS "__DBX_PK_0" FROM users', undefined, expect.any(String), expect.objectContaining({ timeoutSecs: 30 })); const tab = store.tabs.find((item) => item.id === tabId)!; expect(tab.result?.hidden_column_indexes).toEqual([1]); await vi.waitFor(() => expect(tab.querySourceColumns).toEqual(["name", "id"])); diff --git a/apps/desktop/src/stores/queryStore.ts b/apps/desktop/src/stores/queryStore.ts index 3987d01340..a7a95d8c3d 100644 --- a/apps/desktop/src/stores/queryStore.ts +++ b/apps/desktop/src/stores/queryStore.ts @@ -6697,6 +6697,14 @@ export const useQueryStore = defineStore("query", () => { const target = resolveEditableSourceMetadataTarget(tab, analysis, source, conn, databaseType, executionDatabase); const cached = getCachedTableMetadata(target.request); + // Dameng dictionary reads can be much slower than the user's SELECT. + // Cold metadata only enriches editing: dispatch the original SQL first, + // then let analyzeQueryMetadataInBackground populate the shared cache. + // Do not start a competing dictionary request before the result arrives. + if (databaseType === "dameng" && !cached) { + queryExecutionLog("info", "metadata:preflight:deferred", { traceId, table: target.request.tableName, databaseType, elapsed: elapsed() }); + return unchanged; + } let loaded = cached ? loadedEditableSourceFromMetadata(target, cached.metadata) : undefined; if (!cached && (databaseType === "oracle" || databaseType === "xugu")) { // Oracle column discovery can be slow. A star projection over a table diff --git a/docs/assets/pr-dameng-query-metadata/first-result-latency.png b/docs/assets/pr-dameng-query-metadata/first-result-latency.png new file mode 100644 index 0000000000000000000000000000000000000000..2c587be386d0010b63bee89eccfda38e0e234f37 GIT binary patch literal 46710 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