@cavelang/query 0.22.0 → 0.27.3

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 CHANGED
@@ -69,6 +69,13 @@ covers one second.
69
69
  `?x EXTENDS+ ?x` finds nodes on cycles, not every reachable pair.
70
70
  - Transitive patterns support endpoint slots only; tag/context/WHERE
71
71
  filters on them are rejected rather than silently ignored.
72
+ - **`{ support: true }` attaches supporting edge rows to transitive
73
+ matches**: `match.rows` lists the visible positive edges of the verb
74
+ on some path between the matched endpoints (`match.row` stays absent;
75
+ alias links widen the paths under `aliases` but are not edges
76
+ themselves). Off by default — the support join costs more than pair
77
+ enumeration. `@cavelang/automate` opts in so a trigger solution's
78
+ event test can see which edge rows it stands on (spec §29.2).
72
79
  - **`{ aliases: true }` resolves entity terms through the alias closure**
73
80
  (§13.6): current positive `ALIAS` claims as undirected edges. Matching
74
81
  widens — bound terms match aliased spellings, repeated variables compare
@@ -0,0 +1,14 @@
1
+ import type { Store } from '@cavelang/store';
2
+ import * as Compile from './compile.ts';
3
+ import * as Pattern from './pattern.ts';
4
+ export type { Match, Options } from './compile.ts';
5
+ /**
6
+ * Exact numeric attribute values are matched through normalized storage
7
+ * columns, not their as-written spelling: `0.9B users/wk` and
8
+ * `900M users/wk` denote the same number/unit pair. The compiler's existing
9
+ * value filter pushes the normalized comparison into SQL; the final check
10
+ * preserves exact unit and approximation semantics.
11
+ */
12
+ export declare const match: (store: Store, pattern: Pattern.t, options?: Compile.Options) => Compile.Match[];
13
+ export declare const query: (store: Store, input: string, options?: Compile.Options) => Compile.Match[];
14
+ //# sourceMappingURL=bounded.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounded.d.ts","sourceRoot":"","sources":["../../src/bounded.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAelD;;;;;;GAMG;AACH,eAAO,MAAM,KAAK,GAChB,OAAO,KAAK,EACZ,SAAS,OAAO,CAAC,CAAC,EAClB,UAAS,OAAO,CAAC,OAAY,KAC5B,OAAO,CAAC,KAAK,EAgCf,CAAA;AAED,eAAO,MAAM,KAAK,GAChB,OAAO,KAAK,EACZ,OAAO,MAAM,EACb,UAAS,OAAO,CAAC,OAAY,KAC5B,OAAO,CAAC,KAAK,EAC6B,CAAA"}
@@ -0,0 +1,57 @@
1
+ import { Value } from '@cavelang/core';
2
+ import * as Compile from "./compile.js";
3
+ import * as Pattern from "./pattern.js";
4
+ /**
5
+ * Compile historical queries against vocabulary reconstructed at the same
6
+ * transaction-time boundary as the rows. The store remains otherwise
7
+ * unchanged; compiler SQL still applies the authoritative row boundary.
8
+ */
9
+ const storeAtBoundary = (store, options) => {
10
+ if (options.asOf === undefined) {
11
+ return store;
12
+ }
13
+ const registry = store.registryAsOf(options.asOf);
14
+ return { ...store, registry: () => registry };
15
+ };
16
+ /**
17
+ * Exact numeric attribute values are matched through normalized storage
18
+ * columns, not their as-written spelling: `0.9B users/wk` and
19
+ * `900M users/wk` denote the same number/unit pair. The compiler's existing
20
+ * value filter pushes the normalized comparison into SQL; the final check
21
+ * preserves exact unit and approximation semantics.
22
+ */
23
+ export const match = (store, pattern, options = {}) => {
24
+ if (pattern.payload.kind !== 'attribute' || pattern.payload.value.kind !== 'term') {
25
+ return Compile.match(storeAtBoundary(store, options), pattern, options);
26
+ }
27
+ const value = Value.parse(pattern.payload.value.text);
28
+ if (value.kind !== 'number' || value.num === undefined) {
29
+ return Compile.match(storeAtBoundary(store, options), pattern, options);
30
+ }
31
+ const expectedNum = value.num;
32
+ const filter = {
33
+ field: 'value', op: '=', value: expectedNum,
34
+ ...value.unit === undefined ? {} : { unit: value.unit }
35
+ };
36
+ const normalized = {
37
+ ...pattern,
38
+ payload: {
39
+ kind: 'attribute',
40
+ attribute: pattern.payload.attribute,
41
+ value: { kind: 'wildcard' }
42
+ },
43
+ filters: [...pattern.filters, filter]
44
+ };
45
+ const expectedUnit = value.unit ?? null;
46
+ const expectedApprox = value.approx ? 1 : 0;
47
+ return Compile.match(storeAtBoundary(store, options), normalized, options)
48
+ .filter(result => {
49
+ const row = result.row;
50
+ return row !== undefined &&
51
+ row.value_num === expectedNum &&
52
+ row.value_unit === expectedUnit &&
53
+ row.value_approx === expectedApprox;
54
+ });
55
+ };
56
+ export const query = (store, input, options = {}) => match(store, Pattern.parse(input), options);
57
+ //# sourceMappingURL=bounded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bounded.js","sourceRoot":"","sources":["../../src/bounded.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,11 @@
3
3
  *
4
4
  * Patterns run over *current beliefs* by default — the latest transaction
5
5
  * per claim key (spec §9.1) — pass `all` to match the full history,
6
- * `asOf` to resolve the belief state at a past moment (spec §12.3), or
6
+ * `asOf` to resolve the belief state at a past moment (spec §12.3),
7
7
  * `resolve` to match only the winners the §26 contradiction-resolution
8
- * policy picks among contested facts.
8
+ * policy picks among contested facts, or `at` to anchor in valid time
9
+ * (spec §32.4): claims whose time contexts don't cover the instant drop
10
+ * out and trajectory values interpolate.
9
11
  * Inverse verbs compile to the same physical query as their primary
10
12
  * (spec §12.1): `?x PART-OF monorepo` and `monorepo CONTAINS ?x` produce
11
13
  * identical SQL against canonical rows, with the pattern's subject binding
@@ -14,12 +16,30 @@
14
16
  * Transitive patterns (`terrier EXTENDS+ animal`) compile to a recursive
