@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.
@@ -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
- linkScopes(scopes: readonly {
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
- linkScope(source: OntologyObjectRef, linkId: string): Promise<MaterializationLinkScopeState>;
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":"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"}
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,gCAAgC,EAChC,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,kBAAkB,CACtB,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,GACjF,OAAO,CAAC,SAAS,gCAAgC,EAAE,CAAC;IAKjD,cAAc,CAClB,MAAM,EAAE,SAAS;QAAE,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,GACjF,OAAO,CAAC,SAAS,6BAA6B,EAAE,CAAC;YAmEtC,uBAAuB;IAmE9B,aAAa,CAClB,OAAO,EAAE,SAAS,iBAAiB,EAAE,EACrC,QAAQ,EAAE,MAAM,GACf,aAAa,CAAC,eAAe,EAAE,CAAC;IA2F5B,qBAAqB,CAC1B,KAAK,EAAE,wBAAwB,GAC9B,aAAa,CAAC,mBAAmB,EAAE,CAAC;IAkBjC,uBAAuB,CAC3B,QAAQ,EAAE,MAAM,EAChB,0BAA0B,EAAE,MAAM,EAClC,IAAI,EAAE,SAAS,iBAAiB,EAAE,GACjC,OAAO,CAAC,SAAS,4BAA4B,EAAE,CAAC;IAoB7C,qBAAqB,CACzB,QAAQ,EAAE,MAAM,EAChB,0BAA0B,EAAE,MAAM,EAClC,kBAAkB,EAAE,SAAS,MAAM,EAAE,EACrC,UAAU,EAAE,SAAS,OAAO,CAAC,mBAAmB,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,EAAE,GAC7E,OAAO,CAAC,SAAS,0BAA0B,EAAE,CAAC;IAwB3C,uBAAuB,CAC3B,GAAG,EAAE,iBAAiB,EACtB,IAAI,UAAQ,GACX,OAAO,CAAC;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAI/E,wBAAwB,CAC5B,IAAI,EAAE,SAAS,iBAAiB,EAAE,EAClC,IAAI,UAAQ,GACX,OAAO,CACR,WAAW,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CACxF;IAoCK,uBAAuB,CAC3B,GAAG,EAAE,eAAe,EACpB,IAAI,UAAQ,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAI/B,wBAAwB,CAC5B,IAAI,EAAE,SAAS,eAAe,EAAE,EAChC,IAAI,UAAQ,GACX,OAAO,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;YA4BhC,kBAAkB;YAuClB,4BAA4B;YAQ5B,yBAAyB;YA2BzB,uBAAuB;CA0HtC;AAoMD,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAM3D;AAUD,wBAAgB,kBAAkB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CASzD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sixb/pg",
3
- "version": "0.1.5",
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.4"
43
+ "@sixb/core": "0.1.6"
44
44
  },
45
45
  "devDependencies": {
46
- "@sixb/core": "0.1.4",
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 linkScopes(
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 scopes.map(({ source, linkId }) => {
514
- const key = linkScopeSortKey(source, linkId)
515
- return {
516
- ...finishScopeAccumulator(accumulators.get(key)!),
517
- sourceAssertion: sources.get(key) ?? null,
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 linkScopes = await reader.linkScopes(input.expected.linkScopes)
124
+ const linkScopeRevisions = await reader.linkScopeRevisions(input.expected.linkScopes)
125
125
  for (const [index, expected] of input.expected.linkScopes.entries()) {
126
- if (linkScopes[index]?.fingerprint !== expected.fingerprint) {
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.linkScopes(scopes.slice(offset, offset + input.pageRows)),
194
+ linkScopes: await reader.linkSlotStates(scopes.slice(offset, offset + input.pageRows)),
195
195
  points: [],
196
196
  }
197
197
  }