litedbmodel 1.2.10 → 2.0.1

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 (143) hide show
  1. package/README.md +1 -1
  2. package/dist/DBModel.d.ts.map +1 -1
  3. package/dist/DBModel.js +6 -0
  4. package/dist/DBModel.js.map +1 -1
  5. package/dist/scp/authoring-sql.d.ts +134 -0
  6. package/dist/scp/authoring-sql.d.ts.map +1 -0
  7. package/dist/scp/authoring-sql.js +191 -0
  8. package/dist/scp/authoring-sql.js.map +1 -0
  9. package/dist/scp/authoring.d.ts +155 -0
  10. package/dist/scp/authoring.d.ts.map +1 -0
  11. package/dist/scp/authoring.js +162 -0
  12. package/dist/scp/authoring.js.map +1 -0
  13. package/dist/scp/catalog.d.ts +91 -0
  14. package/dist/scp/catalog.d.ts.map +1 -0
  15. package/dist/scp/catalog.js +230 -0
  16. package/dist/scp/catalog.js.map +1 -0
  17. package/dist/scp/codegen.d.ts +95 -0
  18. package/dist/scp/codegen.d.ts.map +1 -0
  19. package/dist/scp/codegen.js +94 -0
  20. package/dist/scp/codegen.js.map +1 -0
  21. package/dist/scp/dialect.d.ts +141 -0
  22. package/dist/scp/dialect.d.ts.map +1 -0
  23. package/dist/scp/dialect.js +194 -0
  24. package/dist/scp/dialect.js.map +1 -0
  25. package/dist/scp/errors.d.ts +36 -0
  26. package/dist/scp/errors.d.ts.map +1 -0
  27. package/dist/scp/errors.js +72 -0
  28. package/dist/scp/errors.js.map +1 -0
  29. package/dist/scp/find-filter-guard.d.ts +68 -0
  30. package/dist/scp/find-filter-guard.d.ts.map +1 -0
  31. package/dist/scp/find-filter-guard.js +88 -0
  32. package/dist/scp/find-filter-guard.js.map +1 -0
  33. package/dist/scp/fragment/assemble.d.ts +61 -0
  34. package/dist/scp/fragment/assemble.d.ts.map +1 -0
  35. package/dist/scp/fragment/assemble.js +148 -0
  36. package/dist/scp/fragment/assemble.js.map +1 -0
  37. package/dist/scp/fragment/compile-pg.d.ts +107 -0
  38. package/dist/scp/fragment/compile-pg.d.ts.map +1 -0
  39. package/dist/scp/fragment/compile-pg.js +142 -0
  40. package/dist/scp/fragment/compile-pg.js.map +1 -0
  41. package/dist/scp/fragment/index.d.ts +16 -0
  42. package/dist/scp/fragment/index.d.ts.map +1 -0
  43. package/dist/scp/fragment/index.js +34 -0
  44. package/dist/scp/fragment/index.js.map +1 -0
  45. package/dist/scp/fragment/model.d.ts +119 -0
  46. package/dist/scp/fragment/model.d.ts.map +1 -0
  47. package/dist/scp/fragment/model.js +66 -0
  48. package/dist/scp/fragment/model.js.map +1 -0
  49. package/dist/scp/fragment/pg-array-type.d.ts +13 -0
  50. package/dist/scp/fragment/pg-array-type.d.ts.map +1 -0
  51. package/dist/scp/fragment/pg-array-type.js +34 -0
  52. package/dist/scp/fragment/pg-array-type.js.map +1 -0
  53. package/dist/scp/guard.d.ts +43 -0
  54. package/dist/scp/guard.d.ts.map +1 -0
  55. package/dist/scp/guard.js +134 -0
  56. package/dist/scp/guard.js.map +1 -0
  57. package/dist/scp/index.cjs +12202 -0
  58. package/dist/scp/index.d.ts +64 -0
  59. package/dist/scp/index.d.ts.map +1 -0
  60. package/dist/scp/index.js +238 -0
  61. package/dist/scp/index.js.map +1 -0
  62. package/dist/scp/index.mjs +4819 -0
  63. package/dist/scp/makesql/authoring-compile.d.ts +90 -0
  64. package/dist/scp/makesql/authoring-compile.d.ts.map +1 -0
  65. package/dist/scp/makesql/authoring-compile.js +494 -0
  66. package/dist/scp/makesql/authoring-compile.js.map +1 -0
  67. package/dist/scp/makesql/compile-crud.d.ts +133 -0
  68. package/dist/scp/makesql/compile-crud.d.ts.map +1 -0
  69. package/dist/scp/makesql/compile-crud.js +288 -0
  70. package/dist/scp/makesql/compile-crud.js.map +1 -0
  71. package/dist/scp/makesql/compile-relation.d.ts +157 -0
  72. package/dist/scp/makesql/compile-relation.d.ts.map +1 -0
  73. package/dist/scp/makesql/compile-relation.js +425 -0
  74. package/dist/scp/makesql/compile-relation.js.map +1 -0
  75. package/dist/scp/makesql/compile-select.d.ts +45 -0
  76. package/dist/scp/makesql/compile-select.d.ts.map +1 -0
  77. package/dist/scp/makesql/compile-select.js +58 -0
  78. package/dist/scp/makesql/compile-select.js.map +1 -0
  79. package/dist/scp/makesql/compile.d.ts +63 -0
  80. package/dist/scp/makesql/compile.d.ts.map +1 -0
  81. package/dist/scp/makesql/compile.js +99 -0
  82. package/dist/scp/makesql/compile.js.map +1 -0
  83. package/dist/scp/makesql/handler.d.ts +58 -0
  84. package/dist/scp/makesql/handler.d.ts.map +1 -0
  85. package/dist/scp/makesql/handler.js +113 -0
  86. package/dist/scp/makesql/handler.js.map +1 -0
  87. package/dist/scp/makesql/index.d.ts +33 -0
  88. package/dist/scp/makesql/index.d.ts.map +1 -0
  89. package/dist/scp/makesql/index.js +114 -0
  90. package/dist/scp/makesql/index.js.map +1 -0
  91. package/dist/scp/makesql/ir.d.ts +42 -0
  92. package/dist/scp/makesql/ir.d.ts.map +1 -0
  93. package/dist/scp/makesql/ir.js +66 -0
  94. package/dist/scp/makesql/ir.js.map +1 -0
  95. package/dist/scp/makesql/json-array.d.ts +84 -0
  96. package/dist/scp/makesql/json-array.d.ts.map +1 -0
  97. package/dist/scp/makesql/json-array.js +118 -0
  98. package/dist/scp/makesql/json-array.js.map +1 -0
  99. package/dist/scp/makesql/json-batch.d.ts +102 -0
  100. package/dist/scp/makesql/json-batch.d.ts.map +1 -0
  101. package/dist/scp/makesql/json-batch.js +269 -0
  102. package/dist/scp/makesql/json-batch.js.map +1 -0
  103. package/dist/scp/makesql/makesql.d.ts +99 -0
  104. package/dist/scp/makesql/makesql.d.ts.map +1 -0
  105. package/dist/scp/makesql/makesql.js +122 -0
  106. package/dist/scp/makesql/makesql.js.map +1 -0
  107. package/dist/scp/makesql/pool-executor.d.ts +47 -0
  108. package/dist/scp/makesql/pool-executor.d.ts.map +1 -0
  109. package/dist/scp/makesql/pool-executor.js +50 -0
  110. package/dist/scp/makesql/pool-executor.js.map +1 -0
  111. package/dist/scp/makesql/static-bundle.d.ts +185 -0
  112. package/dist/scp/makesql/static-bundle.d.ts.map +1 -0
  113. package/dist/scp/makesql/static-bundle.js +1024 -0
  114. package/dist/scp/makesql/static-bundle.js.map +1 -0
  115. package/dist/scp/makesql/tx.d.ts +216 -0
  116. package/dist/scp/makesql/tx.d.ts.map +1 -0
  117. package/dist/scp/makesql/tx.js +743 -0
  118. package/dist/scp/makesql/tx.js.map +1 -0
  119. package/dist/scp/relation.d.ts +148 -0
  120. package/dist/scp/relation.d.ts.map +1 -0
  121. package/dist/scp/relation.js +257 -0
  122. package/dist/scp/relation.js.map +1 -0
  123. package/dist/scp/runtime.d.ts +231 -0
  124. package/dist/scp/runtime.d.ts.map +1 -0
  125. package/dist/scp/runtime.js +381 -0
  126. package/dist/scp/runtime.js.map +1 -0
  127. package/dist/scp/typed-object.d.ts +99 -0
  128. package/dist/scp/typed-object.d.ts.map +1 -0
  129. package/dist/scp/typed-object.js +184 -0
  130. package/dist/scp/typed-object.js.map +1 -0
  131. package/dist/scp/writes.d.ts +251 -0
  132. package/dist/scp/writes.d.ts.map +1 -0
  133. package/dist/scp/writes.js +176 -0
  134. package/dist/scp/writes.js.map +1 -0
  135. package/docs/proposal/contracts-architecture-feasibility.md +328 -0
  136. package/docs/proposal/contracts-architecture.md +579 -0
  137. package/docs/proposal/litedbmodel-v2-scp-architecture.md +382 -0
  138. package/docs/proposal/sql-dynamic-expansion-spec.md +175 -0
  139. package/docs/proposal/v0-coverage-matrix.md +157 -0
  140. package/docs/proposal/v2-completeness-plan.md +90 -0
  141. package/docs/proposal/v2-sql-parity-checklist.md +162 -0
  142. package/package.json +27 -5
  143. package/docs/README_REVIEW.md +0 -23
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tx.js","sourceRoot":"","sources":["../../../src/scp/makesql/tx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * litedbmodel v2 SCP — Read relations: pre-compiled batch op + staged batch resolution (WS4,
3
+ * #24; makeSQL re-expression, epic #43/#45 Phase B).
4
+ *
5
+ * Relations are NOT SQL JOINs by default (spec §5). They are the staged-batch
6
+ * query-composition + object-assembly shape v1's `LazyRelation` uses: collect the parent key
7
+ * set of a result page, run ONE batched child SELECT keyed by the deduped parent keys, then
8
+ * distribute the child rows back to their parents. One batched query per relation edge, NEVER
9
+ * one-per-parent (no N+1).
10
+ *
11
+ * ## The relation op is a STATIC makeSQL artifact (design #45)
12
+ *
13
+ * A {@link RelationOp} is compiled ONCE from a model {@link RelationDecl} into a STATIC
14
+ * `makeSQL` batch SELECT via the makeSQL relation builders (`./makesql/compile-relation`) —
15
+ * byte-identical to the ORIGINAL `LazyRelation` SQL for PostgreSQL (`= ANY(?::type[])`,
16
+ * `CROSS JOIN LATERAL`, `UNNEST`), and the single-JSON-param server-side form for MySQL/SQLite
17
+ * (`json_each` / `JSON_TABLE`). The deduped key array binds as ONE param with STATIC text (no
18
+ * placeholder-count expansion), so `op.sql` is fixed and value-independent — pure JSON, lands
19
+ * in the bundle, a per-language runtime executes it directly. The REDUCED
20
+ * `CompiledOperation`/`renderOperation`/`IN (?)`-expansion forms are GONE.
21
+ *
22
+ * ## ONE relation op, TWO surfaces (spec §5)
23
+ *
24
+ * Both read surfaces trigger the IDENTICAL compiled op via {@link runRelationOp}:
25
+ * - **Declarative select** (`with: { author: true }`): batch-prefetched over the page.
26
+ * - **Lazy** (`await post.author`): a prototype getter fires the SAME op over the sibling set.
27
+ */
28
+ import { type Dialect } from './makesql/handler';
29
+ /** A read relation cardinality (v1 parity). `belongsTo`/`hasOne` are single; `hasMany` many. */
30
+ export type RelationKind = 'belongsTo' | 'hasMany' | 'hasOne';
31
+ /**
32
+ * A model's read-relation declaration (the authored/decorated relation metadata, spec §4).
33
+ * Mirrors v1's `@belongsTo`/`@hasMany`/`@hasOne` config (source/target key + optional
34
+ * per-parent order/limit), reduced to the fields the batch SQL needs.
35
+ */
36
+ export interface RelationDecl {
37
+ /** Relation name (the property attached on the parent object). */
38
+ readonly name: string;
39
+ /** Cardinality. */
40
+ readonly kind: RelationKind;
41
+ /** The child (target) table name. */
42
+ readonly targetTable: string;
43
+ /** Child columns to project (the child typed-object own props). */
44
+ readonly select: readonly string[];
45
+ /** The PARENT column whose value is the batch key (single-key relations). */
46
+ readonly parentKey?: string;
47
+ /** The CHILD column matched against the parent key (single-key relations). */
48
+ readonly targetKey?: string;
49
+ /**
50
+ * COMPOSITE-key relations (#47 item 1): the ORDERED parent columns whose tuple is the batch key.
51
+ * Mutually exclusive with {@link parentKey}. Pairs positionally with {@link targetKeys}.
52
+ */
53
+ readonly parentKeys?: readonly string[];
54
+ /** COMPOSITE-key relations: the ORDERED child columns matched against the parent-key tuple. */
55
+ readonly targetKeys?: readonly string[];
56
+ /** Optional per-parent ORDER BY body (dialect-neutral text). */
57
+ readonly order?: string;
58
+ /** Optional per-parent row limit (`hasMany` only). */
59
+ readonly limit?: number;
60
+ /** The target SQL dialect the batch SELECT is compiled for (default `'sqlite'`). */
61
+ readonly dialect?: Dialect;
62
+ /**
63
+ * CROSS-DB relations (V0 R1): the NAME of the connection the batch SELECT must execute against —
64
+ * the TARGET model's DB, which may differ from the parent's (v1 `LazyRelation.ts:236` runs a
65
+ * relation on `TargetClass.getDriverType()`'s driver/connection). Absent ⇒ the parent's own
66
+ * connection (the same-DB default). The SQL is v1-identical either way; the tag only ROUTES the
67
+ * statement — a per-language runtime with a connection registry picks the pooled driver by name.
68
+ */
69
+ readonly connection?: string;
70
+ }
71
+ /**
72
+ * A pre-compiled relation batch op (spec §8). Pure JSON — it carries the STATIC batch SELECT
73
+ * `sql` (makeSQL text with ONE `?` for the deduped-key array param) plus the grouping metadata
74
+ * the runtime needs to distribute child rows to parents. No functions, no reduced IR.
75
+ */
76
+ export interface RelationOp {
77
+ readonly name: string;
78
+ readonly kind: RelationKind;
79
+ /** Parent column supplying the batch key values (dedup key) — single-key relations. */
80
+ readonly parentKey?: string;
81
+ /** Child column the batch groups rows by (matches the parent key) — single-key relations. */
82
+ readonly targetKey?: string;
83
+ /**
84
+ * COMPOSITE-key relations (#47 item 1): the ORDERED parent columns whose tuple is the dedup key.
85
+ * Present iff the op is composite (mutually exclusive with {@link parentKey}).
86
+ */
87
+ readonly parentKeys?: readonly string[];
88
+ /** COMPOSITE-key relations: the ORDERED child columns the batch groups rows by (the key tuple). */
89
+ readonly targetKeys?: readonly string[];
90
+ /** The target SQL dialect the batch SELECT text is compiled for. */
91
+ readonly dialect: Dialect;
92
+ /**
93
+ * CROSS-DB relations (V0 R1): the connection NAME the batch executes against (the target model's
94
+ * DB). Present ONLY when it differs from the parent's connection (a same-DB relation omits it).
95
+ * A per-language runtime routes the statement to the pooled driver of this name; the SQL text and
96
+ * `dialect`-driven placeholder/bind are already correct for the target (v1 `LazyRelation` parity).
97
+ */
98
+ readonly connection?: string;
99
+ /**
100
+ * The batched child SELECT as STATIC makeSQL text. Single-key: ONE `?` binds the deduped
101
+ * parent-key set (PG `= ANY(?::t[])` / MySQL·SQLite single-JSON). Composite: PG binds ONE array
102
+ * param PER key column (`unnest(?::t1[], ?::t2[])`); MySQL·SQLite bind ONE JSON array-of-tuples
103
+ * param. Value-length-independent either way, so `sql` is fixed.
104
+ */
105
+ readonly sql: string;
106
+ }
107
+ /** The reserved input head the relation batch query binds its deduped key array to. */
108
+ export declare const RELATION_KEYS_HEAD = "__keys";
109
+ /**
110
+ * Compile ONE {@link RelationDecl} into a STATIC {@link RelationOp} via the makeSQL relation
111
+ * builders. The batch query selects the child rows whose {@link RelationDecl.targetKey} is in
112
+ * the deduped parent-key set. PG stays byte-identical to v1's `LazyRelation`; MySQL/SQLite use
113
+ * the single-JSON-param server-side form. A `hasMany` with `limit` compiles to the per-parent
114
+ * LATERAL (PG) / ROW_NUMBER (MySQL·SQLite) form. The SQL text is FIXED (the array binds as one
115
+ * param regardless of length), so it needs no per-input recompile.
116
+ */
117
+ export declare function compileRelationOp(decl: RelationDecl): RelationOp;
118
+ /** A minimal read-only driver surface (`prepare(sql).all(...params)`), the SQLite `Database`. */
119
+ export interface RelationDriver {
120
+ prepare(sql: string): {
121
+ all(...params: unknown[]): unknown[];
122
+ };
123
+ }
124
+ /** The child rows grouped for a batch: parent-key value (stringified) → child rows. */
125
+ export type RelationBatch = Map<string, Record<string, unknown>[]>;
126
+ /**
127
+ * Run ONE {@link RelationOp} for a set of parent rows: dedup the parent-key tuples, render the
128
+ * STATIC batch SELECT once (dialect placeholder form) resolving the deferred PG array cast(s) from
129
+ * the REAL keys, execute it with the keys bound (single array / per-column arrays / JSON tuples),
130
+ * then group the child rows by their target-key identity. The single batch primitive BOTH the
131
+ * declarative-select and the lazy surface invoke, single-key AND composite.
132
+ *
133
+ * Returns `{ sql, keys, batch }` (`keys` = the deduped parent-key tuples). An empty key set issues
134
+ * NO query (the correct empty-set behavior — the membership over no keys selects nothing).
135
+ */
136
+ export declare function runRelationOp(op: RelationOp, parents: readonly Record<string, unknown>[], db: RelationDriver): {
137
+ sql: string;
138
+ keys: unknown[][];
139
+ batch: RelationBatch;
140
+ };
141
+ /**
142
+ * Distribute a resolved {@link RelationBatch} onto ONE parent per the relation cardinality:
143
+ * `hasMany` → the child list (`[]` when none); `belongsTo`/`hasOne` → the single child (or
144
+ * `null`). Keyed by the parent's key-tuple identity. `null`/`[]` is the declared cardinality's
145
+ * empty representation, not an ad-hoc default.
146
+ */
147
+ export declare function distributeToParent(op: RelationOp, parent: Record<string, unknown>, batch: RelationBatch): Record<string, unknown>[] | Record<string, unknown> | null;
148
+ //# sourceMappingURL=relation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation.d.ts","sourceRoot":"","sources":["../../src/scp/relation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ /**
3
+ * litedbmodel v2 SCP — Read relations: pre-compiled batch op + staged batch resolution (WS4,
4
+ * #24; makeSQL re-expression, epic #43/#45 Phase B).
5
+ *
6
+ * Relations are NOT SQL JOINs by default (spec §5). They are the staged-batch
7
+ * query-composition + object-assembly shape v1's `LazyRelation` uses: collect the parent key
8
+ * set of a result page, run ONE batched child SELECT keyed by the deduped parent keys, then
9
+ * distribute the child rows back to their parents. One batched query per relation edge, NEVER
10
+ * one-per-parent (no N+1).
11
+ *
12
+ * ## The relation op is a STATIC makeSQL artifact (design #45)
13
+ *
14
+ * A {@link RelationOp} is compiled ONCE from a model {@link RelationDecl} into a STATIC
15
+ * `makeSQL` batch SELECT via the makeSQL relation builders (`./makesql/compile-relation`) —
16
+ * byte-identical to the ORIGINAL `LazyRelation` SQL for PostgreSQL (`= ANY(?::type[])`,
17
+ * `CROSS JOIN LATERAL`, `UNNEST`), and the single-JSON-param server-side form for MySQL/SQLite
18
+ * (`json_each` / `JSON_TABLE`). The deduped key array binds as ONE param with STATIC text (no
19
+ * placeholder-count expansion), so `op.sql` is fixed and value-independent — pure JSON, lands
20
+ * in the bundle, a per-language runtime executes it directly. The REDUCED
21
+ * `CompiledOperation`/`renderOperation`/`IN (?)`-expansion forms are GONE.
22
+ *
23
+ * ## ONE relation op, TWO surfaces (spec §5)
24
+ *
25
+ * Both read surfaces trigger the IDENTICAL compiled op via {@link runRelationOp}:
26
+ * - **Declarative select** (`with: { author: true }`): batch-prefetched over the page.
27
+ * - **Lazy** (`await post.author`): a prototype getter fires the SAME op over the sibling set.
28
+ */
29
+ Object.defineProperty(exports, "__esModule", { value: true });
30
+ exports.RELATION_KEYS_HEAD = void 0;
31
+ exports.compileRelationOp = compileRelationOp;
32
+ exports.runRelationOp = runRelationOp;
33
+ exports.distributeToParent = distributeToParent;
34
+ const makesql_1 = require("./makesql/makesql");
35
+ const handler_1 = require("./makesql/handler");
36
+ const compile_relation_1 = require("./makesql/compile-relation");
37
+ /** The reserved input head the relation batch query binds its deduped key array to. */
38
+ exports.RELATION_KEYS_HEAD = '__keys';
39
+ /**
40
+ * Compile ONE {@link RelationDecl} into a STATIC {@link RelationOp} via the makeSQL relation
41
+ * builders. The batch query selects the child rows whose {@link RelationDecl.targetKey} is in
42
+ * the deduped parent-key set. PG stays byte-identical to v1's `LazyRelation`; MySQL/SQLite use
43
+ * the single-JSON-param server-side form. A `hasMany` with `limit` compiles to the per-parent
44
+ * LATERAL (PG) / ROW_NUMBER (MySQL·SQLite) form. The SQL text is FIXED (the array binds as one
45
+ * param regardless of length), so it needs no per-input recompile.
46
+ */
47
+ function compileRelationOp(decl) {
48
+ if (decl.kind !== 'hasMany' && decl.limit !== undefined) {
49
+ throw new Error(`relation '${decl.name}': a per-parent 'limit' is only valid for hasMany (got ${decl.kind})`);
50
+ }
51
+ if (decl.limit !== undefined && (!Number.isInteger(decl.limit) || decl.limit < 0)) {
52
+ throw new Error(`relation '${decl.name}': per-parent limit must be a non-negative integer (got ${String(decl.limit)})`);
53
+ }
54
+ if (decl.limit !== undefined && decl.order === undefined) {
55
+ throw new Error(`relation '${decl.name}': a per-parent 'limit' requires an explicit 'order' (the per-parent window needs a deterministic ordering to decide which ${decl.limit} rows each parent keeps)`);
56
+ }
57
+ const dialect = decl.dialect ?? 'sqlite';
58
+ const composite = isCompositeDecl(decl);
59
+ const sql = compiledBatchSql(decl, dialect);
60
+ // CROSS-DB (V0 R1): carry the target connection tag ONLY when set (a same-DB relation stays
61
+ // untagged, so existing bundles are byte-unchanged — the field is additive/optional).
62
+ const conn = decl.connection !== undefined ? { connection: decl.connection } : {};
63
+ if (composite) {
64
+ return {
65
+ name: decl.name,
66
+ kind: decl.kind,
67
+ parentKeys: [...decl.parentKeys],
68
+ targetKeys: [...decl.targetKeys],
69
+ dialect,
70
+ ...conn,
71
+ sql,
72
+ };
73
+ }
74
+ return {
75
+ name: decl.name,
76
+ kind: decl.kind,
77
+ parentKey: decl.parentKey,
78
+ targetKey: decl.targetKey,
79
+ dialect,
80
+ ...conn,
81
+ sql,
82
+ };
83
+ }
84
+ /**
85
+ * A relation decl is COMPOSITE iff it carries `parentKeys`/`targetKeys` arrays. Validates the two
86
+ * are present together, equal-length (paired positionally), and non-empty; and that the single-key
87
+ * `parentKey`/`targetKey` are NOT also set (mutually exclusive). Single-key iff both arrays absent.
88
+ */
89
+ function isCompositeDecl(decl) {
90
+ const hasArrays = decl.parentKeys !== undefined || decl.targetKeys !== undefined;
91
+ if (!hasArrays) {
92
+ if (decl.parentKey === undefined || decl.targetKey === undefined) {
93
+ throw new Error(`relation '${decl.name}': a single-key relation requires 'parentKey' and 'targetKey'`);
94
+ }
95
+ return false;
96
+ }
97
+ if (decl.parentKeys === undefined || decl.targetKeys === undefined) {
98
+ throw new Error(`relation '${decl.name}': a composite-key relation requires BOTH 'parentKeys' and 'targetKeys'`);
99
+ }
100
+ if (decl.parentKeys.length === 0 || decl.parentKeys.length !== decl.targetKeys.length) {
101
+ throw new Error(`relation '${decl.name}': 'parentKeys' and 'targetKeys' must be non-empty and equal-length (got ${decl.parentKeys.length} vs ${decl.targetKeys.length})`);
102
+ }
103
+ if (decl.parentKey !== undefined || decl.targetKey !== undefined) {
104
+ throw new Error(`relation '${decl.name}': cannot mix single-key ('parentKey'/'targetKey') with composite ('parentKeys'/'targetKeys')`);
105
+ }
106
+ return true;
107
+ }
108
+ /**
109
+ * Compile the STATIC batch SELECT text: the makeSQL relation builder emits complete tuned SQL
110
+ * whose deduped-key array is ONE param. We compile against a single placeholder key array so
111
+ * the text is fixed; the runtime re-binds the real deduped keys against the SAME text (the
112
+ * single-JSON / `= ANY` forms are length-independent, so the text is stable).
113
+ */
114
+ function compiledBatchSql(decl, dialect) {
115
+ // A COMPOSITE decl compiles to the STATIC composite form (PG: one array param per key column;
116
+ // MySQL/SQLite: one JSON array-of-tuples param) — length-independent, so the text is fixed. A
117
+ // per-parent `limit` selects the STATIC composite-LIMITED builder (PG LATERAL / MySQL·SQLite
118
+ // ROW_NUMBER window over the SAME static key-set predicate — #47 last completeness gap).
119
+ if (decl.parentKeys !== undefined) {
120
+ const compositeBase = {
121
+ dialect,
122
+ tableName: decl.targetTable,
123
+ select: decl.select.join(', '),
124
+ order: decl.order,
125
+ targetKeys: [...decl.targetKeys],
126
+ deferPgArrayCast: true,
127
+ };
128
+ const node = decl.limit !== undefined
129
+ ? (0, compile_relation_1.compileCompositeKeyStaticLimited)({ ...compositeBase, limit: decl.limit })
130
+ : (0, compile_relation_1.compileCompositeKeyStaticUnlimited)(compositeBase);
131
+ return (0, makesql_1.assembleMakeSQL)(node).sql;
132
+ }
133
+ // A one-element placeholder key set fixes the SQL text (single-JSON-param / `= ANY` forms are
134
+ // value-length-independent). The concrete keys are bound at execute time.
135
+ const placeholderKeys = [null];
136
+ const base = {
137
+ dialect,
138
+ tableName: decl.targetTable,
139
+ select: decl.select.join(', '),
140
+ order: decl.order,
141
+ targetKey: decl.targetKey,
142
+ values: placeholderKeys,
143
+ // The keys are UNKNOWN at symbolic compile (placeholder set), so the PG `= ANY(?::<T>[])`
144
+ // element type is DEFERRED to render (#46) — resolved from the real deduped keys via
145
+ // `inferPgArrayType`, reproducing v1's live-correct cast (`::int[]` for int keys). Baking a
146
+ // compile-time `text[]` here was the #43 regression (`integer = text` on real PG).
147
+ deferPgArrayCast: true,
148
+ };
149
+ const node = decl.limit !== undefined
150
+ ? (0, compile_relation_1.compileSingleKeyLimited)({ ...base, limit: decl.limit })
151
+ : (0, compile_relation_1.compileSingleKeyUnlimited)(base);
152
+ // The builder emits the SQL with ONE `?` (the whole key array). Assemble to the flat text.
153
+ return (0, makesql_1.assembleMakeSQL)(node).sql;
154
+ }
155
+ /** The ordered PARENT key columns of an op (single-key → 1-element list; composite → the tuple). */
156
+ function parentKeyCols(op) {
157
+ return op.parentKeys ?? [op.parentKey];
158
+ }
159
+ /** The ordered CHILD key columns of an op (single-key → 1-element list; composite → the tuple). */
160
+ function targetKeyCols(op) {
161
+ return op.targetKeys ?? [op.targetKey];
162
+ }
163
+ /** The stringified key identity for dedupe/grouping. Single scalar → `String(v)`; tuple → joined. */
164
+ function keyIdentity(values) {
165
+ // A NUL separator no scalar `String(v)` contains, so distinct tuples never collide.
166
+ return values.map((v) => String(v)).join('');
167
+ }
168
+ /**
169
+ * Bind the deduped keys to the batch op's params per dialect + arity. Single-key: PG binds the
170
+ * scalar array verbatim (`= ANY(?::t[])`); MySQL/SQLite bind the JSON-encoded array. Composite: PG
171
+ * binds ONE array param PER key column (transposed tuples → `unnest(?::t1[], ?::t2[])`);
172
+ * MySQL/SQLite bind ONE JSON array-of-tuples string. Returns the positional param list.
173
+ */
174
+ function bindKeys(op, tuples) {
175
+ const composite = op.parentKeys !== undefined;
176
+ if (op.dialect === 'postgres') {
177
+ if (!composite)
178
+ return [tuples.map((t) => t[0])]; // ONE scalar array param
179
+ // Transpose tuples → per-column arrays: `[[1,a],[2,b]] → [[1,2],[a,b]]` — one array param each.
180
+ return parentKeyCols(op).map((_, col) => tuples.map((t) => t[col]));
181
+ }
182
+ // MySQL/SQLite: single-key → JSON scalar array; composite → JSON array-of-tuples. ONE param.
183
+ const payload = composite ? tuples.map((t) => [...t]) : tuples.map((t) => t[0]);
184
+ return [JSON.stringify(payload)];
185
+ }
186
+ /**
187
+ * Run ONE {@link RelationOp} for a set of parent rows: dedup the parent-key tuples, render the
188
+ * STATIC batch SELECT once (dialect placeholder form) resolving the deferred PG array cast(s) from
189
+ * the REAL keys, execute it with the keys bound (single array / per-column arrays / JSON tuples),
190
+ * then group the child rows by their target-key identity. The single batch primitive BOTH the
191
+ * declarative-select and the lazy surface invoke, single-key AND composite.
192
+ *
193
+ * Returns `{ sql, keys, batch }` (`keys` = the deduped parent-key tuples). An empty key set issues
194
+ * NO query (the correct empty-set behavior — the membership over no keys selects nothing).
195
+ */
196
+ function runRelationOp(op, parents, db) {
197
+ const pCols = parentKeyCols(op);
198
+ const keys = dedupeKeys(parents, pCols);
199
+ const batch = new Map();
200
+ // Resolve the deferred PG array cast(s) (#46) from the REAL keys BEFORE the `?`→`$N` render. A
201
+ // single-key op has ONE cast; a composite PG op has ONE cast PER key column — resolve each from
202
+ // its own column's key values, left-to-right (resolvePgArrayCast resolves the first token each
203
+ // call). MySQL/SQLite carry no cast token.
204
+ let cast = op.sql;
205
+ if (op.dialect === 'postgres') {
206
+ for (let col = 0; col < pCols.length; col++)
207
+ cast = (0, compile_relation_1.resolvePgArrayCast)(cast, keys.map((t) => t[col]));
208
+ }
209
+ const sql = (0, handler_1.renderPlaceholders)(cast, op.dialect);
210
+ if (keys.length === 0)
211
+ return { sql, keys, batch };
212
+ const tCols = targetKeyCols(op);
213
+ const rows = db.prepare(sql).all(...bindKeys(op, keys));
214
+ for (const row of rows) {
215
+ const k = keyIdentity(tCols.map((c) => row[c]));
216
+ const list = batch.get(k);
217
+ if (list === undefined)
218
+ batch.set(k, [row]);
219
+ else
220
+ list.push(row);
221
+ }
222
+ return { sql, keys, batch };
223
+ }
224
+ /**
225
+ * The deduped, non-null parent-key TUPLES (insertion order preserved — deterministic). A tuple is
226
+ * dropped if ANY of its key columns is null/undefined (no partial keys). Deduped on the stringified
227
+ * tuple identity (so `1` and `"1"` collapse exactly as `String(v)`).
228
+ */
229
+ function dedupeKeys(parents, keyCols) {
230
+ const seen = new Set();
231
+ const out = [];
232
+ for (const p of parents) {
233
+ const tuple = keyCols.map((c) => p[c]);
234
+ if (tuple.some((v) => v === undefined || v === null))
235
+ continue;
236
+ const s = keyIdentity(tuple);
237
+ if (seen.has(s))
238
+ continue;
239
+ seen.add(s);
240
+ out.push(tuple);
241
+ }
242
+ return out;
243
+ }
244
+ /**
245
+ * Distribute a resolved {@link RelationBatch} onto ONE parent per the relation cardinality:
246
+ * `hasMany` → the child list (`[]` when none); `belongsTo`/`hasOne` → the single child (or
247
+ * `null`). Keyed by the parent's key-tuple identity. `null`/`[]` is the declared cardinality's
248
+ * empty representation, not an ad-hoc default.
249
+ */
250
+ function distributeToParent(op, parent, batch) {
251
+ const tuple = parentKeyCols(op).map((c) => parent[c]);
252
+ const rows = tuple.some((v) => v === undefined || v === null) ? undefined : batch.get(keyIdentity(tuple));
253
+ if (op.kind === 'hasMany')
254
+ return rows ?? [];
255
+ return rows !== undefined && rows.length > 0 ? rows[0] : null;
256
+ }
257
+ //# sourceMappingURL=relation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relation.js","sourceRoot":"","sources":["../../src/scp/relation.ts"],"names":[],"mappings":"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"}