15
17
  * CTE over current, positive, non-retracted edges (depth-capped at 32).
16
18
  */
17
- import type { Row, Store } from '@cavelang/store';
19
+ import { Row } from '@cavelang/store';
20
+ import type { Store } from '@cavelang/store';
18
21
  import * as Pattern from './pattern.ts';
19
22
  /** One query solution: variable bindings plus the matched row (absent for transitive hops). */
20
23
  export type Match = {
21
24
  readonly bindings: Readonly<Record<string, string>>;
22
25
  readonly row?: Row.t;
26
+ /**
27
+ * Supporting edge rows of a transitive match — present only under
28
+ * `support`: the visible positive edges of the pattern's verb lying
29
+ * on some path between the matched endpoints.
30
+ */
31
+ readonly rows?: readonly Row.t[];
32
+ /**
33
+ * The row's trajectory value evaluated at the query's `at` instant by
34
+ * linear interpolation (spec §32.3) — present only when `at` is set,
35
+ * the row's value is a trajectory and its contexts carry exactly one
36
+ * closed time range. `text` is canonical CAVE value text.
37
+ */
38
+ readonly at?: {
39
+ readonly num: number;
40
+ readonly unit?: string;
41
+ readonly text: string;
42
+ };
23
43
  };
24
44
  export type Options = {
25
45
  /** Match all appended rows, not only current beliefs. */
@@ -51,6 +71,31 @@ export type Options = {
51
71
  * and policy reconstruct at the boundary); incompatible with `all`.
52
72
  */
53
73
  readonly resolve?: boolean;
74
+ /**
75
+ * Valid-time anchor (spec §32.4): a date-like period — read as its
76
+ * start instant — or a timestamp. Claims whose time contexts (bare or
77
+ * `time:`-prefixed date-like points and `..` ranges, spec §32.2) do
78
+ * not cover the instant are invisible; timeless claims always match.
79
+ * A matched trajectory value with one closed range context evaluates
80
+ * by linear interpolation at the instant, surfacing as the match's
81
+ * `at` and substituting into value-slot bindings. Orthogonal to
82
+ * `asOf`: `asOf` picks which rows are believed (transaction time),
83
+ * `at` picks when in the world the claims apply (valid time) — set
84
+ * both for "what did we believe then about that moment". Transitive
85
+ * patterns reject `at` (hop edges are not valid-time filtered).
86
+ */
87
+ readonly at?: string;
88
+ /**
89
+ * Attach supporting edge rows to transitive matches: each match's
90
+ * `rows` lists the visible positive edges of the verb on some path
91
+ * between its endpoints (alias links widen the paths under `aliases`
92
+ * but are not edges themselves). Off by default — the support join
93
+ * costs more than pair enumeration, and most callers need only
94
+ * bindings. `@cavelang/automate` opts in so its event filter can see
95
+ * which edge rows a trigger solution stands on (spec §29.2).
96
+ * Non-transitive patterns are unaffected.
97
+ */
98
+ readonly support?: boolean;
54
99
  };
55
100
  /**
56
101
  * Runs a CAVE-Q query against a store.
@@ -1 +1 @@
1
- {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC,+FAA+F;AAC/F,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACnD,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,yDAAyD;IACzD,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;;;;OAQG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AAiWD;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,KAAK,EAAE,OAAO,MAAM,EAAE,UAAS,OAAY,KAAG,KAAK,EACnC,CAAA;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO,CAAC,CAAC,EAAE,UAAS,OAAY,KAAG,KAAK,EA6BpF,CAAA"}
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,OAAO,EAAW,GAAG,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AAEvC,+FAA+F;AAC/F,MAAM,MAAM,KAAK,GAAG;IAClB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACnD,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,CAAA;IACpB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,EAAE,CAAA;IAChC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;CACtF,CAAA;AAED,MAAM,MAAM,OAAO,GAAG;IACpB,yDAAyD;IACzD,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;IACtB;;;;;OAKG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;;;;OAQG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB;;;;;;;;;OASG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA;AA6XD;;;;;;;;;GASG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,KAAK,EAAE,OAAO,MAAM,EAAE,UAAS,OAAY,KAAG,KAAK,EACnC,CAAA;AAiC7C;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,OAAO,KAAK,EAAE,SAAS,OAAO,CAAC,CAAC,EAAE,UAAS,OAAY,KAAG,KAAK,EA+EpF,CAAA"}
@@ -3,9 +3,11 @@
3
3
  *
4
4
  * Patterns run over *current beliefs* by default — the latest transaction
5
5
  * per claim key (spec §9.1) — pass `all` to match the full history,
6
- * `asOf` to resolve the belief state at a past moment (spec §12.3), or
6
+ * `asOf` to resolve the belief state at a past moment (spec §12.3),
7
7
  * `resolve` to match only the winners the §26 contradiction-resolution
8
- * policy picks among contested facts.
8
+ * policy picks among contested facts, or `at` to anchor in valid time
9
+ * (spec §32.4): claims whose time contexts don't cover the instant drop
10
+ * out and trajectory values interpolate.
9
11
  * Inverse verbs compile to the same physical query as their primary
10
12
  * (spec §12.1): `?x PART-OF monorepo` and `monorepo CONTAINS ?x` produce
11
13
  * identical SQL against canonical rows, with the pattern's subject binding
@@ -14,9 +16,9 @@
14
16
  * Transitive patterns (`terrier EXTENDS+ animal`) compile to a recursive
15
17
  * CTE over current, positive, non-retracted edges (depth-capped at 32).
16
18
  */
17
- import { Uuidv7, Value } from '@cavelang/core';
19
+ import { Time, Uuidv7, Value } from '@cavelang/core';
18
20
  import { Registry } from '@cavelang/canonical';
19
- import { Resolve } from '@cavelang/store';
21
+ import { Resolve, Row } from '@cavelang/store';
20
22
  import * as Pattern from "./pattern.js";
