@spine-event-engine/storage-mysql 2.0.0-snapshot.13

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.
Files changed (53) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +243 -0
  3. package/REFERENCE.md +140 -0
  4. package/dist/index.d.ts +3 -0
  5. package/dist/index.d.ts.map +1 -0
  6. package/dist/index.js +15 -0
  7. package/dist/index.js.map +1 -0
  8. package/dist/mysql/column-mapping.d.ts +27 -0
  9. package/dist/mysql/column-mapping.d.ts.map +1 -0
  10. package/dist/mysql/column-mapping.js +94 -0
  11. package/dist/mysql/column-mapping.js.map +1 -0
  12. package/dist/mysql/delivery-cleanup.d.ts +37 -0
  13. package/dist/mysql/delivery-cleanup.d.ts.map +1 -0
  14. package/dist/mysql/delivery-cleanup.js +108 -0
  15. package/dist/mysql/delivery-cleanup.js.map +1 -0
  16. package/dist/mysql/entity-commit.d.ts +79 -0
  17. package/dist/mysql/entity-commit.d.ts.map +1 -0
  18. package/dist/mysql/entity-commit.js +123 -0
  19. package/dist/mysql/entity-commit.js.map +1 -0
  20. package/dist/mysql/entity-history.d.ts +123 -0
  21. package/dist/mysql/entity-history.d.ts.map +1 -0
  22. package/dist/mysql/entity-history.js +347 -0
  23. package/dist/mysql/entity-history.js.map +1 -0
  24. package/dist/mysql/errors.d.ts +25 -0
  25. package/dist/mysql/errors.d.ts.map +1 -0
  26. package/dist/mysql/errors.js +44 -0
  27. package/dist/mysql/errors.js.map +1 -0
  28. package/dist/mysql/id-column.d.ts +36 -0
  29. package/dist/mysql/id-column.d.ts.map +1 -0
  30. package/dist/mysql/id-column.js +113 -0
  31. package/dist/mysql/id-column.js.map +1 -0
  32. package/dist/mysql/record-storage.d.ts +379 -0
  33. package/dist/mysql/record-storage.d.ts.map +1 -0
  34. package/dist/mysql/record-storage.js +941 -0
  35. package/dist/mysql/record-storage.js.map +1 -0
  36. package/dist/mysql/storage-factory.d.ts +218 -0
  37. package/dist/mysql/storage-factory.d.ts.map +1 -0
  38. package/dist/mysql/storage-factory.js +477 -0
  39. package/dist/mysql/storage-factory.js.map +1 -0
  40. package/dist/mysql/table-resolver.d.ts +34 -0
  41. package/dist/mysql/table-resolver.d.ts.map +1 -0
  42. package/dist/mysql/table-resolver.js +87 -0
  43. package/dist/mysql/table-resolver.js.map +1 -0
  44. package/dist/mysql/table-spec.d.ts +88 -0
  45. package/dist/mysql/table-spec.d.ts.map +1 -0
  46. package/dist/mysql/table-spec.js +105 -0
  47. package/dist/mysql/table-spec.js.map +1 -0
  48. package/dist/mysql/testing.d.ts +47 -0
  49. package/dist/mysql/testing.d.ts.map +1 -0
  50. package/dist/mysql/testing.js +111 -0
  51. package/dist/mysql/testing.js.map +1 -0
  52. package/dist/tsconfig.tsbuildinfo +1 -0
  53. package/package.json +38 -0
