From a502f4f9e62555651227f3786a16ee5d0b176e18 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Wed, 19 Apr 2023 13:42:46 +0800 Subject: [PATCH] fix(nocodb): revise datetime filter logic --- .../db/sql-data-mapper/lib/sql/conditionV2.ts | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/conditionV2.ts b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/conditionV2.ts index fd2403bf22..04d5eb1337 100644 --- a/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/conditionV2.ts +++ b/packages/nocodb/src/lib/db/sql-data-mapper/lib/sql/conditionV2.ts @@ -5,6 +5,7 @@ import Filter from '../../../../models/Filter'; import genRollupSelectv2 from './genRollupSelectv2'; import formulaQueryBuilderv2 from './formulav2/formulaQueryBuilderv2'; import { sanitize } from './helpers/sanitize'; +import { convertDateFormatByType } from './helpers/formulaFnHelper'; import type LinkToAnotherRecordColumn from '../../../../models/LinkToAnotherRecordColumn'; import type { Knex } from 'knex'; import type { XKnex } from '../../index'; @@ -321,8 +322,8 @@ const parseConditionV2 = async ( const dateFormat = qb?.client?.config?.client === 'mysql2' - ? 'YYYY-MM-DD HH:mm:ss' - : 'YYYY-MM-DD HH:mm:ssZ'; + ? 'YYYY-MM-DD HH:mm' + : 'YYYY-MM-DD HH:mmZ'; if ([UITypes.Date, UITypes.DateTime].includes(column.uidt)) { const now = dayjs(new Date()); @@ -404,6 +405,19 @@ const parseConditionV2 = async ( switch (filter.comparison_op) { case 'eq': + if (column.uidt === UITypes.DateTime) { + // for filter `is + exactDate`, we only match the date only + qb = qb.whereRaw( + `${convertDateFormatByType( + field, + qb?.client?.config?.client, + column.meta.date_format + )} = ?`, + [val.substring(0, 10)] + ); + break; + } + if (qb?.client?.config?.client === 'mysql2') { if ( [ @@ -431,6 +445,19 @@ const parseConditionV2 = async ( break; case 'neq': case 'not': + if (column.uidt === UITypes.DateTime) { + // for filter `is + exactDate`, we only match the date only + qb = qb.whereRaw( + `${convertDateFormatByType( + field, + qb?.client?.config?.client, + column.meta.date_format + )} != ?`, + [val.substring(0, 10)] + ); + break; + } + if (qb?.client?.config?.client === 'mysql2') { if ( [