21
23
  /**
22
24
  * UUIDv7 interval `[lo, hi)` for a tx filter value: a bare date covers the
@@ -78,7 +80,9 @@ const baseSql = (options, policy) => {
78
80
  * `ALIAS` claims symmetrized (each written direction is its own claim key —
79
81
  * both assert the same undirected link); `alias_pair` its transitive
80
82
  * closure — every ordered pair of names currently believed to denote one
81
- * entity. Resolution always reads *current* beliefs, even under `all`:
83
+ * entity. Edges keep entity-form endpoints only: a `"…"`/`` `…` `` literal
84
+ * names a value, not an entity, so it never joins names into one closure.
85
+ * Resolution always reads *current* beliefs, even under `all`:
82
86
  * the closure is entity resolution as believed now, not as believed when
83
87
  * a row landed — except under `asOf`, where "now" is the boundary itself
84
88
  * and the closure reconstructs entity resolution as believed then
@@ -87,9 +91,11 @@ const baseSql = (options, policy) => {
87
91
  const aliasPairSql = (asOf) => `alias_edge(a, b) AS (
88
92
  SELECT c.subject, c.object FROM (${currentSql(asOf)}) c
89
93
  WHERE c.verb = 'ALIAS' AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
94
+ AND ${Row.entityTermSql('c.subject')} AND ${Row.entityTermSql('c.object')}
90
95
  UNION
91
96
  SELECT c.object, c.subject FROM (${currentSql(asOf)}) c
92
97
  WHERE c.verb = 'ALIAS' AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
98
+ AND ${Row.entityTermSql('c.subject')} AND ${Row.entityTermSql('c.object')}
93
99
  ), alias_pair(a, b) AS (
94
100
  SELECT a, b FROM alias_edge
95
101
  UNION
@@ -279,7 +285,10 @@ const compile = (pattern, registry, options, policy) => {
279
285
  }
280
286
  return bindings;
281
287
  };
282
- return { sql, params, bind, transitive: false };
288
+ const valueVars = [...varColumns]
289
+ .filter(([, columns]) => columns[0] === 'value_text')
290
+ .map(([name]) => name);
291
+ return { sql, params, bind, transitive: false, valueVars };
283
292
  };
284
293
  const compileTransitive = (pattern, verb, subjectSlot, objectSlot, options, policy) => {
285
294
  if (pattern.negated || pattern.filters.length > 0 || pattern.contexts.length > 0 || pattern.tags.length > 0 ||
@@ -312,17 +321,36 @@ const compileTransitive = (pattern, verb, subjectSlot, objectSlot, options, poli
312
321
  if (subjectSlot.kind === 'var' && objectSlot?.kind === 'var' && subjectSlot.name === objectSlot.name) {
313
322
  conditions.push(same('h.src', 'h.dst'));
314
323
  }
315
- const sql = `
316
- WITH RECURSIVE ${aliases ? `${aliasPairSql(options.asOf)}, ` : ''}cur AS (
317
- SELECT c.subject AS src, c.object AS dst
318
- FROM (${base}) c
319
- WHERE c.verb = ? AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
320
- ), hops(src, dst, depth) AS (
324
+ const withRecursive = `WITH RECURSIVE ${aliases ? `${aliasPairSql(options.asOf)}, ` : ''}`;
325
+ const hopsSql = `hops(src, dst, depth) AS (
321
326
  SELECT src, dst, 1 FROM cur
322
327
  UNION
323
328
  SELECT h.src, cur.dst, h.depth + 1 FROM hops h JOIN cur ON ${same('cur.src', 'h.dst')}
324
329
  WHERE h.depth < 32
330
+ )`;
331
+ // Support (an opt-in): an edge row backs a pair when its endpoints sit
332
+ // on some path between them — reflexive or through the same hop
333
+ // closure, so alias-equal endpoints connect exactly as matching did.
334
+ const sql = options.support === true ? `
335
+ ${withRecursive}edge AS (
336
+ SELECT c.* FROM (${base}) c
337
+ WHERE c.verb = ? AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
338
+ ), cur AS (
339
+ SELECT DISTINCT subject AS src, object AS dst FROM edge
340
+ ), ${hopsSql}, pair(src, dst) AS (
341
+ SELECT DISTINCT h.src, h.dst FROM hops h
342
+ ${conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : ''}
325
343
  )
344
+ SELECT p.src AS src, p.dst AS dst, e.*
345
+ FROM pair p JOIN edge e
346
+ ON (${same('e.subject', 'p.src')} OR EXISTS (SELECT 1 FROM hops f WHERE ${same('f.src', 'p.src')} AND ${same('f.dst', 'e.subject')}))
347
+ AND (${same('e.object', 'p.dst')} OR EXISTS (SELECT 1 FROM hops b WHERE ${same('b.src', 'e.object')} AND ${same('b.dst', 'p.dst')}))
348
+ ORDER BY p.src, p.dst, e.tx` : `
349
+ ${withRecursive}cur AS (
350
+ SELECT c.subject AS src, c.object AS dst
351
+ FROM (${base}) c
352
+ WHERE c.verb = ? AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
353
+ ), ${hopsSql}
326
354
  SELECT DISTINCT h.src AS src, h.dst AS dst FROM hops h
327
355
  ${conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : ''}
328
356
  ORDER BY h.src, h.dst`;
@@ -336,7 +364,7 @@ ORDER BY h.src, h.dst`;
336
364
  }
337
365
  return bindings;
338
366
  };
339
- return { sql, params, bind, transitive: true };
367
+ return { sql, params, bind, transitive: true, valueVars: [] };
340
368
  };
341
369
  /**
342
370
  * Runs a CAVE-Q query against a store.
@@ -349,6 +377,32 @@ ORDER BY h.src, h.dst`;
349
377
  * ```
350
378
  */
351
379
  export const query = (store, input, options = {}) => match(store, Pattern.parse(input), options);
380
+ /**
381
+ * The row's trajectory value evaluated at the instant (spec §32.3):
382
+ * linear interpolation over the single closed time-range context, with
383
+ * endpoint values anchored at the range periods' start instants and the
384
+ * end value held through the end period's tail.
385
+ */
386
+ const evaluateAt = (row, contexts, instant) => {
387
+ const valueText = row['value_text'];
388
+ if (typeof valueText !== 'string') {
389
+ return undefined;
390
+ }
391
+ const value = Row.parseValue(valueText);
392
+ if (value.kind !== 'trajectory') {
393
+ return undefined;
394
+ }
395
+ const range = Time.closedRangeOf(contexts);
396
+ if (range === undefined) {
397
+ return undefined;
398
+ }
399
+ const fraction = Time.fractionAt(range, instant);
400
+ return {
401
+ num: Value.interpolate(value, fraction),
402
+ text: Value.formatAt(value, fraction),
403
+ ...value.unit === undefined ? {} : { unit: value.unit }
404
+ };
405
+ };
352
406
  /**
353
407
  * Runs an already-parsed pattern against a store — the programmatic
354
408
  * entry point for callers that build or specialize patterns as values
@@ -356,13 +410,42 @@ export const query = (store, input, options = {}) => match(store, Pattern.parse(
356
410
  * between joins) rather than as text.
357
411
  */
