@sixb/pg 0.1.5 → 0.1.6
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/index.js +37 -25
- package/dist/index.js.map +4 -4
- package/dist/ontology-storage/materialization-state.d.ts +7 -3
- package/dist/ontology-storage/materialization-state.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/ontology-storage/materialization-state.ts +45 -29
- package/src/ontology-storage/materializations.ts +3 -3
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { OntologyLinkRef, OntologyObjectRef, TelemetrySeriesRef } from "@sixb/core/internal/materialization";
|
|
2
|
-
import type { MaterializationLinkScopeState, MaterializationLinkState, MaterializationObjectState, SourceReplacementLinkState, SourceReplacementObjectState, StoredTelemetryPoint } from "@sixb/core/storage";
|
|
2
|
+
import type { MaterializationLinkScopeRevision, MaterializationLinkScopeState, MaterializationLinkState, MaterializationObjectState, SourceReplacementLinkState, SourceReplacementObjectState, StoredTelemetryPoint } from "@sixb/core/storage";
|
|
3
3
|
import type { SQLClient } from "../pg-client";
|
|
4
4
|
export declare const PG_MATERIALIZATION_WORK_TABLE = "ontology_materialization_work";
|
|
5
5
|
export declare const PG_REPLACEMENT_WORK_TABLE = "ontology_replacement_work";
|
|
@@ -35,11 +35,15 @@ export declare class PgMaterializationStateReader {
|
|
|
35
35
|
readonly series: TelemetrySeriesRef;
|
|
36
36
|
readonly at: string;
|
|
37
37
|
}[], lock?: boolean): Promise<readonly StoredTelemetryPoint[]>;
|
|
38
|
-
|
|
38
|
+
linkScopeRevisions(scopes: readonly {
|
|
39
|
+
readonly source: OntologyObjectRef;
|
|
40
|
+
readonly linkId: string;
|
|
41
|
+
}[]): Promise<readonly MaterializationLinkScopeRevision[]>;
|
|
42
|
+
linkSlotStates(scopes: readonly {
|
|
39
43
|
readonly source: OntologyObjectRef;
|
|
40
44
|
readonly linkId: string;
|
|
41
45
|
}[]): Promise<readonly MaterializationLinkScopeState[]>;
|
|
42
|
-
|
|
46
|
+
private readEffectiveLinkScopes;
|
|
43
47
|
incidentLinks(objects: readonly OntologyObjectRef[], pageRows: number): AsyncIterable<OntologyLinkRef[]>;
|
|
44
48
|
replacementIdentities(input: ReplacementIdentityInput): AsyncIterable<ReplacementIdentity[]>;
|
|
45
49
|
replacementObjectStates(sourceId: string, candidateMaterializationId: string, refs: readonly OntologyObjectRef[]): Promise<readonly SourceReplacementObjectState[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materialization-state.d.ts","sourceRoot":"","sources":["../../src/ontology-storage/materialization-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,eAAe,EACf,iBAAiB,EAEjB,kBAAkB,EACnB,MAAM,qCAAqC,CAAA;AAgB5C,OAAO,KAAK,EACV,6BAA6B,EAC7B,wBAAwB,EACxB,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAO5B,oBAAoB,EACrB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAW7C,eAAO,MAAM,6BAA6B,kCAAkC,CAAA;AAC5E,eAAO,MAAM,yBAAyB,8BAA8B,CAAA;AAyEpE,MAAM,MAAM,mBAAmB,GAC3B;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;IACvB,QAAQ,CAAC,GAAG,EAAE,iBAAiB,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,IAAI,CAAA;CAC5B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,EAAE,eAAe,CAAA;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAA;CAC/B,CAAA;AAOL,UAAU,wBAAwB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,0BAA0B,EAAE,MAAM,CAAA;IAC3C,QAAQ,CAAC,yBAAyB,EAAE,MAAM,GAAG,IAAI,CAAA;IACjD,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AASD,qBAAa,4BAA4B;IAErC,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,QAAQ,CAAC,SAAS,EAAE,MAAM;gBADT,GAAG,EAAE,SAAS,EACtB,SAAS,EAAE,MAAM;IAGtB,WAAW,CAAC,GAAG,EAAE,iBAAiB,GAAG,OAAO,CAAC,0BAA0B,CAAC;IAKxE,YAAY,CAChB,IAAI,EAAE,SAAS,iBAAiB,EAAE,GACjC,OAAO,CAAC,SAAS,0BAA0B,EAAE,CAAC;IA6F3C,SAAS,CAAC,GAAG,EAAE,eAAe,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAKlE,UAAU,CAAC,IAAI,EAAE,SAAS,eAAe,EAAE,GAAG,OAAO,CAAC,SAAS,wBAAwB,EAAE,CAAC;IAkG1F,UAAU,CACd,MAAM,EAAE,kBAAkB,EAC1B,EAAE,EAAE,MAAM,EACV,IAAI,UAAQ,GACX,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;IAIjC,WAAW,CACf,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,EAAE,kBAAkB,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,EAC/E,IAAI,UAAQ,GACX,OAAO,CAAC,SAAS,oBAAoB,EAAE,CAAC;IAgCrC,
|
|
1
|
+
{"version":3,"file":"materialization-state.d.ts","sourceRoot":"","sources":["../../src/ontology-storage/materialization-state.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sixb/pg",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.6",
|
|
4
4
|
"description": "PostgreSQL storage provider for Sixb",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"sixb",
|
|
@@ -40,10 +40,10 @@
|
|
|
40
40
|
"postgres": "^3.4.5"
|
|
41
41
|
},
|
|
42
42
|
"peerDependencies": {
|
|
43
|
-
"@sixb/core": "0.1.
|
|
43
|
+
"@sixb/core": "0.1.6"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
|
-
"@sixb/core": "0.1.
|
|
46
|
+
"@sixb/core": "0.1.6",
|
|
47
47
|
"@types/bun": "latest",
|
|
48
48
|
"typescript": "^5.7.0"
|
|
49
49
|
},
|
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
startScopeAccumulator,
|
|
23
23
|
} from "@sixb/core/internal/ontology-storage-provider"
|
|
24
24
|
import type {
|
|
25
|
+
MaterializationLinkScopeRevision,
|
|
25
26
|
MaterializationLinkScopeState,
|
|
26
27
|
MaterializationLinkState,
|
|
27
28
|
MaterializationObjectState,
|
|
@@ -407,7 +408,14 @@ export class PgMaterializationStateReader {
|
|
|
407
408
|
})
|
|
408
409
|
}
|
|
409
410
|
|
|
410
|
-
async
|
|
411
|
+
async linkScopeRevisions(
|
|
412
|
+
scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]
|
|
413
|
+
): Promise<readonly MaterializationLinkScopeRevision[]> {
|
|
414
|
+
if (scopes.length === 0) return []
|
|
415
|
+
return (await this.readEffectiveLinkScopes(scopes)).revisions
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
async linkSlotStates(
|
|
411
419
|
scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]
|
|
412
420
|
): Promise<readonly MaterializationLinkScopeState[]> {
|
|
413
421
|
if (scopes.length === 0) return []
|
|
@@ -417,12 +425,6 @@ export class PgMaterializationStateReader {
|
|
|
417
425
|
source_id: source.primaryId,
|
|
418
426
|
link_id: linkId,
|
|
419
427
|
}))
|
|
420
|
-
const accumulators = new Map(
|
|
421
|
-
scopes.map(({ source, linkId }) => {
|
|
422
|
-
const key = linkScopeSortKey(source, linkId)
|
|
423
|
-
return [key, startScopeAccumulator(source, linkId)] as const
|
|
424
|
-
})
|
|
425
|
-
)
|
|
426
428
|
const requestedParameter = jsonParameter(this.sql, requested)
|
|
427
429
|
const [sourceRows, slotOverrideRows] = await Promise.all([
|
|
428
430
|
this.sql<PgOntologySourceAssertionRow[]>`
|
|
@@ -470,6 +472,37 @@ export class PgMaterializationStateReader {
|
|
|
470
472
|
return [linkScopeSortKey(stored.ref.source, stored.ref.linkId), stored] as const
|
|
471
473
|
})
|
|
472
474
|
)
|
|
475
|
+
const { revisions, effective } = await this.readEffectiveLinkScopes(scopes)
|
|
476
|
+
return scopes.map(({ source, linkId }, index) => {
|
|
477
|
+
const key = linkScopeSortKey(source, linkId)
|
|
478
|
+
return {
|
|
479
|
+
...revisions[index]!,
|
|
480
|
+
sourceAssertion: sources.get(key) ?? null,
|
|
481
|
+
override: overrides.get(key) ?? null,
|
|
482
|
+
effective: effective.get(key) ?? null,
|
|
483
|
+
}
|
|
484
|
+
})
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
private async readEffectiveLinkScopes(
|
|
488
|
+
scopes: readonly { readonly source: OntologyObjectRef; readonly linkId: string }[]
|
|
489
|
+
): Promise<{
|
|
490
|
+
readonly revisions: readonly MaterializationLinkScopeRevision[]
|
|
491
|
+
readonly effective: ReadonlyMap<string, EffectiveLinkSnapshot | null>
|
|
492
|
+
}> {
|
|
493
|
+
const requested = scopes.map(({ source, linkId }) => ({
|
|
494
|
+
scope_sort_key: linkScopeSortKey(source, linkId),
|
|
495
|
+
source_type_id: source.objectTypeId,
|
|
496
|
+
source_id: source.primaryId,
|
|
497
|
+
link_id: linkId,
|
|
498
|
+
}))
|
|
499
|
+
const requestedParameter = jsonParameter(this.sql, requested)
|
|
500
|
+
const accumulators = new Map(
|
|
501
|
+
scopes.map(({ source, linkId }) => {
|
|
502
|
+
const key = linkScopeSortKey(source, linkId)
|
|
503
|
+
return [key, startScopeAccumulator(source, linkId)] as const
|
|
504
|
+
})
|
|
505
|
+
)
|
|
473
506
|
const effective = new Map<string, EffectiveLinkSnapshot | null>()
|
|
474
507
|
let scopeCursor: string | null = null
|
|
475
508
|
let linkCursor: string | null = null
|
|
@@ -510,29 +543,12 @@ export class PgMaterializationStateReader {
|
|
|
510
543
|
scopeCursor = last.scope_sort_key
|
|
511
544
|
linkCursor = last.link_sort_key
|
|
512
545
|
}
|
|
513
|
-
return
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
override: overrides.get(key) ?? null,
|
|
519
|
-
effective: effective.get(key) ?? null,
|
|
520
|
-
}
|
|
521
|
-
})
|
|
522
|
-
}
|
|
523
|
-
|
|
524
|
-
async linkScope(
|
|
525
|
-
source: OntologyObjectRef,
|
|
526
|
-
linkId: string
|
|
527
|
-
): Promise<MaterializationLinkScopeState> {
|
|
528
|
-
const [scope] = await this.linkScopes([{ source, linkId }])
|
|
529
|
-
if (!scope) {
|
|
530
|
-
throw new MaterializationConflictError(
|
|
531
|
-
"effective-state",
|
|
532
|
-
"Link scope lookup returned no row."
|
|
533
|
-
)
|
|
546
|
+
return {
|
|
547
|
+
revisions: scopes.map(({ source, linkId }) =>
|
|
548
|
+
finishScopeAccumulator(accumulators.get(linkScopeSortKey(source, linkId))!)
|
|
549
|
+
),
|
|
550
|
+
effective,
|
|
534
551
|
}
|
|
535
|
-
return scope
|
|
536
552
|
}
|
|
537
553
|
|
|
538
554
|
async *incidentLinks(
|
|
@@ -121,9 +121,9 @@ export class PgOntologyMaterializationStorage implements OntologyMaterialization
|
|
|
121
121
|
for (const expected of input.expected.links) {
|
|
122
122
|
this.assertLink(linkRevisions.get(linkRefKey(expected.ref)), expected)
|
|
123
123
|
}
|
|
124
|
-
const
|
|
124
|
+
const linkScopeRevisions = await reader.linkScopeRevisions(input.expected.linkScopes)
|
|
125
125
|
for (const [index, expected] of input.expected.linkScopes.entries()) {
|
|
126
|
-
if (
|
|
126
|
+
if (linkScopeRevisions[index]?.fingerprint !== expected.fingerprint) {
|
|
127
127
|
throw new MaterializationConflictError(
|
|
128
128
|
"effective-state",
|
|
129
129
|
`Expected link scope changed for ${expected.source.objectTypeId}:${expected.source.primaryId}.${expected.linkId}.`
|
|
@@ -191,7 +191,7 @@ export class PgOntologyMaterializationStorage implements OntologyMaterialization
|
|
|
191
191
|
yield {
|
|
192
192
|
objects: [],
|
|
193
193
|
links: [],
|
|
194
|
-
linkScopes: await reader.
|
|
194
|
+
linkScopes: await reader.linkSlotStates(scopes.slice(offset, offset + input.pageRows)),
|
|
195
195
|
points: [],
|
|
196
196
|
}
|
|
197
197
|
}
|