@quereus/sync 4.3.2 → 4.4.1
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/README.md +19 -1
- package/dist/src/create-sync-module.d.ts +11 -1
- package/dist/src/create-sync-module.d.ts.map +1 -1
- package/dist/src/create-sync-module.js +2 -2
- package/dist/src/create-sync-module.js.map +1 -1
- package/dist/src/index.d.ts +4 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/metadata/change-log.d.ts +39 -3
- package/dist/src/metadata/change-log.d.ts.map +1 -1
- package/dist/src/metadata/change-log.js +43 -8
- package/dist/src/metadata/change-log.js.map +1 -1
- package/dist/src/metadata/column-version.d.ts +62 -9
- package/dist/src/metadata/column-version.d.ts.map +1 -1
- package/dist/src/metadata/column-version.js +79 -25
- package/dist/src/metadata/column-version.js.map +1 -1
- package/dist/src/metadata/index.d.ts +1 -0
- package/dist/src/metadata/index.d.ts.map +1 -1
- package/dist/src/metadata/index.js +1 -0
- package/dist/src/metadata/index.js.map +1 -1
- package/dist/src/metadata/keys.d.ts +88 -22
- package/dist/src/metadata/keys.d.ts.map +1 -1
- package/dist/src/metadata/keys.js +134 -77
- package/dist/src/metadata/keys.js.map +1 -1
- package/dist/src/metadata/pk-identity.d.ts +60 -0
- package/dist/src/metadata/pk-identity.d.ts.map +1 -0
- package/dist/src/metadata/pk-identity.js +94 -0
- package/dist/src/metadata/pk-identity.js.map +1 -0
- package/dist/src/metadata/tombstones.d.ts +41 -11
- package/dist/src/metadata/tombstones.d.ts.map +1 -1
- package/dist/src/metadata/tombstones.js +58 -33
- package/dist/src/metadata/tombstones.js.map +1 -1
- package/dist/src/sync/change-applicator.d.ts +30 -1
- package/dist/src/sync/change-applicator.d.ts.map +1 -1
- package/dist/src/sync/change-applicator.js +161 -40
- package/dist/src/sync/change-applicator.js.map +1 -1
- package/dist/src/sync/maintenance.d.ts +70 -0
- package/dist/src/sync/maintenance.d.ts.map +1 -0
- package/dist/src/sync/maintenance.js +84 -0
- package/dist/src/sync/maintenance.js.map +1 -0
- package/dist/src/sync/protocol.d.ts +61 -10
- package/dist/src/sync/protocol.d.ts.map +1 -1
- package/dist/src/sync/protocol.js +15 -0
- package/dist/src/sync/protocol.js.map +1 -1
- package/dist/src/sync/snapshot-identity.d.ts +62 -0
- package/dist/src/sync/snapshot-identity.d.ts.map +1 -0
- package/dist/src/sync/snapshot-identity.js +88 -0
- package/dist/src/sync/snapshot-identity.js.map +1 -0
- package/dist/src/sync/snapshot-stream.d.ts +8 -1
- package/dist/src/sync/snapshot-stream.d.ts.map +1 -1
- package/dist/src/sync/snapshot-stream.js +166 -67
- package/dist/src/sync/snapshot-stream.js.map +1 -1
- package/dist/src/sync/snapshot.d.ts +1 -1
- package/dist/src/sync/snapshot.d.ts.map +1 -1
- package/dist/src/sync/snapshot.js +75 -44
- package/dist/src/sync/snapshot.js.map +1 -1
- package/dist/src/sync/staged-transaction-metadata.d.ts +75 -0
- package/dist/src/sync/staged-transaction-metadata.d.ts.map +1 -0
- package/dist/src/sync/staged-transaction-metadata.js +100 -0
- package/dist/src/sync/staged-transaction-metadata.js.map +1 -0
- package/dist/src/sync/store-adapter.d.ts +10 -4
- package/dist/src/sync/store-adapter.d.ts.map +1 -1
- package/dist/src/sync/store-adapter.js +244 -21
- package/dist/src/sync/store-adapter.js.map +1 -1
- package/dist/src/sync/sync-context.d.ts +54 -2
- package/dist/src/sync/sync-context.d.ts.map +1 -1
- package/dist/src/sync/sync-context.js +66 -0
- package/dist/src/sync/sync-context.js.map +1 -1
- package/dist/src/sync/sync-manager-impl.d.ts +70 -4
- package/dist/src/sync/sync-manager-impl.d.ts.map +1 -1
- package/dist/src/sync/sync-manager-impl.js +206 -36
- package/dist/src/sync/sync-manager-impl.js.map +1 -1
- package/dist/src/sync/wire.d.ts +47 -6
- package/dist/src/sync/wire.d.ts.map +1 -1
- package/dist/src/sync/wire.js +62 -11
- package/dist/src/sync/wire.js.map +1 -1
- package/package.json +6 -6
|
@@ -13,7 +13,9 @@
|
|
|
13
13
|
* cl: - Change log (HLC-indexed for efficient delta queries)
|
|
14
14
|
* qt: - Quarantine (held out-of-basis straggler changes)
|
|
15
15
|
* bl: - Basis-table lifecycle (mapped/derivation-source/unreferenced/detached bookkeeping)
|
|
16
|
+
* fv: - Sync-metadata format version (single record; see SYNC_METADATA_FORMAT_VERSION)
|
|
16
17
|
*/
|
|
18
|
+
import { serializeKeyNullGrouping } from '@quereus/quereus';
|
|
17
19
|
import { assertNoUnpairedSurrogate } from '@quereus/store';
|
|
18
20
|
import { siteIdToBase64, siteIdFromBase64 } from '../clock/site.js';
|
|
19
21
|
const encoder = new TextEncoder();
|
|
@@ -30,51 +32,90 @@ export const SYNC_KEY_PREFIX = {
|
|
|
30
32
|
CHANGE_LOG: encoder.encode('cl:'),
|
|
31
33
|
QUARANTINE: encoder.encode('qt:'),
|
|
32
34
|
BASIS_LIFECYCLE: encoder.encode('bl:'),
|
|
35
|
+
FORMAT_VERSION: encoder.encode('fv:'),
|
|
33
36
|
};
|
|
37
|
+
/**
|
|
38
|
+
* Current sync-metadata storage format version, persisted under the `fv:` key.
|
|
39
|
+
*
|
|
40
|
+
* Version 2: per-row records (`cv:`/`tb:`/`cl:`) are keyed by the pk IDENTITY
|
|
41
|
+
* (collation- and semantic-transform-normalized, via {@link encodePkIdentity})
|
|
42
|
+
* and carry the raw pk in the record VALUE. Version-1 metadata (raw
|
|
43
|
+
* `JSON.stringify(pk)` keys, no pk in values) is unreadable under this layout;
|
|
44
|
+
* a replica whose stored version mismatches must re-bootstrap from a peer
|
|
45
|
+
* snapshot (see docs/sync.md § Metadata format version).
|
|
46
|
+
*/
|
|
47
|
+
export const SYNC_METADATA_FORMAT_VERSION = 2;
|
|
34
48
|
/** Separator between key components. */
|
|
35
49
|
const SEPARATOR = ':';
|
|
36
50
|
/**
|
|
37
51
|
* Raise when any of `names` (schema/table/column identifiers) carries an unpaired
|
|
38
52
|
* surrogate — such an identifier has no faithful UTF-8 key bytes, so building a key from it
|
|
39
53
|
* would otherwise fold to U+FFFD and collide with a different identifier under the same
|
|
40
|
-
* mistake. The `
|
|
41
|
-
*
|
|
42
|
-
*
|
|
54
|
+
* mistake. The `hlc`/`entryType` key components never carry user text. The pk identity
|
|
55
|
+
* component is NOT asserted: a lone surrogate inside a string pk VALUE folds to U+FFFD in
|
|
56
|
+
* the key bytes (a theoretical cross-value collision, but rejecting it would make the row
|
|
57
|
+
* unsyncable), and the fold preserves code-unit length so the length-prefixed layout below
|
|
58
|
+
* still parses.
|
|
43
59
|
*/
|
|
44
60
|
function assertKeyableIdentifiers(...names) {
|
|
45
61
|
for (const name of names) {
|
|
46
62
|
assertNoUnpairedSurrogate(name, `the identifier "${name}"`);
|
|
47
63
|
}
|
|
48
64
|
}
|
|
65
|
+
const IDENTITY_NORMALIZER = (s) => s;
|
|
49
66
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
67
|
+
* Keying that applies NO collation and NO semantic transform — raw value
|
|
68
|
+
* identity. Used where no table schema can exist: quarantine keys (out-of-basis
|
|
69
|
+
* by definition) and relay-only deployments with no schema oracle, where the
|
|
70
|
+
* raw identity is stable for the replica's whole life (an oracle can never
|
|
71
|
+
* appear later, so the identity can never flip).
|
|
52
72
|
*/
|
|
53
|
-
export
|
|
54
|
-
return JSON.stringify(pk);
|
|
55
|
-
}
|
|
73
|
+
export const RAW_PK_KEYING = { normalizers: [], transforms: [] };
|
|
56
74
|
/**
|
|
57
|
-
*
|
|
75
|
+
* Encode a primary key's IDENTITY — the string a row's sync bookkeeping is filed
|
|
76
|
+
* under. Built on the engine's type-tagged `serializeKeyNullGrouping`, so:
|
|
77
|
+
* - numerics share one tag (`5n` and `5` key alike — bigint-safe, unlike the
|
|
78
|
+
* former `JSON.stringify` encoding which threw on bigint);
|
|
79
|
+
* - string values run through the column's key-collation normalizer;
|
|
80
|
+
* - semantic-ordering types (TIMESPAN) run through their `groupKey` first.
|
|
81
|
+
*
|
|
82
|
+
* The result is LOSSY and never decoded back — the raw pk (the row's ADDRESS,
|
|
83
|
+
* what goes on the wire) lives in the record VALUE instead.
|
|
58
84
|
*/
|
|
59
|
-
export function
|
|
60
|
-
|
|
85
|
+
export function encodePkIdentity(pk, keying) {
|
|
86
|
+
const values = pk.map((v, i) => {
|
|
87
|
+
const transform = keying.transforms[i];
|
|
88
|
+
return transform && v !== null ? transform(v) : v;
|
|
89
|
+
});
|
|
90
|
+
const normalizers = pk.map((_, i) => keying.normalizers[i] ?? IDENTITY_NORMALIZER);
|
|
91
|
+
return serializeKeyNullGrouping(values, normalizers);
|
|
92
|
+
}
|
|
93
|
+
/** Raw (no-collation, no-transform) pk identity — see {@link RAW_PK_KEYING}. */
|
|
94
|
+
export function encodeRawPkIdentity(pk) {
|
|
95
|
+
return encodePkIdentity(pk, RAW_PK_KEYING);
|
|
61
96
|
}
|
|
62
97
|
/**
|
|
63
98
|
* Build a column version key.
|
|
64
|
-
* Format: cv:{schema}.{table}:{
|
|
99
|
+
* Format: cv:{schema}.{table}:{identity_length}:{identity}:{column}
|
|
100
|
+
*
|
|
101
|
+
* The identity is LENGTH-PREFIXED (code units of the decoded key string) because
|
|
102
|
+
* it freely contains `:` (type tags) and `\0` (member separator) — no separator
|
|
103
|
+
* character is guaranteed absent, so an explicit length is the only unambiguous
|
|
104
|
+
* split between identity and column.
|
|
65
105
|
*/
|
|
66
|
-
export function buildColumnVersionKey(schemaName, tableName,
|
|
106
|
+
export function buildColumnVersionKey(schemaName, tableName, identity, column) {
|
|
67
107
|
assertKeyableIdentifiers(schemaName, tableName, column);
|
|
68
|
-
const key = `cv:${schemaName}.${tableName}${SEPARATOR}${
|
|
108
|
+
const key = `cv:${schemaName}.${tableName}${SEPARATOR}${identity.length}${SEPARATOR}${identity}${SEPARATOR}${column}`;
|
|
69
109
|
return encoder.encode(key);
|
|
70
110
|
}
|
|
71
111
|
/**
|
|
72
112
|
* Build a tombstone key.
|
|
73
|
-
* Format: tb:{schema}.{table}:{
|
|
113
|
+
* Format: tb:{schema}.{table}:{identity}
|
|
114
|
+
* (No length prefix — the identity is the final component.)
|
|
74
115
|
*/
|
|
75
|
-
export function buildTombstoneKey(schemaName, tableName,
|
|
116
|
+
export function buildTombstoneKey(schemaName, tableName, identity) {
|
|
76
117
|
assertKeyableIdentifiers(schemaName, tableName);
|
|
77
|
-
const key = `tb:${schemaName}.${tableName}${SEPARATOR}${
|
|
118
|
+
const key = `tb:${schemaName}.${tableName}${SEPARATOR}${identity}`;
|
|
78
119
|
return encoder.encode(key);
|
|
79
120
|
}
|
|
80
121
|
/**
|
|
@@ -134,12 +175,24 @@ export function buildTableColumnVersionScanBounds(schemaName, tableName) {
|
|
|
134
175
|
lt: incrementLastByte(encoder.encode(prefix)),
|
|
135
176
|
};
|
|
136
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* The key prefix shared by every column version of one row:
|
|
180
|
+
* `cv:{schema}.{table}:{identity_length}:{identity}:`.
|
|
181
|
+
*
|
|
182
|
+
* Exported so a row scan can recover each entry's column name by stripping this
|
|
183
|
+
* exact prefix, rather than splitting the key at its last `:` — the column name
|
|
184
|
+
* is the only unbounded, separator-bearing component, so only the prefix is
|
|
185
|
+
* unambiguous (see {@link parseColumnVersionKey}, which has no pk to anchor on).
|
|
186
|
+
*/
|
|
187
|
+
export function buildColumnVersionRowPrefix(schemaName, tableName, identity) {
|
|
188
|
+
return `cv:${schemaName}.${tableName}${SEPARATOR}${identity.length}${SEPARATOR}${identity}${SEPARATOR}`;
|
|
189
|
+
}
|
|
137
190
|
/**
|
|
138
191
|
* Build scan bounds for all column versions of a row.
|
|
139
|
-
* Returns keys to scan cv:{schema}.{table}:{
|
|
192
|
+
* Returns keys to scan cv:{schema}.{table}:{identity_length}:{identity}:*
|
|
140
193
|
*/
|
|
141
|
-
export function buildColumnVersionScanBounds(schemaName, tableName,
|
|
142
|
-
const prefix =
|
|
194
|
+
export function buildColumnVersionScanBounds(schemaName, tableName, identity) {
|
|
195
|
+
const prefix = buildColumnVersionRowPrefix(schemaName, tableName, identity);
|
|
143
196
|
return {
|
|
144
197
|
gte: encoder.encode(prefix),
|
|
145
198
|
lt: incrementLastByte(encoder.encode(prefix)),
|
|
@@ -207,15 +260,38 @@ export function buildAllSchemaMigrationsScanBounds() {
|
|
|
207
260
|
lt: incrementLastByte(SYNC_KEY_PREFIX.SCHEMA_MIGRATION),
|
|
208
261
|
};
|
|
209
262
|
}
|
|
263
|
+
/**
|
|
264
|
+
* Split a length-prefixed identity component off `rest` (the key text after the
|
|
265
|
+
* table's separator): `{identity_length}:{identity}` followed by `remainder`.
|
|
266
|
+
* Returns null on a malformed length or out-of-bounds slice.
|
|
267
|
+
*/
|
|
268
|
+
function splitLengthPrefixedIdentity(rest) {
|
|
269
|
+
const lenColon = rest.indexOf(SEPARATOR);
|
|
270
|
+
if (lenColon <= 0)
|
|
271
|
+
return null;
|
|
272
|
+
const lenStr = rest.slice(0, lenColon);
|
|
273
|
+
if (!/^\d+$/.test(lenStr))
|
|
274
|
+
return null;
|
|
275
|
+
const len = parseInt(lenStr, 10);
|
|
276
|
+
const start = lenColon + 1;
|
|
277
|
+
if (start + len > rest.length)
|
|
278
|
+
return null;
|
|
279
|
+
return { identity: rest.slice(start, start + len), remainder: rest.slice(start + len) };
|
|
280
|
+
}
|
|
210
281
|
/**
|
|
211
282
|
* Parse a column version key to extract components.
|
|
212
|
-
* Key format: cv:{schema}.{table}:{
|
|
283
|
+
* Key format: cv:{schema}.{table}:{identity_length}:{identity}:{column}
|
|
284
|
+
*
|
|
285
|
+
* Returns the pk IDENTITY string — the identity is lossy and cannot be decoded
|
|
286
|
+
* back to values; the raw pk lives in the record VALUE (`ColumnVersion.pk`).
|
|
287
|
+
* The length prefix makes the identity/column split unambiguous regardless of
|
|
288
|
+
* what characters either contains.
|
|
213
289
|
*/
|
|
214
290
|
export function parseColumnVersionKey(key) {
|
|
215
291
|
const keyStr = new TextDecoder().decode(key);
|
|
216
292
|
if (!keyStr.startsWith('cv:'))
|
|
217
293
|
return null;
|
|
218
|
-
// cv:{schema}.{table}:{
|
|
294
|
+
// cv:{schema}.{table}:{identity_length}:{identity}:{column}
|
|
219
295
|
const rest = keyStr.slice(3); // Remove 'cv:'
|
|
220
296
|
const firstDot = rest.indexOf('.');
|
|
221
297
|
if (firstDot === -1)
|
|
@@ -226,29 +302,23 @@ export function parseColumnVersionKey(key) {
|
|
|
226
302
|
if (firstColon === -1)
|
|
227
303
|
return null;
|
|
228
304
|
const table = afterDot.slice(0, firstColon);
|
|
229
|
-
const
|
|
230
|
-
|
|
231
|
-
if (lastColon === -1)
|
|
232
|
-
return null;
|
|
233
|
-
const pkJson = afterTable.slice(0, lastColon);
|
|
234
|
-
const column = afterTable.slice(lastColon + 1);
|
|
235
|
-
try {
|
|
236
|
-
const pk = decodePK(pkJson);
|
|
237
|
-
return { schema, table, pk, column };
|
|
238
|
-
}
|
|
239
|
-
catch {
|
|
305
|
+
const split = splitLengthPrefixedIdentity(afterDot.slice(firstColon + 1));
|
|
306
|
+
if (!split || !split.remainder.startsWith(SEPARATOR))
|
|
240
307
|
return null;
|
|
241
|
-
}
|
|
308
|
+
return { schema, table, identity: split.identity, column: split.remainder.slice(1) };
|
|
242
309
|
}
|
|
243
310
|
/**
|
|
244
311
|
* Parse a tombstone key to extract components.
|
|
245
|
-
* Key format: tb:{schema}.{table}:{
|
|
312
|
+
* Key format: tb:{schema}.{table}:{identity}
|
|
313
|
+
*
|
|
314
|
+
* Returns the pk IDENTITY string; the raw pk lives in the record VALUE
|
|
315
|
+
* (`Tombstone.pk`).
|
|
246
316
|
*/
|
|
247
317
|
export function parseTombstoneKey(key) {
|
|
248
318
|
const keyStr = new TextDecoder().decode(key);
|
|
249
319
|
if (!keyStr.startsWith('tb:'))
|
|
250
320
|
return null;
|
|
251
|
-
// tb:{schema}.{table}:{
|
|
321
|
+
// tb:{schema}.{table}:{identity}
|
|
252
322
|
const rest = keyStr.slice(3); // Remove 'tb:'
|
|
253
323
|
const firstDot = rest.indexOf('.');
|
|
254
324
|
if (firstDot === -1)
|
|
@@ -259,14 +329,7 @@ export function parseTombstoneKey(key) {
|
|
|
259
329
|
if (firstColon === -1)
|
|
260
330
|
return null;
|
|
261
331
|
const table = afterDot.slice(0, firstColon);
|
|
262
|
-
|
|
263
|
-
try {
|
|
264
|
-
const pk = decodePK(pkJson);
|
|
265
|
-
return { schema, table, pk };
|
|
266
|
-
}
|
|
267
|
-
catch {
|
|
268
|
-
return null;
|
|
269
|
-
}
|
|
332
|
+
return { schema, table, identity: afterDot.slice(firstColon + 1) };
|
|
270
333
|
}
|
|
271
334
|
/**
|
|
272
335
|
* Parse a schema migration key to extract components.
|
|
@@ -324,18 +387,20 @@ export function deserializeHLCFromKey(buffer) {
|
|
|
324
387
|
}
|
|
325
388
|
/**
|
|
326
389
|
* Build a change log key.
|
|
327
|
-
* Format: cl:{hlc_bytes}{type_byte}{schema}.{table}:{
|
|
390
|
+
* Format: cl:{hlc_bytes}{type_byte}{schema}.{table}:{identity_length}:{identity}[:{column}]
|
|
328
391
|
*
|
|
329
392
|
* The HLC comes first to enable efficient range scans by time.
|
|
330
393
|
* type_byte: 0x01 for column change, 0x02 for delete
|
|
394
|
+
* The identity is length-prefixed for the same reason as {@link buildColumnVersionKey}.
|
|
331
395
|
*/
|
|
332
|
-
export function buildChangeLogKey(hlc, entryType, schemaName, tableName,
|
|
396
|
+
export function buildChangeLogKey(hlc, entryType, schemaName, tableName, identity, column) {
|
|
333
397
|
assertKeyableIdentifiers(schemaName, tableName, ...(column !== undefined ? [column] : []));
|
|
334
398
|
const hlcBytes = serializeHLCForKey(hlc);
|
|
335
399
|
const typeByte = entryType === 'column' ? 0x01 : 0x02;
|
|
400
|
+
const pkPart = `${identity.length}${SEPARATOR}${identity}`;
|
|
336
401
|
const suffix = column
|
|
337
|
-
? `${schemaName}.${tableName}${SEPARATOR}${
|
|
338
|
-
: `${schemaName}.${tableName}${SEPARATOR}${
|
|
402
|
+
? `${schemaName}.${tableName}${SEPARATOR}${pkPart}${SEPARATOR}${column}`
|
|
403
|
+
: `${schemaName}.${tableName}${SEPARATOR}${pkPart}`;
|
|
339
404
|
const suffixBytes = encoder.encode(suffix);
|
|
340
405
|
// cl: (3) + hlc (30) + type (1) + suffix
|
|
341
406
|
const key = new Uint8Array(3 + 30 + 1 + suffixBytes.length);
|
|
@@ -399,7 +464,7 @@ export function parseChangeLogKey(key) {
|
|
|
399
464
|
const typeByte = key[33];
|
|
400
465
|
const entryType = typeByte === 0x01 ? 'column' : 'delete';
|
|
401
466
|
const suffixStr = new TextDecoder().decode(key.slice(34));
|
|
402
|
-
// Parse suffix: {schema}.{table}:{
|
|
467
|
+
// Parse suffix: {schema}.{table}:{identity_length}:{identity}[:{column}]
|
|
403
468
|
const firstDot = suffixStr.indexOf('.');
|
|
404
469
|
if (firstDot === -1)
|
|
405
470
|
return null;
|
|
@@ -409,42 +474,33 @@ export function parseChangeLogKey(key) {
|
|
|
409
474
|
if (firstColon === -1)
|
|
410
475
|
return null;
|
|
411
476
|
const table = afterDot.slice(0, firstColon);
|
|
412
|
-
const
|
|
477
|
+
const split = splitLengthPrefixedIdentity(afterDot.slice(firstColon + 1));
|
|
478
|
+
if (!split)
|
|
479
|
+
return null;
|
|
413
480
|
if (entryType === 'column') {
|
|
414
|
-
|
|
415
|
-
if (lastColon === -1)
|
|
481
|
+
if (!split.remainder.startsWith(SEPARATOR))
|
|
416
482
|
return null;
|
|
417
|
-
|
|
418
|
-
const column = afterTable.slice(lastColon + 1);
|
|
419
|
-
try {
|
|
420
|
-
const pk = decodePK(pkJson);
|
|
421
|
-
return { hlc, entryType, schema, table, pk, column };
|
|
422
|
-
}
|
|
423
|
-
catch {
|
|
424
|
-
return null;
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
else {
|
|
428
|
-
// Delete entry - no column
|
|
429
|
-
try {
|
|
430
|
-
const pk = decodePK(afterTable);
|
|
431
|
-
return { hlc, entryType, schema, table, pk };
|
|
432
|
-
}
|
|
433
|
-
catch {
|
|
434
|
-
return null;
|
|
435
|
-
}
|
|
483
|
+
return { hlc, entryType, schema, table, identity: split.identity, column: split.remainder.slice(1) };
|
|
436
484
|
}
|
|
485
|
+
// Delete entry - no column
|
|
486
|
+
if (split.remainder.length !== 0)
|
|
487
|
+
return null;
|
|
488
|
+
return { hlc, entryType, schema, table, identity: split.identity };
|
|
437
489
|
}
|
|
438
490
|
/**
|
|
439
491
|
* Build a quarantine key for a held out-of-basis straggler change.
|
|
440
|
-
* Format: qt:{schema}.{table}: + hlc_bytes(30) + type_byte(1) + :{
|
|
492
|
+
* Format: qt:{schema}.{table}: + hlc_bytes(30) + type_byte(1) + :{raw_identity}[:{column}]
|
|
441
493
|
*
|
|
442
494
|
* Unlike the change log (`cl:`), the table prefix comes BEFORE the HLC so the
|
|
443
495
|
* range scans by `(schema, table)` for operator inspection. The HLC + type + pk
|
|
444
496
|
* (+ column) suffix make the key idempotent: re-applying the same straggler
|
|
445
|
-
* change (same HLC) overwrites its own entry rather than accumulating.
|
|
446
|
-
*
|
|
447
|
-
* encoding
|
|
497
|
+
* change (same HLC) overwrites its own entry rather than accumulating.
|
|
498
|
+
*
|
|
499
|
+
* The pk component uses the RAW identity encoding ({@link encodeRawPkIdentity})
|
|
500
|
+
* deliberately: a quarantined table is out of the local basis, so no schema —
|
|
501
|
+
* and hence no collation/transform keying — can exist for it. Raw is sound here
|
|
502
|
+
* because the `(hlc, type)` component already makes the key unique per change,
|
|
503
|
+
* and it is bigint-safe (the former `JSON.stringify` threw on a bigint pk).
|
|
448
504
|
*
|
|
449
505
|
* The value (not the key) carries the serialized change verbatim, so quarantine
|
|
450
506
|
* keys are written and pruned but never parsed back.
|
|
@@ -454,9 +510,10 @@ export function buildQuarantineKey(schemaName, tableName, hlc, entryType, pk, co
|
|
|
454
510
|
const prefixBytes = encoder.encode(`qt:${schemaName}.${tableName}${SEPARATOR}`);
|
|
455
511
|
const hlcBytes = serializeHLCForKey(hlc);
|
|
456
512
|
const typeByte = entryType === 'column' ? 0x01 : 0x02;
|
|
513
|
+
const rawIdentity = encodeRawPkIdentity(pk);
|
|
457
514
|
const suffix = column
|
|
458
|
-
? `${SEPARATOR}${
|
|
459
|
-
: `${SEPARATOR}${
|
|
515
|
+
? `${SEPARATOR}${rawIdentity}${SEPARATOR}${column}`
|
|
516
|
+
: `${SEPARATOR}${rawIdentity}`;
|
|
460
517
|
const suffixBytes = encoder.encode(suffix);
|
|
461
518
|
const key = new Uint8Array(prefixBytes.length + 30 + 1 + suffixBytes.length);
|
|
462
519
|
let offset = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/metadata/keys.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../../src/metadata/keys.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-table pk-identity keying resolution.
|
|
3
|
+
*
|
|
4
|
+
* The sync layer files every per-row record (`cv:`/`tb:`/`cl:`) under the row's
|
|
5
|
+
* IDENTITY — the same "same row?" answer the rest of the engine gives: each pk
|
|
6
|
+
* column normalized under its KEY COLLATION ('apple' ≡ 'APPLE' under nocase) and
|
|
7
|
+
* its logical type's semantic key transform ('PT1H' ≡ 'PT60M' for TIMESPAN).
|
|
8
|
+
* This module resolves that keying from a table's schema, mirroring
|
|
9
|
+
* `makePkKeySerializer` in `@quereus/isolation` (the overlay's row-alignment
|
|
10
|
+
* key) so the two layers can never disagree on row identity.
|
|
11
|
+
*
|
|
12
|
+
* Identity is derived and lossy; the row's ADDRESS (a real, type-valid
|
|
13
|
+
* `SqlValue[]` — any spelling from the equivalence class) lives in the record
|
|
14
|
+
* value and on the wire. See docs/sync.md § Row identity vs. address.
|
|
15
|
+
*/
|
|
16
|
+
import { type KeyNormalizerResolver, type SqlValue, type TableSchema } from '@quereus/quereus';
|
|
17
|
+
import { type PkKeying } from './keys.js';
|
|
18
|
+
/**
|
|
19
|
+
* Resolves the pk keying for a `(schema, table)`. Throws when the table's
|
|
20
|
+
* schema is unavailable (see {@link createPkKeyingResolver} — a raw fallback
|
|
21
|
+
* there would flip every already-filed identity the moment the schema appears).
|
|
22
|
+
*/
|
|
23
|
+
export type PkKeyingResolver = (schemaName: string, tableName: string) => PkKeying;
|
|
24
|
+
/**
|
|
25
|
+
* Resolve a table's {@link PkKeying} from its schema:
|
|
26
|
+
* - normalizers: each pk column's key collation via {@link pkKeyCollationName}
|
|
27
|
+
* (its own declared collation for a textual column — the store reconciles an
|
|
28
|
+
* undecorated text pk to the table key collation at CREATE, so the registered
|
|
29
|
+
* schema always carries it; BINARY for text-capable-but-not-textual columns;
|
|
30
|
+
* identity for never-text columns via `resolver(undefined)`).
|
|
31
|
+
* - transforms: the engine's {@link semanticKeyTransform} (the logical type's
|
|
32
|
+
* `groupKey` — today TIMESPAN → total seconds). Deliberately the ENGINE
|
|
33
|
+
* transform, not the store's byte-order variant: identity strings need
|
|
34
|
+
* equality, not memcmp order, so JSON's canonical text is already faithful.
|
|
35
|
+
*/
|
|
36
|
+
export declare function resolvePkKeying(schema: TableSchema, resolver: KeyNormalizerResolver): PkKeying;
|
|
37
|
+
/**
|
|
38
|
+
* Build the {@link PkKeyingResolver} a `SyncManagerImpl` threads through its
|
|
39
|
+
* metadata stores.
|
|
40
|
+
*
|
|
41
|
+
* - **No schema oracle** (relay-only deployment, e.g. a coordinator): every
|
|
42
|
+
* table resolves to {@link RAW_PK_KEYING}. Raw identity is STABLE there — an
|
|
43
|
+
* oracle can never appear later in the manager's life, so the identity never
|
|
44
|
+
* flips — and bigint-safe, unlike the former `JSON.stringify` encoding.
|
|
45
|
+
* - **Oracle wired, table unknown**: THROW. There is no sound identity for a
|
|
46
|
+
* schemaless table, and silently falling back to raw values would orphan
|
|
47
|
+
* everything already filed the moment the schema appears. (The apply path
|
|
48
|
+
* never reaches here for an out-of-basis table — those changes are diverted
|
|
49
|
+
* to quarantine, whose keys use the raw encoding, before any keying lookup.)
|
|
50
|
+
* - **Oracle wired, table known**: resolve via {@link resolvePkKeying}, cached
|
|
51
|
+
* per `TableSchema` OBJECT — replicated/local DDL registers a fresh frozen
|
|
52
|
+
* schema object, so the WeakMap invalidates on any schema change for free.
|
|
53
|
+
*/
|
|
54
|
+
export declare function createPkKeyingResolver(getTableSchema: ((schemaName: string, tableName: string) => TableSchema | undefined) | undefined, keyNormalizerResolver: KeyNormalizerResolver | undefined): PkKeyingResolver;
|
|
55
|
+
/**
|
|
56
|
+
* Closure form for one known schema — used where a caller already holds the
|
|
57
|
+
* `TableSchema` (the store adapter's per-table row grouping).
|
|
58
|
+
*/
|
|
59
|
+
export declare function makePkIdentityEncoder(schema: TableSchema, resolver: KeyNormalizerResolver): (pk: SqlValue[]) => string;
|
|
60
|
+
//# sourceMappingURL=pk-identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pk-identity.d.ts","sourceRoot":"","sources":["../../../src/metadata/pk-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAGN,KAAK,qBAAqB,EAC1B,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAmC,KAAK,QAAQ,EAAE,MAAM,WAAW,CAAC;AAE3E;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,QAAQ,CAAC;AAEnF;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,qBAAqB,GAAG,QAAQ,CAc9F;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,sBAAsB,CACrC,cAAc,EAAE,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC,GAAG,SAAS,EAChG,qBAAqB,EAAE,qBAAqB,GAAG,SAAS,GACtD,gBAAgB,CAwBlB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CACpC,MAAM,EAAE,WAAW,EACnB,QAAQ,EAAE,qBAAqB,GAC7B,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,MAAM,CAG5B"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-table pk-identity keying resolution.
|
|
3
|
+
*
|
|
4
|
+
* The sync layer files every per-row record (`cv:`/`tb:`/`cl:`) under the row's
|
|
5
|
+
* IDENTITY — the same "same row?" answer the rest of the engine gives: each pk
|
|
6
|
+
* column normalized under its KEY COLLATION ('apple' ≡ 'APPLE' under nocase) and
|
|
7
|
+
* its logical type's semantic key transform ('PT1H' ≡ 'PT60M' for TIMESPAN).
|
|
8
|
+
* This module resolves that keying from a table's schema, mirroring
|
|
9
|
+
* `makePkKeySerializer` in `@quereus/isolation` (the overlay's row-alignment
|
|
10
|
+
* key) so the two layers can never disagree on row identity.
|
|
11
|
+
*
|
|
12
|
+
* Identity is derived and lossy; the row's ADDRESS (a real, type-valid
|
|
13
|
+
* `SqlValue[]` — any spelling from the equivalence class) lives in the record
|
|
14
|
+
* value and on the wire. See docs/sync.md § Row identity vs. address.
|
|
15
|
+
*/
|
|
16
|
+
import { pkKeyCollationName, semanticKeyTransform, } from '@quereus/quereus';
|
|
17
|
+
import { BUILTIN_KEY_NORMALIZER_RESOLVER } from '@quereus/store';
|
|
18
|
+
import { encodePkIdentity, RAW_PK_KEYING } from './keys.js';
|
|
19
|
+
/**
|
|
20
|
+
* Resolve a table's {@link PkKeying} from its schema:
|
|
21
|
+
* - normalizers: each pk column's key collation via {@link pkKeyCollationName}
|
|
22
|
+
* (its own declared collation for a textual column — the store reconciles an
|
|
23
|
+
* undecorated text pk to the table key collation at CREATE, so the registered
|
|
24
|
+
* schema always carries it; BINARY for text-capable-but-not-textual columns;
|
|
25
|
+
* identity for never-text columns via `resolver(undefined)`).
|
|
26
|
+
* - transforms: the engine's {@link semanticKeyTransform} (the logical type's
|
|
27
|
+
* `groupKey` — today TIMESPAN → total seconds). Deliberately the ENGINE
|
|
28
|
+
* transform, not the store's byte-order variant: identity strings need
|
|
29
|
+
* equality, not memcmp order, so JSON's canonical text is already faithful.
|
|
30
|
+
*/
|
|
31
|
+
export function resolvePkKeying(schema, resolver) {
|
|
32
|
+
// Defensive `?? []` / logicalType guard: a real TableSchema always carries
|
|
33
|
+
// primaryKeyDefinition and typed columns, but test oracles stub minimal
|
|
34
|
+
// schemas ({ columns: [{ name }] } only). A missing piece degrades that
|
|
35
|
+
// position to the identity normalizer (raw value identity) — the same
|
|
36
|
+
// treatment a keyless stub got before — instead of crashing.
|
|
37
|
+
const pkDef = schema.primaryKeyDefinition ?? [];
|
|
38
|
+
return {
|
|
39
|
+
normalizers: pkDef.map(def => {
|
|
40
|
+
const column = schema.columns[def.index];
|
|
41
|
+
return resolver(column?.logicalType ? pkKeyCollationName(column) : undefined);
|
|
42
|
+
}),
|
|
43
|
+
transforms: pkDef.map(def => semanticKeyTransform(schema.columns[def.index]?.logicalType)),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Build the {@link PkKeyingResolver} a `SyncManagerImpl` threads through its
|
|
48
|
+
* metadata stores.
|
|
49
|
+
*
|
|
50
|
+
* - **No schema oracle** (relay-only deployment, e.g. a coordinator): every
|
|
51
|
+
* table resolves to {@link RAW_PK_KEYING}. Raw identity is STABLE there — an
|
|
52
|
+
* oracle can never appear later in the manager's life, so the identity never
|
|
53
|
+
* flips — and bigint-safe, unlike the former `JSON.stringify` encoding.
|
|
54
|
+
* - **Oracle wired, table unknown**: THROW. There is no sound identity for a
|
|
55
|
+
* schemaless table, and silently falling back to raw values would orphan
|
|
56
|
+
* everything already filed the moment the schema appears. (The apply path
|
|
57
|
+
* never reaches here for an out-of-basis table — those changes are diverted
|
|
58
|
+
* to quarantine, whose keys use the raw encoding, before any keying lookup.)
|
|
59
|
+
* - **Oracle wired, table known**: resolve via {@link resolvePkKeying}, cached
|
|
60
|
+
* per `TableSchema` OBJECT — replicated/local DDL registers a fresh frozen
|
|
61
|
+
* schema object, so the WeakMap invalidates on any schema change for free.
|
|
62
|
+
*/
|
|
63
|
+
export function createPkKeyingResolver(getTableSchema, keyNormalizerResolver) {
|
|
64
|
+
if (!getTableSchema) {
|
|
65
|
+
return () => RAW_PK_KEYING;
|
|
66
|
+
}
|
|
67
|
+
// Built-ins-only fallback (BINARY/NOCASE/RTRIM; throws on any other name) for
|
|
68
|
+
// hosts that wired a schema oracle but no normalizer resolver — fails loud on
|
|
69
|
+
// a custom collation rather than mis-keying it.
|
|
70
|
+
const resolver = keyNormalizerResolver ?? BUILTIN_KEY_NORMALIZER_RESOLVER;
|
|
71
|
+
const cache = new WeakMap();
|
|
72
|
+
return (schemaName, tableName) => {
|
|
73
|
+
const schema = getTableSchema(schemaName, tableName);
|
|
74
|
+
if (!schema) {
|
|
75
|
+
throw new Error(`No table schema for ${schemaName}.${tableName} — sync pk identity is unresolvable `
|
|
76
|
+
+ `(out-of-basis changes are quarantined, never keyed; see metadata/pk-identity.ts)`);
|
|
77
|
+
}
|
|
78
|
+
let keying = cache.get(schema);
|
|
79
|
+
if (!keying) {
|
|
80
|
+
keying = resolvePkKeying(schema, resolver);
|
|
81
|
+
cache.set(schema, keying);
|
|
82
|
+
}
|
|
83
|
+
return keying;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Closure form for one known schema — used where a caller already holds the
|
|
88
|
+
* `TableSchema` (the store adapter's per-table row grouping).
|
|
89
|
+
*/
|
|
90
|
+
export function makePkIdentityEncoder(schema, resolver) {
|
|
91
|
+
const keying = resolvePkKeying(schema, resolver);
|
|
92
|
+
return pk => encodePkIdentity(pk, keying);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=pk-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pk-identity.js","sourceRoot":"","sources":["../../../src/metadata/pk-identity.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACN,kBAAkB,EAClB,oBAAoB,GAIpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAiB,MAAM,WAAW,CAAC;AAS3E;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAAC,MAAmB,EAAE,QAA+B;IACnF,2EAA2E;IAC3E,wEAAwE;IACxE,wEAAwE;IACxE,sEAAsE;IACtE,6DAA6D;IAC7D,MAAM,KAAK,GAAG,MAAM,CAAC,oBAAoB,IAAI,EAAE,CAAC;IAChD,OAAO;QACN,WAAW,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;YAC5B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YACzC,OAAO,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAC/E,CAAC,CAAC;QACF,UAAU,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,oBAAoB,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,CAAC;KAC1F,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,sBAAsB,CACrC,cAAgG,EAChG,qBAAwD;IAExD,IAAI,CAAC,cAAc,EAAE,CAAC;QACrB,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC;IAC5B,CAAC;IACD,8EAA8E;IAC9E,8EAA8E;IAC9E,gDAAgD;IAChD,MAAM,QAAQ,GAAG,qBAAqB,IAAI,+BAA+B,CAAC;IAC1E,MAAM,KAAK,GAAG,IAAI,OAAO,EAAyB,CAAC;IACnD,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CACd,uBAAuB,UAAU,IAAI,SAAS,sCAAsC;kBACjF,kFAAkF,CACrF,CAAC;QACH,CAAC;QACD,IAAI,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC3C,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,MAAM,CAAC;IACf,CAAC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACpC,MAAmB,EACnB,QAA+B;IAE/B,MAAM,MAAM,GAAG,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACjD,OAAO,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC3C,CAAC"}
|