@bjornpagen/bumbledb 0.20.2 → 1.0.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.
- package/COOKBOOK.md +283 -1611
- package/README.md +156 -118
- package/dist/capacity.d.ts +16 -12
- package/dist/capacity.d.ts.map +1 -1
- package/dist/capacity.js +16 -48
- package/dist/capacity.js.map +1 -1
- package/dist/changes.d.ts +54 -0
- package/dist/changes.d.ts.map +1 -0
- package/dist/changes.js +245 -0
- package/dist/changes.js.map +1 -0
- package/dist/close.d.ts +24 -0
- package/dist/close.d.ts.map +1 -0
- package/dist/close.js +34 -0
- package/dist/close.js.map +1 -0
- package/dist/closed.d.ts +1 -3
- package/dist/closed.d.ts.map +1 -1
- package/dist/closed.js +24 -12
- package/dist/closed.js.map +1 -1
- package/dist/codec.d.ts +56 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +289 -0
- package/dist/codec.js.map +1 -0
- package/dist/compile.d.ts +68 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +75 -0
- package/dist/compile.js.map +1 -0
- package/dist/db-native.d.ts +170 -0
- package/dist/db-native.d.ts.map +1 -0
- package/dist/db-native.js +5 -0
- package/dist/db-native.js.map +1 -0
- package/dist/db.d.ts +101 -233
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +232 -1084
- package/dist/db.js.map +1 -1
- package/dist/errors.d.ts +57 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +32 -0
- package/dist/errors.js.map +1 -0
- package/dist/face.d.ts.map +1 -1
- package/dist/face.js +2 -2
- package/dist/face.js.map +1 -1
- package/dist/fields.d.ts +65 -24
- package/dist/fields.d.ts.map +1 -1
- package/dist/fields.js +94 -24
- package/dist/fields.js.map +1 -1
- package/dist/index.d.ts +37 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -21
- package/dist/index.js.map +1 -1
- package/dist/internal/log.d.ts +24 -0
- package/dist/internal/log.d.ts.map +1 -0
- package/dist/internal/log.js +10 -0
- package/dist/internal/log.js.map +1 -0
- package/dist/law.d.ts +8 -13
- package/dist/law.d.ts.map +1 -1
- package/dist/law.js +6 -59
- package/dist/law.js.map +1 -1
- package/dist/lower.d.ts +0 -13
- package/dist/lower.d.ts.map +1 -1
- package/dist/lower.js +9 -17
- package/dist/lower.js.map +1 -1
- package/dist/migration.d.ts +33 -0
- package/dist/migration.d.ts.map +1 -0
- package/dist/migration.js +48 -0
- package/dist/migration.js.map +1 -0
- package/dist/native.d.ts +256 -301
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js +65 -108
- package/dist/native.js.map +1 -1
- package/dist/query/atom.d.ts +24 -13
- package/dist/query/atom.d.ts.map +1 -1
- package/dist/query/atom.js +7 -3
- package/dist/query/atom.js.map +1 -1
- package/dist/query/compute.d.ts +68 -0
- package/dist/query/compute.d.ts.map +1 -0
- package/dist/query/compute.js +141 -0
- package/dist/query/compute.js.map +1 -0
- package/dist/query/find.d.ts +15 -8
- package/dist/query/find.d.ts.map +1 -1
- package/dist/query/find.js +6 -2
- package/dist/query/find.js.map +1 -1
- package/dist/query/lower.d.ts +23 -2
- package/dist/query/lower.d.ts.map +1 -1
- package/dist/query/lower.js +433 -80
- package/dist/query/lower.js.map +1 -1
- package/dist/query/parse-ir.d.ts.map +1 -1
- package/dist/query/parse-ir.js +17 -8
- package/dist/query/parse-ir.js.map +1 -1
- package/dist/query/run.d.ts +12 -2
- package/dist/query/run.d.ts.map +1 -1
- package/dist/query/run.js +26 -9
- package/dist/query/run.js.map +1 -1
- package/dist/query/scope.d.ts +47 -3
- package/dist/query/scope.d.ts.map +1 -1
- package/dist/query/scope.js +83 -19
- package/dist/query/scope.js.map +1 -1
- package/dist/relation.d.ts +3 -8
- package/dist/relation.d.ts.map +1 -1
- package/dist/relation.js +16 -10
- package/dist/relation.js.map +1 -1
- package/dist/result.d.ts +47 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +50 -0
- package/dist/result.js.map +1 -0
- package/dist/rows.d.ts +69 -0
- package/dist/rows.d.ts.map +1 -0
- package/dist/rows.js +328 -0
- package/dist/rows.js.map +1 -0
- package/dist/runtime-codes.d.ts +2 -0
- package/dist/runtime-codes.d.ts.map +1 -0
- package/dist/runtime-codes.js +19 -0
- package/dist/runtime-codes.js.map +1 -0
- package/dist/runtime-errors.d.ts +106 -0
- package/dist/runtime-errors.d.ts.map +1 -0
- package/dist/runtime-errors.js +62 -0
- package/dist/runtime-errors.js.map +1 -0
- package/dist/runtime-native.d.ts +171 -0
- package/dist/runtime-native.d.ts.map +1 -0
- package/dist/runtime-native.js +5 -0
- package/dist/runtime-native.js.map +1 -0
- package/dist/runtime.d.ts +73 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +293 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scalar.d.ts +165 -0
- package/dist/scalar.d.ts.map +1 -0
- package/dist/scalar.js +344 -0
- package/dist/scalar.js.map +1 -0
- package/dist/schema.d.ts +1 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +34 -37
- package/dist/schema.js.map +1 -1
- package/dist/shape.d.ts +28 -0
- package/dist/shape.d.ts.map +1 -0
- package/dist/shape.js +2 -0
- package/dist/shape.js.map +1 -0
- package/dist/spec.d.ts +27 -3
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js +22 -1
- package/dist/spec.js.map +1 -1
- package/dist/statements.d.ts +16 -3
- package/dist/statements.d.ts.map +1 -1
- package/dist/statements.js +54 -28
- package/dist/statements.js.map +1 -1
- package/dist/uuid.d.ts +23 -0
- package/dist/uuid.d.ts.map +1 -0
- package/dist/uuid.js +54 -0
- package/dist/uuid.js.map +1 -0
- package/pack-provenance.json +7 -0
- package/package.json +12 -16
- package/src/capacity.ts +34 -54
- package/src/changes.ts +361 -0
- package/src/close.ts +53 -0
- package/src/closed.ts +25 -19
- package/src/codec.ts +379 -0
- package/src/compile.ts +149 -0
- package/src/db-native.ts +247 -0
- package/src/db.ts +461 -1632
- package/src/errors.ts +50 -0
- package/src/face.ts +2 -2
- package/src/fields.ts +182 -55
- package/src/index.ts +62 -126
- package/src/internal/log.ts +51 -0
- package/src/law.ts +13 -28
- package/src/lower.ts +9 -4
- package/src/migration.ts +69 -0
- package/src/native.ts +326 -487
- package/src/query/atom.ts +61 -25
- package/src/query/compute.ts +237 -0
- package/src/query/find.ts +31 -12
- package/src/query/lower.ts +531 -143
- package/src/query/parse-ir.ts +18 -13
- package/src/query/run.ts +32 -16
- package/src/query/scope.ts +140 -8
- package/src/relation.ts +17 -21
- package/src/result.ts +130 -0
- package/src/rows.ts +404 -0
- package/src/runtime-codes.ts +18 -0
- package/src/runtime-errors.ts +69 -0
- package/src/runtime-native.ts +242 -0
- package/src/runtime.ts +440 -0
- package/src/scalar.ts +560 -0
- package/src/schema.ts +35 -37
- package/src/shape.ts +31 -0
- package/src/spec.ts +33 -3
- package/src/statements.ts +75 -68
- package/src/uuid.ts +69 -0
- package/dist/marshal.d.ts +0 -44
- package/dist/marshal.d.ts.map +0 -1
- package/dist/marshal.js +0 -165
- package/dist/marshal.js.map +0 -1
- package/src/marshal.ts +0 -200
package/dist/query/scope.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import * as errors from "@superbuilders/errors";
|
|
2
1
|
import { sealedFieldsOf } from "#closed.ts";
|
|
2
|
+
import { AuthoringError, SdkInvariantError } from "#errors.ts";
|
|
3
3
|
import { rosterOf, signaturesAgree } from "#fields.ts";
|
|
4
4
|
const term = Symbol("bumbledb.query.term");
|
|
5
5
|
const inferred = Symbol("bumbledb.query.inferred");
|
|
@@ -17,33 +17,97 @@ function varsMinted(owner, record) {
|
|
|
17
17
|
return Object.hasOwn(record, declared.name);
|
|
18
18
|
});
|
|
19
19
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
20
|
+
function isImportedSource(value) {
|
|
21
|
+
if (typeof value !== "object" || value === null || !("data" in value) || !("schema" in value)) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
const data = value.data;
|
|
25
|
+
return (typeof data === "object" &&
|
|
26
|
+
data !== null &&
|
|
27
|
+
"kind" in data &&
|
|
28
|
+
(data.kind === "cq" || data.kind === "reach") &&
|
|
29
|
+
"finds" in data);
|
|
30
|
+
}
|
|
31
|
+
const facadeBySource = new WeakMap();
|
|
32
|
+
const facadeByOwner = new WeakMap();
|
|
33
|
+
let importOrdinal = 0;
|
|
34
|
+
const importLabels = new WeakMap();
|
|
35
|
+
/** `.named(label)` registration — a diagnostic name, never a schema relation. */
|
|
36
|
+
function labelImport(source, label) {
|
|
37
|
+
importLabels.set(source, label);
|
|
38
|
+
}
|
|
39
|
+
function importFacadeOf(source) {
|
|
40
|
+
const cached = facadeBySource.get(source);
|
|
41
|
+
if (cached !== undefined) {
|
|
42
|
+
return cached;
|
|
43
|
+
}
|
|
44
|
+
importOrdinal += 1;
|
|
45
|
+
const name = importLabels.get(source) ?? `\u0000import:${importOrdinal}`;
|
|
46
|
+
const columns = new Map();
|
|
47
|
+
const fields = [];
|
|
48
|
+
for (const column of source.data.finds) {
|
|
49
|
+
if (column.slot === undefined) {
|
|
50
|
+
throw new AuthoringError({
|
|
51
|
+
message: `v(query): the imported head column ${column.name} carries no descriptor — the imported query is not a mintable relation expression`
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
columns.set(column.name, column);
|
|
55
|
+
fields.push(Object.freeze({ name: column.name, field: column.slot.field }));
|
|
56
|
+
}
|
|
57
|
+
const data = Object.freeze({ name, fields: Object.freeze(fields) });
|
|
58
|
+
const owner = Object.freeze({
|
|
59
|
+
name,
|
|
60
|
+
data,
|
|
61
|
+
where() {
|
|
62
|
+
throw new AuthoringError({
|
|
63
|
+
message: `imported query ${name}: an imported relation expression takes no selection — filter through where() in the consuming rule`
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
const facade = Object.freeze({ owner, source, columns });
|
|
68
|
+
facadeBySource.set(source, facade);
|
|
69
|
+
facadeByOwner.set(owner, facade);
|
|
70
|
+
return facade;
|
|
71
|
+
}
|
|
72
|
+
/** The import awareness the lowering's mint judgment reads. */
|
|
73
|
+
function importFacadeOfOwner(owner) {
|
|
74
|
+
return facadeByOwner.get(owner);
|
|
75
|
+
}
|
|
32
76
|
function v(owner) {
|
|
77
|
+
if (isImportedSource(owner) && !("name" in owner)) {
|
|
78
|
+
const facade = importFacadeOf(owner);
|
|
79
|
+
const record = {};
|
|
80
|
+
for (const [columnName, column] of facade.columns) {
|
|
81
|
+
const slot = column.slot;
|
|
82
|
+
if (slot === undefined) {
|
|
83
|
+
throw new SdkInvariantError({ message: `v(query): facade column ${columnName} lost its slot` });
|
|
84
|
+
}
|
|
85
|
+
const variable = Object.freeze({
|
|
86
|
+
[term]: "var",
|
|
87
|
+
owner: facade.owner,
|
|
88
|
+
column: columnName,
|
|
89
|
+
field: slot.field,
|
|
90
|
+
label: `${facade.owner.name}.${columnName}`
|
|
91
|
+
});
|
|
92
|
+
Object.defineProperty(record, columnName, { value: variable, enumerable: true });
|
|
93
|
+
}
|
|
94
|
+
return Object.freeze(record);
|
|
95
|
+
}
|
|
96
|
+
const member = owner;
|
|
33
97
|
const record = {};
|
|
34
|
-
for (const declared of sealedFieldsOf(
|
|
98
|
+
for (const declared of sealedFieldsOf(member)) {
|
|
35
99
|
const variable = Object.freeze({
|
|
36
100
|
[term]: "var",
|
|
37
|
-
owner,
|
|
101
|
+
owner: member,
|
|
38
102
|
column: declared.name,
|
|
39
103
|
field: declared.field,
|
|
40
|
-
label: `${
|
|
104
|
+
label: `${member.name}.${declared.name}`
|
|
41
105
|
});
|
|
42
106
|
Object.defineProperty(record, declared.name, { value: variable, enumerable: true });
|
|
43
107
|
}
|
|
44
108
|
Object.freeze(record);
|
|
45
|
-
if (!varsMinted(
|
|
46
|
-
throw
|
|
109
|
+
if (!varsMinted(member, record)) {
|
|
110
|
+
throw new SdkInvariantError({ message: `v(${member.name}): variable-record minting incomplete` });
|
|
47
111
|
}
|
|
48
112
|
return record;
|
|
49
113
|
}
|
|
@@ -101,5 +165,5 @@ function renderFieldKind(slot) {
|
|
|
101
165
|
}
|
|
102
166
|
return slot.class === undefined ? `${base} (bare)` : `${base} in class ${slot.class}`;
|
|
103
167
|
}
|
|
104
|
-
export { fieldAntiJoins, fieldJoins, headFieldJoins, inferred, isTerm, makeParam, makeSetParam, renderFieldKind, term, v };
|
|
168
|
+
export { fieldAntiJoins, fieldJoins, headFieldJoins, importFacadeOf, importFacadeOfOwner, inferred, isImportedSource, isTerm, labelImport, makeParam, makeSetParam, renderFieldKind, term, v };
|
|
105
169
|
//# sourceMappingURL=scope.js.map
|
package/dist/query/scope.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/query/scope.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/query/scope.ts"],"names":[],"mappings":"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"}
|
package/dist/relation.d.ts
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
* NAME everywhere — statements (`on(R, "holder")`), selections, and match
|
|
9
9
|
* records all spell the field's own name, checked by type
|
|
10
10
|
* (`FaceFields`/`MatchShape`). `Fact<>` is the inferred row object type
|
|
11
|
-
* at BARE structural value types
|
|
12
|
-
*
|
|
11
|
+
* at BARE structural value types: every field is present. Identities are
|
|
12
|
+
* ordinary application-owned values (`Uuid`); the database mints none.
|
|
13
13
|
*/
|
|
14
14
|
import { type AnyField, type Infer } from "./fields.js";
|
|
15
15
|
import { type LiteralSetSpec } from "./spec.js";
|
|
@@ -48,12 +48,7 @@ type RelationFields<R extends AnyRelation> = R extends Relation<string, infer F
|
|
|
48
48
|
type Fact<R extends AnyRelation> = {
|
|
49
49
|
[K in keyof RelationFields<R>]: Infer<RelationFields<R>[K]>;
|
|
50
50
|
};
|
|
51
|
-
type FreshKeys<R extends AnyRelation> = {
|
|
52
|
-
[K in keyof RelationFields<R>]: RelationFields<R>[K] extends {
|
|
53
|
-
readonly fresh: true;
|
|
54
|
-
} ? K : never;
|
|
55
|
-
}[keyof RelationFields<R>];
|
|
56
51
|
declare function relation<const Name extends string, Fields extends FieldsShape>(name: Name, fields: Fields): Relation<Name, Fields>;
|
|
57
|
-
export type { AnyRelation, AnySelected, Fact, FieldsShape,
|
|
52
|
+
export type { AnyRelation, AnySelected, Fact, FieldsShape, Relation, RelationData, RelationField, RelationFields, Selected, SelectionBinding, SelectionInput };
|
|
58
53
|
export { relation, resolveSelection };
|
|
59
54
|
//# sourceMappingURL=relation.d.ts.map
|
package/dist/relation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../src/relation.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../src/relation.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,KAAK,QAAQ,EAAsD,KAAK,KAAK,EAAa,MAAM,YAAY,CAAA;AACrH,OAAO,EAAE,KAAK,cAAc,EAAmC,MAAM,UAAU,CAAA;AA6B/E,iBAAS,gBAAgB,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,SAAS,aAAa,EAAE,EACjC,OAAO,EAAE,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAChD,SAAS,gBAAgB,EAAE,CAsB7B;AAED,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;AAE3C,UAAU,aAAa;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAA;CACxB;AAED,UAAU,YAAY;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,CAAA;CACzC;AAED,UAAU,gBAAgB;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,GAAG,EAAE,cAAc,CAAA;CAC5B;AAED,KAAK,cAAc,CAAC,MAAM,SAAS,WAAW,IAAI;IACjD,QAAQ,EAAE,CAAC,IAAI,MAAM,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;CAC7E,CAAA;AAED,UAAU,QAAQ,CAAC,IAAI,SAAS,MAAM,EAAE,MAAM,SAAS,WAAW;IACjE,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAC/C;AAED,UAAU,QAAQ,CAAC,IAAI,SAAS,MAAM,EAAE,MAAM,SAAS,WAAW;IACjE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAA;IAC3B,KAAK,CAAC,SAAS,EAAE,cAAc,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;CAChE;AAED,KAAK,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;AAEhD,UAAU,WAAW;IACpB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAA;IAC9B,QAAQ,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAC/C;AAED,KAAK,cAAc,CAAC,CAAC,SAAS,WAAW,IAAI,CAAC,SAAS,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,WAAW,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA;AAEhH,KAAK,IAAI,CAAC,CAAC,SAAS,WAAW,IAAI;KACjC,CAAC,IAAI,MAAM,cAAc,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;CAC3D,CAAA;AAED,iBAAS,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,EAAE,MAAM,SAAS,WAAW,EACtE,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,GACZ,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAuBxB;AAED,YAAY,EACX,WAAW,EACX,WAAW,EACX,IAAI,EACJ,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,aAAa,EACb,cAAc,EACd,QAAQ,EACR,gBAAgB,EAChB,cAAc,EACd,CAAA;AACD,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAA"}
|
package/dist/relation.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AuthoringError } from "#errors.ts";
|
|
1
2
|
/**
|
|
2
3
|
* `relation` — the ordinary-relation half of the theory's signature. A
|
|
3
4
|
* relation value is a frozen plain object carrying its name, its ordered
|
|
@@ -8,25 +9,28 @@
|
|
|
8
9
|
* NAME everywhere — statements (`on(R, "holder")`), selections, and match
|
|
9
10
|
* records all spell the field's own name, checked by type
|
|
10
11
|
* (`FaceFields`/`MatchShape`). `Fact<>` is the inferred row object type
|
|
11
|
-
* at BARE structural value types
|
|
12
|
-
*
|
|
12
|
+
* at BARE structural value types: every field is present. Identities are
|
|
13
|
+
* ordinary application-owned values (`Uuid`); the database mints none.
|
|
13
14
|
*/
|
|
14
|
-
import * as errors from "@superbuilders/errors";
|
|
15
15
|
import { assertDeclarationOrderKey, assertDeclarationRecord, literalOf } from "#fields.ts";
|
|
16
16
|
import { renderLiteral } from "#spec.ts";
|
|
17
17
|
function resolveEntry(context, field, entry) {
|
|
18
18
|
if (Array.isArray(entry)) {
|
|
19
19
|
if (entry.length < 2) {
|
|
20
|
-
throw
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
throw new AuthoringError({
|
|
21
|
+
message: entry.length === 0
|
|
22
|
+
? `${context}: an empty literal set selects nothing — write the selection you mean`
|
|
23
|
+
: `${context}: a one-element literal set is the bare literal respelled — write the literal (the canonical-utterance law: one meaning, one spelling)`
|
|
24
|
+
});
|
|
23
25
|
}
|
|
24
26
|
const seen = new Set();
|
|
25
27
|
const literals = entry.map(function lowerSetLiteral(literal) {
|
|
26
28
|
const lowered = Object.freeze(literalOf(field, literal));
|
|
27
29
|
const rendered = renderLiteral(lowered);
|
|
28
30
|
if (seen.has(rendered)) {
|
|
29
|
-
throw
|
|
31
|
+
throw new AuthoringError({
|
|
32
|
+
message: `${context}: the literal set spells ${rendered} twice — write it once (the canonical-utterance law: one meaning, one spelling)`
|
|
33
|
+
});
|
|
30
34
|
}
|
|
31
35
|
seen.add(rendered);
|
|
32
36
|
return lowered;
|
|
@@ -45,12 +49,14 @@ function resolveSelection(name, ordered, entries) {
|
|
|
45
49
|
return candidate.name === fieldName;
|
|
46
50
|
});
|
|
47
51
|
if (declared === undefined) {
|
|
48
|
-
throw
|
|
52
|
+
throw new AuthoringError({ message: `relation ${name} has no field ${fieldName}` });
|
|
49
53
|
}
|
|
50
54
|
bindings.push(Object.freeze({ field: fieldName, set: resolveEntry(`relation ${name}.${fieldName}`, declared.field, entry) }));
|
|
51
55
|
}
|
|
52
56
|
if (bindings.length === 0) {
|
|
53
|
-
throw
|
|
57
|
+
throw new AuthoringError({
|
|
58
|
+
message: `relation ${name}: an empty selection is the bare relation respelled — pass the relation itself (the canonical-utterance law: one meaning, one spelling)`
|
|
59
|
+
});
|
|
54
60
|
}
|
|
55
61
|
return Object.freeze(bindings);
|
|
56
62
|
}
|
|
@@ -67,7 +73,7 @@ function relation(name, fields) {
|
|
|
67
73
|
function where(selection) {
|
|
68
74
|
const owner = holder.value;
|
|
69
75
|
if (owner === undefined) {
|
|
70
|
-
throw
|
|
76
|
+
throw new AuthoringError({ message: `relation ${name}: self-reference read before construction completed` });
|
|
71
77
|
}
|
|
72
78
|
return Object.freeze({
|
|
73
79
|
relation: owner,
|
package/dist/relation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"relation.js","sourceRoot":"","sources":["../src/relation.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"relation.js","sourceRoot":"","sources":["../src/relation.ts"],"names":[],"mappings":"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"}
|
package/dist/result.d.ts
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { Effect, Stream } from "effect";
|
|
2
|
+
import type { ResultHandle } from "./db-native.js";
|
|
3
|
+
import type { FindColumn } from "./query/atom.js";
|
|
4
|
+
import type { ExecutionPolicy } from "./runtime.js";
|
|
5
|
+
import type { CloseReport, DbError } from "./runtime-errors.js";
|
|
6
|
+
/**
|
|
7
|
+
* `CompleteResult<A>` — the sealed owner of one COMPLETED query answer
|
|
8
|
+
* (C05): published only after all evaluation/finalization succeeded,
|
|
9
|
+
* possibly backed by temporary LMDB scratch. Owned and independent of its
|
|
10
|
+
* source snapshot/session.
|
|
11
|
+
*
|
|
12
|
+
* `collect` materializes a bounded owned array and leaves the result
|
|
13
|
+
* available; it refuses (`ResourceLimit`) before allocating past
|
|
14
|
+
* `maxBytes`, and a cap failure leaves the sealed backing available for
|
|
15
|
+
* `pages`. `pages` is chapter 35's ONE-SHOT consuming stream over the
|
|
16
|
+
* completed result: its first execution atomically spends the result and
|
|
17
|
+
* moves the backing storage into a private cursor owned by the stream's
|
|
18
|
+
* scope — construction alone spends nothing, a second run fails
|
|
19
|
+
* `SpentHandle`, and a run after the result's scope closed fails
|
|
20
|
+
* `ClosedHandle`. Early take, downstream failure and interruption all
|
|
21
|
+
* close/drain the private cursor; EOF cleanup is identical. There is no
|
|
22
|
+
* public cursor, `next`, AsyncIterable, clone or second streaming API.
|
|
23
|
+
*/
|
|
24
|
+
interface CompleteResult<A> {
|
|
25
|
+
collect(options: {
|
|
26
|
+
readonly maxBytes: bigint;
|
|
27
|
+
}, work: ExecutionPolicy): Effect.Effect<ReadonlyArray<A>, DbError>;
|
|
28
|
+
pages(options: {
|
|
29
|
+
readonly pageBytes: bigint;
|
|
30
|
+
}, work: ExecutionPolicy): Stream.Stream<ReadonlyArray<A>, DbError>;
|
|
31
|
+
close(): Effect.Effect<CloseReport>;
|
|
32
|
+
}
|
|
33
|
+
interface ResultInternal {
|
|
34
|
+
readonly handle: ResultHandle;
|
|
35
|
+
}
|
|
36
|
+
/** Private cross-module accessor (scope finalizers in db.ts reach the handle). */
|
|
37
|
+
declare function internalResult(value: object): ResultInternal | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Internal constructor: `db.ts` publishes results through this after
|
|
40
|
+
* execution completes. Delivery (`collect`/`pages`) starts a fresh bounded
|
|
41
|
+
* operation under the caller's delivery policy — never the completed query's
|
|
42
|
+
* expired execution deadline.
|
|
43
|
+
*/
|
|
44
|
+
declare function makeCompleteResult<A>(handle: ResultHandle, finds: readonly FindColumn[]): CompleteResult<A>;
|
|
45
|
+
export type { CompleteResult };
|
|
46
|
+
export { internalResult, makeCompleteResult };
|
|
47
|
+
//# sourceMappingURL=result.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,KAAK,EAAgB,YAAY,EAAE,MAAM,eAAe,CAAA;AAE/D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAGhD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAE9D;;;;;;;;;;;;;;;;;GAiBG;AACH,UAAU,cAAc,CAAC,CAAC;IACzB,OAAO,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IAChH,KAAK,CAAC,OAAO,EAAE;QAAE,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,IAAI,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;IAC/G,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;CACnC;AAED,UAAU,cAAc;IACvB,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAA;CAC7B;AAID,kFAAkF;AAClF,iBAAS,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAEjE;AAQD;;;;;GAKG;AACH,iBAAS,kBAAkB,CAAC,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,CAoEpG;AAED,YAAY,EAAE,cAAc,EAAE,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAA"}
|
package/dist/result.js
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Effect, Option, Stream } from "effect";
|
|
2
|
+
import { drainClose, releaseOwner } from "#close.ts";
|
|
3
|
+
import { dbNative } from "#db-native.ts";
|
|
4
|
+
import { decodeAnswers } from "#query/run.ts";
|
|
5
|
+
import { deliveryResultBytes, nativeOperationWith, policyWire } from "#runtime.ts";
|
|
6
|
+
const resultInternals = new WeakMap();
|
|
7
|
+
/** Private cross-module accessor (scope finalizers in db.ts reach the handle). */
|
|
8
|
+
function internalResult(value) {
|
|
9
|
+
return resultInternals.get(value);
|
|
10
|
+
}
|
|
11
|
+
function decodePage(finds, rows) {
|
|
12
|
+
// Owned ordinary records in declared column order — the same fields and
|
|
13
|
+
// shapes on every page (stable row shape; no Proxy, no per-row fiber).
|
|
14
|
+
return Object.freeze(decodeAnswers(finds, rows));
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Internal constructor: `db.ts` publishes results through this after
|
|
18
|
+
* execution completes. Delivery (`collect`/`pages`) starts a fresh bounded
|
|
19
|
+
* operation under the caller's delivery policy — never the completed query's
|
|
20
|
+
* expired execution deadline.
|
|
21
|
+
*/
|
|
22
|
+
function makeCompleteResult(handle, finds) {
|
|
23
|
+
function deliveryWire(operation, delivery, requested) {
|
|
24
|
+
return policyWire({ ...delivery, resultBytes: deliveryResultBytes(requested, delivery) }, operation);
|
|
25
|
+
}
|
|
26
|
+
const value = {
|
|
27
|
+
collect(options, work) {
|
|
28
|
+
return Effect.suspend(() => nativeOperationWith("CompleteResult.collect", (callback) => dbNative.runtimeResultCollect(handle, deliveryWire("CompleteResult.collect", work, options.maxBytes), callback), dbNative.runtimeRowsTake, (rows) => decodePage(finds, rows)));
|
|
29
|
+
},
|
|
30
|
+
pages(options, work) {
|
|
31
|
+
return Stream.unwrap(Effect.gen(function* () {
|
|
32
|
+
const cursor = yield* Effect.acquireRelease(nativeOperationWith("CompleteResult.pages", (callback) => dbNative.runtimeResultCursor(handle, deliveryWire("CompleteResult.pages", work, options.pageBytes), callback), dbNative.runtimeCursorTake, (taken) => taken), (taken) => releaseOwner("ResultCursor.close", (callback) => dbNative.runtimeCursorClose(taken, callback)), { interruptible: true });
|
|
33
|
+
return Stream.paginate(undefined, () => nativeOperationWith("CompleteResult.page", (callback) => dbNative.runtimeCursorNext(cursor, deliveryWire("CompleteResult.page", work, options.pageBytes), callback), dbNative.runtimePageTake, (page) => page).pipe(Effect.map((page) => {
|
|
34
|
+
if (page === null) {
|
|
35
|
+
return [[], Option.none()];
|
|
36
|
+
}
|
|
37
|
+
return [[decodePage(finds, page)], Option.some(undefined)];
|
|
38
|
+
})));
|
|
39
|
+
}));
|
|
40
|
+
},
|
|
41
|
+
close() {
|
|
42
|
+
return drainClose("CompleteResult.close", (callback) => dbNative.runtimeResultClose(handle, callback));
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
Object.freeze(value);
|
|
46
|
+
resultInternals.set(value, { handle });
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
export { internalResult, makeCompleteResult };
|
|
50
|
+
//# sourceMappingURL=result.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result.js","sourceRoot":"","sources":["../src/result.ts"],"names":[],"mappings":"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"}
|
package/dist/rows.d.ts
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The successor row codec: fact object ⇄ positional cell array by field
|
|
3
|
+
* ordinal, schema-directed, in ONE place. The write side lowers named host
|
|
4
|
+
* objects to rows in the relation's field-declaration order (declaration
|
|
5
|
+
* order = ordinal ids); the read side decodes owned rows back to named
|
|
6
|
+
* objects of BARE structural values. This module is the one fact⇄row
|
|
7
|
+
* projector. It covers the COMPLETE successor value roster: bool, u64, i64,
|
|
8
|
+
* f64, uuid, str, bytes<N>, discrete intervals and dense float intervals,
|
|
9
|
+
* plus the closed-handle bijection (name ⇄ declaration-order row id).
|
|
10
|
+
*
|
|
11
|
+
* Cells here are OWNED plain host values; the native boundary re-judges
|
|
12
|
+
* every crossing against its resident sealed roster. Shape misuse throws
|
|
13
|
+
* the pure {@link AuthoringError}; the Effect ingestion boundary catches
|
|
14
|
+
* and types it (never an untracked partial draft). SharedArrayBuffer-backed
|
|
15
|
+
* views are refused before any copy. Host length is judged before string
|
|
16
|
+
* scans and byte copies (TS-004).
|
|
17
|
+
*/
|
|
18
|
+
import type { AnyClosedRoster, AnyField } from "./fields.js";
|
|
19
|
+
import type { AnyRelation, Fact, RelationData } from "./relation.js";
|
|
20
|
+
/**
|
|
21
|
+
* One owned cell at the private bridge boundary. The declared sealed field
|
|
22
|
+
* type disambiguates the union: `string` is text, an `uuid` in its
|
|
23
|
+
* canonical hyphenated UUID spelling (chapter 35), or a closed handle
|
|
24
|
+
* before lowering (closed handles cross as `bigint` row ids),
|
|
25
|
+
* `Uint8Array` is `bytes<N>`, `{ start, end }` bigints are a discrete
|
|
26
|
+
* interval and numbers a dense float interval.
|
|
27
|
+
*/
|
|
28
|
+
type CellValue = boolean | bigint | number | string | Uint8Array | {
|
|
29
|
+
readonly start: bigint;
|
|
30
|
+
readonly end: bigint;
|
|
31
|
+
} | {
|
|
32
|
+
readonly start: number;
|
|
33
|
+
readonly end: number;
|
|
34
|
+
};
|
|
35
|
+
interface FlatRows {
|
|
36
|
+
readonly rows: bigint;
|
|
37
|
+
readonly cells: readonly CellValue[];
|
|
38
|
+
/** Conservative charged byte size of the owned cells (input accounting). */
|
|
39
|
+
readonly bytes: bigint;
|
|
40
|
+
}
|
|
41
|
+
declare function recordOf(fact: object): Readonly<Record<string, unknown>>;
|
|
42
|
+
/**
|
|
43
|
+
* Cheap host charge before any string scan or byte copy (TS-004). UTF-16
|
|
44
|
+
* code units × 2 upper-bounds UTF-8; byte views charge their length.
|
|
45
|
+
*/
|
|
46
|
+
declare function hostCellCharge(value: unknown): bigint;
|
|
47
|
+
declare function assertHostCellFits(context: string, value: unknown, limit: bigint): bigint;
|
|
48
|
+
declare function handleOf(context: string, closed: AnyClosedRoster, cell: unknown): string;
|
|
49
|
+
/** Conservative owned-byte charge of one cell (host accounting, not wire). */
|
|
50
|
+
declare function cellBytes(cell: CellValue): bigint;
|
|
51
|
+
declare function cellOf(context: string, field: AnyField, value: unknown): CellValue;
|
|
52
|
+
/**
|
|
53
|
+
* The flat projector: every fact's cells land in ONE row-major cell array
|
|
54
|
+
* (length rows × arity) with the row count and charged byte size counted
|
|
55
|
+
* while projecting. Missing-field refusal and per-cell judgment are
|
|
56
|
+
* {@link cellOf}'s, byte for byte.
|
|
57
|
+
*/
|
|
58
|
+
declare function flatRowsOf(data: RelationData, facts: Iterable<object>): FlatRows;
|
|
59
|
+
declare function keyCellsOf(data: RelationData, projection: readonly string[], key: Readonly<Record<string, unknown>>): CellValue[];
|
|
60
|
+
declare function decodeCell(context: string, field: AnyField, cell: unknown): unknown;
|
|
61
|
+
/**
|
|
62
|
+
* The read half: one owned positional row into a plain frozen record in
|
|
63
|
+
* declared field order — the SAME fields and shapes on every row (chapter
|
|
64
|
+
* 35's stable row shape rule; no Proxy, no per-cell closures).
|
|
65
|
+
*/
|
|
66
|
+
declare function factOfCells<R extends AnyRelation>(relation: R, row: readonly unknown[]): Fact<R>;
|
|
67
|
+
export type { CellValue, FlatRows };
|
|
68
|
+
export { assertHostCellFits, cellBytes, cellOf, decodeCell, factOfCells, flatRowsOf, handleOf, hostCellCharge, keyCellsOf, recordOf };
|
|
69
|
+
//# sourceMappingURL=rows.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rows.d.ts","sourceRoot":"","sources":["../src/rows.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAMnE;;;;;;;GAOG;AACH,KAAK,SAAS,GACX,OAAO,GACP,MAAM,GACN,MAAM,GACN,MAAM,GACN,UAAU,GACV;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAEnD,UAAU,QAAQ;IACjB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,SAAS,SAAS,EAAE,CAAA;IACpC,4EAA4E;IAC5E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACtB;AAED,iBAAS,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAKjE;AAUD;;;GAGG;AACH,iBAAS,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAiB9C;AAED,iBAAS,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAQlF;AAiBD,iBAAS,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAWjF;AAED,8EAA8E;AAC9E,iBAAS,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAiB1C;AAED,iBAAS,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,SAAS,CAqF3E;AAED;;;;;GAKG;AACH,iBAAS,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,QAAQ,CAkBzE;AAED,iBAAS,UAAU,CAClB,IAAI,EAAE,YAAY,EAClB,UAAU,EAAE,SAAS,MAAM,EAAE,EAC7B,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACpC,SAAS,EAAE,CAyBb;AAED,iBAAS,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CA6D5E;AAWD;;;;GAIG;AACH,iBAAS,WAAW,CAAC,CAAC,SAAS,WAAW,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAsBzF;AAED,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA;AACnC,OAAO,EACN,kBAAkB,EAClB,SAAS,EACT,MAAM,EACN,UAAU,EACV,WAAW,EACX,UAAU,EACV,QAAQ,EACR,cAAc,EACd,UAAU,EACV,QAAQ,EACR,CAAA"}
|