@fragno-dev/db 0.1.14 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (445) hide show
  1. package/.turbo/turbo-build.log +242 -139
  2. package/CHANGELOG.md +47 -0
  3. package/README.md +123 -8
  4. package/dist/adapters/adapters.d.ts +19 -5
  5. package/dist/adapters/adapters.d.ts.map +1 -1
  6. package/dist/adapters/adapters.js.map +1 -1
  7. package/dist/adapters/drizzle/drizzle-adapter.d.ts +6 -19
  8. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
  9. package/dist/adapters/drizzle/drizzle-adapter.js +7 -47
  10. package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
  11. package/dist/adapters/drizzle/generate.d.ts +7 -1
  12. package/dist/adapters/drizzle/generate.d.ts.map +1 -1
  13. package/dist/adapters/drizzle/generate.js +46 -45
  14. package/dist/adapters/drizzle/generate.js.map +1 -1
  15. package/dist/adapters/generic-sql/driver-config.d.ts +74 -0
  16. package/dist/adapters/generic-sql/driver-config.d.ts.map +1 -0
  17. package/dist/adapters/generic-sql/driver-config.js +94 -0
  18. package/dist/adapters/generic-sql/driver-config.js.map +1 -0
  19. package/dist/adapters/generic-sql/generic-sql-adapter.d.ts +43 -0
  20. package/dist/adapters/generic-sql/generic-sql-adapter.d.ts.map +1 -0
  21. package/dist/adapters/generic-sql/generic-sql-adapter.js +87 -0
  22. package/dist/adapters/generic-sql/generic-sql-adapter.js.map +1 -0
  23. package/dist/adapters/generic-sql/generic-sql-uow-executor.js +67 -0
  24. package/dist/adapters/generic-sql/generic-sql-uow-executor.js.map +1 -0
  25. package/dist/adapters/generic-sql/migration/cold-kysely.js +33 -0
  26. package/dist/adapters/generic-sql/migration/cold-kysely.js.map +1 -0
  27. package/dist/adapters/generic-sql/migration/dialect/mysql.js +60 -0
  28. package/dist/adapters/generic-sql/migration/dialect/mysql.js.map +1 -0
  29. package/dist/adapters/generic-sql/migration/dialect/postgres.js +59 -0
  30. package/dist/adapters/generic-sql/migration/dialect/postgres.js.map +1 -0
  31. package/dist/adapters/generic-sql/migration/dialect/sqlite.js +96 -0
  32. package/dist/adapters/generic-sql/migration/dialect/sqlite.js.map +1 -0
  33. package/dist/adapters/generic-sql/migration/executor.d.ts +15 -0
  34. package/dist/adapters/generic-sql/migration/executor.d.ts.map +1 -0
  35. package/dist/adapters/generic-sql/migration/executor.js +18 -0
  36. package/dist/adapters/generic-sql/migration/executor.js.map +1 -0
  37. package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts +66 -0
  38. package/dist/adapters/generic-sql/migration/prepared-migrations.d.ts.map +1 -0
  39. package/dist/adapters/generic-sql/migration/prepared-migrations.js +68 -0
  40. package/dist/adapters/generic-sql/migration/prepared-migrations.js.map +1 -0
  41. package/dist/adapters/generic-sql/migration/sql-generator.js +212 -0
  42. package/dist/adapters/generic-sql/migration/sql-generator.js.map +1 -0
  43. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js +32 -0
  44. package/dist/adapters/generic-sql/query/create-sql-query-compiler.js.map +1 -0
  45. package/dist/adapters/generic-sql/query/cursor-utils.js +37 -0
  46. package/dist/adapters/generic-sql/query/cursor-utils.js.map +1 -0
  47. package/dist/adapters/generic-sql/query/dialect/mysql.js +33 -0
  48. package/dist/adapters/generic-sql/query/dialect/mysql.js.map +1 -0
  49. package/dist/adapters/generic-sql/query/dialect/postgres.js +32 -0
  50. package/dist/adapters/generic-sql/query/dialect/postgres.js.map +1 -0
  51. package/dist/adapters/generic-sql/query/dialect/sqlite.js +32 -0
  52. package/dist/adapters/generic-sql/query/dialect/sqlite.js.map +1 -0
  53. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js +152 -0
  54. package/dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map +1 -0
  55. package/dist/adapters/generic-sql/query/select-builder.js +69 -0
  56. package/dist/adapters/generic-sql/query/select-builder.js.map +1 -0
  57. package/dist/adapters/generic-sql/query/sql-query-compiler.js +145 -0
  58. package/dist/adapters/generic-sql/query/sql-query-compiler.js.map +1 -0
  59. package/dist/adapters/generic-sql/query/where-builder.js +129 -0
  60. package/dist/adapters/generic-sql/query/where-builder.js.map +1 -0
  61. package/dist/adapters/generic-sql/result-interpreter.js +74 -0
  62. package/dist/adapters/generic-sql/result-interpreter.js.map +1 -0
  63. package/dist/adapters/generic-sql/uow-decoder.js +105 -0
  64. package/dist/adapters/generic-sql/uow-decoder.js.map +1 -0
  65. package/dist/adapters/generic-sql/uow-encoder.js +93 -0
  66. package/dist/adapters/generic-sql/uow-encoder.js.map +1 -0
  67. package/dist/adapters/kysely/kysely-adapter.d.ts +5 -16
  68. package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
  69. package/dist/adapters/kysely/kysely-adapter.js +6 -159
  70. package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
  71. package/dist/adapters/{drizzle/drizzle-query.js → shared/from-unit-of-work-compiler.js} +48 -62
  72. package/dist/adapters/shared/from-unit-of-work-compiler.js.map +1 -0
  73. package/dist/adapters/{kysely/kysely-shared.d.ts → shared/table-name-mapper.d.ts} +3 -2
  74. package/dist/adapters/shared/table-name-mapper.d.ts.map +1 -0
  75. package/dist/adapters/shared/table-name-mapper.js +43 -0
  76. package/dist/adapters/shared/table-name-mapper.js.map +1 -0
  77. package/dist/adapters/shared/uow-operation-compiler.js +105 -0
  78. package/dist/adapters/shared/uow-operation-compiler.js.map +1 -0
  79. package/dist/db-fragment-definition-builder.d.ts +186 -0
  80. package/dist/db-fragment-definition-builder.d.ts.map +1 -0
  81. package/dist/db-fragment-definition-builder.js +207 -0
  82. package/dist/db-fragment-definition-builder.js.map +1 -0
  83. package/dist/fragments/internal-fragment.d.ts +53 -0
  84. package/dist/fragments/internal-fragment.d.ts.map +1 -0
  85. package/dist/fragments/internal-fragment.js +111 -0
  86. package/dist/fragments/internal-fragment.js.map +1 -0
  87. package/dist/hooks/hooks.d.ts +51 -0
  88. package/dist/hooks/hooks.d.ts.map +1 -0
  89. package/dist/hooks/hooks.js +88 -0
  90. package/dist/hooks/hooks.js.map +1 -0
  91. package/dist/migration-engine/generation-engine.d.ts +0 -2
  92. package/dist/migration-engine/generation-engine.d.ts.map +1 -1
  93. package/dist/migration-engine/generation-engine.js +38 -56
  94. package/dist/migration-engine/generation-engine.js.map +1 -1
  95. package/dist/mod.d.ts +35 -23
  96. package/dist/mod.d.ts.map +1 -1
  97. package/dist/mod.js +48 -45
  98. package/dist/mod.js.map +1 -1
  99. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js +165 -0
  100. package/dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map +1 -0
  101. package/dist/packages/fragno/dist/api/bind-services.js +20 -0
  102. package/dist/packages/fragno/dist/api/bind-services.js.map +1 -0
  103. package/dist/packages/fragno/dist/api/error.js +48 -0
  104. package/dist/packages/fragno/dist/api/error.js.map +1 -0
  105. package/dist/packages/fragno/dist/api/fragment-definition-builder.js +320 -0
  106. package/dist/packages/fragno/dist/api/fragment-definition-builder.js.map +1 -0
  107. package/dist/packages/fragno/dist/api/fragment-instantiator.js +525 -0
  108. package/dist/packages/fragno/dist/api/fragment-instantiator.js.map +1 -0
  109. package/dist/packages/fragno/dist/api/fragno-response.js +73 -0
  110. package/dist/packages/fragno/dist/api/fragno-response.js.map +1 -0
  111. package/dist/packages/fragno/dist/api/internal/response-stream.js +81 -0
  112. package/dist/packages/fragno/dist/api/internal/response-stream.js.map +1 -0
  113. package/dist/packages/fragno/dist/api/internal/route.js +10 -0
  114. package/dist/packages/fragno/dist/api/internal/route.js.map +1 -0
  115. package/dist/packages/fragno/dist/api/mutable-request-state.js +97 -0
  116. package/dist/packages/fragno/dist/api/mutable-request-state.js.map +1 -0
  117. package/dist/packages/fragno/dist/api/request-context-storage.js +43 -0
  118. package/dist/packages/fragno/dist/api/request-context-storage.js.map +1 -0
  119. package/dist/packages/fragno/dist/api/request-input-context.js +118 -0
  120. package/dist/packages/fragno/dist/api/request-input-context.js.map +1 -0
  121. package/dist/packages/fragno/dist/api/request-middleware.js +83 -0
  122. package/dist/packages/fragno/dist/api/request-middleware.js.map +1 -0
  123. package/dist/packages/fragno/dist/api/request-output-context.js +119 -0
  124. package/dist/packages/fragno/dist/api/request-output-context.js.map +1 -0
  125. package/dist/packages/fragno/dist/api/route.js +17 -0
  126. package/dist/packages/fragno/dist/api/route.js.map +1 -0
  127. package/dist/packages/fragno/dist/internal/symbols.js +10 -0
  128. package/dist/packages/fragno/dist/internal/symbols.js.map +1 -0
  129. package/dist/query/column-defaults.js +27 -0
  130. package/dist/query/column-defaults.js.map +1 -0
  131. package/dist/query/cursor.d.ts +14 -6
  132. package/dist/query/cursor.d.ts.map +1 -1
  133. package/dist/query/cursor.js +16 -7
  134. package/dist/query/cursor.js.map +1 -1
  135. package/dist/query/orm/orm.d.ts +1 -1
  136. package/dist/query/orm/orm.js.map +1 -1
  137. package/dist/query/serialize/create-sql-serializer.js +30 -0
  138. package/dist/query/serialize/create-sql-serializer.js.map +1 -0
  139. package/dist/query/serialize/dialect/mysql-serializer.js +87 -0
  140. package/dist/query/serialize/dialect/mysql-serializer.js.map +1 -0
  141. package/dist/query/serialize/dialect/postgres-serializer.js +80 -0
  142. package/dist/query/serialize/dialect/postgres-serializer.js.map +1 -0
  143. package/dist/query/serialize/dialect/sqlite-serializer.js +93 -0
  144. package/dist/query/serialize/dialect/sqlite-serializer.js.map +1 -0
  145. package/dist/query/serialize/sql-serializer.js +67 -0
  146. package/dist/query/serialize/sql-serializer.js.map +1 -0
  147. package/dist/query/{query.d.ts → simple-query-interface.d.ts} +6 -6
  148. package/dist/query/simple-query-interface.d.ts.map +1 -0
  149. package/dist/query/unit-of-work/execute-unit-of-work.d.ts +133 -0
  150. package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -0
  151. package/dist/query/unit-of-work/execute-unit-of-work.js +197 -0
  152. package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -0
  153. package/dist/query/unit-of-work/retry-policy.d.ts +88 -0
  154. package/dist/query/unit-of-work/retry-policy.d.ts.map +1 -0
  155. package/dist/query/unit-of-work/retry-policy.js +61 -0
  156. package/dist/query/unit-of-work/retry-policy.js.map +1 -0
  157. package/dist/query/{unit-of-work.d.ts → unit-of-work/unit-of-work.d.ts} +145 -58
  158. package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -0
  159. package/dist/query/{unit-of-work.js → unit-of-work/unit-of-work.js} +435 -198
  160. package/dist/query/unit-of-work/unit-of-work.js.map +1 -0
  161. package/dist/query/value-decoding.js +71 -0
  162. package/dist/query/value-decoding.js.map +1 -0
  163. package/dist/query/value-encoding.js +124 -0
  164. package/dist/query/value-encoding.js.map +1 -0
  165. package/dist/schema/create.d.ts +3 -0
  166. package/dist/schema/create.d.ts.map +1 -1
  167. package/dist/schema/create.js +4 -0
  168. package/dist/schema/create.js.map +1 -1
  169. package/dist/schema/type-conversion/create-sql-type-mapper.js +29 -0
  170. package/dist/schema/type-conversion/create-sql-type-mapper.js.map +1 -0
  171. package/dist/schema/type-conversion/dialect/mysql.js +57 -0
  172. package/dist/schema/type-conversion/dialect/mysql.js.map +1 -0
  173. package/dist/schema/type-conversion/dialect/postgres.js +56 -0
  174. package/dist/schema/type-conversion/dialect/postgres.js.map +1 -0
  175. package/dist/schema/type-conversion/dialect/sqlite.js +52 -0
  176. package/dist/schema/type-conversion/dialect/sqlite.js.map +1 -0
  177. package/dist/schema/type-conversion/type-mapping.js +63 -0
  178. package/dist/schema/type-conversion/type-mapping.js.map +1 -0
  179. package/dist/sql-driver/connection/connection-provider.d.ts +13 -0
  180. package/dist/sql-driver/connection/connection-provider.d.ts.map +1 -0
  181. package/dist/sql-driver/connection/connection-provider.js +19 -0
  182. package/dist/sql-driver/connection/connection-provider.js.map +1 -0
  183. package/dist/sql-driver/connection/single-connection-provider.js +23 -0
  184. package/dist/sql-driver/connection/single-connection-provider.js.map +1 -0
  185. package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts +7 -0
  186. package/dist/sql-driver/dialect-adapter/dialect-adapter.d.ts.map +1 -0
  187. package/dist/sql-driver/dialects/dialects.d.ts +2 -0
  188. package/dist/sql-driver/dialects/dialects.js +3 -0
  189. package/dist/sql-driver/dialects/durable-object-dialect.d.ts +72 -0
  190. package/dist/sql-driver/dialects/durable-object-dialect.d.ts.map +1 -0
  191. package/dist/sql-driver/dialects/durable-object-dialect.js +130 -0
  192. package/dist/sql-driver/dialects/durable-object-dialect.js.map +1 -0
  193. package/dist/sql-driver/driver/runtime-driver.d.ts +23 -0
  194. package/dist/sql-driver/driver/runtime-driver.d.ts.map +1 -0
  195. package/dist/sql-driver/driver/runtime-driver.js +56 -0
  196. package/dist/sql-driver/driver/runtime-driver.js.map +1 -0
  197. package/dist/sql-driver/query-executor/default-query-executor.js +26 -0
  198. package/dist/sql-driver/query-executor/default-query-executor.js.map +1 -0
  199. package/dist/sql-driver/query-executor/plugin.d.ts +17 -0
  200. package/dist/sql-driver/query-executor/plugin.d.ts.map +1 -0
  201. package/dist/sql-driver/query-executor/query-executor-base.js +25 -0
  202. package/dist/sql-driver/query-executor/query-executor-base.js.map +1 -0
  203. package/dist/sql-driver/query-executor/query-executor.d.ts +36 -0
  204. package/dist/sql-driver/query-executor/query-executor.d.ts.map +1 -0
  205. package/dist/sql-driver/sql-driver-adapter.d.ts +29 -0
  206. package/dist/sql-driver/sql-driver-adapter.d.ts.map +1 -0
  207. package/dist/sql-driver/sql-driver-adapter.js +68 -0
  208. package/dist/sql-driver/sql-driver-adapter.js.map +1 -0
  209. package/dist/sql-driver/sql-driver.d.ts +38 -0
  210. package/dist/sql-driver/sql-driver.d.ts.map +1 -0
  211. package/dist/sql-driver/sql-driver.js +1 -0
  212. package/dist/sql-driver/sql.js +50 -0
  213. package/dist/sql-driver/sql.js.map +1 -0
  214. package/dist/with-database.d.ts +32 -0
  215. package/dist/with-database.d.ts.map +1 -0
  216. package/dist/with-database.js +34 -0
  217. package/dist/with-database.js.map +1 -0
  218. package/package.json +43 -9
  219. package/src/adapters/adapters.ts +23 -4
  220. package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +140 -185
  221. package/src/adapters/drizzle/{drizzle-adapter-sqlite.test.ts → drizzle-adapter-sqlite3.test.ts} +187 -55
  222. package/src/adapters/drizzle/drizzle-adapter.ts +14 -93
  223. package/src/adapters/drizzle/generate.test.ts +102 -269
  224. package/src/adapters/drizzle/generate.ts +89 -63
  225. package/src/adapters/drizzle/migrate-drizzle.test.ts +19 -0
  226. package/src/adapters/drizzle/shared.ts +0 -34
  227. package/src/adapters/drizzle/test-utils.ts +36 -5
  228. package/src/adapters/generic-sql/README.md +14 -0
  229. package/src/adapters/generic-sql/driver-config.ts +144 -0
  230. package/src/adapters/generic-sql/generic-sql-adapter.test.ts +50 -0
  231. package/src/adapters/generic-sql/generic-sql-adapter.ts +146 -0
  232. package/src/adapters/generic-sql/generic-sql-uow-executor.ts +130 -0
  233. package/src/adapters/generic-sql/migration/cold-kysely.ts +55 -0
  234. package/src/adapters/{kysely/migration/execute-mysql.test.ts → generic-sql/migration/dialect/mysql.test.ts} +342 -484
  235. package/src/adapters/generic-sql/migration/dialect/mysql.ts +104 -0
  236. package/src/adapters/generic-sql/migration/dialect/postgres.test.ts +1008 -0
  237. package/src/adapters/generic-sql/migration/dialect/postgres.ts +113 -0
  238. package/src/adapters/{kysely/migration/execute-sqlite.test.ts → generic-sql/migration/dialect/sqlite.test.ts} +307 -510
  239. package/src/adapters/generic-sql/migration/dialect/sqlite.ts +189 -0
  240. package/src/adapters/generic-sql/migration/executor.ts +33 -0
  241. package/src/adapters/generic-sql/migration/prepared-migrations.test.ts +661 -0
  242. package/src/adapters/generic-sql/migration/prepared-migrations.ts +214 -0
  243. package/src/adapters/generic-sql/migration/sql-generator.ts +413 -0
  244. package/src/adapters/generic-sql/query/create-sql-query-compiler.ts +36 -0
  245. package/src/adapters/generic-sql/query/cursor-utils.ts +56 -0
  246. package/src/adapters/generic-sql/query/dialect/mysql.ts +34 -0
  247. package/src/adapters/generic-sql/query/dialect/postgres.ts +32 -0
  248. package/src/adapters/generic-sql/query/dialect/sqlite.ts +32 -0
  249. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.test.ts +1568 -0
  250. package/src/adapters/generic-sql/query/generic-sql-uow-operation-compiler.ts +314 -0
  251. package/src/adapters/generic-sql/query/select-builder.test.ts +256 -0
  252. package/src/adapters/generic-sql/query/select-builder.ts +137 -0
  253. package/src/adapters/generic-sql/query/sql-query-compiler.test.ts +195 -0
  254. package/src/adapters/generic-sql/query/sql-query-compiler.ts +367 -0
  255. package/src/adapters/generic-sql/query/where-builder.test.ts +744 -0
  256. package/src/adapters/generic-sql/query/where-builder.ts +211 -0
  257. package/src/adapters/generic-sql/result-interpreter.ts +102 -0
  258. package/src/adapters/generic-sql/test/generic-drizzle-adapter-sqlite3.test.ts +899 -0
  259. package/src/adapters/generic-sql/uow-decoder.test.ts +399 -0
  260. package/src/adapters/generic-sql/uow-decoder.ts +152 -0
  261. package/src/adapters/generic-sql/uow-encoder.test.ts +183 -0
  262. package/src/adapters/generic-sql/uow-encoder.ts +131 -0
  263. package/src/adapters/kysely/kysely-adapter-pglite.test.ts +90 -96
  264. package/src/adapters/kysely/kysely-adapter-sqlocal.test.ts +215 -0
  265. package/src/adapters/kysely/kysely-adapter.ts +10 -242
  266. package/src/adapters/{drizzle/drizzle-query.ts → shared/from-unit-of-work-compiler.ts} +111 -106
  267. package/src/adapters/shared/table-name-mapper.ts +50 -0
  268. package/src/adapters/shared/uow-operation-compiler.ts +211 -0
  269. package/src/db-fragment-definition-builder.test.ts +887 -0
  270. package/src/db-fragment-definition-builder.ts +737 -0
  271. package/src/db-fragment-instantiator.test.ts +543 -0
  272. package/src/db-fragment-integration.test.ts +406 -0
  273. package/src/fragments/internal-fragment.test.ts +549 -0
  274. package/src/fragments/internal-fragment.ts +249 -0
  275. package/src/hooks/hooks.test.ts +575 -0
  276. package/src/hooks/hooks.ts +179 -0
  277. package/src/migration-engine/generation-engine.test.ts +60 -27
  278. package/src/migration-engine/generation-engine.ts +99 -92
  279. package/src/mod.ts +139 -78
  280. package/src/query/column-defaults.ts +49 -0
  281. package/src/query/cursor.test.ts +147 -3
  282. package/src/query/cursor.ts +25 -8
  283. package/src/query/orm/orm.ts +1 -1
  284. package/src/query/query-type.test.ts +9 -9
  285. package/src/query/serialize/create-sql-serializer.ts +34 -0
  286. package/src/query/serialize/dialect/mysql-serializer.ts +142 -0
  287. package/src/query/serialize/dialect/postgres-serializer.ts +129 -0
  288. package/src/query/serialize/dialect/sqlite-serializer.test.ts +251 -0
  289. package/src/query/serialize/dialect/sqlite-serializer.ts +156 -0
  290. package/src/query/serialize/sql-serializer.ts +143 -0
  291. package/src/query/{query.ts → simple-query-interface.ts} +4 -4
  292. package/src/query/unit-of-work/execute-unit-of-work.test.ts +1310 -0
  293. package/src/query/unit-of-work/execute-unit-of-work.ts +504 -0
  294. package/src/query/unit-of-work/retry-policy.test.ts +217 -0
  295. package/src/query/unit-of-work/retry-policy.ts +141 -0
  296. package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +831 -0
  297. package/src/query/{unit-of-work-types.test.ts → unit-of-work/unit-of-work-types.test.ts} +7 -5
  298. package/src/query/unit-of-work/unit-of-work.test.ts +1716 -0
  299. package/src/query/{unit-of-work.ts → unit-of-work/unit-of-work.ts} +716 -420
  300. package/src/query/{result-transform.test.ts → value-decoding.test.ts} +45 -298
  301. package/src/query/value-decoding.ts +113 -0
  302. package/src/query/value-encoding.test.ts +390 -0
  303. package/src/query/value-encoding.ts +168 -0
  304. package/src/schema/create.test.ts +5 -1
  305. package/src/schema/create.ts +5 -0
  306. package/src/schema/serialize.test.ts +165 -407
  307. package/src/schema/type-conversion/create-sql-type-mapper.ts +28 -0
  308. package/src/schema/type-conversion/dialect/mysql.ts +64 -0
  309. package/src/schema/type-conversion/dialect/postgres.ts +62 -0
  310. package/src/schema/type-conversion/dialect/sqlite.ts +63 -0
  311. package/src/schema/type-conversion/type-mapping.test.ts +137 -0
  312. package/src/schema/type-conversion/type-mapping.ts +153 -0
  313. package/src/shared/connection-pool.ts +5 -5
  314. package/src/sql-driver/better-sqlite3.test.ts +126 -0
  315. package/src/sql-driver/connection/connection-provider.ts +27 -0
  316. package/src/sql-driver/connection/single-connection-provider.ts +42 -0
  317. package/src/sql-driver/dialect-adapter/dialect-adapter.ts +9 -0
  318. package/src/sql-driver/dialect-adapter/sqlite-dialect-adapter.ts +7 -0
  319. package/src/sql-driver/dialects/dialects.ts +1 -0
  320. package/src/sql-driver/dialects/durable-object-dialect.ts +260 -0
  321. package/src/sql-driver/driver/runtime-driver.ts +91 -0
  322. package/src/sql-driver/query-executor/default-query-executor.ts +38 -0
  323. package/src/sql-driver/query-executor/plugin.ts +22 -0
  324. package/src/sql-driver/query-executor/query-executor-base.ts +53 -0
  325. package/src/sql-driver/query-executor/query-executor.ts +44 -0
  326. package/src/sql-driver/sql-driver-adapter.ts +96 -0
  327. package/src/sql-driver/sql-driver.ts +53 -0
  328. package/src/sql-driver/sql.ts +57 -0
  329. package/src/sql-driver/sqlocal.test.ts +117 -0
  330. package/src/with-database.ts +152 -0
  331. package/tsdown.config.ts +8 -2
  332. package/dist/adapters/drizzle/drizzle-connection-pool.js +0 -40
  333. package/dist/adapters/drizzle/drizzle-connection-pool.js.map +0 -1
  334. package/dist/adapters/drizzle/drizzle-query.d.ts +0 -23
  335. package/dist/adapters/drizzle/drizzle-query.d.ts.map +0 -1
  336. package/dist/adapters/drizzle/drizzle-query.js.map +0 -1
  337. package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts +0 -10
  338. package/dist/adapters/drizzle/drizzle-uow-compiler.d.ts.map +0 -1
  339. package/dist/adapters/drizzle/drizzle-uow-compiler.js +0 -315
  340. package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +0 -1
  341. package/dist/adapters/drizzle/drizzle-uow-decoder.js +0 -116
  342. package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +0 -1
  343. package/dist/adapters/drizzle/drizzle-uow-executor.js +0 -149
  344. package/dist/adapters/drizzle/drizzle-uow-executor.js.map +0 -1
  345. package/dist/adapters/drizzle/join-column-utils.js +0 -28
  346. package/dist/adapters/drizzle/join-column-utils.js.map +0 -1
  347. package/dist/adapters/drizzle/shared.d.ts +0 -14
  348. package/dist/adapters/drizzle/shared.d.ts.map +0 -1
  349. package/dist/adapters/drizzle/shared.js +0 -35
  350. package/dist/adapters/drizzle/shared.js.map +0 -1
  351. package/dist/adapters/kysely/kysely-connection-pool.js +0 -41
  352. package/dist/adapters/kysely/kysely-connection-pool.js.map +0 -1
  353. package/dist/adapters/kysely/kysely-query-builder.js +0 -321
  354. package/dist/adapters/kysely/kysely-query-builder.js.map +0 -1
  355. package/dist/adapters/kysely/kysely-query-compiler.js +0 -66
  356. package/dist/adapters/kysely/kysely-query-compiler.js.map +0 -1
  357. package/dist/adapters/kysely/kysely-query.d.ts +0 -22
  358. package/dist/adapters/kysely/kysely-query.d.ts.map +0 -1
  359. package/dist/adapters/kysely/kysely-query.js +0 -223
  360. package/dist/adapters/kysely/kysely-query.js.map +0 -1
  361. package/dist/adapters/kysely/kysely-shared.d.ts.map +0 -1
  362. package/dist/adapters/kysely/kysely-shared.js +0 -18
  363. package/dist/adapters/kysely/kysely-shared.js.map +0 -1
  364. package/dist/adapters/kysely/kysely-uow-compiler.js +0 -170
  365. package/dist/adapters/kysely/kysely-uow-compiler.js.map +0 -1
  366. package/dist/adapters/kysely/kysely-uow-executor.js +0 -89
  367. package/dist/adapters/kysely/kysely-uow-executor.js.map +0 -1
  368. package/dist/adapters/kysely/migration/execute-base.js +0 -128
  369. package/dist/adapters/kysely/migration/execute-base.js.map +0 -1
  370. package/dist/adapters/kysely/migration/execute-factory.js +0 -34
  371. package/dist/adapters/kysely/migration/execute-factory.js.map +0 -1
  372. package/dist/adapters/kysely/migration/execute-mssql.js +0 -112
  373. package/dist/adapters/kysely/migration/execute-mssql.js.map +0 -1
  374. package/dist/adapters/kysely/migration/execute-mysql.js +0 -93
  375. package/dist/adapters/kysely/migration/execute-mysql.js.map +0 -1
  376. package/dist/adapters/kysely/migration/execute-postgres.js +0 -104
  377. package/dist/adapters/kysely/migration/execute-postgres.js.map +0 -1
  378. package/dist/adapters/kysely/migration/execute-sqlite.js +0 -123
  379. package/dist/adapters/kysely/migration/execute-sqlite.js.map +0 -1
  380. package/dist/adapters/kysely/migration/execute.js +0 -34
  381. package/dist/adapters/kysely/migration/execute.js.map +0 -1
  382. package/dist/bind-services.d.ts +0 -7
  383. package/dist/bind-services.d.ts.map +0 -1
  384. package/dist/bind-services.js +0 -14
  385. package/dist/bind-services.js.map +0 -1
  386. package/dist/fragment.d.ts +0 -173
  387. package/dist/fragment.d.ts.map +0 -1
  388. package/dist/fragment.js +0 -191
  389. package/dist/fragment.js.map +0 -1
  390. package/dist/migration-engine/create.d.ts +0 -37
  391. package/dist/migration-engine/create.d.ts.map +0 -1
  392. package/dist/migration-engine/create.js +0 -58
  393. package/dist/migration-engine/create.js.map +0 -1
  394. package/dist/migration-engine/shared.d.ts +0 -112
  395. package/dist/migration-engine/shared.d.ts.map +0 -1
  396. package/dist/query/query.d.ts.map +0 -1
  397. package/dist/query/result-transform.js +0 -168
  398. package/dist/query/result-transform.js.map +0 -1
  399. package/dist/query/unit-of-work.d.ts.map +0 -1
  400. package/dist/query/unit-of-work.js.map +0 -1
  401. package/dist/schema/serialize.js +0 -106
  402. package/dist/schema/serialize.js.map +0 -1
  403. package/dist/shared/settings-schema.js +0 -36
  404. package/dist/shared/settings-schema.js.map +0 -1
  405. package/src/adapters/drizzle/drizzle-adapter.test.ts +0 -170
  406. package/src/adapters/drizzle/drizzle-connection-pool.ts +0 -66
  407. package/src/adapters/drizzle/drizzle-query.test.ts +0 -499
  408. package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +0 -1383
  409. package/src/adapters/drizzle/drizzle-uow-compiler.ts +0 -636
  410. package/src/adapters/drizzle/drizzle-uow-decoder.ts +0 -218
  411. package/src/adapters/drizzle/drizzle-uow-executor.ts +0 -276
  412. package/src/adapters/drizzle/join-column-utils.test.ts +0 -79
  413. package/src/adapters/drizzle/join-column-utils.ts +0 -39
  414. package/src/adapters/kysely/kysely-connection-pool.ts +0 -70
  415. package/src/adapters/kysely/kysely-query-builder.test.ts +0 -1344
  416. package/src/adapters/kysely/kysely-query-builder.ts +0 -666
  417. package/src/adapters/kysely/kysely-query-compiler.ts +0 -132
  418. package/src/adapters/kysely/kysely-query.test.ts +0 -498
  419. package/src/adapters/kysely/kysely-query.ts +0 -390
  420. package/src/adapters/kysely/kysely-shared.ts +0 -23
  421. package/src/adapters/kysely/kysely-uow-compiler.test.ts +0 -998
  422. package/src/adapters/kysely/kysely-uow-compiler.ts +0 -318
  423. package/src/adapters/kysely/kysely-uow-executor.ts +0 -145
  424. package/src/adapters/kysely/kysely-uow-joins.test.ts +0 -811
  425. package/src/adapters/kysely/migration/execute-base.ts +0 -256
  426. package/src/adapters/kysely/migration/execute-factory.ts +0 -53
  427. package/src/adapters/kysely/migration/execute-mssql.ts +0 -250
  428. package/src/adapters/kysely/migration/execute-mysql.ts +0 -211
  429. package/src/adapters/kysely/migration/execute-postgres.test.ts +0 -2657
  430. package/src/adapters/kysely/migration/execute-postgres.ts +0 -234
  431. package/src/adapters/kysely/migration/execute-sqlite.ts +0 -247
  432. package/src/adapters/kysely/migration/execute.ts +0 -50
  433. package/src/adapters/kysely/migration/kysely-migrator.test.ts +0 -261
  434. package/src/bind-services.test.ts +0 -214
  435. package/src/bind-services.ts +0 -37
  436. package/src/db-fragment.test.ts +0 -800
  437. package/src/fragment.ts +0 -727
  438. package/src/query/result-transform.ts +0 -271
  439. package/src/query/unit-of-work-multi-schema.test.ts +0 -64
  440. package/src/query/unit-of-work.test.ts +0 -943
  441. package/src/schema/serialize.ts +0 -396
  442. package/src/shared/settings-schema.ts +0 -61
  443. package/src/uow-context-integration.test.ts +0 -102
  444. package/src/uow-context.test.ts +0 -182
  445. /package/dist/query/{query.js → simple-query-interface.js} +0 -0
