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
@@ -19,7 +19,7 @@
19
19
 
20
20
  <!-- Title -->
21
21
  <text x="385" y="25" text-anchor="middle" class="title">ORM Benchmark Comparison</text>
22
- <text x="385" y="45" text-anchor="middle" class="subtitle">Relative speed (litedbmodel = 1.0, lower is faster)</text>
22
+ <text x="385" y="45" text-anchor="middle" class="subtitle">Relative speed (litedbmodel (runtime) = 1.0, lower is faster)</text>
23
23
 
24
24
  <!-- Chart area -->
25
25
  <g transform="translate(220, 60)">
@@ -47,279 +47,255 @@
47
47
  <text x="405" y="2289" text-anchor="start" class="axis-label" fill="#dc2626">5+</text>
48
48
  <line x1="80" y1="-5" x2="80" y2="2279" class="baseline" />
49
49
  <text x="-10" y="48" text-anchor="end" dominant-baseline="middle" class="op-label">Find all (limit 100)</text>
50
- <rect x="0" y="0" width="33.599999999999994" height="12" fill="#3b82f6" rx="2" />
51
- <text x="38.599999999999994" y="7" dominant-baseline="middle" class="value-label">0.42x (0.42ms)</text>
52
- <rect x="0" y="16" width="50.4" height="12" fill="#0ea5e9" rx="2" />
53
- <text x="55.4" y="23" dominant-baseline="middle" class="value-label">0.63x (0.63ms)</text>
54
- <rect x="0" y="32" width="46.4" height="12" fill="#22c55e" rx="2" />
55
- <text x="51.4" y="39" dominant-baseline="middle" class="value-label">0.58x (0.58ms)</text>
56
- <rect x="0" y="48" width="44.00000000000001" height="12" fill="#f59e0b" rx="2" />
57
- <text x="49.00000000000001" y="55" dominant-baseline="middle" class="value-label">0.55x (0.55ms)</text>
58
- <rect x="0" y="64" width="52.800000000000004" height="12" fill="#ef4444" rx="2" />
59
- <text x="57.800000000000004" y="71" dominant-baseline="middle" class="value-label">0.66x (0.66ms)</text>
60
- <rect x="0" y="80" width="90.39999999999999" height="12" fill="#8b5cf6" rx="2" />
61
- <text x="95.39999999999999" y="87" dominant-baseline="middle" class="value-label">1.13x (1.13ms)</text>
50
+ <rect x="0" y="0" width="80" height="12" fill="#3b82f6" rx="2" />
51
+ <text x="85" y="7" dominant-baseline="middle" class="value-label">1.00x (0.48ms)</text>
52
+ <rect x="0" y="16" width="114.99999999999999" height="12" fill="#0ea5e9" rx="2" />
53
+ <text x="119.99999999999999" y="23" dominant-baseline="middle" class="value-label">1.44x (0.69ms)</text>
54
+ <rect x="0" y="32" width="153.33333333333334" height="12" fill="#22c55e" rx="2" />
55
+ <text x="158.33333333333334" y="39" dominant-baseline="middle" class="value-label">1.92x (0.92ms)</text>
56
+ <rect x="0" y="48" width="96.66666666666666" height="12" fill="#f59e0b" rx="2" />
57
+ <text x="101.66666666666666" y="55" dominant-baseline="middle" class="value-label">1.21x (0.58ms)</text>
58
+ <rect x="0" y="64" width="123.33333333333334" height="12" fill="#ef4444" rx="2" />
59
+ <text x="128.33333333333334" y="71" dominant-baseline="middle" class="value-label">1.54x (0.74ms)</text>
60
+ <rect x="0" y="80" width="193.33333333333331" height="12" fill="#8b5cf6" rx="2" />
61
+ <text x="198.33333333333331" y="87" dominant-baseline="middle" class="value-label">2.42x (1.16ms)</text>
62
62
  <text x="-10" y="169" text-anchor="end" dominant-baseline="middle" class="op-label">Filter, paginate &amp; sort</text>
63
- <rect x="0" y="121" width="52" height="12" fill="#3b82f6" rx="2" />
64
- <text x="57" y="128" dominant-baseline="middle" class="value-label">0.65x (0.65ms)</text>
65
- <rect x="0" y="137" width="45.599999999999994" height="12" fill="#0ea5e9" rx="2" />
66
- <text x="50.599999999999994" y="144" dominant-baseline="middle" class="value-label">0.57x (0.57ms)</text>
67
- <rect x="0" y="153" width="45.599999999999994" height="12" fill="#22c55e" rx="2" />
68
- <text x="50.599999999999994" y="160" dominant-baseline="middle" class="value-label">0.57x (0.57ms)</text>
69
- <rect x="0" y="169" width="65.6" height="12" fill="#f59e0b" rx="2" />
70
- <text x="70.6" y="176" dominant-baseline="middle" class="value-label">0.82x (0.82ms)</text>
71
- <rect x="0" y="185" width="72" height="12" fill="#ef4444" rx="2" />
72
- <text x="77" y="192" dominant-baseline="middle" class="value-label">0.90x (0.90ms)</text>
73
- <rect x="0" y="201" width="68.8" height="12" fill="#8b5cf6" rx="2" />
74
- <text x="73.8" y="208" dominant-baseline="middle" class="value-label">0.86x (0.86ms)</text>
63
+ <rect x="0" y="121" width="80" height="12" fill="#3b82f6" rx="2" />
64
+ <text x="85" y="128" dominant-baseline="middle" class="value-label">1.00x (0.68ms)</text>
65
+ <rect x="0" y="137" width="81.17647058823529" height="12" fill="#0ea5e9" rx="2" />
66
+ <text x="86.17647058823529" y="144" dominant-baseline="middle" class="value-label">1.01x (0.69ms)</text>
67
+ <rect x="0" y="153" width="88.23529411764704" height="12" fill="#22c55e" rx="2" />
68
+ <text x="93.23529411764704" y="160" dominant-baseline="middle" class="value-label">1.10x (0.75ms)</text>
69
+ <rect x="0" y="169" width="109.41176470588236" height="12" fill="#f59e0b" rx="2" />
70
+ <text x="114.41176470588236" y="176" dominant-baseline="middle" class="value-label">1.37x (0.93ms)</text>
71
+ <rect x="0" y="185" width="117.64705882352939" height="12" fill="#ef4444" rx="2" />
72
+ <text x="122.64705882352939" y="192" dominant-baseline="middle" class="value-label">1.47x (1.00ms)</text>
73
+ <rect x="0" y="201" width="114.11764705882352" height="12" fill="#8b5cf6" rx="2" />
74
+ <text x="119.11764705882352" y="208" dominant-baseline="middle" class="value-label">1.43x (0.97ms)</text>
75
75
  <text x="-10" y="290" text-anchor="end" dominant-baseline="middle" class="op-label">Nested find all (include posts)</text>
