@proteinjs/db 1.52.0 → 1.54.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.
Files changed (43) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/generated/index.js +1 -1
  3. package/dist/generated/index.js.map +1 -1
  4. package/dist/generated/test/index.js +1 -1
  5. package/dist/generated/test/index.js.map +1 -1
  6. package/dist/index.d.ts +3 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +3 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/src/Db.d.ts +58 -5
  11. package/dist/src/Db.d.ts.map +1 -1
  12. package/dist/src/Db.js +83 -24
  13. package/dist/src/Db.js.map +1 -1
  14. package/dist/src/DuplicateKeyError.d.ts +20 -0
  15. package/dist/src/DuplicateKeyError.d.ts.map +1 -0
  16. package/dist/src/DuplicateKeyError.js +47 -0
  17. package/dist/src/DuplicateKeyError.js.map +1 -0
  18. package/dist/src/TransactionRetryExhaustedError.d.ts +25 -0
  19. package/dist/src/TransactionRetryExhaustedError.d.ts.map +1 -0
  20. package/dist/src/TransactionRetryExhaustedError.js +54 -0
  21. package/dist/src/TransactionRetryExhaustedError.js.map +1 -0
  22. package/dist/src/transaction/TransactionRetryPolicy.d.ts +34 -0
  23. package/dist/src/transaction/TransactionRetryPolicy.d.ts.map +1 -0
  24. package/dist/src/transaction/TransactionRetryPolicy.js +3 -0
  25. package/dist/src/transaction/TransactionRetryPolicy.js.map +1 -0
  26. package/dist/test/DuplicateKeyError.test.d.ts +2 -0
  27. package/dist/test/DuplicateKeyError.test.d.ts.map +1 -0
  28. package/dist/test/DuplicateKeyError.test.js +287 -0
  29. package/dist/test/DuplicateKeyError.test.js.map +1 -0
  30. package/dist/test/TransactionRetryOptions.test.d.ts +2 -0
  31. package/dist/test/TransactionRetryOptions.test.d.ts.map +1 -0
  32. package/dist/test/TransactionRetryOptions.test.js +293 -0
  33. package/dist/test/TransactionRetryOptions.test.js.map +1 -0
  34. package/generated/index.ts +1 -1
  35. package/generated/test/index.ts +1 -1
  36. package/index.ts +3 -0
  37. package/package.json +2 -2
  38. package/src/Db.ts +98 -12
  39. package/src/DuplicateKeyError.ts +26 -0
  40. package/src/TransactionRetryExhaustedError.ts +37 -0
  41. package/src/transaction/TransactionRetryPolicy.ts +31 -0
  42. package/test/DuplicateKeyError.test.ts +179 -0
  43. package/test/TransactionRetryOptions.test.ts +195 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../generated/test/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../generated/test/index.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -2,6 +2,8 @@ export * from './src/Db';
2
2
  export * from './src/DetachedDbOps';
3
3
  export * from './src/Table';
4
4
  export * from './src/RecordAccessError';
5
+ export * from './src/DuplicateKeyError';
6
+ export * from './src/TransactionRetryExhaustedError';
5
7
  export * from './src/auth/TableAuth';
6
8
  export * from './src/auth/TableServiceAuth';
7
9
  export * from './src/Columns';
@@ -22,6 +24,7 @@ export * from './src/TableWatcher';
22
24
  export * from './src/transaction/Transaction';
23
25
  export * from './src/transaction/TransactionRunner';
24
26
  export * from './src/transaction/TransactionContextFactory';
27
+ export * from './src/transaction/TransactionRetryPolicy';
25
28
  export * from './src/schema/SchemaOperations';
26
29
  export * from './src/schema/SchemaMetadata';
