From 8d7267691d7e9c49003af85c49ac2d902d01a19e Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Tue, 19 Mar 2024 16:28:25 +0000 Subject: [PATCH] Handling aliasing in column conversions. --- packages/server/src/integrations/base/sql.ts | 13 ++++++------- .../server/src/integrations/microsoftSqlServer.ts | 6 +++++- packages/server/src/integrations/mysql.ts | 6 +++++- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/packages/server/src/integrations/base/sql.ts b/packages/server/src/integrations/base/sql.ts index f5e7812861..2093d455b9 100644 --- a/packages/server/src/integrations/base/sql.ts +++ b/packages/server/src/integrations/base/sql.ts @@ -699,19 +699,18 @@ class SqlQueryBuilder extends SqlTableQueryBuilder { convertJsonStringColumns( table: Table, - results: Record[] + results: Record[], + aliases?: Record ): Record[] { for (const [name, field] of Object.entries(table.schema)) { if (!this._isJsonColumn(field)) { continue } + const tableName = aliases?.[table.name] || table.name + const fullName = `${tableName}.${name}` for (let row of results) { - const columnNames = Object.keys(row) - const fullColumnName = columnNames.find( - column => column.includes(`.${name}`) || column === name - ) - if (fullColumnName && typeof row[fullColumnName] === "string") { - row[fullColumnName] = JSON.parse(row[fullColumnName]) + if (typeof row[fullName] === "string") { + row[fullName] = JSON.parse(row[fullName]) } if (typeof row[name] === "string") { row[name] = JSON.parse(row[name]) diff --git a/packages/server/src/integrations/microsoftSqlServer.ts b/packages/server/src/integrations/microsoftSqlServer.ts index c79eb136ed..36fdae980e 100644 --- a/packages/server/src/integrations/microsoftSqlServer.ts +++ b/packages/server/src/integrations/microsoftSqlServer.ts @@ -506,7 +506,11 @@ class SqlServerIntegration extends Sql implements DatasourcePlus { const queryFn = (query: any, op: string) => this.internalQuery(query, op) const processFn = (result: any) => { if (json?.meta?.table && result.recordset) { - return this.convertJsonStringColumns(json.meta.table, result.recordset) + return this.convertJsonStringColumns( + json.meta.table, + result.recordset, + json.tableAliases + ) } else if (result.recordset) { return result.recordset } diff --git a/packages/server/src/integrations/mysql.ts b/packages/server/src/integrations/mysql.ts index 9638afa8ea..f88162cf37 100644 --- a/packages/server/src/integrations/mysql.ts +++ b/packages/server/src/integrations/mysql.ts @@ -390,7 +390,11 @@ class MySQLIntegration extends Sql implements DatasourcePlus { this.internalQuery(query, { connect: false, disableCoercion: true }) const processFn = (result: any) => { if (json?.meta?.table && Array.isArray(result)) { - return this.convertJsonStringColumns(json.meta.table, result) + return this.convertJsonStringColumns( + json.meta.table, + result, + json.tableAliases + ) } return result }