@fragno-dev/db 0.2.2 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (587) hide show
  1. package/.turbo/turbo-build.log +404 -175
  2. package/CHANGELOG.md +109 -0
  3. package/README.md +54 -9
  4. package/dist/adapters/adapters.d.ts +23 -21
  5. package/dist/adapters/adapters.d.ts.map +1 -1
  6. package/dist/adapters/adapters.js.map +1 -1
  7. package/dist/adapters/generic-sql/driver-config.d.ts +16 -1
  8. package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -1
  9. package/dist/adapters/generic-sql/driver-config.js +23 -1
  10. package/dist/adapters/generic-sql/driver-config.js.map +1 -1
  11. package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +24 -9
  12. package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -1
  13. package/dist/adapters/generic-sql/generic-sql-adapter.js +60 -22
  14. package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -1
  15. package/dist/adapters/generic-sql/generic-sql-uow-executor.js +169 -3
  16. package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -1
  17. package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -1
  18. package/dist/adapters/generic-sql/migration/dialect/mysql.js +25 -6
  19. package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -1
  20. package/dist/adapters/generic-sql/migration/dialect/postgres.js +7 -6
  21. package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -1
  22. package/dist/adapters/generic-sql/migration/dialect/sqlite.js +193 -16
  23. package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -1
  24. package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -1
  25. package/dist/adapters/generic-sql/migration/executor.js +30 -3
  26. package/dist/adapters/generic-sql/migration/executor.js.map +1 -1
  27. package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -1
  28. package/dist/adapters/generic-sql/migration/prepared-migrations.js +9 -9
  29. package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -1
  30. package/dist/adapters/generic-sql/migration/sql-generator.js +75 -52
  31. package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -1
  32. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +7 -6
  33. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -1
  34. package/dist/adapters/generic-sql/query/cursor-utils.js +42 -4
  35. package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -1
  36. package/dist/adapters/generic-sql/query/db-now-sql.js +27 -0
  37. package/dist/adapters/generic-sql/query/db-now-sql.js.map +1 -0
  38. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +32 -21
  39. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -1
  40. package/dist/adapters/generic-sql/query/select-builder.js +5 -3
  41. package/dist/adapters/generic-sql/query/select-builder.js.map +1 -1
  42. package/dist/adapters/generic-sql/query/sql-query-compiler.js +49 -18
  43. package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -1
  44. package/dist/adapters/generic-sql/query/where-builder.js +43 -29
  45. package/dist/adapters/generic-sql/query/where-builder.js.map +1 -1
  46. package/dist/adapters/generic-sql/sqlite-storage.d.ts +13 -0
  47. package/dist/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
  48. package/dist/adapters/generic-sql/sqlite-storage.js +15 -0
  49. package/dist/adapters/generic-sql/sqlite-storage.js.map +1 -0
  50. package/dist/adapters/generic-sql/uow-decoder.js +6 -2
  51. package/dist/adapters/generic-sql/uow-decoder.js.map +1 -1
  52. package/dist/adapters/generic-sql/uow-encoder.js +27 -8
  53. package/dist/adapters/generic-sql/uow-encoder.js.map +1 -1
  54. package/dist/adapters/in-memory/condition-evaluator.js +135 -0
  55. package/dist/adapters/in-memory/condition-evaluator.js.map +1 -0
  56. package/dist/adapters/in-memory/errors.d.ts +13 -0
  57. package/dist/adapters/in-memory/errors.d.ts.map +1 -0
  58. package/dist/adapters/in-memory/errors.js +23 -0
  59. package/dist/adapters/in-memory/errors.js.map +1 -0
  60. package/dist/adapters/in-memory/in-memory-adapter.d.ts +27 -0
  61. package/dist/adapters/in-memory/in-memory-adapter.d.ts.map +1 -0
  62. package/dist/adapters/in-memory/in-memory-adapter.js +196 -0
  63. package/dist/adapters/in-memory/in-memory-adapter.js.map +1 -0
  64. package/dist/adapters/in-memory/in-memory-uow.js +871 -0
  65. package/dist/adapters/in-memory/in-memory-uow.js.map +1 -0
  66. package/dist/adapters/in-memory/index.d.ts +4 -0
  67. package/dist/adapters/in-memory/index.js +4 -0
  68. package/dist/adapters/in-memory/options.d.ts +30 -0
  69. package/dist/adapters/in-memory/options.d.ts.map +1 -0
  70. package/dist/adapters/in-memory/options.js +62 -0
  71. package/dist/adapters/in-memory/options.js.map +1 -0
  72. package/dist/adapters/in-memory/reference-resolution.js +26 -0
  73. package/dist/adapters/in-memory/reference-resolution.js.map +1 -0
  74. package/dist/adapters/in-memory/sorted-array-index.js +129 -0
  75. package/dist/adapters/in-memory/sorted-array-index.js.map +1 -0
  76. package/dist/adapters/in-memory/store.js +71 -0
  77. package/dist/adapters/in-memory/store.js.map +1 -0
  78. package/dist/adapters/in-memory/value-comparison.js +28 -0
  79. package/dist/adapters/in-memory/value-comparison.js.map +1 -0
  80. package/dist/adapters/shared/from-unit-of-work-compiler.js +51 -24
  81. package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -1
  82. package/dist/adapters/shared/uow-operation-compiler.js +11 -11
  83. package/dist/adapters/shared/uow-operation-compiler.js.map +1 -1
  84. package/dist/adapters/sql/index.d.ts +5 -0
  85. package/dist/adapters/sql/index.js +4 -0
  86. package/dist/browser/adapters/adapters.d.ts +61 -0
  87. package/dist/browser/adapters/adapters.d.ts.map +1 -0
  88. package/dist/browser/adapters/generic-sql/migration/executor.d.ts +15 -0
  89. package/dist/browser/adapters/generic-sql/migration/executor.d.ts.map +1 -0
  90. package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
  91. package/dist/browser/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
  92. package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts +11 -0
  93. package/dist/browser/adapters/generic-sql/sqlite-storage.d.ts.map +1 -0
  94. package/dist/browser/adapters/in-memory/in-memory-adapter.d.ts +5 -0
  95. package/dist/browser/adapters/in-memory/index.d.ts +2 -0
  96. package/dist/browser/adapters/in-memory/options.d.ts +1 -0
  97. package/dist/browser/db-fragment-definition-builder.d.ts +237 -0
  98. package/dist/browser/db-fragment-definition-builder.d.ts.map +1 -0
  99. package/dist/browser/durable-hooks.d.ts +3 -0
  100. package/dist/browser/fragments/internal-fragment.d.ts +317 -0
  101. package/dist/browser/fragments/internal-fragment.d.ts.map +1 -0
  102. package/dist/browser/fragments/internal-fragment.schema.d.ts +1 -0
  103. package/dist/browser/hooks/durable-hooks-logger.d.ts +10 -0
  104. package/dist/browser/hooks/durable-hooks-logger.d.ts.map +1 -0
  105. package/dist/browser/hooks/hooks.d.ts +146 -0
  106. package/dist/browser/hooks/hooks.d.ts.map +1 -0
  107. package/dist/browser/id.js +1 -0
  108. package/dist/browser/internal/adapter-registry.d.ts +4 -0
  109. package/dist/browser/internal/outbox-state.d.ts +2 -0
  110. package/dist/browser/mod.d.ts +15 -0
  111. package/dist/browser/mod.d.ts.map +1 -0
  112. package/dist/browser/mod.js +17 -0
  113. package/dist/browser/mod.js.map +1 -0
  114. package/dist/browser/mod2.d.ts +48 -0
  115. package/dist/browser/mod2.d.ts.map +1 -0
  116. package/dist/browser/naming/sql-naming.d.ts +19 -0
  117. package/dist/browser/naming/sql-naming.d.ts.map +1 -0
  118. package/dist/browser/outbox/outbox.d.ts +21 -0
  119. package/dist/browser/outbox/outbox.d.ts.map +1 -0
  120. package/dist/browser/query/column-defaults.js +1 -0
  121. package/dist/browser/query/condition-builder.d.ts +44 -0
  122. package/dist/browser/query/condition-builder.d.ts.map +1 -0
  123. package/dist/browser/query/condition-builder.js +97 -0
  124. package/dist/browser/query/condition-builder.js.map +1 -0
  125. package/dist/browser/query/cursor.d.ts +105 -0
  126. package/dist/browser/query/cursor.d.ts.map +1 -0
  127. package/dist/browser/query/cursor.js +150 -0
  128. package/dist/browser/query/cursor.js.map +1 -0
  129. package/dist/browser/query/db-now.d.ts +22 -0
  130. package/dist/browser/query/db-now.d.ts.map +1 -0
  131. package/dist/browser/query/db-now.js +33 -0
  132. package/dist/browser/query/db-now.js.map +1 -0
  133. package/dist/browser/query/orm/orm.d.ts +18 -0
  134. package/dist/browser/query/orm/orm.d.ts.map +1 -0
  135. package/dist/browser/query/simple-query-interface.d.ts +108 -0
  136. package/dist/browser/query/simple-query-interface.d.ts.map +1 -0
  137. package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts +423 -0
  138. package/dist/browser/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
  139. package/dist/browser/query/unit-of-work/execute-unit-of-work.js +507 -0
  140. package/dist/browser/query/unit-of-work/execute-unit-of-work.js.map +1 -0
  141. package/dist/browser/query/unit-of-work/retry-policy.d.ts +23 -0
  142. package/dist/browser/query/unit-of-work/retry-policy.d.ts.map +1 -0
  143. package/dist/browser/query/unit-of-work/retry-policy.js +40 -0
  144. package/dist/browser/query/unit-of-work/retry-policy.js.map +1 -0
  145. package/dist/browser/query/unit-of-work/unit-of-work.d.ts +703 -0
  146. package/dist/browser/query/unit-of-work/unit-of-work.d.ts.map +1 -0
  147. package/dist/browser/query/unit-of-work/unit-of-work.js +1206 -0
  148. package/dist/browser/query/unit-of-work/unit-of-work.js.map +1 -0
  149. package/dist/browser/query/value-encoding.js +38 -0
  150. package/dist/browser/query/value-encoding.js.map +1 -0
  151. package/dist/browser/schema/create.d.ts +326 -0
  152. package/dist/browser/schema/create.d.ts.map +1 -0
  153. package/dist/browser/schema/create.js +89 -0
  154. package/dist/browser/schema/create.js.map +1 -0
  155. package/dist/browser/schema/generate-id.js +28 -0
  156. package/dist/browser/schema/generate-id.js.map +1 -0
  157. package/dist/browser/shared/providers.d.ts +6 -0
  158. package/dist/browser/shared/providers.d.ts.map +1 -0
  159. package/dist/browser/sql-driver/connection/connection-provider.d.ts +13 -0
  160. package/dist/browser/sql-driver/connection/connection-provider.d.ts.map +1 -0
  161. package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
  162. package/dist/browser/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
  163. package/dist/browser/sql-driver/driver/runtime-driver.d.ts +23 -0
  164. package/dist/browser/sql-driver/driver/runtime-driver.d.ts.map +1 -0
  165. package/dist/browser/sql-driver/query-executor/plugin.d.ts +17 -0
  166. package/dist/browser/sql-driver/query-executor/plugin.d.ts.map +1 -0
  167. package/dist/browser/sql-driver/query-executor/query-executor.d.ts +36 -0
  168. package/dist/browser/sql-driver/query-executor/query-executor.d.ts.map +1 -0
  169. package/dist/browser/sql-driver/sql-driver-adapter.d.ts +29 -0
  170. package/dist/browser/sql-driver/sql-driver-adapter.d.ts.map +1 -0
  171. package/dist/browser/sql-driver/sql-driver.d.ts +38 -0
  172. package/dist/browser/sql-driver/sql-driver.d.ts.map +1 -0
  173. package/dist/browser/sync/commands.d.ts +15 -0
  174. package/dist/browser/sync/commands.d.ts.map +1 -0
  175. package/dist/browser/sync/commands.js +27 -0
  176. package/dist/browser/sync/commands.js.map +1 -0
  177. package/dist/browser/sync/types.d.ts +63 -0
  178. package/dist/browser/sync/types.d.ts.map +1 -0
  179. package/dist/browser/util/types.d.ts +8 -0
  180. package/dist/browser/util/types.d.ts.map +1 -0
  181. package/dist/browser/with-database.d.ts +29 -0
  182. package/dist/browser/with-database.d.ts.map +1 -0
  183. package/dist/client.d.ts +4 -0
  184. package/dist/client.js +5 -0
  185. package/dist/db-fragment-definition-builder.d.ts +101 -33
  186. package/dist/db-fragment-definition-builder.d.ts.map +1 -1
  187. package/dist/db-fragment-definition-builder.js +450 -60
  188. package/dist/db-fragment-definition-builder.js.map +1 -1
  189. package/dist/dispatchers/cloudflare-do/dispatcher.d.ts +20 -0
  190. package/dist/dispatchers/cloudflare-do/dispatcher.d.ts.map +1 -0
  191. package/dist/dispatchers/cloudflare-do/dispatcher.js +147 -0
  192. package/dist/dispatchers/cloudflare-do/dispatcher.js.map +1 -0
  193. package/dist/dispatchers/cloudflare-do/index.d.ts +11 -0
  194. package/dist/dispatchers/cloudflare-do/index.d.ts.map +1 -0
  195. package/dist/dispatchers/cloudflare-do/index.js +31 -0
  196. package/dist/dispatchers/cloudflare-do/index.js.map +1 -0
  197. package/dist/dispatchers/node/dispatcher.d.ts +14 -0
  198. package/dist/dispatchers/node/dispatcher.d.ts.map +1 -0
  199. package/dist/dispatchers/node/dispatcher.js +80 -0
  200. package/dist/dispatchers/node/dispatcher.js.map +1 -0
  201. package/dist/dispatchers/node/index.d.ts +12 -0
  202. package/dist/dispatchers/node/index.d.ts.map +1 -0
  203. package/dist/dispatchers/node/index.js +27 -0
  204. package/dist/dispatchers/node/index.js.map +1 -0
  205. package/dist/durable-hooks.d.ts +31 -0
  206. package/dist/durable-hooks.d.ts.map +1 -0
  207. package/dist/durable-hooks.js +23 -0
  208. package/dist/durable-hooks.js.map +1 -0
  209. package/dist/fragments/internal-fragment.d.ts +186 -8
  210. package/dist/fragments/internal-fragment.d.ts.map +1 -1
  211. package/dist/fragments/internal-fragment.js +203 -38
  212. package/dist/fragments/internal-fragment.js.map +1 -1
  213. package/dist/fragments/internal-fragment.routes.js +164 -0
  214. package/dist/fragments/internal-fragment.routes.js.map +1 -0
  215. package/dist/fragments/internal-fragment.schema.d.ts +15 -0
  216. package/dist/fragments/internal-fragment.schema.d.ts.map +1 -0
  217. package/dist/fragments/internal-fragment.schema.js +39 -0
  218. package/dist/fragments/internal-fragment.schema.js.map +1 -0
  219. package/dist/hooks/durable-hooks-logger.d.ts +10 -0
  220. package/dist/hooks/durable-hooks-logger.d.ts.map +1 -0
  221. package/dist/hooks/durable-hooks-logger.js +75 -0
  222. package/dist/hooks/durable-hooks-logger.js.map +1 -0
  223. package/dist/hooks/durable-hooks-processor.d.ts +1 -0
  224. package/dist/hooks/durable-hooks-processor.js +80 -0
  225. package/dist/hooks/durable-hooks-processor.js.map +1 -0
  226. package/dist/hooks/durable-hooks-runtime.js +44 -0
  227. package/dist/hooks/durable-hooks-runtime.js.map +1 -0
  228. package/dist/hooks/hooks.d.ts +100 -1
  229. package/dist/hooks/hooks.d.ts.map +1 -1
  230. package/dist/hooks/hooks.js +254 -27
  231. package/dist/hooks/hooks.js.map +1 -1
  232. package/dist/id.d.ts +2 -2
  233. package/dist/id.js +2 -2
  234. package/dist/internal/adapter-registry.d.ts +11 -0
  235. package/dist/internal/adapter-registry.d.ts.map +1 -0
  236. package/dist/internal/adapter-registry.js +135 -0
  237. package/dist/internal/adapter-registry.js.map +1 -0
  238. package/dist/internal/outbox-state.d.ts +2 -0
  239. package/dist/internal/outbox-state.js +26 -0
  240. package/dist/internal/outbox-state.js.map +1 -0
  241. package/dist/migration-engine/auto-from-schema.d.ts +33 -0
  242. package/dist/migration-engine/auto-from-schema.d.ts.map +1 -0
  243. package/dist/migration-engine/auto-from-schema.js +223 -37
  244. package/dist/migration-engine/auto-from-schema.js.map +1 -1
  245. package/dist/migration-engine/generation-engine.d.ts +16 -10
  246. package/dist/migration-engine/generation-engine.d.ts.map +1 -1
  247. package/dist/migration-engine/generation-engine.js +86 -35
  248. package/dist/migration-engine/generation-engine.js.map +1 -1
  249. package/dist/migration-engine/shared.d.ts +113 -0
  250. package/dist/migration-engine/shared.d.ts.map +1 -0
  251. package/dist/migration-engine/shared.js.map +1 -1
  252. package/dist/mod.d.ts +20 -12
  253. package/dist/mod.d.ts.map +1 -1
  254. package/dist/mod.js +18 -12
  255. package/dist/mod.js.map +1 -1
  256. package/dist/naming/sql-naming.d.ts +19 -0
  257. package/dist/naming/sql-naming.d.ts.map +1 -0
  258. package/dist/naming/sql-naming.js +116 -0
  259. package/dist/naming/sql-naming.js.map +1 -0
  260. package/dist/outbox/outbox-builder.js +156 -0
  261. package/dist/outbox/outbox-builder.js.map +1 -0
  262. package/dist/outbox/outbox.d.ts +54 -0
  263. package/dist/outbox/outbox.d.ts.map +1 -0
  264. package/dist/outbox/outbox.js +37 -0
  265. package/dist/outbox/outbox.js.map +1 -0
  266. package/dist/query/column-defaults.js +20 -4
  267. package/dist/query/column-defaults.js.map +1 -1
  268. package/dist/query/condition-builder.d.ts +7 -1
  269. package/dist/query/condition-builder.d.ts.map +1 -1
  270. package/dist/query/condition-builder.js +5 -1
  271. package/dist/query/condition-builder.js.map +1 -1
  272. package/dist/query/cursor-client.d.ts +105 -0
  273. package/dist/query/cursor-client.d.ts.map +1 -0
  274. package/dist/query/cursor-client.js +165 -0
  275. package/dist/query/cursor-client.js.map +1 -0
  276. package/dist/query/cursor.d.ts +3 -1
  277. package/dist/query/cursor.d.ts.map +1 -1
  278. package/dist/query/cursor.js +51 -14
  279. package/dist/query/cursor.js.map +1 -1
  280. package/dist/query/db-now.d.ts +22 -0
  281. package/dist/query/db-now.d.ts.map +1 -0
  282. package/dist/query/db-now.js +35 -0
  283. package/dist/query/db-now.js.map +1 -0
  284. package/dist/query/orm/orm.js.map +1 -1
  285. package/dist/query/serialize/create-sql-serializer.js +5 -4
  286. package/dist/query/serialize/create-sql-serializer.js.map +1 -1
  287. package/dist/query/serialize/dialect/mysql-serializer.js +12 -6
  288. package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -1
  289. package/dist/query/serialize/dialect/postgres-serializer.js +25 -7
  290. package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -1
  291. package/dist/query/serialize/dialect/sqlite-serializer.js +60 -12
  292. package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -1
  293. package/dist/query/serialize/sql-serializer.js +2 -2
  294. package/dist/query/serialize/sql-serializer.js.map +1 -1
  295. package/dist/query/simple-query-interface.d.ts +13 -4
  296. package/dist/query/simple-query-interface.d.ts.map +1 -1
  297. package/dist/query/unit-of-work/execute-unit-of-work.d.ts +37 -2
  298. package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -1
  299. package/dist/query/unit-of-work/execute-unit-of-work.js +50 -24
  300. package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -1
  301. package/dist/query/unit-of-work/unit-of-work.d.ts +92 -30
  302. package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
  303. package/dist/query/unit-of-work/unit-of-work.js +136 -11
  304. package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
  305. package/dist/query/value-decoding.js +16 -6
  306. package/dist/query/value-decoding.js.map +1 -1
  307. package/dist/query/value-encoding.js +29 -9
  308. package/dist/query/value-encoding.js.map +1 -1
  309. package/dist/schema/create.d.ts +103 -35
  310. package/dist/schema/create.d.ts.map +1 -1
  311. package/dist/schema/create.js +172 -58
  312. package/dist/schema/create.js.map +1 -1
  313. package/dist/schema/generate-id.js +2 -2
  314. package/dist/schema/generate-id.js.map +1 -1
  315. package/dist/schema/type-conversion/create-sql-type-mapper.js +4 -3
  316. package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -1
  317. package/dist/schema/type-conversion/dialect/sqlite.js +9 -0
  318. package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -1
  319. package/dist/schema/validator.d.ts +10 -0
  320. package/dist/schema/validator.d.ts.map +1 -0
  321. package/dist/schema/validator.js +123 -0
  322. package/dist/schema/validator.js.map +1 -0
  323. package/dist/schema-output/drizzle.d.ts +30 -0
  324. package/dist/schema-output/drizzle.d.ts.map +1 -0
  325. package/dist/{adapters/drizzle/generate.js → schema-output/drizzle.js} +88 -60
  326. package/dist/schema-output/drizzle.js.map +1 -0
  327. package/dist/schema-output/prisma.d.ts +17 -0
  328. package/dist/schema-output/prisma.d.ts.map +1 -0
  329. package/dist/schema-output/prisma.js +307 -0
  330. package/dist/schema-output/prisma.js.map +1 -0
  331. package/dist/sql-driver/dialects/durable-object-dialect.js +3 -9
  332. package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -1
  333. package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -1
  334. package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -1
  335. package/dist/sql-driver/sql-driver-adapter.js.map +1 -1
  336. package/dist/sql-driver/sql.js.map +1 -1
  337. package/dist/sync/commands.d.ts +15 -0
  338. package/dist/sync/commands.d.ts.map +1 -0
  339. package/dist/sync/commands.js +27 -0
  340. package/dist/sync/commands.js.map +1 -0
  341. package/dist/sync/index.d.ts +4 -0
  342. package/dist/sync/index.js +4 -0
  343. package/dist/sync/read-tracking.d.ts +25 -0
  344. package/dist/sync/read-tracking.d.ts.map +1 -0
  345. package/dist/sync/read-tracking.js +148 -0
  346. package/dist/sync/read-tracking.js.map +1 -0
  347. package/dist/sync/submit.js +213 -0
  348. package/dist/sync/submit.js.map +1 -0
  349. package/dist/sync/types.d.ts +63 -0
  350. package/dist/sync/types.d.ts.map +1 -0
  351. package/dist/util/default-database-adapter.js +66 -0
  352. package/dist/util/default-database-adapter.js.map +1 -0
  353. package/dist/with-database.d.ts +3 -6
  354. package/dist/with-database.d.ts.map +1 -1
  355. package/dist/with-database.js +8 -7
  356. package/dist/with-database.js.map +1 -1
  357. package/package.json +62 -55
  358. package/src/adapters/adapters.ts +33 -26
  359. package/src/adapters/drizzle/migrate-drizzle.test.ts +99 -41
  360. package/src/adapters/drizzle/migration-parity-drizzle-kit.test.ts +601 -0
  361. package/src/adapters/drizzle/test-utils.ts +13 -8
  362. package/src/adapters/generic-sql/driver-config.ts +38 -0
  363. package/src/adapters/generic-sql/generic-sql-adapter.test.ts +10 -8
  364. package/src/adapters/generic-sql/generic-sql-adapter.ts +117 -34
  365. package/src/adapters/generic-sql/generic-sql-uow-executor.test.ts +55 -0
  366. package/src/adapters/generic-sql/generic-sql-uow-executor.ts +297 -3
  367. package/src/adapters/generic-sql/migration/adapter-migration-parity.test.ts +120 -0
  368. package/src/adapters/generic-sql/migration/cold-kysely.ts +1 -0
  369. package/src/adapters/generic-sql/migration/dialect/mysql.test.ts +27 -8
  370. package/src/adapters/generic-sql/migration/dialect/mysql.ts +47 -8
  371. package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +28 -9
  372. package/src/adapters/generic-sql/migration/dialect/postgres.ts +9 -4
  373. package/src/adapters/generic-sql/migration/dialect/sqlite.test.ts +839 -8
  374. package/src/adapters/generic-sql/migration/dialect/sqlite.ts +396 -53
  375. package/src/adapters/generic-sql/migration/executor.test.ts +52 -0
  376. package/src/adapters/generic-sql/migration/executor.ts +47 -4
  377. package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +238 -46
  378. package/src/adapters/generic-sql/migration/prepared-migrations.ts +21 -13
  379. package/src/adapters/generic-sql/migration/sql-generator.ts +145 -66
  380. package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +11 -8
  381. package/src/adapters/generic-sql/query/cursor-utils.test.ts +272 -0
  382. package/src/adapters/generic-sql/query/cursor-utils.ts +42 -7
  383. package/src/adapters/generic-sql/query/db-now-sql.ts +49 -0
  384. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +171 -35
  385. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +53 -40
  386. package/src/adapters/generic-sql/query/select-builder.test.ts +16 -11
  387. package/src/adapters/generic-sql/query/select-builder.ts +7 -3
  388. package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +75 -6
  389. package/src/adapters/generic-sql/query/sql-query-compiler.ts +129 -24
  390. package/src/adapters/generic-sql/query/where-builder.test.ts +96 -20
  391. package/src/adapters/generic-sql/query/where-builder.ts +112 -41
  392. package/src/adapters/{kysely/kysely-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-migrations.test.ts} +11 -20
  393. package/src/adapters/generic-sql/sql-adapter-pglite-pagination.test.ts +851 -0
  394. package/src/adapters/{drizzle/drizzle-adapter-pglite.test.ts → generic-sql/sql-adapter-pglite-queries.test.ts} +18 -15
  395. package/src/adapters/generic-sql/{test/generic-drizzle-adapter-sqlite3.test.ts → sql-adapter-sqlite3-driver.test.ts} +282 -14
  396. package/src/adapters/{drizzle/drizzle-adapter-sqlite3.test.ts → generic-sql/sql-adapter-sqlite3-uow.test.ts} +129 -12
  397. package/src/adapters/{kysely/kysely-adapter-sqlocal.test.ts → generic-sql/sql-adapter-sqlocal.test.ts} +9 -7
  398. package/src/adapters/generic-sql/sqlite-storage.ts +20 -0
  399. package/src/adapters/generic-sql/uow-decoder.test.ts +5 -4
  400. package/src/adapters/generic-sql/uow-decoder.ts +23 -5
  401. package/src/adapters/generic-sql/uow-encoder.test.ts +36 -3
  402. package/src/adapters/generic-sql/uow-encoder.ts +48 -13
  403. package/src/adapters/in-memory/condition-evaluator.test.ts +194 -0
  404. package/src/adapters/in-memory/condition-evaluator.ts +280 -0
  405. package/src/adapters/in-memory/errors.ts +20 -0
  406. package/src/adapters/in-memory/in-memory-adapter.ts +388 -0
  407. package/src/adapters/in-memory/in-memory-uow.mutations.test.ts +344 -0
  408. package/src/adapters/in-memory/in-memory-uow.retrieval.test.ts +255 -0
  409. package/src/adapters/in-memory/in-memory-uow.ts +1724 -0
  410. package/src/adapters/in-memory/index.ts +3 -0
  411. package/src/adapters/in-memory/options.test.ts +42 -0
  412. package/src/adapters/in-memory/options.ts +91 -0
  413. package/src/adapters/in-memory/outbox.test.ts +361 -0
  414. package/src/adapters/in-memory/reference-resolution.test.ts +51 -0
  415. package/src/adapters/in-memory/reference-resolution.ts +67 -0
  416. package/src/adapters/in-memory/sorted-array-index.test.ts +124 -0
  417. package/src/adapters/in-memory/sorted-array-index.ts +228 -0
  418. package/src/adapters/in-memory/store.test.ts +69 -0
  419. package/src/adapters/in-memory/store.ts +145 -0
  420. package/src/adapters/in-memory/value-comparison.ts +53 -0
  421. package/src/adapters/in-memory/value-normalization.test.ts +58 -0
  422. package/src/adapters/prisma/prisma-adapter-sqlite3.test.ts +1207 -0
  423. package/src/adapters/shared/from-unit-of-work-compiler.ts +159 -47
  424. package/src/adapters/shared/uow-operation-compiler.ts +28 -18
  425. package/src/adapters/sql/index.ts +12 -0
  426. package/src/browser/mod.ts +64 -0
  427. package/src/client.ts +19 -0
  428. package/src/db-fragment-definition-builder.test.ts +845 -53
  429. package/src/db-fragment-definition-builder.ts +911 -95
  430. package/src/db-fragment-instantiator.test.ts +210 -94
  431. package/src/db-fragment-integration.test.ts +17 -12
  432. package/src/dispatchers/cloudflare-do/dispatcher.ts +204 -0
  433. package/src/dispatchers/cloudflare-do/index.test.ts +206 -0
  434. package/src/dispatchers/cloudflare-do/index.ts +63 -0
  435. package/src/dispatchers/node/dispatcher.ts +112 -0
  436. package/src/dispatchers/node/index.test.ts +120 -0
  437. package/src/dispatchers/node/index.ts +50 -0
  438. package/src/durable-hooks.test.ts +80 -0
  439. package/src/durable-hooks.ts +67 -0
  440. package/src/fragments/internal-fragment.routes.test.ts +570 -0
  441. package/src/fragments/internal-fragment.routes.ts +334 -0
  442. package/src/fragments/internal-fragment.schema.ts +95 -0
  443. package/src/fragments/internal-fragment.test.ts +505 -83
  444. package/src/fragments/internal-fragment.ts +453 -70
  445. package/src/hooks/durable-hooks-logger.ts +126 -0
  446. package/src/hooks/durable-hooks-processor.pglite.test.ts +87 -0
  447. package/src/hooks/durable-hooks-processor.test.ts +282 -0
  448. package/src/hooks/durable-hooks-processor.ts +173 -0
  449. package/src/hooks/durable-hooks-runtime.test.ts +65 -0
  450. package/src/hooks/durable-hooks-runtime.ts +81 -0
  451. package/src/hooks/hooks.test.ts +455 -34
  452. package/src/hooks/hooks.ts +501 -34
  453. package/src/id.test.ts +34 -0
  454. package/src/id.ts +1 -3
  455. package/src/internal/adapter-registry.test.ts +93 -0
  456. package/src/internal/adapter-registry.ts +239 -0
  457. package/src/internal/outbox-state.ts +43 -0
  458. package/src/migration-engine/auto-from-schema.test.ts +107 -14
  459. package/src/migration-engine/auto-from-schema.ts +365 -44
  460. package/src/migration-engine/create.test.ts +4 -3
  461. package/src/migration-engine/create.ts +1 -1
  462. package/src/migration-engine/generation-engine.test.ts +292 -110
  463. package/src/migration-engine/generation-engine.ts +117 -66
  464. package/src/migration-engine/shared.ts +14 -0
  465. package/src/mod.ts +95 -39
  466. package/src/naming/sql-naming.ts +181 -0
  467. package/src/outbox/outbox-builder.ts +241 -0
  468. package/src/outbox/outbox.test.ts +424 -0
  469. package/src/outbox/outbox.ts +139 -0
  470. package/src/query/column-defaults.ts +42 -4
  471. package/src/query/condition-builder.test.ts +18 -3
  472. package/src/query/condition-builder.ts +7 -0
  473. package/src/query/cursor-client.test.ts +70 -0
  474. package/src/query/cursor-client.ts +263 -0
  475. package/src/query/cursor.test.ts +119 -20
  476. package/src/query/cursor.ts +88 -27
  477. package/src/query/db-now.ts +73 -0
  478. package/src/query/orm/orm.ts +2 -2
  479. package/src/query/query-type.test.ts +4 -3
  480. package/src/query/serialize/create-sql-serializer.ts +10 -5
  481. package/src/query/serialize/dialect/mysql-serializer.ts +13 -5
  482. package/src/query/serialize/dialect/postgres-serializer.ts +35 -5
  483. package/src/query/serialize/dialect/sqlite-serializer.test.ts +90 -3
  484. package/src/query/serialize/dialect/sqlite-serializer.ts +108 -12
  485. package/src/query/serialize/sql-serializer.ts +4 -4
  486. package/src/query/simple-query-interface.ts +15 -4
  487. package/src/query/unit-of-work/execute-unit-of-work.test.ts +372 -10
  488. package/src/query/unit-of-work/execute-unit-of-work.ts +87 -27
  489. package/src/query/unit-of-work/retry-policy.test.ts +1 -0
  490. package/src/query/unit-of-work/tx-builder.test.ts +73 -1
  491. package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +17 -16
  492. package/src/query/unit-of-work/unit-of-work-types.test.ts +42 -12
  493. package/src/query/unit-of-work/unit-of-work.test.ts +196 -39
  494. package/src/query/unit-of-work/unit-of-work.ts +309 -38
  495. package/src/query/value-decoding.test.ts +63 -4
  496. package/src/query/value-decoding.ts +32 -6
  497. package/src/query/value-encoding.test.ts +86 -2
  498. package/src/query/value-encoding.ts +56 -6
  499. package/src/schema/create.test.ts +293 -47
  500. package/src/schema/create.ts +406 -70
  501. package/src/schema/generate-id.test.ts +3 -2
  502. package/src/schema/generate-id.ts +2 -2
  503. package/src/schema/serialize.test.ts +18 -5
  504. package/src/schema/type-conversion/create-sql-type-mapper.ts +8 -3
  505. package/src/schema/type-conversion/dialect/sqlite.ts +18 -0
  506. package/src/schema/type-conversion/type-mapping.test.ts +26 -1
  507. package/src/schema/validator.test.ts +199 -0
  508. package/src/schema/validator.ts +232 -0
  509. package/src/{adapters/drizzle/generate.test.ts → schema-output/drizzle.test.ts} +232 -129
  510. package/src/{adapters/drizzle/generate.ts → schema-output/drizzle.ts} +155 -99
  511. package/src/schema-output/prisma.test.ts +694 -0
  512. package/src/schema-output/prisma.ts +593 -0
  513. package/src/sql-driver/better-sqlite3.test.ts +5 -3
  514. package/src/sql-driver/dialects/durable-object-dialect.ts +3 -8
  515. package/src/sql-driver/query-executor/default-query-executor.ts +1 -1
  516. package/src/sql-driver/query-executor/query-executor-base.ts +1 -1
  517. package/src/sql-driver/query-executor/query-executor.ts +1 -1
  518. package/src/sql-driver/sql-driver-adapter.ts +2 -2
  519. package/src/sql-driver/sql.ts +2 -1
  520. package/src/sql-driver/sqlocal.test.ts +4 -2
  521. package/src/sync/commands.test.ts +39 -0
  522. package/src/sync/commands.ts +51 -0
  523. package/src/sync/conflict-checker.test.ts +450 -0
  524. package/src/sync/conflict-checker.ts +248 -0
  525. package/src/sync/index.ts +14 -0
  526. package/src/sync/plan.ts +9 -0
  527. package/src/sync/read-tracking.test.ts +177 -0
  528. package/src/sync/read-tracking.ts +287 -0
  529. package/src/sync/submit.test.ts +205 -0
  530. package/src/sync/submit.ts +328 -0
  531. package/src/sync/types.ts +80 -0
  532. package/src/util/default-database-adapter.ts +119 -0
  533. package/src/with-database.ts +20 -31
  534. package/tsconfig.json +1 -1
  535. package/tsdown.config.ts +38 -24
  536. package/vitest.config.ts +1 -0
  537. package/dist/adapters/drizzle/drizzle-adapter.d.ts +0 -20
  538. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +0 -1
  539. package/dist/adapters/drizzle/drizzle-adapter.js +0 -27
  540. package/dist/adapters/drizzle/drizzle-adapter.js.map +0 -1
  541. package/dist/adapters/drizzle/generate.d.ts +0 -30
  542. package/dist/adapters/drizzle/generate.d.ts.map +0 -1
  543. package/dist/adapters/drizzle/generate.js.map +0 -1
  544. package/dist/adapters/kysely/kysely-adapter.d.ts +0 -19
  545. package/dist/adapters/kysely/kysely-adapter.d.ts.map +0 -1
  546. package/dist/adapters/kysely/kysely-adapter.js +0 -17
  547. package/dist/adapters/kysely/kysely-adapter.js.map +0 -1
  548. package/dist/adapters/shared/table-name-mapper.d.ts +0 -12
  549. package/dist/adapters/shared/table-name-mapper.d.ts.map +0 -1
  550. package/dist/adapters/shared/table-name-mapper.js +0 -43
  551. package/dist/adapters/shared/table-name-mapper.js.map +0 -1
  552. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js +0 -165
  553. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +0 -1
  554. package/dist/packages/fragno/dist/api/bind-services.js +0 -20
  555. package/dist/packages/fragno/dist/api/bind-services.js.map +0 -1
  556. package/dist/packages/fragno/dist/api/error.js +0 -48
  557. package/dist/packages/fragno/dist/api/error.js.map +0 -1
  558. package/dist/packages/fragno/dist/api/fragment-definition-builder.js +0 -320
  559. package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +0 -1
  560. package/dist/packages/fragno/dist/api/fragment-instantiator.js +0 -525
  561. package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +0 -1
  562. package/dist/packages/fragno/dist/api/fragno-response.js +0 -73
  563. package/dist/packages/fragno/dist/api/fragno-response.js.map +0 -1
  564. package/dist/packages/fragno/dist/api/internal/response-stream.js +0 -81
  565. package/dist/packages/fragno/dist/api/internal/response-stream.js.map +0 -1
  566. package/dist/packages/fragno/dist/api/internal/route.js +0 -10
  567. package/dist/packages/fragno/dist/api/internal/route.js.map +0 -1
  568. package/dist/packages/fragno/dist/api/mutable-request-state.js +0 -97
  569. package/dist/packages/fragno/dist/api/mutable-request-state.js.map +0 -1
  570. package/dist/packages/fragno/dist/api/request-context-storage.js +0 -43
  571. package/dist/packages/fragno/dist/api/request-context-storage.js.map +0 -1
  572. package/dist/packages/fragno/dist/api/request-input-context.js +0 -118
  573. package/dist/packages/fragno/dist/api/request-input-context.js.map +0 -1
  574. package/dist/packages/fragno/dist/api/request-middleware.js +0 -83
  575. package/dist/packages/fragno/dist/api/request-middleware.js.map +0 -1
  576. package/dist/packages/fragno/dist/api/request-output-context.js +0 -119
  577. package/dist/packages/fragno/dist/api/request-output-context.js.map +0 -1
  578. package/dist/packages/fragno/dist/api/route.js +0 -17
  579. package/dist/packages/fragno/dist/api/route.js.map +0 -1
  580. package/dist/packages/fragno/dist/internal/symbols.js +0 -10
  581. package/dist/packages/fragno/dist/internal/symbols.js.map +0 -1
  582. package/dist/schema-generator/schema-generator.d.ts +0 -15
  583. package/dist/schema-generator/schema-generator.d.ts.map +0 -1
  584. package/src/adapters/drizzle/drizzle-adapter.ts +0 -39
  585. package/src/adapters/kysely/kysely-adapter.ts +0 -27
  586. package/src/adapters/shared/table-name-mapper.ts +0 -50
  587. package/src/schema-generator/schema-generator.ts +0 -12