@@ -0,0 +1,379 @@
1
+ import { type Message } from "@bufbuild/protobuf";
2
+ import { StringifierRegistry } from "@spine-event-engine/core";
3
+ import type { NormalizedQueryPlan, RecordEntry, RecordQuery, RecordSpec, StorageQueryCapabilities, StorageContext } from "@spine-event-engine/storage";
4
+ import { RecordStorage } from "@spine-event-engine/storage";
5
+ import type { MysqlResolvedTable, MysqlTableSpec } from "./table-spec.js";
6
+ /**
7
+ * Describes the private connection lifecycle for a record-family handle.
8
+ */
9
+ export interface MysqlRecordLifecycle {
10
+ /**
11
+ * Names the selected physical MySQL database.
12
+ */
13
+ readonly databaseName: string;
14
+ /**
15
+ * Acquires one MySQL connection.
16
+ *
17
+ * @returns Resolves to an acquired connection.
18
+ */
19
+ acquire(): Promise<import("mysql2/promise").PoolConnection>;
20
+ /**
21
+ * Returns one MySQL connection to its pool.
22
+ *
23
+ * @param connection Provides the connection to release.
24
+ */
25
+ release(connection: import("mysql2/promise").PoolConnection): void;
26
+ }
27
+ /**
28
+ * Stores one record family in one physical MySQL table.
29
+ *
30
+ * @typeParam I The record identifier type.
31
+ * @typeParam R The stored Protobuf record type.
32
+ */
33
+ export declare class MysqlRecordStorage<I, R extends Message> extends RecordStorage<I, R> {
34
+ #private;
35
+ private readonly table;
36
+ private readonly lifecycle;
37
+ private readonly onClose;
38
+ private readonly createOperation?;
39
+ /**
40
+ * Declares support for atomic compare-and-set operations.
41
+ */
42
+ readonly atomicCompareAndSet = true;
43
+ /**
44
+ * Returns the physical table name.
45
+ *
46
+ * @returns Returns the physical table name.
47
+ */
48
+ get tableName(): string;
49
+ /**
50
+ * Prepares the table before a coordinator transaction begins.
51
+ *
52
+ * @returns Resolves after table creation and inspection complete.
53
+ */
54
+ prepare(): Promise<void>;
55
+ /**
56
+ * Creates a MySQL record-family storage handle.
57
+ *
58
+ * @param context Provides the storage context.
59
+ * @param recordSpec Describes stored records.
60
+ * @param table Describes the resolved physical table.
61
+ * @param lifecycle Acquires and releases MySQL connections.
62
+ * @param onClose Removes this handle from its provider.
63
+ * @param createOperation Creates optional table-creation SQL.
64
+ * @param tableSpec Supplies the canonical table layout.
65
+ * @param stringifiers The schema-bound message stringifiers.
66
+ */
67
+ constructor(context: StorageContext, recordSpec: RecordSpec<I, R>, table: MysqlResolvedTable, lifecycle: MysqlRecordLifecycle, onClose: () => void, createOperation?: (() => string) | undefined, tableSpec?: MysqlTableSpec<I, R>, stringifiers?: StringifierRegistry);
68
+ private readonly tableSpec;
69
+ /**
70
+ * Closes this record-family storage handle.
71
+ */
72
+ close(): void;
73
+ /**
74
+ * Deletes the record identified by an ID.
75
+ *
76
+ * @param id Identifies the record to delete.
77
+ * @returns Resolves whether a record was deleted.
78
+ */
79
+ delete(id: I): Promise<boolean>;
80
+ /**
81
+ * Reads the record identified by an ID.
82
+ *
83
+ * @param id Identifies the record to read.
84
+ * @param options Configures record reading.
85
+ * @returns Resolves to the stored record when present.
86
+ */
87
+ read(id: I, options?: import("@spine-event-engine/storage").RecordReadOptions): Promise<R | undefined>;
88
+ /**
89
+ * Writes one record.
90
+ *
91
+ * @param record Provides the record to write.
92
+ * @returns Resolves after the record is written.
93
+ */
94
+ write(record: R): Promise<void>;
95
+ /**
96
+ * Writes a sequence of records.
97
+ *
98
+ * @param records Provides the records to write.
99
+ * @returns Resolves after the records are written.
100
+ */
101
+ writeAll(records: Iterable<R>): Promise<void>;
102
+ /**
103
+ * Rejects an oversized storage slot before beginning compare-and-set work.
104
+ *
105
+ * @param id Identifies the storage slot.
106
+ * @param expected Provides the expected stored record.
107
+ * @param next Provides the replacement record.
108
+ * @returns Resolves whether the conditional mutation was applied.
109
+ */
110
+ compareAndSet(id: I, expected: R | undefined, next: R | undefined): Promise<boolean>;
111
+ /**
112
+ * Writes an immutable record when an identical record is absent.
113
+ *
114
+ * @param record Provides the immutable record.
115
+ * @returns Resolves after the record is written or confirmed identical.
116
+ */
117
+ writeImmutable(record: R): Promise<void>;
118
+ /**
119
+ * Checks an immutable record without creating it.
120
+ *
121
+ * @param record Provides the immutable record to check.
122
+ * @returns Resolves when the record is absent or identical.
123
+ */
124
+ assertImmutable(record: R): Promise<void>;
125
+ /**
126
+ * Binds nested storage calls to a coordinator-owned connection.
127
+ *
128
+ * @param connection Provides the coordinator-owned connection.
129
+ * @param work Performs the bound storage work.
130
+ * @typeParam T The bound work's result type.
131
+ * @returns Returns the work result.
132
+ */
133
+ withConnection<T>(connection: import("mysql2/promise").PoolConnection, work: () => Promise<T>): Promise<T>;
134
+ /**
135
+ * Reads one record with the coordinator transaction's row/gap lock.
136
+ *
137
+ * @param id Identifies the record.
138
+ * @returns Resolves to the stored record when present.
139
+ */
140
+ readLocked(id: I): Promise<R | undefined>;
141
+ /**
142
+ * Deletes one stored record.
143
+ *
144
+ * @param id Identifies the record to delete.
145
+ * @returns Resolves whether a record was deleted.
146
+ */
147
+ protected deleteRecord(id: I): Promise<boolean>;
148
+ /**
149
+ * Reads one stored record.
150
+ *
151
+ * @param id Identifies the record to read.
152
+ * @returns Resolves to the stored record when present.
153
+ */
154
+ protected readRecord(id: I): Promise<R | undefined>;
155
+ /**
156
+ * Reads stored record entries matching a query.
157
+ *
158
+ * @param query Specifies the record query.
159
+ * @returns Resolves to matching record entries.
160
+ */
161
+ protected queryRecordEntries(query: RecordQuery<I>): Promise<readonly RecordEntry<I, R>[]>;
162
+ /**
163
+ * Returns the normalized query features genuinely executed by MySQL.
164
+ * @returns The normalized features executed by this provider.
165
+ */
166
+ protected queryCapabilities(): StorageQueryCapabilities;
167
+ /**
168
+ * Executes the complete candidate selection in contained, bound MySQL SQL.
169
+ * @param plan The validated normalized query plan.
170
+ * @returns The selected record entries.
171
+ */
172
+ protected queryPlanRecordEntries(plan: NormalizedQueryPlan<I>): Promise<readonly RecordEntry<I, R>[]>;
173
+ /**
174
+ * Compares and conditionally replaces one stored record.
175
+ *
176
+ * @param id Identifies the record to replace.
177
+ * @param expected Provides the expected current record.
178
+ * @param next Provides the replacement record.
179
+ * @returns Resolves whether the replacement was applied.
180
+ */
181
+ protected compareAndSetRecord(id: I, expected: ReturnType<RecordSpec<I, R>["materialize"]> | undefined, next: ReturnType<RecordSpec<I, R>["materialize"]> | undefined): Promise<boolean>;
182
+ /**
183
+ * Performs one compare-and-set attempt on a single connection.
184
+ *
185
+ * @param id Identifies the record slot.
186
+ * @param expected Provides the expected materialized record.
187
+ * @param next Provides the replacement materialized record.
188
+ * @returns Resolves whether the replacement was applied.
189
+ */
190
+ private compareAndSetOnce;
191
+ /**
192
+ * Acquires the advisory lock for a non-transactional record slot.
193
+ *
194
+ * @param connection Provides the lock connection.
195
+ * @param id Identifies the record slot.
196
+ * @returns Resolves after the lock is acquired.
197
+ */
198
+ private acquireCasLock;
199
+ /**
200
+ * Applies a compare-and-set while the record slot is protected.
201
+ *
202
+ * @param connection Provides the protected connection.
203
+ * @param transactional Tells whether the connection has an active transaction.
204
+ * @param id Identifies the record slot.
205
+ * @param expected Provides the expected materialized record.
206
+ * @param next Provides the replacement materialized record.
207
+ * @returns Resolves whether the replacement was applied.
208
+ */
209
+ private applyCompareAndSet;
210
+ /**
211
+ * Writes materialized records in one transaction.
212
+ *
213
+ * @param records Provides the materialized records.
214
+ * @returns Resolves after the records are written.
215
+ */
216
+ protected writeAllRecords(records: readonly ReturnType<RecordSpec<I, R>["materialize"]>[]): Promise<void>;
217
+ /**
218
+ * Writes one materialized record.
219
+ *
220
+ * @param record Provides the materialized record.
221
+ * @returns Resolves after the record is written.
222
+ */
223
+ protected writeRecord(record: ReturnType<RecordSpec<I, R>["materialize"]>): Promise<void>;
224
+ /**
225
+ * Executes work with the coordinator-bound connection or a temporary connection.
226
+ *
227
+ * @param work Performs the database operation.
228
+ * @typeParam T The database operation result type.
229
+ * @returns Resolves to the operation result.
230
+ */
231
+ private using;
232
+ /**
233
+ * Creates and validates the physical table once for this handle.
234
+ *
235
+ * @param connection Provides the connection used for preparation.
236
+ * @returns Resolves when the table is ready.
237
+ */
238
+ private ready;
239
+ /**
240
+ * Creates the table when absent and verifies its stored schema.
241
+ *
242
+ * @param connection Provides the connection used for schema operations.
243
+ * @returns Resolves after schema verification.
244
+ */
245
+ private createAndInspect;
246
+ /**
247
+ * Verifies one physical column against the canonical table specification.
248
+ *
249
+ * @param expected Describes the required column.
250
+ * @param actual Describes the stored column.
251
+ */
252
+ private assertCompatibleColumn;
253
+ /**
254
+ * Reads one record on the supplied connection.
255
+ *
256
+ * @param connection Provides the connection used for reading.
257
+ * @param id Identifies the record.
258
+ * @param lock Requests a row or gap lock when supported.
259
+ * @returns Resolves to the stored record when present.
260
+ */
261
+ private readOn;
262
+ /**
263
+ * Determines whether the physical table supports transactions.
264
+ *
265
+ * @param connection Provides the connection used for metadata inspection.
266
+ * @returns Resolves whether the table uses InnoDB.
267
+ */
268
+ private isTransactional;
269
+ /**
270
+ * Calculates the fixed-width advisory-lock key for one record slot.
271
+ *
272
+ * @param id Identifies the record slot.
273
+ * @returns The advisory-lock key.
274
+ */
275
+ private casLockKey;
276
+ /**
277
+ * Checks that an immutable slot is absent or stores identical bytes.
278
+ *
279
+ * @param connection Provides the connection used for reading.
280
+ * @param id Identifies the immutable slot.
281
+ * @param record Provides the proposed immutable record.
282
+ * @returns Resolves whether the slot is absent.
283
+ */
284
+ private immutableAbsent;
285
+ /**
286
+ * Writes one record on the supplied connection.
287
+ *
288
+ * @param connection Provides the connection used for writing.
289
+ * @param record Provides the record to store.
290
+ * @returns Resolves after the write.
291
+ */
292
+ private writeOn;
293
+ /**
294
+ * Tries to insert one immutable record without replacing an existing row.
295
+ *
296
+ * @param connection Provides the connection used for writing.
297
+ * @param record Provides the immutable record.
298
+ * @returns Resolves to the insertion result.
299
+ */
300
+ private insertImmutableOn;
301
+ /**
302
+ * Builds parameterized SQL for a legacy record query.
303
+ *
304
+ * @param query Specifies the legacy query.
305
+ * @returns The SQL statement and bound values.
306
+ */
307
+ private querySql;
308
+ /**
309
+ * Builds parameterized SQL for a normalized query plan.
310
+ *
311
+ * @param plan Specifies the normalized query plan.
312
+ * @returns The SQL statement and bound values.
313
+ */
314
+ private planSql;
315
+ /**
316
+ * Builds SQL for one normalized predicate and appends its bound values.
317
+ *
318
+ * @param predicate Specifies the predicate to compile.
319
+ * @param values Receives the predicate's bound values.
320
+ * @returns The predicate SQL.
321
+ */
322
+ private planPredicate;
323
+ /**
324
+ * Returns the SQL spelling of a declared query column.
325
+ *
326
+ * @param column Specifies the column name.
327
+ * @returns The column's SQL spelling.
328
+ */
329
+ private planColumn;
330
+ /**
331
+ * Converts a normalized query value for its declared column type.
332
+ *
333
+ * @param column Specifies the declared column.
334
+ * @param value Provides the query value.
335
+ * @returns The value accepted by the MySQL driver.
336
+ */
337
+ private planValue;
338
+ /**
339
+ * Validates all identifiers and columns in a legacy query.
340
+ *
341
+ * @param query Specifies the query to validate.
342
+ */
343
+ private validateQuery;
344
+ /**
345
+ * Validates that a query column is declared by this storage.
346
+ *
347
+ * @param name Specifies the physical column name.
348
+ */
349
+ private assertColumn;
350
+ /**
351
+ * Converts a record identifier for use by the MySQL driver.
352
+ *
353
+ * @param id Provides the record identifier.
354
+ * @returns The corresponding database value.
355
+ */
356
+ private idKey;
357
+ /**
358
+ * Validates that a record identifier can be stored.
359
+ *
360
+ * @param id Provides the record identifier.
361
+ */
362
+ private validateId;
363
+ /**
364
+ * Decodes a record identifier from a database value.
365
+ *
366
+ * @param key Provides the stored database value.
367
+ * @returns The reconstructed record identifier.
368
+ */
369
+ private decodeId;
370
+ /**
371
+ * Converts a legacy query value for its declared column type.
372
+ *
373
+ * @param name Specifies the physical column name.
374
+ * @param value Provides the query value.
375
+ * @returns The value accepted by the MySQL driver.
376
+ */
377
+ private queryValue;
378
+ }
379
+ //# sourceMappingURL=record-storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"record-storage.d.ts","sourceRoot":"","sources":["../../src/mysql/record-storage.ts"],"names":[],"mappings":"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"}