From a00379c85f6f1e0f6bcc673906a974fef66a3890 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Thu, 21 Dec 2023 09:17:04 +0000 Subject: [PATCH] fix: pass getMeta methods and add missing await --- .../nocodb-sdk/src/lib/formulaHelpers.spec.ts | 4 ++++ packages/nocodb-sdk/src/lib/formulaHelpers.ts | 10 +++++----- .../src/db/formulav2/formulaQueryBuilderv2.ts | 7 ++++++- .../nocodb/src/services/columns.service.ts | 20 +++++++++++++++++++ 4 files changed, 35 insertions(+), 6 deletions(-) diff --git a/packages/nocodb-sdk/src/lib/formulaHelpers.spec.ts b/packages/nocodb-sdk/src/lib/formulaHelpers.spec.ts index 3fd462ffae..968b8b7d31 100644 --- a/packages/nocodb-sdk/src/lib/formulaHelpers.spec.ts +++ b/packages/nocodb-sdk/src/lib/formulaHelpers.spec.ts @@ -10,6 +10,7 @@ describe('Formula parsing and type validation', () => { formula: '1 + 2', columns: [], clientOrSqlUi: 'mysql2', + getMeta: async () => ({}) }); expect(result.dataType).toEqual(FormulaDataTypes.NUMERIC); @@ -26,6 +27,7 @@ describe('Formula parsing and type validation', () => { }, ], clientOrSqlUi: 'mysql2', + getMeta: async () => ({}) }); expect(result.dataType).toEqual(FormulaDataTypes.STRING); @@ -47,6 +49,7 @@ describe('Formula parsing and type validation', () => { }, ], clientOrSqlUi: 'mysql2', + getMeta: async () => ({}) }); expect(result.dataType).toEqual(FormulaDataTypes.STRING); @@ -66,6 +69,7 @@ describe('Formula parsing and type validation', () => { }, ], clientOrSqlUi: 'mysql2', + getMeta: async () => ({}) }); expect(result1.dataType).toEqual(FormulaDataTypes.NUMERIC); diff --git a/packages/nocodb-sdk/src/lib/formulaHelpers.ts b/packages/nocodb-sdk/src/lib/formulaHelpers.ts index 9f81c15e3b..182cd0b6e8 100644 --- a/packages/nocodb-sdk/src/lib/formulaHelpers.ts +++ b/packages/nocodb-sdk/src/lib/formulaHelpers.ts @@ -1420,7 +1420,7 @@ export async function validateFormulaAndExtractTreeWithType({ | typeof MssqlUi | typeof SnowflakeUi | typeof PgUi; - getMeta?: (tableId: string) => Promise; + getMeta: (tableId: string) => Promise; }) { const colAliasToColMap = {}; const colIdToColMap = {}; @@ -1494,11 +1494,11 @@ export async function validateFormulaAndExtractTreeWithType({ } } // get args type and validate - const validateResult = (res.arguments = parsedTree.arguments.map( + const validateResult = (res.arguments = await Promise.all(parsedTree.arguments.map( (arg) => { return validateAndExtract(arg); } - )); + ))); const argTypes = validateResult.map((v: any) => v.dataType); @@ -1631,8 +1631,8 @@ export async function validateFormulaAndExtractTreeWithType({ 'Unary expression is not supported' ); } else if (parsedTree.type === JSEPNode.BINARY_EXP) { - res.left = validateAndExtract(parsedTree.left); - res.right = validateAndExtract(parsedTree.right); + res.left = await validateAndExtract(parsedTree.left); + res.right = await validateAndExtract(parsedTree.right); if (['==', '<', '>', '<=', '>=', '!='].includes(parsedTree.operator)) { res.dataType = FormulaDataTypes.COND_EXP; diff --git a/packages/nocodb/src/db/formulav2/formulaQueryBuilderv2.ts b/packages/nocodb/src/db/formulav2/formulaQueryBuilderv2.ts index b75c59b8d2..f0a33767ef 100644 --- a/packages/nocodb/src/db/formulav2/formulaQueryBuilderv2.ts +++ b/packages/nocodb/src/db/formulav2/formulaQueryBuilderv2.ts @@ -9,12 +9,12 @@ import { import { Logger } from '@nestjs/common'; import mapFunctionName from '../mapFunctionName'; import genRollupSelectv2 from '../genRollupSelectv2'; -import type Model from '~/models/Model'; import type RollupColumn from '~/models/RollupColumn'; import type LinkToAnotherRecordColumn from '~/models/LinkToAnotherRecordColumn'; import type LookupColumn from '~/models/LookupColumn'; import type { BaseModelSqlv2 } from '~/db/BaseModelSqlv2'; import type Column from '~/models/Column'; +import Model from '~/models/Model'; import NocoCache from '~/cache/NocoCache'; import { CacheGetType, CacheScope } from '~/utils/globals'; import { @@ -90,6 +90,11 @@ async function _formulaQueryBuilder( | 'mariadb' | 'sqlite' | 'snowflake', + getMeta: async (modelId) => { + const model = await Model.get(modelId); + await model.getColumns(); + return model; + }, }); // populate and save parsedTree to column if not exist diff --git a/packages/nocodb/src/services/columns.service.ts b/packages/nocodb/src/services/columns.service.ts index 4ecff4f71d..e16e195b5a 100644 --- a/packages/nocodb/src/services/columns.service.ts +++ b/packages/nocodb/src/services/columns.service.ts @@ -214,6 +214,11 @@ export class ColumnsService { formula: colBody.formula_raw || colBody.formula, columns: table.columns, clientOrSqlUi: source.type, + getMeta: async (modelId) => { + const model = await Model.get(modelId); + await model.getColumns(); + return model; + }, }); try { @@ -943,6 +948,11 @@ export class ColumnsService { formula: new_formula_raw, columns: table.columns, clientOrSqlUi: source.type, + getMeta: async (modelId) => { + const model = await Model.get(modelId); + await model.getColumns(); + return model; + }, }), }); } @@ -1009,6 +1019,11 @@ export class ColumnsService { formula: new_formula_raw, columns: table.columns, clientOrSqlUi: source.type, + getMeta: async (modelId) => { + const model = await Model.get(modelId); + await model.getColumns(); + return model; + }, }), }); } @@ -1223,6 +1238,11 @@ export class ColumnsService { colBody.formula?.replaceAll('{{', '{').replaceAll('}}', '}'), columns: table.columns, clientOrSqlUi: source.type, + getMeta: async (modelId) => { + const model = await Model.get(modelId); + await model.getColumns(); + return model; + }, }); try {