| 16 | * @category constructors |
| 17 | */ |
| 18 | export const make = (options?: { |
| 19 | readonly entryTable?: string |
| 20 | readonly remotesTable?: string |
| 21 | }): Effect.Effect< |
| 22 | typeof EventJournal.EventJournal.Service, |
| 23 | SqlError, |
| 24 | SqlClient.SqlClient |
| 25 | > => |
| 26 | Effect.gen(function*() { |
| 27 | const sql = yield* SqlClient.SqlClient |
| 28 | |
| 29 | const entryTable = options?.entryTable ?? "effect_event_journal" |
| 30 | const remotesTable = options?.remotesTable ?? "effect_event_remotes" |
| 31 | |
| 32 | yield* sql.onDialectOrElse({ |
| 33 | pg: () => |
| 34 | sql` |
| 35 | CREATE TABLE IF NOT EXISTS ${sql(entryTable)} ( |
| 36 | id UUID PRIMARY KEY, |
| 37 | event TEXT NOT NULL, |
| 38 | primary_key TEXT NOT NULL, |
| 39 | payload BYTEA NOT NULL, |
| 40 | timestamp BIGINT NOT NULL |
| 41 | )`.withoutTransform, |
| 42 | mysql: () => |
| 43 | sql` |
| 44 | CREATE TABLE IF NOT EXISTS ${sql(entryTable)} ( |
| 45 | id BINARY(16) PRIMARY KEY, |
| 46 | event TEXT NOT NULL, |
| 47 | primary_key TEXT NOT NULL, |
| 48 | payload BLOB NOT NULL, |
| 49 | timestamp BIGINT NOT NULL |
| 50 | )`.withoutTransform, |
| 51 | mssql: () => |
| 52 | sql` |
| 53 | CREATE TABLE IF NOT EXISTS ${sql(entryTable)} ( |
| 54 | id UNIQUEIDENTIFIER PRIMARY KEY, |
| 55 | event NVARCHAR(MAX) NOT NULL, |
| 56 | primary_key NVARCHAR(MAX) NOT NULL, |
| 57 | payload VARBINARY(MAX) NOT NULL, |
| 58 | timestamp BIGINT NOT NULL |
| 59 | )`.withoutTransform, |
| 60 | orElse: () => |
| 61 | sql` |
| 62 | CREATE TABLE IF NOT EXISTS ${sql(entryTable)} ( |
| 63 | id BLOB PRIMARY KEY, |
| 64 | event TEXT NOT NULL, |
| 65 | primary_key TEXT NOT NULL, |
| 66 | payload BLOB NOT NULL, |
| 67 | timestamp BIGINT NOT NULL |
| 68 | )`.withoutTransform |
| 69 | }) |
| 70 | |
| 71 | yield* sql.onDialectOrElse({ |
| 72 | pg: () => |
| 73 | sql` |
| 74 | CREATE TABLE IF NOT EXISTS ${sql(remotesTable)} ( |
| 75 | remote_id UUID NOT NULL, |