@bjornpagen/bumbledb 0.1.0

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.
Files changed (108) hide show
  1. package/LICENSE +12 -0
  2. package/README.md +84 -0
  3. package/dist/brand.d.ts +59 -0
  4. package/dist/brand.d.ts.map +1 -0
  5. package/dist/brand.js +47 -0
  6. package/dist/brand.js.map +1 -0
  7. package/dist/closed.d.ts +97 -0
  8. package/dist/closed.d.ts.map +1 -0
  9. package/dist/closed.js +107 -0
  10. package/dist/closed.js.map +1 -0
  11. package/dist/count.d.ts +55 -0
  12. package/dist/count.d.ts.map +1 -0
  13. package/dist/count.js +92 -0
  14. package/dist/count.js.map +1 -0
  15. package/dist/db.d.ts +341 -0
  16. package/dist/db.d.ts.map +1 -0
  17. package/dist/db.js +1016 -0
  18. package/dist/db.js.map +1 -0
  19. package/dist/exhume.d.ts +130 -0
  20. package/dist/exhume.d.ts.map +1 -0
  21. package/dist/exhume.js +145 -0
  22. package/dist/exhume.js.map +1 -0
  23. package/dist/face.d.ts +91 -0
  24. package/dist/face.d.ts.map +1 -0
  25. package/dist/face.js +69 -0
  26. package/dist/face.js.map +1 -0
  27. package/dist/fields.d.ts +187 -0
  28. package/dist/fields.d.ts.map +1 -0
  29. package/dist/fields.js +204 -0
  30. package/dist/fields.js.map +1 -0
  31. package/dist/index.d.ts +49 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +31 -0
  34. package/dist/index.js.map +1 -0
  35. package/dist/lower.d.ts +34 -0
  36. package/dist/lower.d.ts.map +1 -0
  37. package/dist/lower.js +105 -0
  38. package/dist/lower.js.map +1 -0
  39. package/dist/marshal.d.ts +79 -0
  40. package/dist/marshal.d.ts.map +1 -0
  41. package/dist/marshal.js +167 -0
  42. package/dist/marshal.js.map +1 -0
  43. package/dist/native.d.ts +532 -0
  44. package/dist/native.d.ts.map +1 -0
  45. package/dist/native.js +64 -0
  46. package/dist/native.js.map +1 -0
  47. package/dist/query/atom.d.ts +285 -0
  48. package/dist/query/atom.d.ts.map +1 -0
  49. package/dist/query/atom.js +281 -0
  50. package/dist/query/atom.js.map +1 -0
  51. package/dist/query/lower.d.ts +145 -0
  52. package/dist/query/lower.d.ts.map +1 -0
  53. package/dist/query/lower.js +604 -0
  54. package/dist/query/lower.js.map +1 -0
  55. package/dist/query/predicate.d.ts +101 -0
  56. package/dist/query/predicate.d.ts.map +1 -0
  57. package/dist/query/predicate.js +85 -0
  58. package/dist/query/predicate.js.map +1 -0
  59. package/dist/query/run.d.ts +30 -0
  60. package/dist/query/run.d.ts.map +1 -0
  61. package/dist/query/run.js +94 -0
  62. package/dist/query/run.js.map +1 -0
  63. package/dist/query/scope.d.ts +168 -0
  64. package/dist/query/scope.d.ts.map +1 -0
  65. package/dist/query/scope.js +134 -0
  66. package/dist/query/scope.js.map +1 -0
  67. package/dist/query/select.d.ts +106 -0
  68. package/dist/query/select.d.ts.map +1 -0
  69. package/dist/query/select.js +69 -0
  70. package/dist/query/select.js.map +1 -0
  71. package/dist/relation.d.ts +120 -0
  72. package/dist/relation.d.ts.map +1 -0
  73. package/dist/relation.js +108 -0
  74. package/dist/relation.js.map +1 -0
  75. package/dist/schema.d.ts +50 -0
  76. package/dist/schema.d.ts.map +1 -0
  77. package/dist/schema.js +235 -0
  78. package/dist/schema.js.map +1 -0
  79. package/dist/spec.d.ts +218 -0
  80. package/dist/spec.d.ts.map +1 -0
  81. package/dist/spec.js +154 -0
  82. package/dist/spec.js.map +1 -0
  83. package/dist/statements.d.ts +91 -0
  84. package/dist/statements.d.ts.map +1 -0
  85. package/dist/statements.js +101 -0
  86. package/dist/statements.js.map +1 -0
  87. package/package.json +66 -0
  88. package/src/brand.ts +82 -0
  89. package/src/closed.ts +228 -0
  90. package/src/count.ts +117 -0
  91. package/src/db.ts +1519 -0
  92. package/src/exhume.ts +243 -0
  93. package/src/face.ts +161 -0
  94. package/src/fields.ts +385 -0
  95. package/src/index.ts +185 -0
  96. package/src/lower.ts +118 -0
  97. package/src/marshal.ts +220 -0
  98. package/src/native.ts +576 -0
  99. package/src/query/atom.ts +556 -0
  100. package/src/query/lower.ts +855 -0
  101. package/src/query/predicate.ts +195 -0
  102. package/src/query/run.ts +106 -0
  103. package/src/query/scope.ts +301 -0
  104. package/src/query/select.ts +140 -0
  105. package/src/relation.ts +252 -0
  106. package/src/schema.ts +297 -0
  107. package/src/spec.ts +325 -0
  108. package/src/statements.ts +148 -0
