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) } }