litedbmodel 2.0.0 → 2.0.2
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/dist/scp/authoring-sql.d.ts +78 -0
- package/dist/scp/authoring-sql.d.ts.map +1 -1
- package/dist/scp/authoring-sql.js +110 -2
- package/dist/scp/authoring-sql.js.map +1 -1
- package/dist/scp/catalog.d.ts +5 -2
- package/dist/scp/catalog.d.ts.map +1 -1
- package/dist/scp/catalog.js +32 -1
- package/dist/scp/catalog.js.map +1 -1
- package/dist/scp/codegen.d.ts +143 -85
- package/dist/scp/codegen.d.ts.map +1 -1
- package/dist/scp/codegen.js +374 -90
- package/dist/scp/codegen.js.map +1 -1
- package/dist/scp/coltype.d.ts +41 -0
- package/dist/scp/coltype.d.ts.map +1 -0
- package/dist/scp/coltype.js +188 -0
- package/dist/scp/coltype.js.map +1 -0
- package/dist/scp/dialect.d.ts +12 -3
- package/dist/scp/dialect.d.ts.map +1 -1
- package/dist/scp/dialect.js +12 -3
- package/dist/scp/dialect.js.map +1 -1
- package/dist/scp/find-filter-guard.d.ts +68 -0
- package/dist/scp/find-filter-guard.d.ts.map +1 -0
- package/dist/scp/find-filter-guard.js +88 -0
- package/dist/scp/find-filter-guard.js.map +1 -0
- package/dist/scp/fragment/assemble.d.ts +61 -0
- package/dist/scp/fragment/assemble.d.ts.map +1 -0
- package/dist/scp/fragment/assemble.js +156 -0
- package/dist/scp/fragment/assemble.js.map +1 -0
- package/dist/scp/fragment/compile-pg.d.ts +107 -0
- package/dist/scp/fragment/compile-pg.d.ts.map +1 -0
- package/dist/scp/fragment/compile-pg.js +142 -0
- package/dist/scp/fragment/compile-pg.js.map +1 -0
- package/dist/scp/fragment/index.d.ts +16 -0
- package/dist/scp/fragment/index.d.ts.map +1 -0
- package/dist/scp/fragment/index.js +34 -0
- package/dist/scp/fragment/index.js.map +1 -0
- package/dist/scp/fragment/model.d.ts +119 -0
- package/dist/scp/fragment/model.d.ts.map +1 -0
- package/dist/scp/fragment/model.js +66 -0
- package/dist/scp/fragment/model.js.map +1 -0
- package/dist/scp/fragment/pg-array-type.d.ts +13 -0
- package/dist/scp/fragment/pg-array-type.d.ts.map +1 -0
- package/dist/scp/fragment/pg-array-type.js +34 -0
- package/dist/scp/fragment/pg-array-type.js.map +1 -0
- package/dist/scp/guard.d.ts +2 -6
- package/dist/scp/guard.d.ts.map +1 -1
- package/dist/scp/guard.js +19 -22
- package/dist/scp/guard.js.map +1 -1
- package/dist/scp/index.cjs +18695 -3921
- package/dist/scp/index.d.ts +41 -24
- package/dist/scp/index.d.ts.map +1 -1
- package/dist/scp/index.js +134 -49
- package/dist/scp/index.js.map +1 -1
- package/dist/scp/index.mjs +4830 -1432
- package/dist/scp/makesql/authoring-compile.d.ts +90 -0
- package/dist/scp/makesql/authoring-compile.d.ts.map +1 -0
- package/dist/scp/makesql/authoring-compile.js +494 -0
- package/dist/scp/makesql/authoring-compile.js.map +1 -0
- package/dist/scp/makesql/compile-crud.d.ts +133 -0
- package/dist/scp/makesql/compile-crud.d.ts.map +1 -0
- package/dist/scp/makesql/compile-crud.js +288 -0
- package/dist/scp/makesql/compile-crud.js.map +1 -0
- package/dist/scp/makesql/compile-relation.d.ts +157 -0
- package/dist/scp/makesql/compile-relation.d.ts.map +1 -0
- package/dist/scp/makesql/compile-relation.js +425 -0
- package/dist/scp/makesql/compile-relation.js.map +1 -0
- package/dist/scp/makesql/compile-select.d.ts +52 -0
- package/dist/scp/makesql/compile-select.d.ts.map +1 -0
- package/dist/scp/makesql/compile-select.js +58 -0
- package/dist/scp/makesql/compile-select.js.map +1 -0
- package/dist/scp/makesql/compile.d.ts +63 -0
- package/dist/scp/makesql/compile.d.ts.map +1 -0
- package/dist/scp/makesql/compile.js +99 -0
- package/dist/scp/makesql/compile.js.map +1 -0
- package/dist/scp/makesql/handler.d.ts +58 -0
- package/dist/scp/makesql/handler.d.ts.map +1 -0
- package/dist/scp/makesql/handler.js +113 -0
- package/dist/scp/makesql/handler.js.map +1 -0
- package/dist/scp/makesql/index.d.ts +33 -0
- package/dist/scp/makesql/index.d.ts.map +1 -0
- package/dist/scp/makesql/index.js +114 -0
- package/dist/scp/makesql/index.js.map +1 -0
- package/dist/scp/makesql/ir.d.ts +42 -0
- package/dist/scp/makesql/ir.d.ts.map +1 -0
- package/dist/scp/makesql/ir.js +66 -0
- package/dist/scp/makesql/ir.js.map +1 -0
- package/dist/scp/makesql/json-array.d.ts +84 -0
- package/dist/scp/makesql/json-array.d.ts.map +1 -0
- package/dist/scp/makesql/json-array.js +118 -0
- package/dist/scp/makesql/json-array.js.map +1 -0
- package/dist/scp/makesql/json-batch.d.ts +102 -0
- package/dist/scp/makesql/json-batch.d.ts.map +1 -0
- package/dist/scp/makesql/json-batch.js +269 -0
- package/dist/scp/makesql/json-batch.js.map +1 -0
- package/dist/scp/makesql/makesql.d.ts +99 -0
- package/dist/scp/makesql/makesql.d.ts.map +1 -0
- package/dist/scp/makesql/makesql.js +122 -0
- package/dist/scp/makesql/makesql.js.map +1 -0
- package/dist/scp/makesql/outtype.d.ts +44 -0
- package/dist/scp/makesql/outtype.d.ts.map +1 -0
- package/dist/scp/makesql/outtype.js +197 -0
- package/dist/scp/makesql/outtype.js.map +1 -0
- package/dist/scp/makesql/pool-executor.d.ts +47 -0
- package/dist/scp/makesql/pool-executor.d.ts.map +1 -0
- package/dist/scp/makesql/pool-executor.js +50 -0
- package/dist/scp/makesql/pool-executor.js.map +1 -0
- package/dist/scp/makesql/static-bundle.d.ts +187 -0
- package/dist/scp/makesql/static-bundle.d.ts.map +1 -0
- package/dist/scp/makesql/static-bundle.js +1113 -0
- package/dist/scp/makesql/static-bundle.js.map +1 -0
- package/dist/scp/makesql/tx.d.ts +216 -0
- package/dist/scp/makesql/tx.d.ts.map +1 -0
- package/dist/scp/makesql/tx.js +788 -0
- package/dist/scp/makesql/tx.js.map +1 -0
- package/dist/scp/makesql/writeouttype.d.ts +66 -0
- package/dist/scp/makesql/writeouttype.d.ts.map +1 -0
- package/dist/scp/makesql/writeouttype.js +195 -0
- package/dist/scp/makesql/writeouttype.js.map +1 -0
- package/dist/scp/relation.d.ts +86 -74
- package/dist/scp/relation.d.ts.map +1 -1
- package/dist/scp/relation.js +186 -120
- package/dist/scp/relation.js.map +1 -1
- package/dist/scp/runtime.d.ts +158 -211
- package/dist/scp/runtime.d.ts.map +1 -1
- package/dist/scp/runtime.js +250 -515
- package/dist/scp/runtime.js.map +1 -1
- package/dist/scp/typed-object.d.ts +12 -1
- package/dist/scp/typed-object.d.ts.map +1 -1
- package/dist/scp/typed-object.js +25 -4
- package/dist/scp/typed-object.js.map +1 -1
- package/docs/proposal/litedbmodel-v2-scp-architecture.md +51 -0
- package/docs/proposal/v0-coverage-matrix.md +157 -0
- package/docs/proposal/v2-completeness-plan.md +90 -0
- package/docs/proposal/v2-sql-parity-checklist.md +162 -0
- package/package.json +3 -3
- package/dist/scp/bridge.d.ts +0 -64
- package/dist/scp/bridge.d.ts.map +0 -1
- package/dist/scp/bridge.js +0 -329
- package/dist/scp/bridge.js.map +0 -1
- package/dist/scp/compile-dialect.d.ts +0 -39
- package/dist/scp/compile-dialect.d.ts.map +0 -1
- package/dist/scp/compile-dialect.js +0 -62
- package/dist/scp/compile-dialect.js.map +0 -1
- package/dist/scp/compile-sqlite.d.ts +0 -114
- package/dist/scp/compile-sqlite.d.ts.map +0 -1
- package/dist/scp/compile-sqlite.js +0 -149
- package/dist/scp/compile-sqlite.js.map +0 -1
- package/dist/scp/ir.d.ts +0 -92
- package/dist/scp/ir.d.ts.map +0 -1
- package/dist/scp/ir.js +0 -28
- package/dist/scp/ir.js.map +0 -1
- package/dist/scp/render.d.ts +0 -40
- package/dist/scp/render.d.ts.map +0 -1
- package/dist/scp/render.js +0 -170
- package/dist/scp/render.js.map +0 -1
- package/dist/scp/write-plan.d.ts +0 -161
- package/dist/scp/write-plan.d.ts.map +0 -1
- package/dist/scp/write-plan.js +0 -528
- package/dist/scp/write-plan.js.map +0 -1
- package/dist/scp/write-runtime.d.ts +0 -80
- package/dist/scp/write-runtime.d.ts.map +0 -1
- package/dist/scp/write-runtime.js +0 -167
- package/dist/scp/write-runtime.js.map +0 -1
|
@@ -24,6 +24,24 @@
|
|
|
24
24
|
import { type Recorded } from 'behavior-contracts';
|
|
25
25
|
/** A recorded `$`-reference (column or value) or a literal value usable in a builder. */
|
|
26
26
|
type Operand = Recorded | unknown;
|
|
27
|
+
/**
|
|
28
|
+
* The sentinel ref-path heads that mark the ADDITIVE where-primitives (V0 R2/R3) so the live
|
|
29
|
+
* compile (`static-bundle.lowerWhereMember`) can decode them into the EXACT v1 `ConditionObject`
|
|
30
|
+
* and drive the ORIGINAL `DBConditions.compile()` for byte-true text — never a hand-roll. Each is
|
|
31
|
+
* encoded with the closed-set `eq(<sentinel ref>, <value>)` shape (the SAME trick {@link whereIn}
|
|
32
|
+
* uses for IN-lists), so no opcode outside bc's closed set is invented. Structural metadata (the
|
|
33
|
+
* column name, the SQL cast type, the LIKE keyword, the tuple column list, the subquery text)
|
|
34
|
+
* rides as extra STRING segments in the sentinel ref path; the runtime value operands ride as the
|
|
35
|
+
* `eq` RHS and are deferred as value-specs 1:1 with the placeholders in the v1-produced text.
|
|
36
|
+
*/
|
|
37
|
+
export declare const BETWEEN_SENTINEL = "@between";
|
|
38
|
+
export declare const LIKE_SENTINEL = "@like";
|
|
39
|
+
export declare const CAST_SENTINEL = "@cast";
|
|
40
|
+
export declare const DYNAMIC_SENTINEL = "@dynamic";
|
|
41
|
+
export declare const IMMEDIATE_SENTINEL = "@immediate";
|
|
42
|
+
export declare const TUPLE_SENTINEL = "@tuple";
|
|
43
|
+
export declare const SUBQUERY_SENTINEL = "@subquery";
|
|
44
|
+
export declare const EXISTS_SENTINEL = "@exists";
|
|
27
45
|
/** `col = value` — equality fragment (`{eq:[colRef, value]}`). */
|
|
28
46
|
export declare function whereEq(col: Recorded, value: Operand): Recorded;
|
|
29
47
|
/** `col <> value` — inequality fragment. */
|
|
@@ -52,5 +70,65 @@ export declare function whereIn(col: Recorded, value: Operand): Recorded;
|
|
|
52
70
|
* treats `name` as the physical column (a membership fragment, not an equality).
|
|
53
71
|
*/
|
|
54
72
|
export declare function inColumn($: Recorded, name: string): Recorded;
|
|
73
|
+
/**
|
|
74
|
+
* `col BETWEEN ? AND ?` (V0 R3). Encoded `eq($[@between][col], [lo, hi])`; the live compile builds
|
|
75
|
+
* the v1 custom-op `ConditionObject` `{'<col> BETWEEN ? AND ?': [lo, hi]}` and defers both bounds.
|
|
76
|
+
* `lo`/`hi` are recorded refs or literals.
|
|
77
|
+
*/
|
|
78
|
+
export declare function whereBetween($: Recorded, col: string, lo: Operand, hi: Operand): Recorded;
|
|
79
|
+
/**
|
|
80
|
+
* `col LIKE ?` (V0 R3). Encoded `eq($[@like][col], pattern)` → v1 `{'<col> LIKE ?': pattern}`.
|
|
81
|
+
* The pattern is a recorded ref or literal.
|
|
82
|
+
*/
|
|
83
|
+
export declare function whereLike($: Recorded, col: string, pattern: Operand): Recorded;
|
|
84
|
+
/**
|
|
85
|
+
* `col ILIKE ?` (V0 R3, PG case-insensitive; on MySQL/SQLite v1 emits the raw `ILIKE` keyword —
|
|
86
|
+
* this reproduces v1 verbatim, not a portability rewrite). Encoded `eq($[@like][col][ILIKE], p)`.
|
|
87
|
+
*/
|
|
88
|
+
export declare function whereILike($: Recorded, col: string, pattern: Operand): Recorded;
|
|
89
|
+
/**
|
|
90
|
+
* `col <op> ?::type` (V0 R3, dialect-gated cast — `dbCast`). Encoded
|
|
91
|
+
* `eq($[@cast][col][type][op], value)`; the live compile drives v1 `dbCast(value, type, op)` so the
|
|
92
|
+
* PG `::type` cast (and the MySQL/SQLite no-cast) is byte-true. `op` defaults to `=`.
|
|
93
|
+
*/
|
|
94
|
+
export declare function whereCast($: Recorded, col: string, sqlType: string, value: Operand, op?: string): Recorded;
|
|
95
|
+
/**
|
|
96
|
+
* `col = fn(?)` (V0 R3, `dbDynamic`) — a function-call template with `?` placeholders bound to the
|
|
97
|
+
* value list. Encoded `eq($[@dynamic][col][template], values)`; drives v1 `dbDynamic(template, vals)`.
|
|
98
|
+
* `template` is the raw function SQL (e.g. `to_tsvector('en', ?)`).
|
|
99
|
+
*/
|
|
100
|
+
export declare function whereDynamic($: Recorded, col: string, template: string, values: Operand): Recorded;
|
|
101
|
+
/**
|
|
102
|
+
* `col = <sql>` (V0 R3, `dbImmediate` — an inline SQL expression, NO bound param, e.g. `NOW()`).
|
|
103
|
+
* Encoded `eq($[@immediate][col][sql], null)`; drives v1 `dbImmediate(sql)`. No value-spec.
|
|
104
|
+
*/
|
|
105
|
+
export declare function whereImmediate($: Recorded, col: string, sql: string): Recorded;
|
|
106
|
+
/**
|
|
107
|
+
* `(a, b, …) IN ((?, ?), …)` (V0 R3, `dbTupleIn` composite membership). Encoded
|
|
108
|
+
* `eq($[@tuple][a][b]…, tuples)` where `tuples` is an array-of-tuples value; drives v1
|
|
109
|
+
* `dbTupleIn(columns, tuples)`. `columns` is the tuple column list.
|
|
110
|
+
*/
|
|
111
|
+
export declare function whereTupleIn($: Recorded, columns: readonly string[], tuples: Operand): Recorded;
|
|
112
|
+
/**
|
|
113
|
+
* `lhs IN (SELECT …)` / `lhs NOT IN (SELECT …)` (V0 R2). The subquery is authored as a NESTED
|
|
114
|
+
* makeSQL Fragment carried in the param slot (spec §2 補足): `sub` is a `{ sql, params? }` where
|
|
115
|
+
* `sql` is the inner SELECT text (already dialect-tuned, v1-sourced) and `params` its bound
|
|
116
|
+
* value-specs. Encoded `eq($[@subquery][lhsCol][kw], sub)`; the live compile splices the inner
|
|
117
|
+
* `sql` into the v1 `DBSubquery`-shaped predicate `<lhs> <kw> (<sub.sql>)` and appends `sub.params`.
|
|
118
|
+
*/
|
|
119
|
+
export declare function whereInSubquery($: Recorded, lhs: string, sub: {
|
|
120
|
+
sql: string;
|
|
121
|
+
params?: readonly Operand[];
|
|
122
|
+
}, not?: boolean): Recorded;
|
|
123
|
+
/**
|
|
124
|
+
* `EXISTS (SELECT 1 …)` / `NOT EXISTS (…)` (V0 R2). Like {@link whereInSubquery}, the correlated
|
|
125
|
+
* subquery rides as a nested makeSQL Fragment in the param slot: `sub.sql` is the inner
|
|
126
|
+
* `SELECT 1 FROM … WHERE …` (correlation refs already rendered as literal column paths, v1-sourced).
|
|
127
|
+
* Encoded `eq($[@exists][kw], sub)`; the live compile emits `<kw> (<sub.sql>)` + `sub.params`.
|
|
128
|
+
*/
|
|
129
|
+
export declare function whereExists($: Recorded, sub: {
|
|
130
|
+
sql: string;
|
|
131
|
+
params?: readonly Operand[];
|
|
132
|
+
}, not?: boolean): Recorded;
|
|
55
133
|
export {};
|
|
56
134
|
//# sourceMappingURL=authoring-sql.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authoring-sql.d.ts","sourceRoot":"","sources":["../../src/scp/authoring-sql.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAA0B,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG3E,yFAAyF;AACzF,KAAK,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAElC,kEAAkE;AAClE,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAE/D;AAED,4CAA4C;AAC5C,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAE/D;AAED,qBAAqB;AACrB,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAE/D;AAED,sBAAsB;AACtB,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAE/D;AAED,qBAAqB;AACrB,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAE/D;AAED,sBAAsB;AACtB,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAE/D;AAED,8FAA8F;AAC9F,wBAAgB,WAAW,CAAC,GAAG,EAAE,QAAQ,GAAG,QAAQ,CAEnD;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAE/D;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAE5D"}
|
|
1
|
+
{"version":3,"file":"authoring-sql.d.ts","sourceRoot":"","sources":["../../src/scp/authoring-sql.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
* recorded reference, a literal, or any closed-set builder expression (`coalesce`, `add`, …).
|
|
24
24
|
*/
|
|
25
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
26
|
+
exports.EXISTS_SENTINEL = exports.SUBQUERY_SENTINEL = exports.TUPLE_SENTINEL = exports.IMMEDIATE_SENTINEL = exports.DYNAMIC_SENTINEL = exports.CAST_SENTINEL = exports.LIKE_SENTINEL = exports.BETWEEN_SENTINEL = void 0;
|
|
26
27
|
exports.whereEq = whereEq;
|
|
27
28
|
exports.whereNe = whereNe;
|
|
28
29
|
exports.whereLt = whereLt;
|
|
@@ -32,8 +33,42 @@ exports.whereGe = whereGe;
|
|
|
32
33
|
exports.whereIsNull = whereIsNull;
|
|
33
34
|
exports.whereIn = whereIn;
|
|
34
35
|
exports.inColumn = inColumn;
|
|
36
|
+
exports.whereBetween = whereBetween;
|
|
37
|
+
exports.whereLike = whereLike;
|
|
38
|
+
exports.whereILike = whereILike;
|
|
39
|
+
exports.whereCast = whereCast;
|
|
40
|
+
exports.whereDynamic = whereDynamic;
|
|
41
|
+
exports.whereImmediate = whereImmediate;
|
|
42
|
+
exports.whereTupleIn = whereTupleIn;
|
|
43
|
+
exports.whereInSubquery = whereInSubquery;
|
|
44
|
+
exports.whereExists = whereExists;
|
|
35
45
|
const behavior_contracts_1 = require("behavior-contracts");
|
|
36
|
-
const
|
|
46
|
+
const makesql_1 = require("./makesql");
|
|
47
|
+
/**
|
|
48
|
+
* The sentinel ref-path heads that mark the ADDITIVE where-primitives (V0 R2/R3) so the live
|
|
49
|
+
* compile (`static-bundle.lowerWhereMember`) can decode them into the EXACT v1 `ConditionObject`
|
|
50
|
+
* and drive the ORIGINAL `DBConditions.compile()` for byte-true text — never a hand-roll. Each is
|
|
51
|
+
* encoded with the closed-set `eq(<sentinel ref>, <value>)` shape (the SAME trick {@link whereIn}
|
|
52
|
+
* uses for IN-lists), so no opcode outside bc's closed set is invented. Structural metadata (the
|
|
53
|
+
* column name, the SQL cast type, the LIKE keyword, the tuple column list, the subquery text)
|
|
54
|
+
* rides as extra STRING segments in the sentinel ref path; the runtime value operands ride as the
|
|
55
|
+
* `eq` RHS and are deferred as value-specs 1:1 with the placeholders in the v1-produced text.
|
|
56
|
+
*/
|
|
57
|
+
exports.BETWEEN_SENTINEL = '@between';
|
|
58
|
+
exports.LIKE_SENTINEL = '@like';
|
|
59
|
+
exports.CAST_SENTINEL = '@cast';
|
|
60
|
+
exports.DYNAMIC_SENTINEL = '@dynamic';
|
|
61
|
+
exports.IMMEDIATE_SENTINEL = '@immediate';
|
|
62
|
+
exports.TUPLE_SENTINEL = '@tuple';
|
|
63
|
+
exports.SUBQUERY_SENTINEL = '@subquery';
|
|
64
|
+
exports.EXISTS_SENTINEL = '@exists';
|
|
65
|
+
/** Build a sentinel column ref: `$[HEAD][seg0][seg1]…` → a recorded ref with that path. */
|
|
66
|
+
function sentinelRef($, head, segs) {
|
|
67
|
+
let node = $[head];
|
|
68
|
+
for (const s of segs)
|
|
69
|
+
node = node[s];
|
|
70
|
+
return node;
|
|
71
|
+
}
|
|
37
72
|
/** `col = value` — equality fragment (`{eq:[colRef, value]}`). */
|
|
38
73
|
function whereEq(col, value) {
|
|
39
74
|
return (0, behavior_contracts_1.eq)(col, value);
|
|
@@ -78,6 +113,79 @@ function whereIn(col, value) {
|
|
|
78
113
|
* treats `name` as the physical column (a membership fragment, not an equality).
|
|
79
114
|
*/
|
|
80
115
|
function inColumn($, name) {
|
|
81
|
-
return $[
|
|
116
|
+
return $[makesql_1.IN_SENTINEL][name];
|
|
117
|
+
}
|
|
118
|
+
// ── Additive where-primitives (V0 R2/R3) — all v1-sourced at compile, live-reachable ──────────
|
|
119
|
+
/**
|
|
120
|
+
* `col BETWEEN ? AND ?` (V0 R3). Encoded `eq($[@between][col], [lo, hi])`; the live compile builds
|
|
121
|
+
* the v1 custom-op `ConditionObject` `{'<col> BETWEEN ? AND ?': [lo, hi]}` and defers both bounds.
|
|
122
|
+
* `lo`/`hi` are recorded refs or literals.
|
|
123
|
+
*/
|
|
124
|
+
function whereBetween($, col, lo, hi) {
|
|
125
|
+
return (0, behavior_contracts_1.eq)(sentinelRef($, exports.BETWEEN_SENTINEL, [col]), [lo, hi]);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* `col LIKE ?` (V0 R3). Encoded `eq($[@like][col], pattern)` → v1 `{'<col> LIKE ?': pattern}`.
|
|
129
|
+
* The pattern is a recorded ref or literal.
|
|
130
|
+
*/
|
|
131
|
+
function whereLike($, col, pattern) {
|
|
132
|
+
return (0, behavior_contracts_1.eq)(sentinelRef($, exports.LIKE_SENTINEL, [col, 'LIKE']), pattern);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* `col ILIKE ?` (V0 R3, PG case-insensitive; on MySQL/SQLite v1 emits the raw `ILIKE` keyword —
|
|
136
|
+
* this reproduces v1 verbatim, not a portability rewrite). Encoded `eq($[@like][col][ILIKE], p)`.
|
|
137
|
+
*/
|
|
138
|
+
function whereILike($, col, pattern) {
|
|
139
|
+
return (0, behavior_contracts_1.eq)(sentinelRef($, exports.LIKE_SENTINEL, [col, 'ILIKE']), pattern);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* `col <op> ?::type` (V0 R3, dialect-gated cast — `dbCast`). Encoded
|
|
143
|
+
* `eq($[@cast][col][type][op], value)`; the live compile drives v1 `dbCast(value, type, op)` so the
|
|
144
|
+
* PG `::type` cast (and the MySQL/SQLite no-cast) is byte-true. `op` defaults to `=`.
|
|
145
|
+
*/
|
|
146
|
+
function whereCast($, col, sqlType, value, op = '=') {
|
|
147
|
+
return (0, behavior_contracts_1.eq)(sentinelRef($, exports.CAST_SENTINEL, [col, sqlType, op]), value);
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* `col = fn(?)` (V0 R3, `dbDynamic`) — a function-call template with `?` placeholders bound to the
|
|
151
|
+
* value list. Encoded `eq($[@dynamic][col][template], values)`; drives v1 `dbDynamic(template, vals)`.
|
|
152
|
+
* `template` is the raw function SQL (e.g. `to_tsvector('en', ?)`).
|
|
153
|
+
*/
|
|
154
|
+
function whereDynamic($, col, template, values) {
|
|
155
|
+
return (0, behavior_contracts_1.eq)(sentinelRef($, exports.DYNAMIC_SENTINEL, [col, template]), values);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* `col = <sql>` (V0 R3, `dbImmediate` — an inline SQL expression, NO bound param, e.g. `NOW()`).
|
|
159
|
+
* Encoded `eq($[@immediate][col][sql], null)`; drives v1 `dbImmediate(sql)`. No value-spec.
|
|
160
|
+
*/
|
|
161
|
+
function whereImmediate($, col, sql) {
|
|
162
|
+
return (0, behavior_contracts_1.eq)(sentinelRef($, exports.IMMEDIATE_SENTINEL, [col, sql]), null);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* `(a, b, …) IN ((?, ?), …)` (V0 R3, `dbTupleIn` composite membership). Encoded
|
|
166
|
+
* `eq($[@tuple][a][b]…, tuples)` where `tuples` is an array-of-tuples value; drives v1
|
|
167
|
+
* `dbTupleIn(columns, tuples)`. `columns` is the tuple column list.
|
|
168
|
+
*/
|
|
169
|
+
function whereTupleIn($, columns, tuples) {
|
|
170
|
+
return (0, behavior_contracts_1.eq)(sentinelRef($, exports.TUPLE_SENTINEL, columns), tuples);
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* `lhs IN (SELECT …)` / `lhs NOT IN (SELECT …)` (V0 R2). The subquery is authored as a NESTED
|
|
174
|
+
* makeSQL Fragment carried in the param slot (spec §2 補足): `sub` is a `{ sql, params? }` where
|
|
175
|
+
* `sql` is the inner SELECT text (already dialect-tuned, v1-sourced) and `params` its bound
|
|
176
|
+
* value-specs. Encoded `eq($[@subquery][lhsCol][kw], sub)`; the live compile splices the inner
|
|
177
|
+
* `sql` into the v1 `DBSubquery`-shaped predicate `<lhs> <kw> (<sub.sql>)` and appends `sub.params`.
|
|
178
|
+
*/
|
|
179
|
+
function whereInSubquery($, lhs, sub, not = false) {
|
|
180
|
+
return (0, behavior_contracts_1.eq)(sentinelRef($, exports.SUBQUERY_SENTINEL, [lhs, not ? 'NOT IN' : 'IN']), sub);
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* `EXISTS (SELECT 1 …)` / `NOT EXISTS (…)` (V0 R2). Like {@link whereInSubquery}, the correlated
|
|
184
|
+
* subquery rides as a nested makeSQL Fragment in the param slot: `sub.sql` is the inner
|
|
185
|
+
* `SELECT 1 FROM … WHERE …` (correlation refs already rendered as literal column paths, v1-sourced).
|
|
186
|
+
* Encoded `eq($[@exists][kw], sub)`; the live compile emits `<kw> (<sub.sql>)` + `sub.params`.
|
|
187
|
+
*/
|
|
188
|
+
function whereExists($, sub, not = false) {
|
|
189
|
+
return (0, behavior_contracts_1.eq)(sentinelRef($, exports.EXISTS_SENTINEL, [not ? 'NOT EXISTS' : 'EXISTS']), sub);
|
|
82
190
|
}
|
|
83
191
|
//# sourceMappingURL=authoring-sql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authoring-sql.js","sourceRoot":"","sources":["../../src/scp/authoring-sql.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG
|
|
1
|
+
{"version":3,"file":"authoring-sql.js","sourceRoot":"","sources":["../../src/scp/authoring-sql.ts"],"names":[],"mappings":"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"}
|
package/dist/scp/catalog.d.ts
CHANGED
|
@@ -40,7 +40,7 @@ import { type Catalog, type CatalogEntry, type Component } from 'behavior-contra
|
|
|
40
40
|
* fragment-tree component (`Fragment`), and the multi-statement transaction envelope
|
|
41
41
|
* (`Tx`).
|
|
42
42
|
*/
|
|
43
|
-
export type CatalogName = 'Select' | 'Insert' | 'Update' | 'Delete' | 'Fragment' | 'Tx';
|
|
43
|
+
export type CatalogName = 'Select' | 'Count' | 'Insert' | 'Update' | 'Delete' | 'Fragment' | 'Tx';
|
|
44
44
|
/**
|
|
45
45
|
* litedbmodel's specific-component catalog (spec §11 item 1) — the behavior-contracts
|
|
46
46
|
* `Catalog`-typed source of truth. Each entry declares the Port schema of one SQL
|
|
@@ -62,7 +62,10 @@ export declare const WRITE_CATALOG_NAMES: readonly CatalogName[];
|
|
|
62
62
|
/**
|
|
63
63
|
* The dynamic per-field write-port families (`<group>.<field>` — the flattened record
|
|
64
64
|
* convention; longest-prefix wins). A `values.<field>` (Insert) or `set.<field>`
|
|
65
|
-
* (Update) port carries the field's Expression IR value
|
|
65
|
+
* (Update) port carries the field's Expression IR value; a `sqlCast.<field>` port carries
|
|
66
|
+
* the field's PostgreSQL cast type (a literal string, e.g. `jsonb`/`uuid`/`int[]`) that drives
|
|
67
|
+
* the v1 per-column `?::<sqlCast>` on Postgres (`DBModel._insert`/`_update`). `sqlCast.` ports are
|
|
68
|
+
* INERT on MySQL/SQLite (v1's dialect-aware cast formatter is identity there).
|
|
66
69
|
*/
|
|
67
70
|
export declare const WRITE_PORT_FAMILIES: readonly string[];
|
|
68
71
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/scp/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAA0B,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAmB,MAAM,oBAAoB,CAAC;AAE9H;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/scp/catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAA0B,KAAK,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,SAAS,EAAmB,MAAM,oBAAoB,CAAC;AAE9H;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,QAAQ,GACR,UAAU,GACV,IAAI,CAAC;AAwET;;;;;;GAMG;AACH,eAAO,MAAM,mBAAmB,EAAE,OAwBjC,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAEnE;AAED,uEAAuE;AACvE,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAQ/C,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,WAAW,EAKrD,CAAC;AAIF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAIhD,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,GAAG,IAAI,CA4BhF;AAGD,mFAAmF;AACnF,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,SAAS,CAAC;AAEjD;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,SAAS,GAAG,cAAc,CAEzE"}
|
package/dist/scp/catalog.js
CHANGED
|
@@ -60,6 +60,21 @@ const SELECT_PORTS = {
|
|
|
60
60
|
limit: P('expr'),
|
|
61
61
|
offset: P('expr'),
|
|
62
62
|
group: P('string'),
|
|
63
|
+
// Additive read-tail/head ports (V0 R3/R4/R5/R6). SQL is v1-sourced from the matching
|
|
64
|
+
// `SelectDesc` fields via `compileSelect` (`_buildSelectSQL`), wired in `compileSelectNode`:
|
|
65
|
+
// - `forUpdate` (R3): a literal `'true'` string toggles the ` FOR UPDATE` tail.
|
|
66
|
+
// - `join`/`joinParams` (R5): a literal JOIN clause text (`JOIN t ON …`) + its bound
|
|
67
|
+
// value-specs (`expr[]`), spliced after `FROM <t>` (v1 `_buildSelectSQL` JOIN position).
|
|
68
|
+
// - `cte`/`cteParams` (R4): a WITH-CTE `{name, sql}` literal + its bound value-specs,
|
|
69
|
+
// prefixed as `WITH <name> AS (<sql>) ` (v1 WITH-wrap). `cteParams` bind FIRST (v1 param
|
|
70
|
+
// order: CTE → JOIN → WHERE).
|
|
71
|
+
// - `append` (R6): a raw trailing clause text (e.g. `HAVING …`) appended verbatim.
|
|
72
|
+
forUpdate: P('string'),
|
|
73
|
+
join: P('string'),
|
|
74
|
+
joinParams: P('expr[]'),
|
|
75
|
+
cte: P('map'),
|
|
76
|
+
cteParams: P('expr[]'),
|
|
77
|
+
append: P('string'),
|
|
63
78
|
};
|
|
64
79
|
/**
|
|
65
80
|
* The shared write-port surface for `Insert`/`Update`/`Delete`: `table` always;
|
|
@@ -74,6 +89,12 @@ const WRITE_PORTS = {
|
|
|
74
89
|
returning: P('string'),
|
|
75
90
|
onConflict: P('string'),
|
|
76
91
|
onConflictAction: P('string'),
|
|
92
|
+
// PRIMARY KEY descriptor for the MySQL RETURNING emulation (INSERT…RETURNING): `pk` is a
|
|
93
|
+
// comma-separated PK column list, `autoInc` names the single AUTO_INCREMENT column (absent for a
|
|
94
|
+
// client-supplied PK). Consumed by compileWriteNode → mysqlPkHint so the emulation re-selects by
|
|
95
|
+
// the REAL PK. Inert on PG/SQLite (native RETURNING).
|
|
96
|
+
pk: P('string'),
|
|
97
|
+
autoInc: P('string'),
|
|
77
98
|
};
|
|
78
99
|
const entry = (name, inputPorts, shape, portableToIR) => ({
|
|
79
100
|
name,
|
|
@@ -96,6 +117,11 @@ exports.LITEDBMODEL_CATALOG = {
|
|
|
96
117
|
// Read: `items` (a Select root yields a row list; per-row collapse to `item` is the
|
|
97
118
|
// consumer's cardinality concern, mirrored from graphddb Query's `cardinality` port).
|
|
98
119
|
Select: entry('Select', { ...SELECT_PORTS, cardinality: P('string') }, 'items', true),
|
|
120
|
+
// COUNT(*) aggregate read (v1 `DBModel._count`): `SELECT COUNT(*) as count FROM t[ WHERE …]`.
|
|
121
|
+
// Only `table` (required) + the optional `where` fragment tree — v1's count carries no
|
|
122
|
+
// projection/order/limit/offset (it counts the filtered rows). Output is a one-row `[{count}]`
|
|
123
|
+
// list (the `items` shape, like every read); the consumer reads `count` — v1's `parseInt(count)`.
|
|
124
|
+
Count: entry('Count', { table: P('string', true), where: P('fragment') }, 'items', true),
|
|
99
125
|
// Writes yield the RETURNING row list (`items`); a single-row write collapses at the
|
|
100
126
|
// consumer boundary, same as reads.
|
|
101
127
|
Insert: entry('Insert', WRITE_PORTS, 'items', true),
|
|
@@ -119,6 +145,7 @@ function catalogEntry(name) {
|
|
|
119
145
|
/** The catalog names litedbmodel declares (the C2 per-DSL surface). */
|
|
120
146
|
exports.CATALOG_NAMES = [
|
|
121
147
|
'Select',
|
|
148
|
+
'Count',
|
|
122
149
|
'Insert',
|
|
123
150
|
'Update',
|
|
124
151
|
'Delete',
|
|
@@ -140,11 +167,15 @@ const WRITE_SET = new Set(exports.WRITE_CATALOG_NAMES);
|
|
|
140
167
|
/**
|
|
141
168
|
* The dynamic per-field write-port families (`<group>.<field>` — the flattened record
|
|
142
169
|
* convention; longest-prefix wins). A `values.<field>` (Insert) or `set.<field>`
|
|
143
|
-
* (Update) port carries the field's Expression IR value
|
|
170
|
+
* (Update) port carries the field's Expression IR value; a `sqlCast.<field>` port carries
|
|
171
|
+
* the field's PostgreSQL cast type (a literal string, e.g. `jsonb`/`uuid`/`int[]`) that drives
|
|
172
|
+
* the v1 per-column `?::<sqlCast>` on Postgres (`DBModel._insert`/`_update`). `sqlCast.` ports are
|
|
173
|
+
* INERT on MySQL/SQLite (v1's dialect-aware cast formatter is identity there).
|
|
144
174
|
*/
|
|
145
175
|
exports.WRITE_PORT_FAMILIES = [
|
|
146
176
|
'values.',
|
|
147
177
|
'set.',
|
|
178
|
+
'sqlCast.',
|
|
148
179
|
];
|
|
149
180
|
/**
|
|
150
181
|
* The emitter's catalog validation (loud; a violation is a BUILD error), mirrored from
|
package/dist/scp/catalog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/scp/catalog.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;;;
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/scp/catalog.ts"],"names":[],"mappings":"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"}
|