From 7bbb920aa7fc17ccd91d8c0c8da555042b4be934 Mon Sep 17 00:00:00 2001 From: Sam Rose Date: Tue, 21 May 2024 15:49:48 +0100 Subject: [PATCH] Optimise the `reverse` method in sqlAlias.ts. --- packages/server/src/sdk/app/rows/sqlAlias.ts | 23 ++++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/packages/server/src/sdk/app/rows/sqlAlias.ts b/packages/server/src/sdk/app/rows/sqlAlias.ts index 0fc338ecbe..79d1ff485d 100644 --- a/packages/server/src/sdk/app/rows/sqlAlias.ts +++ b/packages/server/src/sdk/app/rows/sqlAlias.ts @@ -126,16 +126,25 @@ export default class AliasTables { } reverse(rows: T): T { + const mapping = new Map() + const process = (row: Row) => { const final: Row = {} - for (let [key, value] of Object.entries(row)) { - if (!key.includes(".")) { - final[key] = value - } else { - const [alias, column] = key.split(".") - const tableName = this.tableAliases[alias] || alias - final[`${tableName}.${column}`] = value + for (const key of Object.keys(row)) { + let mappedKey = mapping.get(key) + if (!mappedKey) { + const dotLocation = key.indexOf(".") + if (dotLocation === -1) { + mappedKey = key + } else { + const alias = key.slice(0, dotLocation) + const column = key.slice(dotLocation + 1) + const tableName = this.tableAliases[alias] || alias + mappedKey = `${tableName}.${column}` + } + mapping.set(key, mappedKey) } + final[mappedKey] = row[key] } return final }