358
412
  export const match = (store, pattern, options = {}) => {
413
+ const instant = options.at === undefined ? undefined : Time.parseInstant(options.at);
414
+ if (options.at !== undefined && instant === undefined) {
415
+ throw new Error(`CAVE-Q: cannot parse at anchor ${JSON.stringify(options.at)} — a date-like period or a timestamp (spec §32.4)`);
416
+ }
359
417
  // The effective policy is read per query so an as-of query reads the
360
418
  // in-band declarations as of its boundary (spec §26.3, §12.3).
361
419
  const policy = options.resolve === true ?
362
420
  Resolve.readPolicy(store.db, currentSql(options.asOf)) :
363
421
  undefined;
364
422
  const compiled = compile(pattern, store.registry(), options, policy);
423
+ if (compiled.transitive && instant !== undefined) {
424
+ throw new Error('CAVE-Q: at does not compose with transitive patterns — hop edges are not valid-time filtered (spec §32.4)');
425
+ }
365
426
  const rows = store.db.prepare(compiled.sql).all(...compiled.params);
427
+ if (compiled.transitive && options.support === true) {
428
+ // One match per distinct (src, dst) pair, its supporting edge rows
429
+ // attached; under aliases identical binding sets still collapse to
430
+ // one answer (the rule below), their support unioned.
431
+ const matches = new Map();
432
+ for (const row of rows) {
433
+ const key = options.aliases === true ?
434
+ JSON.stringify(compiled.bind(row)) :
435
+ JSON.stringify([row['src'], row['dst']]);
436
+ let entry = matches.get(key);
437
+ if (entry === undefined) {
438
+ entry = { bindings: compiled.bind(row), rows: [], seen: new Set() };
439
+ matches.set(key, entry);
440
+ }
441
+ const id = String(row['id']);
442
+ if (!entry.seen.has(id)) {
443
+ entry.seen.add(id);
444
+ entry.rows.push(row);
445
+ }
446
+ }
447
+ return [...matches.values()].map(entry => ({ bindings: entry.bindings, rows: entry.rows }));
448
+ }
366
449
  if (compiled.transitive && options.aliases === true) {
367
450
  // Distinct (src, dst) pairs can repeat a binding set when an endpoint
368
451
  // matched through different spellings of one aliased entity; a
@@ -379,8 +462,30 @@ export const match = (store, pattern, options = {}) => {
379
462
  return [{ bindings }];
380
463
  });
381
464
  }
382
- return rows.map(row => compiled.transitive ?
383
- { bindings: compiled.bind(row) } :
384
- { bindings: compiled.bind(row), row: row });
465
+ if (compiled.transitive) {
466
+ return rows.map(row => ({ bindings: compiled.bind(row) }));
467
+ }
468
+ if (instant === undefined) {
469
+ return rows.map(row => ({ bindings: compiled.bind(row), row: row }));
470
+ }
471
+ // Valid-time pass (spec §32.4): contexts are read per row — coverage
472
+ // needs period interpretation no SQL expression can do.
473
+ const contextsOf = store.db.prepare('SELECT context FROM cave_context WHERE claim_id = ?');
474
+ return rows.flatMap(row => {
475
+ const contexts = contextsOf.all(String(row['id']))
476
+ .map(entry => entry.context);
477
+ if (!Time.appliesAt(contexts, instant)) {
478
+ return [];
479
+ }
480
+ const at = evaluateAt(row, contexts, instant);
481
+ const bindings = compiled.bind(row);
482
+ if (at === undefined) {
483
+ return [{ bindings, row: row }];
484
+ }
485
+ for (const name of compiled.valueVars) {
486
+ bindings[name] = at.text;
487
+ }
488
+ return [{ bindings, row: row, at }];
489
+ });
385
490
  };
386
491
  //# sourceMappingURL=compile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/compile.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,6 @@
13
13
  * ```
14
14
  */
15
15
  export * as Pattern from './pattern.ts';
16
- export { match, query } from './compile.ts';
17
- export type { Match, Options } from './compile.ts';
16
+ export { match, query } from './bounded.ts';
17
+ export type { Match, Options } from './bounded.ts';
18
18
  //# sourceMappingURL=index.d.ts.map
package/dist/src/index.js CHANGED
@@ -13,5 +13,5 @@
13
13
  * ```
14
14
  */
15
15
  export * as Pattern from "./pattern.js";
16
- export { match, query } from "./compile.js";
16
+ export { match, query } from "./bounded.js";
17
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@
14
14
  * A query is one pattern line followed by any number of `WHERE` filter
15
15
  * lines (spec §12.2), indented or not.
16
16
  */
17
- import { Confidence, Verb } from '@cavelang/core';
17
+ import { Confidence, Value, Verb } from '@cavelang/core';
18
18
  import { Token } from '@cavelang/parser';
19
19
  const filterOps = ['>=', '<=', '!=', '=', '>', '<'];
20
20
  const isFilterOp = (text) => filterOps.includes(text);
@@ -81,12 +81,14 @@ const parseFilter = (tokens, lineNo) => {
81
81
  return { field: 'context', op: '=', value: valueText };
82
82
  }
