From f8660204f0388a394772f4df5c48049b0c64a759 Mon Sep 17 00:00:00 2001 From: Pranav C Date: Mon, 15 Jan 2024 20:51:36 +0000 Subject: [PATCH] fix: wrap with boolean function if type is boolean to avoid any issue while comparing --- .../nocodb/src/db/formulav2/formulaQueryBuilderv2.ts | 11 +++++++++++ packages/nocodb/src/db/functionMappings/commonFns.ts | 3 +++ packages/nocodb/src/db/functionMappings/pg.ts | 9 +++++++++ 3 files changed, 23 insertions(+) diff --git a/packages/nocodb/src/db/formulav2/formulaQueryBuilderv2.ts b/packages/nocodb/src/db/formulav2/formulaQueryBuilderv2.ts index bbabc72357..739832e412 100644 --- a/packages/nocodb/src/db/formulav2/formulaQueryBuilderv2.ts +++ b/packages/nocodb/src/db/formulav2/formulaQueryBuilderv2.ts @@ -892,6 +892,17 @@ async function _formulaQueryBuilder( if (pt.left.callee?.name !== pt.right.callee?.name) { // if left/right is BLANK, accept both NULL and empty string for (const operand of ['left', 'right']) { + if (pt[operand].type === FormulaDataTypes.BOOLEAN) { + pt[operand] = { + type: 'CallExpression', + arguments: [pt[operand]], + callee: { + type: 'Identifier', + name: 'BOOLEAN', + }, + }; + } + if ( pt[operand].type === 'CallExpression' && pt[operand].callee.name === 'BLANK' diff --git a/packages/nocodb/src/db/functionMappings/commonFns.ts b/packages/nocodb/src/db/functionMappings/commonFns.ts index 376086d65c..3a1c267075 100644 --- a/packages/nocodb/src/db/functionMappings/commonFns.ts +++ b/packages/nocodb/src/db/functionMappings/commonFns.ts @@ -184,6 +184,9 @@ export default { STRING(args: MapFnArgs) { return args.fn(args.pt?.arguments?.[0]); }, + BOOLEAN(args: MapFnArgs) { + return args.fn(args.pt?.arguments?.[0]); + }, AND: async (args: MapFnArgs) => { return { builder: args.knex.raw( diff --git a/packages/nocodb/src/db/functionMappings/pg.ts b/packages/nocodb/src/db/functionMappings/pg.ts index f6fa76b3da..9ee7f2ba9b 100644 --- a/packages/nocodb/src/db/functionMappings/pg.ts +++ b/packages/nocodb/src/db/functionMappings/pg.ts @@ -348,6 +348,15 @@ END ${colAlias}`, ), }; }, + BOOLEAN: async (args: MapFnArgs) => { + return { + builder: args.knex.raw( + `(${(await args.fn(args.pt.arguments[0])).builder})::boolean ${ + args.colAlias + }`, + ), + }; + }, }; export default pg;