@cavelang/query 0.20.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 +7 -0
- package/dist/src/bounded.d.ts +14 -0
- package/dist/src/bounded.d.ts.map +1 -0
- package/dist/src/bounded.js +57 -0
- package/dist/src/bounded.js.map +1 -0
- package/dist/src/compile.d.ts +48 -3
- package/dist/src/compile.d.ts.map +1 -1
- package/dist/src/compile.js +121 -16
- package/dist/src/compile.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.js +1 -1
- package/dist/src/pattern.d.ts.map +1 -1
- package/dist/src/pattern.js +29 -8
- package/dist/src/pattern.js.map +1 -1
- package/package.json +5 -5
- package/src/bounded.ts +71 -0
- package/src/compile.ts +168 -19
- package/src/index.ts +2 -2
- package/src/pattern.ts +28 -8
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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"}
|
package/dist/src/compile.d.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),
|
|
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
|
|
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
|
|
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"}
|
package/dist/src/compile.js
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),
|
|
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.
|
|
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
|
-
|
|
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
|
|
316
|
-
|
|
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
|
-
|
|
383
|
-
{ bindings: compiled.bind(row) }
|
|
384
|
-
|
|
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
|
package/dist/src/compile.js.map
CHANGED
|
@@ -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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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -13,6 +13,6 @@
|
|
|
13
13
|
* ```
|
|
14
14
|
*/
|
|
15
15
|
export * as Pattern from './pattern.ts';
|
|
16
|
-
export { match, query } from './
|
|
17
|
-
export type { Match, Options } from './
|
|
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
|
@@ -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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"}
|
package/dist/src/pattern.js
CHANGED
|
@@ -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
|
|
85
|
-
if (
|
|
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
|
-
|
|
89
|
-
|
|
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
|
-
|
|
144
|
-
|
|
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]) };
|
package/dist/src/pattern.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/pattern.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;
|
|
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.
|
|
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/
|
|
36
|
-
"@cavelang/
|
|
37
|
-
"@cavelang/
|
|
38
|
-
"@cavelang/store": "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),
|
|
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 {
|
|
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.
|
|
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
|
-
|
|
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
|
|
387
|
-
|
|
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
|
-
|
|
457
|
-
compiled.
|
|
458
|
-
|
|
459
|
-
|
|
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
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
|
|
132
|
-
if (
|
|
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
|
-
|
|
136
|
-
|
|
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
|
-
|
|
189
|
-
|
|
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 {
|