76
- <rect x="0" y="242" width="191.20000000000002" height="12" fill="#3b82f6" rx="2" />
77
- <text x="196.20000000000002" y="249" dominant-baseline="middle" class="value-label">2.39x (2.39ms)</text>
78
- <rect x="0" y="258" width="177.60000000000002" height="12" fill="#0ea5e9" rx="2" />
79
- <text x="182.60000000000002" y="265" dominant-baseline="middle" class="value-label">2.22x (2.22ms)</text>
80
- <rect x="0" y="274" width="248" height="12" fill="#22c55e" rx="2" />
81
- <text x="253" y="281" dominant-baseline="middle" class="value-label">3.10x (3.10ms)</text>
82
- <rect x="0" y="290" width="238.39999999999998" height="12" fill="#f59e0b" rx="2" />
83
- <text x="243.39999999999998" y="297" dominant-baseline="middle" class="value-label">2.98x (2.98ms)</text>
84
- <rect x="0" y="306" width="400" height="12" fill="#ef4444" rx="2" />
85
- <line x1="397" y1="306" x2="400" y2="318" class="overflow-line" />
86
- <line x1="394" y1="306" x2="397" y2="318" class="overflow-line" />
87
- <text x="405" y="313" dominant-baseline="middle" class="value-overflow">⚠️ 6.28x (6.28ms)</text>
88
- <rect x="0" y="322" width="400" height="12" fill="#8b5cf6" rx="2" />
89
- <line x1="397" y1="322" x2="400" y2="334" class="overflow-line" />
90
- <line x1="394" y1="322" x2="397" y2="334" class="overflow-line" />
91
- <text x="405" y="329" dominant-baseline="middle" class="value-overflow">⚠️ 9.62x (9.62ms)</text>
76
+ <rect x="0" y="242" width="80" height="12" fill="#3b82f6" rx="2" />
77
+ <text x="85" y="249" dominant-baseline="middle" class="value-label">1.00x (2.39ms)</text>
78
+ <rect x="0" y="258" width="75.31380753138075" height="12" fill="#0ea5e9" rx="2" />
79
+ <text x="80.31380753138075" y="265" dominant-baseline="middle" class="value-label">0.94x (2.25ms)</text>
80
+ <rect x="0" y="274" width="103.43096234309621" height="12" fill="#22c55e" rx="2" />
81
+ <text x="108.43096234309621" y="281" dominant-baseline="middle" class="value-label">1.29x (3.09ms)</text>
82
+ <rect x="0" y="290" width="100.75313807531381" height="12" fill="#f59e0b" rx="2" />
83
+ <text x="105.75313807531381" y="297" dominant-baseline="middle" class="value-label">1.26x (3.01ms)</text>
84
+ <rect x="0" y="306" width="214.56066945606693" height="12" fill="#ef4444" rx="2" />
85
+ <text x="219.56066945606693" y="313" dominant-baseline="middle" class="value-label">2.68x (6.41ms)</text>
86
+ <rect x="0" y="322" width="321.673640167364" height="12" fill="#8b5cf6" rx="2" />
87
+ <text x="326.673640167364" y="329" dominant-baseline="middle" class="value-label">4.02x (9.61ms)</text>
92
88
  <text x="-10" y="411" text-anchor="end" dominant-baseline="middle" class="op-label">Find first</text>
93
- <rect x="0" y="363" width="27.999999999999996" height="12" fill="#3b82f6" rx="2" />
94
- <text x="33" y="370" dominant-baseline="middle" class="value-label">0.35x (0.35ms)</text>
95
- <rect x="0" y="379" width="26.400000000000002" height="12" fill="#0ea5e9" rx="2" />
96
- <text x="31.400000000000002" y="386" dominant-baseline="middle" class="value-label">0.33x (0.33ms)</text>
97
- <rect x="0" y="395" width="24" height="12" fill="#22c55e" rx="2" />
98
- <text x="29" y="402" dominant-baseline="middle" class="value-label">0.30x (0.30ms)</text>
99
- <rect x="0" y="411" width="29.599999999999998" height="12" fill="#f59e0b" rx="2" />
100
- <text x="34.599999999999994" y="418" dominant-baseline="middle" class="value-label">0.37x (0.37ms)</text>
101
- <rect x="0" y="427" width="28.799999999999997" height="12" fill="#ef4444" rx="2" />
102
- <text x="33.8" y="434" dominant-baseline="middle" class="value-label">0.36x (0.36ms)</text>
103
- <rect x="0" y="443" width="41.6" height="12" fill="#8b5cf6" rx="2" />
104
- <text x="46.6" y="450" dominant-baseline="middle" class="value-label">0.52x (0.52ms)</text>
89
+ <rect x="0" y="363" width="80" height="12" fill="#3b82f6" rx="2" />
90
+ <text x="85" y="370" dominant-baseline="middle" class="value-label">1.00x (0.38ms)</text>
91
+ <rect x="0" y="379" width="82.10526315789475" height="12" fill="#0ea5e9" rx="2" />
92
+ <text x="87.10526315789475" y="386" dominant-baseline="middle" class="value-label">1.03x (0.39ms)</text>
93
+ <rect x="0" y="395" width="69.47368421052632" height="12" fill="#22c55e" rx="2" />
94
+ <text x="74.47368421052632" y="402" dominant-baseline="middle" class="value-label">0.87x (0.33ms)</text>
95
+ <rect x="0" y="411" width="109.47368421052633" height="12" fill="#f59e0b" rx="2" />
96
+ <text x="114.47368421052633" y="418" dominant-baseline="middle" class="value-label">1.37x (0.52ms)</text>
97
+ <rect x="0" y="427" width="109.47368421052633" height="12" fill="#ef4444" rx="2" />
98
+ <text x="114.47368421052633" y="434" dominant-baseline="middle" class="value-label">1.37x (0.52ms)</text>
99
+ <rect x="0" y="443" width="111.57894736842107" height="12" fill="#8b5cf6" rx="2" />
100
+ <text x="116.57894736842107" y="450" dominant-baseline="middle" class="value-label">1.39x (0.53ms)</text>
105
101
  <text x="-10" y="532" text-anchor="end" dominant-baseline="middle" class="op-label">Nested find first (include posts)</text>
106
- <rect x="0" y="484" width="48.8" height="12" fill="#3b82f6" rx="2" />
107
- <text x="53.8" y="491" dominant-baseline="middle" class="value-label">0.61x (0.61ms)</text>
108
- <rect x="0" y="500" width="55.199999999999996" height="12" fill="#0ea5e9" rx="2" />
109
- <text x="60.199999999999996" y="507" dominant-baseline="middle" class="value-label">0.69x (0.69ms)</text>
110
- <rect x="0" y="516" width="49.6" height="12" fill="#22c55e" rx="2" />
111
- <text x="54.6" y="523" dominant-baseline="middle" class="value-label">0.62x (0.62ms)</text>
112
- <rect x="0" y="532" width="55.99999999999999" height="12" fill="#f59e0b" rx="2" />
113
- <text x="60.99999999999999" y="539" dominant-baseline="middle" class="value-label">0.70x (0.70ms)</text>
114
- <rect x="0" y="548" width="40.800000000000004" height="12" fill="#ef4444" rx="2" />
115
- <text x="45.800000000000004" y="555" dominant-baseline="middle" class="value-label">0.51x (0.51ms)</text>
116
- <rect x="0" y="564" width="80" height="12" fill="#8b5cf6" rx="2" />
117
- <text x="85" y="571" dominant-baseline="middle" class="value-label">1.00x (1.00ms)</text>
102
+ <rect x="0" y="484" width="80" height="12" fill="#3b82f6" rx="2" />
103
+ <text x="85" y="491" dominant-baseline="middle" class="value-label">1.00x (0.68ms)</text>
104
+ <rect x="0" y="500" width="103.52941176470587" height="12" fill="#0ea5e9" rx="2" />
105
+ <text x="108.52941176470587" y="507" dominant-baseline="middle" class="value-label">1.29x (0.88ms)</text>
106
+ <rect x="0" y="516" width="101.17647058823529" height="12" fill="#22c55e" rx="2" />
107
+ <text x="106.17647058823529" y="523" dominant-baseline="middle" class="value-label">1.26x (0.86ms)</text>
108
+ <rect x="0" y="532" width="99.99999999999997" height="12" fill="#f59e0b" rx="2" />
109
+ <text x="104.99999999999997" y="539" dominant-baseline="middle" class="value-label">1.25x (0.85ms)</text>
110
+ <rect x="0" y="548" width="94.11764705882352" height="12" fill="#ef4444" rx="2" />
111
+ <text x="99.11764705882352" y="555" dominant-baseline="middle" class="value-label">1.18x (0.80ms)</text>
112
+ <rect x="0" y="564" width="115.29411764705881" height="12" fill="#8b5cf6" rx="2" />
113
+ <text x="120.29411764705881" y="571" dominant-baseline="middle" class="value-label">1.44x (0.98ms)</text>
118
114
  <text x="-10" y="653" text-anchor="end" dominant-baseline="middle" class="op-label">Find unique (by email)</text>
