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.
- package/dist/decorators.d.ts.map +1 -1
- package/dist/decorators.js +44 -24
- package/dist/decorators.js.map +1 -1
- package/dist/drivers/mysql.d.ts.map +1 -1
- package/dist/drivers/mysql.js +6 -0
- package/dist/drivers/mysql.js.map +1 -1
- package/dist/drivers/postgres.d.ts.map +1 -1
- package/dist/drivers/postgres.js +7 -0
- package/dist/drivers/postgres.js.map +1 -1
- package/dist/drivers/sqlite.d.ts +2 -0
- package/dist/drivers/sqlite.d.ts.map +1 -1
- package/dist/drivers/sqlite.js +37 -2
- package/dist/drivers/sqlite.js.map +1 -1
- package/dist/scp/authoring.d.ts +66 -3
- package/dist/scp/authoring.d.ts.map +1 -1
- package/dist/scp/authoring.js +194 -5
- package/dist/scp/authoring.js.map +1 -1
- package/dist/scp/catalog.d.ts +6 -2
- package/dist/scp/catalog.d.ts.map +1 -1
- package/dist/scp/catalog.js +17 -2
- package/dist/scp/catalog.js.map +1 -1
- package/dist/scp/codegen.d.ts +132 -26
- package/dist/scp/codegen.d.ts.map +1 -1
- package/dist/scp/codegen.js +546 -35
- package/dist/scp/codegen.js.map +1 -1
- package/dist/scp/coltype.d.ts +124 -0
- package/dist/scp/coltype.d.ts.map +1 -0
- package/dist/scp/coltype.js +408 -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/fragment/assemble.d.ts.map +1 -1
- package/dist/scp/fragment/assemble.js +10 -2
- package/dist/scp/fragment/assemble.js.map +1 -1
- package/dist/scp/fragment/compile-pg.js +4 -4
- package/dist/scp/guard.d.ts +1 -1
- package/dist/scp/guard.d.ts.map +1 -1
- package/dist/scp/guard.js +6 -0
- package/dist/scp/guard.js.map +1 -1
- package/dist/scp/index.cjs +10003 -4917
- package/dist/scp/index.d.ts +8 -5
- package/dist/scp/index.d.ts.map +1 -1
- package/dist/scp/index.js +35 -9
- package/dist/scp/index.js.map +1 -1
- package/dist/scp/index.mjs +1343 -213
- package/dist/scp/makesql/authoring-compile.d.ts.map +1 -1
- package/dist/scp/makesql/authoring-compile.js +11 -0
- package/dist/scp/makesql/authoring-compile.js.map +1 -1
- package/dist/scp/makesql/compile-select.d.ts +8 -1
- package/dist/scp/makesql/compile-select.d.ts.map +1 -1
- package/dist/scp/makesql/compile-select.js +1 -1
- package/dist/scp/makesql/compile-select.js.map +1 -1
- package/dist/scp/makesql/index.d.ts +2 -3
- package/dist/scp/makesql/index.d.ts.map +1 -1
- package/dist/scp/makesql/index.js +6 -6
- package/dist/scp/makesql/index.js.map +1 -1
- package/dist/scp/makesql/json-batch.d.ts.map +1 -1
- package/dist/scp/makesql/json-batch.js +6 -1
- package/dist/scp/makesql/json-batch.js.map +1 -1
- package/dist/scp/makesql/outtype.d.ts +99 -0
- package/dist/scp/makesql/outtype.d.ts.map +1 -0
- package/dist/scp/makesql/outtype.js +328 -0
- package/dist/scp/makesql/outtype.js.map +1 -0
- package/dist/scp/makesql/pool-executor.d.ts +70 -0
- package/dist/scp/makesql/pool-executor.d.ts.map +1 -1
- package/dist/scp/makesql/pool-executor.js +73 -5
- package/dist/scp/makesql/pool-executor.js.map +1 -1
- package/dist/scp/makesql/static-bundle.d.ts +41 -30
- package/dist/scp/makesql/static-bundle.d.ts.map +1 -1
- package/dist/scp/makesql/static-bundle.js +351 -131
- package/dist/scp/makesql/static-bundle.js.map +1 -1
- package/dist/scp/makesql/tx.d.ts +1 -1
- package/dist/scp/makesql/tx.d.ts.map +1 -1
- package/dist/scp/makesql/tx.js +48 -3
- package/dist/scp/makesql/tx.js.map +1 -1
- package/dist/scp/makesql/writeouttype.d.ts +65 -0
- package/dist/scp/makesql/writeouttype.d.ts.map +1 -0
- package/dist/scp/makesql/writeouttype.js +194 -0
- package/dist/scp/makesql/writeouttype.js.map +1 -0
- package/dist/scp/relation.d.ts +15 -1
- package/dist/scp/relation.d.ts.map +1 -1
- package/dist/scp/relation.js +61 -2
- package/dist/scp/relation.js.map +1 -1
- package/dist/scp/runtime.d.ts +17 -5
- package/dist/scp/runtime.d.ts.map +1 -1
- package/dist/scp/runtime.js +55 -14
- package/dist/scp/runtime.js.map +1 -1
- package/docs/BENCHMARK.md +58 -56
- package/docs/benchmark-chart.svg +166 -166
- package/docs/proposal/litedbmodel-v2-scp-architecture.md +51 -0
- package/package.json +8 -2
- package/dist/scp/makesql/ir.d.ts +0 -42
- package/dist/scp/makesql/ir.d.ts.map +0 -1
- package/dist/scp/makesql/ir.js +0 -66
- package/dist/scp/makesql/ir.js.map +0 -1
package/dist/scp/runtime.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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) {
|
package/dist/scp/runtime.js.map
CHANGED
|
@@ -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.
|
|
31
|
-
| Filter, paginate & sort | **0.
|
|
32
|
-
| Nested find all (include posts) | **
|
|
33
|
-
| Find first | 0.
|
|
34
|
-
| Nested find first (include posts) | 0.
|
|
35
|
-
| Find unique (by email) | **0.
|
|
36
|
-
| Nested find unique (include posts) | **0.
|
|
37
|
-
| Create | 0.
|
|
38
|
-
| Nested create (with post) | **0.
|
|
39
|
-
| Update |
|
|
40
|
-
| Nested update (update user + post) | 0.
|
|
41
|
-
| Upsert | 0.
|
|
42
|
-
| Nested upsert (user + post) | **
|
|
43
|
-
| Delete | **0.
|
|
44
|
-
| Create Many (10 records) |
|
|
45
|
-
| Upsert Many (10 records) | **0.
|
|
46
|
-
| Update Many (10 different values) | **0.
|
|
47
|
-
| Nested relations (100→1000→10000) |
|
|
48
|
-
| Nested relations (composite key, 5 tenants) |
|
|
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
|
|
57
|
-
- Update Many with different values: **3.9x -
|
|
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
|
|
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
|
|
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
|
-
-
|
|
72
|
+
- Composite key support at 29.21ms
|
|
72
73
|
|
|
73
74
|
5. **Prisma** - Convenience over speed
|
|
74
|
-
- **Slowest in most operations** (1.
|
|
75
|
-
- Composite key nested:
|
|
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
|
-
| **
|
|
93
|
-
| Kysely |
|
|
94
|
-
|
|
|
95
|
-
| TypeORM |
|
|
96
|
-
| Prisma |
|
|
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** 🏆 | **
|
|
103
|
-
| litedbmodel |
|
|
104
|
-
| TypeORM |
|
|
105
|
-
| Prisma |
|
|
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
|
-
-
|
|
112
|
-
- Kysely
|
|
113
|
-
-
|
|
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 (
|
|
117
|
-
- litedbmodel 1.
|
|
118
|
-
- Prisma
|
|
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
|
-
> **
|
|
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
|
-
##
|
|
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,
|
|
542
|
-
| Bulk Update (diff values) | **litedbmodel** | **3.9x -
|
|
543
|
-
| Nested find all | **litedbmodel** | Fastest at
|
|
544
|
-
| Nested single key (speed) |
|
|
545
|
-
| Nested composite key (speed) | Drizzle |
|
|
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,
|
|
555
|
-
- **
|
|
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.
|
|
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:
|
|
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
|
|