83
83
  case 'value': {
84
- const match = /^(-?\d+(?:\.\d+)?)(?:\s+(.+))?$/.exec(valueText);
85
- if (!match) {
84
+ const value = Value.parse(valueText);
85
+ if (value.kind !== 'number' || value.num === undefined) {
86
86
  return bad(`cannot parse value filter ${JSON.stringify(valueText)}`);
87
87
  }
88
- const unit = match[2];
89
- return { field: 'value', op: op.text, value: Number(match[1]), ...unit === undefined ? {} : { unit } };
88
+ return {
89
+ field: 'value', op: op.text, value: value.num,
90
+ ...value.unit === undefined ? {} : { unit: value.unit }
91
+ };
90
92
  }
91
93
  case 'tx':
92
94
  return { field: 'tx', op: op.text, value: valueText };
@@ -140,10 +142,29 @@ export const parse = (input) => {
140
142
  payload = { kind: 'any' };
141
143
  }
142
144
  else if (payloadTokens[0].kind === 'word' && payloadTokens[0].text.endsWith(':') && payloadTokens[0].text.length > 1) {
143
- if (payloadTokens.length !== 2) {
144
- throw new Error('CAVE-Q: attribute patterns take exactly one value slot (spec §12.1)');
145
+ const valueTokens = payloadTokens.slice(1);
146
+ if (valueTokens.length === 0) {
147
+ throw new Error('CAVE-Q: attribute patterns need a value slot (spec §12.1)');
148
+ }
149
+ if (valueTokens.length === 1) {
150
+ payload = {
151
+ kind: 'attribute',
152
+ attribute: payloadTokens[0].text.slice(0, -1),
153
+ value: slotOf(valueTokens[0])
154
+ };
155
+ }
156
+ else {
157
+ const valueText = valueTokens.map(token => token.text).join(' ');
158
+ const value = Value.parse(valueText);
159
+ if (value.kind !== 'number') {
160
+ throw new Error('CAVE-Q: attribute patterns take one value slot or a numeric value (spec §12.1)');
161
+ }
162
+ payload = {
163
+ kind: 'attribute',
164
+ attribute: payloadTokens[0].text.slice(0, -1),
165
+ value: { kind: 'term', text: valueText }
166
+ };
145
167
  }
146
- payload = { kind: 'attribute', attribute: payloadTokens[0].text.slice(0, -1), value: slotOf(payloadTokens[1]) };
147
168
  }
148
169
  else if (payloadTokens.length === 1) {
149
170
  payload = { kind: 'object', object: slotOf(payloadTokens[0]) };
@@ -1 +1 @@
1
- {"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cavelang/query",
3
- "version": "0.22.0",
3
+ "version": "0.27.3",
4
4
  "type": "module",
5
5
  "description": "CAVE-Q — graph-pattern queries (?x vars, wildcards, inverse verbs, transitive hops, WHERE filters) compiled to SQL.",
6
6
  "license": "CC0-1.0",
@@ -32,10 +32,10 @@
32
32
  "access": "public"
33
33
  },
34
34
  "dependencies": {
35
- "@cavelang/canonical": "0.22.0",
36
- "@cavelang/core": "0.22.0",
37
- "@cavelang/store": "0.22.0",
38
- "@cavelang/parser": "0.22.0"
35
+ "@cavelang/canonical": "0.27.3",
36
+ "@cavelang/core": "0.27.3",
37
+ "@cavelang/parser": "0.27.3",
38
+ "@cavelang/store": "0.27.3"
39
39
  },
40
40
  "scripts": {
41
41
  "build": "tsc -b",
package/src/bounded.ts ADDED
@@ -0,0 +1,71 @@
1
+ import { Value } from '@cavelang/core'
2
+ import type { Store } from '@cavelang/store'
3
+ import * as Compile from './compile.ts'
4
+ import * as Pattern from './pattern.ts'
5
+
6
+ export type { Match, Options } from './compile.ts'
7
+
8
+ /**
9
+ * Compile historical queries against vocabulary reconstructed at the same
10
+ * transaction-time boundary as the rows. The store remains otherwise
11
+ * unchanged; compiler SQL still applies the authoritative row boundary.
12
+ */
13
+ const storeAtBoundary = (store: Store, options: Compile.Options): Store => {
14
+ if (options.asOf === undefined) {
15
+ return store
16
+ }
17
+ const registry = store.registryAsOf(options.asOf)
18
+ return { ...store, registry: () => registry }
19
+ }
20
+
21
+ /**
22
+ * Exact numeric attribute values are matched through normalized storage
23
+ * columns, not their as-written spelling: `0.9B users/wk` and
24
+ * `900M users/wk` denote the same number/unit pair. The compiler's existing
25
+ * value filter pushes the normalized comparison into SQL; the final check
26
+ * preserves exact unit and approximation semantics.
27
+ */
28
+ export const match = (
29
+ store: Store,
30
+ pattern: Pattern.t,
31
+ options: Compile.Options = {}
32
+ ): Compile.Match[] => {
33
+ if (pattern.payload.kind !== 'attribute' || pattern.payload.value.kind !== 'term') {
34
+ return Compile.match(storeAtBoundary(store, options), pattern, options)
35
+ }
36
+ const value = Value.parse(pattern.payload.value.text)
37
+ if (value.kind !== 'number' || value.num === undefined) {
38
+ return Compile.match(storeAtBoundary(store, options), pattern, options)
39
+ }
40
+ const expectedNum = value.num
41
+ const filter: Pattern.Filter = {
42
+ field: 'value', op: '=', value: expectedNum,
43
+ ...value.unit === undefined ? {} : { unit: value.unit }
44
+ }
45
+ const normalized: Pattern.t = {
46
+ ...pattern,
47
+ payload: {
48
+ kind: 'attribute',
49
+ attribute: pattern.payload.attribute,
50
+ value: { kind: 'wildcard' }
51
+ },
52
+ filters: [...pattern.filters, filter]
53
+ }
54
+ const expectedUnit = value.unit ?? null
55
+ const expectedApprox = value.approx ? 1 : 0
56
+ return Compile.match(storeAtBoundary(store, options), normalized, options)
57
+ .filter(result => {
58
+ const row = result.row
59
+ return row !== undefined &&
60
+ row.value_num === expectedNum &&
61
+ row.value_unit === expectedUnit &&
62
+ row.value_approx === expectedApprox
63
+ })
64
+ }
65
+
66
+ export const query = (
67
+ store: Store,
68
+ input: string,
69
+ options: Compile.Options = {}
70
+ ): Compile.Match[] =>
71
+ match(store, Pattern.parse(input), options)
package/src/compile.ts CHANGED
@@ -3,9 +3,11 @@
3
3
  *
4
4
  * Patterns run over *current beliefs* by default — the latest transaction
5
5
  * per claim key (spec §9.1) — pass `all` to match the full history,
6
- * `asOf` to resolve the belief state at a past moment (spec §12.3), or
6
+ * `asOf` to resolve the belief state at a past moment (spec §12.3),
7
7
  * `resolve` to match only the winners the §26 contradiction-resolution
8
- * policy picks among contested facts.
8
+ * policy picks among contested facts, or `at` to anchor in valid time
9
+ * (spec §32.4): claims whose time contexts don't cover the instant drop
10
+ * out and trajectory values interpolate.
9
11
  * Inverse verbs compile to the same physical query as their primary
10
12
  * (spec §12.1): `?x PART-OF monorepo` and `monorepo CONTAINS ?x` produce
11
13
  * identical SQL against canonical rows, with the pattern's subject binding
@@ -15,16 +17,29 @@
15
17
  * CTE over current, positive, non-retracted edges (depth-capped at 32).
16
18
  */
17
19
 
18
- import { Uuidv7, Value } from '@cavelang/core'
20
+ import { Time, Uuidv7, Value } from '@cavelang/core'
19
21
  import { Registry } from '@cavelang/canonical'
20
- import { Resolve } from '@cavelang/store'
21
- import type { Row, Store } from '@cavelang/store'
22
+ import { Resolve, Row } from '@cavelang/store'
23
+ import type { Store } from '@cavelang/store'
22
24
  import * as Pattern from './pattern.ts'
23
25
 
24
26
  /** One query solution: variable bindings plus the matched row (absent for transitive hops). */
25
27
  export type Match = {
26
28
  readonly bindings: Readonly<Record<string, string>>
27
29
  readonly row?: Row.t
30
+ /**
31
+ * Supporting edge rows of a transitive match — present only under
32
+ * `support`: the visible positive edges of the pattern's verb lying
33
+ * on some path between the matched endpoints.
34
+ */
35
+ readonly rows?: readonly Row.t[]
36
+ /**
37
+ * The row's trajectory value evaluated at the query's `at` instant by
38
+ * linear interpolation (spec §32.3) — present only when `at` is set,
39
+ * the row's value is a trajectory and its contexts carry exactly one
40
+ * closed time range. `text` is canonical CAVE value text.
41
+ */
42
+ readonly at?: { readonly num: number, readonly unit?: string, readonly text: string }
28
43
  }
29
44
 
30
45
  export type Options = {
@@ -57,6 +72,31 @@ export type Options = {
57
72
  * and policy reconstruct at the boundary); incompatible with `all`.
58
73
  */
59
74
  readonly resolve?: boolean
75
+ /**
76
+ * Valid-time anchor (spec §32.4): a date-like period — read as its
77
+ * start instant — or a timestamp. Claims whose time contexts (bare or
78
+ * `time:`-prefixed date-like points and `..` ranges, spec §32.2) do
79
+ * not cover the instant are invisible; timeless claims always match.
80
+ * A matched trajectory value with one closed range context evaluates
81
+ * by linear interpolation at the instant, surfacing as the match's
82
+ * `at` and substituting into value-slot bindings. Orthogonal to
83
+ * `asOf`: `asOf` picks which rows are believed (transaction time),
84
+ * `at` picks when in the world the claims apply (valid time) — set
85
+ * both for "what did we believe then about that moment". Transitive
86
+ * patterns reject `at` (hop edges are not valid-time filtered).
87
+ */
88
+ readonly at?: string
89
+ /**
90
+ * Attach supporting edge rows to transitive matches: each match's
91
+ * `rows` lists the visible positive edges of the verb on some path
92
+ * between its endpoints (alias links widen the paths under `aliases`
93
+ * but are not edges themselves). Off by default — the support join
94
+ * costs more than pair enumeration, and most callers need only
95
+ * bindings. `@cavelang/automate` opts in so its event filter can see
96
+ * which edge rows a trigger solution stands on (spec §29.2).
97
+ * Non-transitive patterns are unaffected.
98
+ */
99
+ readonly support?: boolean
60
100
  }
61
101
 
62
102
  /**
@@ -125,7 +165,9 @@ const baseSql = (options: Options, policy: undefined | readonly Resolve.Entry[])
125
165
  * `ALIAS` claims symmetrized (each written direction is its own claim key —
126
166
  * both assert the same undirected link); `alias_pair` its transitive
127
167
  * closure — every ordered pair of names currently believed to denote one
128
- * entity. Resolution always reads *current* beliefs, even under `all`:
168
+ * entity. Edges keep entity-form endpoints only: a `"…"`/`` `…` `` literal
169
+ * names a value, not an entity, so it never joins names into one closure.
170
+ * Resolution always reads *current* beliefs, even under `all`:
129
171
  * the closure is entity resolution as believed now, not as believed when
130
172
  * a row landed — except under `asOf`, where "now" is the boundary itself
131
173
  * and the closure reconstructs entity resolution as believed then
@@ -134,9 +176,11 @@ const baseSql = (options: Options, policy: undefined | readonly Resolve.Entry[])
134
176
  const aliasPairSql = (asOf: undefined | string): string => `alias_edge(a, b) AS (
135
177
  SELECT c.subject, c.object FROM (${currentSql(asOf)}) c
136
178
  WHERE c.verb = 'ALIAS' AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
179
+ AND ${Row.entityTermSql('c.subject')} AND ${Row.entityTermSql('c.object')}
137
180
  UNION
138
181
  SELECT c.object, c.subject FROM (${currentSql(asOf)}) c
139
182
  WHERE c.verb = 'ALIAS' AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
183
+ AND ${Row.entityTermSql('c.subject')} AND ${Row.entityTermSql('c.object')}
140
184
  ), alias_pair(a, b) AS (
141
185
  SELECT a, b FROM alias_edge
142
186
  UNION
@@ -152,6 +196,8 @@ type Compiled = {
152
196
  readonly params: (string | number)[]
153
197
  readonly bind: (row: Record<string, unknown>) => Record<string, string>
154
198
  readonly transitive: boolean
199
+ /** Variables bound to the value slot — interpolation substitutes these (spec §32.4). */
200
+ readonly valueVars: readonly string[]
155
201
  }
156
202
 
157
203
  const compile = (pattern: Pattern.t, registry: Registry.t, options: Options, policy?: readonly Resolve.Entry[]): Compiled => {
@@ -341,7 +387,10 @@ const compile = (pattern: Pattern.t, registry: Registry.t, options: Options, pol
341
387
  }
342
388
  return bindings
343
389
  }
344
- return { sql, params, bind, transitive: false }
390
+ const valueVars = [...varColumns]
391
+ .filter(([, columns]) => columns[0] === 'value_text')
392
+ .map(([name]) => name)
393
+ return { sql, params, bind, transitive: false, valueVars }
345
394
  }
346
395
 
347
396
  const compileTransitive = (
@@ -383,17 +432,36 @@ const compileTransitive = (
383
432
  if (subjectSlot.kind === 'var' && objectSlot?.kind === 'var' && subjectSlot.name === objectSlot.name) {
384
433
  conditions.push(same('h.src', 'h.dst'))
385
434
  }
386
- const sql = `
387
- WITH RECURSIVE ${aliases ? `${aliasPairSql(options.asOf)}, ` : ''}cur AS (
388
- SELECT c.subject AS src, c.object AS dst
389
- FROM (${base}) c
390
- WHERE c.verb = ? AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
391
- ), hops(src, dst, depth) AS (
435
+ const withRecursive = `WITH RECURSIVE ${aliases ? `${aliasPairSql(options.asOf)}, ` : ''}`
436
+ const hopsSql = `hops(src, dst, depth) AS (
392
437
  SELECT src, dst, 1 FROM cur
393
438
  UNION
394
439
  SELECT h.src, cur.dst, h.depth + 1 FROM hops h JOIN cur ON ${same('cur.src', 'h.dst')}
395
440
  WHERE h.depth < 32
441
+ )`
442
+ // Support (an opt-in): an edge row backs a pair when its endpoints sit
443
+ // on some path between them — reflexive or through the same hop
444
+ // closure, so alias-equal endpoints connect exactly as matching did.
445
+ const sql = options.support === true ? `
446
+ ${withRecursive}edge AS (
447
+ SELECT c.* FROM (${base}) c
448
+ WHERE c.verb = ? AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
449
+ ), cur AS (
450
+ SELECT DISTINCT subject AS src, object AS dst FROM edge
451
+ ), ${hopsSql}, pair(src, dst) AS (
452
+ SELECT DISTINCT h.src, h.dst FROM hops h
453
+ ${conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : ''}
396
454
  )
455
+ SELECT p.src AS src, p.dst AS dst, e.*
456
+ FROM pair p JOIN edge e
457
+ ON (${same('e.subject', 'p.src')} OR EXISTS (SELECT 1 FROM hops f WHERE ${same('f.src', 'p.src')} AND ${same('f.dst', 'e.subject')}))
458
+ AND (${same('e.object', 'p.dst')} OR EXISTS (SELECT 1 FROM hops b WHERE ${same('b.src', 'e.object')} AND ${same('b.dst', 'p.dst')}))
459
+ ORDER BY p.src, p.dst, e.tx` : `
460
+ ${withRecursive}cur AS (
461
+ SELECT c.subject AS src, c.object AS dst
462
+ FROM (${base}) c
463
+ WHERE c.verb = ? AND c.negated = 0 AND c.conf > 0 AND c.object IS NOT NULL
464
+ ), ${hopsSql}
397
465
  SELECT DISTINCT h.src AS src, h.dst AS dst FROM hops h
398
466
  ${conditions.length > 0 ? `WHERE ${conditions.join(' AND ')}` : ''}
399
467
  ORDER BY h.src, h.dst`
@@ -407,7 +475,7 @@ ORDER BY h.src, h.dst`
407
475
  }
408
476
  return bindings
409
477
  }
410
- return { sql, params, bind, transitive: true }
478
+ return { sql, params, bind, transitive: true, valueVars: [] }
411
479
  }
412
480
 
413
481
  /**
@@ -423,6 +491,37 @@ ORDER BY h.src, h.dst`
423
491
  export const query = (store: Store, input: string, options: Options = {}): Match[] =>
424
492
  match(store, Pattern.parse(input), options)
425
493
 
494
+ /**
495
+ * The row's trajectory value evaluated at the instant (spec §32.3):
496
+ * linear interpolation over the single closed time-range context, with
497
+ * endpoint values anchored at the range periods' start instants and the
498
+ * end value held through the end period's tail.
499
+ */
500
+ const evaluateAt = (
501
+ row: Record<string, unknown>,
502
+ contexts: readonly string[],
503
+ instant: number
504
+ ): undefined | Match['at'] => {
505
+ const valueText = row['value_text']
506
+ if (typeof valueText !== 'string') {
507
+ return undefined
508
+ }
509
+ const value = Row.parseValue(valueText)
510
+ if (value.kind !== 'trajectory') {
511
+ return undefined
512
+ }
513
+ const range = Time.closedRangeOf(contexts)
514
+ if (range === undefined) {
515
+ return undefined
516
+ }
517
+ const fraction = Time.fractionAt(range, instant)
518
+ return {
519
+ num: Value.interpolate(value, fraction)!,
520
+ text: Value.formatAt(value, fraction)!,
521
+ ...value.unit === undefined ? {} : { unit: value.unit }
522
+ }
523
+ }
524
+
426
525
  /**
427
526
  * Runs an already-parsed pattern against a store — the programmatic
428
527
  * entry point for callers that build or specialize patterns as values
@@ -430,13 +529,43 @@ export const query = (store: Store, input: string, options: Options = {}): Match
430
529
  * between joins) rather than as text.
431
530
  */
432
531
  export const match = (store: Store, pattern: Pattern.t, options: Options = {}): Match[] => {
532
+ const instant = options.at === undefined ? undefined : Time.parseInstant(options.at)
533
+ if (options.at !== undefined && instant === undefined) {
534
+ throw new Error(
535
+ `CAVE-Q: cannot parse at anchor ${JSON.stringify(options.at)} — a date-like period or a timestamp (spec §32.4)`)
536
+ }
433
537
  // The effective policy is read per query so an as-of query reads the
434
538
  // in-band declarations as of its boundary (spec §26.3, §12.3).
435
539
  const policy = options.resolve === true ?
436
540
  Resolve.readPolicy(store.db, currentSql(options.asOf)) :
437
541
  undefined
438
542
  const compiled = compile(pattern, store.registry(), options, policy)
543
+ if (compiled.transitive && instant !== undefined) {
544
+ throw new Error('CAVE-Q: at does not compose with transitive patterns — hop edges are not valid-time filtered (spec §32.4)')
545
+ }
439
546
  const rows = store.db.prepare(compiled.sql).all(...compiled.params) as Record<string, unknown>[]
547
+ if (compiled.transitive && options.support === true) {
548
+ // One match per distinct (src, dst) pair, its supporting edge rows
549
+ // attached; under aliases identical binding sets still collapse to
550
+ // one answer (the rule below), their support unioned.
551
+ const matches = new Map<string, { bindings: Record<string, string>, rows: Row.t[], seen: Set<string> }>()
552
+ for (const row of rows) {
553
+ const key = options.aliases === true ?
554
+ JSON.stringify(compiled.bind(row)) :
555
+ JSON.stringify([row['src'], row['dst']])
556
+ let entry = matches.get(key)
557
+ if (entry === undefined) {
558
+ entry = { bindings: compiled.bind(row), rows: [], seen: new Set() }
559
+ matches.set(key, entry)
560
+ }
561
+ const id = String(row['id'])
562
+ if (!entry.seen.has(id)) {
563
+ entry.seen.add(id)
564
+ entry.rows.push(row as unknown as Row.t)
565
+ }
566
+ }
567
+ return [...matches.values()].map(entry => ({ bindings: entry.bindings, rows: entry.rows }))
568
+ }
440
569
  if (compiled.transitive && options.aliases === true) {
441
570
  // Distinct (src, dst) pairs can repeat a binding set when an endpoint
442
571
  // matched through different spellings of one aliased entity; a
@@ -453,9 +582,29 @@ export const match = (store: Store, pattern: Pattern.t, options: Options = {}):
453
582
  return [{ bindings }]
454
583
  })
455
584
  }
