From c9a061419c872cbb66a6aa491400290a26f7a0c9 Mon Sep 17 00:00:00 2001 From: Pablo Baleztena Date: Tue, 15 Oct 2024 15:13:59 -0300 Subject: [PATCH] [fabric/sqlite-store] Add null handling for value conversion and update tests for deletedAt field --- .../sqlite-store/src/sqlite/sql-to-value.ts | 3 +++ .../sqlite-store/src/sqlite/value-to-sql.ts | 3 +++ .../sqlite-store/src/state/state-store.spec.ts | 16 +++++++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/fabric/sqlite-store/src/sqlite/sql-to-value.ts b/packages/fabric/sqlite-store/src/sqlite/sql-to-value.ts index a75af59..ce8d123 100644 --- a/packages/fabric/sqlite-store/src/sqlite/sql-to-value.ts +++ b/packages/fabric/sqlite-store/src/sqlite/sql-to-value.ts @@ -14,6 +14,9 @@ export function transformRow(model: Collection) { } function valueFromSQL(field: FieldDefinition, value: any): any { + if (value === null) { + return null; + } const r = FieldSQLInsertMap[field[VariantTag]]; return r(field as any, value); } diff --git a/packages/fabric/sqlite-store/src/sqlite/value-to-sql.ts b/packages/fabric/sqlite-store/src/sqlite/value-to-sql.ts index e6a45b0..c5feeae 100644 --- a/packages/fabric/sqlite-store/src/sqlite/value-to-sql.ts +++ b/packages/fabric/sqlite-store/src/sqlite/value-to-sql.ts @@ -25,6 +25,9 @@ const FieldSQLInsertMap: FieldSQLInsertMap = { }; export function fieldValueToSQL(field: FieldDefinition, value: any) { + if (value === null) { + return null; + } const r = FieldSQLInsertMap[field[VariantTag]] as any; return r(field as any, value); } diff --git a/packages/fabric/sqlite-store/src/state/state-store.spec.ts b/packages/fabric/sqlite-store/src/state/state-store.spec.ts index 1818958..bd1b298 100644 --- a/packages/fabric/sqlite-store/src/state/state-store.spec.ts +++ b/packages/fabric/sqlite-store/src/state/state-store.spec.ts @@ -1,4 +1,4 @@ -import { Run } from "@fabric/core"; +import { PosixDate, Run } from "@fabric/core"; import { defineModel, Field, isLike, UUID } from "@fabric/domain"; import { UUIDGeneratorMock } from "@fabric/domain/mocks"; import { @@ -42,6 +42,7 @@ describe("State Store", () => { name: "test", streamId: newUUID, streamVersion: 1n, + deletedAt: null, }), ); }); @@ -55,6 +56,7 @@ describe("State Store", () => { id: newUUID, streamId: newUUID, streamVersion: 1n, + deletedAt: null, }), ); @@ -66,6 +68,7 @@ describe("State Store", () => { streamId: UUID; streamVersion: bigint; name: string; + deletedAt: PosixDate | null; }[] >(); @@ -75,6 +78,7 @@ describe("State Store", () => { streamId: newUUID, streamVersion: 1n, name: "test", + deletedAt: null, }, ]); }); @@ -89,6 +93,7 @@ describe("State Store", () => { id: newUUID, streamId: newUUID, streamVersion: 1n, + deletedAt: null, }), () => store.insertInto("users", { @@ -96,6 +101,7 @@ describe("State Store", () => { id: UUIDGeneratorMock.generate(), streamId: UUIDGeneratorMock.generate(), streamVersion: 1n, + deletedAt: null, }), () => store.insertInto("users", { @@ -103,6 +109,7 @@ describe("State Store", () => { id: UUIDGeneratorMock.generate(), streamId: UUIDGeneratorMock.generate(), streamVersion: 1n, + deletedAt: null, }), ); @@ -121,6 +128,7 @@ describe("State Store", () => { streamId: UUID; streamVersion: bigint; name: string; + deletedAt: PosixDate | null; }[] >(); @@ -130,6 +138,7 @@ describe("State Store", () => { streamId: newUUID, streamVersion: 1n, name: "test", + deletedAt: null, }, ]); }); @@ -143,6 +152,7 @@ describe("State Store", () => { id: newUUID, streamId: newUUID, streamVersion: 1n, + deletedAt: null, }), ); @@ -161,6 +171,7 @@ describe("State Store", () => { streamId: newUUID, streamVersion: 1n, name: "updated", + deletedAt: null, }); }); @@ -173,6 +184,7 @@ describe("State Store", () => { id: newUUID, streamId: newUUID, streamVersion: 1n, + deletedAt: null, }), ); @@ -197,6 +209,7 @@ describe("State Store", () => { name: "test", streamId: ownerUUID, streamVersion: 1n, + deletedAt: null, }), ); @@ -207,6 +220,7 @@ describe("State Store", () => { owner: ownerUUID, streamId: newUUID, streamVersion: 1n, + deletedAt: null, }), ); });