119
- <rect x="0" y="605" width="41.6" height="12" fill="#3b82f6" rx="2" />
120
- <text x="46.6" y="612" dominant-baseline="middle" class="value-label">0.52x (0.52ms)</text>
121
- <rect x="0" y="621" width="26.400000000000002" height="12" fill="#0ea5e9" rx="2" />
122
- <text x="31.400000000000002" y="628" dominant-baseline="middle" class="value-label">0.33x (0.33ms)</text>
123
- <rect x="0" y="637" width="23.2" height="12" fill="#22c55e" rx="2" />
124
- <text x="28.2" y="644" dominant-baseline="middle" class="value-label">0.29x (0.29ms)</text>
125
- <rect x="0" y="653" width="32" height="12" fill="#f59e0b" rx="2" />
126
- <text x="37" y="660" dominant-baseline="middle" class="value-label">0.40x (0.40ms)</text>
127
- <rect x="0" y="669" width="35.199999999999996" height="12" fill="#ef4444" rx="2" />
128
- <text x="40.199999999999996" y="676" dominant-baseline="middle" class="value-label">0.44x (0.44ms)</text>
129
- <rect x="0" y="685" width="40.800000000000004" height="12" fill="#8b5cf6" rx="2" />
130
- <text x="45.800000000000004" y="692" dominant-baseline="middle" class="value-label">0.51x (0.51ms)</text>
115
+ <rect x="0" y="605" width="80" height="12" fill="#3b82f6" rx="2" />
116
+ <text x="85" y="612" dominant-baseline="middle" class="value-label">1.00x (0.41ms)</text>
117
+ <rect x="0" y="621" width="68.29268292682926" height="12" fill="#0ea5e9" rx="2" />
118
+ <text x="73.29268292682926" y="628" dominant-baseline="middle" class="value-label">0.85x (0.35ms)</text>
119
+ <rect x="0" y="637" width="83.90243902439025" height="12" fill="#22c55e" rx="2" />
120
+ <text x="88.90243902439025" y="644" dominant-baseline="middle" class="value-label">1.05x (0.43ms)</text>
121
+ <rect x="0" y="653" width="91.70731707317073" height="12" fill="#f59e0b" rx="2" />
122
+ <text x="96.70731707317073" y="660" dominant-baseline="middle" class="value-label">1.15x (0.47ms)</text>
123
+ <rect x="0" y="669" width="113.17073170731706" height="12" fill="#ef4444" rx="2" />
124
+ <text x="118.17073170731706" y="676" dominant-baseline="middle" class="value-label">1.41x (0.58ms)</text>
125
+ <rect x="0" y="685" width="119.02439024390243" height="12" fill="#8b5cf6" rx="2" />
126
+ <text x="124.02439024390243" y="692" dominant-baseline="middle" class="value-label">1.49x (0.61ms)</text>
131
127
  <text x="-10" y="774" text-anchor="end" dominant-baseline="middle" class="op-label">Nested find unique (include posts)</text>
132
- <rect x="0" y="726" width="60.8" height="12" fill="#3b82f6" rx="2" />
133
- <text x="65.8" y="733" dominant-baseline="middle" class="value-label">0.76x (0.76ms)</text>
134
- <rect x="0" y="742" width="64.8" height="12" fill="#0ea5e9" rx="2" />
135
- <text x="69.8" y="749" dominant-baseline="middle" class="value-label">0.81x (0.81ms)</text>
136
- <rect x="0" y="758" width="54.400000000000006" height="12" fill="#22c55e" rx="2" />
137
- <text x="59.400000000000006" y="765" dominant-baseline="middle" class="value-label">0.68x (0.68ms)</text>
138
- <rect x="0" y="774" width="85.60000000000001" height="12" fill="#f59e0b" rx="2" />
139
- <text x="90.60000000000001" y="781" dominant-baseline="middle" class="value-label">1.07x (1.07ms)</text>
140
- <rect x="0" y="790" width="83.2" height="12" fill="#ef4444" rx="2" />
141
- <text x="88.2" y="797" dominant-baseline="middle" class="value-label">1.04x (1.04ms)</text>
142
- <rect x="0" y="806" width="75.2" height="12" fill="#8b5cf6" rx="2" />
143
- <text x="80.2" y="813" dominant-baseline="middle" class="value-label">0.94x (0.94ms)</text>
128
+ <rect x="0" y="726" width="80" height="12" fill="#3b82f6" rx="2" />
129
+ <text x="85" y="733" dominant-baseline="middle" class="value-label">1.00x (0.89ms)</text>
130
+ <rect x="0" y="742" width="82.69662921348315" height="12" fill="#0ea5e9" rx="2" />
131
+ <text x="87.69662921348315" y="749" dominant-baseline="middle" class="value-label">1.03x (0.92ms)</text>
132
+ <rect x="0" y="758" width="72.80898876404494" height="12" fill="#22c55e" rx="2" />
133
+ <text x="77.80898876404494" y="765" dominant-baseline="middle" class="value-label">0.91x (0.81ms)</text>
134
+ <rect x="0" y="774" width="76.40449438202246" height="12" fill="#f59e0b" rx="2" />
135
+ <text x="81.40449438202246" y="781" dominant-baseline="middle" class="value-label">0.96x (0.85ms)</text>
136
+ <rect x="0" y="790" width="122.24719101123598" height="12" fill="#ef4444" rx="2" />
137
+ <text x="127.24719101123598" y="797" dominant-baseline="middle" class="value-label">1.53x (1.36ms)</text>
138
+ <rect x="0" y="806" width="82.69662921348315" height="12" fill="#8b5cf6" rx="2" />
139
+ <text x="87.69662921348315" y="813" dominant-baseline="middle" class="value-label">1.03x (0.92ms)</text>
144
140
  <text x="-10" y="895" text-anchor="end" dominant-baseline="middle" class="op-label">Create</text>
