@kronos-ts/postgres 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/errors.d.ts +3 -3
- package/dist/errors.js +3 -3
- package/dist/postgres-event-scheduler.d.ts.map +1 -1
- package/dist/postgres-event-scheduler.js +4 -3
- package/dist/postgres-event-scheduler.js.map +1 -1
- package/dist/postgres-event-store.d.ts +2 -7
- package/dist/postgres-event-store.d.ts.map +1 -1
- package/dist/postgres-event-store.js +13 -12
- package/dist/postgres-event-store.js.map +1 -1
- package/dist/schema.d.ts +9 -43
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +24 -87
- package/dist/schema.js.map +1 -1
- package/package.json +4 -4
- package/src/errors.ts +3 -3
- package/src/postgres-event-scheduler.ts +5 -4
- package/src/postgres-event-store.ts +24 -14
- package/src/schema.ts +24 -88
package/dist/errors.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SQLSTATE
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* SQLSTATE-style code tagged onto the error when a DCB append condition is
|
|
3
|
+
* violated. The conflict check in `checkAndInsert` detects the violation and
|
|
4
|
+
* attaches this code (per D-12.12: a dedicated code, never error-text parsing).
|
|
5
5
|
*
|
|
6
6
|
* `KR001` lives in the Postgres user-defined SQLSTATE range (KX–ZZ).
|
|
7
7
|
* It is intentionally distinct from:
|
package/dist/errors.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SQLSTATE
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* SQLSTATE-style code tagged onto the error when a DCB append condition is
|
|
3
|
+
* violated. The conflict check in `checkAndInsert` detects the violation and
|
|
4
|
+
* attaches this code (per D-12.12: a dedicated code, never error-text parsing).
|
|
5
5
|
*
|
|
6
6
|
* `KR001` lives in the Postgres user-defined SQLSTATE range (KX–ZZ).
|
|
7
7
|
* It is intentionally distinct from:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-event-scheduler.d.ts","sourceRoot":"","sources":["../src/postgres-event-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAIH,OAAO,KAAK,EACV,cAAc,EAGd,SAAS,EACV,MAAM,sBAAsB,CAAA;AAM7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,KAAK,EAAE,eAAe,EAA8B,MAAM,cAAc,CAAA;AAE/E,OAAO,EAAE,KAAK,UAAU,EAAuB,MAAM,aAAa,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5D,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,4CAA4C;IAC5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,2EAA2E;IAC3E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB;AAaD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,4BAA4B,GACnC,sBAAsB,
|
|
1
|
+
{"version":3,"file":"postgres-event-scheduler.d.ts","sourceRoot":"","sources":["../src/postgres-event-scheduler.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoDG;AAIH,OAAO,KAAK,EACV,cAAc,EAGd,SAAS,EACV,MAAM,sBAAsB,CAAA;AAM7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1D,OAAO,KAAK,EAAE,eAAe,EAA8B,MAAM,cAAc,CAAA;AAE/E,OAAO,EAAE,KAAK,UAAU,EAAuB,MAAM,aAAa,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AAE5D,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAA;IAC9B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;IAChC,8DAA8D;IAC9D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,4CAA4C;IAC5C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,2EAA2E;IAC3E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB;AAaD,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,4BAA4B,GACnC,sBAAsB,CAqMxB"}
|
|
@@ -71,7 +71,7 @@ export function createPostgresEventScheduler(config) {
|
|
|
71
71
|
.resolve(event)
|
|
72
72
|
.map((t) => encodeTag(t.key, t.value));
|
|
73
73
|
await tx.query(`INSERT INTO ${tables.scheduled}
|
|
74
|
-
(schedule_id, fire_at, status, type, tags, payload, metadata, version,
|
|
74
|
+
(schedule_id, fire_at, status, type, tags, payload, metadata, version, timestamp)
|
|
75
75
|
VALUES ($1, $2, 'pending', $3, $4, $5, $6, $7, $8)`, [
|
|
76
76
|
scheduleId,
|
|
77
77
|
at.toISOString(),
|
|
@@ -118,11 +118,12 @@ export function createPostgresEventScheduler(config) {
|
|
|
118
118
|
}
|
|
119
119
|
function reconstructEvent(row) {
|
|
120
120
|
return {
|
|
121
|
+
kind: "event",
|
|
121
122
|
identifier: row.schedule_id,
|
|
122
123
|
name: qualifiedNameFromString(row.type),
|
|
123
124
|
payload: decodeJsonbValue(row.payload),
|
|
124
125
|
metadata: decodeJsonbValue(row.metadata),
|
|
125
|
-
timestamp: Number(row.
|
|
126
|
+
timestamp: Number(row.timestamp),
|
|
126
127
|
version: row.version,
|
|
127
128
|
tags: decodeTags(row.tags),
|
|
128
129
|
};
|
|
@@ -143,7 +144,7 @@ export function createPostgresEventScheduler(config) {
|
|
|
143
144
|
// partial-state. This is a misconfiguration; surface loudly.
|
|
144
145
|
throw new Error("postgresEventScheduler worker requires a uowFactory wrapped with lazyTransactionalUnitOfWorkFactory + postgresTransactionManager");
|
|
145
146
|
}
|
|
146
|
-
const rows = await tx.query(`SELECT schedule_id, type, tags, payload, metadata, version,
|
|
147
|
+
const rows = await tx.query(`SELECT schedule_id, type, tags, payload, metadata, version, timestamp
|
|
147
148
|
FROM ${tables.scheduled}
|
|
148
149
|
WHERE status = 'pending' AND fire_at <= now()
|
|
149
150
|
ORDER BY fire_at
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-event-scheduler.js","sourceRoot":"","sources":["../src/postgres-event-scheduler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"postgres-event-scheduler.js","sourceRoot":"","sources":["../src/postgres-event-scheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,13 +22,8 @@
|
|
|
22
22
|
* - Wake-up via LISTEN/NOTIFY on `kronos_events_${tables.events}` channel
|
|
23
23
|
* - Fallback to 250ms polling if LISTEN is not supported
|
|
24
24
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* direct parameterised SQL for the conflict check + INSERT rather than
|
|
28
|
-
* calling the SP. The SP's dynamic-SQL approach has complex $N-rebinding
|
|
29
|
-
* requirements (criteria_params JSONB → USING binding) that are cleaner to
|
|
30
|
-
* handle in TypeScript. Plan 06's review may revisit whether the SP
|
|
31
|
-
* provides a meaningful benefit.
|
|
25
|
+
* The conflict check + INSERT run as direct parameterised SQL inside the
|
|
26
|
+
* append transaction (see checkAndInsert), not via a stored procedure.
|
|
32
27
|
*/
|
|
33
28
|
import type { EventStore } from "@kronos-ts/eventsourcing";
|
|
34
29
|
import type { EventMessage } from "@kronos-ts/messaging";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-event-store.d.ts","sourceRoot":"","sources":["../src/postgres-event-store.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"postgres-event-store.d.ts","sourceRoot":"","sources":["../src/postgres-event-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAGV,UAAU,EACX,MAAM,0BAA0B,CAAA;AAMjC,OAAO,KAAK,EACV,YAAY,EAMb,MAAM,sBAAsB,CAAA;AAS7B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,eAAe,EAA8B,MAAM,cAAc,CAAA;AAK/E,OAAO,EAAE,KAAK,UAAU,EAAuB,MAAM,aAAa,CAAA;AAIlE,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC5E;AAED,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAAA;IACjC,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;CACjC;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,wBAAwB,GAC/B,UAAU,CAghBZ"}
|
|
@@ -22,13 +22,8 @@
|
|
|
22
22
|
* - Wake-up via LISTEN/NOTIFY on `kronos_events_${tables.events}` channel
|
|
23
23
|
* - Fallback to 250ms polling if LISTEN is not supported
|
|
24
24
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* direct parameterised SQL for the conflict check + INSERT rather than
|
|
28
|
-
* calling the SP. The SP's dynamic-SQL approach has complex $N-rebinding
|
|
29
|
-
* requirements (criteria_params JSONB → USING binding) that are cleaner to
|
|
30
|
-
* handle in TypeScript. Plan 06's review may revisit whether the SP
|
|
31
|
-
* provides a meaningful benefit.
|
|
25
|
+
* The conflict check + INSERT run as direct parameterised SQL inside the
|
|
26
|
+
* append transaction (see checkAndInsert), not via a stored procedure.
|
|
32
27
|
*/
|
|
33
28
|
import { markerAt } from "@kronos-ts/eventsourcing";
|
|
34
29
|
import { createMessageStream, globalSequenceToken, FIRST_TOKEN, getOrBeginActiveTransaction, onAfterCommit, } from "@kronos-ts/messaging";
|
|
@@ -109,14 +104,16 @@ export function createPostgresEventStore(config) {
|
|
|
109
104
|
const type = eventTypeOf(e);
|
|
110
105
|
const payload = e.payload ?? {};
|
|
111
106
|
const metadata = e.metadata ?? {};
|
|
112
|
-
const rows = await tx.query(`INSERT INTO ${tables.events} (event_id, type, tags, payload, metadata)
|
|
113
|
-
VALUES ($1, $2, $3, $4, $5)
|
|
107
|
+
const rows = await tx.query(`INSERT INTO ${tables.events} (event_id, type, tags, payload, metadata, version, timestamp)
|
|
108
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
|
114
109
|
RETURNING sequence_position, transaction_id`, [
|
|
115
110
|
e.identifier,
|
|
116
111
|
type,
|
|
117
112
|
encodedTags,
|
|
118
113
|
JSON.stringify(payload),
|
|
119
114
|
JSON.stringify(metadata),
|
|
115
|
+
e.version,
|
|
116
|
+
e.timestamp,
|
|
120
117
|
]);
|
|
121
118
|
const row = rows[0];
|
|
122
119
|
if (!row)
|
|
@@ -134,7 +131,7 @@ export function createPostgresEventStore(config) {
|
|
|
134
131
|
const start = condition.start ?? 0n;
|
|
135
132
|
const built = buildCriteriaWhere(condition.criteria, 2); // $1 = start
|
|
136
133
|
const sql = `
|
|
137
|
-
SELECT sequence_position, type, tags, payload, metadata
|
|
134
|
+
SELECT sequence_position, event_id, type, tags, payload, metadata, version, timestamp
|
|
138
135
|
FROM ${tables.events}
|
|
139
136
|
WHERE sequence_position >= $1 AND (${built.where})
|
|
140
137
|
ORDER BY sequence_position ASC
|
|
@@ -388,7 +385,7 @@ export function createPostgresEventStore(config) {
|
|
|
388
385
|
sql = `
|
|
389
386
|
SELECT sequence_position::text AS sequence_position,
|
|
390
387
|
transaction_id::text AS transaction_id,
|
|
391
|
-
type, tags, payload, metadata
|
|
388
|
+
event_id, type, tags, payload, metadata, version, timestamp
|
|
392
389
|
FROM ${tables.events}
|
|
393
390
|
WHERE sequence_position > $1::bigint
|
|
394
391
|
AND transaction_id < pg_snapshot_xmin(pg_current_snapshot())
|
|
@@ -408,7 +405,7 @@ export function createPostgresEventStore(config) {
|
|
|
408
405
|
sql = `
|
|
409
406
|
SELECT sequence_position::text AS sequence_position,
|
|
410
407
|
transaction_id::text AS transaction_id,
|
|
411
|
-
type, tags, payload, metadata
|
|
408
|
+
event_id, type, tags, payload, metadata, version, timestamp
|
|
412
409
|
FROM ${tables.events}
|
|
413
410
|
WHERE (transaction_id, sequence_position) > ($1::xid8, $2::bigint)
|
|
414
411
|
AND transaction_id < pg_snapshot_xmin(pg_current_snapshot())
|
|
@@ -508,10 +505,14 @@ function decodeEvent(row) {
|
|
|
508
505
|
: { key: t, value: "" };
|
|
509
506
|
});
|
|
510
507
|
return {
|
|
508
|
+
kind: "event",
|
|
509
|
+
identifier: row.event_id,
|
|
511
510
|
name: qn,
|
|
511
|
+
version: row.version,
|
|
512
512
|
tags,
|
|
513
513
|
payload: decodeJsonb(row.payload),
|
|
514
514
|
metadata: decodeJsonb(row.metadata),
|
|
515
|
+
timestamp: Number(row.timestamp),
|
|
515
516
|
};
|
|
516
517
|
}
|
|
517
518
|
// Adapter-agnostic JSONB decoding: pgAdapter/postgresAdapter return parsed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-event-store.js","sourceRoot":"","sources":["../src/postgres-event-store.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"postgres-event-store.js","sourceRoot":"","sources":["../src/postgres-event-store.ts"],"names":[],"mappings":"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"}
|
package/dist/schema.d.ts
CHANGED
|
@@ -57,13 +57,15 @@ export declare function buildSnapshotsTableDDL(tables: TableNames): string;
|
|
|
57
57
|
* # Payload columns
|
|
58
58
|
*
|
|
59
59
|
* The whole EventMessage shape is captured inline (event_id, type, tags,
|
|
60
|
-
* payload, metadata, version,
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
*
|
|
64
|
-
*
|
|
65
|
-
*
|
|
66
|
-
*
|
|
60
|
+
* payload, metadata, version, timestamp) so the fire-time worker can
|
|
61
|
+
* reconstruct it from a single row read. `timestamp` is the EventMessage's
|
|
62
|
+
* authored timestamp (epoch ms) — distinct from `created_at` (when the row
|
|
63
|
+
* was inserted) and `fire_at` (when it should fire). At append-time, the
|
|
64
|
+
* worker MAY overwrite `timestamp` with `now()` so consumers see the actual
|
|
65
|
+
* append time; that is an implementation decision left to the scheduler.
|
|
66
|
+
*
|
|
67
|
+
* Column names mirror the events table (`version`, `timestamp`) so a schedule
|
|
68
|
+
* row and the event it materialises into share the same vocabulary.
|
|
67
69
|
*/
|
|
68
70
|
export declare function buildScheduledEventsTableDDL(tables: TableNames): string;
|
|
69
71
|
/**
|
|
@@ -92,39 +94,6 @@ export interface BootstrapSchemaOptions {
|
|
|
92
94
|
/** Override `kronos_events` / `kronos_snapshots`. */
|
|
93
95
|
readonly tableNames?: TableNames;
|
|
94
96
|
}
|
|
95
|
-
/**
|
|
96
|
-
* Append-with-DCB-check stored procedure.
|
|
97
|
-
*
|
|
98
|
-
* Called from `createPostgresEventStore.appendEvents` (Plan 04 Task 3)
|
|
99
|
-
* after advisory-lock acquisition. The SP is the single SQL statement
|
|
100
|
-
* that BOTH performs the conflict check AND inserts the new events —
|
|
101
|
-
* keeping them atomic without round-tripping a separate SELECT.
|
|
102
|
-
*
|
|
103
|
-
* Inputs (positional):
|
|
104
|
-
* $1 marker_position bigint — the AppendCondition.marker.position
|
|
105
|
-
* $2 has_condition boolean — false ⇒ skip the conflict check
|
|
106
|
-
* $3 criteria_where_sql text — Plan 04's criteria-sql builder output
|
|
107
|
-
* $4 criteria_params jsonb — parameter array for criteria_where_sql
|
|
108
|
-
* $5 event_ids uuid[] — N event identifiers (EventMessage.identifier, UUID v7)
|
|
109
|
-
* $6 event_types text[] — N event types (one per event)
|
|
110
|
-
* $7 event_tags text[][] — N tag arrays
|
|
111
|
-
* $8 event_payloads jsonb[] — N JSONB payloads
|
|
112
|
-
* $9 event_metadata jsonb[] — N metadata maps
|
|
113
|
-
*
|
|
114
|
-
* Returns: TABLE(out_position bigint, out_xid xid8) — one row per inserted event.
|
|
115
|
-
* The last row carries the consistency marker.
|
|
116
|
-
*
|
|
117
|
-
* On conflict: RAISE EXCEPTION USING ERRCODE = 'KR001' (D-12.12).
|
|
118
|
-
* On duplicate event_id (UNIQUE violation): Postgres raises SQLSTATE 23505;
|
|
119
|
-
* caller treats as idempotent no-op or surfaces per consumer policy.
|
|
120
|
-
*
|
|
121
|
-
* NOTE: dynamic-SQL is used (EXECUTE) because the criteria WHERE clause is
|
|
122
|
-
* parameter-shaped and varies per call. SQL injection is mitigated by the
|
|
123
|
-
* fact that criteria_where_sql is produced by buildCriteriaWhere — a typed
|
|
124
|
-
* builder that NEVER concatenates user data into the WHERE string (all user
|
|
125
|
-
* data flows through criteria_params as JSONB).
|
|
126
|
-
*/
|
|
127
|
-
export declare function buildAppendStoredProcedureDDL(tables: TableNames): string;
|
|
128
97
|
/**
|
|
129
98
|
* Idempotently create the event-store schema.
|
|
130
99
|
*
|
|
@@ -135,9 +104,6 @@ export declare function buildAppendStoredProcedureDDL(tables: TableNames): strin
|
|
|
135
104
|
* The lock is RELEASED in a finally block — partial-DDL-then-throw must
|
|
136
105
|
* NEVER leak a session lock that would block all subsequent bootstraps
|
|
137
106
|
* on the same connection.
|
|
138
|
-
*
|
|
139
|
-
* The append stored procedure is applied as part of bootstrap so that
|
|
140
|
-
* the SP is always up-to-date with the schema version.
|
|
141
107
|
*/
|
|
142
108
|
export declare function bootstrapSchema(adapter: SchemaBootstrapAdapter, options?: BootstrapSchemaOptions): Promise<void>;
|
|
143
109
|
//# sourceMappingURL=schema.d.ts.map
|
package/dist/schema.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,eAAO,MAAM,mBAAmB,EAAE,UAIjC,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAgB,CAAA;AAErD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AAED,eAAO,MAAM,mBAAmB,EAAE,UAIjC,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAgB,CAAA;AAErD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CA+B9D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAMhE;AAED,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAUjE;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAcvE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAIzE;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACzD;AAED,MAAM,WAAW,sBAAsB;IACrC,qDAAqD;IACrD,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;CACjC;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,sBAAsB,EAC/B,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
package/dist/schema.js
CHANGED
|
@@ -33,6 +33,18 @@ export function buildEventsTableDDL(tables) {
|
|
|
33
33
|
// event_id is sourced from EventMessage.identifier (UUID v7 per quick 260511-mks).
|
|
34
34
|
// UNIQUE auto-creates a btree; v7's time-ordered prefix keeps it compact under
|
|
35
35
|
// append load (a v4 random UUID would fragment the leaf pages over time).
|
|
36
|
+
//
|
|
37
|
+
// version + timestamp persist the EventMessage's own `version` and authored `timestamp`
|
|
38
|
+
// (epoch ms) so source()/open() reconstruct the full EventMessage contract, matching the
|
|
39
|
+
// in-memory, axon-server, and kronosdb engines. `timestamp` is a BIGINT (epoch ms), fully
|
|
40
|
+
// btree/BRIN-indexable; `timestamp` is a non-reserved keyword in Postgres and works
|
|
41
|
+
// unquoted in every position we use (the only conflict is the `TIMESTAMP 'literal'` cast,
|
|
42
|
+
// which we never write).
|
|
43
|
+
//
|
|
44
|
+
// MIGRATION: this is CREATE-only. `CREATE TABLE IF NOT EXISTS` does NOT add columns to a
|
|
45
|
+
// pre-existing table, and the columns are NOT NULL, so an events table created before
|
|
46
|
+
// these columns existed must be hand-migrated (ALTER TABLE ... ADD COLUMN) or reset
|
|
47
|
+
// before upgrading — there is no automatic in-place migration.
|
|
36
48
|
return `CREATE TABLE IF NOT EXISTS ${tables.events} (
|
|
37
49
|
sequence_position BIGSERIAL PRIMARY KEY,
|
|
38
50
|
event_id UUID NOT NULL UNIQUE,
|
|
@@ -41,7 +53,8 @@ export function buildEventsTableDDL(tables) {
|
|
|
41
53
|
tags TEXT[] NOT NULL DEFAULT '{}',
|
|
42
54
|
payload JSONB NOT NULL,
|
|
43
55
|
metadata JSONB NOT NULL DEFAULT '{}',
|
|
44
|
-
|
|
56
|
+
version TEXT NOT NULL,
|
|
57
|
+
timestamp BIGINT NOT NULL
|
|
45
58
|
) WITH (
|
|
46
59
|
autovacuum_freeze_min_age = 10000000,
|
|
47
60
|
autovacuum_freeze_table_age = 100000000,
|
|
@@ -90,13 +103,15 @@ export function buildSnapshotsTableDDL(tables) {
|
|
|
90
103
|
* # Payload columns
|
|
91
104
|
*
|
|
92
105
|
* The whole EventMessage shape is captured inline (event_id, type, tags,
|
|
93
|
-
* payload, metadata, version,
|
|
94
|
-
*
|
|
95
|
-
*
|
|
96
|
-
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
106
|
+
* payload, metadata, version, timestamp) so the fire-time worker can
|
|
107
|
+
* reconstruct it from a single row read. `timestamp` is the EventMessage's
|
|
108
|
+
* authored timestamp (epoch ms) — distinct from `created_at` (when the row
|
|
109
|
+
* was inserted) and `fire_at` (when it should fire). At append-time, the
|
|
110
|
+
* worker MAY overwrite `timestamp` with `now()` so consumers see the actual
|
|
111
|
+
* append time; that is an implementation decision left to the scheduler.
|
|
112
|
+
*
|
|
113
|
+
* Column names mirror the events table (`version`, `timestamp`) so a schedule
|
|
114
|
+
* row and the event it materialises into share the same vocabulary.
|
|
100
115
|
*/
|
|
101
116
|
export function buildScheduledEventsTableDDL(tables) {
|
|
102
117
|
return `CREATE TABLE IF NOT EXISTS ${tables.scheduled} (
|
|
@@ -109,7 +124,7 @@ export function buildScheduledEventsTableDDL(tables) {
|
|
|
109
124
|
payload JSONB NOT NULL,
|
|
110
125
|
metadata JSONB NOT NULL DEFAULT '{}',
|
|
111
126
|
version TEXT NOT NULL,
|
|
112
|
-
|
|
127
|
+
timestamp BIGINT NOT NULL,
|
|
113
128
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
114
129
|
);`;
|
|
115
130
|
}
|
|
@@ -130,80 +145,6 @@ export function buildScheduledEventsIndexesDDL(tables) {
|
|
|
130
145
|
ON ${tables.scheduled} (fire_at)
|
|
131
146
|
WHERE status = 'pending';`;
|
|
132
147
|
}
|
|
133
|
-
/**
|
|
134
|
-
* Append-with-DCB-check stored procedure.
|
|
135
|
-
*
|
|
136
|
-
* Called from `createPostgresEventStore.appendEvents` (Plan 04 Task 3)
|
|
137
|
-
* after advisory-lock acquisition. The SP is the single SQL statement
|
|
138
|
-
* that BOTH performs the conflict check AND inserts the new events —
|
|
139
|
-
* keeping them atomic without round-tripping a separate SELECT.
|
|
140
|
-
*
|
|
141
|
-
* Inputs (positional):
|
|
142
|
-
* $1 marker_position bigint — the AppendCondition.marker.position
|
|
143
|
-
* $2 has_condition boolean — false ⇒ skip the conflict check
|
|
144
|
-
* $3 criteria_where_sql text — Plan 04's criteria-sql builder output
|
|
145
|
-
* $4 criteria_params jsonb — parameter array for criteria_where_sql
|
|
146
|
-
* $5 event_ids uuid[] — N event identifiers (EventMessage.identifier, UUID v7)
|
|
147
|
-
* $6 event_types text[] — N event types (one per event)
|
|
148
|
-
* $7 event_tags text[][] — N tag arrays
|
|
149
|
-
* $8 event_payloads jsonb[] — N JSONB payloads
|
|
150
|
-
* $9 event_metadata jsonb[] — N metadata maps
|
|
151
|
-
*
|
|
152
|
-
* Returns: TABLE(out_position bigint, out_xid xid8) — one row per inserted event.
|
|
153
|
-
* The last row carries the consistency marker.
|
|
154
|
-
*
|
|
155
|
-
* On conflict: RAISE EXCEPTION USING ERRCODE = 'KR001' (D-12.12).
|
|
156
|
-
* On duplicate event_id (UNIQUE violation): Postgres raises SQLSTATE 23505;
|
|
157
|
-
* caller treats as idempotent no-op or surfaces per consumer policy.
|
|
158
|
-
*
|
|
159
|
-
* NOTE: dynamic-SQL is used (EXECUTE) because the criteria WHERE clause is
|
|
160
|
-
* parameter-shaped and varies per call. SQL injection is mitigated by the
|
|
161
|
-
* fact that criteria_where_sql is produced by buildCriteriaWhere — a typed
|
|
162
|
-
* builder that NEVER concatenates user data into the WHERE string (all user
|
|
163
|
-
* data flows through criteria_params as JSONB).
|
|
164
|
-
*/
|
|
165
|
-
export function buildAppendStoredProcedureDDL(tables) {
|
|
166
|
-
return `CREATE OR REPLACE FUNCTION kronos_append_with_check(
|
|
167
|
-
marker_position bigint,
|
|
168
|
-
has_condition boolean,
|
|
169
|
-
criteria_where_sql text,
|
|
170
|
-
criteria_params jsonb,
|
|
171
|
-
event_ids uuid[],
|
|
172
|
-
event_types text[],
|
|
173
|
-
event_tags text[][],
|
|
174
|
-
event_payloads jsonb[],
|
|
175
|
-
event_metadata jsonb[]
|
|
176
|
-
) RETURNS TABLE(out_position bigint, out_xid xid8) AS $$
|
|
177
|
-
DECLARE
|
|
178
|
-
conflict_count bigint;
|
|
179
|
-
i integer;
|
|
180
|
-
BEGIN
|
|
181
|
-
IF has_condition THEN
|
|
182
|
-
EXECUTE format(
|
|
183
|
-
'SELECT count(*) FROM ${tables.events} WHERE sequence_position > $1 AND (%s)',
|
|
184
|
-
criteria_where_sql
|
|
185
|
-
)
|
|
186
|
-
USING marker_position, criteria_params
|
|
187
|
-
INTO conflict_count;
|
|
188
|
-
|
|
189
|
-
IF conflict_count > 0 THEN
|
|
190
|
-
RAISE EXCEPTION 'Append condition violated: % conflicting event(s) after position %',
|
|
191
|
-
conflict_count, marker_position
|
|
192
|
-
USING ERRCODE = 'KR001';
|
|
193
|
-
END IF;
|
|
194
|
-
END IF;
|
|
195
|
-
|
|
196
|
-
FOR i IN 1 .. array_length(event_types, 1) LOOP
|
|
197
|
-
-- event_id UNIQUE constraint surfaces duplicates as SQLSTATE 23505 (D-12.12);
|
|
198
|
-
-- caller (Plan 04 Task 3) maps that to AppendConditionError or idempotent skip.
|
|
199
|
-
INSERT INTO ${tables.events} (event_id, type, tags, payload, metadata)
|
|
200
|
-
VALUES (event_ids[i], event_types[i], event_tags[i:i][1], event_payloads[i], event_metadata[i])
|
|
201
|
-
RETURNING sequence_position, transaction_id INTO out_position, out_xid;
|
|
202
|
-
RETURN NEXT;
|
|
203
|
-
END LOOP;
|
|
204
|
-
END;
|
|
205
|
-
$$ LANGUAGE plpgsql;`;
|
|
206
|
-
}
|
|
207
148
|
/**
|
|
208
149
|
* Idempotently create the event-store schema.
|
|
209
150
|
*
|
|
@@ -214,9 +155,6 @@ $$ LANGUAGE plpgsql;`;
|
|
|
214
155
|
* The lock is RELEASED in a finally block — partial-DDL-then-throw must
|
|
215
156
|
* NEVER leak a session lock that would block all subsequent bootstraps
|
|
216
157
|
* on the same connection.
|
|
217
|
-
*
|
|
218
|
-
* The append stored procedure is applied as part of bootstrap so that
|
|
219
|
-
* the SP is always up-to-date with the schema version.
|
|
220
158
|
*/
|
|
221
159
|
export async function bootstrapSchema(adapter, options = {}) {
|
|
222
160
|
const tables = options.tableNames ?? DEFAULT_TABLE_NAMES;
|
|
@@ -230,7 +168,6 @@ export async function bootstrapSchema(adapter, options = {}) {
|
|
|
230
168
|
await adapter.query(buildSnapshotsTableDDL(tables));
|
|
231
169
|
await adapter.query(buildScheduledEventsTableDDL(tables));
|
|
232
170
|
await adapter.query(buildScheduledEventsIndexesDDL(tables));
|
|
233
|
-
await adapter.query(buildAppendStoredProcedureDDL(tables));
|
|
234
171
|
}
|
|
235
172
|
finally {
|
|
236
173
|
// Release even on partial-DDL failure. The error (if any) propagates
|
package/dist/schema.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,MAAM,EAAE,eAAe;IACvB,SAAS,EAAE,kBAAkB;IAC7B,SAAS,EAAE,yBAAyB;CACrC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAW,CAAC,MAAM,CAAA;AAErD,MAAM,UAAU,mBAAmB,CAAC,MAAkB;IACpD,mFAAmF;IACnF,+EAA+E;IAC/E,0EAA0E;IAC1E,OAAO,8BAA8B,MAAM,CAAC,MAAM
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../src/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,MAAM,CAAC,MAAM,mBAAmB,GAAe;IAC7C,MAAM,EAAE,eAAe;IACvB,SAAS,EAAE,kBAAkB;IAC7B,SAAS,EAAE,yBAAyB;CACrC,CAAA;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAW,CAAC,MAAM,CAAA;AAErD,MAAM,UAAU,mBAAmB,CAAC,MAAkB;IACpD,mFAAmF;IACnF,+EAA+E;IAC/E,0EAA0E;IAC1E,EAAE;IACF,wFAAwF;IACxF,yFAAyF;IACzF,0FAA0F;IAC1F,oFAAoF;IACpF,0FAA0F;IAC1F,yBAAyB;IACzB,EAAE;IACF,yFAAyF;IACzF,sFAAsF;IACtF,oFAAoF;IACpF,+DAA+D;IAC/D,OAAO,8BAA8B,MAAM,CAAC,MAAM;;;;;;;;;;;;;;GAcjD,CAAA;AACH,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAkB;IACtD,OAAO,qCAAqC,MAAM,CAAC,MAAM;OACpD,MAAM,CAAC,MAAM;;6BAES,MAAM,CAAC,MAAM;OACnC,MAAM,CAAC,MAAM,2CAA2C,CAAA;AAC/D,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,MAAkB;IACvD,OAAO,8BAA8B,MAAM,CAAC,SAAS;;;;;;;;GAQpD,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,UAAU,4BAA4B,CAAC,MAAkB;IAC7D,OAAO,8BAA8B,MAAM,CAAC,SAAS;;;;;;;;;;;;GAYpD,CAAA;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,8BAA8B,CAAC,MAAkB;IAC/D,OAAO,8BAA8B,MAAM,CAAC,SAAS;OAChD,MAAM,CAAC,SAAS;4BACK,CAAA;AAC5B,CAAC;AAiBD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAA+B,EAC/B,UAAkC,EAAE;IAEpC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,IAAI,mBAAmB,CAAA;IAExD,uEAAuE;IACvE,qEAAqE;IACrE,sBAAsB;IACtB,MAAM,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAA;IAE5E,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAA;QAChD,MAAM,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAA;QAClD,MAAM,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAA;QACnD,MAAM,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,MAAM,CAAC,CAAC,CAAA;QACzD,MAAM,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,CAAA;IAC7D,CAAC;YAAS,CAAC;QACT,qEAAqE;QACrE,+CAA+C;QAC/C,MAAM,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAA;IAChF,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kronos-ts/postgres",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "PostgreSQL extension for Kronos — event store and snapshot store adapters.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -68,9 +68,9 @@
|
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
70
|
"@kronos-ts/common": "0.1.1",
|
|
71
|
-
"@kronos-ts/app": "0.
|
|
72
|
-
"@kronos-ts/eventsourcing": "0.2.
|
|
73
|
-
"@kronos-ts/messaging": "0.
|
|
71
|
+
"@kronos-ts/app": "0.4.1",
|
|
72
|
+
"@kronos-ts/eventsourcing": "0.2.3",
|
|
73
|
+
"@kronos-ts/messaging": "0.7.0"
|
|
74
74
|
},
|
|
75
75
|
"peerDependencies": {
|
|
76
76
|
"pg": ">=8.0.0",
|
package/src/errors.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* SQLSTATE
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* SQLSTATE-style code tagged onto the error when a DCB append condition is
|
|
3
|
+
* violated. The conflict check in `checkAndInsert` detects the violation and
|
|
4
|
+
* attaches this code (per D-12.12: a dedicated code, never error-text parsing).
|
|
5
5
|
*
|
|
6
6
|
* `KR001` lives in the Postgres user-defined SQLSTATE range (KX–ZZ).
|
|
7
7
|
* It is intentionally distinct from:
|
|
@@ -109,7 +109,7 @@ interface ScheduleRow {
|
|
|
109
109
|
payload: unknown
|
|
110
110
|
metadata: unknown
|
|
111
111
|
version: string
|
|
112
|
-
|
|
112
|
+
timestamp: string | number
|
|
113
113
|
[key: string]: unknown
|
|
114
114
|
}
|
|
115
115
|
|
|
@@ -132,7 +132,7 @@ export function createPostgresEventScheduler(
|
|
|
132
132
|
.map((t) => encodeTag(t.key, t.value))
|
|
133
133
|
await tx.query(
|
|
134
134
|
`INSERT INTO ${tables.scheduled}
|
|
135
|
-
(schedule_id, fire_at, status, type, tags, payload, metadata, version,
|
|
135
|
+
(schedule_id, fire_at, status, type, tags, payload, metadata, version, timestamp)
|
|
136
136
|
VALUES ($1, $2, 'pending', $3, $4, $5, $6, $7, $8)`,
|
|
137
137
|
[
|
|
138
138
|
scheduleId,
|
|
@@ -191,11 +191,12 @@ export function createPostgresEventScheduler(
|
|
|
191
191
|
|
|
192
192
|
function reconstructEvent(row: ScheduleRow): EventMessage {
|
|
193
193
|
return {
|
|
194
|
+
kind: "event",
|
|
194
195
|
identifier: row.schedule_id,
|
|
195
196
|
name: qualifiedNameFromString(row.type),
|
|
196
197
|
payload: decodeJsonbValue(row.payload),
|
|
197
198
|
metadata: decodeJsonbValue(row.metadata) as EventMessage["metadata"],
|
|
198
|
-
timestamp: Number(row.
|
|
199
|
+
timestamp: Number(row.timestamp),
|
|
199
200
|
version: row.version,
|
|
200
201
|
tags: decodeTags(row.tags),
|
|
201
202
|
}
|
|
@@ -222,7 +223,7 @@ export function createPostgresEventScheduler(
|
|
|
222
223
|
}
|
|
223
224
|
|
|
224
225
|
const rows = await tx.query<ScheduleRow>(
|
|
225
|
-
`SELECT schedule_id, type, tags, payload, metadata, version,
|
|
226
|
+
`SELECT schedule_id, type, tags, payload, metadata, version, timestamp
|
|
226
227
|
FROM ${tables.scheduled}
|
|
227
228
|
WHERE status = 'pending' AND fire_at <= now()
|
|
228
229
|
ORDER BY fire_at
|
|
@@ -22,13 +22,8 @@
|
|
|
22
22
|
* - Wake-up via LISTEN/NOTIFY on `kronos_events_${tables.events}` channel
|
|
23
23
|
* - Fallback to 250ms polling if LISTEN is not supported
|
|
24
24
|
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
* direct parameterised SQL for the conflict check + INSERT rather than
|
|
28
|
-
* calling the SP. The SP's dynamic-SQL approach has complex $N-rebinding
|
|
29
|
-
* requirements (criteria_params JSONB → USING binding) that are cleaner to
|
|
30
|
-
* handle in TypeScript. Plan 06's review may revisit whether the SP
|
|
31
|
-
* provides a meaningful benefit.
|
|
25
|
+
* The conflict check + INSERT run as direct parameterised SQL inside the
|
|
26
|
+
* append transaction (see checkAndInsert), not via a stored procedure.
|
|
32
27
|
*/
|
|
33
28
|
|
|
34
29
|
import type {
|
|
@@ -168,8 +163,8 @@ export function createPostgresEventStore(
|
|
|
168
163
|
const metadata = e.metadata ?? {}
|
|
169
164
|
|
|
170
165
|
const rows = await tx.query<{ sequence_position: string; transaction_id: string }>(
|
|
171
|
-
`INSERT INTO ${tables.events} (event_id, type, tags, payload, metadata)
|
|
172
|
-
VALUES ($1, $2, $3, $4, $5)
|
|
166
|
+
`INSERT INTO ${tables.events} (event_id, type, tags, payload, metadata, version, timestamp)
|
|
167
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7)
|
|
173
168
|
RETURNING sequence_position, transaction_id`,
|
|
174
169
|
[
|
|
175
170
|
e.identifier,
|
|
@@ -177,6 +172,8 @@ export function createPostgresEventStore(
|
|
|
177
172
|
encodedTags,
|
|
178
173
|
JSON.stringify(payload),
|
|
179
174
|
JSON.stringify(metadata),
|
|
175
|
+
e.version,
|
|
176
|
+
e.timestamp,
|
|
180
177
|
],
|
|
181
178
|
)
|
|
182
179
|
const row = rows[0]
|
|
@@ -196,17 +193,20 @@ export function createPostgresEventStore(
|
|
|
196
193
|
const start = condition.start ?? 0n
|
|
197
194
|
const built = buildCriteriaWhere(condition.criteria, 2) // $1 = start
|
|
198
195
|
const sql = `
|
|
199
|
-
SELECT sequence_position, type, tags, payload, metadata
|
|
196
|
+
SELECT sequence_position, event_id, type, tags, payload, metadata, version, timestamp
|
|
200
197
|
FROM ${tables.events}
|
|
201
198
|
WHERE sequence_position >= $1 AND (${built.where})
|
|
202
199
|
ORDER BY sequence_position ASC
|
|
203
200
|
`
|
|
204
201
|
const rows = await adapter.query<{
|
|
205
202
|
sequence_position: string
|
|
203
|
+
event_id: string
|
|
206
204
|
type: string
|
|
207
205
|
tags: string[]
|
|
208
206
|
payload: unknown
|
|
209
207
|
metadata: unknown
|
|
208
|
+
version: string
|
|
209
|
+
timestamp: string | number
|
|
210
210
|
}>(sql, [start, ...built.params])
|
|
211
211
|
|
|
212
212
|
const events: EventMessage[] = rows.map((r) => decodeEvent(r))
|
|
@@ -482,7 +482,7 @@ export function createPostgresEventStore(
|
|
|
482
482
|
sql = `
|
|
483
483
|
SELECT sequence_position::text AS sequence_position,
|
|
484
484
|
transaction_id::text AS transaction_id,
|
|
485
|
-
type, tags, payload, metadata
|
|
485
|
+
event_id, type, tags, payload, metadata, version, timestamp
|
|
486
486
|
FROM ${tables.events}
|
|
487
487
|
WHERE sequence_position > $1::bigint
|
|
488
488
|
AND transaction_id < pg_snapshot_xmin(pg_current_snapshot())
|
|
@@ -501,7 +501,7 @@ export function createPostgresEventStore(
|
|
|
501
501
|
sql = `
|
|
502
502
|
SELECT sequence_position::text AS sequence_position,
|
|
503
503
|
transaction_id::text AS transaction_id,
|
|
504
|
-
type, tags, payload, metadata
|
|
504
|
+
event_id, type, tags, payload, metadata, version, timestamp
|
|
505
505
|
FROM ${tables.events}
|
|
506
506
|
WHERE (transaction_id, sequence_position) > ($1::xid8, $2::bigint)
|
|
507
507
|
AND transaction_id < pg_snapshot_xmin(pg_current_snapshot())
|
|
@@ -515,10 +515,13 @@ export function createPostgresEventStore(
|
|
|
515
515
|
const rows = await adapter.query<{
|
|
516
516
|
sequence_position: string
|
|
517
517
|
transaction_id: string
|
|
518
|
+
event_id: string
|
|
518
519
|
type: string
|
|
519
520
|
tags: string[]
|
|
520
521
|
payload: unknown
|
|
521
522
|
metadata: unknown
|
|
523
|
+
version: string
|
|
524
|
+
timestamp: string | number
|
|
522
525
|
}>(sql, queryParams)
|
|
523
526
|
|
|
524
527
|
for (const r of rows) {
|
|
@@ -609,6 +612,9 @@ function decodeEvent(row: {
|
|
|
609
612
|
payload: unknown
|
|
610
613
|
metadata: unknown
|
|
611
614
|
sequence_position: string
|
|
615
|
+
event_id: string
|
|
616
|
+
version: string
|
|
617
|
+
timestamp: string | number
|
|
612
618
|
}): EventMessage {
|
|
613
619
|
const qn = qualifiedNameFromString(row.type)
|
|
614
620
|
const tags = row.tags.map((t) => {
|
|
@@ -618,11 +624,15 @@ function decodeEvent(row: {
|
|
|
618
624
|
: { key: t, value: "" }
|
|
619
625
|
})
|
|
620
626
|
return {
|
|
627
|
+
kind: "event",
|
|
628
|
+
identifier: row.event_id,
|
|
621
629
|
name: qn,
|
|
630
|
+
version: row.version,
|
|
622
631
|
tags,
|
|
623
632
|
payload: decodeJsonb(row.payload),
|
|
624
|
-
metadata: decodeJsonb(row.metadata),
|
|
625
|
-
|
|
633
|
+
metadata: decodeJsonb(row.metadata) as EventMessage["metadata"],
|
|
634
|
+
timestamp: Number(row.timestamp),
|
|
635
|
+
}
|
|
626
636
|
}
|
|
627
637
|
|
|
628
638
|
// Adapter-agnostic JSONB decoding: pgAdapter/postgresAdapter return parsed
|
package/src/schema.ts
CHANGED
|
@@ -42,6 +42,18 @@ export function buildEventsTableDDL(tables: TableNames): string {
|
|
|
42
42
|
// event_id is sourced from EventMessage.identifier (UUID v7 per quick 260511-mks).
|
|
43
43
|
// UNIQUE auto-creates a btree; v7's time-ordered prefix keeps it compact under
|
|
44
44
|
// append load (a v4 random UUID would fragment the leaf pages over time).
|
|
45
|
+
//
|
|
46
|
+
// version + timestamp persist the EventMessage's own `version` and authored `timestamp`
|
|
47
|
+
// (epoch ms) so source()/open() reconstruct the full EventMessage contract, matching the
|
|
48
|
+
// in-memory, axon-server, and kronosdb engines. `timestamp` is a BIGINT (epoch ms), fully
|
|
49
|
+
// btree/BRIN-indexable; `timestamp` is a non-reserved keyword in Postgres and works
|
|
50
|
+
// unquoted in every position we use (the only conflict is the `TIMESTAMP 'literal'` cast,
|
|
51
|
+
// which we never write).
|
|
52
|
+
//
|
|
53
|
+
// MIGRATION: this is CREATE-only. `CREATE TABLE IF NOT EXISTS` does NOT add columns to a
|
|
54
|
+
// pre-existing table, and the columns are NOT NULL, so an events table created before
|
|
55
|
+
// these columns existed must be hand-migrated (ALTER TABLE ... ADD COLUMN) or reset
|
|
56
|
+
// before upgrading — there is no automatic in-place migration.
|
|
45
57
|
return `CREATE TABLE IF NOT EXISTS ${tables.events} (
|
|
46
58
|
sequence_position BIGSERIAL PRIMARY KEY,
|
|
47
59
|
event_id UUID NOT NULL UNIQUE,
|
|
@@ -50,7 +62,8 @@ export function buildEventsTableDDL(tables: TableNames): string {
|
|
|
50
62
|
tags TEXT[] NOT NULL DEFAULT '{}',
|
|
51
63
|
payload JSONB NOT NULL,
|
|
52
64
|
metadata JSONB NOT NULL DEFAULT '{}',
|
|
53
|
-
|
|
65
|
+
version TEXT NOT NULL,
|
|
66
|
+
timestamp BIGINT NOT NULL
|
|
54
67
|
) WITH (
|
|
55
68
|
autovacuum_freeze_min_age = 10000000,
|
|
56
69
|
autovacuum_freeze_table_age = 100000000,
|
|
@@ -102,13 +115,15 @@ export function buildSnapshotsTableDDL(tables: TableNames): string {
|
|
|
102
115
|
* # Payload columns
|
|
103
116
|
*
|
|
104
117
|
* The whole EventMessage shape is captured inline (event_id, type, tags,
|
|
105
|
-
* payload, metadata, version,
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
*
|
|
110
|
-
*
|
|
111
|
-
*
|
|
118
|
+
* payload, metadata, version, timestamp) so the fire-time worker can
|
|
119
|
+
* reconstruct it from a single row read. `timestamp` is the EventMessage's
|
|
120
|
+
* authored timestamp (epoch ms) — distinct from `created_at` (when the row
|
|
121
|
+
* was inserted) and `fire_at` (when it should fire). At append-time, the
|
|
122
|
+
* worker MAY overwrite `timestamp` with `now()` so consumers see the actual
|
|
123
|
+
* append time; that is an implementation decision left to the scheduler.
|
|
124
|
+
*
|
|
125
|
+
* Column names mirror the events table (`version`, `timestamp`) so a schedule
|
|
126
|
+
* row and the event it materialises into share the same vocabulary.
|
|
112
127
|
*/
|
|
113
128
|
export function buildScheduledEventsTableDDL(tables: TableNames): string {
|
|
114
129
|
return `CREATE TABLE IF NOT EXISTS ${tables.scheduled} (
|
|
@@ -121,7 +136,7 @@ export function buildScheduledEventsTableDDL(tables: TableNames): string {
|
|
|
121
136
|
payload JSONB NOT NULL,
|
|
122
137
|
metadata JSONB NOT NULL DEFAULT '{}',
|
|
123
138
|
version TEXT NOT NULL,
|
|
124
|
-
|
|
139
|
+
timestamp BIGINT NOT NULL,
|
|
125
140
|
created_at TIMESTAMPTZ NOT NULL DEFAULT now()
|
|
126
141
|
);`
|
|
127
142
|
}
|
|
@@ -159,81 +174,6 @@ export interface BootstrapSchemaOptions {
|
|
|
159
174
|
readonly tableNames?: TableNames
|
|
160
175
|
}
|
|
161
176
|
|
|
162
|
-
/**
|
|
163
|
-
* Append-with-DCB-check stored procedure.
|
|
164
|
-
*
|
|
165
|
-
* Called from `createPostgresEventStore.appendEvents` (Plan 04 Task 3)
|
|
166
|
-
* after advisory-lock acquisition. The SP is the single SQL statement
|
|
167
|
-
* that BOTH performs the conflict check AND inserts the new events —
|
|
168
|
-
* keeping them atomic without round-tripping a separate SELECT.
|
|
169
|
-
*
|
|
170
|
-
* Inputs (positional):
|
|
171
|
-
* $1 marker_position bigint — the AppendCondition.marker.position
|
|
172
|
-
* $2 has_condition boolean — false ⇒ skip the conflict check
|
|
173
|
-
* $3 criteria_where_sql text — Plan 04's criteria-sql builder output
|
|
174
|
-
* $4 criteria_params jsonb — parameter array for criteria_where_sql
|
|
175
|
-
* $5 event_ids uuid[] — N event identifiers (EventMessage.identifier, UUID v7)
|
|
176
|
-
* $6 event_types text[] — N event types (one per event)
|
|
177
|
-
* $7 event_tags text[][] — N tag arrays
|
|
178
|
-
* $8 event_payloads jsonb[] — N JSONB payloads
|
|
179
|
-
* $9 event_metadata jsonb[] — N metadata maps
|
|
180
|
-
*
|
|
181
|
-
* Returns: TABLE(out_position bigint, out_xid xid8) — one row per inserted event.
|
|
182
|
-
* The last row carries the consistency marker.
|
|
183
|
-
*
|
|
184
|
-
* On conflict: RAISE EXCEPTION USING ERRCODE = 'KR001' (D-12.12).
|
|
185
|
-
* On duplicate event_id (UNIQUE violation): Postgres raises SQLSTATE 23505;
|
|
186
|
-
* caller treats as idempotent no-op or surfaces per consumer policy.
|
|
187
|
-
*
|
|
188
|
-
* NOTE: dynamic-SQL is used (EXECUTE) because the criteria WHERE clause is
|
|
189
|
-
* parameter-shaped and varies per call. SQL injection is mitigated by the
|
|
190
|
-
* fact that criteria_where_sql is produced by buildCriteriaWhere — a typed
|
|
191
|
-
* builder that NEVER concatenates user data into the WHERE string (all user
|
|
192
|
-
* data flows through criteria_params as JSONB).
|
|
193
|
-
*/
|
|
194
|
-
export function buildAppendStoredProcedureDDL(tables: TableNames): string {
|
|
195
|
-
return `CREATE OR REPLACE FUNCTION kronos_append_with_check(
|
|
196
|
-
marker_position bigint,
|
|
197
|
-
has_condition boolean,
|
|
198
|
-
criteria_where_sql text,
|
|
199
|
-
criteria_params jsonb,
|
|
200
|
-
event_ids uuid[],
|
|
201
|
-
event_types text[],
|
|
202
|
-
event_tags text[][],
|
|
203
|
-
event_payloads jsonb[],
|
|
204
|
-
event_metadata jsonb[]
|
|
205
|
-
) RETURNS TABLE(out_position bigint, out_xid xid8) AS $$
|
|
206
|
-
DECLARE
|
|
207
|
-
conflict_count bigint;
|
|
208
|
-
i integer;
|
|
209
|
-
BEGIN
|
|
210
|
-
IF has_condition THEN
|
|
211
|
-
EXECUTE format(
|
|
212
|
-
'SELECT count(*) FROM ${tables.events} WHERE sequence_position > $1 AND (%s)',
|
|
213
|
-
criteria_where_sql
|
|
214
|
-
)
|
|
215
|
-
USING marker_position, criteria_params
|
|
216
|
-
INTO conflict_count;
|
|
217
|
-
|
|
218
|
-
IF conflict_count > 0 THEN
|
|
219
|
-
RAISE EXCEPTION 'Append condition violated: % conflicting event(s) after position %',
|
|
220
|
-
conflict_count, marker_position
|
|
221
|
-
USING ERRCODE = 'KR001';
|
|
222
|
-
END IF;
|
|
223
|
-
END IF;
|
|
224
|
-
|
|
225
|
-
FOR i IN 1 .. array_length(event_types, 1) LOOP
|
|
226
|
-
-- event_id UNIQUE constraint surfaces duplicates as SQLSTATE 23505 (D-12.12);
|
|
227
|
-
-- caller (Plan 04 Task 3) maps that to AppendConditionError or idempotent skip.
|
|
228
|
-
INSERT INTO ${tables.events} (event_id, type, tags, payload, metadata)
|
|
229
|
-
VALUES (event_ids[i], event_types[i], event_tags[i:i][1], event_payloads[i], event_metadata[i])
|
|
230
|
-
RETURNING sequence_position, transaction_id INTO out_position, out_xid;
|
|
231
|
-
RETURN NEXT;
|
|
232
|
-
END LOOP;
|
|
233
|
-
END;
|
|
234
|
-
$$ LANGUAGE plpgsql;`
|
|
235
|
-
}
|
|
236
|
-
|
|
237
177
|
/**
|
|
238
178
|
* Idempotently create the event-store schema.
|
|
239
179
|
*
|
|
@@ -244,9 +184,6 @@ $$ LANGUAGE plpgsql;`
|
|
|
244
184
|
* The lock is RELEASED in a finally block — partial-DDL-then-throw must
|
|
245
185
|
* NEVER leak a session lock that would block all subsequent bootstraps
|
|
246
186
|
* on the same connection.
|
|
247
|
-
*
|
|
248
|
-
* The append stored procedure is applied as part of bootstrap so that
|
|
249
|
-
* the SP is always up-to-date with the schema version.
|
|
250
187
|
*/
|
|
251
188
|
export async function bootstrapSchema(
|
|
252
189
|
adapter: SchemaBootstrapAdapter,
|
|
@@ -265,7 +202,6 @@ export async function bootstrapSchema(
|
|
|
265
202
|
await adapter.query(buildSnapshotsTableDDL(tables))
|
|
266
203
|
await adapter.query(buildScheduledEventsTableDDL(tables))
|
|
267
204
|
await adapter.query(buildScheduledEventsIndexesDDL(tables))
|
|
268
|
-
await adapter.query(buildAppendStoredProcedureDDL(tables))
|
|
269
205
|
} finally {
|
|
270
206
|
// Release even on partial-DDL failure. The error (if any) propagates
|
|
271
207
|
// to the caller after the lock has been freed.
|