diff --git a/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.general.handler.ts b/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.general.handler.ts index 231ed8fb32..f8ffcd4018 100644 --- a/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.general.handler.ts +++ b/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.general.handler.ts @@ -1,5 +1,6 @@ import { ncIsNull, ncIsNumber, ncIsUndefined } from 'nocodb-sdk'; import { NcError } from 'src/helpers/catchError'; +import { ncIsStringHasValue } from '../../utils/handlerUtils'; import type { Knex } from 'knex'; import type { IBaseModelSqlV2 } from 'src/db/IBaseModelSqlV2'; import type { NcContext } from 'nocodb-sdk'; @@ -127,4 +128,37 @@ export class DecimalGeneralHandler extends GenericFieldHandler { }, }; } + + override async filterNeq( + args: { + sourceField: string | Knex.QueryBuilder | Knex.RawBuilder; + val: any; + }, + rootArgs: { + knex: CustomKnex; + filter: Filter; + column: Column; + }, + _options: FilterOptions, + ) { + const { val, sourceField } = args; + const { knex } = rootArgs; + + return { + rootApply: undefined, + clause: (qb: Knex.QueryBuilder) => { + if (!ncIsStringHasValue(val)) { + qb.where((nestedQb) => { + nestedQb.whereNotNull(sourceField as any); + }); + } else { + qb.where((nestedQb) => { + nestedQb + .where(knex.raw('?? != ?', [sourceField, val])) + .orWhereNull(sourceField as any); + }); + } + }, + }; + } } diff --git a/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.mysql.handler.ts b/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.mysql.handler.ts index 9f4960a130..1b6b4a09ca 100644 --- a/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.mysql.handler.ts +++ b/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.mysql.handler.ts @@ -12,4 +12,5 @@ export class DecimalMysqlHandler extends GenericMysqlFieldHandler { override filterBlank = this.decimalGeneralHandler.filterBlank; override filterNotblank = this.decimalGeneralHandler.filterNotblank; + override filterNeq = this.decimalGeneralHandler.filterNeq; } diff --git a/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.pg.handler.ts b/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.pg.handler.ts index d73b9e9479..9416f24938 100644 --- a/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.pg.handler.ts +++ b/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.pg.handler.ts @@ -12,4 +12,5 @@ export class DecimalPgHandler extends GenericPgFieldHandler { override filterBlank = this.decimalGeneralHandler.filterBlank; override filterNotblank = this.decimalGeneralHandler.filterNotblank; + override filterNeq = this.decimalGeneralHandler.filterNeq; } diff --git a/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.sqlite.handler.ts b/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.sqlite.handler.ts index c648590f06..f343d95f48 100644 --- a/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.sqlite.handler.ts +++ b/packages/nocodb/src/db/field-handler/handlers/decimal/decimal.sqlite.handler.ts @@ -12,4 +12,5 @@ export class DecimalSqliteHandler extends GenericSqliteFieldHandler { override filterBlank = this.decimalGeneralHandler.filterBlank; override filterNotblank = this.decimalGeneralHandler.filterNotblank; + override filterNeq = this.decimalGeneralHandler.filterNeq; }