145
- <rect x="0" y="847" width="61.6" height="12" fill="#3b82f6" rx="2" />
146
- <text x="66.6" y="854" dominant-baseline="middle" class="value-label">0.77x (0.77ms)</text>
147
- <rect x="0" y="863" width="31.2" height="12" fill="#0ea5e9" rx="2" />
148
- <text x="36.2" y="870" dominant-baseline="middle" class="value-label">0.39x (0.39ms)</text>
149
- <rect x="0" y="879" width="64" height="12" fill="#22c55e" rx="2" />
150
- <text x="69" y="886" dominant-baseline="middle" class="value-label">0.80x (0.80ms)</text>
151
- <rect x="0" y="895" width="74.4" height="12" fill="#f59e0b" rx="2" />
152
- <text x="79.4" y="902" dominant-baseline="middle" class="value-label">0.93x (0.93ms)</text>
153
- <rect x="0" y="911" width="68" height="12" fill="#ef4444" rx="2" />
154
- <text x="73" y="918" dominant-baseline="middle" class="value-label">0.85x (0.85ms)</text>
155
- <rect x="0" y="927" width="91.19999999999999" height="12" fill="#8b5cf6" rx="2" />
156
- <text x="96.19999999999999" y="934" dominant-baseline="middle" class="value-label">1.14x (1.14ms)</text>
141
+ <rect x="0" y="847" width="80" height="12" fill="#3b82f6" rx="2" />
142
+ <text x="85" y="854" dominant-baseline="middle" class="value-label">1.00x (0.80ms)</text>
143
+ <rect x="0" y="863" width="40" height="12" fill="#0ea5e9" rx="2" />
144
+ <text x="45" y="870" dominant-baseline="middle" class="value-label">0.50x (0.40ms)</text>
145
+ <rect x="0" y="879" width="89" height="12" fill="#22c55e" rx="2" />
146
+ <text x="94" y="886" dominant-baseline="middle" class="value-label">1.11x (0.89ms)</text>
147
+ <rect x="0" y="895" width="106.99999999999999" height="12" fill="#f59e0b" rx="2" />
148
+ <text x="111.99999999999999" y="902" dominant-baseline="middle" class="value-label">1.34x (1.07ms)</text>
149
+ <rect x="0" y="911" width="83.99999999999999" height="12" fill="#ef4444" rx="2" />
150
+ <text x="88.99999999999999" y="918" dominant-baseline="middle" class="value-label">1.05x (0.84ms)</text>
151
+ <rect x="0" y="927" width="102.99999999999999" height="12" fill="#8b5cf6" rx="2" />
152
+ <text x="107.99999999999999" y="934" dominant-baseline="middle" class="value-label">1.29x (1.03ms)</text>
157
153
  <text x="-10" y="1016" text-anchor="end" dominant-baseline="middle" class="op-label">Nested create (with post)</text>
158
- <rect x="0" y="968" width="87.20000000000002" height="12" fill="#3b82f6" rx="2" />
159
- <text x="92.20000000000002" y="975" dominant-baseline="middle" class="value-label">1.09x (1.09ms)</text>
160
- <rect x="0" y="984" width="78.4" height="12" fill="#0ea5e9" rx="2" />
161
- <text x="83.4" y="991" dominant-baseline="middle" class="value-label">0.98x (0.98ms)</text>
162
- <rect x="0" y="1000" width="83.2" height="12" fill="#22c55e" rx="2" />
163
- <text x="88.2" y="1007" dominant-baseline="middle" class="value-label">1.04x (1.04ms)</text>
164
- <rect x="0" y="1016" width="93.6" height="12" fill="#f59e0b" rx="2" />
165
- <text x="98.6" y="1023" dominant-baseline="middle" class="value-label">1.17x (1.17ms)</text>
166
- <rect x="0" y="1032" width="100.8" height="12" fill="#ef4444" rx="2" />
167
- <text x="105.8" y="1039" dominant-baseline="middle" class="value-label">1.26x (1.26ms)</text>
168
- <rect x="0" y="1048" width="136" height="12" fill="#8b5cf6" rx="2" />
169
- <text x="141" y="1055" dominant-baseline="middle" class="value-label">1.70x (1.70ms)</text>
154
+ <rect x="0" y="968" width="80" height="12" fill="#3b82f6" rx="2" />
155
+ <text x="85" y="975" dominant-baseline="middle" class="value-label">1.00x (1.00ms)</text>
156
+ <rect x="0" y="984" width="93.6" height="12" fill="#0ea5e9" rx="2" />
157
+ <text x="98.6" y="991" dominant-baseline="middle" class="value-label">1.17x (1.17ms)</text>
158
+ <rect x="0" y="1000" width="80.80000000000001" height="12" fill="#22c55e" rx="2" />
159
+ <text x="85.80000000000001" y="1007" dominant-baseline="middle" class="value-label">1.01x (1.01ms)</text>
160
+ <rect x="0" y="1016" width="97.6" height="12" fill="#f59e0b" rx="2" />
161
+ <text x="102.6" y="1023" dominant-baseline="middle" class="value-label">1.22x (1.22ms)</text>
162
+ <rect x="0" y="1032" width="111.99999999999999" height="12" fill="#ef4444" rx="2" />
163
+ <text x="116.99999999999999" y="1039" dominant-baseline="middle" class="value-label">1.40x (1.40ms)</text>
164
+ <rect x="0" y="1048" width="141.6" height="12" fill="#8b5cf6" rx="2" />
165
+ <text x="146.6" y="1055" dominant-baseline="middle" class="value-label">1.77x (1.77ms)</text>
170
166
  <text x="-10" y="1137" text-anchor="end" dominant-baseline="middle" class="op-label">Update</text>
171
- <rect x="0" y="1089" width="65.6" height="12" fill="#3b82f6" rx="2" />
172
- <text x="70.6" y="1096" dominant-baseline="middle" class="value-label">0.82x (0.82ms)</text>
173
- <rect x="0" y="1105" width="41.6" height="12" fill="#0ea5e9" rx="2" />
174
- <text x="46.6" y="1112" dominant-baseline="middle" class="value-label">0.52x (0.52ms)</text>
175
- <rect x="0" y="1121" width="53.6" height="12" fill="#22c55e" rx="2" />
176
- <text x="58.6" y="1128" dominant-baseline="middle" class="value-label">0.67x (0.67ms)</text>
177
- <rect x="0" y="1137" width="58.4" height="12" fill="#f59e0b" rx="2" />
178
- <text x="63.4" y="1144" dominant-baseline="middle" class="value-label">0.73x (0.73ms)</text>
179
- <rect x="0" y="1153" width="58.4" height="12" fill="#ef4444" rx="2" />
180
- <text x="63.4" y="1160" dominant-baseline="middle" class="value-label">0.73x (0.73ms)</text>
181
- <rect x="0" y="1169" width="92" height="12" fill="#8b5cf6" rx="2" />
182
- <text x="97" y="1176" dominant-baseline="middle" class="value-label">1.15x (1.15ms)</text>
167
+ <rect x="0" y="1089" width="80" height="12" fill="#3b82f6" rx="2" />
168
+ <text x="85" y="1096" dominant-baseline="middle" class="value-label">1.00x (0.84ms)</text>
169
+ <rect x="0" y="1105" width="38.0952380952381" height="12" fill="#0ea5e9" rx="2" />
170
+ <text x="43.0952380952381" y="1112" dominant-baseline="middle" class="value-label">0.48x (0.40ms)</text>
171
+ <rect x="0" y="1121" width="84.76190476190476" height="12" fill="#22c55e" rx="2" />
172
+ <text x="89.76190476190476" y="1128" dominant-baseline="middle" class="value-label">1.06x (0.89ms)</text>
173
+ <rect x="0" y="1137" width="72.38095238095238" height="12" fill="#f59e0b" rx="2" />
174
+ <text x="77.38095238095238" y="1144" dominant-baseline="middle" class="value-label">0.90x (0.76ms)</text>
175
+ <rect x="0" y="1153" width="71.42857142857143" height="12" fill="#ef4444" rx="2" />
176
+ <text x="76.42857142857143" y="1160" dominant-baseline="middle" class="value-label">0.89x (0.75ms)</text>
177
+ <rect x="0" y="1169" width="114.28571428571428" height="12" fill="#8b5cf6" rx="2" />
178
+ <text x="119.28571428571428" y="1176" dominant-baseline="middle" class="value-label">1.43x (1.20ms)</text>
183
179
  <text x="-10" y="1258" text-anchor="end" dominant-baseline="middle" class="op-label">Nested update (update user + post)</text>
