@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,9 +1,10 @@
1
1
  import { describe, expect, it } from "vitest";
2
+
2
3
  import { column, idColumn, referenceColumn, schema } from "../../../schema/create";
3
4
  import { mapSelect, extendSelect } from "./select-builder";
4
5
 
5
6
  describe("select-builder", () => {
6
- const testSchema = schema((s) => {
7
+ const testSchema = schema("test", (s) => {
7
8
  return s
8
9
  .addTable("users", (t) => {
9
10
  return t
@@ -35,7 +36,7 @@ describe("select-builder", () => {
35
36
 
36
37
  describe("mapSelect", () => {
37
38
  it("should map select clause with array of keys", () => {
38
- const result = mapSelect(["id", "name", "email"], usersTable);
39
+ const result = mapSelect(["id", "name", "email"], usersTable, undefined);
39
40
  expect(result).toEqual([
40
41
  "users.id as id",
41
42
  "users.name as name",
@@ -46,7 +47,7 @@ describe("select-builder", () => {
46
47
  });
47
48
 
48
49
  it("should map select all columns when true", () => {
49
- const result = mapSelect(true, usersTable);
50
+ const result = mapSelect(true, usersTable, undefined);
50
51
  expect(result).toEqual([
51
52
  "users.id as id",
52
53
  "users.name as name",
@@ -60,7 +61,9 @@ describe("select-builder", () => {
60
61
  });
61
62
 
62
63
  it("should map select with relation prefix", () => {
63
- const result = mapSelect(["id", "name"], usersTable, { relation: "author" });
64
+ const result = mapSelect(["id", "name"], usersTable, undefined, {
65
+ relation: "author",
66
+ });
64
67
  expect(result).toEqual([
65
68
  "users.id as author:id",
66
69
  "users.name as author:name",
@@ -70,7 +73,9 @@ describe("select-builder", () => {
70
73
  });
71
74
 
72
75
  it("should map select with custom table name", () => {
73
- const result = mapSelect(["id", "title"], postsTable, { tableName: "p" });
76
+ const result = mapSelect(["id", "title"], postsTable, undefined, {
77
+ tableName: "p",
78
+ });
74
79
  expect(result).toEqual([
75
80
  "p.id as id",
76
81
  "p.title as title",
@@ -80,7 +85,7 @@ describe("select-builder", () => {
80
85
  });
81
86
 
82
87
  it("should map select with both relation and custom table name", () => {
83
- const result = mapSelect(["id", "title"], postsTable, {
88
+ const result = mapSelect(["id", "title"], postsTable, undefined, {
84
89
  relation: "posts",
85
90
  tableName: "p",
86
91
  });
@@ -93,7 +98,7 @@ describe("select-builder", () => {
93
98
  });
94
99
 
95
100
  it("should handle single column select", () => {
96
- const result = mapSelect(["name"], usersTable);
101
+ const result = mapSelect(["name"], usersTable, undefined);
97
102
  expect(result).toEqual([
98
103
  "users.name as name",
99
104
  "users._internalId as _internalId",
@@ -104,7 +109,7 @@ describe("select-builder", () => {
104
109
  it("should skip hidden columns when explicitly selecting", () => {
105
110
  // When an array is passed, hidden columns should not be included in the select
106
111
  // (unless they are in the array), but they should always be added at the end
107
- const result = mapSelect(["name", "email"], usersTable);
112
+ const result = mapSelect(["name", "email"], usersTable, undefined);
108
113
  // Should not duplicate _internalId or _version in the main select
109
114
  expect(result).toEqual([
110
115
  "users.name as name",
@@ -116,19 +121,19 @@ describe("select-builder", () => {
116
121
 
117
122
  it("should always include hidden columns", () => {
118
123
  // Hidden columns (_internalId, _version) should always be included
119
- const result = mapSelect(["name"], usersTable);
124
+ const result = mapSelect(["name"], usersTable, undefined);
120
125
  expect(result.some((col) => col.includes("_internalId"))).toBe(true);
121
126
  expect(result.some((col) => col.includes("_version"))).toBe(true);
122
127
  });
123
128
 
124
129
  it("should handle empty select array", () => {
125
- const result = mapSelect([], usersTable);
130
+ const result = mapSelect([], usersTable, undefined);
126
131
  // Should still include hidden columns
127
132
  expect(result).toEqual(["users._internalId as _internalId", "users._version as _version"]);
128
133
  });
129
134
 
130
135
  it("should work with different table schemas", () => {
131
- const result = mapSelect(["id", "title", "content"], postsTable);
136
+ const result = mapSelect(["id", "title", "content"], postsTable, undefined);
132
137
  expect(result).toEqual([
133
138
  "posts.id as id",
134
139
  "posts.title as title",
@@ -1,5 +1,6 @@
1
- import type { AnyTable } from "../../../schema/create";
1
+ import type { NamingResolver } from "../../../naming/sql-naming";
2
2
  import type { AnySelectClause } from "../../../query/simple-query-interface";
3
+ import type { AnyTable } from "../../../schema/create";
3
4
 
4
5
  /**
5
6
  * Maps a select clause to SQL column names with optional aliases.
@@ -18,6 +19,7 @@ import type { AnySelectClause } from "../../../query/simple-query-interface";
18
19
  export function mapSelect(
19
20
  select: AnySelectClause,
20
21
  table: AnyTable,
22
+ resolver: NamingResolver | undefined,
21
23
  options: {
22
24
  relation?: string;
23
25
  tableName?: string;
@@ -37,7 +39,8 @@ export function mapSelect(
37
39
 
38
40
  // Add the column to the select list
39
41
  const name = relation ? `${relation}:${key}` : key;
40
- out.push(`${tableName}.${col.name} as ${name}`);
42
+ const columnName = resolver ? resolver.getColumnName(table.name, col.name) : col.name;
43
+ out.push(`${tableName}.${columnName} as ${name}`);
41
44
  }
42
45
 
43
46
  // Always include hidden columns (for FragnoId construction with internal ID and version)
@@ -45,7 +48,8 @@ export function mapSelect(
45
48
  const col = table.columns[key];
46
49
  if (col.isHidden && !keys.includes(key)) {
47
50
  const name = relation ? `${relation}:${key}` : key;
48
- out.push(`${tableName}.${col.name} as ${name}`);
51
+ const columnName = resolver ? resolver.getColumnName(table.name, col.name) : col.name;
52
+ out.push(`${tableName}.${columnName} as ${name}`);
49
53
  }
50
54
  }
51
55
 
@@ -1,18 +1,21 @@
1
1
  import { describe, test, expect } from "vitest";
2
- import { Kysely, SqliteDialect } from "kysely";
2
+
3
3
  import Database from "better-sqlite3";
4
+ import { Kysely, SqliteDialect } from "kysely";
5
+
6
+ import { createNamingResolver, type SqlNamingStrategy } from "../../../naming/sql-naming";
4
7
  import { schema, column, idColumn, referenceColumn } from "../../../schema/create";
5
- import { PostgreSQLQueryCompiler } from "./dialect/postgres";
6
- import { MySQLQueryCompiler } from "./dialect/mysql";
7
- import { SQLiteQueryCompiler } from "./dialect/sqlite";
8
8
  import {
9
9
  BetterSQLite3DriverConfig,
10
10
  NodePostgresDriverConfig,
11
11
  MySQL2DriverConfig,
12
12
  } from "../driver-config";
13
+ import { MySQLQueryCompiler } from "./dialect/mysql";
14
+ import { PostgreSQLQueryCompiler } from "./dialect/postgres";
15
+ import { SQLiteQueryCompiler } from "./dialect/sqlite";
13
16
 
14
17
  // Test schema
15
- const testSchema = schema((s) => {
18
+ const testSchema = schema("test", (s) => {
16
19
  return s
17
20
  .addTable("users", (t) => {
18
21
  return t
@@ -79,6 +82,23 @@ describe("SQLQueryCompiler", () => {
79
82
  );
80
83
  });
81
84
 
85
+ test("compileFindMany includes id when read tracking is enabled", () => {
86
+ const db = new Kysely({
87
+ dialect: new SqliteDialect({ database: new Database(":memory:") }),
88
+ });
89
+ const compiler = new PostgreSQLQueryCompiler(db, new NodePostgresDriverConfig());
90
+
91
+ const query = compiler.compileFindMany(testSchema.tables.users, {
92
+ select: ["email"],
93
+ limit: 10,
94
+ readTracking: true,
95
+ });
96
+
97
+ expect(query.sql).toMatchInlineSnapshot(
98
+ `"select "users"."email" as "email", "users"."id" as "id", "users"."_internalId" as "_internalId", "users"."_version" as "_version" from "users" limit ?"`,
99
+ );
100
+ });
101
+
82
102
  test("compileFindMany with orderBy", () => {
83
103
  const db = new Kysely({
84
104
  dialect: new SqliteDialect({ database: new Database(":memory:") }),
@@ -130,7 +150,7 @@ describe("SQLQueryCompiler", () => {
130
150
  });
131
151
 
132
152
  expect(query.sql).toMatchInlineSnapshot(
133
- `"update "users" set "name" = ?, "_version" = COALESCE(_version, 0) + 1 where "users"."id" = ?"`,
153
+ `"update "users" set "name" = ?, "_version" = coalesce("_version", 0) + 1 where "users"."id" = ?"`,
134
154
  );
135
155
  });
136
156
 
@@ -191,5 +211,54 @@ describe("SQLQueryCompiler", () => {
191
211
  );
192
212
  expect(query.sql).toContain("returning");
193
213
  });
214
+
215
+ test("compileUpdate succeeds when version column needs quoting", async () => {
216
+ const db = new Kysely({
217
+ dialect: new SqliteDialect({ database: new Database(":memory:") }),
218
+ });
219
+
220
+ await db.schema
221
+ .createTable("users")
222
+ .addColumn("id", "text")
223
+ .addColumn("name", "text")
224
+ .addColumn("users-version", "integer")
225
+ .execute();
226
+
227
+ const namingStrategy: SqlNamingStrategy = {
228
+ namespaceScope: "suffix",
229
+ namespaceToSchema: (namespace) => namespace,
230
+ tableName: (logicalTable) => logicalTable,
231
+ columnName: (logicalColumn, logicalTable) =>
232
+ logicalColumn === "_version" ? `${logicalTable}-version` : logicalColumn,
233
+ indexName: (logicalIndex) => logicalIndex,
234
+ uniqueIndexName: (logicalIndex) => logicalIndex,
235
+ foreignKeyName: ({ referenceName }) => referenceName,
236
+ };
237
+
238
+ const resolver = createNamingResolver(testSchema, null, namingStrategy);
239
+ const compiler = new SQLiteQueryCompiler(
240
+ db,
241
+ new BetterSQLite3DriverConfig(),
242
+ undefined,
243
+ resolver,
244
+ );
245
+
246
+ const query = compiler.compileUpdate(testSchema.tables.users, {
247
+ set: { name: "Jane" },
248
+ where: {
249
+ type: "compare",
250
+ a: testSchema.tables.users.columns.id,
251
+ operator: "=",
252
+ b: "user123",
253
+ },
254
+ });
255
+
256
+ expect(query.sql).toContain('coalesce("users-version", 0) + 1');
257
+ try {
258
+ await expect(db.executeQuery(query)).resolves.toBeDefined();
259
+ } finally {
260
+ await db.destroy();
261
+ }
262
+ });
194
263
  });
195
264
  });
@@ -8,14 +8,16 @@ import type {
8
8
  } from "kysely";
9
9
  import { sql } from "kysely";
10
10
  import type { SqlBool } from "kysely";
11
- import type { AnyColumn, AnyTable } from "../../../schema/create";
11
+
12
+ import type { NamingResolver } from "../../../naming/sql-naming";
12
13
  import type { Condition } from "../../../query/condition-builder";
13
- import type { DriverConfig, SupportedDatabase } from "../driver-config";
14
- import type { TableNameMapper } from "../../shared/table-name-mapper";
15
- import { buildWhere, fullSQLName } from "./where-builder";
16
- import { mapSelect, extendSelect } from "./select-builder";
17
14
  import type { CompiledJoin } from "../../../query/orm/orm";
15
+ import type { AnyColumn, AnyTable } from "../../../schema/create";
16
+ import type { DriverConfig, SupportedDatabase } from "../driver-config";
17
+ import type { SQLiteStorageMode } from "../sqlite-storage";
18
18
  import { UnitOfWorkEncoder } from "../uow-encoder";
19
+ import { mapSelect, extendSelect } from "./select-builder";
20
+ import { buildWhere, fullSQLName } from "./where-builder";
19
21
 
20
22
  /**
21
23
  * Type helpers for Kysely query builders.
@@ -44,12 +46,13 @@ export type AnyInsertQueryBuilder<O = any> = InsertQueryBuilder<any, any, O>;
44
46
  * Options for compiling a find operation
45
47
  */
46
48
  export interface FindManyCompilerOptions {
47
- select: true | string[];
49
+ select: true | readonly string[];
48
50
  where?: Condition;
49
51
  orderBy?: [AnyColumn, "asc" | "desc"][];
50
52
  limit?: number;
51
53
  offset?: number;
52
54
  join?: CompiledJoin[];
55
+ readTracking?: boolean;
53
56
  }
54
57
 
55
58
  /**
@@ -84,6 +87,11 @@ export interface DeleteCompilerOptions {
84
87
  returning?: boolean;
85
88
  }
86
89
 
90
+ export type JoinAliasInfo = {
91
+ table: AnyTable;
92
+ alias: string;
93
+ };
94
+
87
95
  /**
88
96
  * Abstract base class for SQL query compilation.
89
97
  *
@@ -97,15 +105,22 @@ export abstract class SQLQueryCompiler {
97
105
  protected readonly db: AnyKysely;
98
106
  protected readonly driverConfig: DriverConfig;
99
107
  protected readonly database: SupportedDatabase;
100
- protected readonly mapper?: TableNameMapper;
108
+ protected readonly resolver?: NamingResolver;
101
109
  protected readonly encoder: UnitOfWorkEncoder;
102
-
103
- constructor(db: AnyKysely, driverConfig: DriverConfig, mapper?: TableNameMapper) {
110
+ protected readonly sqliteStorageMode?: SQLiteStorageMode;
111
+
112
+ constructor(
113
+ db: AnyKysely,
114
+ driverConfig: DriverConfig,
115
+ sqliteStorageMode?: SQLiteStorageMode,
116
+ resolver?: NamingResolver,
117
+ ) {
104
118
  this.db = db;
105
119
  this.driverConfig = driverConfig;
106
120
  this.database = driverConfig.databaseType;
107
- this.mapper = mapper;
108
- this.encoder = new UnitOfWorkEncoder(driverConfig, db, mapper);
121
+ this.resolver = resolver;
122
+ this.sqliteStorageMode = sqliteStorageMode;
123
+ this.encoder = new UnitOfWorkEncoder(driverConfig, db, sqliteStorageMode, resolver);
109
124
  }
110
125
 
111
126
  /**
@@ -133,14 +148,27 @@ export abstract class SQLQueryCompiler {
133
148
  * Get the physical table name, applying namespace mapping if provided.
134
149
  */
135
150
  protected getTableName(table: AnyTable): string {
136
- return this.mapper ? this.mapper.toPhysical(table.name) : table.name;
151
+ return this.resolver ? this.resolver.getTableName(table.name) : table.name;
137
152
  }
138
153
 
139
154
  /**
140
155
  * Build WHERE clause from a condition tree.
141
156
  */
142
- protected buildWhereClause(condition: Condition, eb: AnyExpressionBuilder, table: AnyTable) {
143
- return buildWhere(condition, eb, this.driverConfig, this.mapper, table);
157
+ protected buildWhereClause(
158
+ condition: Condition,
159
+ eb: AnyExpressionBuilder,
160
+ table: AnyTable,
161
+ tableAlias?: string,
162
+ ) {
163
+ return buildWhere(
164
+ condition,
165
+ eb,
166
+ this.driverConfig,
167
+ this.sqliteStorageMode,
168
+ this.resolver,
169
+ table,
170
+ tableAlias,
171
+ );
144
172
  }
145
173
 
146
174
  /**
@@ -153,6 +181,8 @@ export abstract class SQLQueryCompiler {
153
181
  parentTableName: string,
154
182
  mappedSelect: string[],
155
183
  parentPath: string = "",
184
+ aliasCollector?: JoinAliasInfo[],
185
+ readTracking?: boolean,
156
186
  ): AnySelectQueryBuilder<O> {
157
187
  let result = query;
158
188
 
@@ -168,10 +198,17 @@ export abstract class SQLQueryCompiler {
168
198
  const fullPath = parentPath ? `${parentPath}:${relation.name}` : relation.name;
169
199
  // SQL table alias uses underscores (e.g., "author_inviter")
170
200
  const joinName = fullPath.replace(/:/g, "_");
201
+ if (aliasCollector) {
202
+ aliasCollector.push({ table: targetTable, alias: joinName });
203
+ }
171
204
 
172
- // Update select
205
+ const joinSelectBuilder = extendSelect(joinOptions.select);
206
+ if (readTracking) {
207
+ joinSelectBuilder.extend(targetTable.getIdColumn().name);
208
+ }
209
+ const compiledJoinSelect = joinSelectBuilder.compile();
173
210
  mappedSelect.push(
174
- ...mapSelect(joinOptions.select, targetTable, {
211
+ ...mapSelect(compiledJoinSelect.result, targetTable, this.resolver, {
175
212
  relation: fullPath, // Use full path with colons for column aliases
176
213
  tableName: joinName, // Use underscore version for table name
177
214
  }),
@@ -181,6 +218,10 @@ export abstract class SQLQueryCompiler {
181
218
  b.on((eb) => {
182
219
  const conditions = [];
183
220
  for (const [left, right] of relation.on) {
221
+ const leftCol = parentTable.columns[left];
222
+ const actualLeft =
223
+ leftCol?.role === "external-id" ? parentTable.getInternalIdColumn().name : left;
224
+ const actualLeftCol = parentTable.columns[actualLeft];
184
225
  // Foreign keys always use internal IDs
185
226
  // If the relation references an external ID column (any name), translate to "_internalId"
186
227
  const rightCol = targetTable.columns[right];
@@ -188,15 +229,31 @@ export abstract class SQLQueryCompiler {
188
229
 
189
230
  conditions.push(
190
231
  eb(
191
- `${parentTableName}.${parentTable.columns[left].name}`,
232
+ `${parentTableName}.${
233
+ this.resolver
234
+ ? this.resolver.getColumnName(
235
+ parentTable.name,
236
+ actualLeftCol ? actualLeftCol.name : parentTable.columns[left].name,
237
+ )
238
+ : (actualLeftCol ?? parentTable.columns[left]).name
239
+ }`,
192
240
  "=",
193
- eb.ref(`${joinName}.${targetTable.columns[actualRight].name}`),
241
+ eb.ref(
242
+ `${joinName}.${
243
+ this.resolver
244
+ ? this.resolver.getColumnName(
245
+ targetTable.name,
246
+ targetTable.columns[actualRight].name,
247
+ )
248
+ : targetTable.columns[actualRight].name
249
+ }`,
250
+ ),
194
251
  ),
195
252
  );
196
253
  }
197
254
 
198
255
  if (joinOptions.where) {
199
- conditions.push(this.buildWhereClause(joinOptions.where, eb, targetTable));
256
+ conditions.push(this.buildWhereClause(joinOptions.where, eb, targetTable, joinName));
200
257
  }
201
258
 
202
259
  return eb.and(conditions);
@@ -212,6 +269,8 @@ export abstract class SQLQueryCompiler {
212
269
  joinName,
213
270
  mappedSelect,
214
271
  fullPath,
272
+ aliasCollector,
273
+ readTracking,
215
274
  );
216
275
  }
217
276
  }
@@ -219,6 +278,33 @@ export abstract class SQLQueryCompiler {
219
278
  return result;
220
279
  }
221
280
 
281
+ /**
282
+ * Build a select query with joins applied, returning a list of table aliases used.
283
+ * Intended for conflict checks that need to mirror the join tree from queries.
284
+ */
285
+ buildJoinQuery(
286
+ table: AnyTable,
287
+ options: { where?: Condition; join?: CompiledJoin[] },
288
+ ): {
289
+ query: AnySelectQueryBuilder;
290
+ aliases: JoinAliasInfo[];
291
+ } {
292
+ const tableName = this.getTableName(table);
293
+ let query = this.db.selectFrom(tableName);
294
+ const aliases: JoinAliasInfo[] = [{ table, alias: tableName }];
295
+
296
+ if (options.where) {
297
+ query = query.where((eb) => this.buildWhereClause(options.where!, eb, table));
298
+ }
299
+
300
+ if (options.join && options.join.length > 0) {
301
+ const mappedSelect: string[] = [];
302
+ query = this.processJoins(query, options.join, table, tableName, mappedSelect, "", aliases);
303
+ }
304
+
305
+ return { query, aliases };
306
+ }
307
+
222
308
  /**
223
309
  * Compile a COUNT query.
224
310
  */
@@ -259,22 +345,36 @@ export abstract class SQLQueryCompiler {
259
345
  // Apply ORDER BY
260
346
  if (options.orderBy) {
261
347
  for (const [col, mode] of options.orderBy) {
262
- query = query.orderBy(fullSQLName(col, this.mapper), mode);
348
+ query = query.orderBy(fullSQLName(col, this.resolver), mode);
263
349
  }
264
350
  }
265
351
 
266
352
  // Build SELECT with joins
267
353
  const selectBuilder = extendSelect(options.select);
354
+ if (options.readTracking) {
355
+ selectBuilder.extend(table.getIdColumn().name);
356
+ }
268
357
  const mappedSelect: string[] = [];
269
358
 
270
359
  // Process joins if provided
271
360
  if (options.join && options.join.length > 0) {
272
- query = this.processJoins(query, options.join, table, this.getTableName(table), mappedSelect);
361
+ query = this.processJoins(
362
+ query,
363
+ options.join,
364
+ table,
365
+ this.getTableName(table),
366
+ mappedSelect,
367
+ "",
368
+ undefined,
369
+ options.readTracking,
370
+ );
273
371
  }
274
372
 
275
373
  const compiledSelect = selectBuilder.compile();
276
374
  mappedSelect.push(
277
- ...mapSelect(compiledSelect.result, table, { tableName: this.getTableName(table) }),
375
+ ...mapSelect(compiledSelect.result, table, this.resolver, {
376
+ tableName: this.getTableName(table),
377
+ }),
278
378
  );
279
379
 
280
380
  return query.select(mappedSelect).compile();
@@ -297,7 +397,9 @@ export abstract class SQLQueryCompiler {
297
397
 
298
398
  // Apply RETURNING if supported
299
399
  if (this.driverConfig.supportsReturning) {
300
- const columns = mapSelect(true, table, { tableName: this.getTableName(table) });
400
+ const columns = mapSelect(true, table, this.resolver, {
401
+ tableName: this.getTableName(table),
402
+ });
301
403
  insert = this.applyReturning(insert, columns);
302
404
  }
303
405
 
@@ -316,7 +418,10 @@ export abstract class SQLQueryCompiler {
316
418
 
317
419
  // Add version increment (must be added after encoding, as a raw SQL expression)
318
420
  const versionCol = table.getVersionColumn();
319
- encoded[versionCol.name] = sql.raw(`COALESCE(${versionCol.name}, 0) + 1`);
421
+ const versionColumnName = this.resolver
422
+ ? this.resolver.getColumnName(table.name, versionCol.name)
423
+ : versionCol.name;
424
+ encoded[versionColumnName] = sql`coalesce(${sql.ref(versionColumnName)}, 0) + 1`;
320
425
 
321
426
  let query = this.db.updateTable(this.getTableName(table)).set(encoded);
322
427