@@ -1,256 +0,0 @@
1
- import { type ColumnBuilderCallback, type Kysely, type RawBuilder, sql } from "kysely";
2
- import type {
3
- ColumnInfo,
4
- MigrationOperation,
5
- MigrationOperationMetadata,
6
- } from "../../../migration-engine/shared";
7
- import type { SQLProvider } from "../../../shared/providers";
8
- import { schemaToDBType } from "../../../schema/serialize";
9
- import type { TableNameMapper } from "../kysely-shared";
10
- import { SETTINGS_TABLE_NAME } from "../../../shared/settings-schema";
11
-
12
- export type ExecuteNode = {
13
- compile(): { sql: string; parameters: readonly unknown[] };
14
- execute(): Promise<unknown>;
15
- };
16
-
17
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
18
- type KyselyAny = Kysely<any>;
19
-
20
- /**
21
- * Migration executor interface.
22
- * Each provider implements this to handle database-specific migration execution.
23
- */
24
- export interface MigrationExecutor<
25
- TMeta extends MigrationOperationMetadata = MigrationOperationMetadata,
26
- > {
27
- /**
28
- * Preprocess operations before execution.
29
- * Allows executors to combine, split, or transform operations based on provider capabilities.
30
- *
31
- * For example, SQLite can merge add-foreign-key operations into create-table operations.
32
- */
33
- preprocessOperations(operations: MigrationOperation[]): MigrationOperation<TMeta>[];
34
-
35
- /**
36
- * Execute a single migration operation.
37
- */
38
- executeOperation(
39
- operation: MigrationOperation<TMeta>,
40
- mapper?: TableNameMapper,
41
- ): ExecuteNode | ExecuteNode[];
42
- }
43
-
44
- /**
45
- * Base migration executor with common functionality.
46
- * Provider-specific executors should extend this class.
47
- */
48
- export abstract class BaseMigrationExecutor<
49
- TMeta extends MigrationOperationMetadata = MigrationOperationMetadata,
50
- > implements MigrationExecutor<TMeta>
51
- {
52
- constructor(
53
- protected readonly db: KyselyAny,
54
- protected readonly provider: SQLProvider,
55
- ) {}
56
-
57
- /**
58
- * Default implementation: no preprocessing, no metadata.
59
- * Providers can override to transform operations.
60
- */
61
- preprocessOperations(operations: MigrationOperation[]): MigrationOperation<TMeta>[] {
62
- return operations as MigrationOperation<TMeta>[];
63
- }
64
-
65
- /**
66
- * Execute a single migration operation.
67
- * Must be implemented by provider-specific executors.
68
- */
69
- abstract executeOperation(
70
- operation: MigrationOperation<TMeta>,
71
- mapper?: TableNameMapper,
72
- ): ExecuteNode | ExecuteNode[];
73
-
74
- /**
75
- * Get table name, applying namespace mapping if provided.
76
- * Settings table is never namespaced.
77
- */
78
- protected getTableName(tableName: string, mapper?: TableNameMapper): string {
79
- return tableName === SETTINGS_TABLE_NAME
80
- ? tableName
81
- : mapper
82
- ? mapper.toPhysical(tableName)
83
- : tableName;
84
- }
85
-
86
- /**
87
- * Get column builder callback for creating/altering columns.
88
- */
89
- protected getColumnBuilderCallback(col: ColumnInfo): ColumnBuilderCallback {
90
- return (build) => {
91
- if (!col.isNullable) {
92
- build = build.notNull();
93
- }
94
-
95
- // Internal ID is the primary key with auto-increment
96
- if (col.role === "internal-id") {
97
- build = build.primaryKey();
98
- // Auto-increment for internal ID
99
- if (this.provider === "postgresql" || this.provider === "cockroachdb") {
100
- // SERIAL/BIGSERIAL handles auto-increment
101
- // Already handled in schemaToDBType
102
- } else if (this.provider === "mysql") {
103
- build = build.autoIncrement();
104
- } else if (this.provider === "sqlite") {
105
- build = build.autoIncrement();
106
- } else if (this.provider === "mssql") {
107
- build = build.identity();
108
- }
109
- }
110
-
111
- // External ID must be unique
112
- if (col.role === "external-id") {
113
- build = build.unique();
114
- }
115
-
116
- const defaultValue = this.defaultValueToDB(col);
117
- if (defaultValue) {
118
- build = build.defaultTo(defaultValue);
119
- }
120
- return build;
121
- };
122
- }
123
-
124
- /**
125
- * Convert column default value to database representation.
126
- */
127
- protected defaultValueToDB(column: ColumnInfo): RawBuilder<unknown> | undefined {
128
- const value = column.default;
129
- if (!value) {
130
- return undefined;
131
- }
132
-
133
- // MySQL doesn't support default values for TEXT columns
134
- if (this.provider === "mysql" && column.type === "string") {
135
- return undefined;
136
- }
137
-
138
- // Static default values: defaultTo(value)
139
- if ("value" in value && value.value !== undefined) {
140
- return sql.lit(value.value);
141
- }
142
-
143
- // Database-level special functions: defaultTo(b => b.now())
144
- if ("dbSpecial" in value && value.dbSpecial === "now") {
145
- return sql`CURRENT_TIMESTAMP`;
146
- }
147
-
148
- // Runtime defaults (defaultTo$) are NOT generated in SQL - they're handled in application code
149
- if ("runtime" in value) {
150
- return undefined;
151
- }
152
-
153
- return undefined;
154
- }
155
-
156
- /**
157
- * Wrap a raw SQL builder in an ExecuteNode.
158
- */
159
- protected rawToNode(raw: RawBuilder<unknown>): ExecuteNode {
160
- return {
161
- compile: () => raw.compile(this.db),
162
- execute: () => raw.execute(this.db),
163
- };
164
- }
165
-
166
- /**
167
- * Get the database type string for a column.
168
- */
169
- protected getDBType(col: ColumnInfo): string {
170
- return schemaToDBType(col, this.provider);
171
- }
172
- }
173
-
174
- // ============================================================================
175
- // Provider-Specific Helper Functions
176
- // ============================================================================
177
-
178
- /**
179
- * Returns the appropriate foreign key action based on the provider.
180
- * MSSQL doesn't support RESTRICT, so we use NO ACTION (functionally equivalent).
181
- */
182
- export function getForeignKeyAction(provider: SQLProvider): "restrict" | "no action" {
183
- return provider === "mssql" ? "no action" : "restrict";
184
- }
185
-
186
- /**
187
- * Generates MSSQL default constraint name following the DF_tableName_columnName pattern.
188
- */
189
- export function getMssqlDefaultConstraintName(tableName: string, columnName: string): string {
190
- const MSSQL_DEFAULT_CONSTRAINT_PREFIX = "DF" as const;
191
- return `${MSSQL_DEFAULT_CONSTRAINT_PREFIX}_${tableName}_${columnName}`;
192
- }
193
-
194
- /**
195
- * Generate SQL to drop MSSQL default constraint.
196
- */
197
- export function mssqlDropDefaultConstraint(tableName: string, columnName: string) {
198
- return sql`
199
- DECLARE @ConstraintName NVARCHAR(200);
200
-
201
- SELECT @ConstraintName = dc.name
202
- FROM sys.default_constraints dc
203
- JOIN sys.columns c ON dc.parent_object_id = c.object_id AND dc.parent_column_id = c.column_id
204
- JOIN sys.tables t ON t.object_id = c.object_id
205
- JOIN sys.schemas s ON t.schema_id = s.schema_id
206
- WHERE s.name = 'dbo' AND t.name = ${sql.lit(tableName)} AND c.name = ${sql.lit(columnName)};
207
-
208
- IF @ConstraintName IS NOT NULL
209
- BEGIN
210
- EXEC('ALTER TABLE [dbo].[' + ${sql.lit(tableName)} + '] DROP CONSTRAINT [' + @ConstraintName + ']');
211
- END`;
212
- }
213
-
214
- /**
215
- * Create a unique index with provider-specific handling.
216
- */
217
- export function createUniqueIndex(
218
- db: KyselyAny,
219
- name: string,
220
- tableName: string,
221
- cols: string[],
222
- provider: SQLProvider,
223
- ) {
224
- const query = db.schema.createIndex(name).on(tableName).columns(cols).unique();
225
-
226
- if (provider === "mssql") {
227
- // MSSQL: ignore null values in unique indexes by default
228
- return query.where((b) => {
229
- return b.and(cols.map((col) => b(col, "is not", null)));
230
- });
231
- }
232
-
233
- return query;
234
- }
235
-
236
- /**
237
- * Drop a unique index with provider-specific handling.
238
- */
239
- export function dropUniqueIndex(
240
- db: KyselyAny,
241
- name: string,
242
- tableName: string,
243
- provider: SQLProvider,
244
- ) {
245
- let query = db.schema.dropIndex(name).ifExists();
246
-
247
- if (provider === "cockroachdb") {
248
- query = query.cascade();
249
- }
250
-
251
- if (provider === "mssql") {
252
- query = query.on(tableName);
253
- }
254
-
255
- return query;
256
- }
@@ -1,53 +0,0 @@
1
- import type { Kysely } from "kysely";
2
- import type { KyselyConfig } from "../kysely-adapter";
3
- import type { MigrationExecutor } from "./execute-base";
4
- import { SqliteMigrationExecutor } from "./execute-sqlite";
5
- import { PostgresMigrationExecutor } from "./execute-postgres";
6
- import { MysqlMigrationExecutor } from "./execute-mysql";
7
- import { MssqlMigrationExecutor } from "./execute-mssql";
8
-
9
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
10
- type KyselyAny = Kysely<any>;
11
-
12
- /**
13
- * Create a provider-specific migration executor.
14
- */
15
- export function createMigrationExecutor(config: KyselyConfig): MigrationExecutor {
16
- const { provider } = config;
17
- // Resolve db instance synchronously
18
- // Safe cast: This is only called from synchronous contexts where the db must be available
19
- const dbOrFactory = config.db;
20
- let kysely: KyselyAny;
21
-
22
- if (typeof dbOrFactory === "function") {
23
- const result = dbOrFactory();
24
- // Check if it's a Promise - if so, this is an error in usage
25
- if (result && typeof (result as Promise<unknown>).then === "function") {
26
- throw new Error(
27
- "Cannot create migration executor with async database factory. " +
28
- "Database must be initialized before calling preprocessOperations.",
29
- );
30
- }
31
- // Safe cast: We've verified it's not a Promise
32
- kysely = result as KyselyAny;
33
- } else {
34
- kysely = dbOrFactory;
35
- }
36
-
37
- switch (provider) {
38
- case "sqlite":
39
- return new SqliteMigrationExecutor(kysely, provider);
40
- case "postgresql":
41
- case "cockroachdb":
42
- return new PostgresMigrationExecutor(kysely, provider);
43
- case "mysql":
44
- return new MysqlMigrationExecutor(kysely, provider);
45
- case "mssql":
46
- return new MssqlMigrationExecutor(kysely, provider);
47
- default: {
48
- // Ensure exhaustive switch
49
- const _exhaustive: never = provider;
50
- throw new Error(`Unsupported provider: ${_exhaustive}`);
51
- }
52
- }
53
- }
@@ -1,250 +0,0 @@
1
- import { sql } from "kysely";
2
- import {
3
- type ColumnOperation,
4
- isUpdated,
5
- type MigrationOperation,
6
- } from "../../../migration-engine/shared";
7
- import type { TableNameMapper } from "../kysely-shared";
8
- import {
9
- BaseMigrationExecutor,
10
- createUniqueIndex,
11
- dropUniqueIndex,
12
- type ExecuteNode,
13
- getForeignKeyAction,
14
- getMssqlDefaultConstraintName,
15
- mssqlDropDefaultConstraint,
16
- } from "./execute-base";
17
-
18
- const errors = {
19
- IdColumnUpdate:
20
- "ID columns cannot be updated. Not every database supports updating primary keys and often requires workarounds.",
21
- } as const;
22
-
23
- /**
24
- * MSSQL-specific migration executor.
25
- * Handles complex default constraint management and uses sp_rename for table renames.
26
- */
27
- export class MssqlMigrationExecutor extends BaseMigrationExecutor {
28
- executeOperation(
29
- operation: MigrationOperation,
30
- mapper?: TableNameMapper,
31
- ): ExecuteNode | ExecuteNode[] {
32
- switch (operation.type) {
33
- case "create-table":
34
- return this.createTable(operation, mapper);
35
- case "rename-table":
36
- return this.renameTable(operation, mapper);
37
- case "alter-table":
38
- return this.alterTable(operation, mapper);
39
- case "drop-table":
40
- return this.dropTable(operation, mapper);
41
- case "add-foreign-key":
42
- return this.addForeignKey(operation, mapper);
43
- case "drop-foreign-key":
44
- return this.dropForeignKey(operation, mapper);
45
- case "add-index":
46
- return this.addIndex(operation, mapper);
47
- case "drop-index":
48
- return this.dropIndex(operation, mapper);
49
- case "custom":
50
- return this.handleCustomOperation(operation);
51
- }
52
- }
53
-
54
- private createTable(
55
- operation: Extract<MigrationOperation, { type: "create-table" }>,
56
- mapper?: TableNameMapper,
57
- ): ExecuteNode {
58
- const tableName = this.getTableName(operation.name, mapper);
59
- let builder = this.db.schema.createTable(tableName);
60
-
61
- // Add columns
62
- for (const columnInfo of operation.columns) {
63
- builder = builder.addColumn(
64
- columnInfo.name,
65
- sql.raw(this.getDBType(columnInfo)),
66
- this.getColumnBuilderCallback(columnInfo),
67
- );
68
- }
69
-
70
- return builder;
71
- }
72
-
73
- private renameTable(
74
- operation: Extract<MigrationOperation, { type: "rename-table" }>,
75
- mapper?: TableNameMapper,
76
- ): ExecuteNode {
77
- // MSSQL uses sp_rename procedure
78
- return this.rawToNode(
79
- sql`EXEC sp_rename ${sql.lit(this.getTableName(operation.from, mapper))}, ${sql.lit(this.getTableName(operation.to, mapper))}`,
80
- );
81
- }
82
-
83
- private alterTable(
84
- operation: Extract<MigrationOperation, { type: "alter-table" }>,
85
- mapper?: TableNameMapper,
86
- ): ExecuteNode[] {
87
- const results: ExecuteNode[] = [];
88
- const tableName = this.getTableName(operation.name, mapper);
89
-
90
- for (const columnOp of operation.value) {
91
- results.push(...this.executeColumnOperation(tableName, columnOp));
92
- }
93
-
94
- return results;
95
- }
96
-
97
- private executeColumnOperation(tableName: string, operation: ColumnOperation): ExecuteNode[] {
98
- const next = () => this.db.schema.alterTable(tableName);
99
- const results: ExecuteNode[] = [];
100
-
101
- switch (operation.type) {
102
- case "rename-column":
103
- results.push(next().renameColumn(operation.from, operation.to));
104
- return results;
105
-
106
- case "drop-column":
107
- results.push(next().dropColumn(operation.name));
108
- return results;
109
-
110
- case "create-column": {
111
- const col = operation.value;
112
- results.push(
113
- next().addColumn(
114
- col.name,
115
- sql.raw(this.getDBType(col)),
116
- this.getColumnBuilderCallback(col),
117
- ),
118
- );
119
- return results;
120
- }
121
-
122
- case "update-column": {
123
- const col = operation.value;
124
-
125
- if (col.role === "external-id" || col.role === "internal-id") {
126
- throw new Error(errors.IdColumnUpdate);
127
- }
128
-
129
- if (!isUpdated(operation)) {
130
- return results;
131
- }
132
-
133
- // MSSQL requires dropping and recreating default constraints when changing data type or default value
134
- const mssqlRecreateDefaultConstraint = operation.updateDataType || operation.updateDefault;
135
-
136
- if (mssqlRecreateDefaultConstraint) {
137
- results.push(this.rawToNode(mssqlDropDefaultConstraint(tableName, col.name)));
138
- }
139
-
140
- if (operation.updateDataType) {
141
- const dbType = sql.raw(this.getDBType(col));
142
- results.push(next().alterColumn(operation.name, (b) => b.setDataType(dbType)));
143
- }
144
-
145
- if (operation.updateNullable) {
146
- results.push(
147
- next().alterColumn(operation.name, (build) =>
148
- col.isNullable ? build.dropNotNull() : build.setNotNull(),
149
- ),
150
- );
151
- }
152
-
153
- if (mssqlRecreateDefaultConstraint) {
154
- const defaultValue = this.defaultValueToDB(col);
155
-
156
- if (defaultValue) {
157
- const constraintName = getMssqlDefaultConstraintName(tableName, col.name);
158
- results.push(
159
- this.rawToNode(
160
- sql`ALTER TABLE ${sql.ref(tableName)} ADD CONSTRAINT ${sql.ref(constraintName)} DEFAULT ${defaultValue} FOR ${sql.ref(col.name)}`,
161
- ),
162
- );
163
- }
164
- } else if (operation.updateDefault) {
165
- const defaultValue = this.defaultValueToDB(col);
166
- results.push(
167
- next().alterColumn(operation.name, (build) => {
168
- if (!defaultValue) {
169
- return build.dropDefault();
170
- }
171
- return build.setDefault(defaultValue);
172
- }),
173
- );
174
- }
175
-
176
- return results;
177
- }
178
- }
179
- }
180
-
181
- private dropTable(
182
- operation: Extract<MigrationOperation, { type: "drop-table" }>,
183
- mapper?: TableNameMapper,
184
- ): ExecuteNode {
185
- return this.db.schema.dropTable(this.getTableName(operation.name, mapper));
186
- }
187
-
188
- private addForeignKey(
189
- operation: Extract<MigrationOperation, { type: "add-foreign-key" }>,
190
- mapper?: TableNameMapper,
191
- ): ExecuteNode {
192
- const { table, value } = operation;
193
- const action = getForeignKeyAction(this.provider);
194
-
195
- return this.db.schema
196
- .alterTable(this.getTableName(table, mapper))
197
- .addForeignKeyConstraint(
198
- value.name,
199
- value.columns,
200
- this.getTableName(value.referencedTable, mapper),
201
- value.referencedColumns,
202
- (b) => b.onUpdate(action).onDelete(action),
203
- );
204
- }
205
-
206
- private dropForeignKey(
207
- operation: Extract<MigrationOperation, { type: "drop-foreign-key" }>,
208
- mapper?: TableNameMapper,
209
- ): ExecuteNode {
210
- const { table, name } = operation;
211
- return this.db.schema
212
- .alterTable(this.getTableName(table, mapper))
213
- .dropConstraint(name)
214
- .ifExists();
215
- }
216
-
217
- private addIndex(
218
- operation: Extract<MigrationOperation, { type: "add-index" }>,
219
- mapper?: TableNameMapper,
220
- ): ExecuteNode {
221
- const tableName = this.getTableName(operation.table, mapper);
222
-
223
- if (operation.unique) {
224
- return createUniqueIndex(
225
- this.db,
226
- operation.name,
227
- tableName,
228
- operation.columns,
229
- this.provider,
230
- );
231
- }
232
-
233
- return this.db.schema.createIndex(operation.name).on(tableName).columns(operation.columns);
234
- }
235
-
236
- private dropIndex(
237
- operation: Extract<MigrationOperation, { type: "drop-index" }>,
238
- mapper?: TableNameMapper,
239
- ): ExecuteNode {
240
- const tableName = this.getTableName(operation.table, mapper);
241
- return dropUniqueIndex(this.db, operation.name, tableName, this.provider);
242
- }
243
-
244
- private handleCustomOperation(
245
- operation: Extract<MigrationOperation, { type: "custom" }>,
246
- ): ExecuteNode {
247
- const statement = sql.raw(operation["sql"] as string);
248
- return this.rawToNode(statement);
249
- }
250
- }