184
- <rect x="0" y="1210" width="76" height="12" fill="#3b82f6" rx="2" />
185
- <text x="81" y="1217" dominant-baseline="middle" class="value-label">0.95x (0.95ms)</text>
186
- <rect x="0" y="1226" width="76.8" height="12" fill="#0ea5e9" rx="2" />
187
- <text x="81.8" y="1233" dominant-baseline="middle" class="value-label">0.96x (0.96ms)</text>
188
- <rect x="0" y="1242" width="72" height="12" fill="#22c55e" rx="2" />
189
- <text x="77" y="1249" dominant-baseline="middle" class="value-label">0.90x (0.90ms)</text>
190
- <rect x="0" y="1258" width="84.00000000000001" height="12" fill="#f59e0b" rx="2" />
191
- <text x="89.00000000000001" y="1265" dominant-baseline="middle" class="value-label">1.05x (1.05ms)</text>
192
- <rect x="0" y="1274" width="79.2" height="12" fill="#ef4444" rx="2" />
193
- <text x="84.2" y="1281" dominant-baseline="middle" class="value-label">0.99x (0.99ms)</text>
194
- <rect x="0" y="1290" width="172" height="12" fill="#8b5cf6" rx="2" />
195
- <text x="177" y="1297" dominant-baseline="middle" class="value-label">2.15x (2.15ms)</text>
180
+ <rect x="0" y="1210" width="80" height="12" fill="#3b82f6" rx="2" />
181
+ <text x="85" y="1217" dominant-baseline="middle" class="value-label">1.00x (1.22ms)</text>
182
+ <rect x="0" y="1226" width="79.34426229508198" height="12" fill="#0ea5e9" rx="2" />
183
+ <text x="84.34426229508198" y="1233" dominant-baseline="middle" class="value-label">0.99x (1.21ms)</text>
184
+ <rect x="0" y="1242" width="80" height="12" fill="#22c55e" rx="2" />
185
+ <text x="85" y="1249" dominant-baseline="middle" class="value-label">1.00x (1.22ms)</text>
186
+ <rect x="0" y="1258" width="76.0655737704918" height="12" fill="#f59e0b" rx="2" />
187
+ <text x="81.0655737704918" y="1265" dominant-baseline="middle" class="value-label">0.95x (1.16ms)</text>
188
+ <rect x="0" y="1274" width="74.75409836065573" height="12" fill="#ef4444" rx="2" />
189
+ <text x="79.75409836065573" y="1281" dominant-baseline="middle" class="value-label">0.93x (1.14ms)</text>
190
+ <rect x="0" y="1290" width="148.1967213114754" height="12" fill="#8b5cf6" rx="2" />
191
+ <text x="153.1967213114754" y="1297" dominant-baseline="middle" class="value-label">1.85x (2.26ms)</text>
196
192
  <text x="-10" y="1379" text-anchor="end" dominant-baseline="middle" class="op-label">Upsert</text>
197
- <rect x="0" y="1331" width="60.8" height="12" fill="#3b82f6" rx="2" />
198
- <text x="65.8" y="1338" dominant-baseline="middle" class="value-label">0.76x (0.76ms)</text>
199
- <rect x="0" y="1347" width="35.199999999999996" height="12" fill="#0ea5e9" rx="2" />
200
- <text x="40.199999999999996" y="1354" dominant-baseline="middle" class="value-label">0.44x (0.44ms)</text>
201
- <rect x="0" y="1363" width="57.599999999999994" height="12" fill="#22c55e" rx="2" />
202
- <text x="62.599999999999994" y="1370" dominant-baseline="middle" class="value-label">0.72x (0.72ms)</text>
203
- <rect x="0" y="1379" width="59.199999999999996" height="12" fill="#f59e0b" rx="2" />
204
- <text x="64.19999999999999" y="1386" dominant-baseline="middle" class="value-label">0.74x (0.74ms)</text>
205
- <rect x="0" y="1395" width="74.4" height="12" fill="#ef4444" rx="2" />
206
- <text x="79.4" y="1402" dominant-baseline="middle" class="value-label">0.93x (0.93ms)</text>
207
- <rect x="0" y="1411" width="140" height="12" fill="#8b5cf6" rx="2" />
208
- <text x="145" y="1418" dominant-baseline="middle" class="value-label">1.75x (1.75ms)</text>
193
+ <rect x="0" y="1331" width="80" height="12" fill="#3b82f6" rx="2" />
194
+ <text x="85" y="1338" dominant-baseline="middle" class="value-label">1.00x (1.03ms)</text>
195
+ <rect x="0" y="1347" width="32.62135922330097" height="12" fill="#0ea5e9" rx="2" />
196
+ <text x="37.62135922330097" y="1354" dominant-baseline="middle" class="value-label">0.41x (0.42ms)</text>
197
+ <rect x="0" y="1363" width="65.24271844660194" height="12" fill="#22c55e" rx="2" />
198
+ <text x="70.24271844660194" y="1370" dominant-baseline="middle" class="value-label">0.82x (0.84ms)</text>
199
+ <rect x="0" y="1379" width="81.55339805825243" height="12" fill="#f59e0b" rx="2" />
200
+ <text x="86.55339805825243" y="1386" dominant-baseline="middle" class="value-label">1.02x (1.05ms)</text>
201
+ <rect x="0" y="1395" width="89.32038834951456" height="12" fill="#ef4444" rx="2" />
202
+ <text x="94.32038834951456" y="1402" dominant-baseline="middle" class="value-label">1.12x (1.15ms)</text>
203
+ <rect x="0" y="1411" width="149.126213592233" height="12" fill="#8b5cf6" rx="2" />
204
+ <text x="154.126213592233" y="1418" dominant-baseline="middle" class="value-label">1.86x (1.92ms)</text>
209
205
  <text x="-10" y="1500" text-anchor="end" dominant-baseline="middle" class="op-label">Nested upsert (user + post)</text>
