| 32 | * @since 4.0.0 |
| 33 | */ |
| 34 | export const make = (options?: { |
| 35 | readonly entryTable?: string |
| 36 | readonly remotesTable?: string |
| 37 | }): Effect.Effect< |
| 38 | EventJournal.EventJournal["Service"], |
| 39 | SqlError.SqlError, |
| 40 | SqlClient.SqlClient |
| 41 | > => |
| 42 | Effect.gen(function*() { |
| 43 | const sql = (yield* SqlClient.SqlClient).withoutTransforms() |
| 44 | |
| 45 | const entryTable = options?.entryTable ?? "effect_event_journal" |
| 46 | const remotesTable = options?.remotesTable ?? "effect_event_remotes" |
| 47 | |
| 48 | const entryTableSql = sql(entryTable) |
| 49 | const remotesTableSql = sql(remotesTable) |
| 50 | |
| 51 | yield* sql.onDialectOrElse({ |
| 52 | pg: () => |
| 53 | sql` |
| 54 | CREATE TABLE IF NOT EXISTS ${entryTableSql} ( |
| 55 | id UUID PRIMARY KEY, |
| 56 | event TEXT NOT NULL, |
| 57 | primary_key TEXT NOT NULL, |
| 58 | payload BYTEA NOT NULL, |
| 59 | timestamp BIGINT NOT NULL |
| 60 | )`, |
| 61 | mysql: () => |
| 62 | sql` |
| 63 | CREATE TABLE IF NOT EXISTS ${entryTableSql} ( |
| 64 | id BINARY(16) PRIMARY KEY, |
| 65 | event TEXT NOT NULL, |
| 66 | primary_key TEXT NOT NULL, |
| 67 | payload BLOB NOT NULL, |
| 68 | timestamp BIGINT NOT NULL |
| 69 | )`, |
| 70 | mssql: () => |
| 71 | sql` |
| 72 | CREATE TABLE IF NOT EXISTS ${entryTableSql} ( |
| 73 | id UNIQUEIDENTIFIER PRIMARY KEY, |
| 74 | event NVARCHAR(MAX) NOT NULL, |
| 75 | primary_key NVARCHAR(MAX) NOT NULL, |
| 76 | payload VARBINARY(MAX) NOT NULL, |
| 77 | timestamp BIGINT NOT NULL |
| 78 | )`, |
| 79 | orElse: () => |
| 80 | sql` |
| 81 | CREATE TABLE IF NOT EXISTS ${entryTableSql} ( |
| 82 | id BLOB PRIMARY KEY, |
| 83 | event TEXT NOT NULL, |
| 84 | primary_key TEXT NOT NULL, |
| 85 | payload BLOB NOT NULL, |
| 86 | timestamp INTEGER NOT NULL |
| 87 | )` |
| 88 | }).pipe(withTracerDisabled) |
| 89 | |
| 90 | yield* sql.onDialectOrElse({ |
| 91 | pg: () => |