456
- return rows.map(row =>
457
- compiled.transitive ?
458
- { bindings: compiled.bind(row) } :
459
- { bindings: compiled.bind(row), row: row as unknown as Row.t }
460
- )
585
+ if (compiled.transitive) {
586
+ return rows.map(row => ({ bindings: compiled.bind(row) }))
587
+ }
588
+ if (instant === undefined) {
589
+ return rows.map(row => ({ bindings: compiled.bind(row), row: row as unknown as Row.t }))
590
+ }
591
+ // Valid-time pass (spec §32.4): contexts are read per row — coverage
592
+ // needs period interpretation no SQL expression can do.
593
+ const contextsOf = store.db.prepare('SELECT context FROM cave_context WHERE claim_id = ?')
594
+ return rows.flatMap(row => {
595
+ const contexts = (contextsOf.all(String(row['id'])) as { context: string }[])
596
+ .map(entry => entry.context)
597
+ if (!Time.appliesAt(contexts, instant)) {
598
+ return []
599
+ }
600
+ const at = evaluateAt(row, contexts, instant)
601
+ const bindings = compiled.bind(row)
602
+ if (at === undefined) {
603
+ return [{ bindings, row: row as unknown as Row.t }]
604
+ }
605
+ for (const name of compiled.valueVars) {
606
+ bindings[name] = at.text
607
+ }
608
+ return [{ bindings, row: row as unknown as Row.t, at }]
609
+ })
461
610
  }