210
- <rect x="0" y="1452" width="103.2" height="12" fill="#3b82f6" rx="2" />
211
- <text x="108.2" y="1459" dominant-baseline="middle" class="value-label">1.29x (1.29ms)</text>
212
- <rect x="0" y="1468" width="79.2" height="12" fill="#0ea5e9" rx="2" />
213
- <text x="84.2" y="1475" dominant-baseline="middle" class="value-label">0.99x (0.99ms)</text>
214
- <rect x="0" y="1484" width="89.60000000000001" height="12" fill="#22c55e" rx="2" />
215
- <text x="94.60000000000001" y="1491" dominant-baseline="middle" class="value-label">1.12x (1.12ms)</text>
216
- <rect x="0" y="1500" width="99.2" height="12" fill="#f59e0b" rx="2" />
217
- <text x="104.2" y="1507" dominant-baseline="middle" class="value-label">1.24x (1.24ms)</text>
218
- <rect x="0" y="1516" width="105.60000000000001" height="12" fill="#ef4444" rx="2" />
219
- <text x="110.60000000000001" y="1523" dominant-baseline="middle" class="value-label">1.32x (1.32ms)</text>
220
- <rect x="0" y="1532" width="161.60000000000002" height="12" fill="#8b5cf6" rx="2" />
221
- <text x="166.60000000000002" y="1539" dominant-baseline="middle" class="value-label">2.02x (2.02ms)</text>
206
+ <rect x="0" y="1452" width="80" height="12" fill="#3b82f6" rx="2" />
207
+ <text x="85" y="1459" dominant-baseline="middle" class="value-label">1.00x (1.49ms)</text>
208
+ <rect x="0" y="1468" width="66.04026845637584" height="12" fill="#0ea5e9" rx="2" />
209
+ <text x="71.04026845637584" y="1475" dominant-baseline="middle" class="value-label">0.83x (1.23ms)</text>
210
+ <rect x="0" y="1484" width="59.06040268456376" height="12" fill="#22c55e" rx="2" />
211
+ <text x="64.06040268456377" y="1491" dominant-baseline="middle" class="value-label">0.74x (1.10ms)</text>
212
+ <rect x="0" y="1500" width="74.63087248322148" height="12" fill="#f59e0b" rx="2" />
213
+ <text x="79.63087248322148" y="1507" dominant-baseline="middle" class="value-label">0.93x (1.39ms)</text>
214
+ <rect x="0" y="1516" width="69.26174496644296" height="12" fill="#ef4444" rx="2" />
215
+ <text x="74.26174496644296" y="1523" dominant-baseline="middle" class="value-label">0.87x (1.29ms)</text>
216
+ <rect x="0" y="1532" width="112.21476510067112" height="12" fill="#8b5cf6" rx="2" />
217
+ <text x="117.21476510067112" y="1539" dominant-baseline="middle" class="value-label">1.40x (2.09ms)</text>
222
218
  <text x="-10" y="1621" text-anchor="end" dominant-baseline="middle" class="op-label">Delete</text>
223
- <rect x="0" y="1573" width="83.2" height="12" fill="#3b82f6" rx="2" />
224
- <text x="88.2" y="1580" dominant-baseline="middle" class="value-label">1.04x (1.04ms)</text>
225
- <rect x="0" y="1589" width="80.80000000000001" height="12" fill="#0ea5e9" rx="2" />
226
- <text x="85.80000000000001" y="1596" dominant-baseline="middle" class="value-label">1.01x (1.01ms)</text>
227
- <rect x="0" y="1605" width="83.2" height="12" fill="#22c55e" rx="2" />
228
- <text x="88.2" y="1612" dominant-baseline="middle" class="value-label">1.04x (1.04ms)</text>
229
- <rect x="0" y="1621" width="87.20000000000002" height="12" fill="#f59e0b" rx="2" />
230
- <text x="92.20000000000002" y="1628" dominant-baseline="middle" class="value-label">1.09x (1.09ms)</text>
231
- <rect x="0" y="1637" width="103.2" height="12" fill="#ef4444" rx="2" />
232
- <text x="108.2" y="1644" dominant-baseline="middle" class="value-label">1.29x (1.29ms)</text>
233
- <rect x="0" y="1653" width="121.6" height="12" fill="#8b5cf6" rx="2" />
234
- <text x="126.6" y="1660" dominant-baseline="middle" class="value-label">1.52x (1.52ms)</text>
219
+ <rect x="0" y="1573" width="80" height="12" fill="#3b82f6" rx="2" />
220
+ <text x="85" y="1580" dominant-baseline="middle" class="value-label">1.00x (1.24ms)</text>
221
+ <rect x="0" y="1589" width="68.38709677419355" height="12" fill="#0ea5e9" rx="2" />
222
+ <text x="73.38709677419355" y="1596" dominant-baseline="middle" class="value-label">0.85x (1.06ms)</text>
223
+ <rect x="0" y="1605" width="78.70967741935485" height="12" fill="#22c55e" rx="2" />
224
+ <text x="83.70967741935485" y="1612" dominant-baseline="middle" class="value-label">0.98x (1.22ms)</text>
225
+ <rect x="0" y="1621" width="82.58064516129032" height="12" fill="#f59e0b" rx="2" />
226
+ <text x="87.58064516129032" y="1628" dominant-baseline="middle" class="value-label">1.03x (1.28ms)</text>
227
+ <rect x="0" y="1637" width="81.93548387096774" height="12" fill="#ef4444" rx="2" />
228
+ <text x="86.93548387096774" y="1644" dominant-baseline="middle" class="value-label">1.02x (1.27ms)</text>
229
+ <rect x="0" y="1653" width="96.12903225806451" height="12" fill="#8b5cf6" rx="2" />
230
+ <text x="101.12903225806451" y="1660" dominant-baseline="middle" class="value-label">1.20x (1.49ms)</text>
235
231
  <text x="-10" y="1742" text-anchor="end" dominant-baseline="middle" class="op-label">Create Many (10 records)</text>
236
- <rect x="0" y="1694" width="68" height="12" fill="#3b82f6" rx="2" />
237
- <text x="73" y="1701" dominant-baseline="middle" class="value-label">0.85x (0.85ms)</text>
238
- <rect x="0" y="1710" width="32.8" height="12" fill="#0ea5e9" rx="2" />
239
- <text x="37.8" y="1717" dominant-baseline="middle" class="value-label">0.41x (0.41ms)</text>
240
- <rect x="0" y="1726" width="70.39999999999999" height="12" fill="#22c55e" rx="2" />
241
- <text x="75.39999999999999" y="1733" dominant-baseline="middle" class="value-label">0.88x (0.88ms)</text>
242
- <rect x="0" y="1742" width="96" height="12" fill="#f59e0b" rx="2" />
243
- <text x="101" y="1749" dominant-baseline="middle" class="value-label">1.20x (1.20ms)</text>
244
- <rect x="0" y="1758" width="81.60000000000001" height="12" fill="#ef4444" rx="2" />
245
- <text x="86.60000000000001" y="1765" dominant-baseline="middle" class="value-label">1.02x (1.02ms)</text>
246
- <rect x="0" y="1774" width="96" height="12" fill="#8b5cf6" rx="2" />
247
- <text x="101" y="1781" dominant-baseline="middle" class="value-label">1.20x (1.20ms)</text>
232
+ <rect x="0" y="1694" width="80" height="12" fill="#3b82f6" rx="2" />
233
+ <text x="85" y="1701" dominant-baseline="middle" class="value-label">1.00x (1.10ms)</text>
234
+ <rect x="0" y="1710" width="41.454545454545446" height="12" fill="#0ea5e9" rx="2" />
235
+ <text x="46.454545454545446" y="1717" dominant-baseline="middle" class="value-label">0.52x (0.57ms)</text>
236
+ <rect x="0" y="1726" width="68.36363636363635" height="12" fill="#22c55e" rx="2" />
237
+ <text x="73.36363636363635" y="1733" dominant-baseline="middle" class="value-label">0.85x (0.94ms)</text>
238
+ <rect x="0" y="1742" width="74.9090909090909" height="12" fill="#f59e0b" rx="2" />
239
+ <text x="79.9090909090909" y="1749" dominant-baseline="middle" class="value-label">0.94x (1.03ms)</text>
240
+ <rect x="0" y="1758" width="98.9090909090909" height="12" fill="#ef4444" rx="2" />
241
+ <text x="103.9090909090909" y="1765" dominant-baseline="middle" class="value-label">1.24x (1.36ms)</text>
242
+ <rect x="0" y="1774" width="86.54545454545455" height="12" fill="#8b5cf6" rx="2" />
243
+ <text x="91.54545454545455" y="1781" dominant-baseline="middle" class="value-label">1.08x (1.19ms)</text>
248
244
  <text x="-10" y="1863" text-anchor="end" dominant-baseline="middle" class="op-label">Upsert Many (10 records)</text>
