From 2500219d1c90ba2acf224cb3328cfbc86f2d04ac Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Wed, 30 Nov 2022 16:31:23 +0800 Subject: [PATCH 1/2] fix(nocodb): mark CallExpression on pt.right for division --- .../sql-data-mapper/lib/sql/formulaQueryBuilderFromString.ts | 5 +++++ .../lib/sql/formulav2/formulaQueryBuilderv2.ts | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulaQueryBuilderFromString.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulaQueryBuilderFromString.ts index 99f2fcaf80..929186eaa2 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulaQueryBuilderFromString.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulaQueryBuilderFromString.ts @@ -136,6 +136,11 @@ export default function formulaQueryBuilder( type: 'CallExpression', arguments: [pt.left], }; + pt.right = { + callee: { name: 'FLOAT' }, + type: 'CallExpression', + arguments: [pt.right], + }; } const query = knex.raw( diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts index c4bb68c98b..0c382ea3b4 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/formulav2/formulaQueryBuilderv2.ts @@ -646,6 +646,11 @@ export default async function formulaQueryBuilderv2( type: 'CallExpression', arguments: [pt.left], }; + pt.right = { + callee: { name: 'FLOAT' }, + type: 'CallExpression', + arguments: [pt.right], + }; } pt.left.fnName = pt.left.fnName || 'ARITH'; pt.right.fnName = pt.right.fnName || 'ARITH'; From 063ed40a607c9a850d8a5b83ee4d10b34391fcd9 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Wed, 30 Nov 2022 16:31:47 +0800 Subject: [PATCH 2/2] fix(nocodb): cast char first before casting as double for FLOAT --- .../lib/db/sql-data-mapper/lib/sql/functionMappings/mysql.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/mysql.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/mysql.ts index 9aedd96097..1419ca36e9 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/mysql.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/functionMappings/mysql.ts @@ -36,7 +36,7 @@ const mysql2 = { MID: 'SUBSTR', FLOAT: (args: MapFnArgs) => { return args.knex - .raw(`CAST(${args.fn(args.pt.arguments[0])} as DOUBLE)${args.colAlias}`) + .raw(`CAST(CAST(${args.fn(args.pt.arguments[0])} as CHAR) AS DOUBLE)${args.colAlias}`) .wrap('(', ')'); }, DATEADD: ({ fn, knex, pt, colAlias }: MapFnArgs) => {