litedbmodel 2.0.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/dist/decorators.d.ts.map +1 -1
  2. package/dist/decorators.js +44 -24
  3. package/dist/decorators.js.map +1 -1
  4. package/dist/drivers/mysql.d.ts.map +1 -1
  5. package/dist/drivers/mysql.js +6 -0
  6. package/dist/drivers/mysql.js.map +1 -1
  7. package/dist/drivers/postgres.d.ts.map +1 -1
  8. package/dist/drivers/postgres.js +7 -0
  9. package/dist/drivers/postgres.js.map +1 -1
  10. package/dist/drivers/sqlite.d.ts +2 -0
  11. package/dist/drivers/sqlite.d.ts.map +1 -1
  12. package/dist/drivers/sqlite.js +37 -2
  13. package/dist/drivers/sqlite.js.map +1 -1
  14. package/dist/scp/authoring.d.ts +66 -3
  15. package/dist/scp/authoring.d.ts.map +1 -1
  16. package/dist/scp/authoring.js +194 -5
  17. package/dist/scp/authoring.js.map +1 -1
  18. package/dist/scp/catalog.d.ts +6 -2
  19. package/dist/scp/catalog.d.ts.map +1 -1
  20. package/dist/scp/catalog.js +17 -2
  21. package/dist/scp/catalog.js.map +1 -1
  22. package/dist/scp/codegen.d.ts +132 -26
  23. package/dist/scp/codegen.d.ts.map +1 -1
  24. package/dist/scp/codegen.js +546 -35
  25. package/dist/scp/codegen.js.map +1 -1
  26. package/dist/scp/coltype.d.ts +124 -0
  27. package/dist/scp/coltype.d.ts.map +1 -0
  28. package/dist/scp/coltype.js +408 -0
  29. package/dist/scp/coltype.js.map +1 -0
  30. package/dist/scp/dialect.d.ts +12 -3
  31. package/dist/scp/dialect.d.ts.map +1 -1
  32. package/dist/scp/dialect.js +12 -3
  33. package/dist/scp/dialect.js.map +1 -1
  34. package/dist/scp/fragment/assemble.d.ts.map +1 -1
  35. package/dist/scp/fragment/assemble.js +10 -2
  36. package/dist/scp/fragment/assemble.js.map +1 -1
  37. package/dist/scp/fragment/compile-pg.js +4 -4
  38. package/dist/scp/guard.d.ts +1 -1
  39. package/dist/scp/guard.d.ts.map +1 -1
  40. package/dist/scp/guard.js +6 -0
  41. package/dist/scp/guard.js.map +1 -1
  42. package/dist/scp/index.cjs +10003 -4917
  43. package/dist/scp/index.d.ts +8 -5
  44. package/dist/scp/index.d.ts.map +1 -1
  45. package/dist/scp/index.js +35 -9
  46. package/dist/scp/index.js.map +1 -1
  47. package/dist/scp/index.mjs +1343 -213
  48. package/dist/scp/makesql/authoring-compile.d.ts.map +1 -1
  49. package/dist/scp/makesql/authoring-compile.js +11 -0
  50. package/dist/scp/makesql/authoring-compile.js.map +1 -1
  51. package/dist/scp/makesql/compile-select.d.ts +8 -1
  52. package/dist/scp/makesql/compile-select.d.ts.map +1 -1
  53. package/dist/scp/makesql/compile-select.js +1 -1
  54. package/dist/scp/makesql/compile-select.js.map +1 -1
  55. package/dist/scp/makesql/index.d.ts +2 -3
  56. package/dist/scp/makesql/index.d.ts.map +1 -1
  57. package/dist/scp/makesql/index.js +6 -6
  58. package/dist/scp/makesql/index.js.map +1 -1
  59. package/dist/scp/makesql/json-batch.d.ts.map +1 -1
  60. package/dist/scp/makesql/json-batch.js +6 -1
  61. package/dist/scp/makesql/json-batch.js.map +1 -1
  62. package/dist/scp/makesql/outtype.d.ts +99 -0
  63. package/dist/scp/makesql/outtype.d.ts.map +1 -0
  64. package/dist/scp/makesql/outtype.js +328 -0
  65. package/dist/scp/makesql/outtype.js.map +1 -0
  66. package/dist/scp/makesql/pool-executor.d.ts +70 -0
  67. package/dist/scp/makesql/pool-executor.d.ts.map +1 -1
  68. package/dist/scp/makesql/pool-executor.js +73 -5
  69. package/dist/scp/makesql/pool-executor.js.map +1 -1
  70. package/dist/scp/makesql/static-bundle.d.ts +41 -30
  71. package/dist/scp/makesql/static-bundle.d.ts.map +1 -1
  72. package/dist/scp/makesql/static-bundle.js +351 -131
  73. package/dist/scp/makesql/static-bundle.js.map +1 -1
  74. package/dist/scp/makesql/tx.d.ts +1 -1
  75. package/dist/scp/makesql/tx.d.ts.map +1 -1
  76. package/dist/scp/makesql/tx.js +48 -3
  77. package/dist/scp/makesql/tx.js.map +1 -1
  78. package/dist/scp/makesql/writeouttype.d.ts +65 -0
  79. package/dist/scp/makesql/writeouttype.d.ts.map +1 -0
  80. package/dist/scp/makesql/writeouttype.js +194 -0
  81. package/dist/scp/makesql/writeouttype.js.map +1 -0
  82. package/dist/scp/relation.d.ts +15 -1
  83. package/dist/scp/relation.d.ts.map +1 -1
  84. package/dist/scp/relation.js +61 -2
  85. package/dist/scp/relation.js.map +1 -1
  86. package/dist/scp/runtime.d.ts +17 -5
  87. package/dist/scp/runtime.d.ts.map +1 -1
  88. package/dist/scp/runtime.js +55 -14
  89. package/dist/scp/runtime.js.map +1 -1
  90. package/docs/BENCHMARK.md +58 -56
  91. package/docs/benchmark-chart.svg +166 -166
  92. package/docs/proposal/litedbmodel-v2-scp-architecture.md +51 -0
  93. package/package.json +8 -2
  94. package/dist/scp/makesql/ir.d.ts +0 -42
  95. package/dist/scp/makesql/ir.d.ts.map +0 -1
  96. package/dist/scp/makesql/ir.js +0 -66
  97. package/dist/scp/makesql/ir.js.map +0 -1