249
- <rect x="0" y="1815" width="102.4" height="12" fill="#3b82f6" rx="2" />
250
- <text x="107.4" y="1822" dominant-baseline="middle" class="value-label">1.28x (1.28ms)</text>
251
- <rect x="0" y="1831" width="36.8" height="12" fill="#0ea5e9" rx="2" />
252
- <text x="41.8" y="1838" dominant-baseline="middle" class="value-label">0.46x (0.46ms)</text>
253
- <rect x="0" y="1847" width="61.6" height="12" fill="#22c55e" rx="2" />
254
- <text x="66.6" y="1854" dominant-baseline="middle" class="value-label">0.77x (0.77ms)</text>
255
- <rect x="0" y="1863" width="110.39999999999999" height="12" fill="#f59e0b" rx="2" />
256
- <text x="115.39999999999999" y="1870" dominant-baseline="middle" class="value-label">1.38x (1.38ms)</text>
257
- <rect x="0" y="1879" width="88.00000000000001" height="12" fill="#ef4444" rx="2" />
258
- <text x="93.00000000000001" y="1886" dominant-baseline="middle" class="value-label">1.10x (1.10ms)</text>
245
+ <rect x="0" y="1815" width="80" height="12" fill="#3b82f6" rx="2" />
246
+ <text x="85" y="1822" dominant-baseline="middle" class="value-label">1.00x (1.45ms)</text>
247
+ <rect x="0" y="1831" width="36.41379310344828" height="12" fill="#0ea5e9" rx="2" />
248
+ <text x="41.41379310344828" y="1838" dominant-baseline="middle" class="value-label">0.46x (0.66ms)</text>
249
+ <rect x="0" y="1847" width="59.03448275862069" height="12" fill="#22c55e" rx="2" />
250
+ <text x="64.0344827586207" y="1854" dominant-baseline="middle" class="value-label">0.74x (1.07ms)</text>
251
+ <rect x="0" y="1863" width="83.31034482758622" height="12" fill="#f59e0b" rx="2" />
252
+ <text x="88.31034482758622" y="1870" dominant-baseline="middle" class="value-label">1.04x (1.51ms)</text>
253
+ <rect x="0" y="1879" width="86.62068965517243" height="12" fill="#ef4444" rx="2" />
254
+ <text x="91.62068965517243" y="1886" dominant-baseline="middle" class="value-label">1.08x (1.57ms)</text>
259
255
  <rect x="0" y="1895" width="400" height="12" fill="#8b5cf6" rx="2" />
260
256
  <line x1="397" y1="1895" x2="400" y2="1907" class="overflow-line" />
261
257
  <line x1="394" y1="1895" x2="397" y2="1907" class="overflow-line" />
262
- <text x="405" y="1902" dominant-baseline="middle" class="value-overflow">⚠️ 9.75x (9.75ms)</text>
258
+ <text x="405" y="1902" dominant-baseline="middle" class="value-overflow">⚠️ 6.65x (9.64ms)</text>
263
259
  <text x="-10" y="1984" text-anchor="end" dominant-baseline="middle" class="op-label">Update Many (10 different values)</text>
264
- <rect x="0" y="1936" width="89.60000000000001" height="12" fill="#3b82f6" rx="2" />
265
- <text x="94.60000000000001" y="1943" dominant-baseline="middle" class="value-label">1.12x (1.12ms)</text>
266
- <rect x="0" y="1952" width="37.6" height="12" fill="#0ea5e9" rx="2" />
267
- <text x="42.6" y="1959" dominant-baseline="middle" class="value-label">0.47x (0.47ms)</text>
268
- <rect x="0" y="1968" width="193.6" height="12" fill="#22c55e" rx="2" />
269
- <text x="198.6" y="1975" dominant-baseline="middle" class="value-label">2.42x (2.42ms)</text>
270
- <rect x="0" y="1984" width="193.6" height="12" fill="#f59e0b" rx="2" />
271
- <text x="198.6" y="1991" dominant-baseline="middle" class="value-label">2.42x (2.42ms)</text>
272
- <rect x="0" y="2000" width="199.20000000000002" height="12" fill="#ef4444" rx="2" />
273
- <text x="204.20000000000002" y="2007" dominant-baseline="middle" class="value-label">2.49x (2.49ms)</text>
274
- <rect x="0" y="2016" width="392.8" height="12" fill="#8b5cf6" rx="2" />
275
- <text x="397.8" y="2023" dominant-baseline="middle" class="value-label">4.91x (4.91ms)</text>
260
+ <rect x="0" y="1936" width="80" height="12" fill="#3b82f6" rx="2" />
261
+ <text x="85" y="1943" dominant-baseline="middle" class="value-label">1.00x (1.20ms)</text>
262
+ <rect x="0" y="1952" width="29.333333333333332" height="12" fill="#0ea5e9" rx="2" />
263
+ <text x="34.33333333333333" y="1959" dominant-baseline="middle" class="value-label">0.37x (0.44ms)</text>
264
+ <rect x="0" y="1968" width="161.33333333333331" height="12" fill="#22c55e" rx="2" />
265
+ <text x="166.33333333333331" y="1975" dominant-baseline="middle" class="value-label">2.02x (2.42ms)</text>
266
+ <rect x="0" y="1984" width="161.33333333333331" height="12" fill="#f59e0b" rx="2" />
267
+ <text x="166.33333333333331" y="1991" dominant-baseline="middle" class="value-label">2.02x (2.42ms)</text>
268
+ <rect x="0" y="2000" width="173.33333333333337" height="12" fill="#ef4444" rx="2" />
269
+ <text x="178.33333333333337" y="2007" dominant-baseline="middle" class="value-label">2.17x (2.60ms)</text>
270
+ <rect x="0" y="2016" width="322" height="12" fill="#8b5cf6" rx="2" />
271
+ <text x="327" y="2023" dominant-baseline="middle" class="value-label">4.03x (4.83ms)</text>
276
272
  <text x="-10" y="2105" text-anchor="end" dominant-baseline="middle" class="op-label">Nested relations (100→1000→10000)</text>