@@ -0,0 +1,604 @@
1
+ /**
2
+ * `query()` and the IR lowering (PRD-08). A query is built inside a scope
3
+ * callback (variable identity is lexical and typed) and is an INERT value:
4
+ * `Query<Rels, Row, Params>` with `Row` inferred from `select` and
5
+ * `Params` from every parameter the returned rules (and the predicates
6
+ * they reach) use. Lowering is a pure function of the query value down to
7
+ * the bridge's `ProgramIr` (`bumbledb/crates/bumbledb/src/ir.rs`, the
8
+ * bijection target): relations and predicates by declaration ordinal (the
9
+ * declaration-order-is-ids law the engine's manifest pins), variables by
10
+ * dense per-rule first-occurrence ids (rule-scoped, exactly as the IR
11
+ * scopes them), params by scope declaration order. Lowering is STABLE —
12
+ * the same query value lowers to deeply-equal IR every time, and two
13
+ * identically-written queries lower identically (prepared-query caching
14
+ * upstream keys on this). Construction validates negation safety (typed,
15
+ * naming the variable — earlier and warmer than the engine's refusal);
16
+ * everything else (strata, types, aggregates rosters, rule caps) is the
17
+ * ENGINE's judge, surfacing its typed errors at prepare. No invented
18
+ * limits: rule counts and predicate counts are never pre-checked here.
19
+ */
20
+ import * as errors from "@superbuilders/errors";
21
+ import { phantom } from "#brand.ts";
22
+ import { assertDeclarationOrderKey } from "#fields.ts";
23
+ import { makePredicate } from "#query/predicate.ts";
24
+ import { createRegistry, isTerm, scopeAllenParam, scopeParam, scopeParamSet, scopeVar, term } from "#query/scope.ts";
25
+ /**
26
+ * Narrows an aggregate select value — a trusted seam over the surface's
27
+ * own constructors (only `#query/select.ts` produces `aggregate`-carrying
28
+ * values), the same direction as every other constructor-owned shape here.
29
+ */
30
+ function isAggregateEntry(value) {
31
+ return "aggregate" in value;
32
+ }
33
+ /** Narrows a `duration()` select value (only `duration` produces `measure`). */
34
+ function isMeasureEntry(value) {
35
+ return "measure" in value;
36
+ }
37
+ /** Classifies one select record value into its runtime entry. */
38
+ function selectEntryOf(name, value) {
39
+ if (isTerm(value)) {
40
+ if (value[term] !== "var") {
41
+ throw errors.new(`query select column ${name}: a ${value[term]} is not projectable — select takes variables, duration(v), or aggregates`);
42
+ }
43
+ return Object.freeze({ kind: "var", over: value });
44
+ }
45
+ if (typeof value === "object" && value !== null) {
46
+ if (isAggregateEntry(value)) {
47
+ return Object.freeze({ kind: "aggregate", aggregate: value.aggregate });
48
+ }
49
+ if (isMeasureEntry(value)) {
50
+ return Object.freeze({ kind: "measure", over: value.measure });
51
+ }
52
+ }
53
+ throw errors.new(`query select column ${name}: not a select entry — select takes variables, duration(v), or aggregates`);
54
+ }
55
+ /** Renders an atom source's name for construction diagnostics. */
56
+ function sourceName(source) {
57
+ if (source.kind === "relation") {
58
+ return source.relation.name;
59
+ }
60
+ return `predicate ${source.pred.name}`;
61
+ }
62
+ /** Collects every variable a rule's positive atoms bind. */
63
+ function positiveVarsOf(body) {
64
+ const positive = new Set();
65
+ for (const item of body) {
66
+ if (item.item !== "atom" || item.negated) {
67
+ continue;
68
+ }
69
+ for (const binding of item.bindings) {
70
+ if (binding.term.kind === "term" && binding.term.value[term] === "var") {
71
+ positive.add(binding.term.value);
72
+ }
73
+ }
74
+ }
75
+ return positive;
76
+ }
77
+ /** Judges one negated atom against the rule's positively-bound variables. */
78
+ function assertNegatedAtomSafe(context, positive, atom) {
79
+ for (const binding of atom.bindings) {
80
+ if (binding.term.kind === "oneOf") {
81
+ throw errors.new(`${context}: negated ${sourceName(atom.source)} atom binds ${binding.field} with oneOf(...) — its lowering mints a variable no positive atom binds (the safety rule); write one negated atom per literal, or bind a paramSet`);
82
+ }
83
+ if (binding.term.kind !== "term" || binding.term.value[term] !== "var") {
84
+ continue;
85
+ }
86
+ const variable = binding.term.value;
87
+ if (!positive.has(variable)) {
88
+ throw errors.new(`${context}: negated ${sourceName(atom.source)} atom binds the variable declared from ${variable.relation}.${variable.field} at position ${binding.field}, but no positive atom of the rule binds it — a negated atom binds nothing, only rejects (the safety rule)`);
89
+ }
90
+ }
91
+ }
92
+ /**
93
+ * The negation safety rule, judged at construction (earlier and warmer
94
+ * than the engine's refusal, which also stands): every variable a negated
95
+ * atom uses must be bound by a positive atom of the same rule — a negated
96
+ * atom binds nothing, only rejects.
97
+ */
98
+ function assertNegationSafety(context, body) {
99
+ const positive = positiveVarsOf(body);
100
+ for (const item of body) {
101
+ if (item.item === "atom" && item.negated) {
102
+ assertNegatedAtomSafe(context, positive, item);
103
+ }
104
+ }
105
+ }
106
+ /**
107
+ * Builds a query as a typed value: runs `build` inside a fresh scope,
108
+ * classifies the select record (written order = answer column order),
109
+ * validates negation safety across every rule (the predicates' rules
110
+ * included), and freezes. Rule counts, strata legality, and every deeper
111
+ * roster stay the engine's judge at prepare.
112
+ */
113
+ function query(theory, build) {
114
+ const registry = createRegistry(theory);
115
+ const scope = Object.freeze({
116
+ var(field) {
117
+ return scopeVar(registry, field);
118
+ },
119
+ param(name, field) {
120
+ return scopeParam(registry, name, field);
121
+ },
122
+ paramSet(name, field) {
123
+ return scopeParamSet(registry, name, field);
124
+ },
125
+ allenParam(name) {
126
+ return scopeAllenParam(registry, name);
127
+ },
128
+ predicate(name, columns, rules) {
129
+ return makePredicate(registry, name, columns, rules);
130
+ }
131
+ });
132
+ const built = build(scope);
133
+ const select = [];
134
+ for (const [name, value] of Object.entries(built.select)) {
135
+ assertDeclarationOrderKey("query select column", name);
136
+ select.push(Object.freeze({ name, entry: selectEntryOf(name, value) }));
137
+ }
138
+ for (const pred of registry.predicates) {
139
+ pred.rules.forEach(function validateRule(rule, index) {
140
+ assertNegationSafety(`query construction (predicate ${pred.name}, rule ${index})`, rule.body);
141
+ });
142
+ }
143
+ const rules = built.rules.map(function freezeRule(rule, index) {
144
+ assertNegationSafety(`query construction (rule ${index})`, rule);
145
+ return Object.freeze([...rule]);
146
+ });
147
+ Object.freeze(registry.params);
148
+ Object.freeze(registry.predicates);
149
+ Object.freeze(registry);
150
+ return Object.freeze({
151
+ schema: theory,
152
+ data: Object.freeze({ registry, rules: Object.freeze(rules), select: Object.freeze(select) })
153
+ });
154
+ }
155
+ /** The typed shape refusal of the literal tagger — a genuine failure, never data. */
156
+ function literalShapeError(context, expected, value) {
157
+ return errors.new(`${context}: expected ${expected}, got ${typeof value}`);
158
+ }
159
+ /** Narrows an interval-shaped literal (a plain `{ start, end }` bigint pair). */
160
+ function isIntervalShaped(value) {
161
+ return (typeof value === "object" &&
162
+ value !== null &&
163
+ "start" in value &&
164
+ "end" in value &&
165
+ typeof value.start === "bigint" &&
166
+ typeof value.end === "bigint");
167
+ }
168
+ /**
169
+ * Tags one host literal at a FIELD position (atom bindings): the field's
170
+ * structural type directs the tag, never a guess. At an interval field a
171
+ * bigint literal tags as the ELEMENT type — the IR's membership typing
172
+ * rule (point membership), an interval-shaped literal as the interval
173
+ * (value equality). A closed-reference literal is its branded id, tagged
174
+ * u64 after a roster re-verification (queries cross ids, never handle
175
+ * names).
176
+ */
177
+ function taggedLiteral(context, field, value) {
178
+ if (field.closed !== undefined) {
179
+ return taggedHandleId(context, field.closed, value);
180
+ }
181
+ switch (field.type.kind) {
182
+ case "bool": {
183
+ if (typeof value !== "boolean") {
184
+ throw literalShapeError(context, "boolean", value);
185
+ }
186
+ return { kind: "bool", value };
187
+ }
188
+ case "u64": {
189
+ if (typeof value !== "bigint") {
190
+ throw literalShapeError(context, "bigint", value);
191
+ }
192
+ return { kind: "u64", value };
193
+ }
194
+ case "i64": {
195
+ if (typeof value !== "bigint") {
196
+ throw literalShapeError(context, "bigint", value);
197
+ }
198
+ return { kind: "i64", value };
199
+ }
200
+ case "string": {
201
+ if (typeof value !== "string") {
202
+ throw literalShapeError(context, "string", value);
203
+ }
204
+ return { kind: "string", value };
205
+ }
206
+ case "fixedBytes": {
207
+ if (!(value instanceof Uint8Array)) {
208
+ throw literalShapeError(context, "Uint8Array", value);
209
+ }
210
+ return { kind: "fixedBytes", value };
211
+ }
212
+ case "interval":
213
+ return taggedAtElementDomain(context, field.type.element, value);
214
+ }
215
+ }
216
+ /**
217
+ * Tags one closed-reference literal: the branded id, re-verified against
218
+ * the roster (the belt the type level cannot provide against forged
219
+ * brands) and tagged u64 — queries cross ids, never handle names.
220
+ */
221
+ function taggedHandleId(context, closed, value) {
222
+ if (typeof value !== "bigint") {
223
+ throw literalShapeError(context, `a ${closed.name} handle id (bigint)`, value);
224
+ }
225
+ if (closed.handles[Number(value)] === undefined) {
226
+ throw errors.new(`${context}: closed relation ${closed.name} has no handle with id ${value} (roster holds ${closed.handles.length})`);
227
+ }
228
+ return { kind: "u64", value };
229
+ }
230
+ /**
231
+ * Tags one literal in an interval element domain: a bigint tags as the
232
+ * element (the membership typing rule's point side), an interval-shaped
233
+ * value as the interval (value equality).
234
+ */
235
+ function taggedAtElementDomain(context, element, value) {
236
+ if (typeof value === "bigint") {
237
+ if (element === "u64") {
238
+ return { kind: "u64", value };
239
+ }
240
+ return { kind: "i64", value };
241
+ }
242
+ if (isIntervalShaped(value)) {
243
+ if (element === "u64") {
244
+ return { kind: "intervalU64", start: value.start, end: value.end };
245
+ }
246
+ return { kind: "intervalI64", start: value.start, end: value.end };
247
+ }
248
+ throw literalShapeError(context, "bigint (point) or { start, end } (interval)", value);
249
+ }
250
+ /**
251
+ * Tags one host literal at a COMPARISON position, where no field position
252
+ * directs the type: the sibling term's element domain does — a measure
253
+ * sibling is u64, an interval-field sibling contributes its element type
254
+ * (so both a point literal in `covers` and a `span` literal in `allen`
255
+ * tag correctly), a scalar sibling its own type. At `pointIn` the operand
256
+ * order is interval-left, point-right (`ir::CmpOp::PointIn`), so an
257
+ * interval-shaped literal beside a scalar element-typed sibling is the
258
+ * LEGAL lhs of `covers(span(...), t)` and tags as the interval of the
259
+ * sibling's element domain; under every other operator an interval shape
260
+ * against a scalar sibling stays refused (the engine's IllegalComparison
261
+ * — eq/lt interval-vs-scalar is not a comparison).
262
+ */
263
+ function taggedCmpLiteral(context, sibling, value, op) {
264
+ if (sibling === "measure") {
265
+ if (typeof value !== "bigint") {
266
+ throw literalShapeError(context, "bigint (the measure is u64)", value);
267
+ }
268
+ return { kind: "u64", value };
269
+ }
270
+ if (sibling.type.kind === "interval") {
271
+ return taggedAtElementDomain(context, sibling.type.element, value);
272
+ }
273
+ if (op === "pointIn" && (sibling.type.kind === "u64" || sibling.type.kind === "i64") && isIntervalShaped(value)) {
274
+ return taggedAtElementDomain(context, sibling.type.kind, value);
275
+ }
276
+ return taggedLiteral(context, sibling, value);
277
+ }
278
+ /** Creates one rule-scoped variable numberer. */
279
+ function makeVarIds(registry) {
280
+ const assigned = new Map();
281
+ const state = { next: 0 };
282
+ return {
283
+ of(variable) {
284
+ const existing = assigned.get(variable);
285
+ if (existing !== undefined) {
286
+ return existing;
287
+ }
288
+ if (!registry.vars.has(variable)) {
289
+ throw errors.new(`query lowering: the variable declared from ${variable.relation}.${variable.field} belongs to a different query scope`);
290
+ }
291
+ const id = state.next;
292
+ state.next += 1;
293
+ assigned.set(variable, id);
294
+ return id;
295
+ },
296
+ synthetic() {
297
+ const id = state.next;
298
+ state.next += 1;
299
+ return id;
300
+ }
301
+ };
302
+ }
303
+ /** Resolves a param term to its dense positional id, recording the use. */
304
+ function paramIdOf(ctx, value, name) {
305
+ const index = ctx.registry.paramIndex.get(value);
306
+ if (index === undefined) {
307
+ throw errors.new(`query lowering: param ${name} belongs to a different query scope`);
308
+ }
309
+ ctx.usedParams.add(index);
310
+ return index;
311
+ }
312
+ /** Lowers one atom (either polarity) and appends any `oneOf` disjunctions. */
313
+ function lowerAtom(ctx, atom, ids, extraConditions) {
314
+ const source = lowerSource(ctx, atom.source);
315
+ const bindings = atom.bindings.map(function lowerBinding(binding) {
316
+ return [
317
+ fieldOrdinal(atom.source, binding),
318
+ lowerBindingTerm(ctx, atom.source, binding, ids, extraConditions)
319
+ ];
320
+ });
321
+ return { source, bindings };
322
+ }
323
+ /** Lowers an atom source to its numeric id, verifying scope membership. */
324
+ function lowerSource(ctx, source) {
325
+ if (source.kind === "relation") {
326
+ const member = ctx.theory.relations[source.relation.name];
327
+ if (member !== source.relation) {
328
+ throw errors.new(`query lowering: relation ${source.relation.name} is not the relation value schema ${ctx.theory.name} declares`);
329
+ }
330
+ const id = ctx.relationIds.get(source.relation.name);
331
+ if (id === undefined) {
332
+ throw errors.new(`query lowering: relation ${source.relation.name} has no ordinal`);
333
+ }
334
+ return { kind: "edb", relation: id };
335
+ }
336
+ const pred = ctx.predicateIds.get(source.pred);
337
+ if (pred === undefined) {
338
+ throw errors.new(`query lowering: predicate ${source.pred.name} was declared in a different query scope`);
339
+ }
340
+ return { kind: "idb", pred };
341
+ }
342
+ /** A binding's field ordinal: declaration index (relations) or head position (predicates). */
343
+ function fieldOrdinal(source, binding) {
344
+ if (source.kind === "relation") {
345
+ const ordinal = source.relation.data.fields.findIndex(function byName(candidate) {
346
+ return candidate.name === binding.field;
347
+ });
348
+ if (ordinal < 0) {
349
+ throw errors.new(`query lowering: relation ${source.relation.name} has no field ${binding.field}`);
350
+ }
351
+ return ordinal;
352
+ }
353
+ const ordinal = source.pred.columns.findIndex(function byName(candidate) {
354
+ return candidate.name === binding.field;
355
+ });
356
+ if (ordinal < 0) {
357
+ throw errors.new(`query lowering: predicate ${source.pred.name} has no column ${binding.field}`);
358
+ }
359
+ return ordinal;
360
+ }
361
+ /** Lowers one binding term; an `oneOf` mints a fresh variable + disjunction. */
362
+ function lowerBindingTerm(ctx, source, binding, ids, extraConditions) {
363
+ const context = `${sourceName(source)}.${binding.field}`;
364
+ const bound = binding.term;
365
+ if (bound.kind === "term") {
366
+ const value = bound.value;
367
+ switch (value[term]) {
368
+ case "var":
369
+ return { kind: "var", var: ids.of(value) };
370
+ case "param":
371
+ return { kind: "param", param: paramIdOf(ctx, value, value.name) };
372
+ case "paramSet":
373
+ return { kind: "paramSet", param: paramIdOf(ctx, value, value.name) };
374
+ case "maskParam":
375
+ throw errors.new(`${context}: an Allen-mask param is not a field-typed binding`);
376
+ }
377
+ }
378
+ if (bound.kind === "oneOf") {
379
+ const minted = ids.synthetic();
380
+ const leaves = bound.values.map(function equalityLeaf(candidate) {
381
+ return {
382
+ kind: "leaf",
383
+ cmp: {
384
+ op: { kind: "eq" },
385
+ lhs: { kind: "var", var: minted },
386
+ rhs: { kind: "literal", value: taggedLiteral(context, binding.data, candidate) }
387
+ }
388
+ };
389
+ });
390
+ extraConditions.push({ kind: "or", children: leaves });
391
+ return { kind: "var", var: minted };
392
+ }
393
+ return { kind: "literal", value: taggedLiteral(context, binding.data, bound.value) };
394
+ }
395
+ /** Lowers one comparison side; literals tag by the sibling's element domain (op-aware at `pointIn`). */
396
+ function lowerCmpTerm(ctx, side, sibling, ids, op) {
397
+ if (side.kind === "term") {
398
+ const value = side.value;
399
+ switch (value[term]) {
400
+ case "var":
401
+ return { kind: "var", var: ids.of(value) };
402
+ case "param":
403
+ return { kind: "param", param: paramIdOf(ctx, value, value.name) };
404
+ case "paramSet":
405
+ return { kind: "paramSet", param: paramIdOf(ctx, value, value.name) };
406
+ case "maskParam":
407
+ throw errors.new("query lowering: an Allen-mask param is not a comparison term — masks live in allen()'s mask position");
408
+ }
409
+ }
410
+ if (side.kind === "measure") {
411
+ return { kind: "measure", var: ids.of(side.over) };
412
+ }
413
+ if (sibling.kind === "term") {
414
+ const value = sibling.value;
415
+ if (value[term] === "maskParam") {
416
+ throw errors.new("query lowering: an Allen-mask param cannot type a literal side");
417
+ }
418
+ return {
419
+ kind: "literal",
420
+ value: taggedCmpLiteral("comparison literal", value.data, side.value, op)
421
+ };
422
+ }
423
+ if (sibling.kind === "measure") {
424
+ return {
425
+ kind: "literal",
426
+ value: taggedCmpLiteral("comparison literal", "measure", side.value, op)
427
+ };
428
+ }
429
+ throw errors.new("query lowering: a comparison without a variable or parameter side is constant-valued");
430
+ }
431
+ /** Lowers one comparison. */
432
+ function lowerComparison(ctx, cmp, ids) {
433
+ const op = cmp.op;
434
+ if (op.kind === "allen") {
435
+ const mask = op.mask.kind === "literal"
436
+ ? { kind: "literal", mask: op.mask.mask }
437
+ : { kind: "param", param: paramIdOf(ctx, op.mask.param, op.mask.param.name) };
438
+ return {
439
+ op: { kind: "allen", mask },
440
+ lhs: lowerCmpTerm(ctx, cmp.lhs, cmp.rhs, ids, "allen"),
441
+ rhs: lowerCmpTerm(ctx, cmp.rhs, cmp.lhs, ids, "allen")
442
+ };
443
+ }
444
+ return {
445
+ op: { kind: op.kind },
446
+ lhs: lowerCmpTerm(ctx, cmp.lhs, cmp.rhs, ids, op.kind),
447
+ rhs: lowerCmpTerm(ctx, cmp.rhs, cmp.lhs, ids, op.kind)
448
+ };
449
+ }
450
+ /** Lowers one condition node (comparison leaf or and/or tree). */
451
+ function lowerCondition(ctx, condition, ids) {
452
+ if (condition.item === "cmp") {
453
+ return { kind: "leaf", cmp: lowerComparison(ctx, condition, ids) };
454
+ }
455
+ return {
456
+ kind: condition.op,
457
+ children: condition.children.map(function lowerChild(child) {
458
+ return lowerCondition(ctx, child, ids);
459
+ })
460
+ };
461
+ }
462
+ /** Lowers one select entry to its per-rule find term. */
463
+ function lowerFind(entry, ids) {
464
+ if (entry.kind === "var") {
465
+ return { kind: "var", var: ids.of(entry.over) };
466
+ }
467
+ if (entry.kind === "measure") {
468
+ return { kind: "measure", var: ids.of(entry.over) };
469
+ }
470
+ const aggregate = entry.aggregate;
471
+ switch (aggregate.op) {
472
+ case "count":
473
+ return { kind: "aggregate", op: { kind: "count" } };
474
+ case "countDistinct":
475
+ return { kind: "aggregate", op: { kind: "countDistinct" }, over: ids.of(aggregate.over) };
476
+ case "fold": {
477
+ const over = aggregate.over;
478
+ if (isTerm(over)) {
479
+ return { kind: "aggregate", op: { kind: aggregate.fold }, over: ids.of(over) };
480
+ }
481
+ return { kind: "aggregateMeasure", op: { kind: aggregate.fold }, over: ids.of(over.measure) };
482
+ }
483
+ case "arg":
484
+ return {
485
+ kind: "aggregate",
486
+ op: { kind: aggregate.direction, key: ids.of(aggregate.key) },
487
+ over: ids.of(aggregate.over)
488
+ };
489
+ case "pack":
490
+ return { kind: "aggregate", op: { kind: "pack" }, over: ids.of(aggregate.over) };
491
+ }
492
+ }
493
+ /** One aggregate's var-free head-op kind (`AggOp::head_op`). */
494
+ function headOpOf(aggregate) {
495
+ switch (aggregate.op) {
496
+ case "count":
497
+ return "count";
498
+ case "countDistinct":
499
+ return "countDistinct";
500
+ case "fold":
501
+ return aggregate.fold;
502
+ case "arg":
503
+ return aggregate.direction;
504
+ case "pack":
505
+ return "pack";
506
+ }
507
+ }
508
+ /** One select entry's var-free head shape. */
509
+ function headTermOf(column) {
510
+ const entry = column.entry;
511
+ if (entry.kind === "var" || entry.kind === "measure") {
512
+ return { kind: "var" };
513
+ }
514
+ return { kind: "aggregate", op: headOpOf(entry.aggregate) };
515
+ }
516
+ /** Lowers one rule: body walked in written order, finds supplied per shape. */
517
+ function lowerRule(ctx, body, finds) {
518
+ const ids = makeVarIds(ctx.registry);
519
+ const atoms = [];
520
+ const negated = [];
521
+ const conditions = [];
522
+ const extraConditions = [];
523
+ for (const item of body) {
524
+ if (item.item === "atom") {
525
+ const lowered = lowerAtom(ctx, item, ids, extraConditions);
526
+ if (item.negated) {
527
+ negated.push(lowered);
528
+ }
529
+ else {
530
+ atoms.push(lowered);
531
+ }
532
+ continue;
533
+ }
534
+ conditions.push(lowerCondition(ctx, item, ids));
535
+ }
536
+ return {
537
+ finds: finds(ids),
538
+ atoms,
539
+ negated,
540
+ conditions: [...conditions, ...extraConditions]
541
+ };
542
+ }
543
+ /**
544
+ * Lowers a query value to the bridge's `ProgramIr` — pure and stable: the
545
+ * declared predicates in declaration order (`PredId` = index), the output
546
+ * predicate (built from `rules` + `select`) appended last. Relations lower
547
+ * by declaration ordinal, the law the engine's own manifest pins;
548
+ * `db.prepare` re-verifies the alignment against the live manifest before
549
+ * sending.
550
+ */
551
+ function lowerQuery(q) {
552
+ const theory = q.schema;
553
+ const relationIds = new Map();
554
+ Object.keys(theory.relations).forEach(function assignOrdinal(name, index) {
555
+ relationIds.set(name, index);
556
+ });
557
+ const registry = q.data.registry;
558
+ const predicateIds = new Map();
559
+ registry.predicates.forEach(function assignPredId(pred, index) {
560
+ predicateIds.set(pred, index);
561
+ });
562
+ const ctx = { theory, relationIds, predicateIds, registry, usedParams: new Set() };
563
+ const predicates = registry.predicates.map(function lowerPredicate(pred) {
564
+ return {
565
+ head: pred.columns.map(function boundHead() {
566
+ return { kind: "var" };
567
+ }),
568
+ rules: pred.rules.map(function lowerClause(rule) {
569
+ return lowerRule(ctx, rule.body, function clauseFinds(ids) {
570
+ return rule.finds.map(function findVar(variable) {
571
+ return { kind: "var", var: ids.of(variable) };
572
+ });
573
+ });
574
+ })
575
+ };
576
+ });
577
+ predicates.push({
578
+ head: q.data.select.map(headTermOf),
579
+ rules: q.data.rules.map(function lowerOutputRule(body) {
580
+ return lowerRule(ctx, body, function outputFinds(ids) {
581
+ return q.data.select.map(function findOf(column) {
582
+ return lowerFind(column.entry, ids);
583
+ });
584
+ });
585
+ })
586
+ });
587
+ /**
588
+ * The dead-declaration refusal: a declared param no rule reached is
589
+ * unexecutable BOTH ways — its inferred `Params` contribution is nothing
590
+ * (params ride item phantoms), yet the wire marshal is the full registry
591
+ * in declaration order, while the ENGINE's arity is usage-derived. The
592
+ * contradiction is refused here, the earliest seam that knows usage, so
593
+ * every query that lowers has registry == used set (and the dense-id
594
+ * hole a skipped middle declaration would open never exists).
595
+ */
596
+ registry.params.forEach(function assertUsed(entry, index) {
597
+ if (!ctx.usedParams.has(index)) {
598
+ throw errors.new(`query declares param ${entry.name} but no rule uses it — remove the declaration or reference it`);
599
+ }
600
+ });
601
+ return { predicates, output: registry.predicates.length };
602
+ }
603
+ export { lowerQuery, query, taggedLiteral };
604
+ //# sourceMappingURL=lower.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lower.js","sourceRoot":"","sources":["../../src/query/lower.ts"],"names":[],"mappings":"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"}