@@ -1,11 +1,12 @@
1
1
  import { describe, test, expect } from "vitest";
2
- import { GenericSQLUOWOperationCompiler } from "./generic-sql-uow-operation-compiler";
3
- import { BetterSQLite3DriverConfig, NodePostgresDriverConfig } from "../driver-config";
4
- import { schema, column, idColumn, referenceColumn, FragnoId } from "../../../schema/create";
2
+
5
3
  import { Cursor } from "../../../query/cursor";
4
+ import { schema, column, idColumn, referenceColumn, FragnoId } from "../../../schema/create";
5
+ import { BetterSQLite3DriverConfig, NodePostgresDriverConfig } from "../driver-config";
6
+ import { GenericSQLUOWOperationCompiler } from "./generic-sql-uow-operation-compiler";
6
7
 
7
8
  // Test schema with indexes
8
- const testSchema = schema((s) => {
9
+ const testSchema = schema("test", (s) => {
9
10
  return s
10
11
  .addTable("users", (t) => {
11
12
  return t
@@ -17,8 +18,9 @@ const testSchema = schema((s) => {
17
18
  .addColumn("createdAt", column("timestamp"))
18
19
  .addColumn("invitedBy", referenceColumn().nullable())
19
20
  .createIndex("idx_email", ["email"], { unique: true })
20
- .createIndex("idx_name", ["name"])
21
- .createIndex("idx_age", ["age"]);
21
+ .createIndex("idx_users_name", ["name"])
22
+ .createIndex("idx_age", ["age"])
23
+ .createIndex("idx_users_name_created_id", ["name", "createdAt", "id"]);
22
24
  })
23
25
  .addTable("posts", (t) => {
24
26
  return t
@@ -37,21 +39,21 @@ const testSchema = schema((s) => {
37
39
  .addColumn("content", column("string"))
38
40
  .addColumn("postId", referenceColumn())
39
41
  .addColumn("authorId", referenceColumn())
40
- .createIndex("idx_post", ["postId"])
42
+ .createIndex("idx_comments_post", ["postId"])
41
43
  .createIndex("idx_author", ["authorId"]);
42
44
  })
43
45
  .addTable("tags", (t) => {
44
46
  return t
45
47
  .addColumn("id", idColumn())
46
48
  .addColumn("name", column("string"))
47
- .createIndex("idx_name", ["name"]);
49
+ .createIndex("idx_tags_name", ["name"]);
48
50
  })
49
51
  .addTable("post_tags", (t) => {
50
52
  return t
51
53
  .addColumn("id", idColumn())
52
54
  .addColumn("postId", referenceColumn())
53
55
  .addColumn("tagId", referenceColumn())
54
- .createIndex("idx_post", ["postId"])
56
+ .createIndex("idx_post_tags_post", ["postId"])
55
57
  .createIndex("idx_tag", ["tagId"]);
56
58
  })
57
59
  .addReference("author", {
@@ -87,7 +89,7 @@ const testSchema = schema((s) => {
87
89
  });
88
90
 
89
91
  // Schema with custom-named id columns
90
- const customIdSchema = schema((s) => {
92
+ const customIdSchema = schema("customid", (s) => {
91
93
  return s
92
94
  .addTable("products", (t) => {
93
95
  return t
@@ -133,6 +135,45 @@ const customIdSchema = schema((s) => {
133
135
  });
134
136
  });
135
137
 
138
+ const joinOnlySchema = schema("joinonly", (s) => {
139
+ return s
140
+ .addTable("users", (t) => {
141
+ return t
142
+ .addColumn("id", idColumn())
143
+ .addColumn("email", column("string"))
144
+ .createIndex("idx_users_email", ["email"]);
145
+ })
146
+ .addTable("invitations", (t) => {
147
+ return t
148
+ .addColumn("id", idColumn())
149
+ .addColumn("email", column("string"))
150
+ .createIndex("idx_inv_email", ["email"]);
151
+ })
152
+ .addTable("memberships", (t) => {
153
+ return t
154
+ .addColumn("id", idColumn())
155
+ .addColumn("userId", referenceColumn())
156
+ .createIndex("idx_memberships_user", ["userId"]);
157
+ })
158
+ .addReference("invitedUser", {
159
+ type: "one",
160
+ from: { table: "invitations", column: "email" },
161
+ to: { table: "users", column: "email" },
162
+ foreignKey: false,
163
+ })
164
+ .addReference("membershipUser", {
165
+ type: "one",
166
+ from: { table: "memberships", column: "userId" },
167
+ to: { table: "users", column: "id" },
168
+ })
169
+ .addReference("memberships", {
170
+ type: "many",
171
+ from: { table: "users", column: "id" },
172
+ to: { table: "memberships", column: "userId" },
173
+ foreignKey: false,
174
+ });
175
+ });
176
+
136
177
  describe("GenericSQLUOWOperationCompiler", () => {
137
178
  const driverConfig = new BetterSQLite3DriverConfig();
138
179
 
@@ -232,7 +273,7 @@ describe("GenericSQLUOWOperationCompiler", () => {
232
273
 
233
274
  expect(result).not.toBeNull();
234
275
  expect(result!.query.sql).toMatchInlineSnapshot(
235
- `"update "users" set "name" = ?, "_version" = COALESCE(_version, 0) + 1 where "users"."id" = ?"`,
276
+ `"update "users" set "name" = ?, "_version" = coalesce("_version", 0) + 1 where "users"."id" = ?"`,
236
277
  );
237
278
  expect(result!.expectedAffectedRows).toBeNull();
238
279
  });
@@ -253,7 +294,7 @@ describe("GenericSQLUOWOperationCompiler", () => {
253
294
 
254
295
  expect(result).not.toBeNull();
255
296
  expect(result!.query.sql).toMatchInlineSnapshot(
256
- `"update "users" set "name" = ?, "_version" = COALESCE(_version, 0) + 1 where ("users"."id" = ? and "users"."_version" = ?)"`,
297
+ `"update "users" set "name" = ?, "_version" = coalesce("_version", 0) + 1 where ("users"."id" = ? and "users"."_version" = ?)"`,
257
298
  );
258
299
  expect(result!.expectedAffectedRows).toBe(1n);
259
300
  });
@@ -396,7 +437,7 @@ describe("GenericSQLUOWOperationCompiler", () => {
396
437
 
397
438
  expect(result).not.toBeNull();
398
439
  expect(result!.query.sql).toMatchInlineSnapshot(
399
- `"update "posts" set "userId" = (select "_internalId" from "users" where "id" = ? limit ?), "_version" = COALESCE(_version, 0) + 1 where "posts"."id" = ?"`,
440
+ `"update "posts" set "userId" = (select "_internalId" from "users" where "id" = ? limit ?), "_version" = coalesce("_version", 0) + 1 where "posts"."id" = ?"`,
400
441
  );
401
442
  });
402
443
 
@@ -418,7 +459,7 @@ describe("GenericSQLUOWOperationCompiler", () => {
418
459
  // Should not have nested SELECT for the userId value
419
460
  expect(result!.query.sql).not.toMatch(/\(select.*from.*users/i);
420
461
  expect(result!.query.sql).toMatchInlineSnapshot(
421
- `"update "posts" set "userId" = ?, "_version" = COALESCE(_version, 0) + 1 where "posts"."id" = ?"`,
462
+ `"update "posts" set "userId" = ?, "_version" = coalesce("_version", 0) + 1 where "posts"."id" = ?"`,
422
463
  );
423
464
  });
424
465
 
@@ -440,7 +481,7 @@ describe("GenericSQLUOWOperationCompiler", () => {
440
481
 
441
482
  expect(result).not.toBeNull();
442
483
  expect(result!.query.sql).toMatchInlineSnapshot(
443
- `"update "users" set "name" = ?, "email" = ?, "isActive" = ?, "_version" = COALESCE(_version, 0) + 1 where "users"."id" = ?"`,
484
+ `"update "users" set "name" = ?, "email" = ?, "isActive" = ?, "_version" = coalesce("_version", 0) + 1 where "users"."id" = ?"`,
444
485
  );
445
486
  });
446
487
  });
@@ -612,7 +653,7 @@ describe("GenericSQLUOWOperationCompiler", () => {
612
653
 
613
654
  expect(result).not.toBeNull();
614
655
  expect(result!.query.sql).toMatchInlineSnapshot(
615
- `"update "products" set "price" = ?, "_version" = COALESCE(_version, 0) + 1 where "products"."productId" = ?"`,
656
+ `"update "products" set "price" = ?, "_version" = coalesce("_version", 0) + 1 where "products"."productId" = ?"`,
616
657
  );
617
658
  });
618
659
 
@@ -757,11 +798,11 @@ describe("GenericSQLUOWOperationCompiler", () => {
757
798
  type: "find",
758
799
  schema: testSchema,
759
800
  table: testSchema.tables.users,
760
- indexName: "idx_name",
801
+ indexName: "idx_users_name",
761
802
  options: {
762
- useIndex: "idx_name",
803
+ useIndex: "idx_users_name",
763
804
  select: true,
764
- orderByIndex: { indexName: "idx_name", direction: "asc" },
805
+ orderByIndex: { indexName: "idx_users_name", direction: "asc" },
765
806
  },
766
807
  });
767
808
 
@@ -799,7 +840,7 @@ describe("GenericSQLUOWOperationCompiler", () => {
799
840
  test("should compile find with cursor pagination using after", () => {
800
841
  const compiler = new GenericSQLUOWOperationCompiler(driverConfig);
801
842
  const cursor = new Cursor({
802
- indexName: "idx_name",
843
+ indexName: "idx_users_name",
803
844
  orderDirection: "asc",
804
845
  pageSize: 10,
805
846
  indexValues: { name: "Alice" },
@@ -809,11 +850,11 @@ describe("GenericSQLUOWOperationCompiler", () => {
809
850
  type: "find",
810
851
  schema: testSchema,
811
852
  table: testSchema.tables.users,
812
- indexName: "idx_name",
853
+ indexName: "idx_users_name",
813
854
  options: {
814
- useIndex: "idx_name",
855
+ useIndex: "idx_users_name",
815
856
  select: true,
816
- orderByIndex: { indexName: "idx_name", direction: "asc" },
857
+ orderByIndex: { indexName: "idx_users_name", direction: "asc" },
817
858
  after: cursor,
818
859
  pageSize: 10,
819
860
  },
@@ -829,7 +870,7 @@ describe("GenericSQLUOWOperationCompiler", () => {
829
870
  test("should compile find with cursor pagination using before", () => {
830
871
  const compiler = new GenericSQLUOWOperationCompiler(driverConfig);
831
872
  const cursor = new Cursor({
832
- indexName: "idx_name",
873
+ indexName: "idx_users_name",
833
874
  orderDirection: "desc",
834
875
  pageSize: 10,
835
876
  indexValues: { name: "Bob" },
@@ -839,11 +880,11 @@ describe("GenericSQLUOWOperationCompiler", () => {
839
880
  type: "find",
840
881
  schema: testSchema,
841
882
  table: testSchema.tables.users,
842
- indexName: "idx_name",
883
+ indexName: "idx_users_name",
843
884
  options: {
844
- useIndex: "idx_name",
885
+ useIndex: "idx_users_name",
845
886
  select: true,
846
- orderByIndex: { indexName: "idx_name", direction: "desc" },
887
+ orderByIndex: { indexName: "idx_users_name", direction: "desc" },
847
888
  before: cursor,
848
889
  pageSize: 10,
849
890
  },
@@ -859,7 +900,7 @@ describe("GenericSQLUOWOperationCompiler", () => {
859
900
  test("should compile find with cursor pagination and additional where conditions", () => {
860
901
  const compiler = new GenericSQLUOWOperationCompiler(driverConfig);
861
902
  const cursor = new Cursor({
862
- indexName: "idx_name",
903
+ indexName: "idx_users_name",
863
904
  orderDirection: "asc",
864
905
  pageSize: 5,
865
906
  indexValues: { name: "Alice" },
@@ -869,12 +910,12 @@ describe("GenericSQLUOWOperationCompiler", () => {
869
910
  type: "find",
870
911
  schema: testSchema,
871
912
  table: testSchema.tables.users,
872
- indexName: "idx_name",
913
+ indexName: "idx_users_name",
873
914
  options: {
874
- useIndex: "idx_name",
915
+ useIndex: "idx_users_name",
875
916
  select: true,
876
917
  where: (eb) => eb("isActive", "=", true),
877
- orderByIndex: { indexName: "idx_name", direction: "asc" },
918
+ orderByIndex: { indexName: "idx_users_name", direction: "asc" },
878
919
  after: cursor,
879
920
  pageSize: 5,
880
921
  },
@@ -886,6 +927,45 @@ describe("GenericSQLUOWOperationCompiler", () => {
886
927
  );
887
928
  expect(result!.parameters).toEqual([1, "Alice", 5]);
888
929
  });
930
+
931
+ test("should compile find with composite cursor pagination", () => {
932
+ const compiler = new GenericSQLUOWOperationCompiler(driverConfig);
933
+ const createdAt = new Date("2024-01-01T00:00:00.000Z");
934
+ const cursor = new Cursor({
935
+ indexName: "idx_users_name_created_id",
936
+ orderDirection: "desc",
937
+ pageSize: 7,
938
+ indexValues: { name: "Alice", createdAt, id: "user-123" },
939
+ });
940
+
941
+ const result = compiler.compileFind({
942
+ type: "find",
943
+ schema: testSchema,
944
+ table: testSchema.tables.users,
945
+ indexName: "idx_users_name_created_id",
946
+ options: {
947
+ useIndex: "idx_users_name_created_id",
948
+ select: true,
949
+ orderByIndex: { indexName: "idx_users_name_created_id", direction: "desc" },
950
+ after: cursor,
951
+ pageSize: 7,
952
+ },
953
+ });
954
+
955
+ expect(result).not.toBeNull();
956
+ expect(result!.sql).toMatchInlineSnapshot(
957
+ `"select "users"."id" as "id", "users"."name" as "name", "users"."email" as "email", "users"."age" as "age", "users"."isActive" as "isActive", "users"."createdAt" as "createdAt", "users"."invitedBy" as "invitedBy", "users"."_internalId" as "_internalId", "users"."_version" as "_version" from "users" where ("users"."name" < ? or ("users"."name" = ? and "users"."createdAt" < ?) or ("users"."name" = ? and "users"."createdAt" = ? and "users"."id" < ?)) order by "users"."name" desc, "users"."createdAt" desc, "users"."id" desc limit ?"`,
958
+ );
959
+ expect(result!.parameters).toEqual([
960
+ "Alice",
961
+ "Alice",
962
+ createdAt.getTime(),
963
+ "Alice",
964
+ createdAt.getTime(),
965
+ "user-123",
966
+ 7,
967
+ ]);
968
+ });
889
969
  });
890
970
 
891
971
  describe("complex where conditions", () => {
@@ -1099,6 +1179,62 @@ describe("GenericSQLUOWOperationCompiler", () => {
1099
1179
  );
1100
1180
  });
1101
1181
 
1182
+ test("should compile join-only relation without internal id coercion", () => {
1183
+ const compiler = new GenericSQLUOWOperationCompiler(driverConfig);
1184
+
1185
+ const result = compiler.compileFind({
1186
+ type: "find",
1187
+ schema: joinOnlySchema,
1188
+ table: joinOnlySchema.tables.invitations,
1189
+ indexName: "primary",
1190
+ options: {
1191
+ useIndex: "primary",
1192
+ select: ["id"],
1193
+ joins: [
1194
+ {
1195
+ relation: joinOnlySchema.tables.invitations.relations.invitedUser,
1196
+ options: {
1197
+ select: ["email"],
1198
+ },
1199
+ },
1200
+ ],
1201
+ },
1202
+ });
1203
+
1204
+ expect(result).not.toBeNull();
1205
+ expect(result!.sql).toMatchInlineSnapshot(
1206
+ `"select "invitedUser"."email" as "invitedUser:email", "invitedUser"."_internalId" as "invitedUser:_internalId", "invitedUser"."_version" as "invitedUser:_version", "invitations"."id" as "id", "invitations"."_internalId" as "_internalId", "invitations"."_version" as "_version" from "invitations" left join "users" as "invitedUser" on "invitations"."email" = "invitedUser"."email""`,
1207
+ );
1208
+ });
1209
+
1210
+ test("should coerce left-side id for join-only relations", () => {
1211
+ const compiler = new GenericSQLUOWOperationCompiler(driverConfig);
1212
+
1213
+ const result = compiler.compileFind({
1214
+ type: "find",
1215
+ schema: joinOnlySchema,
1216
+ table: joinOnlySchema.tables.users,
1217
+ indexName: "primary",
1218
+ options: {
1219
+ useIndex: "primary",
1220
+ select: ["id"],
1221
+ joins: [
1222
+ {
1223
+ relation: joinOnlySchema.tables.users.relations.memberships,
1224
+ options: {
1225
+ select: ["id"],
1226
+ },
1227
+ },
1228
+ ],
1229
+ },
1230
+ });
1231
+
1232
+ expect(result).not.toBeNull();
1233
+ expect(result!.sql).toMatchInlineSnapshot(
1234
+ `"select "memberships"."id" as "memberships:id", "memberships"."_internalId" as "memberships:_internalId", "memberships"."_version" as "memberships:_version", "users"."id" as "id", "users"."_internalId" as "_internalId", "users"."_version" as "_version" from "users" left join "memberships" as "memberships" on "users"."_internalId" = "memberships"."userId""`,
1235
+ );
1236
+ });
1237
+
1102
1238
  test("should compile join with specific column selection", () => {
1103
1239
  const compiler = new GenericSQLUOWOperationCompiler(driverConfig);
1104
1240
 
@@ -1220,7 +1356,7 @@ describe("GenericSQLUOWOperationCompiler", () => {
1220
1356
 
1221
1357
  expect(result).not.toBeNull();
1222
1358
  expect(result!.sql).toMatchInlineSnapshot(
1223
- `"select "author"."name" as "author:name", "author"."_internalId" as "author:_internalId", "author"."_version" as "author:_version", "posts"."id" as "id", "posts"."title" as "title", "posts"."_internalId" as "_internalId", "posts"."_version" as "_version" from "posts" left join "users" as "author" on ("posts"."userId" = "author"."_internalId" and "users"."name" like ?)"`,
1359
+ `"select "author"."name" as "author:name", "author"."_internalId" as "author:_internalId", "author"."_version" as "author:_version", "posts"."id" as "id", "posts"."title" as "title", "posts"."_internalId" as "_internalId", "posts"."_version" as "_version" from "posts" left join "users" as "author" on ("posts"."userId" = "author"."_internalId" and "author"."name" like ?)"`,
1224
1360
  );
1225
1361
  expect(result!.parameters).toEqual(["%john%"]);
1226
1362
  });
@@ -1267,7 +1403,7 @@ describe("GenericSQLUOWOperationCompiler", () => {
1267
1403
 
1268
1404
  expect(result).not.toBeNull();
1269
1405
  expect(result!.sql).toMatchInlineSnapshot(
1270
- `"select "author"."name" as "author:name", "author"."_internalId" as "author:_internalId", "author"."_version" as "author:_version", "posts"."id" as "id", "posts"."title" as "title", "posts"."_internalId" as "_internalId", "posts"."_version" as "_version" from "posts" left join "users" as "author" on ("posts"."userId" = "author"."_internalId" and ("users"."name" like ? and "users"."isActive" = ?))"`,
1406
+ `"select "author"."name" as "author:name", "author"."_internalId" as "author:_internalId", "author"."_version" as "author:_version", "posts"."id" as "id", "posts"."title" as "title", "posts"."_internalId" as "_internalId", "posts"."_version" as "_version" from "posts" left join "users" as "author" on ("posts"."userId" = "author"."_internalId" and ("author"."name" like ? and "author"."isActive" = ?))"`,
1271
1407
  );
1272
1408
  });
1273
1409
 
@@ -1358,7 +1494,7 @@ describe("GenericSQLUOWOperationCompiler", () => {
1358
1494
 
1359
1495
  expect(result).not.toBeNull();
1360
1496
  expect(result!.sql).toMatchInlineSnapshot(
1361
- `"select "author"."id" as "author:id", "author"."name" as "author:name", "author"."_internalId" as "author:_internalId", "author"."_version" as "author:_version", "posts"."id" as "id", "posts"."title" as "title", "posts"."_internalId" as "_internalId", "posts"."_version" as "_version" from "posts" left join "users" as "author" on ("posts"."userId" = "author"."_internalId" and "users"."id" = ?)"`,
1497
+ `"select "author"."id" as "author:id", "author"."name" as "author:name", "author"."_internalId" as "author:_internalId", "author"."_version" as "author:_version", "posts"."id" as "id", "posts"."title" as "title", "posts"."_internalId" as "_internalId", "posts"."_version" as "_version" from "posts" left join "users" as "author" on ("posts"."userId" = "author"."_internalId" and "author"."id" = ?)"`,
1362
1498
  );
1363
1499
  expect(result!.parameters).toEqual(["user-123"]);
1364
1500
  });
@@ -1498,7 +1634,7 @@ describe("GenericSQLUOWOperationCompiler", () => {
1498
1634
 
1499
1635
  expect(result).not.toBeNull();
1500
1636
  expect(result!.sql).toMatchInlineSnapshot(
1501
- `"select "product"."productId" as "product:productId", "product"."name" as "product:name", "product"."_internalId" as "product:_internalId", "product"."_version" as "product:_version", "product_categories"."id" as "id", "product_categories"."_internalId" as "_internalId", "product_categories"."_version" as "_version" from "product_categories" left join "products" as "product" on ("product_categories"."prodRef" = "product"."_internalId" and "products"."productId" = ?)"`,
1637
+ `"select "product"."productId" as "product:productId", "product"."name" as "product:name", "product"."_internalId" as "product:_internalId", "product"."_version" as "product:_version", "product_categories"."id" as "id", "product_categories"."_internalId" as "_internalId", "product_categories"."_version" as "_version" from "product_categories" left join "products" as "product" on ("product_categories"."prodRef" = "product"."_internalId" and "product"."productId" = ?)"`,
1502
1638
  );
1503
1639
  expect(result!.parameters).toEqual(["prod-456"]);
1504
1640
  });
@@ -1,21 +1,23 @@
1
- import { UOWOperationCompiler } from "../../shared/uow-operation-compiler";
2
1
  import type { CompiledQuery } from "kysely";
3
- import type { DriverConfig } from "../driver-config";
4
- import type { TableNameMapper } from "../../shared/table-name-mapper";
2
+
3
+ import type { NamingResolver } from "../../../naming/sql-naming";
4
+ import { buildCondition } from "../../../query/condition-builder";
5
+ import type { Condition } from "../../../query/condition-builder";
6
+ import { buildFindOptions } from "../../../query/orm/orm";
7
+ import type { AnySelectClause } from "../../../query/simple-query-interface";
5
8
  import type {
6
9
  RetrievalOperation,
7
10
  MutationOperation,
8
11
  CompiledMutation,
9
12
  } from "../../../query/unit-of-work/unit-of-work";
10
13
  import type { AnyColumn, AnySchema } from "../../../schema/create";
11
- import { buildCondition } from "../../../query/condition-builder";
14
+ import { UOWOperationCompiler } from "../../shared/uow-operation-compiler";
15
+ import type { DriverConfig } from "../driver-config";
16
+ import { createColdKysely } from "../migration/cold-kysely";
17
+ import type { SQLiteStorageMode } from "../sqlite-storage";
12
18
  import { createSQLQueryCompiler } from "./create-sql-query-compiler";
13
- import { SQLQueryCompiler } from "./sql-query-compiler";
14
19
  import { buildCursorCondition } from "./cursor-utils";
15
- import type { Condition } from "../../../query/condition-builder";
16
- import { buildFindOptions } from "../../../query/orm/orm";
17
- import type { AnySelectClause } from "../../../query/simple-query-interface";
18
- import { createColdKysely } from "../migration/cold-kysely";
20
+ import { SQLQueryCompiler } from "./sql-query-compiler";
19
21
 
20
22
  /**
21
23
  * Generic SQL UOW Operation Compiler.
@@ -24,26 +26,40 @@ import { createColdKysely } from "../migration/cold-kysely";
24
26
  * high-level business logic like cursor pagination, version checking, and index resolution.
25
27
  */
26
28
  export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<CompiledQuery> {
29
+ private readonly sqliteStorageMode?: SQLiteStorageMode;
30
+
27
31
  constructor(
28
32
  driverConfig: DriverConfig,
29
- mapperFactory?: (namespace: string | undefined) => TableNameMapper | undefined,
33
+ sqliteStorageMode?: SQLiteStorageMode,
34
+ resolverFactory?: (schema: AnySchema, namespace: string | null) => NamingResolver,
30
35
  ) {
31
- super(driverConfig, mapperFactory);
36
+ super(driverConfig, resolverFactory);
37
+ this.sqliteStorageMode = sqliteStorageMode;
32
38
  }
33
39
 
34
40
  /**
35
41
  * Get SQL compiler for a specific namespace
36
42
  */
37
- private getSQLCompiler(namespace: string | undefined): SQLQueryCompiler {
38
- const mapper = this.getMapperForOperation(namespace);
43
+ private getSQLCompiler(
44
+ schema: AnySchema,
45
+ namespace: string | null | undefined,
46
+ ): SQLQueryCompiler {
47
+ const resolver = this.getNamingResolver(schema, namespace ?? null);
39
48
  const kysely = createColdKysely(this.driverConfig.databaseType);
40
- return createSQLQueryCompiler(kysely, this.driverConfig, mapper);
49
+ const schemaName = resolver.getSchemaName();
50
+ const scopedKysely = schemaName ? kysely.withSchema(schemaName) : kysely;
51
+ return createSQLQueryCompiler(
52
+ scopedKysely,
53
+ this.driverConfig,
54
+ this.sqliteStorageMode,
55
+ resolver,
56
+ );
41
57
  }
42
58
 
43
59
  override compileCount(
44
60
  op: RetrievalOperation<AnySchema> & { type: "count" },
45
61
  ): CompiledQuery | null {
46
- const sqlCompiler = this.getSQLCompiler(op.namespace);
62
+ const sqlCompiler = this.getSQLCompiler(op.schema, op.namespace);
47
63
 
48
64
  // Build where condition
49
65
  let conditions = op.options.where
@@ -61,7 +77,7 @@ export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<Compile
61
77
  }
62
78
 
63
79
  override compileFind(op: RetrievalOperation<AnySchema> & { type: "find" }): CompiledQuery | null {
64
- const sqlCompiler = this.getSQLCompiler(op.namespace);
80
+ const sqlCompiler = this.getSQLCompiler(op.schema, op.namespace);
65
81
 
66
82
  // Extract options
67
83
  const {
@@ -103,19 +119,14 @@ export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<Compile
103
119
  orderBy = indexColumns.map((col) => [col, orderDirection]);
104
120
  }
105
121
 
106
- // Handle cursor pagination - build a cursor condition
107
- // TODO: Multi-column cursor pagination not yet supported
108
- if ((after || before) && indexColumns.length > 1) {
109
- throw new Error(
110
- "Multi-column cursor pagination is not yet supported in Generic SQL implementation",
111
- );
112
- }
122
+ // Handle cursor pagination - build a cursor condition (supports multi-column lexicographic compare)
113
123
  const cursorCondition = buildCursorCondition(
114
124
  after || before,
115
125
  indexColumns,
116
126
  orderDirection,
117
127
  !!after,
118
128
  this.driverConfig,
129
+ this.sqliteStorageMode,
119
130
  );
120
131
 
121
132
  // Combine user where clause with cursor condition
@@ -153,6 +164,7 @@ export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<Compile
153
164
  orderBy,
154
165
  limit: effectiveLimit,
155
166
  join,
167
+ readTracking: op.readTracking,
156
168
  });
157
169
  }
158
170
 
@@ -160,7 +172,7 @@ export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<Compile
160
172
  const compiledOptions = buildFindOptions(op.table, {
161
173
  ...findManyOptions,
162
174
  where: combinedWhere ? () => combinedWhere! : undefined,
163
- orderBy: orderBy?.map(([col, dir]) => [col.ormName, dir]),
175
+ orderBy: orderBy?.map(([col, dir]) => [col.name, dir]),
164
176
  limit: effectiveLimit,
165
177
  });
166
178
 
@@ -168,17 +180,21 @@ export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<Compile
168
180
  return null;
169
181
  }
170
182
 
171
- return sqlCompiler.compileFindMany(op.table, compiledOptions);
183
+ return sqlCompiler.compileFindMany(op.table, {
184
+ ...compiledOptions,
185
+ readTracking: op.readTracking,
186
+ });
172
187
  }
173
188
 
174
189
  override compileCreate(
175
190
  op: MutationOperation<AnySchema> & { type: "create" },
176
191
  ): CompiledMutation<CompiledQuery> | null {
177
- const sqlCompiler = this.getSQLCompiler(op.namespace);
192
+ const sqlCompiler = this.getSQLCompiler(op.schema, op.namespace);
178
193
  const table = this.getTable(op.schema, op.table);
179
194
 
180
195
  return {
181
196
  query: sqlCompiler.compileCreate(table, op.values),
197
+ operation: op,
182
198
  op: "create",
183
199
  expectedAffectedRows: null, // creates don't need affected row checks
184
200
  expectedReturnedRows: null,
@@ -188,7 +204,7 @@ export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<Compile
188
204
  override compileUpdate(
189
205
  op: MutationOperation<AnySchema> & { type: "update" },
190
206
  ): CompiledMutation<CompiledQuery> | null {
191
- const sqlCompiler = this.getSQLCompiler(op.namespace);
207
+ const sqlCompiler = this.getSQLCompiler(op.schema, op.namespace);
192
208
  const table = this.getTable(op.schema, op.table);
193
209
  const idColumn = table.getIdColumn();
194
210
  const versionColumn = table.getVersionColumn();
@@ -200,12 +216,9 @@ export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<Compile
200
216
  const conditionsResult =
201
217
  versionToCheck !== undefined
202
218
  ? buildCondition(table.columns, (eb) =>
203
- eb.and(
204
- eb(idColumn.ormName, "=", externalId),
205
- eb(versionColumn.ormName, "=", versionToCheck),
206
- ),
219
+ eb.and(eb(idColumn.name, "=", externalId), eb(versionColumn.name, "=", versionToCheck)),
207
220
  )
208
- : buildCondition(table.columns, (eb) => eb(idColumn.ormName, "=", externalId));
221
+ : buildCondition(table.columns, (eb) => eb(idColumn.name, "=", externalId));
209
222
 
210
223
  if (conditionsResult === false) {
211
224
  return null;
@@ -229,6 +242,7 @@ export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<Compile
229
242
 
230
243
  return {
231
244
  query,
245
+ operation: op,
232
246
  op: "update",
233
247
  expectedAffectedRows: useReturningForCheck ? null : op.checkVersion ? 1n : null,
234
248
  expectedReturnedRows: useReturningForCheck ? 1 : null,
@@ -238,7 +252,7 @@ export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<Compile
238
252
  override compileDelete(
239
253
  op: MutationOperation<AnySchema> & { type: "delete" },
240
254
  ): CompiledMutation<CompiledQuery> | null {
241
- const sqlCompiler = this.getSQLCompiler(op.namespace);
255
+ const sqlCompiler = this.getSQLCompiler(op.schema, op.namespace);
242
256
  const table = this.getTable(op.schema, op.table);
243
257
  const idColumn = table.getIdColumn();
244
258
  const versionColumn = table.getVersionColumn();
@@ -250,12 +264,9 @@ export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<Compile
250
264
  const conditionsResult =
251
265
  versionToCheck !== undefined
252
266
  ? buildCondition(table.columns, (eb) =>
253
- eb.and(
254
- eb(idColumn.ormName, "=", externalId),
255
- eb(versionColumn.ormName, "=", versionToCheck),
256
- ),
267
+ eb.and(eb(idColumn.name, "=", externalId), eb(versionColumn.name, "=", versionToCheck)),
257
268
  )
258
- : buildCondition(table.columns, (eb) => eb(idColumn.ormName, "=", externalId));
269
+ : buildCondition(table.columns, (eb) => eb(idColumn.name, "=", externalId));
259
270
 
260
271
  if (conditionsResult === false) {
261
272
  return null;
@@ -278,6 +289,7 @@ export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<Compile
278
289
 
279
290
  return {
280
291
  query,
292
+ operation: op,
281
293
  op: "delete",
282
294
  expectedAffectedRows: useReturningForCheck ? null : op.checkVersion ? 1n : null,
283
295
  expectedReturnedRows: useReturningForCheck ? 1 : null,
@@ -287,7 +299,7 @@ export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<Compile
287
299
  override compileCheck(
288
300
  op: MutationOperation<AnySchema> & { type: "check" },
289
301
  ): CompiledMutation<CompiledQuery> {
290
- const sqlCompiler = this.getSQLCompiler(op.namespace);
302
+ const sqlCompiler = this.getSQLCompiler(op.schema, op.namespace);
291
303
  const table = this.getTable(op.schema, op.table);
292
304
  const idColumn = table.getIdColumn();
293
305
  const versionColumn = table.getVersionColumn();
@@ -297,7 +309,7 @@ export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<Compile
297
309
 
298
310
  // Build a SELECT 1 query to check if the row exists with the correct version
299
311
  const condition = buildCondition(table.columns, (eb) =>
300
- eb.and(eb(idColumn.ormName, "=", externalId), eb(versionColumn.ormName, "=", version)),
312
+ eb.and(eb(idColumn.name, "=", externalId), eb(versionColumn.name, "=", version)),
301
313
  );
302
314
 
303
315
  if (typeof condition === "boolean") {
@@ -306,6 +318,7 @@ export class GenericSQLUOWOperationCompiler extends UOWOperationCompiler<Compile
306
318
 
307
319
  return {
308
320
  query: sqlCompiler.compileCheck(table, condition),
321
+ operation: op,
309
322
  op: "check",
310
323
  expectedAffectedRows: null,
311
324
  expectedReturnedRows: 1, // Check that exactly 1 row was returned