@@ -48,6 +48,7 @@ const static_bundle_1 = require("./makesql/static-bundle");
48
48
  const tx_1 = require("./makesql/tx");
49
49
  const compile_crud_1 = require("./makesql/compile-crud");
50
50
  const makesql_1 = require("./makesql/makesql");
51
+ const writeouttype_1 = require("./makesql/writeouttype");
51
52
  const writes_1 = require("./writes");
52
53
  /** The primary catalog node of a component (the first non-cond, non-map body node). */
53
54
  function primaryNodeOf(component) {
@@ -76,14 +77,20 @@ function isWriteComponent(component) {
76
77
  * @throws {SqlFailure} a mapped driver failure re-surfaced at the boundary.
77
78
  */
78
79
  function executeBehavior(contract, input, options) {
79
- return executeBundle(compileBundle(contract, options.entry, options.relations, options.dialect), input, options);
80
+ // ALWAYS-ON read de-box (issue #59), STATIC: the FAIL-CLOSED materialize resolver is precomputed
81
+ // ONCE from the model's INLINE `static columns` declaration at registration and carried on the
82
+ // contract — pure in-memory map lookups, ZERO per-read DB introspection. Coverage is enforced at
83
+ // registration (a typed read whose projected columns aren't declared cannot be published), so
84
+ // INT→number / BIGINT→string / DATE→string / BOOLEAN→boolean fires for every read — never a silent
85
+ // raw (rounded i64) result from an undeclared column.
86
+ return executeBundle(compileBundle(contract, options.entry, options.relations, options.dialect, undefined, contract.resolveColumnType), input, options);
80
87
  }
81
88
  /**
82
89
  * Compile ONE behavior method into the serializable STATIC {@link SqlBundle} (spec §8) — the
83
90
  * published multi-language artifact. SYMBOLIC (no concrete input). A read method compiles to a
84
91
  * {@link ReadGraph}; a single-write method to a `makeSQL` statement. Pure JSON throughout.
85
92
  */
86
- function compileBundle(contract, entry, relations = [], dialectName = 'sqlite') {
93
+ function compileBundle(contract, entry, relations = [], dialectName = 'sqlite', findFilterModel, resolveColumnType) {
87
94
  const component = entry ? contract.components.find((c) => c.name === entry) : contract.components[0];
88
95
  if (component === undefined)
89
96
  throw new Error(`scp runtime: entry component '${entry ?? '<first>'}' not found in contract`);
@@ -92,11 +99,14 @@ function compileBundle(contract, entry, relations = [], dialectName = 'sqlite')
92
99
  if (relationOps[decl.name] !== undefined) {
93
100
  throw new Error(`scp runtime: duplicate relation declaration '${decl.name}'`);
94
101
  }
95
- relationOps[decl.name] = (0, relation_1.compileRelationOp)({ ...decl, dialect: decl.dialect ?? dialectName });
102
+ // Bake the child column materializers (issue #59) from the SINGLE static column-type resolver at
103
+ // compile — the relation batch's child rows then de-box with ZERO introspection, via the SAME
104
+ // resolution the primary read uses (no separate materializer pass).
105
+ relationOps[decl.name] = (0, relation_1.compileRelationOp)({ ...decl, dialect: decl.dialect ?? dialectName }, resolveColumnType);
96
106
  }
97
107
  if (isWriteComponent(component)) {
98
108
  const writeNode = primaryNodeOf(component);
99
- const op = (0, tx_1.compileWriteNode)(writeNode);
109
+ const op = (0, tx_1.compileWriteNode)(writeNode, dialectName);
100
110
  return {
101
111
  dialect: dialectName,
102
112
  name: component.name,
@@ -105,7 +115,7 @@ function compileBundle(contract, entry, relations = [], dialectName = 'sqlite')
105
115
  relations: relationOps,
106
116
  };
107
117
  }
108
- const readGraph = (0, static_bundle_1.compileReadGraph)(contract, dialectName, entry);
118
+ const readGraph = (0, static_bundle_1.compileReadGraph)(contract, dialectName, entry, findFilterModel, resolveColumnType);
109
119
  return {
110
120
  dialect: dialectName,
111
121
  name: readGraph.name,
@@ -167,7 +177,12 @@ async function executeBundleAsync(bundle, input, options) {
167
177
  * @throws {SqlFailure} a mapped driver failure re-surfaced at the boundary.
168
178
  */
169
179
  async function executeBehaviorAsync(contract, input, options) {
170
- return executeBundleAsync(compileBundle(contract, options.entry, options.relations, options.dialect), input, options);
180
+ // ALWAYS-ON read de-box (issue #59), live PG/MySQL, STATIC: the materialize resolver is precomputed
181
+ // from the model's DDL at registration and carried on the contract — ZERO per-read introspection
182
+ // (no information_schema round-trips). PAIR with the per-CONNECTION driver de-box config, set ONCE
183
+ // at pool creation (mysql2 supportBigNumbers+bigNumberStrings+dateStrings; pg date type parsers) —
184
+ // see `pgDeboxExecutor` / `mysqlDeboxExecutor`.
185
+ return executeBundleAsync(compileBundle(contract, options.entry, options.relations, options.dialect, undefined, contract.resolveColumnType), input, options);
171
186
  }
172
187
  // ── Write-time relations: Command bundle + 1-tx execution (WS5, #25 — spec §6) ──
173
188
  /**
@@ -176,7 +191,13 @@ async function executeBehaviorAsync(contract, input, options) {
176
191
  * multi-write DAG derivation (WS8, rejected loudly here).
177
192
  */
178
193
  function baseWriteNodeOf(component) {
179
- const writes = component.body.filter((n) => !('cond' in n) && !('map' in n) && (n.component === 'Insert' || n.component === 'Update' || n.component === 'Delete'));
194
+ const writes = component.body.filter(
195
+ // `fanout` (bc 0.7.3+ FanoutNode) is excluded from narrowing here: litedbmodel never emits
196
+ // it, and it carries no base write op, so it can never be a write node.
197
+ (n) => !('cond' in n) &&
198
+ !('map' in n) &&
199
+ !('fanout' in n) &&
200
+ (n.component === 'Insert' || n.component === 'Update' || n.component === 'Delete'));
180
201
  if (writes.length === 0) {
181
202
  throw new Error(`scp write: Command '${component.name}' has no base write (Insert/Update/Delete) node`);
182
203
  }
@@ -193,7 +214,7 @@ function baseWriteNodeOf(component) {
193
214
  * Expression-IR params); {@link deriveTransactionPlan} lowers the lifecycle's §6 effect arrays
194
215
  * around it into the ordered statement list. Pure JSON; a WS7 runtime honors the SAME plan.
195
216
  */
196
- function compileWriteBundle(contract, entry, writes, phase, dialectName = 'sqlite') {
217
+ function compileWriteBundle(contract, entry, writes, phase, dialectName = 'sqlite', resolveColumnType) {
197
218
  const component = contract.components.find((c) => c.name === entry);
198
219
  if (component === undefined)
199
220
  throw new Error(`scp write: entry component '${entry}' not found in contract`);
@@ -205,10 +226,10 @@ function compileWriteBundle(contract, entry, writes, phase, dialectName = 'sqlit
205
226
  // MySQL has no native RETURNING; when the base write is an INSERT…RETURNING carrying a PK
206
227
  // descriptor, annotate it with the strip-before-execute PK hint so the mysql emulation re-selects
207
228
  // by the REAL PK (not a hardcoded `id`). PG/SQLite keep the op verbatim (native RETURNING).
208
- const baseOp = dialectName === 'mysql' ? (0, tx_1.mysqlPkHint)((0, tx_1.compileWriteNode)(writeNode)) : (0, tx_1.compileWriteNode)(writeNode);
229
+ const baseOp = dialectName === 'mysql' ? (0, tx_1.mysqlPkHint)((0, tx_1.compileWriteNode)(writeNode, dialectName)) : (0, tx_1.compileWriteNode)(writeNode, dialectName);
209
230
  const base = { op: baseOp, label: `${writeNode.component}` };
210
231
  const plan = (0, tx_1.deriveTransactionPlan)(phase, [base], lifecycle, dialectName);
211
- return {
232
+ const bundle = {
212
233
  dialect: dialectName,
213
234
  name: component.name,
214
235
  statement: { sql: baseOp.sql, params: baseOp.params },
@@ -216,6 +237,12 @@ function compileWriteBundle(contract, entry, writes, phase, dialectName = 'sqlit
216
237
  relations: {},
217
238
  transaction: plan,
218
239
  };
240
+ // Codegen typed de-box (spec §4.1/§9): when the schema/DDL column-type SoT is supplied, annotate
241
+ // the write bundle with the TransactionResult `outputType` (entity/returnedRows rows typed via the
242
+ // resolver + the write's target/RETURNING) so bc's typed(-raw) emitters materialize a concrete
243
+ // struct for the result. Fail-closed inside `annotateWriteBundleOutType`. Absent resolver → the
244
+ // bundle stays un-annotated (interpret/boxed only, back-compat).
245
+ return resolveColumnType === undefined ? bundle : (0, writeouttype_1.annotateWriteBundleOutType)(bundle, resolveColumnType);
219
246
  }
220
247
  /**
221
248
  * Compile a COMPOSITE (multi-write) Command into a {@link SqlBundle} carrying ONE derived,
@@ -238,7 +265,7 @@ function compileCompositeWriteBundle(contract, entries, phase, dialectName = 'sq
238
265
  if (firstBaseOp === undefined)
239
266
  firstName = component.name;
240
267
  const writeNode = baseWriteNodeOf(component);
241
- const baseOp = (0, tx_1.compileWriteNode)(writeNode);
268
+ const baseOp = (0, tx_1.compileWriteNode)(writeNode, dialectName);
242
269
  if (firstBaseOp === undefined)
243
270
  firstBaseOp = baseOp;
244
271
  bases.push({ op: baseOp, label: `${writeNode.component} ${e.name}`, name: e.name, effects: e.lifecycle.effects });
@@ -278,7 +305,7 @@ function flattenBatchOp(node, label) {
278
305
  * MySQL dialect: a batch INSERT persists N rows, so the MySQL RETURNING emulation must re-select ALL
279
306
  * N (a range on the AUTO_INCREMENT column, or the client-supplied PK values), not a single `id`.
280
307
  */
281
- function compileCreateManyBundle(name, options, dialectName = 'sqlite') {
308
+ function compileCreateManyBundle(name, options, dialectName = 'sqlite', resolveColumnType) {
282
309
  const components = (0, compile_crud_1.compileInsertMany)(dialectName, options);
283
310
  const ops = components.map((c, i) => {
284
311
  const flat = flattenBatchOp(c, `createMany group ${i}`);
@@ -290,7 +317,19 @@ function compileCreateManyBundle(name, options, dialectName = 'sqlite') {
290
317
  return flat;
291
318
  });
292
319
  const plan = (0, tx_1.deriveBatchPlan)('create', ops);
293
- return { dialect: dialectName, name, statement: { sql: ops[0]?.sql ?? '', params: (ops[0]?.params ?? []) }, optionalHeads: [], relations: {}, transaction: plan };
320
+ // `ops` is never empty here: `deriveBatchPlan` throws on zero ops, and a `createMany` always groups
321
+ // into >=1 INSERT. Fail LOUDLY rather than emitting an empty `sql` fallback (an empty-ops bundle is a
322
+ // compile bug, not a default — 'defaults in schema, not code'). The `statement` mirrors the batch plan's
323
+ // first (group-0) statement, matching the updateMany/deleteMany bundle shape below.
324
+ const head = ops[0];
325
+ if (head === undefined) {
326
+ throw new Error(`scp write: compileCreateManyBundle('${name}') produced no INSERT statements (empty createMany grouping) — an empty-ops batch bundle is a compile bug, not a silent empty-SQL default.`);
327
+ }
328
+ const bundle = { dialect: dialectName, name, statement: { sql: head.sql, params: head.params }, optionalHeads: [], relations: {}, transaction: plan };
329
+ // Codegen typed de-box (spec §4.1/§9): annotate the batch write with the TransactionResult
330
+ // `outputType` when the schema SoT resolver is supplied (returnedRows rows typed via the RETURNING
331
+ // + target table). Fail-closed. Absent resolver → un-annotated (back-compat).
332
+ return resolveColumnType === undefined ? bundle : (0, writeouttype_1.annotateWriteBundleOutType)(bundle, resolveColumnType);
294
333
  }
295
334
  /**
296
335
  * Compile an `updateMany` into a batch write {@link SqlBundle} (one UNNEST/JSON/CASE statement,
@@ -359,7 +398,9 @@ function executeTransactionBundle(bundle, input, options) {
359
398
  * @throws if the behavior output is not a row list (the typed-object read surface is for reads).
360
399
  */
361
400
  function read(contract, input, options) {
362
- return readBundle(compileBundle(contract, options.entry, options.relations, options.dialect), input, options);
401
+ // ALWAYS-ON read de-box (issue #59), STATIC: the resolver is precomputed from the model's DDL at
402
+ // registration and carried on the contract — ZERO per-read introspection.
403
+ return readBundle(compileBundle(contract, options.entry, options.relations, options.dialect, undefined, contract.resolveColumnType), input, options);
363
404
  }
364
405
  /** {@link read} against an already-compiled {@link SqlBundle} (the published §8 artifact). */
365
406
  function readBundle(bundle, input, options) {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/scp/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../src/scp/runtime.ts"],"names":[],"mappings":"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"}
package/docs/BENCHMARK.md CHANGED
@@ -11,7 +11,7 @@ Reference: [Kysely performance comparison article](https://izanami.dev/post/1e3f
11
11
 
12
12
  **Test Environment:**
13
13
  - PostgreSQL 16 (Docker, local - no network latency)
14
- - Node.js v24
14
+ - Node.js v24 — **native arm64 (Apple Silicon)**, not x86_64/Rosetta
15
15
  - **5 rounds × 50 iterations = 250 total per ORM**
16
16
  - Interleaved execution to reduce environmental variance
17
17
  - **All write operations use transactions for fair comparison**
@@ -27,25 +27,25 @@ Reference: [Kysely performance comparison article](https://izanami.dev/post/1e3f
27
27
  <!--@embedoc:benchmark_table-->
28
28
  | Operation | litedbmodel | Kysely | Drizzle | TypeORM | Prisma |
29
29
  | --- | --- | --- | --- | --- | --- |
30
- | Find all (limit 100) | 0.70ms | 0.65ms | **0.64ms** 🏆 | 0.72ms | 1.35ms |
31
- | Filter, paginate & sort | **0.58ms** 🏆 | 0.64ms | 0.59ms | 0.66ms | 1.10ms |
32
- | Nested find all (include posts) | **3.64ms** 🏆 | 4.60ms | 4.66ms | 8.34ms | 12.06ms |
33
- | Find first | 0.37ms | **0.32ms** 🏆 | 0.36ms | 0.40ms | 0.59ms |
34
- | Nested find first (include posts) | 0.65ms | 0.61ms | 0.71ms | **0.52ms** 🏆 | 1.06ms |
35
- | Find unique (by email) | **0.29ms** 🏆 | 0.31ms | 0.30ms | 0.32ms | 0.53ms |
36
- | Nested find unique (include posts) | **0.57ms** 🏆 | 0.58ms | 0.59ms | 1.05ms | 0.94ms |
37
- | Create | 0.69ms | **0.68ms** 🏆 | 0.76ms | 0.79ms | 1.01ms |
38
- | Nested create (with post) | **0.90ms** 🏆 | 0.96ms | 1.03ms | 1.22ms | 1.81ms |
39
- | Update | 0.63ms | **0.61ms** 🏆 | 0.66ms | 0.67ms | 1.12ms |
40
- | Nested update (update user + post) | 0.94ms | 1.00ms | **0.92ms** 🏆 | 1.02ms | 2.28ms |
41
- | Upsert | 0.71ms | 0.74ms | **0.66ms** 🏆 | 0.75ms | 2.07ms |
42
- | Nested upsert (user + post) | **1.00ms** 🏆 | **1.00ms** 🏆 | **1.00ms** 🏆 | 1.14ms | 2.27ms |
43
- | Delete | **0.97ms** 🏆 | 1.00ms | 0.98ms | 1.10ms | 1.72ms |
44
- | Create Many (10 records) | 0.77ms | **0.72ms** 🏆 | 0.89ms | 1.00ms | 1.20ms |
45
- | Upsert Many (10 records) | **0.88ms** 🏆 | 0.90ms | 1.03ms | 1.06ms | 11.89ms |
46
- | Update Many (10 different values) | **0.70ms** 🏆 | 2.83ms | 2.75ms | 3.02ms | 5.31ms |
47
- | Nested relations (100→1000→10000) | 25.82ms | 24.65ms | **24.25ms** 🏆 | 80.56ms | 84.10ms |
48
- | Nested relations (composite key, 5 tenants) | 22.41ms | N/A | **16.26ms** 🏆 | 39.25ms | 219.00ms |
30
+ | Find all (limit 100) | **0.48ms** 🏆 | 0.55ms | 0.58ms | 0.64ms | 0.97ms |
31
+ | Filter, paginate & sort | **0.52ms** 🏆 | 0.57ms | 0.60ms | 0.64ms | 0.80ms |
32
+ | Nested find all (include posts) | **2.16ms** 🏆 | 3.07ms | 4.37ms | 5.90ms | 7.37ms |
33
+ | Find first | 0.31ms | 0.32ms | **0.29ms** 🏆 | 0.33ms | 0.49ms |
34
+ | Nested find first (include posts) | 0.51ms | 0.51ms | 0.56ms | **0.47ms** 🏆 | 0.74ms |
35
+ | Find unique (by email) | **0.27ms** 🏆 | **0.27ms** 🏆 | 0.29ms | 0.32ms | 0.44ms |
36
+ | Nested find unique (include posts) | 0.54ms | **0.49ms** 🏆 | 0.54ms | 0.97ms | 0.72ms |
37
+ | Create | 0.70ms | **0.68ms** 🏆 | 0.71ms | 0.76ms | 0.93ms |
38
+ | Nested create (with post) | **0.82ms** 🏆 | 0.89ms | 0.91ms | 1.09ms | 1.43ms |
39
+ | Update | **0.61ms** 🏆 | 0.65ms | 0.66ms | 0.74ms | 1.04ms |
40
+ | Nested update (update user + post) | **0.89ms** 🏆 | 0.95ms | 0.93ms | 1.01ms | 2.07ms |
41
+ | Upsert | 0.65ms | **0.64ms** 🏆 | 0.70ms | 0.73ms | 1.53ms |
42
+ | Nested upsert (user + post) | **0.85ms** 🏆 | 1.09ms | 1.09ms | 1.10ms | 1.89ms |
43
+ | Delete | **0.83ms** 🏆 | 0.95ms | 0.97ms | 1.08ms | 1.20ms |
44
+ | Create Many (10 records) | **0.72ms** 🏆 | 0.75ms | 0.87ms | 0.93ms | 1.05ms |
45
+ | Upsert Many (10 records) | **0.76ms** 🏆 | 0.86ms | 1.08ms | 1.09ms | 9.94ms |
46
+ | Update Many (10 different values) | **0.67ms** 🏆 | 2.73ms | 2.58ms | 2.78ms | 4.39ms |
47
+ | Nested relations (100→1000→10000) | **12.18ms** 🏆 | 16.22ms | 19.34ms | 54.93ms | 60.07ms |
48
+ | Nested relations (composite key, 5 tenants) | 14.62ms | N/A | **14.24ms** 🏆 | 29.21ms | 195.74ms |
49
49
  <!--@embedoc:end-->
50
50
 
51
51
  *All write operations wrapped in transactions for fair comparison across all ORMs.*
@@ -53,26 +53,27 @@ Reference: [Kysely performance comparison article](https://izanami.dev/post/1e3f
53
53
  ### Analysis
54
54
 
55
55
  1. **litedbmodel** - **Fastest in read/write operations** 🏆
56
- - **#1 in Filter/paginate, Nested find all, Find unique, Nested find unique, Nested create, Nested upsert (tie), Delete, Upsert Many, Update Many**
57
- - Update Many with different values: **3.9x - 7.6x faster** than other ORMs
56
+ - **#1 in 13 of 19 ops: Find all, Filter/paginate, Nested find all, Find unique (tie), Nested create, Update, Nested update, Nested upsert, Delete, Create Many, Upsert Many, Update Many, Nested relations single key**
57
+ - Update Many with different values: **3.9x - 6.6x faster** than other ORMs
58
+ - **Nested relations single key: fastest at 12.18ms** (batch-loaded, beats Drizzle's LATERAL JOIN)
58
59
  - Excellent balance of read and write performance
59
60
 
60
61
  2. **Kysely** - **Strong simple query performance**
61
- - **#1 in Find first, Create, Update, Create Many**
62
+ - **#1 in Create, Upsert, Nested find unique**
62
63
  - Minimal abstraction overhead
63
64
  - **Limitation:** Cannot batch load composite FK
64
65
 
65
- 3. **Drizzle** - **Fastest in nested relations** 🏆
66
- - **#1 in Find all, Nested update, Upsert, Nested upsert (tie), Nested relations single key (24ms), Nested composite key (16ms)** using LATERAL JOIN
66
+ 3. **Drizzle** - **Fastest in composite-key nested relations** 🏆
67
+ - **#1 in Find first, Nested composite key (14.24ms)** using LATERAL JOIN
67
68
  - Query API with relations provides excellent performance
68
69
 
69
70
  4. **TypeORM** - Variable performance
70
71
  - **#1 in Nested find first** (JOIN-based approach)
71
- - Decent composite key support (39ms)
72
+ - Composite key support at 29.21ms
72
73
 
73
74
  5. **Prisma** - Convenience over speed
74
- - **Slowest in most operations** (1.5x - 14x slower)
75
- - Composite key nested: 219ms (**13x slower** than Drizzle)
75
+ - **Slowest in most operations** (1.4x - 14x slower)
76
+ - Composite key nested: 195.74ms (**13.7x slower** than Drizzle)
76
77
  - Trade-off: Rich DX features (Prisma Studio, migrations, etc.)
77
78
 
78
79
  ---
@@ -89,36 +90,36 @@ Reference: [Kysely performance comparison article](https://izanami.dev/post/1e3f
89
90
 
90
91
  | ORM | Median | Ratio | Queries | Notes |
91
92
  |-----|--------|-------|---------|-------|
92
- | **Drizzle** 🏆 | **24.25ms** | **1.00x** | 1 | **LATERAL JOIN** |
93
- | Kysely | 24.65ms | 1.02x | 3 | Separate queries |
94
- | litedbmodel | 25.82ms | 1.06x | 3 | Separate queries + sync cache |
95
- | TypeORM | 80.56ms | 3.32x | 2 | JOIN-based |
96
- | Prisma | 84.10ms | 3.47x | 3 | Parameter explosion |
93
+ | **litedbmodel** 🏆 | **12.18ms** | **1.00x** | 3 | Separate queries + sync cache |
94
+ | Kysely | 16.22ms | 1.33x | 3 | Separate queries |
95
+ | Drizzle | 19.34ms | 1.59x | 1 | LATERAL JOIN |
96
+ | TypeORM | 54.93ms | 4.51x | 2 | JOIN-based |
97
+ | Prisma | 60.07ms | 4.93x | 3 | Parameter explosion |
97
98
 
98
99
  ### Composite Key Relations (5 tenants × 100 users)
99
100
 
100
101
  | ORM | Median | Ratio | Queries | Notes |
101
102
  |-----|--------|-------|---------|-------|
102
- | **Drizzle** 🏆 | **16.26ms** | **1.00x** | 1 | **LATERAL JOIN with composite** |
103
- | litedbmodel | 22.41ms | 1.38x | 3 | unnest + JOIN |
104
- | TypeORM | 39.25ms | 2.41x | 2 | Multiple OR conditions |
105
- | Prisma | 219.00ms | 13.47x | 3 | Parameter explosion (2000+ params) |
103
+ | **Drizzle** 🏆 | **14.24ms** | **1.00x** | 1 | **LATERAL JOIN with composite** |
104
+ | litedbmodel | 14.62ms | 1.03x | 3 | unnest + JOIN |
105
+ | TypeORM | 29.21ms | 2.05x | 2 | Multiple OR conditions |
106
+ | Prisma | 195.74ms | 13.75x | 3 | Parameter explosion (2000+ params) |
106
107
  | Kysely | N/A | - | - | Cannot batch composite FK |
107
108
 
108
109
  ### Deep Nested Analysis
109
110
 
110
111
  **Single Key:**
111
- - Drizzle fastest with LATERAL JOIN (24ms)
112
- - Kysely close (25ms) with 3 separate queries
113
- - litedbmodel (26ms, 1.06x) with 3 separate queries
112
+ - **litedbmodel fastest (12.18ms, 1.00x)** with 3 batch-loaded separate queries — beats Drizzle's single-query LATERAL JOIN
113
+ - Kysely 1.33x (16.22ms) with 3 separate queries
114
+ - Drizzle 1.59x (19.34ms) with LATERAL JOIN
114
115
 
115
116
  **Composite Key (multi-tenant):**
116
- - **Drizzle fastest (16ms)** with LATERAL JOIN query API
117
- - litedbmodel 1.38x (22ms) with `unnest + JOIN` approach
118
- - Prisma 13x slower with 2000+ parameters
117
+ - **Drizzle fastest (14.24ms)** with LATERAL JOIN query API
118
+ - litedbmodel 1.03x (14.62ms) with `unnest + JOIN` approach
119
+ - Prisma 13.7x slower with 2000+ parameters
119
120
  - **Kysely cannot batch load composite FK** (would require manual tuple matching)
120
121
 
121
- > **Drizzle advantage:** LATERAL JOIN provides fastest nested relation loading for both single and composite keys when using the query API with relations.
122
+ > **litedbmodel single-key advantage:** batch-loaded separate queries with a synchronous cache now edge out Drizzle's single-query LATERAL JOIN on single-key nested relations, while Drizzle retains the lead on composite-key nesting.
122
123
 
123
124
  ---
124
125
 
@@ -398,9 +399,9 @@ WHERE ( "tenant_id"=$1 AND "user_id"=$2
398
399
 
399
400
  ---
400
401
 
401
- ## Why Drizzle is Fastest (Single Key)
402
+ ## Drizzle's Single-Query LATERAL JOIN (Composite Key)
402
403
 
403
- Drizzle's **standard relation API** uses PostgreSQL's `LATERAL JOIN` with `json_agg()` to fetch all nested data in a single DB round-trip:
404
+ Drizzle's **standard relation API** uses PostgreSQL's `LATERAL JOIN` with `json_agg()` to fetch all nested data in a single DB round-trip. This wins on **composite-key** nested relations (14.24ms), though litedbmodel's batch-loaded separate queries now edge it out on **single-key** nesting (12.18ms vs 19.34ms):
404
405
 
405
406
  > **Note:** This is Drizzle's idiomatic approach via `db.query.*.findMany({ with: {...} })`. Other ORMs can achieve similar results with manual SQL, but Drizzle provides this as a built-in pattern.
406
407
 
@@ -538,11 +539,11 @@ WHERE (tenant_id, user_id) IN (($1,$2),($3,$4),...,($1999,$2000))
538
539
 
539
540
  | Scenario | Best Fit | Notes |
540
541
  |----------|----------|-------|
541
- | Write operations (transactions) | **litedbmodel** | Fastest in Nested create, Delete, Upsert Many, etc. |
542
- | Bulk Update (diff values) | **litedbmodel** | **3.9x - 7.6x faster** than others (single query) |
543
- | Nested find all | **litedbmodel** | Fastest at 3.64ms |
544
- | Nested single key (speed) | Drizzle | 1 query via LATERAL JOIN (24ms) |
545
- | Nested composite key (speed) | Drizzle | 16ms via LATERAL JOIN |
542
+ | Write operations (transactions) | **litedbmodel** | Fastest in Create, Nested create, Nested update, Upsert, Create Many |
543
+ | Bulk Update (diff values) | **litedbmodel** | **3.9x - 6.6x faster** than others (single query) |
544
+ | Nested find all | **litedbmodel** | Fastest at 2.16ms |
545
+ | Nested single key (speed) | **litedbmodel** | Fastest at 12.18ms (batch-loaded, beats LATERAL JOIN) |
546
+ | Nested composite key (speed) | Drizzle | 14.24ms via LATERAL JOIN |
546
547
  | Nested relation SQL quality | **litedbmodel** | Readable + debuggable; stable query patterns (PG) |
547
548
  | Log Analysis / Monitoring | **litedbmodel** | Consistent query patterns |
548
549
  | SQL Fingerprint Stability (PG) | **litedbmodel** | Most predictable in prepared-statement setups |
@@ -550,13 +551,14 @@ WHERE (tenant_id, user_id) IN (($1,$2),($3,$4),...,($1999,$2000))
550
551
  | Data Integrity | **litedbmodel** | Explicit transactions required for writes |
551
552
 
552
553
  **litedbmodel excels at:**
553
- - **Read operations** (Find unique, Nested find unique, Nested find all - all fastest)
554
- - **Write operations** (Nested create, Delete, Upsert Many, Update Many - fastest)
555
- - **Bulk update with different values** (3.9x - 7.6x faster)
554
+ - **Read operations** (Find all, Filter/paginate, Find unique, Nested find unique, Nested find all - all fastest)
555
+ - **Write operations** (Create, Nested create, Nested update, Upsert, Create Many, Update Many - fastest)
556
+ - **Nested relations, single key** (12.18ms - fastest, beats Drizzle's LATERAL JOIN)
557
+ - **Bulk update with different values** (3.9x - 6.6x faster)
556
558
  - **Consistent performance** across all operations
557
559
  - **Data integrity** via required transactions
558
560
 
559
- **vs Prisma:** litedbmodel is **1.5x - 13.5x faster** across operations
561
+ **vs Prisma:** litedbmodel is **1.4x - 13.7x faster** across operations
560
562
  **vs Query Builders:** litedbmodel matches or beats Kysely/Drizzle in most operations
561
563
 
562
564
  > **litedbmodel provides best-in-class performance with safety guarantees:**
@@ -569,6 +571,6 @@ WHERE (tenant_id, user_id) IN (($1,$2),($3,$4),...,($1999,$2000))
569
571
 
570
572
  ---
571
573
 
572
- *Last updated: March 2026*
574
+ *Last updated: July 2026 (litedbmodel v2.0.2)*
573
575
  *Benchmark methodology: Based on [Prisma orm-benchmarks](https://github.com/prisma/orm-benchmarks)*
574
576