277
- <rect x="0" y="2057" width="400" height="12" fill="#3b82f6" rx="2" />
278
- <line x1="397" y1="2057" x2="400" y2="2069" class="overflow-line" />
279
- <line x1="394" y1="2057" x2="397" y2="2069" class="overflow-line" />
280
- <text x="405" y="2064" dominant-baseline="middle" class="value-overflow">⚠️ 14.43x (14.43ms)</text>
281
- <rect x="0" y="2073" width="400" height="12" fill="#0ea5e9" rx="2" />
282
- <line x1="397" y1="2073" x2="400" y2="2085" class="overflow-line" />
283
- <line x1="394" y1="2073" x2="397" y2="2085" class="overflow-line" />
284
- <text x="405" y="2080" dominant-baseline="middle" class="value-overflow">⚠️ 18.46x (18.46ms)</text>
285
- <rect x="0" y="2089" width="400" height="12" fill="#22c55e" rx="2" />
286
- <line x1="397" y1="2089" x2="400" y2="2101" class="overflow-line" />
287
- <line x1="394" y1="2089" x2="397" y2="2101" class="overflow-line" />
288
- <text x="405" y="2096" dominant-baseline="middle" class="value-overflow">⚠️ 21.11x (21.11ms)</text>
289
- <rect x="0" y="2105" width="400" height="12" fill="#f59e0b" rx="2" />
290
- <line x1="397" y1="2105" x2="400" y2="2117" class="overflow-line" />
291
- <line x1="394" y1="2105" x2="397" y2="2117" class="overflow-line" />
292
- <text x="405" y="2112" dominant-baseline="middle" class="value-overflow">⚠️ 20.33x (20.33ms)</text>
293
- <rect x="0" y="2121" width="400" height="12" fill="#ef4444" rx="2" />
294
- <line x1="397" y1="2121" x2="400" y2="2133" class="overflow-line" />
295
- <line x1="394" y1="2121" x2="397" y2="2133" class="overflow-line" />
296
- <text x="405" y="2128" dominant-baseline="middle" class="value-overflow">⚠️ 74.04x (74.04ms)</text>
273
+ <rect x="0" y="2057" width="80" height="12" fill="#3b82f6" rx="2" />
274
+ <text x="85" y="2064" dominant-baseline="middle" class="value-label">1.00x (14.83ms)</text>
275
+ <rect x="0" y="2073" width="97.69386378961563" height="12" fill="#0ea5e9" rx="2" />
276
+ <text x="102.69386378961563" y="2080" dominant-baseline="middle" class="value-label">1.22x (18.11ms)</text>
277
+ <rect x="0" y="2089" width="112.52865812542143" height="12" fill="#22c55e" rx="2" />
278
+ <text x="117.52865812542143" y="2096" dominant-baseline="middle" class="value-label">1.41x (20.86ms)</text>
279
+ <rect x="0" y="2105" width="110.64059339177344" height="12" fill="#f59e0b" rx="2" />
280
+ <text x="115.64059339177344" y="2112" dominant-baseline="middle" class="value-label">1.38x (20.51ms)</text>
281
+ <rect x="0" y="2121" width="388.8873904248146" height="12" fill="#ef4444" rx="2" />
282
+ <text x="393.8873904248146" y="2128" dominant-baseline="middle" class="value-label">4.86x (72.09ms)</text>
297
283
  <rect x="0" y="2137" width="400" height="12" fill="#8b5cf6" rx="2" />
298
284
  <line x1="397" y1="2137" x2="400" y2="2149" class="overflow-line" />
299
285
  <line x1="394" y1="2137" x2="397" y2="2149" class="overflow-line" />
300
- <text x="405" y="2144" dominant-baseline="middle" class="value-overflow">⚠️ 79.61x (79.61ms)</text>
286
+ <text x="405" y="2144" dominant-baseline="middle" class="value-overflow">⚠️ 5.58x (82.82ms)</text>
301
287
  <text x="-10" y="2226" text-anchor="end" dominant-baseline="middle" class="op-label">Nested relations (composite key)</text>
302
- <rect x="0" y="2178" width="400" height="12" fill="#3b82f6" rx="2" />
303
- <line x1="397" y1="2178" x2="400" y2="2190" class="overflow-line" />
304
- <line x1="394" y1="2178" x2="397" y2="2190" class="overflow-line" />
305
- <text x="405" y="2185" dominant-baseline="middle" class="value-overflow">⚠️ 27.52x (27.52ms)</text>
306
- <rect x="0" y="2194" width="400" height="12" fill="#0ea5e9" rx="2" />
307
- <line x1="397" y1="2194" x2="400" y2="2206" class="overflow-line" />
308
- <line x1="394" y1="2194" x2="397" y2="2206" class="overflow-line" />
309
- <text x="405" y="2201" dominant-baseline="middle" class="value-overflow">⚠️ 23.97x (23.97ms)</text>
288
+ <rect x="0" y="2178" width="80" height="12" fill="#3b82f6" rx="2" />
289
+ <text x="85" y="2185" dominant-baseline="middle" class="value-label">1.00x (29.00ms)</text>
290
+ <rect x="0" y="2194" width="64.1655172413793" height="12" fill="#0ea5e9" rx="2" />
291
+ <text x="69.1655172413793" y="2201" dominant-baseline="middle" class="value-label">0.80x (23.26ms)</text>
310
292
  <text x="5" y="2217" dominant-baseline="middle" class="na-text">N/A</text>
311
- <rect x="0" y="2226" width="400" height="12" fill="#f59e0b" rx="2" />
312
- <line x1="397" y1="2226" x2="400" y2="2238" class="overflow-line" />
313
- <line x1="394" y1="2226" x2="397" y2="2238" class="overflow-line" />
314
- <text x="405" y="2233" dominant-baseline="middle" class="value-overflow">⚠️ 74.39x (74.39ms)</text>
315
- <rect x="0" y="2242" width="400" height="12" fill="#ef4444" rx="2" />
316
- <line x1="397" y1="2242" x2="400" y2="2254" class="overflow-line" />
317
- <line x1="394" y1="2242" x2="397" y2="2254" class="overflow-line" />
318
- <text x="405" y="2249" dominant-baseline="middle" class="value-overflow">⚠️ 57.46x (57.46ms)</text>
319
- <rect x="0" y="2258" width="400" height="12" fill="#8b5cf6" rx="2" />
320
- <line x1="397" y1="2258" x2="400" y2="2270" class="overflow-line" />
321
- <line x1="394" y1="2258" x2="397" y2="2270" class="overflow-line" />
322
- <text x="405" y="2265" dominant-baseline="middle" class="value-overflow">⚠️ 83.78x (83.78ms)</text>
293
+ <rect x="0" y="2226" width="216.63448275862072" height="12" fill="#f59e0b" rx="2" />
294
+ <text x="221.63448275862072" y="2233" dominant-baseline="middle" class="value-label">2.71x (78.53ms)</text>
295
+ <rect x="0" y="2242" width="162.59310344827585" height="12" fill="#ef4444" rx="2" />
296
+ <text x="167.59310344827585" y="2249" dominant-baseline="middle" class="value-label">2.03x (58.94ms)</text>
297
+ <rect x="0" y="2258" width="227.94482758620686" height="12" fill="#8b5cf6" rx="2" />
298
+ <text x="232.94482758620686" y="2265" dominant-baseline="middle" class="value-label">2.85x (82.63ms)</text>
323
299
  </g>
324
300
 
325
301
  <!-- Legend -->