package/src/index.ts CHANGED
@@ -14,5 +14,5 @@
14
14
  */
15
15
 
16
16
  export * as Pattern from './pattern.ts'
17
- export { match, query } from './compile.ts'
18
- export type { Match, Options } from './compile.ts'
17
+ export { match, query } from './bounded.ts'
18
+ export type { Match, Options } from './bounded.ts'
package/src/pattern.ts CHANGED
@@ -15,7 +15,7 @@
15
15
  * lines (spec §12.2), indented or not.
16
16
  */
17
17
 
18
- import { Confidence, Verb } from '@cavelang/core'
18
+ import { Confidence, Value, Verb } from '@cavelang/core'
19
19
  import { Token } from '@cavelang/parser'
20
20
 
21
21
  /** A pattern slot: named variable, wildcard `_`, or a bound term. */
@@ -128,12 +128,14 @@ const parseFilter = (tokens: readonly Token.t[], lineNo: number): Filter => {
128
128
  return { field: 'context', op: '=', value: valueText }
129
129
  }
130
130
  case 'value': {
131
- const match = /^(-?\d+(?:\.\d+)?)(?:\s+(.+))?$/.exec(valueText)
132
- if (!match) {
131
+ const value = Value.parse(valueText)
132
+ if (value.kind !== 'number' || value.num === undefined) {
133
133
  return bad(`cannot parse value filter ${JSON.stringify(valueText)}`)
134
134
  }
135
- const unit = match[2]
136
- return { field: 'value', op: op.text, value: Number(match[1]), ...unit === undefined ? {} : { unit } }
135
+ return {
136
+ field: 'value', op: op.text, value: value.num,
137
+ ...value.unit === undefined ? {} : { unit: value.unit }
138
+ }
137
139
  }
138
140
  case 'tx':
139
141
  return { field: 'tx', op: op.text, value: valueText }
@@ -185,10 +187,28 @@ export const parse = (input: string): Pattern => {
185
187
  if (payloadTokens.length === 0) {
186
188
  payload = { kind: 'any' }
187
189
  } else if (payloadTokens[0]!.kind === 'word' && payloadTokens[0]!.text.endsWith(':') && payloadTokens[0]!.text.length > 1) {
188
- if (payloadTokens.length !== 2) {
189
- throw new Error('CAVE-Q: attribute patterns take exactly one value slot (spec §12.1)')
190
+ const valueTokens = payloadTokens.slice(1)
191
+ if (valueTokens.length === 0) {
192
+ throw new Error('CAVE-Q: attribute patterns need a value slot (spec §12.1)')
193
+ }
194
+ if (valueTokens.length === 1) {
195
+ payload = {
196
+ kind: 'attribute',
197
+ attribute: payloadTokens[0]!.text.slice(0, -1),
198
+ value: slotOf(valueTokens[0]!)
199
+ }
200
+ } else {
201
+ const valueText = valueTokens.map(token => token.text).join(' ')
202
+ const value = Value.parse(valueText)
203
+ if (value.kind !== 'number') {
204
+ throw new Error('CAVE-Q: attribute patterns take one value slot or a numeric value (spec §12.1)')
205
+ }
206
+ payload = {
207
+ kind: 'attribute',
208
+ attribute: payloadTokens[0]!.text.slice(0, -1),
209
+ value: { kind: 'term', text: valueText }
210
+ }
190
211
  }
191
- payload = { kind: 'attribute', attribute: payloadTokens[0]!.text.slice(0, -1), value: slotOf(payloadTokens[1]!) }
192
212
  } else if (payloadTokens.length === 1) {
193
213
  payload = { kind: 'object', object: slotOf(payloadTokens[0]!) }
194
214
  } else {