diff --git a/src/controller/admin/queryBuilderController.ts b/src/controller/admin/queryBuilderController.ts index cd08b8d..fdf93a1 100644 --- a/src/controller/admin/queryBuilderController.ts +++ b/src/controller/admin/queryBuilderController.ts @@ -37,12 +37,20 @@ export async function executeQuery(req: Request, res: Response): Promise { let count = parseInt((req.query.count as string) ?? "25"); const query = req.body.query; - let [rows, total] = await DynamicQueryBuilder.buildQuery(query, offset, count).getManyAndCount(); + try { + let [rows, total] = await DynamicQueryBuilder.buildQuery(query, offset, count).getManyAndCount(); - res.json({ - rows: rows, - total: total, - offset: offset, - count: count, - }); + res.json({ + rows: rows, + total: total, + offset: offset, + count: count, + }); + } catch (error) { + res.status(500).send({ + json: error.sql, + code: error.code, + msg: error.sqlMessage, + }); + } } diff --git a/src/helpers/dynamicQueryBuilder.ts b/src/helpers/dynamicQueryBuilder.ts index e6f655d..43d44c5 100644 --- a/src/helpers/dynamicQueryBuilder.ts +++ b/src/helpers/dynamicQueryBuilder.ts @@ -67,11 +67,22 @@ export default abstract class DynamicQueryBuilder { depth: number = 0 ): void { const alias = queryObject.table + "_" + depth; + let firstSelect = true; + let selects: Array = []; if (queryObject.select == "*") { - query.addSelect(`${alias}.*`); + let meta = this.getTableMeta(queryObject.table); + let relCols = meta.relations.map((r) => r.column); + selects = meta.columns.map((c) => c.column).filter((c) => !relCols.includes(c)); } else { - for (const select of queryObject.select) { + selects = queryObject.select; + } + + for (const select of selects) { + if (firstSelect) { + query.select(`${alias}.${select}`); + firstSelect = false; + } else { query.addSelect(`${alias}.${select}`); } }