From c20d0b7ebe12941e5d071d767598f076dc59f641 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Tue, 10 Jan 2023 14:14:04 +0800 Subject: [PATCH] refactor(nocodb): formula dry run logic --- .../sql-data-mapper/lib/sql/BaseModelSqlv2.ts | 24 ++---------------- .../nocodb/src/lib/meta/api/columnApis.ts | 25 ++++--------------- 2 files changed, 7 insertions(+), 42 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 35a88c7577..8934f85616 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 @@ -1210,29 +1210,9 @@ class BaseModelSqlv2 { formula.formula, null, this.dbDriver, - this.model + this.model, + column ); - - try { - // dry run the existing qb.builder to see if it will break the grid view or not - // if so, set formula error and show empty selectQb instead - await this.dbDriver(this.tnPath) - .select(qb.builder) - .as(sanitize(column.title)); - // clean the previous formula error if the formula works this time - if (formula.error) { - await FormulaColumn.update(formula.id, { - error: null, - }); - } - } catch (e) { - console.error(e); - // add formula error to show in UI - await FormulaColumn.update(formula.id, { - error: e.message, - }); - throw new Error(`Formula error: ${e.message}`); - } return qb; } diff --git a/packages/nocodb/src/lib/meta/api/columnApis.ts b/packages/nocodb/src/lib/meta/api/columnApis.ts index c498045bc2..aaec69a65e 100644 --- a/packages/nocodb/src/lib/meta/api/columnApis.ts +++ b/packages/nocodb/src/lib/meta/api/columnApis.ts @@ -524,18 +524,11 @@ export async function columnAdd( colBody.formula_raw || colBody.formula, table.columns ); + try { + // test the query to see if it is valid in db level const dbDriver = NcConnectionMgrv2.get(base); - // retrieve the builder from formulaQueryBuilderv2 - const builder = await formulaQueryBuilderv2( - colBody.formula, - null, - dbDriver, - table - ); - // dry-run it to see if the query is valid - // if not, we show an error in UI to prevent from breaking the grid view - await dbDriver(table.table_name).select(builder).as('dry-run'); + await formulaQueryBuilderv2(colBody.formula, null, dbDriver, table); } catch (e) { console.error(e); NcError.badRequest('Invalid Formula'); @@ -779,17 +772,9 @@ export async function columnUpdate(req: Request, res: Response) { ); try { + // test the query to see if it is valid in db level const dbDriver = NcConnectionMgrv2.get(base); - // retrieve the builder from formulaQueryBuilderv2 - const builder = await formulaQueryBuilderv2( - colBody.formula, - null, - dbDriver, - table - ); - // dry-run it to see if the query is valid - // if not, we show an error in UI to prevent from breaking the grid view - await dbDriver(table.table_name).select(builder).as('dry-run'); + await formulaQueryBuilderv2(colBody.formula, null, dbDriver, table); } catch (e) { console.error(e); NcError.badRequest('Invalid Formula');