orez-sync-executor 0.12.1 → 0.12.2
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/core.d.ts +3 -2
- package/dist/core.d.ts.map +1 -1
- package/dist/core.js +3 -2
- package/dist/core.js.map +1 -1
- package/dist/crud.d.ts.map +1 -1
- package/dist/crud.js +19 -4
- package/dist/crud.js.map +1 -1
- package/dist/errors.d.ts +9 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +33 -0
- package/dist/errors.js.map +1 -1
- package/dist/executor.d.ts +5 -1
- package/dist/executor.d.ts.map +1 -1
- package/dist/executor.js +92 -13
- package/dist/executor.js.map +1 -1
- package/dist/packed-ledger.d.ts +16 -0
- package/dist/packed-ledger.d.ts.map +1 -0
- package/dist/packed-ledger.js +251 -0
- package/dist/packed-ledger.js.map +1 -0
- package/dist/types.d.ts +14 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/write-set.d.ts +7 -0
- package/dist/write-set.d.ts.map +1 -0
- package/dist/write-set.js +196 -0
- package/dist/write-set.js.map +1 -0
- package/package.json +1 -1
package/dist/core.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
export { MutationApplicationError, SyncExecutorRequestError } from './errors.js';
|
|
2
|
-
export { createSyncExecutor, handleSyncExecutorPushRequest, registerMutators, } from './executor.js';
|
|
1
|
+
export { MutationApplicationError, MutationRetryError, MutationWriteSetError, SyncExecutorRequestError, } from './errors.js';
|
|
2
|
+
export { createSyncExecutor, handleSyncExecutorPushRequest, isMutationRetryError, registerMutators, } from './executor.js';
|
|
3
3
|
export { reportPushDiagnostics, summarizePushRequest } from './diagnostics.js';
|
|
4
|
+
export { beginWriteSetCapture } from './write-set.js';
|
|
4
5
|
export type { PushDiagnostic, PushDiagnosticsOptions, PushFailureSummary, PushMutationErrorSummary, PushMutationSummary, PushRequestSummary, } from './diagnostics.js';
|
|
5
6
|
export type { ApplicationDatabase, ApplicationTransaction, AuthData, CreateSyncExecutorOptions, DeferredEffect, DeferredEffectOptions, EffectScheduler, ExecResult, JsonPrimitive, JsonValue, MutationContext, MutatorRegistry, NormalizedClaims, PushResult, RegisteredMutator, ServerTransaction, SqlStatementMetadata, SyncExecutor, TransactionQueryFormat, ZeroSchemaConfig, } from './types.js';
|
|
6
7
|
//# sourceMappingURL=core.d.ts.map
|
package/dist/core.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAErD,YAAY,EACV,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,kBAAkB,CAAA;AAEzB,YAAY,EACV,mBAAmB,EACnB,sBAAsB,EACtB,QAAQ,EACR,yBAAyB,EACzB,cAAc,EACd,qBAAqB,EACrB,eAAe,EACf,UAAU,EACV,aAAa,EACb,SAAS,EACT,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,YAAY,CAAA"}
|
package/dist/core.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { MutationApplicationError, SyncExecutorRequestError } from './errors.js';
|
|
2
|
-
export { createSyncExecutor, handleSyncExecutorPushRequest, registerMutators, } from './executor.js';
|
|
1
|
+
export { MutationApplicationError, MutationRetryError, MutationWriteSetError, SyncExecutorRequestError, } from './errors.js';
|
|
2
|
+
export { createSyncExecutor, handleSyncExecutorPushRequest, isMutationRetryError, registerMutators, } from './executor.js';
|
|
3
3
|
export { reportPushDiagnostics, summarizePushRequest } from './diagnostics.js';
|
|
4
|
+
export { beginWriteSetCapture } from './write-set.js';
|
|
4
5
|
//# sourceMappingURL=core.js.map
|
package/dist/core.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,kBAAkB,EAClB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,aAAa,CAAA;AACpB,OAAO,EACL,kBAAkB,EAClB,6BAA6B,EAC7B,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/crud.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../src/crud.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,
|
|
1
|
+
{"version":3,"file":"crud.d.ts","sourceRoot":"","sources":["../src/crud.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EAEtB,SAAS,EACT,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAEnB,KAAK,QAAQ,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAA;AAqC5C,wBAAsB,WAAW,CAC/B,EAAE,EAAE,sBAAsB,EAC1B,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,QAAQ,GAAG,YAAY,EAChC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CAmHf;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAY9D"}
|
package/dist/crud.js
CHANGED
|
@@ -54,14 +54,20 @@ export async function executeCrud(tx, schema, dialect, tableName, kind, input) {
|
|
|
54
54
|
table: physicalTable,
|
|
55
55
|
publicTable: tableName,
|
|
56
56
|
kind,
|
|
57
|
+
capture: 'exact',
|
|
58
|
+
primaryKeys: [],
|
|
57
59
|
};
|
|
60
|
+
const primaryKey = Object.fromEntries(table.primaryKey.map((column) => [column, value[column]]));
|
|
58
61
|
const primaryKeys = table.primaryKey.map((column) => physicalColumn(column));
|
|
59
62
|
const whereParams = table.primaryKey.map((column) => encodeValue(dialect, table.columns[column].type, value[column]));
|
|
60
63
|
if (kind === 'delete') {
|
|
61
64
|
const where = primaryKeys
|
|
62
65
|
.map((column, index) => `${quoteIdentifier(column)} = ${placeholder(dialect, index + 1)}`)
|
|
63
66
|
.join(' AND ');
|
|
64
|
-
await tx.exec(`DELETE FROM ${quotedTable} WHERE ${where}`, whereParams,
|
|
67
|
+
await tx.exec(`DELETE FROM ${quotedTable} WHERE ${where}`, whereParams, {
|
|
68
|
+
...metadata,
|
|
69
|
+
primaryKeys: [{ before: primaryKey }],
|
|
70
|
+
});
|
|
65
71
|
return;
|
|
66
72
|
}
|
|
67
73
|
if (kind === 'update') {
|
|
@@ -75,7 +81,10 @@ export async function executeCrud(tx, schema, dialect, tableName, kind, input) {
|
|
|
75
81
|
const where = primaryKeys
|
|
76
82
|
.map((column, index) => `${quoteIdentifier(column)} = ${placeholder(dialect, mutable.length + index + 1)}`)
|
|
77
83
|
.join(' AND ');
|
|
78
|
-
await tx.exec(`UPDATE ${quotedTable} SET ${set} WHERE ${where}`, [...params, ...whereParams],
|
|
84
|
+
await tx.exec(`UPDATE ${quotedTable} SET ${set} WHERE ${where}`, [...params, ...whereParams], {
|
|
85
|
+
...metadata,
|
|
86
|
+
primaryKeys: [{ before: primaryKey, after: primaryKey }],
|
|
87
|
+
});
|
|
79
88
|
return;
|
|
80
89
|
}
|
|
81
90
|
const columns = entries.map(([column]) => column);
|
|
@@ -87,7 +96,10 @@ export async function executeCrud(tx, schema, dialect, tableName, kind, input) {
|
|
|
87
96
|
.join(', ')})`;
|
|
88
97
|
const conflict = primaryKeys.map(quoteIdentifier).join(', ');
|
|
89
98
|
if (kind === 'insert') {
|
|
90
|
-
await tx.exec(`${insert} ON CONFLICT (${conflict}) DO NOTHING`, params,
|
|
99
|
+
await tx.exec(`${insert} ON CONFLICT (${conflict}) DO NOTHING`, params, {
|
|
100
|
+
...metadata,
|
|
101
|
+
primaryKeys: [{ after: primaryKey }],
|
|
102
|
+
});
|
|
91
103
|
return;
|
|
92
104
|
}
|
|
93
105
|
const mutable = columns.filter((column) => !table.primaryKey.includes(column));
|
|
@@ -99,7 +111,10 @@ export async function executeCrud(tx, schema, dialect, tableName, kind, input) {
|
|
|
99
111
|
return `${physical} = excluded.${physical}`;
|
|
100
112
|
})
|
|
101
113
|
.join(', ')}`;
|
|
102
|
-
await tx.exec(`${insert} ON CONFLICT (${conflict}) ${action}`, params,
|
|
114
|
+
await tx.exec(`${insert} ON CONFLICT (${conflict}) ${action}`, params, {
|
|
115
|
+
...metadata,
|
|
116
|
+
primaryKeys: [{ before: primaryKey, after: primaryKey }],
|
|
117
|
+
});
|
|
103
118
|
}
|
|
104
119
|
export function isJsonValue(value) {
|
|
105
120
|
if (value === null ||
|
package/dist/crud.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"crud.js","sourceRoot":"","sources":["../src/crud.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"crud.js","sourceRoot":"","sources":["../src/crud.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
CHANGED
|
@@ -3,8 +3,17 @@ export declare class MutationApplicationError extends Error {
|
|
|
3
3
|
readonly details: JsonValue | undefined;
|
|
4
4
|
constructor(details?: JsonValue, message?: string);
|
|
5
5
|
}
|
|
6
|
+
export declare class MutationRetryError extends Error {
|
|
7
|
+
readonly status = 429;
|
|
8
|
+
readonly retryAfterMs: number;
|
|
9
|
+
readonly details: JsonValue | undefined;
|
|
10
|
+
constructor(retryAfterMs: number, message?: string, details?: JsonValue);
|
|
11
|
+
}
|
|
6
12
|
export declare class SyncExecutorRequestError extends Error {
|
|
7
13
|
readonly status: 400 | 403;
|
|
8
14
|
constructor(status: 400 | 403, message: string);
|
|
9
15
|
}
|
|
16
|
+
export declare class MutationWriteSetError extends Error {
|
|
17
|
+
constructor(message: string);
|
|
18
|
+
}
|
|
10
19
|
//# sourceMappingURL=errors.d.ts.map
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAK3C,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAAA;gBAE3B,OAAO,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM;CAKlD;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAE/C,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG;gBAAjB,MAAM,EAAE,GAAG,GAAG,GAAG,EAC1B,OAAO,EAAE,MAAM;CAKlB"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAK3C,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAAA;gBAE3B,OAAO,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM;CAKlD;AAeD,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,MAAM,OAAM;IACrB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAAA;gBAE3B,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;CASxE;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IAE/C,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG;gBAAjB,MAAM,EAAE,GAAG,GAAG,GAAG,EAC1B,OAAO,EAAE,MAAM;CAKlB;AAED,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B"}
|
package/dist/errors.js
CHANGED
|
@@ -9,6 +9,33 @@ export class MutationApplicationError extends Error {
|
|
|
9
9
|
this.details = details;
|
|
10
10
|
}
|
|
11
11
|
}
|
|
12
|
+
// a mutation that cannot run right now, as opposed to one that can never
|
|
13
|
+
// succeed. an application error is permanent, so the push acknowledges it and
|
|
14
|
+
// advances the ledger; the client has to move on or it retries that id forever
|
|
15
|
+
// and blocks every later mutation in its group. a retryable rejection is the
|
|
16
|
+
// opposite: it aborts the whole push, writes nothing at all, and leaves the
|
|
17
|
+
// mutation id unconsumed so the client sends the same mutation again after
|
|
18
|
+
// retryAfterMs.
|
|
19
|
+
//
|
|
20
|
+
// the distinction is load-bearing whenever the reason for refusing IS cost. a
|
|
21
|
+
// budget or rate limit that acknowledges "I refuse to write" with a ledger
|
|
22
|
+
// advance and its lmid change row makes the mechanism that exists to stop
|
|
23
|
+
// spending spend on every refusal, and drops the caller's data on the floor
|
|
24
|
+
// while doing it.
|
|
25
|
+
export class MutationRetryError extends Error {
|
|
26
|
+
status = 429;
|
|
27
|
+
retryAfterMs;
|
|
28
|
+
details;
|
|
29
|
+
constructor(retryAfterMs, message, details) {
|
|
30
|
+
super(message ?? 'mutation cannot be applied yet');
|
|
31
|
+
if (!Number.isSafeInteger(retryAfterMs) || retryAfterMs < 0) {
|
|
32
|
+
throw new TypeError('retryAfterMs must be a non-negative safe integer');
|
|
33
|
+
}
|
|
34
|
+
this.name = 'MutationRetryError';
|
|
35
|
+
this.retryAfterMs = retryAfterMs;
|
|
36
|
+
this.details = details;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
12
39
|
export class SyncExecutorRequestError extends Error {
|
|
13
40
|
status;
|
|
14
41
|
constructor(status, message) {
|
|
@@ -17,4 +44,10 @@ export class SyncExecutorRequestError extends Error {
|
|
|
17
44
|
this.name = 'SyncExecutorRequestError';
|
|
18
45
|
}
|
|
19
46
|
}
|
|
47
|
+
export class MutationWriteSetError extends Error {
|
|
48
|
+
constructor(message) {
|
|
49
|
+
super(message);
|
|
50
|
+
this.name = 'MutationWriteSetError';
|
|
51
|
+
}
|
|
52
|
+
}
|
|
20
53
|
//# sourceMappingURL=errors.js.map
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,gFAAgF;AAChF,uDAAuD;AACvD,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,OAAO,CAAuB;IAEvC,YAAY,OAAmB,EAAE,OAAgB;QAC/C,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAA;QAC/E,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAEtC;IADX,YACW,MAAiB,EAC1B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAA;QAHL,WAAM,GAAN,MAAM,CAAW;QAI1B,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;IACxC,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,6EAA6E;AAC7E,gFAAgF;AAChF,uDAAuD;AACvD,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,OAAO,CAAuB;IAEvC,YAAY,OAAmB,EAAE,OAAgB;QAC/C,KAAK,CAAC,OAAO,IAAI,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAA;QAC/E,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;CACF;AAED,yEAAyE;AACzE,8EAA8E;AAC9E,+EAA+E;AAC/E,6EAA6E;AAC7E,4EAA4E;AAC5E,2EAA2E;AAC3E,gBAAgB;AAChB,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,0EAA0E;AAC1E,4EAA4E;AAC5E,kBAAkB;AAClB,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,MAAM,GAAG,GAAG,CAAA;IACZ,YAAY,CAAQ;IACpB,OAAO,CAAuB;IAEvC,YAAY,YAAoB,EAAE,OAAgB,EAAE,OAAmB;QACrE,KAAK,CAAC,OAAO,IAAI,gCAAgC,CAAC,CAAA;QAClD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YAC5D,MAAM,IAAI,SAAS,CAAC,kDAAkD,CAAC,CAAA;QACzE,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAA;QAChC,IAAI,CAAC,YAAY,GAAG,YAAY,CAAA;QAChC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;IACxB,CAAC;CACF;AAED,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IAEtC;IADX,YACW,MAAiB,EAC1B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAA;QAHL,WAAM,GAAN,MAAM,CAAW;QAI1B,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;IACxC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAA;IACrC,CAAC;CACF"}
|
package/dist/executor.d.ts
CHANGED
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { type PushDiagnosticsOptions } from './diagnostics.js';
|
|
2
|
-
import type { AuthData, CreateSyncExecutorOptions, MutatorRegistry, SyncExecutor } from './types.js';
|
|
2
|
+
import type { AuthData, CreateSyncExecutorOptions, JsonValue, MutatorRegistry, SyncExecutor } from './types.js';
|
|
3
3
|
import type { Schema } from '@rocicorp/zero';
|
|
4
|
+
export declare function isMutationRetryError(error: unknown): error is Error & {
|
|
5
|
+
readonly retryAfterMs: number;
|
|
6
|
+
readonly details: JsonValue | undefined;
|
|
7
|
+
};
|
|
4
8
|
export declare function registerMutators<S extends Schema, const Registry extends Record<string, MutatorRegistry<S>[string]>>(registry: Registry): Readonly<Registry>;
|
|
5
9
|
export declare function createSyncExecutor<S extends Schema>(options: CreateSyncExecutorOptions<S>): SyncExecutor<S>;
|
|
6
10
|
export declare function handleSyncExecutorPushRequest<S extends Schema>(options: {
|
package/dist/executor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,sBAAsB,EAAE,MAAM,kBAAkB,CAAA;AAerF,OAAO,KAAK,EAGV,QAAQ,EACR,yBAAyB,EACzB,SAAS,EACT,eAAe,EAIf,YAAY,EACb,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AA+C5C,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,KAAK,GAAG;IACrE,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAAA;CACxC,CASA;AAwOD,wBAAgB,gBAAgB,CAC9B,CAAC,SAAS,MAAM,EAChB,KAAK,CAAC,QAAQ,SAAS,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EACjE,QAAQ,EAAE,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAExC;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,MAAM,EACjD,OAAO,EAAE,yBAAyB,CAAC,CAAC,CAAC,GACpC,YAAY,CAAC,CAAC,CAAC,CA8OjB;AAED,wBAAsB,6BAA6B,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,EAAE;IAC7E,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;IAClC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,sBAAsB,CAAA;CAC9C,GAAG,OAAO,CAAC,QAAQ,CAAC,CA2CpB"}
|
package/dist/executor.js
CHANGED
|
@@ -2,7 +2,9 @@ import { isJsonValue } from './crud.js';
|
|
|
2
2
|
import { reportPushDiagnostics } from './diagnostics.js';
|
|
3
3
|
import { createEffectAttempt, runCommittedEffects, } from './effects.js';
|
|
4
4
|
import { MutationApplicationError, SyncExecutorRequestError } from './errors.js';
|
|
5
|
+
import { commitPackedLedger, initializePackedLedger, readPackedLMID, } from './packed-ledger.js';
|
|
5
6
|
import { createServerTransaction } from './transaction.js';
|
|
7
|
+
import { beginWriteSetCapture } from './write-set.js';
|
|
6
8
|
const CLEANUP_RESULTS_MUTATION_NAME = '_zero_cleanupResults';
|
|
7
9
|
function isRecord(value) {
|
|
8
10
|
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
@@ -16,6 +18,19 @@ function isMutationApplicationError(error) {
|
|
|
16
18
|
typeof error.message === 'string' &&
|
|
17
19
|
(error.details === undefined || isJsonValue(error.details)));
|
|
18
20
|
}
|
|
21
|
+
function isMutationWriteSetError(error) {
|
|
22
|
+
return isRecord(error) && error.name === 'MutationWriteSetError';
|
|
23
|
+
}
|
|
24
|
+
// exported because the durable-object host answers the same rejection over
|
|
25
|
+
// HTTP and must not duck-type it a second time.
|
|
26
|
+
export function isMutationRetryError(error) {
|
|
27
|
+
return (isRecord(error) &&
|
|
28
|
+
error.name === 'MutationRetryError' &&
|
|
29
|
+
typeof error.message === 'string' &&
|
|
30
|
+
Number.isSafeInteger(error.retryAfterMs) &&
|
|
31
|
+
Number(error.retryAfterMs) >= 0 &&
|
|
32
|
+
(error.details === undefined || isJsonValue(error.details)));
|
|
33
|
+
}
|
|
19
34
|
function validatePushBody(value) {
|
|
20
35
|
if (!isRecord(value) ||
|
|
21
36
|
typeof value.clientGroupID !== 'string' ||
|
|
@@ -53,7 +68,16 @@ function validatePushBody(value) {
|
|
|
53
68
|
// advances. rethrowing instead would make the client retry that id forever and
|
|
54
69
|
// block every later mutation in its group. ledger and database failures raised
|
|
55
70
|
// outside the mutator stay fatal.
|
|
71
|
+
//
|
|
72
|
+
// a MutationRetryError is the deliberate exception: the mutator is saying the
|
|
73
|
+
// mutation is fine but cannot run yet. wrapping that as permanent would both
|
|
74
|
+
// drop the caller's data and, since the acknowledgement is itself a write,
|
|
75
|
+
// charge for every refusal. it travels out of the push untouched instead.
|
|
56
76
|
function toApplicationError(error) {
|
|
77
|
+
if (isMutationRetryError(error))
|
|
78
|
+
return error;
|
|
79
|
+
if (isMutationWriteSetError(error))
|
|
80
|
+
return error;
|
|
57
81
|
if (isMutationApplicationError(error))
|
|
58
82
|
return error;
|
|
59
83
|
if (error instanceof SyncExecutorRequestError)
|
|
@@ -131,6 +155,7 @@ async function initializeLedger(database) {
|
|
|
131
155
|
)`);
|
|
132
156
|
}
|
|
133
157
|
});
|
|
158
|
+
await initializePackedLedger(database);
|
|
134
159
|
}
|
|
135
160
|
async function preflight(database, tx, clientGroupID, clientID, mutationID, userID) {
|
|
136
161
|
const clients = internalTable(database, '_zsync_clients');
|
|
@@ -168,7 +193,9 @@ async function preflight(database, tx, clientGroupID, clientID, mutationID, user
|
|
|
168
193
|
WHERE "clientGroupID" = ${group} AND "clientID" = ${client}${lock}`, [clientGroupID, clientID]);
|
|
169
194
|
if (!rows[0])
|
|
170
195
|
throw new Error('failed to claim sync client');
|
|
171
|
-
const lmid =
|
|
196
|
+
const lmid = database.dialect === 'sqlite'
|
|
197
|
+
? await readPackedLMID(tx, clientGroupID, clientID)
|
|
198
|
+
: counter(rows[0].lastMutationID, 'lastMutationID');
|
|
172
199
|
if (mutationID <= lmid)
|
|
173
200
|
return { kind: 'replay', expected: lmid + 1 };
|
|
174
201
|
if (mutationID > lmid + 1) {
|
|
@@ -196,11 +223,14 @@ export function createSyncExecutor(options) {
|
|
|
196
223
|
const { database, effects, mutators, schema } = options;
|
|
197
224
|
let ledgerInitialization;
|
|
198
225
|
const ensureLedger = () => (ledgerInitialization ??= initializeLedger(database));
|
|
226
|
+
const beginApplicationWrite = (applicationTx) => beginWriteSetCapture(schema, applicationTx, database.dialect);
|
|
199
227
|
async function runMutation(mutator, args, claims, identity) {
|
|
228
|
+
await ensureLedger();
|
|
200
229
|
let committedEffects = [];
|
|
201
230
|
await database.transaction(async (applicationTx) => {
|
|
231
|
+
const writeSet = await beginApplicationWrite(applicationTx);
|
|
202
232
|
const attempt = createEffectAttempt();
|
|
203
|
-
const tx = createServerTransaction(schema,
|
|
233
|
+
const tx = createServerTransaction(schema, writeSet.transaction, database.dialect, identity?.clientID, identity?.mutationID);
|
|
204
234
|
const ctx = identity
|
|
205
235
|
? {
|
|
206
236
|
source: 'zero-push',
|
|
@@ -215,6 +245,7 @@ export function createSyncExecutor(options) {
|
|
|
215
245
|
};
|
|
216
246
|
try {
|
|
217
247
|
await mutator({ tx, args, ctx });
|
|
248
|
+
await writeSet.commit();
|
|
218
249
|
attempt.close();
|
|
219
250
|
committedEffects = attempt.entries();
|
|
220
251
|
}
|
|
@@ -250,8 +281,9 @@ export function createSyncExecutor(options) {
|
|
|
250
281
|
const current = await preflight(database, applicationTx, push.clientGroupID, mutation.clientID, mutation.id, claims.userID);
|
|
251
282
|
if (current.kind === 'replay')
|
|
252
283
|
return current;
|
|
284
|
+
const writeSet = await beginApplicationWrite(applicationTx);
|
|
253
285
|
const attempt = createEffectAttempt();
|
|
254
|
-
const tx = createServerTransaction(schema,
|
|
286
|
+
const tx = createServerTransaction(schema, writeSet.transaction, database.dialect, mutation.clientID, mutation.id);
|
|
255
287
|
try {
|
|
256
288
|
try {
|
|
257
289
|
// resolved in here so an unknown name is an application error
|
|
@@ -276,7 +308,14 @@ export function createSyncExecutor(options) {
|
|
|
276
308
|
catch (error) {
|
|
277
309
|
throw toApplicationError(error);
|
|
278
310
|
}
|
|
279
|
-
await
|
|
311
|
+
await writeSet.commit({
|
|
312
|
+
clientGroupID: push.clientGroupID,
|
|
313
|
+
clientID: mutation.clientID,
|
|
314
|
+
mutationID: mutation.id,
|
|
315
|
+
});
|
|
316
|
+
if (database.dialect !== 'sqlite') {
|
|
317
|
+
await advanceLMID(database, applicationTx, push.clientGroupID, mutation.clientID, mutation.id);
|
|
318
|
+
}
|
|
280
319
|
attempt.close();
|
|
281
320
|
committedEffects = attempt.entries();
|
|
282
321
|
return current;
|
|
@@ -305,7 +344,16 @@ export function createSyncExecutor(options) {
|
|
|
305
344
|
await database.transaction(async (applicationTx) => {
|
|
306
345
|
const decision = await preflight(database, applicationTx, push.clientGroupID, mutation.clientID, mutation.id, claims.userID);
|
|
307
346
|
if (decision.kind === 'applied') {
|
|
308
|
-
|
|
347
|
+
if (database.dialect === 'sqlite') {
|
|
348
|
+
await commitPackedLedger(applicationTx, [], {
|
|
349
|
+
clientGroupID: push.clientGroupID,
|
|
350
|
+
clientID: mutation.clientID,
|
|
351
|
+
mutationID: mutation.id,
|
|
352
|
+
});
|
|
353
|
+
}
|
|
354
|
+
else {
|
|
355
|
+
await advanceLMID(database, applicationTx, push.clientGroupID, mutation.clientID, mutation.id);
|
|
356
|
+
}
|
|
309
357
|
}
|
|
310
358
|
});
|
|
311
359
|
results.push({
|
|
@@ -329,11 +377,23 @@ export function createSyncExecutor(options) {
|
|
|
329
377
|
},
|
|
330
378
|
async transaction(claims, work) {
|
|
331
379
|
validateClaims(claims);
|
|
332
|
-
|
|
380
|
+
await ensureLedger();
|
|
381
|
+
return database.transaction(async (applicationTx) => {
|
|
382
|
+
const writeSet = await beginApplicationWrite(applicationTx);
|
|
383
|
+
const value = await work(createServerTransaction(schema, writeSet.transaction, database.dialect));
|
|
384
|
+
await writeSet.commit();
|
|
385
|
+
return value;
|
|
386
|
+
});
|
|
333
387
|
},
|
|
334
388
|
async query(claims, work) {
|
|
335
389
|
validateClaims(claims);
|
|
336
|
-
|
|
390
|
+
await ensureLedger();
|
|
391
|
+
return database.transaction(async (applicationTx) => {
|
|
392
|
+
const writeSet = await beginApplicationWrite(applicationTx);
|
|
393
|
+
const value = await work(createServerTransaction(schema, writeSet.transaction, database.dialect));
|
|
394
|
+
await writeSet.commit();
|
|
395
|
+
return value;
|
|
396
|
+
});
|
|
337
397
|
},
|
|
338
398
|
};
|
|
339
399
|
}
|
|
@@ -358,18 +418,37 @@ export async function handleSyncExecutorPushRequest(options) {
|
|
|
358
418
|
return Response.json(result.pushResponse);
|
|
359
419
|
}
|
|
360
420
|
catch (error) {
|
|
361
|
-
const status = error
|
|
362
|
-
? error.status
|
|
363
|
-
: error instanceof SyntaxError
|
|
364
|
-
? 400
|
|
365
|
-
: 500;
|
|
421
|
+
const status = pushErrorStatus(error);
|
|
366
422
|
await reportPushDiagnostics(options.diagnostics, {
|
|
367
423
|
request: options.request,
|
|
368
424
|
bodyText,
|
|
369
425
|
error,
|
|
370
426
|
status,
|
|
371
427
|
});
|
|
372
|
-
|
|
428
|
+
const body = {
|
|
429
|
+
error: error instanceof Error ? error.message : String(error),
|
|
430
|
+
};
|
|
431
|
+
const headers = {};
|
|
432
|
+
if (isMutationRetryError(error)) {
|
|
433
|
+
if (error.details !== undefined)
|
|
434
|
+
body.details = error.details;
|
|
435
|
+
body.retryAfterMs = error.retryAfterMs;
|
|
436
|
+
// Retry-After is whole seconds on the wire, and rounding down would tell
|
|
437
|
+
// a caller to come back while the window it must wait out is still open.
|
|
438
|
+
headers['retry-after'] = String(Math.ceil(error.retryAfterMs / 1000));
|
|
439
|
+
}
|
|
440
|
+
return Response.json(body, { status, headers });
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
// every rejection class here carries the status it means, so reading the field
|
|
444
|
+
// covers all of them at once and keeps working for a class built by another
|
|
445
|
+
// copy of this package, the way the name checks above do.
|
|
446
|
+
function pushErrorStatus(error) {
|
|
447
|
+
if (isRecord(error)) {
|
|
448
|
+
const status = Number(error.status);
|
|
449
|
+
if (Number.isInteger(status) && status >= 400 && status <= 599)
|
|
450
|
+
return status;
|
|
373
451
|
}
|
|
452
|
+
return error instanceof SyntaxError ? 400 : 500;
|
|
374
453
|
}
|
|
375
454
|
//# sourceMappingURL=executor.js.map
|
package/dist/executor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../src/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ApplicationDatabase, ApplicationTransaction, JsonPrimitive } from './types.js';
|
|
2
|
+
export type PackedLedgerKey = {
|
|
3
|
+
readonly table: string;
|
|
4
|
+
readonly key: Readonly<Record<string, JsonPrimitive>>;
|
|
5
|
+
};
|
|
6
|
+
export type PackedLedgerIdentity = {
|
|
7
|
+
readonly clientGroupID: string;
|
|
8
|
+
readonly clientID: string;
|
|
9
|
+
readonly mutationID: number;
|
|
10
|
+
};
|
|
11
|
+
export declare function initializePackedLedger(database: ApplicationDatabase): Promise<void>;
|
|
12
|
+
export declare function preparePackedLedger(tx: ApplicationTransaction): Promise<number>;
|
|
13
|
+
export declare function setPackedCaptureMode(tx: ApplicationTransaction, exact: boolean): Promise<void>;
|
|
14
|
+
export declare function commitPackedLedger(tx: ApplicationTransaction, exactKeys: readonly PackedLedgerKey[], identity?: PackedLedgerIdentity, rawCaptureStart?: number): Promise<void>;
|
|
15
|
+
export declare function readPackedLMID(tx: ApplicationTransaction, clientGroupID: string, clientID: string): Promise<number>;
|
|
16
|
+
//# sourceMappingURL=packed-ledger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packed-ledger.d.ts","sourceRoot":"","sources":["../src/packed-ledger.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,sBAAsB,EACtB,aAAa,EACd,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAA;CACtD,CAAA;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B,CAAA;AAgID,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,mBAAmB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAwDf;AAED,wBAAsB,mBAAmB,CAAC,EAAE,EAAE,sBAAsB,GAAG,OAAO,CAAC,MAAM,CAAC,CAUrF;AAED,wBAAsB,oBAAoB,CACxC,EAAE,EAAE,sBAAsB,EAC1B,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,IAAI,CAAC,CASf;AA0CD,wBAAsB,kBAAkB,CACtC,EAAE,EAAE,sBAAsB,EAC1B,SAAS,EAAE,SAAS,eAAe,EAAE,EACrC,QAAQ,CAAC,EAAE,oBAAoB,EAC/B,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,IAAI,CAAC,CAqFf;AAED,wBAAsB,cAAc,CAClC,EAAE,EAAE,sBAAsB,EAC1B,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,MAAM,CAAC,CAIjB"}
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { MutationWriteSetError } from './errors.js';
|
|
2
|
+
const ROTATE_AT_BYTES = 768 * 1_024;
|
|
3
|
+
const MAX_PAYLOAD_BYTES = 1_024 * 1_024;
|
|
4
|
+
function counter(value, name) {
|
|
5
|
+
const parsed = Number(value);
|
|
6
|
+
if (!Number.isSafeInteger(parsed) || parsed < 0) {
|
|
7
|
+
throw new MutationWriteSetError(`packed ledger ${name} is unsafe: ${String(value)}`);
|
|
8
|
+
}
|
|
9
|
+
return parsed;
|
|
10
|
+
}
|
|
11
|
+
function parsePayload(value) {
|
|
12
|
+
if (typeof value !== 'string') {
|
|
13
|
+
throw new MutationWriteSetError('packed ledger payload is not text');
|
|
14
|
+
}
|
|
15
|
+
let parsed;
|
|
16
|
+
try {
|
|
17
|
+
parsed = JSON.parse(value);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
throw new MutationWriteSetError('packed ledger payload is invalid JSON');
|
|
21
|
+
}
|
|
22
|
+
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
|
|
23
|
+
throw new MutationWriteSetError('packed ledger payload is not an object');
|
|
24
|
+
}
|
|
25
|
+
const payload = parsed;
|
|
26
|
+
if (payload.format !== 1 ||
|
|
27
|
+
!payload.lmids ||
|
|
28
|
+
typeof payload.lmids !== 'object' ||
|
|
29
|
+
Array.isArray(payload.lmids) ||
|
|
30
|
+
!Array.isArray(payload.transactions)) {
|
|
31
|
+
throw new MutationWriteSetError('packed ledger payload has an unknown shape');
|
|
32
|
+
}
|
|
33
|
+
return payload;
|
|
34
|
+
}
|
|
35
|
+
function activeSegment(rows) {
|
|
36
|
+
if (rows.length !== 1) {
|
|
37
|
+
throw new MutationWriteSetError('packed ledger has no active segment');
|
|
38
|
+
}
|
|
39
|
+
return rows[0];
|
|
40
|
+
}
|
|
41
|
+
async function readActiveSegment(tx) {
|
|
42
|
+
return activeSegment(await tx.query(`SELECT "startVersion" AS "startVersion", "endVersion" AS "endVersion",
|
|
43
|
+
"payload" AS "payload", "pending" AS "pending",
|
|
44
|
+
"captureMode" AS "captureMode"
|
|
45
|
+
FROM "_zsync_log_segments" ORDER BY "startVersion" DESC LIMIT 1`));
|
|
46
|
+
}
|
|
47
|
+
function emptyPayload(lmids) {
|
|
48
|
+
return { format: 1, lmids, transactions: [] };
|
|
49
|
+
}
|
|
50
|
+
async function rotatePackedLedger(tx, active, payload) {
|
|
51
|
+
const start = counter(active.startVersion, 'start version');
|
|
52
|
+
const end = counter(active.endVersion, 'end version');
|
|
53
|
+
const mode = counter(active.captureMode, 'capture mode');
|
|
54
|
+
if (mode !== 0 && mode !== 1) {
|
|
55
|
+
throw new MutationWriteSetError('packed ledger capture mode is invalid');
|
|
56
|
+
}
|
|
57
|
+
if (end + 1 < start) {
|
|
58
|
+
throw new MutationWriteSetError('packed ledger segment bounds are invalid');
|
|
59
|
+
}
|
|
60
|
+
if (active.pending !== '[]') {
|
|
61
|
+
throw new MutationWriteSetError('packed ledger cannot rotate with pending trigger keys');
|
|
62
|
+
}
|
|
63
|
+
if (end === Number.MAX_SAFE_INTEGER) {
|
|
64
|
+
throw new MutationWriteSetError('packed ledger version space is exhausted');
|
|
65
|
+
}
|
|
66
|
+
if (mode !== 0) {
|
|
67
|
+
const reset = await tx.exec(`UPDATE "_zsync_log_segments" SET "captureMode" = 0
|
|
68
|
+
WHERE "startVersion" = ? AND "captureMode" = ?`, [start, mode]);
|
|
69
|
+
if (reset.changes !== 1) {
|
|
70
|
+
throw new MutationWriteSetError('packed ledger rotation missed its old segment');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const inserted = await tx.exec(`INSERT INTO "_zsync_log_segments"
|
|
74
|
+
("startVersion", "endVersion", "payload", "pending", "captureMode")
|
|
75
|
+
VALUES (?, ?, ?, '[]', ?)`, [end + 1, end, JSON.stringify(emptyPayload(payload.lmids)), mode]);
|
|
76
|
+
if (inserted.changes !== 1) {
|
|
77
|
+
throw new MutationWriteSetError('packed ledger rotation did not create a segment');
|
|
78
|
+
}
|
|
79
|
+
return readActiveSegment(tx);
|
|
80
|
+
}
|
|
81
|
+
export async function initializePackedLedger(database) {
|
|
82
|
+
if (database.dialect !== 'sqlite')
|
|
83
|
+
return;
|
|
84
|
+
await database.transaction(async (tx) => {
|
|
85
|
+
await tx.exec(`CREATE TABLE IF NOT EXISTS "_zsync_log_segments" (
|
|
86
|
+
"startVersion" INTEGER PRIMARY KEY,
|
|
87
|
+
"endVersion" INTEGER NOT NULL,
|
|
88
|
+
"payload" TEXT NOT NULL,
|
|
89
|
+
"pending" TEXT NOT NULL,
|
|
90
|
+
"captureMode" INTEGER NOT NULL CHECK ("captureMode" IN (0, 1))
|
|
91
|
+
) WITHOUT ROWID`);
|
|
92
|
+
const existing = await tx.query('SELECT COUNT(*) AS "count" FROM "_zsync_log_segments"');
|
|
93
|
+
if (counter(existing[0]?.count ?? 0, 'segment count') > 0)
|
|
94
|
+
return;
|
|
95
|
+
const legacy = await tx.query('SELECT COALESCE(MAX("watermark"), 0) AS "watermark" FROM "_zsync_changes"');
|
|
96
|
+
let head = counter(legacy[0]?.watermark ?? 0, 'legacy watermark');
|
|
97
|
+
const watermarkTable = await tx.query(`SELECT name FROM sqlite_schema WHERE type = 'table' AND name = '_zsync_watermark'`);
|
|
98
|
+
if (watermarkTable.length > 0) {
|
|
99
|
+
const durable = await tx.query('SELECT "high" AS "high" FROM "_zsync_watermark" WHERE "lock" = 1');
|
|
100
|
+
head = Math.max(head, counter(durable[0]?.high ?? 0, 'durable watermark'));
|
|
101
|
+
}
|
|
102
|
+
const clients = await tx.query(`SELECT "clientGroupID" AS "clientGroupID", "clientID" AS "clientID",
|
|
103
|
+
"lastMutationID" AS "lastMutationID" FROM "_zsync_clients"`);
|
|
104
|
+
const lmids = {};
|
|
105
|
+
for (const client of clients) {
|
|
106
|
+
if (typeof client.clientGroupID !== 'string' ||
|
|
107
|
+
typeof client.clientID !== 'string') {
|
|
108
|
+
throw new MutationWriteSetError('packed ledger client identity is invalid');
|
|
109
|
+
}
|
|
110
|
+
const group = (lmids[client.clientGroupID] ??= {});
|
|
111
|
+
group[client.clientID] = String(counter(client.lastMutationID, 'legacy last mutation id'));
|
|
112
|
+
}
|
|
113
|
+
await tx.exec(`INSERT INTO "_zsync_log_segments"
|
|
114
|
+
("startVersion", "endVersion", "payload", "pending", "captureMode")
|
|
115
|
+
VALUES (?, ?, ?, '[]', 0)`, [head + 1, head, JSON.stringify(emptyPayload(lmids))]);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
export async function preparePackedLedger(tx) {
|
|
119
|
+
let active = await readActiveSegment(tx);
|
|
120
|
+
if (counter(active.captureMode, 'capture mode') !== 0 || active.pending !== '[]') {
|
|
121
|
+
throw new MutationWriteSetError('packed ledger has uncommitted capture state');
|
|
122
|
+
}
|
|
123
|
+
const payload = parsePayload(active.payload);
|
|
124
|
+
if (new TextEncoder().encode(active.payload).byteLength >= ROTATE_AT_BYTES) {
|
|
125
|
+
active = await rotatePackedLedger(tx, active, payload);
|
|
126
|
+
}
|
|
127
|
+
return counter(active.endVersion, 'end version');
|
|
128
|
+
}
|
|
129
|
+
export async function setPackedCaptureMode(tx, exact) {
|
|
130
|
+
const result = await tx.exec(`UPDATE "_zsync_log_segments" SET "captureMode" = ?
|
|
131
|
+
WHERE "startVersion" = (SELECT MAX("startVersion") FROM "_zsync_log_segments")`, [exact ? 1 : 0]);
|
|
132
|
+
if (result.changes !== 1) {
|
|
133
|
+
throw new MutationWriteSetError('packed ledger capture mode update missed its row');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
function parsePending(value) {
|
|
137
|
+
if (typeof value !== 'string') {
|
|
138
|
+
throw new MutationWriteSetError('packed ledger pending keys are not text');
|
|
139
|
+
}
|
|
140
|
+
let parsed;
|
|
141
|
+
try {
|
|
142
|
+
parsed = JSON.parse(value);
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
throw new MutationWriteSetError('packed ledger pending keys are invalid JSON');
|
|
146
|
+
}
|
|
147
|
+
if (!Array.isArray(parsed)) {
|
|
148
|
+
throw new MutationWriteSetError('packed ledger pending keys are not an array');
|
|
149
|
+
}
|
|
150
|
+
return parsed.map((entry) => {
|
|
151
|
+
if (!Array.isArray(entry) ||
|
|
152
|
+
entry.length !== 2 ||
|
|
153
|
+
typeof entry[0] !== 'string' ||
|
|
154
|
+
!entry[1] ||
|
|
155
|
+
typeof entry[1] !== 'object' ||
|
|
156
|
+
Array.isArray(entry[1])) {
|
|
157
|
+
throw new MutationWriteSetError('packed ledger pending key has an invalid shape');
|
|
158
|
+
}
|
|
159
|
+
const key = {};
|
|
160
|
+
for (const [column, field] of Object.entries(entry[1])) {
|
|
161
|
+
if (field !== null &&
|
|
162
|
+
typeof field !== 'string' &&
|
|
163
|
+
typeof field !== 'boolean' &&
|
|
164
|
+
!(typeof field === 'number' && Number.isFinite(field))) {
|
|
165
|
+
throw new MutationWriteSetError('packed ledger pending key is not JSON-safe');
|
|
166
|
+
}
|
|
167
|
+
key[column] = field;
|
|
168
|
+
}
|
|
169
|
+
return { table: entry[0], key };
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
export async function commitPackedLedger(tx, exactKeys, identity, rawCaptureStart) {
|
|
173
|
+
let active = await readActiveSegment(tx);
|
|
174
|
+
let payload = parsePayload(active.payload);
|
|
175
|
+
const changes = new Map();
|
|
176
|
+
const rawKeys = new Set();
|
|
177
|
+
if (rawCaptureStart !== undefined && exactKeys.length > 0) {
|
|
178
|
+
const segments = await tx.query(`SELECT "payload" AS "payload" FROM "_zsync_log_segments"
|
|
179
|
+
WHERE "endVersion" > ? ORDER BY "startVersion"`, [rawCaptureStart]);
|
|
180
|
+
for (const segment of segments) {
|
|
181
|
+
for (const transaction of parsePayload(segment.payload).transactions) {
|
|
182
|
+
if (counter(transaction.version, 'transaction version') <= rawCaptureStart) {
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
for (const change of parsePending(JSON.stringify(transaction.changes))) {
|
|
186
|
+
rawKeys.add(JSON.stringify([change.table, change.key]));
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
for (const change of [
|
|
192
|
+
...parsePending(active.pending),
|
|
193
|
+
...exactKeys.filter((change) => !rawKeys.has(JSON.stringify([change.table, change.key]))),
|
|
194
|
+
]) {
|
|
195
|
+
changes.set(JSON.stringify([change.table, change.key]), change);
|
|
196
|
+
}
|
|
197
|
+
if (!identity && changes.size === 0) {
|
|
198
|
+
if (counter(active.captureMode, 'capture mode') !== 0) {
|
|
199
|
+
await setPackedCaptureMode(tx, false);
|
|
200
|
+
}
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (new TextEncoder().encode(active.payload).byteLength >= ROTATE_AT_BYTES) {
|
|
204
|
+
active = await rotatePackedLedger(tx, active, payload);
|
|
205
|
+
payload = parsePayload(active.payload);
|
|
206
|
+
}
|
|
207
|
+
const start = counter(active.startVersion, 'start version');
|
|
208
|
+
const end = counter(active.endVersion, 'end version');
|
|
209
|
+
if (end === Number.MAX_SAFE_INTEGER) {
|
|
210
|
+
throw new MutationWriteSetError('packed ledger version space is exhausted');
|
|
211
|
+
}
|
|
212
|
+
const version = end + 1;
|
|
213
|
+
if (identity) {
|
|
214
|
+
if (!Number.isSafeInteger(identity.mutationID) || identity.mutationID < 0) {
|
|
215
|
+
throw new MutationWriteSetError('packed ledger mutation id is unsafe');
|
|
216
|
+
}
|
|
217
|
+
const group = (payload.lmids[identity.clientGroupID] ??= {});
|
|
218
|
+
group[identity.clientID] = String(identity.mutationID);
|
|
219
|
+
}
|
|
220
|
+
payload.transactions.push({
|
|
221
|
+
version: String(version),
|
|
222
|
+
changes: [...changes.values()]
|
|
223
|
+
.sort((left, right) => JSON.stringify([left.table, left.key]).localeCompare(JSON.stringify([right.table, right.key])))
|
|
224
|
+
.map(({ table, key }) => [table, key]),
|
|
225
|
+
...(identity
|
|
226
|
+
? {
|
|
227
|
+
lmid: {
|
|
228
|
+
clientGroupID: identity.clientGroupID,
|
|
229
|
+
clientID: identity.clientID,
|
|
230
|
+
mutationID: String(identity.mutationID),
|
|
231
|
+
},
|
|
232
|
+
}
|
|
233
|
+
: {}),
|
|
234
|
+
});
|
|
235
|
+
const encoded = JSON.stringify(payload);
|
|
236
|
+
if (new TextEncoder().encode(encoded).byteLength > MAX_PAYLOAD_BYTES) {
|
|
237
|
+
throw new MutationWriteSetError('packed ledger transaction exceeds the 1 MiB limit');
|
|
238
|
+
}
|
|
239
|
+
const result = await tx.exec(`UPDATE "_zsync_log_segments"
|
|
240
|
+
SET "endVersion" = ?, "payload" = ?, "pending" = '[]', "captureMode" = 0
|
|
241
|
+
WHERE "startVersion" = ?`, [version, encoded, start]);
|
|
242
|
+
if (result.changes !== 1) {
|
|
243
|
+
throw new MutationWriteSetError('packed ledger commit missed its active segment');
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
export async function readPackedLMID(tx, clientGroupID, clientID) {
|
|
247
|
+
const active = await readActiveSegment(tx);
|
|
248
|
+
const value = parsePayload(active.payload).lmids[clientGroupID]?.[clientID];
|
|
249
|
+
return value === undefined ? 0 : counter(value, 'last mutation id');
|
|
250
|
+
}
|
|
251
|
+
//# sourceMappingURL=packed-ledger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packed-ledger.js","sourceRoot":"","sources":["../src/packed-ledger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AA0CnD,MAAM,eAAe,GAAG,GAAG,GAAG,KAAK,CAAA;AACnC,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,CAAA;AAEvC,SAAS,OAAO,CAAC,KAAc,EAAE,IAAY;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC5B,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,IAAI,qBAAqB,CAAC,iBAAiB,IAAI,eAAe,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACtF,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,qBAAqB,CAAC,mCAAmC,CAAC,CAAA;IACtE,CAAC;IACD,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,qBAAqB,CAAC,uCAAuC,CAAC,CAAA;IAC1E,CAAC;IACD,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,qBAAqB,CAAC,wCAAwC,CAAC,CAAA;IAC3E,CAAC;IACD,MAAM,OAAO,GAAG,MAAsC,CAAA;IACtD,IACE,OAAO,CAAC,MAAM,KAAK,CAAC;QACpB,CAAC,OAAO,CAAC,KAAK;QACd,OAAO,OAAO,CAAC,KAAK,KAAK,QAAQ;QACjC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;QAC5B,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,EACpC,CAAC;QACD,MAAM,IAAI,qBAAqB,CAAC,4CAA4C,CAAC,CAAA;IAC/E,CAAC;IACD,OAAO,OAA8B,CAAA;AACvC,CAAC;AAED,SAAS,aAAa,CAAC,IAA8B;IACnD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,qBAAqB,CAAC,qCAAqC,CAAC,CAAA;IACxE,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAE,CAAA;AACjB,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,EAA0B;IACzD,OAAO,aAAa,CAClB,MAAM,EAAE,CAAC,KAAK,CACZ;;;uEAGiE,CAClE,CACF,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAmC;IACvD,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,EAAE,CAAA;AAC/C,CAAC;AAED,KAAK,UAAU,kBAAkB,CAC/B,EAA0B,EAC1B,MAAqB,EACrB,OAA4B;IAE5B,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAAA;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;IACrD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAA;IACxD,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,qBAAqB,CAAC,uCAAuC,CAAC,CAAA;IAC1E,CAAC;IACD,IAAI,GAAG,GAAG,CAAC,GAAG,KAAK,EAAE,CAAC;QACpB,MAAM,IAAI,qBAAqB,CAAC,0CAA0C,CAAC,CAAA;IAC7E,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,qBAAqB,CAC7B,uDAAuD,CACxD,CAAA;IACH,CAAC;IACD,IAAI,GAAG,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACpC,MAAM,IAAI,qBAAqB,CAAC,0CAA0C,CAAC,CAAA;IAC7E,CAAC;IACD,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CACzB;sDACgD,EAChD,CAAC,KAAK,EAAE,IAAI,CAAC,CACd,CAAA;QACD,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,IAAI,qBAAqB,CAAC,+CAA+C,CAAC,CAAA;QAClF,CAAC;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,IAAI,CAC5B;;+BAE2B,EAC3B,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAClE,CAAA;IACD,IAAI,QAAQ,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,qBAAqB,CAAC,iDAAiD,CAAC,CAAA;IACpF,CAAC;IACD,OAAO,iBAAiB,CAAC,EAAE,CAAC,CAAA;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,QAA6B;IAE7B,IAAI,QAAQ,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAM;IACzC,MAAM,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QACtC,MAAM,EAAE,CAAC,IAAI,CAAC;;;;;;oBAME,CAAC,CAAA;QACjB,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,KAAK,CAC7B,uDAAuD,CACxD,CAAA;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,eAAe,CAAC,GAAG,CAAC;YAAE,OAAM;QAEjE,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,KAAK,CAC3B,2EAA2E,CAC5E,CAAA;QACD,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,SAAS,IAAI,CAAC,EAAE,kBAAkB,CAAC,CAAA;QACjE,MAAM,cAAc,GAAG,MAAM,EAAE,CAAC,KAAK,CACnC,mFAAmF,CACpF,CAAA;QACD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,KAAK,CAC5B,kEAAkE,CACnE,CAAA;YACD,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE,mBAAmB,CAAC,CAAC,CAAA;QAC5E,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,KAAK,CAK5B;yEACmE,CACpE,CAAA;QACD,MAAM,KAAK,GAAiC,EAAE,CAAA;QAC9C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IACE,OAAO,MAAM,CAAC,aAAa,KAAK,QAAQ;gBACxC,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,EACnC,CAAC;gBACD,MAAM,IAAI,qBAAqB,CAAC,0CAA0C,CAAC,CAAA;YAC7E,CAAC;YACD,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAA;YAClD,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAC7B,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,yBAAyB,CAAC,CAC1D,CAAA;QACH,CAAC;QACD,MAAM,EAAE,CAAC,IAAI,CACX;;iCAE2B,EAC3B,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CACtD,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,EAA0B;IAClE,IAAI,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAA;IACxC,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC;QACjF,MAAM,IAAI,qBAAqB,CAAC,6CAA6C,CAAC,CAAA;IAChF,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC5C,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,IAAI,eAAe,EAAE,CAAC;QAC3E,MAAM,GAAG,MAAM,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;AAClD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,EAA0B,EAC1B,KAAc;IAEd,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAC1B;oFACgF,EAChF,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAChB,CAAA;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,qBAAqB,CAAC,kDAAkD,CAAC,CAAA;IACrF,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,qBAAqB,CAAC,yCAAyC,CAAC,CAAA;IAC5E,CAAC;IACD,IAAI,MAAe,CAAA;IACnB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,qBAAqB,CAAC,6CAA6C,CAAC,CAAA;IAChF,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,qBAAqB,CAAC,6CAA6C,CAAC,CAAA;IAChF,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACrB,KAAK,CAAC,MAAM,KAAK,CAAC;YAClB,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;YAC5B,CAAC,KAAK,CAAC,CAAC,CAAC;YACT,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,QAAQ;YAC5B,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EACvB,CAAC;YACD,MAAM,IAAI,qBAAqB,CAAC,gDAAgD,CAAC,CAAA;QACnF,CAAC;QACD,MAAM,GAAG,GAAkC,EAAE,CAAA;QAC7C,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACvD,IACE,KAAK,KAAK,IAAI;gBACd,OAAO,KAAK,KAAK,QAAQ;gBACzB,OAAO,KAAK,KAAK,SAAS;gBAC1B,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EACtD,CAAC;gBACD,MAAM,IAAI,qBAAqB,CAAC,4CAA4C,CAAC,CAAA;YAC/E,CAAC;YACD,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;QACrB,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAA;IACjC,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAA0B,EAC1B,SAAqC,EACrC,QAA+B,EAC/B,eAAwB;IAExB,IAAI,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAA;IACxC,IAAI,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAC1C,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2B,CAAA;IAClD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;IACjC,IAAI,eAAe,KAAK,SAAS,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1D,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,KAAK,CAC7B;sDACgD,EAChD,CAAC,eAAe,CAAC,CAClB,CAAA;QACD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,KAAK,MAAM,WAAW,IAAI,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,CAAC;gBACrE,IAAI,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,qBAAqB,CAAC,IAAI,eAAe,EAAE,CAAC;oBAC3E,SAAQ;gBACV,CAAC;gBACD,KAAK,MAAM,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;oBACvE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,MAAM,MAAM,IAAI;QACnB,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC;QAC/B,GAAG,SAAS,CAAC,MAAM,CACjB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CACrE;KACF,EAAE,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAA;IACjE,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,MAAM,oBAAoB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACvC,CAAC;QACD,OAAM;IACR,CAAC;IACD,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,IAAI,eAAe,EAAE,CAAC;QAC3E,MAAM,GAAG,MAAM,kBAAkB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,CAAA;QACtD,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IACxC,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,CAAA;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;IACrD,IAAI,GAAG,KAAK,MAAM,CAAC,gBAAgB,EAAE,CAAC;QACpC,MAAM,IAAI,qBAAqB,CAAC,0CAA0C,CAAC,CAAA;IAC7E,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,CAAA;IACvB,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,QAAQ,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;YAC1E,MAAM,IAAI,qBAAqB,CAAC,qCAAqC,CAAC,CAAA;QACxE,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,CAAA;QAC5D,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;IACxD,CAAC;IACD,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC;QACxB,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;QACxB,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;aAC3B,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACpB,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,aAAa,CAClD,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CACzC,CACF;aACA,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxC,GAAG,CAAC,QAAQ;YACV,CAAC,CAAC;gBACE,IAAI,EAAE;oBACJ,aAAa,EAAE,QAAQ,CAAC,aAAa;oBACrC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;oBAC3B,UAAU,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;iBACxC;aACF;YACH,CAAC,CAAC,EAAE,CAAC;KACR,CAAC,CAAA;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IACvC,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,UAAU,GAAG,iBAAiB,EAAE,CAAC;QACrE,MAAM,IAAI,qBAAqB,CAAC,mDAAmD,CAAC,CAAA;IACtF,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,IAAI,CAC1B;;8BAE0B,EAC1B,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAC1B,CAAA;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,qBAAqB,CAAC,gDAAgD,CAAC,CAAA;IACnF,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,EAA0B,EAC1B,aAAqB,EACrB,QAAgB;IAEhB,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,EAAE,CAAC,CAAA;IAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAA;IAC3E,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAA;AACrE,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -28,11 +28,23 @@ export type TransactionQueryFormat = {
|
|
|
28
28
|
readonly relationships: Readonly<Record<string, TransactionQueryFormat>>;
|
|
29
29
|
readonly singular: boolean;
|
|
30
30
|
};
|
|
31
|
-
|
|
31
|
+
type SqlStatementMetadataBase = {
|
|
32
32
|
readonly table: string;
|
|
33
33
|
readonly publicTable: string;
|
|
34
34
|
readonly kind: 'delete' | 'insert' | 'update' | 'upsert';
|
|
35
35
|
};
|
|
36
|
+
export type SqlStatementMetadata = SqlStatementMetadataBase & ({
|
|
37
|
+
/** omitted metadata keeps arbitrary SQL on the transparent trigger lane. */
|
|
38
|
+
readonly capture?: 'triggers';
|
|
39
|
+
readonly primaryKeys?: never;
|
|
40
|
+
} | {
|
|
41
|
+
/** generated `tx.mutate` helpers select the cheaper lane with exact keys. */
|
|
42
|
+
readonly capture: 'exact';
|
|
43
|
+
readonly primaryKeys: readonly {
|
|
44
|
+
readonly before?: Readonly<Record<string, JsonPrimitive>>;
|
|
45
|
+
readonly after?: Readonly<Record<string, JsonPrimitive>>;
|
|
46
|
+
}[];
|
|
47
|
+
});
|
|
36
48
|
export type ExecResult = {
|
|
37
49
|
readonly changes: number;
|
|
38
50
|
};
|
|
@@ -112,4 +124,5 @@ export interface SyncExecutor<S extends Schema> {
|
|
|
112
124
|
}
|
|
113
125
|
export type TransactionQuery = Query<string, Schema, unknown>;
|
|
114
126
|
export type TransactionQueryResult = HumanReadable<unknown>;
|
|
127
|
+
export {};
|
|
115
128
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,KAAK,EACL,MAAM,EACN,iBAAiB,IAAI,qBAAqB,EAC3C,MAAM,gBAAgB,CAAA;AAEvB,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AAC5D,MAAM,MAAM,SAAS,GACjB,aAAa,GACb,SAAS,SAAS,EAAE,GACpB;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAA;AAEzC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;CACpC,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CACvB,MAAM,CACJ,MAAM,EACN;QACE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;QAC5B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CACxB,MAAM,CACJ,MAAM,EACN;YACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;YACrB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;YAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;YAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,IAAI,CAAA;SAC1B,CACF,CACF,CAAA;QACD,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;KACvC,CACF,CACF,CAAA;CACF,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC,CAAA;IACxE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;CAC3B,CAAA;AAED,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { PackedLedgerIdentity } from './packed-ledger.js';
|
|
2
|
+
import type { ApplicationTransaction, ZeroSchemaConfig } from './types.js';
|
|
3
|
+
export declare function beginWriteSetCapture(schema: ZeroSchemaConfig, applicationTx: ApplicationTransaction, dialect: 'sqlite' | 'postgresql'): Promise<{
|
|
4
|
+
readonly transaction: ApplicationTransaction;
|
|
5
|
+
commit(identity?: PackedLedgerIdentity): Promise<void>;
|
|
6
|
+
}>;
|
|
7
|
+
//# sourceMappingURL=write-set.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-set.d.ts","sourceRoot":"","sources":["../src/write-set.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAmB,MAAM,oBAAoB,CAAA;AAC/E,OAAO,KAAK,EACV,sBAAsB,EAGtB,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAmHnB,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,gBAAgB,EACxB,aAAa,EAAE,sBAAsB,EACrC,OAAO,EAAE,QAAQ,GAAG,YAAY,GAC/B,OAAO,CAAC;IACT,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAA;IAC5C,MAAM,CAAC,QAAQ,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACvD,CAAC,CA6ID"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import { MutationWriteSetError } from './errors.js';
|
|
2
|
+
import { commitPackedLedger, preparePackedLedger, setPackedCaptureMode, } from './packed-ledger.js';
|
|
3
|
+
function isJsonPrimitive(value) {
|
|
4
|
+
return (value === null ||
|
|
5
|
+
typeof value === 'string' ||
|
|
6
|
+
typeof value === 'boolean' ||
|
|
7
|
+
(typeof value === 'number' && Number.isFinite(value)));
|
|
8
|
+
}
|
|
9
|
+
function canonicalPrimaryKey(schema, tableName, value, source) {
|
|
10
|
+
if (!Object.hasOwn(schema.tables, tableName)) {
|
|
11
|
+
throw new MutationWriteSetError(`${source} names unknown table ${tableName}`);
|
|
12
|
+
}
|
|
13
|
+
const table = schema.tables[tableName];
|
|
14
|
+
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
15
|
+
throw new MutationWriteSetError(`${source} primary key for ${tableName} is not an object`);
|
|
16
|
+
}
|
|
17
|
+
const input = value;
|
|
18
|
+
const inputColumns = Object.keys(input).sort();
|
|
19
|
+
const primaryKeyColumns = [...table.primaryKey].sort();
|
|
20
|
+
if (inputColumns.length !== primaryKeyColumns.length ||
|
|
21
|
+
inputColumns.some((column, index) => column !== primaryKeyColumns[index])) {
|
|
22
|
+
throw new MutationWriteSetError(`${source} primary key for ${tableName} must contain exactly ${table.primaryKey.join(', ')}`);
|
|
23
|
+
}
|
|
24
|
+
const key = {};
|
|
25
|
+
for (const column of table.primaryKey) {
|
|
26
|
+
let field = input[column];
|
|
27
|
+
if (source === 'database result' && table.columns[column]?.type === 'boolean') {
|
|
28
|
+
if (field === 0)
|
|
29
|
+
field = false;
|
|
30
|
+
if (field === 1)
|
|
31
|
+
field = true;
|
|
32
|
+
}
|
|
33
|
+
if (!isJsonPrimitive(field)) {
|
|
34
|
+
throw new MutationWriteSetError(`${source} primary key ${tableName}.${column} is not a JSON primitive`);
|
|
35
|
+
}
|
|
36
|
+
key[column] = field;
|
|
37
|
+
}
|
|
38
|
+
return { table: tableName, key };
|
|
39
|
+
}
|
|
40
|
+
function encodedPrimaryKey(primaryKey) {
|
|
41
|
+
return JSON.stringify([primaryKey.table, primaryKey.key]);
|
|
42
|
+
}
|
|
43
|
+
function quoteIdentifier(value) {
|
|
44
|
+
return `"${value.replaceAll('"', '""')}"`;
|
|
45
|
+
}
|
|
46
|
+
function expectedResultKeys(schema, metadata) {
|
|
47
|
+
const side = metadata.kind === 'delete' ? 'before' : 'after';
|
|
48
|
+
return metadata.primaryKeys.flatMap((row) => {
|
|
49
|
+
const value = row[side];
|
|
50
|
+
return value
|
|
51
|
+
? [canonicalPrimaryKey(schema, metadata.publicTable, value, 'executor metadata')]
|
|
52
|
+
: [];
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
function validateMetadata(schema, metadata) {
|
|
56
|
+
if (!Object.hasOwn(schema.tables, metadata.publicTable)) {
|
|
57
|
+
throw new MutationWriteSetError(`executor metadata names unknown table ${metadata.publicTable}`);
|
|
58
|
+
}
|
|
59
|
+
const table = schema.tables[metadata.publicTable];
|
|
60
|
+
const physicalTable = table.serverName ?? table.name ?? metadata.publicTable;
|
|
61
|
+
if (metadata.table !== physicalTable) {
|
|
62
|
+
throw new MutationWriteSetError(`executor metadata table ${metadata.table} does not match ${physicalTable}`);
|
|
63
|
+
}
|
|
64
|
+
for (const [index, row] of metadata.primaryKeys.entries()) {
|
|
65
|
+
if (!row.before && !row.after) {
|
|
66
|
+
throw new MutationWriteSetError(`executor metadata primaryKeys[${index}] has neither before nor after`);
|
|
67
|
+
}
|
|
68
|
+
const before = row.before
|
|
69
|
+
? canonicalPrimaryKey(schema, metadata.publicTable, row.before, 'executor metadata')
|
|
70
|
+
: undefined;
|
|
71
|
+
const after = row.after
|
|
72
|
+
? canonicalPrimaryKey(schema, metadata.publicTable, row.after, 'executor metadata')
|
|
73
|
+
: undefined;
|
|
74
|
+
if (before && after && encodedPrimaryKey(before) !== encodedPrimaryKey(after)) {
|
|
75
|
+
throw new MutationWriteSetError('primary-key-changing SQL must use transparent trigger capture');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
export async function beginWriteSetCapture(schema, applicationTx, dialect) {
|
|
80
|
+
if (dialect !== 'sqlite') {
|
|
81
|
+
return {
|
|
82
|
+
transaction: applicationTx,
|
|
83
|
+
commit: async () => { },
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const captureStart = await preparePackedLedger(applicationTx);
|
|
87
|
+
let active = true;
|
|
88
|
+
let operation = Promise.resolve(undefined);
|
|
89
|
+
let fatalFailure;
|
|
90
|
+
let exactMode = false;
|
|
91
|
+
let rawWrite = false;
|
|
92
|
+
const exactKeys = new Map();
|
|
93
|
+
const assertActive = () => {
|
|
94
|
+
if (!active) {
|
|
95
|
+
throw new MutationWriteSetError('application transaction is no longer active');
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
const serialize = (work) => {
|
|
99
|
+
assertActive();
|
|
100
|
+
const result = operation.then(work);
|
|
101
|
+
operation = result.then(() => undefined, () => undefined);
|
|
102
|
+
return result;
|
|
103
|
+
};
|
|
104
|
+
const setMode = async (exact) => {
|
|
105
|
+
if (exactMode === exact)
|
|
106
|
+
return;
|
|
107
|
+
await setPackedCaptureMode(applicationTx, exact);
|
|
108
|
+
exactMode = exact;
|
|
109
|
+
};
|
|
110
|
+
const transaction = {
|
|
111
|
+
exec(sql, params, metadata) {
|
|
112
|
+
return serialize(async () => {
|
|
113
|
+
// arbitrary sql keeps the product's trigger-backed "just use the db"
|
|
114
|
+
// contract. generated helpers opt each modeled run into the packed lane.
|
|
115
|
+
if (metadata?.capture !== 'exact') {
|
|
116
|
+
await setMode(false);
|
|
117
|
+
const result = await applicationTx.exec(sql, params, metadata);
|
|
118
|
+
rawWrite ||= result.changes > 0;
|
|
119
|
+
return result;
|
|
120
|
+
}
|
|
121
|
+
try {
|
|
122
|
+
validateMetadata(schema, metadata);
|
|
123
|
+
const table = schema.tables[metadata.publicTable];
|
|
124
|
+
if (/\bRETURNING\b/i.test(sql)) {
|
|
125
|
+
throw new MutationWriteSetError('exact write SQL must leave RETURNING to the executor');
|
|
126
|
+
}
|
|
127
|
+
const returning = table.primaryKey
|
|
128
|
+
.map((column) => {
|
|
129
|
+
const physical = table.columns[column]?.serverName ?? column;
|
|
130
|
+
return `${quoteIdentifier(physical)} AS ${quoteIdentifier(column)}`;
|
|
131
|
+
})
|
|
132
|
+
.join(', ');
|
|
133
|
+
const statement = sql.trim().replace(/;$/, '');
|
|
134
|
+
await setMode(true);
|
|
135
|
+
const returned = await applicationTx.query(`${statement} RETURNING ${returning}`, params);
|
|
136
|
+
const actualResultKeys = returned.map((row) => canonicalPrimaryKey(schema, metadata.publicTable, row, 'database result'));
|
|
137
|
+
const expected = returned.length === 0
|
|
138
|
+
? []
|
|
139
|
+
: [
|
|
140
|
+
...new Set(expectedResultKeys(schema, metadata).map(encodedPrimaryKey)),
|
|
141
|
+
].sort();
|
|
142
|
+
const actual = [...new Set(actualResultKeys.map(encodedPrimaryKey))].sort();
|
|
143
|
+
if (expected.length !== actual.length ||
|
|
144
|
+
expected.some((key, index) => key !== actual[index])) {
|
|
145
|
+
throw new MutationWriteSetError(`executor write set ${JSON.stringify(expected)} does not match returned write set ${JSON.stringify(actual)}`);
|
|
146
|
+
}
|
|
147
|
+
if (returned.length > 0) {
|
|
148
|
+
for (const key of actualResultKeys) {
|
|
149
|
+
exactKeys.set(encodedPrimaryKey(key), key);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return { changes: returned.length };
|
|
153
|
+
}
|
|
154
|
+
catch (error) {
|
|
155
|
+
if (error &&
|
|
156
|
+
typeof error === 'object' &&
|
|
157
|
+
'name' in error &&
|
|
158
|
+
error.name === 'MutationWriteSetError') {
|
|
159
|
+
fatalFailure ??= error;
|
|
160
|
+
}
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
},
|
|
165
|
+
query(sql, params) {
|
|
166
|
+
return serialize(async () => {
|
|
167
|
+
await setMode(false);
|
|
168
|
+
const rows = await applicationTx.query(sql, params);
|
|
169
|
+
rawWrite ||= /\b(?:INSERT|UPDATE|DELETE|REPLACE)\b/i.test(sql);
|
|
170
|
+
return rows;
|
|
171
|
+
});
|
|
172
|
+
},
|
|
173
|
+
queryAst(ast, format, queryName) {
|
|
174
|
+
return serialize(async () => {
|
|
175
|
+
await setMode(false);
|
|
176
|
+
return applicationTx.queryAst(ast, format, queryName);
|
|
177
|
+
});
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
return {
|
|
181
|
+
transaction,
|
|
182
|
+
async commit(identity) {
|
|
183
|
+
assertActive();
|
|
184
|
+
try {
|
|
185
|
+
await operation;
|
|
186
|
+
if (fatalFailure !== undefined)
|
|
187
|
+
throw fatalFailure;
|
|
188
|
+
await commitPackedLedger(applicationTx, [...exactKeys.values()], identity, rawWrite ? captureStart : undefined);
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
active = false;
|
|
192
|
+
}
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
//# sourceMappingURL=write-set.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-set.js","sourceRoot":"","sources":["../src/write-set.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED