diff --git a/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/date-range-cell.svelte b/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/date-range-cell.svelte
index 233a1c460..abb6cdda8 100644
--- a/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/date-range-cell.svelte
+++ b/apps/frontend/src/lib/components/blocks/grid-view/editable-cell/date-range-cell.svelte
@@ -78,12 +78,24 @@
{#if internalValue && internalValue.start}
{#if internalValue.end}
- {formatter(internalValue.start.toDate())} - {formatter(internalValue.end.toDate())}
+
+
+ {formatter(internalValue.start.toDate())}
+
+ -
+
+ {formatter(internalValue.end.toDate())}
+
+
{:else}
- {formatter(internalValue.start.toDate())}
+
+ {formatter(internalValue.start.toDate())}
+
{/if}
{:else if value?.[0]}
- {formatter(new Date(value[0]))}
+
+ {formatter(new Date(value[0]))}
+
{/if}
diff --git a/packages/persistence/src/record/record-query-spec-creator-visitor.ts b/packages/persistence/src/record/record-query-spec-creator-visitor.ts
index c624818b1..e3335cc40 100644
--- a/packages/persistence/src/record/record-query-spec-creator-visitor.ts
+++ b/packages/persistence/src/record/record-query-spec-creator-visitor.ts
@@ -19,7 +19,6 @@ import {
FormulaGTE,
FormulaLT,
FormulaLTE,
- ID_TYPE,
JsonContains,
LongTextEqual,
PercentageEqual,
@@ -52,7 +51,6 @@ import {
type SelectContainsAnyOf,
type SelectEmpty,
type SelectEqual,
- type SelectField,
type StringContains,
type StringEmpty,
type StringEndsWith,
@@ -64,7 +62,7 @@ import {
type UserEmpty,
type UserEqual,
} from "@undb/table"
-import { sql, type QueryCreator } from "kysely"
+import { type QueryCreator } from "kysely"
import type { IRecordQueryBuilder } from "../qb"
export class RecordQuerySpecCreatorVisitor implements IRecordVisitor {
@@ -128,16 +126,7 @@ export class RecordQuerySpecCreatorVisitor implements IRecordVisitor {
currencyLT(s: CurrencyLT): void {}
currencyLTE(s: CurrencyLTE): void {}
durationEqual(s: DurationEqual): void {}
- selectContainsAnyOf(spec: SelectContainsAnyOf): void {
- const field = this.table.schema.getFieldById(spec.fieldId).expect("No field found") as SelectField
- if (field.isMultiple) {
- this.#creator = (this.#creator || this.qb).with(spec.fieldId.value, (db) =>
- db
- .selectFrom([this.table.id.value, sql.raw(`json_each(${this.getFieldId(spec)})`).as("json_each")])
- .select([`${this.table.id.value}.${ID_TYPE}`, `json_each.value as ${spec.fieldId.value}`]),
- )
- }
- }
+ selectContainsAnyOf(spec: SelectContainsAnyOf): void {}
selectEmpty(spec: SelectEmpty): void {}
ratingEqual(s: RatingEqual): void {}
emailEqual(s: EmailEqual): void {}
@@ -176,6 +165,7 @@ export class RecordQuerySpecCreatorVisitor implements IRecordVisitor {
return this
}
not(spec: RecordComositeSpecification): this {
+ spec.accept(this)
return this
}
clone(): this {
diff --git a/packages/persistence/src/record/record-spec-reference-visitor.ts b/packages/persistence/src/record/record-spec-reference-visitor.ts
index 81554f090..0b55c46fa 100644
--- a/packages/persistence/src/record/record-spec-reference-visitor.ts
+++ b/packages/persistence/src/record/record-spec-reference-visitor.ts
@@ -30,7 +30,6 @@ import {
FormulaGTE,
FormulaLT,
FormulaLTE,
- ID_TYPE,
IdEqual,
IdIn,
JsonContains,
@@ -118,11 +117,7 @@ export class RecordSpecReferenceVisitor implements IRecordVisitor {
currencyLT(s: CurrencyLT): void {}
currencyLTE(s: CurrencyLTE): void {}
durationEqual(s: DurationEqual): void {}
- selectContainsAnyOf(spec: SelectContainsAnyOf): void {
- this.qb = this.qb
- .innerJoin(spec.fieldId.value, `${this.table.id.value}.${ID_TYPE}`, `${spec.fieldId.value}.${ID_TYPE}`)
- .groupBy(`${this.table.id.value}.${ID_TYPE}`)
- }
+ selectContainsAnyOf(spec: SelectContainsAnyOf): void {}
selectEmpty(spec: SelectEmpty): void {}
ratingEqual(s: RatingEqual): void {}
emailEqual(s: EmailEqual): void {}
@@ -151,6 +146,7 @@ export class RecordSpecReferenceVisitor implements IRecordVisitor {
return this
}
not(spec: ISpecification): this {
+ spec.accept(this)
return this
}
clone(): this {
diff --git a/packages/persistence/src/record/record.filter-visitor.ts b/packages/persistence/src/record/record.filter-visitor.ts
index fd2a2fb11..65cddf276 100644
--- a/packages/persistence/src/record/record.filter-visitor.ts
+++ b/packages/persistence/src/record/record.filter-visitor.ts
@@ -78,7 +78,7 @@ import {
startOfTomorrow,
startOfYesterday,
} from "date-fns"
-import type { ExpressionBuilder } from "kysely"
+import { sql, type ExpressionBuilder } from "kysely"
import { isString, unique } from "radash"
import { AbstractQBVisitor } from "../abstract-qb.visitor"
import { getDateRangeFieldName } from "../underlying/underlying-table.util"
@@ -394,7 +394,12 @@ export class RecordFilterVisitor extends AbstractQBVisitor implements
const cond = this.eb.eb(this.getFieldId(spec), "in", spec.value)
this.addCond(cond)
} else {
- const cond = this.eb.eb(`${spec.fieldId.value}.${spec.fieldId.value}`, "in", spec.value)
+ const cond = this.eb.exists(
+ this.eb
+ .selectFrom(sql.raw(`json_each(${this.getFieldId(spec)})`).as("json_each"))
+ .select(["1"])
+ .where("json_each.value", "in", spec.value),
+ )
this.addCond(cond)
}
}