diff --git a/packages/backend-core/src/sql/sql.ts b/packages/backend-core/src/sql/sql.ts index ba441cc67e..cf35b1d968 100644 --- a/packages/backend-core/src/sql/sql.ts +++ b/packages/backend-core/src/sql/sql.ts @@ -768,11 +768,11 @@ class SqlQueryBuilder extends SqlTableQueryBuilder { return results.length ? results : [{ [operation.toLowerCase()]: true }] } - convertJsonStringColumns( + convertJsonStringColumns>( table: Table, - results: Record[], + results: T[], aliases?: Record - ): Record[] { + ): T[] { const tableName = getTableName(table) for (const [name, field] of Object.entries(table.schema)) { if (!this._isJsonColumn(field)) { @@ -781,11 +781,11 @@ class SqlQueryBuilder extends SqlTableQueryBuilder { const aliasedTableName = (tableName && aliases?.[tableName]) || tableName const fullName = `${aliasedTableName}.${name}` for (let row of results) { - if (typeof row[fullName] === "string") { - row[fullName] = JSON.parse(row[fullName]) + if (typeof row[fullName as keyof T] === "string") { + row[fullName as keyof T] = JSON.parse(row[fullName]) } - if (typeof row[name] === "string") { - row[name] = JSON.parse(row[name]) + if (typeof row[name as keyof T] === "string") { + row[name as keyof T] = JSON.parse(row[name]) } } } diff --git a/packages/pro b/packages/pro index 58338686c6..2b023157c5 160000 --- a/packages/pro +++ b/packages/pro @@ -1 +1 @@ -Subproject commit 58338686c65024eb4140bb53965b618d9d647ec0 +Subproject commit 2b023157c53adf97bb4f8d4df61cf07c4ad13b07 diff --git a/packages/server/src/sdk/app/rows/search/sqs.ts b/packages/server/src/sdk/app/rows/search/sqs.ts index f8dbc859a1..08d78656af 100644 --- a/packages/server/src/sdk/app/rows/search/sqs.ts +++ b/packages/server/src/sdk/app/rows/search/sqs.ts @@ -29,6 +29,8 @@ import AliasTables from "../sqlAlias" import { outputProcessing } from "../../../../utilities/rowProcessor" import pick from "lodash/pick" +const builder = new sql.Sql(SqlClient.SQL_LITE) + function buildInternalFieldList( table: Table, tables: Table[], @@ -99,7 +101,6 @@ function buildTableMap(tables: Table[]) { } async function runSqlQuery(json: QueryJson, tables: Table[]) { - const builder = new sql.Sql(SqlClient.SQL_LITE) const alias = new AliasTables(tables.map(table => table.name)) return await alias.queryWithAliasing(json, async json => { const query = builder._query(json, { @@ -184,15 +185,13 @@ export async function search( try { const rows = await runSqlQuery(request, allTables) - // process from the format of tableId.column to expected format - const processed = await sqlOutputProcessing( - rows, - table!, - allTablesMap, - relationships, - { + // process from the format of tableId.column to expected format also + // make sure JSON columns corrected + const processed = builder.convertJsonStringColumns( + table, + await sqlOutputProcessing(rows, table!, allTablesMap, relationships, { sqs: true, - } + }) ) // check for pagination final row