From 15179c97602d05df4f223db47ff0203d6a4396d7 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Fri, 31 Mar 2023 11:37:48 +0530 Subject: [PATCH] refactor(nocodb): reuse the column builder reference across all the formula Signed-off-by: Pranav C --- .../sql-data-mapper/lib/sql/BaseModelSqlv2.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts index c4b1f6a1ee..9f78eaa481 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/BaseModelSqlv2.ts @@ -1283,7 +1283,8 @@ class BaseModelSqlv2 { private async getSelectQueryBuilderForFormula( column: Column, tableAlias?: string, - validateFormula = false + validateFormula = false, + aliasToColumnBuilder = {} ) { const formula = await column.getColOptions(); if (formula.error) throw new Error(`Formula error: ${formula.error}`); @@ -1293,7 +1294,7 @@ class BaseModelSqlv2 { this.dbDriver, this.model, column, - {}, + aliasToColumnBuilder, tableAlias, validateFormula ); @@ -1517,7 +1518,7 @@ class BaseModelSqlv2 { validateFormula, }: { fieldsSet?: Set; - qb: Knex.QueryBuilder; + qb: Knex.QueryBuilder & Knex.QueryInterface; columns?: Column[]; fields?: string[] | string; extractPkAndPv?: boolean; @@ -1525,6 +1526,8 @@ class BaseModelSqlv2 { alias?: string; validateFormula?: boolean; }): Promise { + // keep a common object for all columns to share across all columns + const aliasToColumnBuilder = {}; let viewOrTableColumns: Column[] | { fk_column_id?: string }[]; const res = {}; @@ -1588,7 +1591,8 @@ class BaseModelSqlv2 { const selectQb = await this.getSelectQueryBuilderForFormula( qrValueColumn, alias, - validateFormula + validateFormula, + aliasToColumnBuilder ); qb.select({ [column.column_name]: selectQb.builder, @@ -1622,7 +1626,8 @@ class BaseModelSqlv2 { const selectQb = await this.getSelectQueryBuilderForFormula( barcodeValueColumn, alias, - validateFormula + validateFormula, + aliasToColumnBuilder ); qb.select({ [column.column_name]: selectQb.builder, @@ -1647,7 +1652,8 @@ class BaseModelSqlv2 { const selectQb = await this.getSelectQueryBuilderForFormula( column, alias, - validateFormula + validateFormula, + aliasToColumnBuilder ); qb.select( this.dbDriver.raw(`?? as ??`, [