litedbmodel 2.2.2 → 2.2.4

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 (180) hide show
  1. package/README.md +2 -1
  2. package/dist/DBModel.d.ts.map +1 -1
  3. package/dist/DBModel.js +3 -0
  4. package/dist/DBModel.js.map +1 -1
  5. package/dist/Middleware.d.ts +19 -2
  6. package/dist/Middleware.d.ts.map +1 -1
  7. package/dist/Middleware.js +1 -0
  8. package/dist/Middleware.js.map +1 -1
  9. package/dist/decorators.d.ts.map +1 -1
  10. package/dist/decorators.js +8 -0
  11. package/dist/decorators.js.map +1 -1
  12. package/dist/drivers/MysqlHelper.d.ts +1 -1
  13. package/dist/drivers/MysqlHelper.d.ts.map +1 -1
  14. package/dist/drivers/MysqlHelper.js.map +1 -1
  15. package/dist/drivers/PostgresHelper.d.ts +1 -1
  16. package/dist/drivers/PostgresHelper.d.ts.map +1 -1
  17. package/dist/drivers/PostgresHelper.js.map +1 -1
  18. package/dist/drivers/SqliteHelper.d.ts +1 -1
  19. package/dist/drivers/SqliteHelper.d.ts.map +1 -1
  20. package/dist/drivers/SqliteHelper.js.map +1 -1
  21. package/dist/index.cjs +105 -74
  22. package/dist/scp/connection-routing.d.ts +38 -1
  23. package/dist/scp/connection-routing.d.ts.map +1 -1
  24. package/dist/scp/connection-routing.js +64 -5
  25. package/dist/scp/connection-routing.js.map +1 -1
  26. package/dist/scp/dbmodel-runtime.d.ts +2 -1
  27. package/dist/scp/dbmodel-runtime.d.ts.map +1 -1
  28. package/dist/scp/dbmodel-runtime.js +2 -1
  29. package/dist/scp/dbmodel-runtime.js.map +1 -1
  30. package/dist/scp/decorator-adapter.d.ts +22 -0
  31. package/dist/scp/decorator-adapter.d.ts.map +1 -1
  32. package/dist/scp/decorator-adapter.js +26 -0
  33. package/dist/scp/decorator-adapter.js.map +1 -1
  34. package/dist/scp/emit/emitter.d.ts +21 -10
  35. package/dist/scp/emit/emitter.d.ts.map +1 -1
  36. package/dist/scp/emit/emitter.js +119 -51
  37. package/dist/scp/emit/emitter.js.map +1 -1
  38. package/dist/scp/emit/endpoint.d.ts +3 -8
  39. package/dist/scp/emit/endpoint.d.ts.map +1 -1
  40. package/dist/scp/exec-context.d.ts +39 -17
  41. package/dist/scp/exec-context.d.ts.map +1 -1
  42. package/dist/scp/exec-context.js +69 -35
  43. package/dist/scp/exec-context.js.map +1 -1
  44. package/dist/scp/grouping.d.ts.map +1 -1
  45. package/dist/scp/grouping.js +0 -0
  46. package/dist/scp/grouping.js.map +1 -1
  47. package/dist/scp/index.cjs +257 -670
  48. package/dist/scp/index.d.ts +6 -11
  49. package/dist/scp/index.d.ts.map +1 -1
  50. package/dist/scp/index.js +10 -28
  51. package/dist/scp/index.js.map +1 -1
  52. package/dist/scp/index.mjs +257 -658
  53. package/dist/scp/leaf-transport.d.ts +127 -39
  54. package/dist/scp/leaf-transport.d.ts.map +1 -1
  55. package/dist/scp/leaf-transport.js +30 -24
  56. package/dist/scp/leaf-transport.js.map +1 -1
  57. package/dist/scp/leaves.d.ts +57 -20
  58. package/dist/scp/leaves.d.ts.map +1 -1
  59. package/dist/scp/leaves.js +224 -65
  60. package/dist/scp/leaves.js.map +1 -1
  61. package/dist/scp/makesql/compile-select.d.ts +28 -1
  62. package/dist/scp/makesql/compile-select.d.ts.map +1 -1
  63. package/dist/scp/makesql/compile-select.js +19 -17
  64. package/dist/scp/makesql/compile-select.js.map +1 -1
  65. package/dist/scp/makesql/index.d.ts +2 -2
  66. package/dist/scp/makesql/index.d.ts.map +1 -1
  67. package/dist/scp/makesql/index.js +4 -6
  68. package/dist/scp/makesql/index.js.map +1 -1
  69. package/dist/scp/makesql/tx.d.ts +43 -89
  70. package/dist/scp/makesql/tx.d.ts.map +1 -1
  71. package/dist/scp/makesql/tx.js +45 -496
  72. package/dist/scp/makesql/tx.js.map +1 -1
  73. package/dist/scp/makesql/writeouttype.d.ts +5 -7
  74. package/dist/scp/makesql/writeouttype.d.ts.map +1 -1
  75. package/dist/scp/makesql/writeouttype.js +13 -19
  76. package/dist/scp/makesql/writeouttype.js.map +1 -1
  77. package/dist/scp/middleware.d.ts +4 -4
  78. package/dist/scp/middleware.d.ts.map +1 -1
  79. package/dist/scp/middleware.js +2 -2
  80. package/dist/scp/middleware.js.map +1 -1
  81. package/dist/scp/relation.d.ts +31 -12
  82. package/dist/scp/relation.d.ts.map +1 -1
  83. package/dist/scp/relation.js +16 -6
  84. package/dist/scp/relation.js.map +1 -1
  85. package/dist/scp/typed-object.d.ts +23 -19
  86. package/dist/scp/typed-object.d.ts.map +1 -1
  87. package/dist/scp/typed-object.js +24 -30
  88. package/dist/scp/typed-object.js.map +1 -1
  89. package/dist/scp/write-bundle.d.ts +21 -70
  90. package/dist/scp/write-bundle.d.ts.map +1 -1
  91. package/dist/scp/write-bundle.js +16 -80
  92. package/dist/scp/write-bundle.js.map +1 -1
  93. package/dist/types.d.ts +12 -0
  94. package/dist/types.d.ts.map +1 -1
  95. package/dist/types.js.map +1 -1
  96. package/docs/BENCHMARK.md +26 -22
  97. package/docs/COMPARISON.md +8 -4
  98. package/docs/api/README.md +1 -1
  99. package/docs/api/classes/Conditions.md +10 -10
  100. package/docs/api/classes/DBHandler.md +17 -17
  101. package/docs/api/classes/DBModel.md +111 -104
  102. package/docs/api/classes/LimitExceededError.md +8 -8
  103. package/docs/api/classes/Middleware.md +18 -18
  104. package/docs/api/classes/SqlRaw.md +6 -6
  105. package/docs/api/classes/SqlRef.md +7 -7
  106. package/docs/api/classes/Values.md +6 -6
  107. package/docs/api/classes/WriteInReadOnlyContextError.md +5 -5
  108. package/docs/api/classes/WriteOutsideTransactionError.md +5 -5
  109. package/docs/api/functions/belongsTo.md +2 -2
  110. package/docs/api/functions/closeAllPools.md +2 -2
  111. package/docs/api/functions/condsToRecord.md +2 -2
  112. package/docs/api/functions/createMiddleware.md +2 -2
  113. package/docs/api/functions/createPostgresDriver.md +2 -2
  114. package/docs/api/functions/createSqliteDriver.md +2 -2
  115. package/docs/api/functions/dbCast.md +3 -3
  116. package/docs/api/functions/dbCastIn.md +2 -2
  117. package/docs/api/functions/dbDynamic.md +3 -3
  118. package/docs/api/functions/dbFalse.md +2 -2
  119. package/docs/api/functions/dbImmediate.md +2 -2
  120. package/docs/api/functions/dbIn.md +2 -2
  121. package/docs/api/functions/dbNotNull.md +2 -2
  122. package/docs/api/functions/dbNow.md +2 -2
  123. package/docs/api/functions/dbNull.md +2 -2
  124. package/docs/api/functions/dbRaw.md +2 -2
  125. package/docs/api/functions/dbTrue.md +2 -2
  126. package/docs/api/functions/dbUuid.md +3 -3
  127. package/docs/api/functions/dbUuidIn.md +2 -2
  128. package/docs/api/functions/formatLocalDate.md +25 -0
  129. package/docs/api/functions/formatUTCDate.md +25 -0
  130. package/docs/api/functions/getDBConfig.md +2 -2
  131. package/docs/api/functions/getDBHandler.md +2 -2
  132. package/docs/api/functions/getTransactionConnection.md +2 -2
  133. package/docs/api/functions/getTransactionContext.md +2 -2
  134. package/docs/api/functions/hasMany.md +2 -2
  135. package/docs/api/functions/hasOne.md +2 -2
  136. package/docs/api/functions/initDBHandler.md +2 -2
  137. package/docs/api/functions/isAnySqlFragment.md +2 -2
  138. package/docs/api/functions/isConnectionError.md +26 -0
  139. package/docs/api/functions/isSqlCondition.md +2 -2
  140. package/docs/api/functions/isSqlFragment.md +2 -2
  141. package/docs/api/functions/isSqlRaw.md +2 -2
  142. package/docs/api/functions/isSqlRef.md +2 -2
  143. package/docs/api/functions/isSqlTypedFragment.md +2 -2
  144. package/docs/api/functions/model.md +6 -42
  145. package/docs/api/functions/parentRef.md +2 -2
  146. package/docs/api/functions/sql.md +7 -7
  147. package/docs/api/globals.md +57 -22
  148. package/docs/api/interfaces/Column.md +31 -31
  149. package/docs/api/interfaces/ColumnOptions.md +5 -4
  150. package/docs/api/interfaces/CreatedMiddlewareClass.md +7 -7
  151. package/docs/api/interfaces/DBConfig.md +13 -11
  152. package/docs/api/interfaces/DBConfigOptions.md +8 -8
  153. package/docs/api/interfaces/DeleteOptions.md +4 -4
  154. package/docs/api/interfaces/InsertOptions.md +8 -8
  155. package/docs/api/interfaces/LimitConfig.md +4 -4
  156. package/docs/api/interfaces/MiddlewareConfig.md +15 -15
  157. package/docs/api/interfaces/ModelOptions.md +8 -7
  158. package/docs/api/interfaces/PkeyResult.md +4 -4
  159. package/docs/api/interfaces/SelectOptions.md +17 -16
  160. package/docs/api/interfaces/SqlCondition.md +6 -6
  161. package/docs/api/interfaces/SqlFragment.md +5 -5
  162. package/docs/api/interfaces/SqlTypedFragment.md +7 -7
  163. package/docs/api/interfaces/TransactionOptions.md +7 -7
  164. package/docs/api/interfaces/UpdateManyOptions.md +4 -4
  165. package/docs/api/interfaces/UpdateOptions.md +4 -4
  166. package/docs/architecture.md +452 -0
  167. package/docs/benchmark-chart.svg +225 -249
  168. package/docs/design/phase-a-execution-context.md +2 -0
  169. package/package.json +20 -5
  170. package/dist/scp/writes.d.ts +0 -251
  171. package/dist/scp/writes.d.ts.map +0 -1
  172. package/dist/scp/writes.js +0 -176
  173. package/dist/scp/writes.js.map +0 -1
  174. package/docs/proposal/contracts-architecture-feasibility.md +0 -328
  175. package/docs/proposal/contracts-architecture.md +0 -579
  176. package/docs/proposal/litedbmodel-v2-scp-architecture.md +0 -433
  177. package/docs/proposal/sql-dynamic-expansion-spec.md +0 -175
  178. package/docs/proposal/v0-coverage-matrix.md +0 -157
  179. package/docs/proposal/v2-completeness-plan.md +0 -90
  180. package/docs/proposal/v2-sql-parity-checklist.md +0 -162
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AA4VH;;;;GAIG;AACH,MAAa,kBAAmB,SAAQ,KAAK;IAEzB;IAKA;IACA;IACA;IACA;IATlB,YACkB,KAAa;IAC7B;;;OAGG;IACa,WAAmB,EACnB,OAA4B,EAC5B,SAAkB,EAClB,YAAqB;QAErC,MAAM,UAAU,GAAG,OAAO,KAAK,MAAM;YACnC,CAAC,CAAC,aAAa,SAAS,IAAI,SAAS,EAAE;YACvC,CAAC,CAAC,aAAa,YAAY,QAAQ,SAAS,IAAI,SAAS,EAAE,CAAC;QAC9D,MAAM,QAAQ,GAAG,OAAO,KAAK,MAAM;YACjC,CAAC,CAAC,aAAa,KAAK,EAAE,CAAE,qDAAqD;YAC7E,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC,CAAK,8DAA8D;QACxF,KAAK,CACH,yBAAyB,UAAU,aAAa,QAAQ,YAAY;YACpE,gBAAgB,KAAK,qDAAqD;YAC1E,6DAA6D,CAC9D,CAAC;QApBc,UAAK,GAAL,KAAK,CAAQ;QAKb,gBAAW,GAAX,WAAW,CAAQ;QACnB,YAAO,GAAP,OAAO,CAAqB;QAC5B,cAAS,GAAT,SAAS,CAAS;QAClB,iBAAY,GAAZ,YAAY,CAAS;QAarC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAzBD,gDAyBC;AAED;;;;GAIG;AACH,MAAa,4BAA6B,SAAQ,KAAK;IAEnC;IACA;IAFlB,YACkB,SAAiB,EACjB,SAAkB;QAElC,KAAK,CACH,oBAAoB,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,2BAA2B;YAC/F,qDAAqD,CACtD,CAAC;QANc,cAAS,GAAT,SAAS,CAAQ;QACjB,cAAS,GAAT,SAAS,CAAS;QAMlC,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAXD,oEAWC;AAED;;;;GAIG;AACH,MAAa,2BAA4B,SAAQ,KAAK;IAElC;IACA;IAFlB,YACkB,SAAiB,EACjB,SAAkB;QAElC,KAAK,CACH,oBAAoB,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,2CAA2C;YAC/G,iDAAiD,CAClD,CAAC;QANc,cAAS,GAAT,SAAS,CAAQ;QACjB,cAAS,GAAT,SAAS,CAAS;QAMlC,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AAXD,kEAWC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAyWH;;;;GAIG;AACH,MAAa,kBAAmB,SAAQ,KAAK;IAEzB;IAKA;IACA;IACA;IACA;IATlB,YACkB,KAAa;IAC7B;;;OAGG;IACa,WAAmB,EACnB,OAA4B,EAC5B,SAAkB,EAClB,YAAqB;QAErC,MAAM,UAAU,GAAG,OAAO,KAAK,MAAM;YACnC,CAAC,CAAC,aAAa,SAAS,IAAI,SAAS,EAAE;YACvC,CAAC,CAAC,aAAa,YAAY,QAAQ,SAAS,IAAI,SAAS,EAAE,CAAC;QAC9D,MAAM,QAAQ,GAAG,OAAO,KAAK,MAAM;YACjC,CAAC,CAAC,aAAa,KAAK,EAAE,CAAE,qDAAqD;YAC7E,CAAC,CAAC,GAAG,WAAW,EAAE,CAAC,CAAK,8DAA8D;QACxF,KAAK,CACH,yBAAyB,UAAU,aAAa,QAAQ,YAAY;YACpE,gBAAgB,KAAK,qDAAqD;YAC1E,6DAA6D,CAC9D,CAAC;QApBc,UAAK,GAAL,KAAK,CAAQ;QAKb,gBAAW,GAAX,WAAW,CAAQ;QACnB,YAAO,GAAP,OAAO,CAAqB;QAC5B,cAAS,GAAT,SAAS,CAAS;QAClB,iBAAY,GAAZ,YAAY,CAAS;QAarC,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;IACnC,CAAC;CACF;AAzBD,gDAyBC;AAED;;;;GAIG;AACH,MAAa,4BAA6B,SAAQ,KAAK;IAEnC;IACA;IAFlB,YACkB,SAAiB,EACjB,SAAkB;QAElC,KAAK,CACH,oBAAoB,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,2BAA2B;YAC/F,qDAAqD,CACtD,CAAC;QANc,cAAS,GAAT,SAAS,CAAQ;QACjB,cAAS,GAAT,SAAS,CAAS;QAMlC,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAXD,oEAWC;AAED;;;;GAIG;AACH,MAAa,2BAA4B,SAAQ,KAAK;IAElC;IACA;IAFlB,YACkB,SAAiB,EACjB,SAAkB;QAElC,KAAK,CACH,oBAAoB,SAAS,IAAI,SAAS,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,2CAA2C;YAC/G,iDAAiD,CAClD,CAAC;QANc,cAAS,GAAT,SAAS,CAAQ;QACjB,cAAS,GAAT,SAAS,CAAS;QAMlC,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AAXD,kEAWC"}
package/docs/BENCHMARK.md CHANGED
@@ -2,7 +2,11 @@
2
2
 
