@@ -17,6 +17,7 @@ import type {
1717 JsonValue ,
1818 Sort ,
1919} from '@/lib/table/types'
20+ import { isBuiltInDateField } from '../../app/api/table/utils'
2021
2122/**
2223 * Error thrown when caller-supplied filter or sort input is malformed.
@@ -380,7 +381,9 @@ function buildFieldCondition(
380381
381382 case '$ncontains' :
382383 conditions . push (
383- buildLikeClause ( tableName , field , value as string , 'contains' , { negate : true } )
384+ buildLikeClause ( tableName , field , value as string , 'contains' , {
385+ negate : true ,
386+ } )
384387 )
385388 break
386389
@@ -458,8 +461,15 @@ function buildLogicalClause(
458461
459462/** Builds JSONB containment clause: `data @> '{"field": value}'::jsonb` (uses GIN index) */
460463function buildContainmentClause ( tableName : string , field : string , value : JsonValue ) : SQL {
464+ if ( isBuiltInDateField ( field ) ) {
465+ return sql `${ sql . raw ( `${ tableName } .${ field } ` ) } = ${ value } ::timestamptz`
466+ }
467+
461468 const jsonObj = JSON . stringify ( { [ field ] : value } )
462469 return sql `${ sql . raw ( `${ tableName } .data` ) } @> ${ jsonObj } ::jsonb`
470+
471+ // const jsonObj = JSON.stringify({ [field]: value })
472+ // return sql`${sql.raw(`${tableName}.data`)} @> ${jsonObj}::jsonb`
463473}
464474
465475/**
@@ -485,10 +495,17 @@ function buildComparisonClause(
485495 value : number | string ,
486496 columnType : ColumnType | undefined
487497) : SQL {
498+ if ( isBuiltInDateField ( field ) ) {
499+ columnType = 'date'
500+ }
501+
488502 const escapedField = field . replace ( / ' / g, "''" )
489503 const cast = jsonbCastForType ( columnType ) ?? 'numeric'
490504 validateComparisonValue ( field , columnType , cast , value )
491- const cell = sql . raw ( `(${ tableName } .data->>'${ escapedField } ')::${ cast } ` )
505+
506+ const cell = isBuiltInDateField ( field )
507+ ? sql . raw ( `${ tableName } .${ field } ` )
508+ : sql . raw ( `(${ tableName } .data->>'${ escapedField } ')::${ cast } ` )
492509 return cast === 'timestamptz'
493510 ? sql `${ cell } ${ sql . raw ( operator ) } ${ value } ::timestamptz`
494511 : sql `${ cell } ${ sql . raw ( operator ) } ${ value } `
0 commit comments