27
30
  export * from './src/schema/TableManager';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAG9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,6CAA6C,CAAC;AAE5D,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAE1C,cAAc,oCAAoC,CAAC;AACnD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,mCAAmC,CAAC;AAClD,cAAc,wCAAwC,CAAC;AACvD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,iDAAiD,CAAC;AAEhE,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAE5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uCAAuC,CAAC;AACtD,cAAc,yCAAyC,CAAC;AAExD,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,cAAc,UAAU,CAAC;AACzB,cAAc,qBAAqB,CAAC;AACpC,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sCAAsC,CAAC;AACrD,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,gCAAgC,CAAC;AAC/C,cAAc,oCAAoC,CAAC;AACnD,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAG9C,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,0CAA0C,CAAC;AAEzD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,2BAA2B,CAAC;AAE1C,cAAc,oCAAoC,CAAC;AACnD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,qCAAqC,CAAC;AACpD,cAAc,yCAAyC,CAAC;AACxD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,kCAAkC,CAAC;AACjD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4CAA4C,CAAC;AAC3D,cAAc,gDAAgD,CAAC;AAC/D,cAAc,mCAAmC,CAAC;AAClD,cAAc,wCAAwC,CAAC;AACvD,cAAc,6CAA6C,CAAC;AAC5D,cAAc,4CAA4C,CAAC;AAC3D,cAAc,iDAAiD,CAAC;AAEhE,cAAc,qBAAqB,CAAC;AACpC,cAAc,6BAA6B,CAAC;AAE5C,cAAc,0BAA0B,CAAC;AACzC,cAAc,uCAAuC,CAAC;AACtD,cAAc,yCAAyC,CAAC;AAExD,cAAc,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -19,6 +19,8 @@ __exportStar(require("./src/Db"), exports);
19
19
  __exportStar(require("./src/DetachedDbOps"), exports);
20
20
  __exportStar(require("./src/Table"), exports);
21
21
  __exportStar(require("./src/RecordAccessError"), exports);
22
+ __exportStar(require("./src/DuplicateKeyError"), exports);
23
+ __exportStar(require("./src/TransactionRetryExhaustedError"), exports);
22
24
  __exportStar(require("./src/auth/TableAuth"), exports);
23
25
  __exportStar(require("./src/auth/TableServiceAuth"), exports);
24
26
  __exportStar(require("./src/Columns"), exports);
@@ -42,6 +44,7 @@ __exportStar(require("./src/TableWatcher"), exports);
42
44
  __exportStar(require("./src/transaction/Transaction"), exports);
43
45
  __exportStar(require("./src/transaction/TransactionRunner"), exports);
44
46
  __exportStar(require("./src/transaction/TransactionContextFactory"), exports);
47
+ __exportStar(require("./src/transaction/TransactionRetryPolicy"), exports);
45
48
  __exportStar(require("./src/schema/SchemaOperations"), exports);
46
49
  __exportStar(require("./src/schema/SchemaMetadata"), exports);
