@lovrozagar/oat 0.10.0 → 0.12.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/README.md +25 -2006
- package/dist/cli.js +283 -59
- package/dist/config/define-config.d.ts +8 -0
- package/dist/config/define-config.d.ts.map +1 -1
- package/dist/config/define-config.js.map +1 -1
- package/dist/config/validate.d.ts +12 -0
- package/dist/config/validate.d.ts.map +1 -0
- package/dist/config/validate.js +86 -0
- package/dist/config/validate.js.map +1 -0
- package/dist/conformance/effects.d.ts +9 -0
- package/dist/conformance/effects.d.ts.map +1 -0
- package/dist/conformance/effects.js +276 -0
- package/dist/conformance/effects.js.map +1 -0
- package/dist/conformance/expected-failures.d.ts +18 -0
- package/dist/conformance/expected-failures.d.ts.map +1 -0
- package/dist/conformance/expected-failures.js +48 -0
- package/dist/conformance/expected-failures.js.map +1 -0
- package/dist/conformance/feature-gate.d.ts +7 -0
- package/dist/conformance/feature-gate.d.ts.map +1 -0
- package/dist/conformance/feature-gate.js +428 -0
- package/dist/conformance/feature-gate.js.map +1 -0
- package/dist/conformance/fuzz.d.ts +108 -0
- package/dist/conformance/fuzz.d.ts.map +1 -0
- package/dist/conformance/fuzz.js +246 -0
- package/dist/conformance/fuzz.js.map +1 -0
- package/dist/conformance/leaks.d.ts +10 -0
- package/dist/conformance/leaks.d.ts.map +1 -0
- package/dist/conformance/leaks.js +23 -0
- package/dist/conformance/leaks.js.map +1 -0
- package/dist/conformance/pool.d.ts +49 -0
- package/dist/conformance/pool.d.ts.map +1 -0
- package/dist/conformance/pool.js +75 -0
- package/dist/conformance/pool.js.map +1 -0
- package/dist/conformance/rate-limit.d.ts +7 -0
- package/dist/conformance/rate-limit.d.ts.map +1 -0
- package/dist/conformance/rate-limit.js +372 -0
- package/dist/conformance/rate-limit.js.map +1 -0
- package/dist/conformance/scope.d.ts +15 -0
- package/dist/conformance/scope.d.ts.map +1 -0
- package/dist/conformance/scope.js +78 -0
- package/dist/conformance/scope.js.map +1 -0
- package/dist/conformance/seed-contract.d.ts +11 -0
- package/dist/conformance/seed-contract.d.ts.map +1 -0
- package/dist/conformance/seed-contract.js +680 -0
- package/dist/conformance/seed-contract.js.map +1 -0
- package/dist/conformance/shapes.d.ts +35 -0
- package/dist/conformance/shapes.d.ts.map +1 -0
- package/dist/conformance/shapes.js +162 -0
- package/dist/conformance/shapes.js.map +1 -0
- package/dist/conformance/specs.d.ts +21 -0
- package/dist/conformance/specs.d.ts.map +1 -0
- package/dist/conformance/specs.js +306 -0
- package/dist/conformance/specs.js.map +1 -0
- package/dist/conformance/suite.d.ts +209 -0
- package/dist/conformance/suite.d.ts.map +1 -0
- package/dist/conformance/suite.js +1538 -0
- package/dist/conformance/suite.js.map +1 -0
- package/dist/conformance/unique.d.ts +7 -0
- package/dist/conformance/unique.d.ts.map +1 -0
- package/dist/conformance/unique.js +586 -0
- package/dist/conformance/unique.js.map +1 -0
- package/dist/conformance/worker.d.ts +3 -0
- package/dist/conformance/worker.d.ts.map +1 -0
- package/dist/conformance/worker.js +27 -0
- package/dist/conformance/worker.js.map +1 -0
- package/dist/index.d.ts +8 -3
- package/dist/index.js +5 -2
- package/dist/reference/defects.d.ts +71 -1
- package/dist/reference/defects.d.ts.map +1 -1
- package/dist/reference/defects.js +74 -8
- package/dist/reference/defects.js.map +1 -1
- package/dist/reference/dialect.d.ts +6 -4
- package/dist/reference/dialect.d.ts.map +1 -1
- package/dist/reference/dialect.js +1 -0
- package/dist/reference/dialect.js.map +1 -1
- package/dist/reference/http.d.ts +17 -25
- package/dist/reference/http.d.ts.map +1 -1
- package/dist/reference/http.js +574 -224
- package/dist/reference/http.js.map +1 -1
- package/dist/reference/listing.d.ts +51 -0
- package/dist/reference/listing.d.ts.map +1 -0
- package/dist/reference/listing.js +256 -0
- package/dist/reference/listing.js.map +1 -0
- package/dist/reference/model.d.ts +35 -1
- package/dist/reference/model.d.ts.map +1 -1
- package/dist/reference/model.js +42 -0
- package/dist/reference/model.js.map +1 -1
- package/dist/reference/query.d.ts +132 -43
- package/dist/reference/query.d.ts.map +1 -1
- package/dist/reference/query.js +397 -315
- package/dist/reference/query.js.map +1 -1
- package/dist/reference/shapes.d.ts +60 -0
- package/dist/reference/shapes.d.ts.map +1 -0
- package/dist/reference/shapes.js +142 -0
- package/dist/reference/shapes.js.map +1 -0
- package/dist/reference/spec.d.ts +9 -2
- package/dist/reference/spec.d.ts.map +1 -1
- package/dist/reference/spec.js +291 -71
- package/dist/reference/spec.js.map +1 -1
- package/dist/reference/store-api.d.ts +14 -43
- package/dist/reference/store-api.d.ts.map +1 -1
- package/dist/reference/store-api.js +8 -58
- package/dist/reference/store-api.js.map +1 -1
- package/dist/reference/stores/memory.d.ts +12 -15
- package/dist/reference/stores/memory.d.ts.map +1 -1
- package/dist/reference/stores/memory.js +22 -70
- package/dist/reference/stores/memory.js.map +1 -1
- package/dist/reference/stores/postgres.d.ts +11 -23
- package/dist/reference/stores/postgres.d.ts.map +1 -1
- package/dist/reference/stores/postgres.js +53 -334
- package/dist/reference/stores/postgres.js.map +1 -1
- package/dist/reference/stores/sql-compile.d.ts +36 -0
- package/dist/reference/stores/sql-compile.d.ts.map +1 -0
- package/dist/reference/stores/sql-compile.js +95 -0
- package/dist/reference/stores/sql-compile.js.map +1 -0
- package/dist/reference/stores/sqlite.d.ts +12 -27
- package/dist/reference/stores/sqlite.d.ts.map +1 -1
- package/dist/reference/stores/sqlite.js +54 -355
- package/dist/reference/stores/sqlite.js.map +1 -1
- package/dist/report/console.d.ts.map +1 -1
- package/dist/report/console.js +23 -9
- package/dist/report/console.js.map +1 -1
- package/dist/report/matrix.d.ts +2 -0
- package/dist/report/matrix.d.ts.map +1 -1
- package/dist/report/matrix.js +63 -10
- package/dist/report/matrix.js.map +1 -1
- package/dist/report/render.d.ts +10 -1
- package/dist/report/render.d.ts.map +1 -1
- package/dist/report/render.js +75 -13
- package/dist/report/render.js.map +1 -1
- package/dist/runtime/async.d.ts +16 -3
- package/dist/runtime/async.d.ts.map +1 -1
- package/dist/runtime/async.js +24 -19
- package/dist/runtime/async.js.map +1 -1
- package/dist/runtime/auth.d.ts +8 -9
- package/dist/runtime/auth.d.ts.map +1 -1
- package/dist/runtime/auth.js +60 -62
- package/dist/runtime/auth.js.map +1 -1
- package/dist/runtime/body.d.ts +15 -3
- package/dist/runtime/body.d.ts.map +1 -1
- package/dist/runtime/body.js +61 -12
- package/dist/runtime/body.js.map +1 -1
- package/dist/runtime/check-costs.d.ts +15 -0
- package/dist/runtime/check-costs.d.ts.map +1 -0
- package/dist/runtime/check-costs.js +114 -0
- package/dist/runtime/check-costs.js.map +1 -0
- package/dist/runtime/check-ids.d.ts +15 -0
- package/dist/runtime/check-ids.d.ts.map +1 -0
- package/dist/runtime/check-ids.js +140 -0
- package/dist/runtime/check-ids.js.map +1 -0
- package/dist/runtime/checks.d.ts +88 -20
- package/dist/runtime/checks.d.ts.map +1 -1
- package/dist/runtime/checks.js +3288 -1947
- package/dist/runtime/checks.js.map +1 -1
- package/dist/runtime/client.d.ts +112 -0
- package/dist/runtime/client.d.ts.map +1 -1
- package/dist/runtime/client.js +271 -39
- package/dist/runtime/client.js.map +1 -1
- package/dist/runtime/cookies.d.ts +16 -2
- package/dist/runtime/cookies.d.ts.map +1 -1
- package/dist/runtime/cookies.js +83 -22
- package/dist/runtime/cookies.js.map +1 -1
- package/dist/runtime/exchanges.d.ts +4 -5
- package/dist/runtime/exchanges.d.ts.map +1 -1
- package/dist/runtime/exchanges.js +33 -55
- package/dist/runtime/exchanges.js.map +1 -1
- package/dist/runtime/exit.d.ts +40 -0
- package/dist/runtime/exit.d.ts.map +1 -0
- package/dist/runtime/exit.js +48 -0
- package/dist/runtime/exit.js.map +1 -0
- package/dist/runtime/feature-gate.d.ts +0 -9
- package/dist/runtime/feature-gate.d.ts.map +1 -1
- package/dist/runtime/feature-gate.js +0 -21
- package/dist/runtime/feature-gate.js.map +1 -1
- package/dist/runtime/finding.d.ts +49 -8
- package/dist/runtime/finding.d.ts.map +1 -1
- package/dist/runtime/finding.js +51 -8
- package/dist/runtime/finding.js.map +1 -1
- package/dist/runtime/fixture.d.ts +35 -28
- package/dist/runtime/fixture.d.ts.map +1 -1
- package/dist/runtime/fixture.js +92 -731
- package/dist/runtime/fixture.js.map +1 -1
- package/dist/runtime/generate.d.ts +63 -0
- package/dist/runtime/generate.d.ts.map +1 -0
- package/dist/runtime/generate.js +635 -0
- package/dist/runtime/generate.js.map +1 -0
- package/dist/runtime/headers.d.ts +6 -0
- package/dist/runtime/headers.d.ts.map +1 -0
- package/dist/runtime/headers.js +16 -0
- package/dist/runtime/headers.js.map +1 -0
- package/dist/runtime/path.d.ts +7 -0
- package/dist/runtime/path.d.ts.map +1 -0
- package/dist/runtime/path.js +44 -0
- package/dist/runtime/path.js.map +1 -0
- package/dist/runtime/payloads.d.ts +2 -0
- package/dist/runtime/payloads.d.ts.map +1 -1
- package/dist/runtime/payloads.js +2 -1
- package/dist/runtime/payloads.js.map +1 -1
- package/dist/runtime/rate-limit.d.ts +6 -4
- package/dist/runtime/rate-limit.d.ts.map +1 -1
- package/dist/runtime/rate-limit.js +22 -33
- package/dist/runtime/rate-limit.js.map +1 -1
- package/dist/runtime/redact.d.ts +24 -0
- package/dist/runtime/redact.d.ts.map +1 -0
- package/dist/runtime/redact.js +98 -0
- package/dist/runtime/redact.js.map +1 -0
- package/dist/runtime/run.d.ts +34 -2
- package/dist/runtime/run.d.ts.map +1 -1
- package/dist/runtime/run.js +374 -138
- package/dist/runtime/run.js.map +1 -1
- package/dist/runtime/runs.d.ts +5 -0
- package/dist/runtime/runs.d.ts.map +1 -1
- package/dist/runtime/runs.js +7 -1
- package/dist/runtime/runs.js.map +1 -1
- package/dist/runtime/teardown.d.ts +17 -4
- package/dist/runtime/teardown.d.ts.map +1 -1
- package/dist/runtime/teardown.js +49 -16
- package/dist/runtime/teardown.js.map +1 -1
- package/dist/runtime/transcript.d.ts +34 -2
- package/dist/runtime/transcript.d.ts.map +1 -1
- package/dist/runtime/transcript.js +119 -24
- package/dist/runtime/transcript.js.map +1 -1
- package/dist/runtime/unique.d.ts +2 -11
- package/dist/runtime/unique.d.ts.map +1 -1
- package/dist/runtime/unique.js +27 -53
- package/dist/runtime/unique.js.map +1 -1
- package/dist/runtime/validate.d.ts +13 -2
- package/dist/runtime/validate.d.ts.map +1 -1
- package/dist/runtime/validate.js +51 -31
- package/dist/runtime/validate.js.map +1 -1
- package/dist/runtime/wait.d.ts +2 -1
- package/dist/runtime/wait.d.ts.map +1 -1
- package/dist/runtime/wait.js +2 -36
- package/dist/runtime/wait.js.map +1 -1
- package/dist/runtime/world.d.ts +24 -1
- package/dist/runtime/world.d.ts.map +1 -1
- package/dist/runtime/world.js +101 -26
- package/dist/runtime/world.js.map +1 -1
- package/dist/spec/collection.d.ts +8 -2
- package/dist/spec/collection.d.ts.map +1 -1
- package/dist/spec/collection.js +47 -7
- package/dist/spec/collection.js.map +1 -1
- package/dist/spec/extensions.d.ts +11 -1
- package/dist/spec/extensions.d.ts.map +1 -1
- package/dist/spec/extensions.js +10 -2
- package/dist/spec/extensions.js.map +1 -1
- package/dist/spec/graph.d.ts +46 -0
- package/dist/spec/graph.d.ts.map +1 -1
- package/dist/spec/graph.js +175 -11
- package/dist/spec/graph.js.map +1 -1
- package/dist/spec/load.d.ts +25 -5
- package/dist/spec/load.d.ts.map +1 -1
- package/dist/spec/load.js +160 -59
- package/dist/spec/load.js.map +1 -1
- package/dist/spec/query-capabilities.d.ts +4 -0
- package/dist/spec/query-capabilities.d.ts.map +1 -1
- package/dist/spec/query-capabilities.js +6 -0
- package/dist/spec/query-capabilities.js.map +1 -1
- package/dist/spec/schema.d.ts +20 -0
- package/dist/spec/schema.d.ts.map +1 -0
- package/dist/spec/schema.js +118 -0
- package/dist/spec/schema.js.map +1 -0
- package/dist/spec/tag-schema.d.ts +12 -0
- package/dist/spec/tag-schema.d.ts.map +1 -0
- package/dist/spec/tag-schema.js +144 -0
- package/dist/spec/tag-schema.js.map +1 -0
- package/dist/spec/types.js +17 -1
- package/dist/spec/types.js.map +1 -1
- package/docs/api.md +59 -0
- package/docs/assumptions.md +99 -0
- package/docs/checks.md +183 -0
- package/docs/commands.md +214 -0
- package/docs/configuration.md +650 -0
- package/docs/model.md +184 -0
- package/docs/reference-defects.md +94 -0
- package/docs/reports.md +211 -0
- package/docs/tags.md +403 -0
- package/package.json +3 -1
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compiles the query AST to SQL for both SQL stores.
|
|
3
|
+
*
|
|
4
|
+
* One compiler, so SQLite and Postgres receive the same predicate. What differs is spelled by an
|
|
5
|
+
* `SqlFlavour`: placeholders, how a value is cast to text, how a case-sensitive pattern match is
|
|
6
|
+
* written, and which collation means "binary". Those are real engine differences; the meaning of
|
|
7
|
+
* the predicate is not.
|
|
8
|
+
*/
|
|
9
|
+
function isText(entity, field) {
|
|
10
|
+
return entity.fields.find((f) => f.name === field)?.type === "string";
|
|
11
|
+
}
|
|
12
|
+
function value(flavour, scalar, asText) {
|
|
13
|
+
if (asText)
|
|
14
|
+
return String(scalar);
|
|
15
|
+
if (typeof scalar === "boolean")
|
|
16
|
+
return flavour.bool(scalar);
|
|
17
|
+
return scalar;
|
|
18
|
+
}
|
|
19
|
+
export function compileWhere(node, entity, flavour, args) {
|
|
20
|
+
switch (node.kind) {
|
|
21
|
+
case "const":
|
|
22
|
+
return node.value ? "1 = 1" : "1 = 0";
|
|
23
|
+
case "and":
|
|
24
|
+
case "or":
|
|
25
|
+
return `(${node.children.map((child) => compileWhere(child, entity, flavour, args)).join(node.kind === "and" ? " AND " : " OR ")})`;
|
|
26
|
+
case "isnull":
|
|
27
|
+
return `${flavour.column(entity, node.field)} IS ${node.negate ? "NOT " : ""}NULL`;
|
|
28
|
+
case "cmp": {
|
|
29
|
+
const column = flavour.column(entity, node.field);
|
|
30
|
+
/* Text compares binary, whatever the database default collation is. */
|
|
31
|
+
const ref = node.asText ? flavour.toText(column) : isText(entity, node.field) ? flavour.binary(column) : column;
|
|
32
|
+
const op = { eq: "=", gt: ">", gte: ">=", lt: "<", lte: "<=", neq: "<>" }[node.op];
|
|
33
|
+
const sql = `${ref} ${op} ${flavour.bind(args, value(flavour, node.value, node.asText))}`;
|
|
34
|
+
return node.nullsMatch ? `(${sql} OR ${column} IS NULL)` : sql;
|
|
35
|
+
}
|
|
36
|
+
case "in": {
|
|
37
|
+
const column = flavour.column(entity, node.field);
|
|
38
|
+
if (node.values.length === 0)
|
|
39
|
+
return node.negate ? "1 = 1" : "1 = 0";
|
|
40
|
+
const ref = node.asText ? flavour.toText(column) : column;
|
|
41
|
+
const holes = node.values.map((member) => flavour.bind(args, value(flavour, member, node.asText))).join(", ");
|
|
42
|
+
return node.negate ? `(${ref} NOT IN (${holes}) OR ${column} IS NULL)` : `${ref} IN (${holes})`;
|
|
43
|
+
}
|
|
44
|
+
case "like":
|
|
45
|
+
return flavour.like(flavour.column(entity, node.field), node.pattern, node.insensitive, args);
|
|
46
|
+
case "contains": {
|
|
47
|
+
const column = flavour.column(entity, node.field);
|
|
48
|
+
/* The defect matches the serialised array as text, so "red" also matches "redwood". */
|
|
49
|
+
return node.substring
|
|
50
|
+
? `${flavour.position(column, node.value, true, args)} > 0`
|
|
51
|
+
: flavour.hasElement(column, node.value, args);
|
|
52
|
+
}
|
|
53
|
+
case "search":
|
|
54
|
+
return `(${node.fields
|
|
55
|
+
.map((field) => searchClause(flavour, flavour.toText(flavour.column(entity, field)), node, args))
|
|
56
|
+
.join(" OR ")})`;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function searchClause(flavour, expr, node, args) {
|
|
60
|
+
const at = flavour.position(expr, node.token, node.caseSensitive, args);
|
|
61
|
+
return node.mode === "prefix" ? `${at} = 1` : `${at} > 0`;
|
|
62
|
+
}
|
|
63
|
+
export function compileOrder(order, collation, shuffleTies, entity, flavour) {
|
|
64
|
+
const terms = [];
|
|
65
|
+
for (const term of order) {
|
|
66
|
+
const column = flavour.column(entity, term.field);
|
|
67
|
+
/* Null placement is written out rather than left to the engine, because the engines
|
|
68
|
+
* disagree: SQLite sorts nulls first ascending, Postgres last. */
|
|
69
|
+
terms.push(`${column} IS NULL ${term.nullsFirst ? "DESC" : "ASC"}`);
|
|
70
|
+
const ref = term.asText
|
|
71
|
+
? flavour.toText(column)
|
|
72
|
+
: isText(entity, term.field)
|
|
73
|
+
? collation === "insensitive"
|
|
74
|
+
? `LOWER(${column})`
|
|
75
|
+
: flavour.binary(column)
|
|
76
|
+
: column;
|
|
77
|
+
terms.push(`${ref} ${term.descending ? "DESC" : "ASC"}`);
|
|
78
|
+
}
|
|
79
|
+
if (shuffleTies)
|
|
80
|
+
terms.push(flavour.random);
|
|
81
|
+
return terms.length === 0 ? "" : ` ORDER BY ${terms.join(", ")}`;
|
|
82
|
+
}
|
|
83
|
+
/** A LIKE pattern with `\` escaping, for engines whose LIKE honours ESCAPE. */
|
|
84
|
+
export function likeText(segments) {
|
|
85
|
+
return segments
|
|
86
|
+
.map((segment) => segment.kind === "any" ? "%" : segment.kind === "one" ? "_" : segment.text.replace(/[\\%_]/g, (ch) => `\\${ch}`))
|
|
87
|
+
.join("");
|
|
88
|
+
}
|
|
89
|
+
/** A GLOB pattern — SQLite's case-sensitive matcher, which needs no pragma. */
|
|
90
|
+
export function globText(segments) {
|
|
91
|
+
return segments
|
|
92
|
+
.map((segment) => segment.kind === "any" ? "*" : segment.kind === "one" ? "?" : segment.text.replace(/[*?[]/g, (ch) => `[${ch}]`))
|
|
93
|
+
.join("");
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=sql-compile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sql-compile.js","sourceRoot":"","sources":["../../../src/reference/stores/sql-compile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* SQLite-backed storage for the reference backend.
|
|
3
3
|
*
|
|
4
|
-
* The in-memory store
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* reason about, so a reference backend that never touches SQL can only prove so much.
|
|
4
|
+
* The in-memory store evaluates the query AST in JavaScript, which quietly sidesteps what breaks
|
|
5
|
+
* real APIs: collation, type affinity, and result order when a sort has no total order. Running
|
|
6
|
+
* the same predicates through a real engine is what makes a check that passes here mean something.
|
|
8
7
|
*
|
|
9
8
|
* The engine is supplied as a driver, so the same SQL runs in-process via `node:sqlite` and
|
|
10
9
|
* remotely against Cloudflare D1. That second target is not redundancy: D1 is a different build
|
|
@@ -13,25 +12,23 @@
|
|
|
13
12
|
*/
|
|
14
13
|
import type { DefectSet } from "../defects.ts";
|
|
15
14
|
import type { EntityDef } from "../model.ts";
|
|
16
|
-
import
|
|
15
|
+
import type { SelectPlan } from "../query.ts";
|
|
16
|
+
import type { Row, Store } from "../store-api.ts";
|
|
17
17
|
import type { SqliteDriver } from "./sqlite-driver.ts";
|
|
18
|
-
export { SqlError };
|
|
19
|
-
export type { QueryParams, QueryResult, Row };
|
|
20
18
|
export declare class SqlStore implements Store {
|
|
21
19
|
private readonly defects;
|
|
22
20
|
private readonly db;
|
|
23
21
|
private readonly prefix;
|
|
24
|
-
private
|
|
22
|
+
private readonly entities;
|
|
23
|
+
private readonly flavour;
|
|
25
24
|
private constructor();
|
|
26
25
|
/**
|
|
27
26
|
* Schema creation is a set of round trips on a networked engine, so it cannot live in a
|
|
28
27
|
* constructor. `prefix` isolates one run's tables from another's on a shared database.
|
|
29
28
|
*/
|
|
30
|
-
static create(defects: DefectSet, driver: SqliteDriver, prefix?: string): Promise<SqlStore>;
|
|
29
|
+
static create(defects: DefectSet, driver: SqliteDriver, prefix?: string, entities?: readonly EntityDef[]): Promise<SqlStore>;
|
|
31
30
|
close(): Promise<void>;
|
|
32
31
|
private ddl;
|
|
33
|
-
nextId(prefix: string): string;
|
|
34
|
-
now(): number;
|
|
35
32
|
/** The stored column for a field — diverges from the declared name only under the defect. */
|
|
36
33
|
private physical;
|
|
37
34
|
insert(entity: EntityDef, record: Row): Promise<Row>;
|
|
@@ -43,26 +40,14 @@ export declare class SqlStore implements Store {
|
|
|
43
40
|
* the literal 'name' rather than an error. See COLUMN_NAME_MISMATCH.
|
|
44
41
|
*/
|
|
45
42
|
private selectList;
|
|
46
|
-
byId(entity: EntityDef, id: string): Promise<Row | null>;
|
|
47
|
-
update(entity: EntityDef, id: string, patch: Row): Promise<Row | null>;
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
*
|
|
51
|
-
* A synchronous driver does not prevent this: the lost update comes from the *handler*
|
|
52
|
-
* holding state across an await, not from engine-level locking, so it reproduces here
|
|
53
|
-
* exactly as it does on a networked database.
|
|
54
|
-
*/
|
|
55
|
-
private readModifyWrite;
|
|
56
|
-
remove(entity: EntityDef, id: string): Promise<void>;
|
|
43
|
+
byId(entity: EntityDef, id: string | number): Promise<Row | null>;
|
|
44
|
+
update(entity: EntityDef, id: string | number, patch: Row): Promise<Row | null>;
|
|
45
|
+
remove(entity: EntityDef, id: string | number): Promise<void>;
|
|
46
|
+
select(entity: EntityDef, plan: SelectPlan): Promise<Row[]>;
|
|
57
47
|
/**
|
|
58
48
|
* Converts stored values back to their declared shape. SQLite has no boolean type, so a
|
|
59
49
|
* field declared boolean comes back as 0/1 and would fail its own response schema.
|
|
60
50
|
*/
|
|
61
51
|
private decode;
|
|
62
|
-
query(entity: EntityDef, scope: Record<string, string>, params: QueryParams, options: QueryOptions): Promise<QueryResult>;
|
|
63
|
-
private compileFilter;
|
|
64
|
-
/** Set by compileOrder when the descending-drops-nulls defect applies to this query. */
|
|
65
|
-
private dropNullsFor;
|
|
66
|
-
private compileOrder;
|
|
67
52
|
}
|
|
68
53
|
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/reference/stores/sqlite.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../../src/reference/stores/sqlite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,aAAa,CAAA;AAEtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAEjD,OAAO,KAAK,EAAE,YAAY,EAAY,MAAM,oBAAoB,CAAA;AAmChE,qBAAa,QAAS,YAAW,KAAK;IAIpC,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAN1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAY;IAEpC,OAAO;IAkCP;;;OAGG;WACU,MAAM,CAClB,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,YAAY,EACpB,MAAM,SAAK,EACX,QAAQ,GAAE,SAAS,SAAS,EAAa,GACvC,OAAO,CAAC,QAAQ,CAAC;IAQd,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAe5B,OAAO,CAAC,GAAG;IAaX,6FAA6F;IAC7F,OAAO,CAAC,QAAQ;IAIV,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAgB1D;;;;;;OAMG;IACH,OAAO,CAAC,UAAU;IAqBZ,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IASjE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAa/E,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI7D,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAWjE;;;OAGG;IACH,OAAO,CAAC,MAAM;CAiBd"}
|