From a96c5266b8449a1e3275e9216dee0e1f9f950227 Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Thu, 22 May 2025 10:00:28 +0200 Subject: [PATCH 1/3] fix: formatting of Postgres Interval Result --- src/helpers/dynamicQueryBuilder.ts | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/src/helpers/dynamicQueryBuilder.ts b/src/helpers/dynamicQueryBuilder.ts index 580bbd2..ba8649c 100644 --- a/src/helpers/dynamicQueryBuilder.ts +++ b/src/helpers/dynamicQueryBuilder.ts @@ -272,8 +272,15 @@ export default abstract class DynamicQueryBuilder { }); }); results = tempResults; - } else if (value && typeof value === "object" && !Array.isArray(value) && !(value instanceof Date)) { - const objResults = flatten(value as QueryResult, newKey); + } else if ( + value && + typeof value === "object" && + !Array.isArray(value) && + !(value instanceof Date) && + !(value instanceof Buffer) && + !Object.keys(value).every((k) => ["years", "months", "days"].includes(k)) + ) { + const objResults = flatten(value, newKey); const tempResults: Array<{ [key: string]: FieldType }> = []; results.forEach((res) => { objResults.forEach((objRes) => { @@ -283,7 +290,19 @@ export default abstract class DynamicQueryBuilder { results = tempResults; } else { results.forEach((res) => { - if (String(value) != "undefined") res[newKey] = String(value); + if (typeof value === "object" && value instanceof Date) { + res[newKey] = new Date(value).toISOString(); + } else if (typeof value === "object" && !Array.isArray(value) && !(value instanceof Buffer)) { + let string = ""; + for (const key of Object.keys(value)) { + string += `${value[key]} ${key} `; + } + res[newKey] = string.trim(); + + // JSON.stringify(value).replace(/["\\{}]/g, "").replaceAll(",", ", "); + } else if (String(value) != "undefined") { + res[newKey] = String(value); + } }); } } From 83250c1e62431d50964384a2bb93827572174504 Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Thu, 22 May 2025 10:00:56 +0200 Subject: [PATCH 2/3] change: pass fallback error message to client --- src/helpers/dynamicQueryBuilder.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/helpers/dynamicQueryBuilder.ts b/src/helpers/dynamicQueryBuilder.ts index ba8649c..9b840ca 100644 --- a/src/helpers/dynamicQueryBuilder.ts +++ b/src/helpers/dynamicQueryBuilder.ts @@ -385,7 +385,7 @@ export default abstract class DynamicQueryBuilder { stats: "error", sql: error.sql, code: error.code, - msg: error.sqlMessage, + msg: error.sqlMessage ?? error.message, }; } }); @@ -394,7 +394,7 @@ export default abstract class DynamicQueryBuilder { stats: "error", sql: error.sql, code: error.code, - msg: error.sqlMessage, + msg: error.sqlMessage ?? error.message, }; } } else { @@ -414,7 +414,7 @@ export default abstract class DynamicQueryBuilder { stats: "error", sql: error.sql, code: error.code, - msg: error.sqlMessage, + msg: error.sqlMessage ?? error.message, }; } } From d8376a4b7b6961cd52fd63ead5d3ff9f40285d6e Mon Sep 17 00:00:00 2001 From: Julian Krauser Date: Thu, 22 May 2025 10:01:27 +0200 Subject: [PATCH 3/3] hotfix: shorten table alias to keep it max length of alias is 63 --- src/helpers/dynamicQueryBuilder.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/helpers/dynamicQueryBuilder.ts b/src/helpers/dynamicQueryBuilder.ts index 9b840ca..3c6d4e6 100644 --- a/src/helpers/dynamicQueryBuilder.ts +++ b/src/helpers/dynamicQueryBuilder.ts @@ -1,4 +1,4 @@ -import { Brackets, DataSource, NotBrackets, ObjectLiteral, SelectQueryBuilder, WhereExpressionBuilder } from "typeorm"; +import { Brackets, NotBrackets, ObjectLiteral, SelectQueryBuilder, WhereExpressionBuilder } from "typeorm"; import { dataSource } from "../data-source"; import { ConditionStructure, DynamicQueryStructure, FieldType, QueryResult } from "../type/dynamicQueries"; import { TableMeta } from "../type/tableMeta"; @@ -63,7 +63,7 @@ export default abstract class DynamicQueryBuilder { count?: number; noLimit?: boolean; }): SelectQueryBuilder { - let affix = queryObj.id ?? StringHelper.random(10); + let affix = queryObj.id.replaceAll("-", "") ?? StringHelper.random(10); let query = dataSource.getRepository(queryObj.table).createQueryBuilder(`${affix}_${queryObj.table}`); this.buildDynamicQuery(query, queryObj, affix); @@ -116,7 +116,7 @@ export default abstract class DynamicQueryBuilder { if (queryObject.join) { for (const join of queryObject.join) { - let subaffix = join.id ?? StringHelper.random(10); + let subaffix = join.id.replaceAll("-", "") ?? StringHelper.random(10); if (join.type == undefined) join.type = "defined"; if (join.type == "defined") { query.innerJoin(`${alias}.${join.foreignColumn}`, `${subaffix}_${join.table}`);