47
50
  __exportStar(require("./src/schema/TableManager"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,sDAAoC;AACpC,8CAA4B;AAC5B,0DAAwC;AACxC,uDAAqC;AACrC,8DAA4C;AAC5C,gDAA8B;AAC9B,+CAA6B;AAC7B,iEAA+C;AAC/C,qEAAmD;AACnD,4DAA0C;AAC1C,yDAAuC;AACvC,iEAA+C;AAC/C,uDAAqC;AACrC,0DAAwC;AACxC,4DAA0C;AAC1C,gEAA8C;AAC9C,gGAAgG;AAChG,4EAA4E;AAC5E,8EAA6E;AAApE,gIAAA,sBAAsB,OAAA;AAC/B,wDAAsC;AACtC,4DAA0C;AAC1C,qDAAmC;AACnC,gEAA8C;AAC9C,sEAAoD;AACpD,8EAA4D;AAE5D,gEAA8C;AAC9C,8DAA4C;AAC5C,4DAA0C;AAE1C,qEAAmD;AACnD,6EAA2D;AAC3D,sEAAoD;AACpD,0EAAwD;AACxD,gEAA8C;AAC9C,sEAAoD;AACpD,mEAAiD;AACjD,oEAAkD;AAClD,6EAA2D;AAC3D,iFAA+D;AAC/D,oEAAkD;AAClD,yEAAuD;AACvD,8EAA4D;AAC5D,6EAA2D;AAC3D,kFAAgE;AAEhE,sDAAoC;AACpC,8DAA4C;AAE5C,2DAAyC;AACzC,wEAAsD;AACtD,0EAAwD;AAExD,sDAAoC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,2CAAyB;AACzB,sDAAoC;AACpC,8CAA4B;AAC5B,0DAAwC;AACxC,0DAAwC;AACxC,uEAAqD;AACrD,uDAAqC;AACrC,8DAA4C;AAC5C,gDAA8B;AAC9B,+CAA6B;AAC7B,iEAA+C;AAC/C,qEAAmD;AACnD,4DAA0C;AAC1C,yDAAuC;AACvC,iEAA+C;AAC/C,uDAAqC;AACrC,0DAAwC;AACxC,4DAA0C;AAC1C,gEAA8C;AAC9C,gGAAgG;AAChG,4EAA4E;AAC5E,8EAA6E;AAApE,gIAAA,sBAAsB,OAAA;AAC/B,wDAAsC;AACtC,4DAA0C;AAC1C,qDAAmC;AACnC,gEAA8C;AAC9C,sEAAoD;AACpD,8EAA4D;AAC5D,2EAAyD;AAEzD,gEAA8C;AAC9C,8DAA4C;AAC5C,4DAA0C;AAE1C,qEAAmD;AACnD,6EAA2D;AAC3D,sEAAoD;AACpD,0EAAwD;AACxD,gEAA8C;AAC9C,sEAAoD;AACpD,mEAAiD;AACjD,oEAAkD;AAClD,6EAA2D;AAC3D,iFAA+D;AAC/D,oEAAkD;AAClD,yEAAuD;AACvD,8EAA4D;AAC5D,6EAA2D;AAC3D,kFAAgE;AAEhE,sDAAoC;AACpC,8DAA4C;AAE5C,2DAAyC;AACzC,wEAAsD;AACtD,0EAAwD;AAExD,sDAAoC"}
package/dist/src/Db.d.ts CHANGED
@@ -8,6 +8,7 @@ import { TableManager } from './schema/TableManager';
8
8
  import { DefaultTransactionContextFactory, PostCommitHook } from './transaction/TransactionContextFactory';
9
9
  import { ArrayMembershipUpdate } from './reference/ArrayMembershipOps';
10
10
  import { PreservedPath } from './UpdatePreserving';
11
+ import { TransactionOptions } from './transaction/TransactionRetryPolicy';
11
12
  /** get `Db` if on server, and `DbService` if on browser */
12
13
  export declare const getDb: <R extends Record = Record>() => Db<R>;
13
14
  export declare const getDbAsSystem: <R extends Record = Record>() => Db<R>;
@@ -46,8 +47,20 @@ export interface DbDriver {
46
47
  stop?(): Promise<void>;
47
48
  getTableManager(): TableManager;
48
49
  runQuery(generateStatement: (config: DbDriverQueryStatementConfig) => Statement, transaction?: any): Promise<SerializedRecord[]>;
49
- runDml(generateStatement: (config: DbDriverDmlStatementConfig) => Statement, transaction?: any): Promise<number>;
50
- runTransaction<T>(fn: (transaction: any) => Promise<T>): Promise<T>;
50
+ /**
51
+ * Run one write statement. On `transaction` it rides that transaction; without one it is a
52
+ * transaction of its own, and `options.retry` (`TransactionRetryPolicy`) is how the driver
53
+ * re-runs it when the database aborts it — the driver's own road when omitted, else the bound
54
+ * named, past which the driver throws `TransactionRetryExhaustedError`. A driver that never
55
+ * re-runs an aborted statement (the abort reaches the caller at once) already satisfies every
56
+ * policy.
57
+ */
58
+ runDml(generateStatement: (config: DbDriverDmlStatementConfig) => Statement, transaction?: any, options?: TransactionOptions): Promise<number>;
59
+ /**
60
+ * Run `fn` as one transaction. `options.retry` (`TransactionRetryPolicy`) is how the driver
61
+ * re-runs the whole body when the database aborts the transaction — see `runDml`.
62
+ */
63
+ runTransaction<T>(fn: (transaction: any) => Promise<T>, options?: TransactionOptions): Promise<T>;
51
64
  /**
52
65
  * The driver's per-operation deadline, in milliseconds: the longest one statement it runs may
53
66
  * take before the driver fails it — the bound the driver enforces, as configured. Not a whole
@@ -65,6 +78,13 @@ export interface DbDriver {
65
78
  * and a batch on it is always one statement.
66
79
  */
67
80
  getStatementParameterLimit?(): number;
81
+ /**
82
+ * Whether `error` — what this driver's `runDml` threw — is the backend refusing a row because a
83
+ * row with the same key is already there (the primary key, or a unique index). `Db.insert` and
84
+ * `Db.insertMany` rethrow such a refusal as the typed `DuplicateKeyError`, so a caller can take
85
+ * it by type. A driver that declares no classifier lets the backend's error through as it came.
86
+ */
87
+ isDuplicateKeyError?(error: unknown): boolean;
68
88
  }
69
89
  export declare class Db<R extends Record = Record> implements DbService<R> {
70
90
  private runAsSystem;
@@ -92,7 +112,14 @@ export declare class Db<R extends Record = Record> implements DbService<R> {
92
112
  init(): Promise<void>;
93
113
  tableExists<T extends R>(table: Table<T>): Promise<boolean>;
94
114
  get<T extends R>(table: Table<T>, query: Query<T>, options?: QueryOptions<T>): Promise<T>;
95
- insert<T extends R>(table: Table<T>, record: Omit<T, keyof R>): Promise<T>;
115
+ /**
116
+ * Insert one row. Outside a transaction the insert is a transaction of its own, and
117
+ * `options.retry` names how it is re-run when the database aborts it (`TransactionRetryPolicy`:
118
+ * the driver's own road when omitted; a bounded policy for a best-effort write, past which the
119
+ * caller takes `TransactionRetryExhaustedError`). Inside a transaction the transaction's policy
120
+ * governs, and an insert naming one of its own is refused.
121
+ */
122
+ insert<T extends R>(table: Table<T>, record: Omit<T, keyof R>, options?: TransactionOptions): Promise<T>;
96
123
  /**
97
124
  * Insert `records` as ONE statement (a multi-row INSERT) instead of one statement per row,
98
125
  * each row keeping every contract {@link insert} gives a single one: the table's default field
@@ -112,7 +139,15 @@ export declare class Db<R extends Record = Record> implements DbService<R> {
112
139
  * empty list inserts nothing and returns [].
113
140
  */
114
141
  insertMany<T extends R>(table: Table<T>, records: Omit<T, keyof R>[]): Promise<T[]>;
115
- update<T extends R>(table: Table<T>, record: Partial<T>, query?: Query<T>): Promise<number>;
142
+ /**
143
+ * Update the rows `query` selects (the one row `record.id` names when there is no query).
144
+ * Outside a transaction the update is a transaction of its own, and `options.retry` names how
145
+ * it is re-run when the database aborts it (`TransactionRetryPolicy`: the driver's own road when
146
+ * omitted; a bounded policy for a best-effort write — a live progress row the next step
147
+ * rewrites anyway — past which the caller takes `TransactionRetryExhaustedError`). Inside a
148
+ * transaction the transaction's policy governs, and an update naming one of its own is refused.
149
+ */
150
+ update<T extends R>(table: Table<T>, record: Partial<T>, query?: Query<T>, options?: TransactionOptions): Promise<number>;
116
151
  /**
117
152
  * Apply commutative membership ops (add/remove/move) to a `ReferenceArrayColumn`
118
153
  * read-modify-write against COMMITTED truth, so concurrent membership writers
@@ -219,6 +254,11 @@ export declare class Db<R extends Record = Record> implements DbService<R> {
219
254
  *
220
255
  * Note: Nested transactions are not supported; will throw.
221
256
  *
257
+ * `options.retry` names how the driver re-runs the whole body when the database aborts the
258
+ * transaction (`TransactionRetryPolicy`: the driver's own road when omitted; a bounded policy
259
+ * for best-effort work, past which this throws `TransactionRetryExhaustedError`). Every write
260
+ * inside the body rides this policy; none may name one of its own.
261
+ *
222
262
  * Note: work spawned inside the body but NOT awaited by it escapes the transaction's
223
263
  * lifetime while still holding its context — such work fails loudly on its next db
224
264
  * operation (see TransactionContextData.ended). Await everything inside the body, or run
@@ -237,7 +277,7 @@ export declare class Db<R extends Record = Record> implements DbService<R> {
237
277
  * });
238
278
  * ```
239
279
  */
240
- runTransaction<T>(fn: () => Promise<T>): Promise<T>;
280
+ runTransaction<T>(fn: () => Promise<T>, options?: TransactionOptions): Promise<T>;
241
281
  /**
242
282
  * Run `hook` once the write unit currently executing is durably committed.
243
283
  *
@@ -260,6 +300,12 @@ export declare class Db<R extends Record = Record> implements DbService<R> {
260
300
  * exactly as before.
261
301
  */
262
302
  private encryptionWriteContext;
303
+ /**
304
+ * What an insert statement's failure becomes for the caller: the typed `DuplicateKeyError` when
305
+ * the driver classifies the backend's refusal as a row already there; any other failure as it
306
+ * came.
307
+ */
308
+ private insertFailure;
263
309
  private updateTouchesEncryptedColumns;
264
310
  /**
265
311
  * Update path for payloads touching encrypted columns. Ciphertext is keyed per row OWNER
@@ -295,6 +341,13 @@ export declare class Db<R extends Record = Record> implements DbService<R> {
295
341
  * handing the driver an ended transaction would fail anyway, with a far worse error.
296
342
  */
297
343
  private transactionForDriver;
344
+ /**
345
+ * A write's transaction options as the driver takes them: its own, when the write runs outside
346
+ * any transaction and so is a transaction of its own. Inside a transaction the write rides the
347
+ * transaction, whose policy was named on `runTransaction`; a policy named on the write would be
348
+ * one nothing honours — refused by name, never dropped.
349
+ */
350
+ private ownTransactionOptions;
298
351
  /**
299
352
  * The rows of one multi-row insert split into the fewest statements the driver's statement
300
353
  * parameter bound admits (`insertMany`): each statement binds `columns × rows` parameters,
@@ -1 +1 @@
1
- {"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../src/Db.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../src/Db.ts"],"names":[],"mappings":"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"}
package/dist/src/Db.js CHANGED
@@ -89,6 +89,7 @@ var ReferenceArray_1 = require("./reference/ReferenceArray");
89
89
  var ReferenceCache_1 = require("./reference/ReferenceCache");
90
90
  var ArrayMembershipOps_1 = require("./reference/ArrayMembershipOps");
91
91
  var UpdatePreserving_1 = require("./UpdatePreserving");
92
+ var DuplicateKeyError_1 = require("./DuplicateKeyError");
92
93
  /** get `Db` if on server, and `DbService` if on browser */
93
94
  var getDb = function () {
94
95
  return typeof self === 'undefined' ? new Db() : (0, DbService_1.getDbService)();
@@ -201,9 +202,16 @@ var Db = /** @class */ (function () {
201
202
  });
202
203
  });
203
204
  };
204
- Db.prototype.insert = function (table, record) {
205
+ /**
206
+ * Insert one row. Outside a transaction the insert is a transaction of its own, and
207
+ * `options.retry` names how it is re-run when the database aborts it (`TransactionRetryPolicy`:
208
+ * the driver's own road when omitted; a bounded policy for a best-effort write, past which the
209
+ * caller takes `TransactionRetryExhaustedError`). Inside a transaction the transaction's policy
210
+ * governs, and an insert naming one of its own is refused.
211
+ */
212
+ Db.prototype.insert = function (table, record, options) {
205
213
  return __awaiter(this, void 0, void 0, function () {
206
- var recordCopy, encryptionContext, recordSerializer, serializedRecord, generateInsert, EncryptionTokenMaintenance;
214
+ var driverOptions, recordCopy, encryptionContext, recordSerializer, serializedRecord, generateInsert, error_1, EncryptionTokenMaintenance;
207
215
  var _this = this;
208
216
  return __generator(this, function (_a) {
209
217
  switch (_a.label) {
@@ -211,6 +219,7 @@ var Db = /** @class */ (function () {
211
219
  if (!this.runAsSystem) {
212
220
  this.auth.canInsert(table);
213
221
  }
222
+ driverOptions = this.ownTransactionOptions(options);
214
223
  recordCopy = Object.assign({}, record);
215
224
  return [4 /*yield*/, (0, Table_1.addDefaultFieldValues)(table, recordCopy, this.runAsSystem)];
216
225
  case 1:
@@ -231,22 +240,30 @@ var Db = /** @class */ (function () {
231
240
  generateInsert = function (config) {
232
241
  return new db_query_1.StatementFactory().insert(table.name, serializedRecord, _this.statementConfigFactory.getStatementConfig(config));
233
242
  };
234
- return [4 /*yield*/, this.dbDriver.runDml(generateInsert, this.transactionForDriver())];
243
+ _a.label = 6;
235
244
  case 6:
245
+ _a.trys.push([6, 8, , 9]);
246
+ return [4 /*yield*/, this.dbDriver.runDml(generateInsert, this.transactionForDriver(), driverOptions)];
247
+ case 7:
236
248
  _a.sent();
237
- if (!encryptionContext) return [3 /*break*/, 9];
249
+ return [3 /*break*/, 9];
250
+ case 8:
251
+ error_1 = _a.sent();
252
+ throw this.insertFailure(table, error_1);
253
+ case 9:
254
+ if (!encryptionContext) return [3 /*break*/, 12];
238
255
  return [4 /*yield*/, Promise.resolve().then(function () { return __importStar(require('./encryption/EncryptionTokenMaintenance')); })];
239
- case 7:
256
+ case 10:
240
257
  EncryptionTokenMaintenance = (_a.sent()).EncryptionTokenMaintenance;
241
258
  return [4 /*yield*/, new EncryptionTokenMaintenance().afterInsert(table, recordCopy, encryptionContext.keyOwner, this.newSystemDb())];
242
- case 8:
259
+ case 11:
243
260
  _a.sent();
244
- _a.label = 9;
245
- case 9: return [4 /*yield*/, this.runColumnAfterInsertHooks(table, recordCopy)];
246
- case 10:
261
+ _a.label = 12;
262
+ case 12: return [4 /*yield*/, this.runColumnAfterInsertHooks(table, recordCopy)];
263
+ case 13:
247
264
  _a.sent();
248
265
  return [4 /*yield*/, this.tableWatcherRunner.runAfterInsertTableWatchers(table, recordCopy)];
249
- case 11:
266
+ case 14:
250
267
  _a.sent();
251
268
  return [2 /*return*/, recordCopy];
252
269
  }
@@ -323,17 +340,24 @@ var Db = /** @class */ (function () {
323
340
  return [3 /*break*/, 3];
324
341
  case 10:
325
342
  _loop_1 = function (statementRows) {
326
- var generateInsert;
343
+ var generateInsert, error_2;
327
344
  return __generator(this, function (_f) {
328
345
  switch (_f.label) {
329
346
  case 0:
330
347
  generateInsert = function (config) {
331
348
  return new db_query_1.StatementFactory().insertMany(table.name, statementRows, _this.statementConfigFactory.getStatementConfig(config));
332
349
  };
333
- return [4 /*yield*/, this_1.dbDriver.runDml(generateInsert, this_1.transactionForDriver())];
350
+ _f.label = 1;
334
351
  case 1:
352
+ _f.trys.push([1, 3, , 4]);
353
+ return [4 /*yield*/, this_1.dbDriver.runDml(generateInsert, this_1.transactionForDriver())];
354
+ case 2:
335
355
  _f.sent();
336
- return [2 /*return*/];
356
+ return [3 /*break*/, 4];
357
+ case 3:
358
+ error_2 = _f.sent();
359
+ throw this_1.insertFailure(table, error_2);
360
+ case 4: return [2 /*return*/];
337
361
  }
338
362
  });
339
363
  };
@@ -379,10 +403,18 @@ var Db = /** @class */ (function () {
379
403
  });
380
404
  });
381
405
  };
382
- Db.prototype.update = function (table, record, query) {
406
+ /**
407
+ * Update the rows `query` selects (the one row `record.id` names when there is no query).
408
+ * Outside a transaction the update is a transaction of its own, and `options.retry` names how
409
+ * it is re-run when the database aborts it (`TransactionRetryPolicy`: the driver's own road when
410
+ * omitted; a bounded policy for a best-effort write — a live progress row the next step
411
+ * rewrites anyway — past which the caller takes `TransactionRetryExhaustedError`). Inside a
412
+ * transaction the transaction's policy governs, and an update naming one of its own is refused.
413
+ */
414
+ Db.prototype.update = function (table, record, query, options) {
383
415
  var _a;
384
416
  return __awaiter(this, void 0, void 0, function () {
385
- var recordCopy, columnPropertyName, column, immutable, qb, recordUpdateCount, recordSerializer, serializedRecord_1, generateUpdate, id;
417
+ var driverOptions, recordCopy, columnPropertyName, column, immutable, qb, recordUpdateCount, recordSerializer, serializedRecord_1, generateUpdate, id;
386
418
  var _this = this;
387
419
  return __generator(this, function (_b) {
388
420
  switch (_b.label) {
@@ -393,6 +425,7 @@ var Db = /** @class */ (function () {
393
425
  if (!query && !record.id) {
394
426
  throw new Error("Update must be called with either a Query or a record with an id property");
395
427
  }
428
+ driverOptions = this.ownTransactionOptions(options);
396
429
  recordCopy = Object.assign({}, record);
397
430
  // Immutable columns can never be rewritten through an update — strip them from the payload
398
431
  // (e.g. a ScopedRecord's `scope`: forced on insert; a client-path update rewriting it would
@@ -420,7 +453,7 @@ var Db = /** @class */ (function () {
420
453
  return [4 /*yield*/, this.updateTouchesEncryptedColumns(table, recordCopy)];
421
454
  case 4:
422
455
  if (!_b.sent()) return [3 /*break*/, 6];
423
- return [4 /*yield*/, this.updateEncrypted(table, recordCopy, qb)];
456
+ return [4 /*yield*/, this.updateEncrypted(table, recordCopy, qb, driverOptions)];
424
457
  case 5:
425
458
  recordUpdateCount = _b.sent();
426
459
  return [3 /*break*/, 9];
@@ -433,7 +466,7 @@ var Db = /** @class */ (function () {
433
466
  generateUpdate = function (config) {
434
467
  return new db_query_1.StatementFactory().update(table.name, serializedRecord_1, qb, _this.statementConfigFactory.getStatementConfig(config));
435
468
  };
436
- return [4 /*yield*/, this.dbDriver.runDml(generateUpdate, this.transactionForDriver())];
469
+ return [4 /*yield*/, this.dbDriver.runDml(generateUpdate, this.transactionForDriver(), driverOptions)];
437
470
  case 8:
438
471
  recordUpdateCount = _b.sent();
439
472
  _b.label = 9;
@@ -1273,6 +1306,11 @@ var Db = /** @class */ (function () {
1273
1306
  *
1274
1307
  * Note: Nested transactions are not supported; will throw.
1275
1308
  *
1309
+ * `options.retry` names how the driver re-runs the whole body when the database aborts the
1310
+ * transaction (`TransactionRetryPolicy`: the driver's own road when omitted; a bounded policy
1311
+ * for best-effort work, past which this throws `TransactionRetryExhaustedError`). Every write
1312
+ * inside the body rides this policy; none may name one of its own.
1313
+ *
1276
1314
  * Note: work spawned inside the body but NOT awaited by it escapes the transaction's
1277
1315
  * lifetime while still holding its context — such work fails loudly on its next db
1278
1316
  * operation (see TransactionContextData.ended). Await everything inside the body, or run
@@ -1291,9 +1329,9 @@ var Db = /** @class */ (function () {
1291
1329
  * });
1292
1330
  * ```
1293
1331
  */
1294
- Db.prototype.runTransaction = function (fn) {
1332
+ Db.prototype.runTransaction = function (fn, options) {
1295
1333
  return __awaiter(this, void 0, void 0, function () {
1296
- var postCommitHooks, result, _i, postCommitHooks_1, postCommitHook, error_1;
1334
+ var postCommitHooks, result, _i, postCommitHooks_1, postCommitHook, error_3;
1297
1335
  var _this = this;
1298
1336
  return __generator(this, function (_a) {
1299
1337
  switch (_a.label) {
@@ -1326,7 +1364,7 @@ var Db = /** @class */ (function () {
1326
1364
  case 4: return [2 /*return*/];
1327
1365
  }
1328
1366
  });
1329
- }); })];
1367
+ }); }, options)];
1330
1368
  case 1:
1331
1369
  result = _a.sent();
1332
1370
  _i = 0, postCommitHooks_1 = postCommitHooks;
@@ -1342,8 +1380,8 @@ var Db = /** @class */ (function () {
1342
1380
  _a.sent();
1343
1381
  return [3 /*break*/, 6];
1344
1382
  case 5:
1345
- error_1 = _a.sent();
1346
- this.logger.error({ message: "Post-commit hook failed", error: error_1 });
1383
+ error_3 = _a.sent();
1384
+ this.logger.error({ message: "Post-commit hook failed", error: error_3 });
1347
1385
  return [3 /*break*/, 6];
1348
1386
  case 6:
1349
1387
  _i++;
@@ -1422,6 +1460,15 @@ var Db = /** @class */ (function () {
1422
1460
  });
1423
1461
  });
1424
1462
  };
1463
+ /**
1464
+ * What an insert statement's failure becomes for the caller: the typed `DuplicateKeyError` when
1465
+ * the driver classifies the backend's refusal as a row already there; any other failure as it
1466
+ * came.
1467
+ */
1468
+ Db.prototype.insertFailure = function (table, error) {
1469
+ var _a, _b;
1470
+ return ((_b = (_a = this.dbDriver).isDuplicateKeyError) === null || _b === void 0 ? void 0 : _b.call(_a, error)) ? new DuplicateKeyError_1.DuplicateKeyError(table.name, error) : error;
1471
+ };
1425
1472
  Db.prototype.updateTouchesEncryptedColumns = function (table, record) {
1426
1473
  return __awaiter(this, void 0, void 0, function () {
1427
1474
  var EncryptedColumns, encryptedColumns;
@@ -1444,7 +1491,7 @@ var Db = /** @class */ (function () {
1444
1491
  * same query-then-act shape `delete` uses), grouped by owner, and updated one DML per
1445
1492
  * owner group with that owner's ciphertext, companions, and search tokens.
1446
1493
  */
1447
- Db.prototype.updateEncrypted = function (table, recordCopy, qb) {
1494
+ Db.prototype.updateEncrypted = function (table, recordCopy, qb, options) {
1448
1495
  var _a;
1449
1496
  return __awaiter(this, void 0, void 0, function () {
1450
1497
  var targetRows, EncryptionRecordHooks, EncryptionTokenMaintenance, hooks, idsByOwner, _i, targetRows_1, row, owner, ids, recordUpdateCount, tokenMaintenance, _loop_3, this_2, _b, _c, _d, owner, ids;
@@ -1500,7 +1547,7 @@ var Db = /** @class */ (function () {
1500
1547
  return new db_query_1.StatementFactory().update(table.name, serializedRecord, groupQb, _this.statementConfigFactory.getStatementConfig(config));
1501
1548
  };
1502
1549
  _f = recordUpdateCount;
1503
- return [4 /*yield*/, this_2.dbDriver.runDml(generateUpdate, this_2.transactionForDriver())];
1550
+ return [4 /*yield*/, this_2.dbDriver.runDml(generateUpdate, this_2.transactionForDriver(), options)];
1504
1551
  case 2:
1505
1552
  recordUpdateCount = _f + _g.sent();
1506
1553
  return [4 /*yield*/, tokenMaintenance.afterUpdate(table, ids, recordCopy, owner, this_2.newSystemDb())];
@@ -1579,6 +1626,18 @@ var Db = /** @class */ (function () {
1579
1626
  }
1580
1627
  return context.currentTransaction;
1581
1628
  };
1629
+ /**
1630
+ * A write's transaction options as the driver takes them: its own, when the write runs outside
1631
+ * any transaction and so is a transaction of its own. Inside a transaction the write rides the
1632
+ * transaction, whose policy was named on `runTransaction`; a policy named on the write would be
1633
+ * one nothing honours — refused by name, never dropped.
1634
+ */
1635
+ Db.prototype.ownTransactionOptions = function (options) {
1636
+ if ((options === null || options === void 0 ? void 0 : options.retry) !== undefined && this.transactionContextFactory.getTransactionContext().currentTransaction) {
1637
+ throw new Error("A write inside a transaction cannot name a retry policy of its own: the transaction's policy (runTransaction's options) governs every write in it");
1638
+ }
1639
+ return options;
1640
+ };
1582
1641
  /**
1583
1642
  * The rows of one multi-row insert split into the fewest statements the driver's statement
1584
1643
  * parameter bound admits (`insertMany`): each statement binds `columns × rows` parameters,