3
3
  Benchmark comparing litedbmodel with Prisma, Kysely, Drizzle, and TypeORM on PostgreSQL.
4
4
 
5
- > **Version:** litedbmodel **2.2.0** · PostgreSQL 16 · Apple Silicon (arm64).
5
+ <!--@embedoc:package_version-->
6
+ **Version:** litedbmodel **2.2.4**
7
+ <!--@embedoc:end-->
8
+
9
+ > Measured on PostgreSQL 16 · Apple Silicon (arm64).
6
10
  > Every table and the chart on this page are **regenerated from `benchmark/results/benchmark-results.csv`**
7
11
  > (`npx embedoc build` for the tables, `npm run chart` for the SVG) — the numbers here are machine-derived,
8
12
  > never hand-edited. litedbmodel's two v2 execution modes (`runtime`, `codegen`) are shown as separate series.
@@ -32,25 +36,25 @@ Reference: [Kysely performance comparison article](https://izanami.dev/post/1e3f
32
36
  <!--@embedoc:benchmark_table-->
33
37
  | Operation | litedbmodel (runtime) | litedbmodel (codegen) | Kysely | Drizzle | TypeORM | Prisma |
34
38
  | --- | --- | --- | --- | --- | --- | --- |
35
- | Find all (limit 100) | **0.42ms** 🏆 | 0.63ms | 0.58ms | 0.55ms | 0.66ms | 1.13ms |
36
- | Filter, paginate & sort | 0.65ms | **0.57ms** 🏆 | **0.57ms** 🏆 | 0.82ms | 0.90ms | 0.86ms |
37
- | Nested find all (include posts) | 2.39ms | **2.22ms** 🏆 | 3.10ms | 2.98ms | 6.28ms | 9.62ms |
38
- | Find first | 0.35ms | 0.33ms | **0.30ms** 🏆 | 0.37ms | 0.36ms | 0.52ms |
39
- | Nested find first (include posts) | 0.61ms | 0.69ms | 0.62ms | 0.70ms | **0.51ms** 🏆 | 1.00ms |
40
- | Find unique (by email) | 0.52ms | 0.33ms | **0.29ms** 🏆 | 0.40ms | 0.44ms | 0.51ms |
41
- | Nested find unique (include posts) | 0.76ms | 0.81ms | **0.68ms** 🏆 | 1.07ms | 1.04ms | 0.94ms |
42
- | Create | 0.77ms | **0.39ms** 🏆 | 0.80ms | 0.93ms | 0.85ms | 1.14ms |
43
- | Nested create (with post) | 1.09ms | **0.98ms** 🏆 | 1.04ms | 1.17ms | 1.26ms | 1.70ms |
44
- | Update | 0.82ms | **0.52ms** 🏆 | 0.67ms | 0.73ms | 0.73ms | 1.15ms |
45
- | Nested update (update user + post) | 0.95ms | 0.96ms | **0.90ms** 🏆 | 1.05ms | 0.99ms | 2.15ms |
46
- | Upsert | 0.76ms | **0.44ms** 🏆 | 0.72ms | 0.74ms | 0.93ms | 1.75ms |
47
- | Nested upsert (user + post) | 1.29ms | **0.99ms** 🏆 | 1.12ms | 1.24ms | 1.32ms | 2.02ms |
48
- | Delete | 1.04ms | **1.01ms** 🏆 | 1.04ms | 1.09ms | 1.29ms | 1.52ms |
49
- | Create Many (10 records) | 0.85ms | **0.41ms** 🏆 | 0.88ms | 1.20ms | 1.02ms | 1.20ms |
50
- | Upsert Many (10 records) | 1.28ms | **0.46ms** 🏆 | 0.77ms | 1.38ms | 1.10ms | 9.75ms |
51
- | Update Many (10 different values) | 1.12ms | **0.47ms** 🏆 | 2.42ms | 2.42ms | 2.49ms | 4.91ms |
52
- | Nested relations (100→1000→10000) | **14.43ms** 🏆 | 18.46ms | 21.11ms | 20.33ms | 74.04ms | 79.61ms |
53
- | Nested relations (composite key) | 27.52ms | **23.97ms** 🏆 | N/A | 74.39ms | 57.46ms | 83.78ms |
39
+ | Find all (limit 100) | **0.48ms** 🏆 | 0.69ms | 0.92ms | 0.58ms | 0.74ms | 1.16ms |
40
+ | Filter, paginate & sort | **0.68ms** 🏆 | **0.69ms** 🏆 | 0.75ms | 0.93ms | 1.00ms | 0.97ms |
41
+ | Nested find all (include posts) | 2.39ms | **2.25ms** 🏆 | 3.09ms | 3.01ms | 6.41ms | 9.61ms |
42
+ | Find first | 0.38ms | 0.39ms | **0.33ms** 🏆 | 0.52ms | 0.52ms | 0.53ms |
43
+ | Nested find first (include posts) | **0.68ms** 🏆 | 0.88ms | 0.86ms | 0.85ms | 0.80ms | 0.98ms |
44
+ | Find unique (by email) | 0.41ms | **0.35ms** 🏆 | 0.43ms | 0.47ms | 0.58ms | 0.61ms |
45
+ | Nested find unique (include posts) | 0.89ms | 0.92ms | **0.81ms** 🏆 | 0.85ms | 1.36ms | 0.92ms |
46
+ | Create | 0.80ms | **0.40ms** 🏆 | 0.89ms | 1.07ms | 0.84ms | 1.03ms |
47
+ | Nested create (with post) | **1.00ms** 🏆 | 1.17ms | 1.01ms | 1.22ms | 1.40ms | 1.77ms |
48
+ | Update | 0.84ms | **0.40ms** 🏆 | 0.89ms | 0.76ms | 0.75ms | 1.20ms |
49
+ | Nested update (update user + post) | 1.22ms | 1.21ms | 1.22ms | 1.16ms | **1.14ms** 🏆 | 2.26ms |
50
+ | Upsert | 1.03ms | **0.42ms** 🏆 | 0.84ms | 1.05ms | 1.15ms | 1.92ms |
51
+ | Nested upsert (user + post) | 1.49ms | 1.23ms | **1.10ms** 🏆 | 1.39ms | 1.29ms | 2.09ms |
52
+ | Delete | 1.24ms | **1.06ms** 🏆 | 1.22ms | 1.28ms | 1.27ms | 1.49ms |
53
+ | Create Many (10 records) | 1.10ms | **0.57ms** 🏆 | 0.94ms | 1.03ms | 1.36ms | 1.19ms |
54
+ | Upsert Many (10 records) | 1.45ms | **0.66ms** 🏆 | 1.07ms | 1.51ms | 1.57ms | 9.64ms |
55
+ | Update Many (10 different values) | 1.20ms | **0.44ms** 🏆 | 2.42ms | 2.42ms | 2.60ms | 4.83ms |
56
+ | Nested relations (100→1000→10000) | **14.83ms** 🏆 | 18.11ms | 20.86ms | 20.51ms | 72.09ms | 82.82ms |
57
+ | Nested relations (composite key) | 29.00ms | **23.26ms** 🏆 | N/A | 78.53ms | 58.94ms | 82.63ms |
54
58
  <!--@embedoc:end-->
55
59
 
56
60
  *All write operations wrapped in transactions for fair comparison across all ORMs.*
@@ -58,7 +62,7 @@ Reference: [Kysely performance comparison article](https://izanami.dev/post/1e3f
58
62
  ### Analysis
59
63
 
60
64
  <!--@embedoc:benchmark_summary-->
61
- litedbmodel is the fastest ORM in **14 of 19** benchmarked operations.
65
+ litedbmodel is the fastest ORM in **15 of 19** benchmarked operations.
62
66
  <!--@embedoc:end-->
63
67
 
64
68
  Every number below comes from the machine-generated table above (regenerated from
@@ -528,6 +532,6 @@ WHERE (tenant_id, user_id) IN (($1,$2),($3,$4),...,($1999,$2000))
528
532
 
529
533
  ---
530
534
 
531
- *Last updated: July 2026 (litedbmodel v2.0.2)*
535
+ *Last updated: July 2026*
532
536
  *Benchmark methodology: Based on [Prisma orm-benchmarks](https://github.com/prisma/orm-benchmarks)*
533
537
 
@@ -2,9 +2,13 @@
2
2
 
3
3
  A detailed comparison of litedbmodel with popular TypeScript/JavaScript ORMs.
4
4
 
5
- > **Benchmark figures:** litedbmodel **2.2.0**. The only performance number on this page is the
6
- > machine-computed win count below; the full per-operation table lives in
7
- > [BENCHMARK.md](./BENCHMARK.md) (regenerated from `benchmark/results/benchmark-results.csv`).
5
+ <!--@embedoc:package_version label="Benchmark figures"-->
6
+ **Benchmark figures:** litedbmodel **2.2.4**
7
+ <!--@embedoc:end-->
8
+
9
+ > The only performance number on this page is the machine-computed win count below; the full
10
+ > per-operation table lives in [BENCHMARK.md](./BENCHMARK.md) (regenerated from
11
+ > `benchmark/results/benchmark-results.csv`).
8
12
 
9
13
  ## Quick Comparison Matrix
10
14
 
@@ -1082,7 +1086,7 @@ For detailed benchmark results comparing litedbmodel with Prisma, Kysely, Drizzl
1082
1086
  ### Summary
1083
1087
 
1084
1088
  <!--@embedoc:benchmark_summary-->
1085
- litedbmodel is the fastest ORM in **14 of 19** benchmarked operations.
1089
+ litedbmodel is the fastest ORM in **15 of 19** benchmarked operations.
1086
1090
  <!--@embedoc:end-->
1087
1091
 
1088
1092
  | Aspect | litedbmodel |
@@ -1,4 +1,4 @@
1
- **litedbmodel v1.0.1**
1
+ **litedbmodel v2.2.4**
2
2
 
3
3
  ***
4
4
 
@@ -1,4 +1,4 @@
1
- [**litedbmodel v1.0.1**](../README.md)
1
+ [**litedbmodel v2.2.4**](../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Class: Conditions\<Model\>
8
8
 
9
- Defined in: Column.ts:628
9
+ Defined in: [Column.ts:628](https://github.com/foo-ogawa/litedbmodel/blob/main/src/Column.ts#L628)
10
10
 
11
11
  Type-safe builder for query conditions.
12
12
  Use array literals for static conditions, builder for dynamic construction.
@@ -47,7 +47,7 @@ if (query.active) where.add(User.is_active, true);
47
47
  new Conditions<Model>(initial?: Conds): Conditions<Model>;
48
48
  ```
49
49
 
50
- Defined in: Column.ts:634
50
+ Defined in: [Column.ts:634](https://github.com/foo-ogawa/litedbmodel/blob/main/src/Column.ts#L634)
51
51
 
52
52
  Create a Conditions builder, optionally with initial conditions.
53
53
 
@@ -71,7 +71,7 @@ Create a Conditions builder, optionally with initial conditions.
71
71
  get length(): number;
72
72
  ```
73
73
 
74
- Defined in: Column.ts:700
74
+ Defined in: [Column.ts:700](https://github.com/foo-ogawa/litedbmodel/blob/main/src/Column.ts#L700)
75
75
 
76
76
  Get the number of conditions.
77
77
 
@@ -87,7 +87,7 @@ Get the number of conditions.
87
87
  add<V>(column: Column<V, Model>, value: V | null | undefined): this;
88
88
  ```
89
89
 
90
- Defined in: Column.ts:643
90
+ Defined in: [Column.ts:643](https://github.com/foo-ogawa/litedbmodel/blob/main/src/Column.ts#L643)
91
91
 
92
92
  Add a type-safe column equality condition.
93
93
 
@@ -116,7 +116,7 @@ Add a type-safe column equality condition.
116
116
  addRaw(condition: string, value?: unknown): this;
117
117
  ```
118
118
 
119
- Defined in: Column.ts:651
119
+ Defined in: [Column.ts:651](https://github.com/foo-ogawa/litedbmodel/blob/main/src/Column.ts#L651)
120
120
 
121
121
  Add a raw condition with template literal (e.g., `${User.age} > ?`).
122
122
 
@@ -141,7 +141,7 @@ Add a raw condition with template literal (e.g., `${User.age} > ?`).
141
141
  addSql<V>(fragment: SqlTypedFragment<V, Model>, value: V): this;
142
142
  ```
143
143
 
144
- Defined in: Column.ts:670
144
+ Defined in: [Column.ts:670](https://github.com/foo-ogawa/litedbmodel/blob/main/src/Column.ts#L670)
145
145
 
146
146
  Add a type-safe sql-tagged condition.
147
147
 
@@ -176,7 +176,7 @@ where.addSql(sql`${User.deleted_at} IS NULL`);
176
176
  addSql(fragment: SqlTypedFragment<any, Model>): this;
177
177
  ```
178
178
 
179
- Defined in: Column.ts:671
179
+ Defined in: [Column.ts:671](https://github.com/foo-ogawa/litedbmodel/blob/main/src/Column.ts#L671)
180
180
 
181
181
  Add a type-safe sql-tagged condition.
182
182
 
@@ -206,7 +206,7 @@ where.addSql(sql`${User.deleted_at} IS NULL`);
206
206
  or(...condGroups: readonly Conds[]): this;
207
207
  ```
208
208
 
209
- Defined in: Column.ts:685
209
+ Defined in: [Column.ts:685](https://github.com/foo-ogawa/litedbmodel/blob/main/src/Column.ts#L685)
210
210
 
211
211
  Add an OR condition group.
212
212
 
@@ -228,7 +228,7 @@ Add an OR condition group.
228
228
  build(): Conds;
229
229
  ```
230
230
 
231
- Defined in: Column.ts:693
231
+ Defined in: [Column.ts:693](https://github.com/foo-ogawa/litedbmodel/blob/main/src/Column.ts#L693)
232
232
 
233
233
  Build the final array for use with find/count/delete.
234
234
 
@@ -1,4 +1,4 @@
1
- [**litedbmodel v1.0.1**](../README.md)
1
+ [**litedbmodel v2.2.4**](../README.md)
2
2
 
3
3
  ***
4
4
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Class: DBHandler
8
8
 
9
- Defined in: DBHandler.ts:174
9
+ Defined in: [DBHandler.ts:179](https://github.com/foo-ogawa/litedbmodel/blob/main/src/DBHandler.ts#L179)
10
10
 
11
11
  Database handler - wraps a driver and provides a unified interface.
12
12
 
@@ -30,7 +30,7 @@ const result = await handler.execute('SELECT * FROM users WHERE id = $1', [1]);
30
30
  new DBHandler(config: DBConfig, options?: DBHandlerOptions): DBHandler;
31
31
  ```
32
32
 
33
- Defined in: DBHandler.ts:180
33
+ Defined in: [DBHandler.ts:185](https://github.com/foo-ogawa/litedbmodel/blob/main/src/DBHandler.ts#L185)
34
34
 
35
35
  #### Parameters
36
36
 
@@ -51,7 +51,7 @@ Defined in: DBHandler.ts:180
51
51
  getDriverType(): "postgres" | "mysql" | "sqlite";
52
52
  ```
53
53
 
54
- Defined in: DBHandler.ts:198
54
+ Defined in: [DBHandler.ts:203](https://github.com/foo-ogawa/litedbmodel/blob/main/src/DBHandler.ts#L203)
55
55
 
56
56
  Get the driver type
57
57
 
@@ -67,7 +67,7 @@ Get the driver type
67
67
  getDriver(): DBDriver;
68
68
  ```
69
69
 
70
- Defined in: DBHandler.ts:205
70
+ Defined in: [DBHandler.ts:210](https://github.com/foo-ogawa/litedbmodel/blob/main/src/DBHandler.ts#L210)
71
71
 
72
72
  Get the underlying driver
73
73
 
@@ -80,10 +80,10 @@ Get the underlying driver
80
80
  ### execute()
81
81
 
82
82
  ```ts
83
- execute(sql: string, params: unknown[]): Promise<QueryResult>;
83
+ execute(sql: string, params?: unknown[]): Promise<QueryResult>;
84
84
  ```
85
85
 
86
- Defined in: DBHandler.ts:212
86
+ Defined in: [DBHandler.ts:217](https://github.com/foo-ogawa/litedbmodel/blob/main/src/DBHandler.ts#L217)
87
87
 
88
88
  Execute a SQL query
89
89
 
@@ -103,10 +103,10 @@ Execute a SQL query
103
103
  ### executeWrite()
104
104
 
105
105
  ```ts
106
- executeWrite(sql: string, params: unknown[]): Promise<QueryResult>;
106
+ executeWrite(sql: string, params?: unknown[]): Promise<QueryResult>;
107
107
  ```
108
108
 
109
- Defined in: DBHandler.ts:222
109
+ Defined in: [DBHandler.ts:227](https://github.com/foo-ogawa/litedbmodel/blob/main/src/DBHandler.ts#L227)
110
110
 
111
111
  Execute a write query (INSERT/UPDATE/DELETE)
112
112
 
@@ -126,10 +126,10 @@ Execute a write query (INSERT/UPDATE/DELETE)
126
126
  ### executeOnWriter()
127
127
 
128
128
  ```ts
129
- executeOnWriter(sql: string, params: unknown[]): Promise<QueryResult>;
129
+ executeOnWriter(sql: string, params?: unknown[]): Promise<QueryResult>;
130
130
  ```
131
131
 
132
- Defined in: DBHandler.ts:232
132
+ Defined in: [DBHandler.ts:237](https://github.com/foo-ogawa/litedbmodel/blob/main/src/DBHandler.ts#L237)
133
133
 
134
134
  Execute a query on writer pool (for withWriter context)
135
135
 
@@ -152,7 +152,7 @@ Execute a query on writer pool (for withWriter context)
152
152
  hasWriterPool(): boolean;
153
153
  ```
154
154
 
155
- Defined in: DBHandler.ts:242
155
+ Defined in: [DBHandler.ts:247](https://github.com/foo-ogawa/litedbmodel/blob/main/src/DBHandler.ts#L247)
156
156
 
157
157
  Check if writer pool is configured
158
158
 
@@ -168,7 +168,7 @@ Check if writer pool is configured
168
168
  getConnection(): Promise<DBConnection>;
169
169
  ```
170
170
 
171
- Defined in: DBHandler.ts:249
171
+ Defined in: [DBHandler.ts:254](https://github.com/foo-ogawa/litedbmodel/blob/main/src/DBHandler.ts#L254)
172
172
 
173
173
  Get a connection from the pool (for transactions)
174
174
 
@@ -184,7 +184,7 @@ Get a connection from the pool (for transactions)
184
184
  withConnection(connection: DBConnection): DBHandler;
185
185
  ```
186
186
 
187
- Defined in: DBHandler.ts:256
187
+ Defined in: [DBHandler.ts:261](https://github.com/foo-ogawa/litedbmodel/blob/main/src/DBHandler.ts#L261)
188
188
 
189
189
  Create handler with specific connection (for transaction)
190
190
 
@@ -206,7 +206,7 @@ Create handler with specific connection (for transaction)
206
206
  close(): Promise<void>;
207
207
  ```
208
208
 
209
- Defined in: DBHandler.ts:268
209
+ Defined in: [DBHandler.ts:273](https://github.com/foo-ogawa/litedbmodel/blob/main/src/DBHandler.ts#L273)
210
210
 
211
211
  Close all connections
212
212
 
@@ -222,7 +222,7 @@ Close all connections
222
222
  setLogger(logger: Logger): void;
223
223
  ```
224
224
 
225
- Defined in: DBHandler.ts:275
225
+ Defined in: [DBHandler.ts:280](https://github.com/foo-ogawa/litedbmodel/blob/main/src/DBHandler.ts#L280)
226
226
 
227
227
  Set logger
228
228
 
@@ -244,7 +244,7 @@ Set logger
244
244
  getPool(): unknown;
245
245
  ```
246
246
 
247
- Defined in: DBHandler.ts:284
247
+ Defined in: [DBHandler.ts:289](https://github.com/foo-ogawa/litedbmodel/blob/main/src/DBHandler.ts#L289)
248
248
 
249
249
  Get the underlying PostgreSQL pool (for backward compatibility)
250
250