kysely 0.27.6 → 0.28.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 (363) hide show
  1. package/README.md +169 -1
  2. package/deno.check.d.ts +7 -0
  3. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  4. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +6 -3
  5. package/dist/cjs/dialect/mssql/mssql-driver.js +33 -19
  6. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  7. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +11 -0
  8. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +4 -0
  9. package/dist/cjs/dialect/mysql/mysql-driver.js +27 -12
  10. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +4 -0
  11. package/dist/cjs/dialect/postgres/postgres-driver.js +28 -18
  12. package/dist/cjs/dialect/postgres/postgres-introspector.js +7 -17
  13. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +4 -0
  14. package/dist/cjs/dialect/sqlite/sqlite-driver.js +19 -13
  15. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  16. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +4 -0
  17. package/dist/cjs/driver/database-connection.d.ts +0 -4
  18. package/dist/cjs/driver/driver.d.ts +17 -0
  19. package/dist/cjs/driver/driver.js +13 -1
  20. package/dist/cjs/driver/dummy-driver.d.ts +3 -0
  21. package/dist/cjs/driver/dummy-driver.js +9 -0
  22. package/dist/cjs/driver/runtime-driver.d.ts +4 -0
  23. package/dist/cjs/driver/runtime-driver.js +43 -3
  24. package/dist/cjs/expression/expression-builder.d.ts +7 -10
  25. package/dist/cjs/helpers/postgres.d.ts +48 -0
  26. package/dist/cjs/helpers/postgres.js +50 -0
  27. package/dist/cjs/index.d.ts +13 -2
  28. package/dist/cjs/index.js +13 -2
  29. package/dist/cjs/kysely.d.ts +339 -2
  30. package/dist/cjs/kysely.js +465 -11
  31. package/dist/cjs/migration/migrator.d.ts +8 -0
  32. package/dist/cjs/migration/migrator.js +1 -1
  33. package/dist/cjs/operation-node/aggregate-function-node.d.ts +2 -1
  34. package/dist/cjs/operation-node/aggregate-function-node.js +4 -3
  35. package/dist/cjs/operation-node/alter-table-node.d.ts +3 -1
  36. package/dist/cjs/operation-node/collate-node.d.ts +13 -0
  37. package/dist/cjs/operation-node/collate-node.js +19 -0
  38. package/dist/cjs/operation-node/constraint-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/create-type-node.js +1 -1
  41. package/dist/cjs/operation-node/delete-query-node.d.ts +8 -2
  42. package/dist/cjs/operation-node/delete-query-node.js +11 -15
  43. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -0
  44. package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
  45. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  46. package/dist/cjs/operation-node/merge-query-node.d.ts +2 -0
  47. package/dist/cjs/operation-node/operation-node-transformer.d.ts +106 -97
  48. package/dist/cjs/operation-node/operation-node-transformer.js +352 -312
  49. package/dist/cjs/operation-node/operation-node-visitor.d.ts +9 -1
  50. package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
  51. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  52. package/dist/cjs/operation-node/or-action-node.d.ts +12 -0
  53. package/dist/cjs/operation-node/or-action-node.js +18 -0
  54. package/dist/cjs/operation-node/order-by-item-node.d.ts +5 -0
  55. package/dist/cjs/operation-node/order-by-item-node.js +6 -0
  56. package/dist/cjs/operation-node/primary-key-constraint-node.d.ts +29 -0
  57. package/dist/cjs/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  58. package/dist/cjs/operation-node/query-node.d.ts +7 -0
  59. package/dist/cjs/operation-node/query-node.js +15 -0
  60. package/dist/cjs/operation-node/refresh-materialized-view-node.d.ts +17 -0
  61. package/dist/cjs/operation-node/refresh-materialized-view-node.js +25 -0
  62. package/dist/cjs/operation-node/rename-constraint-node.d.ts +14 -0
  63. package/dist/cjs/operation-node/rename-constraint-node.js +20 -0
  64. package/dist/cjs/operation-node/select-query-node.d.ts +8 -2
  65. package/dist/cjs/operation-node/select-query-node.js +11 -15
  66. package/dist/cjs/operation-node/unique-constraint-node.d.ts +2 -0
  67. package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
  68. package/dist/cjs/operation-node/update-query-node.js +5 -2
  69. package/dist/cjs/parser/collate-parser.d.ts +1 -0
  70. package/dist/cjs/parser/collate-parser.js +2 -0
  71. package/dist/cjs/parser/delete-from-parser.d.ts +5 -0
  72. package/dist/cjs/parser/delete-from-parser.js +2 -0
  73. package/dist/cjs/parser/join-parser.d.ts +1 -1
  74. package/dist/cjs/parser/join-parser.js +7 -1
  75. package/dist/cjs/parser/merge-into-parser.d.ts +5 -0
  76. package/dist/cjs/parser/merge-into-parser.js +2 -0
  77. package/dist/cjs/parser/order-by-parser.d.ts +18 -5
  78. package/dist/cjs/parser/order-by-parser.js +24 -14
  79. package/dist/cjs/parser/savepoint-parser.d.ts +4 -0
  80. package/dist/cjs/parser/savepoint-parser.js +11 -0
  81. package/dist/cjs/parser/select-from-parser.d.ts +4 -0
  82. package/dist/cjs/parser/select-from-parser.js +2 -0
  83. package/dist/cjs/parser/table-parser.d.ts +2 -5
  84. package/dist/cjs/parser/update-parser.d.ts +5 -0
  85. package/dist/cjs/parser/update-parser.js +2 -0
  86. package/dist/cjs/parser/update-set-parser.d.ts +7 -4
  87. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
  88. package/dist/cjs/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  89. package/dist/cjs/plugin/camel-case/camel-case-transformer.js +2 -2
  90. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  91. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  92. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  93. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  94. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +162 -0
  95. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  96. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +29 -0
  97. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  98. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.js +66 -0
  99. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.js +1 -1
  100. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  101. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.js +6 -4
  102. package/dist/cjs/plugin/with-schema/with-schema-plugin.js +1 -1
  103. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +6 -5
  104. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +29 -24
  105. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +83 -5
  106. package/dist/cjs/query-builder/aggregate-function-builder.js +15 -27
  107. package/dist/cjs/query-builder/cte-builder.js +0 -2
  108. package/dist/cjs/query-builder/delete-query-builder.d.ts +36 -47
  109. package/dist/cjs/query-builder/delete-query-builder.js +12 -78
  110. package/dist/cjs/query-builder/function-module.d.ts +31 -4
  111. package/dist/cjs/query-builder/insert-query-builder.d.ts +161 -6
  112. package/dist/cjs/query-builder/insert-query-builder.js +197 -10
  113. package/dist/cjs/query-builder/join-builder.js +0 -2
  114. package/dist/cjs/query-builder/merge-query-builder.d.ts +145 -3
  115. package/dist/cjs/query-builder/merge-query-builder.js +28 -7
  116. package/dist/cjs/query-builder/on-conflict-builder.js +0 -4
  117. package/dist/cjs/query-builder/order-by-interface.d.ts +176 -0
  118. package/dist/cjs/query-builder/order-by-interface.js +2 -0
  119. package/dist/cjs/query-builder/order-by-item-builder.d.ts +43 -0
  120. package/dist/cjs/query-builder/order-by-item-builder.js +75 -0
  121. package/dist/cjs/query-builder/over-builder.d.ts +43 -6
  122. package/dist/cjs/query-builder/over-builder.js +8 -25
  123. package/dist/cjs/query-builder/returning-interface.d.ts +20 -3
  124. package/dist/cjs/query-builder/select-query-builder.d.ts +279 -98
  125. package/dist/cjs/query-builder/select-query-builder.js +26 -26
  126. package/dist/cjs/query-builder/update-query-builder.d.ts +88 -9
  127. package/dist/cjs/query-builder/update-query-builder.js +17 -15
  128. package/dist/cjs/query-compiler/compiled-query.d.ts +2 -0
  129. package/dist/cjs/query-compiler/compiled-query.js +2 -0
  130. package/dist/cjs/query-compiler/default-query-compiler.d.ts +17 -2
  131. package/dist/cjs/query-compiler/default-query-compiler.js +97 -2
  132. package/dist/cjs/query-compiler/query-compiler.d.ts +4 -2
  133. package/dist/cjs/query-creator.d.ts +23 -25
  134. package/dist/cjs/query-creator.js +280 -8
  135. package/dist/cjs/query-executor/default-query-executor.d.ts +2 -1
  136. package/dist/cjs/query-executor/default-query-executor.js +2 -2
  137. package/dist/cjs/query-executor/query-executor-base.js +7 -25
  138. package/dist/cjs/raw-builder/raw-builder.js +0 -3
  139. package/dist/cjs/raw-builder/sql.d.ts +3 -3
  140. package/dist/cjs/raw-builder/sql.js +1 -1
  141. package/dist/cjs/schema/alter-column-builder.js +0 -3
  142. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  143. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  144. package/dist/cjs/schema/alter-table-add-index-builder.js +0 -2
  145. package/dist/cjs/schema/alter-table-builder.d.ts +7 -3
  146. package/dist/cjs/schema/alter-table-builder.js +21 -10
  147. package/dist/cjs/schema/alter-table-drop-constraint-builder.js +0 -2
  148. package/dist/cjs/schema/alter-table-executor.js +0 -2
  149. package/dist/cjs/schema/check-constraint-builder.d.ts +13 -0
  150. package/dist/cjs/schema/check-constraint-builder.js +20 -0
  151. package/dist/cjs/schema/column-definition-builder.js +0 -2
  152. package/dist/cjs/schema/create-index-builder.js +1 -3
  153. package/dist/cjs/schema/create-schema-builder.js +0 -2
  154. package/dist/cjs/schema/create-table-builder.d.ts +5 -4
  155. package/dist/cjs/schema/create-table-builder.js +9 -7
  156. package/dist/cjs/schema/create-type-builder.d.ts +1 -1
  157. package/dist/cjs/schema/create-type-builder.js +0 -2
  158. package/dist/cjs/schema/create-view-builder.js +0 -2
  159. package/dist/cjs/schema/drop-index-builder.js +0 -2
  160. package/dist/cjs/schema/drop-schema-builder.js +0 -2
  161. package/dist/cjs/schema/drop-table-builder.js +0 -2
  162. package/dist/cjs/schema/drop-type-builder.js +0 -2
  163. package/dist/cjs/schema/drop-view-builder.js +0 -2
  164. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +9 -0
  165. package/dist/cjs/schema/foreign-key-constraint-builder.js +16 -2
  166. package/dist/cjs/schema/primary-key-constraint-builder.d.ts +17 -0
  167. package/dist/cjs/schema/primary-key-constraint-builder.js +37 -0
  168. package/dist/cjs/schema/refresh-materialized-view-builder.d.ts +47 -0
  169. package/dist/cjs/schema/refresh-materialized-view-builder.js +75 -0
  170. package/dist/cjs/schema/schema.d.ts +14 -0
  171. package/dist/cjs/schema/schema.js +21 -0
  172. package/dist/cjs/schema/unique-constraint-builder.d.ts +10 -1
  173. package/dist/cjs/schema/unique-constraint-builder.js +26 -5
  174. package/dist/cjs/util/infer-result.d.ts +1 -1
  175. package/dist/cjs/util/log.d.ts +1 -0
  176. package/dist/cjs/util/log.js +3 -2
  177. package/dist/cjs/util/provide-controlled-connection.d.ts +7 -0
  178. package/dist/cjs/util/provide-controlled-connection.js +24 -0
  179. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  180. package/dist/esm/dialect/mssql/mssql-driver.d.ts +6 -3
  181. package/dist/esm/dialect/mssql/mssql-driver.js +33 -19
  182. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  183. package/dist/esm/dialect/mssql/mssql-query-compiler.js +11 -0
  184. package/dist/esm/dialect/mysql/mysql-driver.d.ts +4 -0
  185. package/dist/esm/dialect/mysql/mysql-driver.js +27 -12
  186. package/dist/esm/dialect/postgres/postgres-driver.d.ts +4 -0
  187. package/dist/esm/dialect/postgres/postgres-driver.js +28 -18
  188. package/dist/esm/dialect/postgres/postgres-introspector.js +7 -17
  189. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +4 -0
  190. package/dist/esm/dialect/sqlite/sqlite-driver.js +19 -13
  191. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  192. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +4 -0
  193. package/dist/esm/driver/database-connection.d.ts +0 -4
  194. package/dist/esm/driver/driver.d.ts +17 -0
  195. package/dist/esm/driver/driver.js +11 -0
  196. package/dist/esm/driver/dummy-driver.d.ts +3 -0
  197. package/dist/esm/driver/dummy-driver.js +9 -0
  198. package/dist/esm/driver/runtime-driver.d.ts +4 -0
  199. package/dist/esm/driver/runtime-driver.js +43 -3
  200. package/dist/esm/expression/expression-builder.d.ts +7 -10
  201. package/dist/esm/helpers/postgres.d.ts +48 -0
  202. package/dist/esm/helpers/postgres.js +49 -0
  203. package/dist/esm/index.d.ts +13 -2
  204. package/dist/esm/index.js +11 -1
  205. package/dist/esm/kysely.d.ts +339 -2
  206. package/dist/esm/kysely.js +461 -10
  207. package/dist/esm/migration/migrator.d.ts +8 -0
  208. package/dist/esm/migration/migrator.js +1 -1
  209. package/dist/esm/operation-node/aggregate-function-node.d.ts +2 -1
  210. package/dist/esm/operation-node/aggregate-function-node.js +4 -3
  211. package/dist/esm/operation-node/alter-table-node.d.ts +3 -1
  212. package/dist/esm/operation-node/collate-node.d.ts +13 -0
  213. package/dist/esm/operation-node/collate-node.js +17 -0
  214. package/dist/esm/operation-node/constraint-node.d.ts +1 -1
  215. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  216. package/dist/esm/operation-node/create-type-node.js +1 -1
  217. package/dist/esm/operation-node/delete-query-node.d.ts +8 -2
  218. package/dist/esm/operation-node/delete-query-node.js +11 -15
  219. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -0
  220. package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
  221. package/dist/esm/operation-node/join-node.d.ts +1 -1
  222. package/dist/esm/operation-node/merge-query-node.d.ts +2 -0
  223. package/dist/esm/operation-node/operation-node-transformer.d.ts +106 -97
  224. package/dist/esm/operation-node/operation-node-transformer.js +352 -312
  225. package/dist/esm/operation-node/operation-node-visitor.d.ts +9 -1
  226. package/dist/esm/operation-node/operation-node-visitor.js +4 -0
  227. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  228. package/dist/esm/operation-node/or-action-node.d.ts +12 -0
  229. package/dist/esm/operation-node/or-action-node.js +16 -0
  230. package/dist/esm/operation-node/order-by-item-node.d.ts +5 -0
  231. package/dist/esm/operation-node/order-by-item-node.js +6 -0
  232. package/dist/esm/operation-node/primary-key-constraint-node.d.ts +29 -0
  233. package/dist/esm/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  234. package/dist/esm/operation-node/query-node.d.ts +7 -0
  235. package/dist/esm/operation-node/query-node.js +15 -0
  236. package/dist/esm/operation-node/refresh-materialized-view-node.d.ts +17 -0
  237. package/dist/esm/operation-node/refresh-materialized-view-node.js +23 -0
  238. package/dist/esm/operation-node/rename-constraint-node.d.ts +14 -0
  239. package/dist/esm/operation-node/rename-constraint-node.js +18 -0
  240. package/dist/esm/operation-node/select-query-node.d.ts +8 -2
  241. package/dist/esm/operation-node/select-query-node.js +11 -15
  242. package/dist/esm/operation-node/unique-constraint-node.d.ts +2 -0
  243. package/dist/esm/operation-node/update-query-node.d.ts +3 -4
  244. package/dist/esm/operation-node/update-query-node.js +5 -2
  245. package/dist/esm/parser/collate-parser.d.ts +1 -0
  246. package/dist/esm/parser/collate-parser.js +2 -0
  247. package/dist/esm/parser/delete-from-parser.d.ts +5 -0
  248. package/dist/esm/parser/delete-from-parser.js +2 -0
  249. package/dist/esm/parser/join-parser.d.ts +1 -1
  250. package/dist/esm/parser/join-parser.js +7 -1
  251. package/dist/esm/parser/merge-into-parser.d.ts +5 -0
  252. package/dist/esm/parser/merge-into-parser.js +2 -0
  253. package/dist/esm/parser/order-by-parser.d.ts +18 -5
  254. package/dist/esm/parser/order-by-parser.js +27 -17
  255. package/dist/esm/parser/savepoint-parser.d.ts +4 -0
  256. package/dist/esm/parser/savepoint-parser.js +9 -0
  257. package/dist/esm/parser/select-from-parser.d.ts +4 -0
  258. package/dist/esm/parser/select-from-parser.js +2 -0
  259. package/dist/esm/parser/table-parser.d.ts +2 -5
  260. package/dist/esm/parser/update-parser.d.ts +5 -0
  261. package/dist/esm/parser/update-parser.js +2 -0
  262. package/dist/esm/parser/update-set-parser.d.ts +7 -4
  263. package/dist/esm/plugin/camel-case/camel-case-plugin.js +1 -1
  264. package/dist/esm/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  265. package/dist/esm/plugin/camel-case/camel-case-transformer.js +2 -2
  266. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  267. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  268. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  269. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  270. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +159 -0
  271. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  272. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +26 -0
  273. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  274. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.js +63 -0
  275. package/dist/esm/plugin/immediate-value/immediate-value-plugin.js +1 -1
  276. package/dist/esm/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  277. package/dist/esm/plugin/immediate-value/immediate-value-transformer.js +6 -4
  278. package/dist/esm/plugin/with-schema/with-schema-plugin.js +1 -1
  279. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +6 -5
  280. package/dist/esm/plugin/with-schema/with-schema-transformer.js +29 -24
  281. package/dist/esm/query-builder/aggregate-function-builder.d.ts +83 -5
  282. package/dist/esm/query-builder/aggregate-function-builder.js +15 -27
  283. package/dist/esm/query-builder/cte-builder.js +0 -2
  284. package/dist/esm/query-builder/delete-query-builder.d.ts +36 -47
  285. package/dist/esm/query-builder/delete-query-builder.js +12 -78
  286. package/dist/esm/query-builder/function-module.d.ts +31 -4
  287. package/dist/esm/query-builder/insert-query-builder.d.ts +161 -6
  288. package/dist/esm/query-builder/insert-query-builder.js +197 -10
  289. package/dist/esm/query-builder/join-builder.js +0 -2
  290. package/dist/esm/query-builder/merge-query-builder.d.ts +145 -3
  291. package/dist/esm/query-builder/merge-query-builder.js +29 -8
  292. package/dist/esm/query-builder/on-conflict-builder.js +0 -4
  293. package/dist/esm/query-builder/order-by-interface.d.ts +176 -0
  294. package/dist/esm/query-builder/order-by-interface.js +2 -0
  295. package/dist/esm/query-builder/order-by-item-builder.d.ts +43 -0
  296. package/dist/esm/query-builder/order-by-item-builder.js +72 -0
  297. package/dist/esm/query-builder/over-builder.d.ts +43 -6
  298. package/dist/esm/query-builder/over-builder.js +8 -25
  299. package/dist/esm/query-builder/returning-interface.d.ts +20 -3
  300. package/dist/esm/query-builder/select-query-builder.d.ts +279 -98
  301. package/dist/esm/query-builder/select-query-builder.js +26 -26
  302. package/dist/esm/query-builder/update-query-builder.d.ts +88 -9
  303. package/dist/esm/query-builder/update-query-builder.js +17 -15
  304. package/dist/esm/query-compiler/compiled-query.d.ts +2 -0
  305. package/dist/esm/query-compiler/compiled-query.js +2 -0
  306. package/dist/esm/query-compiler/default-query-compiler.d.ts +17 -2
  307. package/dist/esm/query-compiler/default-query-compiler.js +97 -2
  308. package/dist/esm/query-compiler/query-compiler.d.ts +4 -2
  309. package/dist/esm/query-creator.d.ts +23 -25
  310. package/dist/esm/query-creator.js +281 -9
  311. package/dist/esm/query-executor/default-query-executor.d.ts +2 -1
  312. package/dist/esm/query-executor/default-query-executor.js +2 -2
  313. package/dist/esm/query-executor/query-executor-base.js +7 -25
  314. package/dist/esm/raw-builder/raw-builder.js +0 -3
  315. package/dist/esm/raw-builder/sql.d.ts +3 -3
  316. package/dist/esm/raw-builder/sql.js +1 -1
  317. package/dist/esm/schema/alter-column-builder.js +0 -3
  318. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  319. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  320. package/dist/esm/schema/alter-table-add-index-builder.js +0 -2
  321. package/dist/esm/schema/alter-table-builder.d.ts +7 -3
  322. package/dist/esm/schema/alter-table-builder.js +22 -11
  323. package/dist/esm/schema/alter-table-drop-constraint-builder.js +0 -2
  324. package/dist/esm/schema/alter-table-executor.js +0 -2
  325. package/dist/esm/schema/check-constraint-builder.d.ts +13 -0
  326. package/dist/esm/schema/check-constraint-builder.js +17 -0
  327. package/dist/esm/schema/column-definition-builder.js +0 -2
  328. package/dist/esm/schema/create-index-builder.js +1 -3
  329. package/dist/esm/schema/create-schema-builder.js +0 -2
  330. package/dist/esm/schema/create-table-builder.d.ts +5 -4
  331. package/dist/esm/schema/create-table-builder.js +10 -8
  332. package/dist/esm/schema/create-type-builder.d.ts +1 -1
  333. package/dist/esm/schema/create-type-builder.js +0 -2
  334. package/dist/esm/schema/create-view-builder.js +0 -2
  335. package/dist/esm/schema/drop-index-builder.js +0 -2
  336. package/dist/esm/schema/drop-schema-builder.js +0 -2
  337. package/dist/esm/schema/drop-table-builder.js +0 -2
  338. package/dist/esm/schema/drop-type-builder.js +0 -2
  339. package/dist/esm/schema/drop-view-builder.js +0 -2
  340. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +9 -0
  341. package/dist/esm/schema/foreign-key-constraint-builder.js +16 -2
  342. package/dist/esm/schema/primary-key-constraint-builder.d.ts +17 -0
  343. package/dist/esm/schema/primary-key-constraint-builder.js +34 -0
  344. package/dist/esm/schema/refresh-materialized-view-builder.d.ts +47 -0
  345. package/dist/esm/schema/refresh-materialized-view-builder.js +72 -0
  346. package/dist/esm/schema/schema.d.ts +14 -0
  347. package/dist/esm/schema/schema.js +21 -0
  348. package/dist/esm/schema/unique-constraint-builder.d.ts +10 -1
  349. package/dist/esm/schema/unique-constraint-builder.js +26 -5
  350. package/dist/esm/util/infer-result.d.ts +1 -1
  351. package/dist/esm/util/log.d.ts +1 -0
  352. package/dist/esm/util/log.js +3 -2
  353. package/dist/esm/util/provide-controlled-connection.d.ts +7 -0
  354. package/dist/esm/util/provide-controlled-connection.js +22 -0
  355. package/outdated-typescript.d.ts +5 -0
  356. package/package.json +16 -2
  357. package/CONTRIBUTING.md +0 -168
  358. package/dist/cjs/operation-node/primary-constraint-node.d.ts +0 -15
  359. package/dist/cjs/util/prevent-await.d.ts +0 -1
  360. package/dist/cjs/util/prevent-await.js +0 -13
  361. package/dist/esm/operation-node/primary-constraint-node.d.ts +0 -15
  362. package/dist/esm/util/prevent-await.d.ts +0 -1
  363. package/dist/esm/util/prevent-await.js +0 -11
@@ -7,8 +7,7 @@ import { DefaultQueryExecutor } from './query-executor/default-query-executor.js
7
7
  import { freeze, isObject, isUndefined } from './util/object-utils.js';
8
8
  import { RuntimeDriver } from './driver/runtime-driver.js';
9
9
  import { SingleConnectionProvider } from './driver/single-connection-provider.js';
10
- import { TRANSACTION_ISOLATION_LEVELS, } from './driver/driver.js';
11
- import { preventAwait } from './util/prevent-await.js';
10
+ import { validateTransactionSettings, } from './driver/driver.js';
12
11
  import { createFunctionModule, } from './query-builder/function-module.js';
13
12
  import { Log } from './util/log.js';
14
13
  import { createQueryId } from './util/query-id.js';
@@ -17,6 +16,9 @@ import { CaseBuilder } from './query-builder/case-builder.js';
17
16
  import { CaseNode } from './operation-node/case-node.js';
18
17
  import { parseExpression } from './parser/expression-parser.js';
19
18
  import { WithSchemaPlugin } from './plugin/with-schema/with-schema-plugin.js';
19
+ import { provideControlledConnection, } from './util/provide-controlled-connection.js';
20
+ // @ts-ignore
21
+ Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose');
20
22
  /**
21
23
  * The main Kysely class.
22
24
  *
@@ -173,6 +175,9 @@ export class Kysely extends QueryCreator {
173
175
  * of type {@link Transaction} which inherits {@link Kysely}. Any query
174
176
  * started through the transaction object is executed inside the transaction.
175
177
  *
178
+ * To run a controlled transaction, allowing you to commit and rollback manually,
179
+ * use {@link startTransaction} instead.
180
+ *
176
181
  * ### Examples
177
182
  *
178
183
  * <!-- siteExample("transactions", "Simple transaction", 10) -->
@@ -227,6 +232,120 @@ export class Kysely extends QueryCreator {
227
232
  transaction() {
228
233
  return new TransactionBuilder({ ...this.#props });
229
234
  }
235
+ /**
236
+ * Creates a {@link ControlledTransactionBuilder} that can be used to run queries inside a controlled transaction.
237
+ *
238
+ * The returned {@link ControlledTransactionBuilder} can be used to configure the transaction.
239
+ * The {@link ControlledTransactionBuilder.execute} method can then be called
240
+ * to start the transaction and return a {@link ControlledTransaction}.
241
+ *
242
+ * A {@link ControlledTransaction} allows you to commit and rollback manually,
243
+ * execute savepoint commands. It extends {@link Transaction} which extends {@link Kysely},
244
+ * so you can run queries inside the transaction. Once the transaction is committed,
245
+ * or rolled back, it can't be used anymore - all queries will throw an error.
246
+ * This is to prevent accidentally running queries outside the transaction - where
247
+ * atomicity is not guaranteed anymore.
248
+ *
249
+ * ### Examples
250
+ *
251
+ * <!-- siteExample("transactions", "Controlled transaction", 11) -->
252
+ *
253
+ * A controlled transaction allows you to commit and rollback manually, execute
254
+ * savepoint commands, and queries in general.
255
+ *
256
+ * In this example we start a transaction, use it to insert two rows and then commit
257
+ * the transaction. If an error is thrown, we catch it and rollback the transaction.
258
+ *
259
+ * ```ts
260
+ * const trx = await db.startTransaction().execute()
261
+ *
262
+ * try {
263
+ * const jennifer = await trx.insertInto('person')
264
+ * .values({
265
+ * first_name: 'Jennifer',
266
+ * last_name: 'Aniston',
267
+ * age: 40,
268
+ * })
269
+ * .returning('id')
270
+ * .executeTakeFirstOrThrow()
271
+ *
272
+ * const catto = await trx.insertInto('pet')
273
+ * .values({
274
+ * owner_id: jennifer.id,
275
+ * name: 'Catto',
276
+ * species: 'cat',
277
+ * is_favorite: false,
278
+ * })
279
+ * .returningAll()
280
+ * .executeTakeFirstOrThrow()
281
+ *
282
+ * await trx.commit().execute()
283
+ *
284
+ * // ...
285
+ * } catch (error) {
286
+ * await trx.rollback().execute()
287
+ * }
288
+ * ```
289
+ *
290
+ * <!-- siteExample("transactions", "Controlled transaction /w savepoints", 12) -->
291
+ *
292
+ * A controlled transaction allows you to commit and rollback manually, execute
293
+ * savepoint commands, and queries in general.
294
+ *
295
+ * In this example we start a transaction, insert a person, create a savepoint,
296
+ * try inserting a toy and a pet, and if an error is thrown, we rollback to the
297
+ * savepoint. Eventually we release the savepoint, insert an audit record and
298
+ * commit the transaction. If an error is thrown, we catch it and rollback the
299
+ * transaction.
300
+ *
301
+ * ```ts
302
+ * const trx = await db.startTransaction().execute()
303
+ *
304
+ * try {
305
+ * const jennifer = await trx
306
+ * .insertInto('person')
307
+ * .values({
308
+ * first_name: 'Jennifer',
309
+ * last_name: 'Aniston',
310
+ * age: 40,
311
+ * })
312
+ * .returning('id')
313
+ * .executeTakeFirstOrThrow()
314
+ *
315
+ * const trxAfterJennifer = await trx.savepoint('after_jennifer').execute()
316
+ *
317
+ * try {
318
+ * const catto = await trxAfterJennifer
319
+ * .insertInto('pet')
320
+ * .values({
321
+ * owner_id: jennifer.id,
322
+ * name: 'Catto',
323
+ * species: 'cat',
324
+ * })
325
+ * .returning('id')
326
+ * .executeTakeFirstOrThrow()
327
+ *
328
+ * await trxAfterJennifer
329
+ * .insertInto('toy')
330
+ * .values({ name: 'Bone', price: 1.99, pet_id: catto.id })
331
+ * .execute()
332
+ * } catch (error) {
333
+ * await trxAfterJennifer.rollbackToSavepoint('after_jennifer').execute()
334
+ * }
335
+ *
336
+ * await trxAfterJennifer.releaseSavepoint('after_jennifer').execute()
337
+ *
338
+ * await trx.insertInto('audit').values({ action: 'added Jennifer' }).execute()
339
+ *
340
+ * await trx.commit().execute()
341
+ * } catch (error) {
342
+ * await trx.rollback().execute()
343
+ * }
344
+ * ```
345
+ */
346
+ startTransaction() {
347
+ return new ControlledTransactionBuilder({ ...this.#props });
348
+ }
230
349
  /**
231
350
  * Provides a kysely instance bound to a single database connection.
232
351
  *
@@ -342,6 +461,9 @@ export class Kysely extends QueryCreator {
342
461
  const compiledQuery = isCompilable(query) ? query.compile() : query;
343
462
  return this.getExecutor().executeQuery(compiledQuery, queryId);
344
463
  }
464
+ async [Symbol.asyncDispose]() {
465
+ await this.destroy();
466
+ }
345
467
  }
346
468
  export class Transaction extends Kysely {
347
469
  #props;
@@ -409,12 +531,17 @@ export class ConnectionBuilder {
409
531
  });
410
532
  }
411
533
  }
412
- preventAwait(ConnectionBuilder, "don't await ConnectionBuilder instances directly. To execute the query you need to call the `execute` method");
413
534
  export class TransactionBuilder {
414
535
  #props;
415
536
  constructor(props) {
416
537
  this.#props = freeze(props);
417
538
  }
539
+ setAccessMode(accessMode) {
540
+ return new TransactionBuilder({
541
+ ...this.#props,
542
+ accessMode,
543
+ });
544
+ }
418
545
  setIsolationLevel(isolationLevel) {
419
546
  return new TransactionBuilder({
420
547
  ...this.#props,
@@ -422,8 +549,8 @@ export class TransactionBuilder {
422
549
  });
423
550
  }
424
551
  async execute(callback) {
425
- const { isolationLevel, ...kyselyProps } = this.#props;
426
- const settings = { isolationLevel };
552
+ const { isolationLevel, accessMode, ...kyselyProps } = this.#props;
553
+ const settings = { isolationLevel, accessMode };
427
554
  validateTransactionSettings(settings);
428
555
  return this.#props.executor.provideConnection(async (connection) => {
429
556
  const executor = this.#props.executor.withConnectionProvider(new SingleConnectionProvider(connection));
@@ -444,10 +571,334 @@ export class TransactionBuilder {
444
571
  });
445
572
  }
446
573
  }
447
- preventAwait(TransactionBuilder, "don't await TransactionBuilder instances directly. To execute the transaction you need to call the `execute` method");
448
- function validateTransactionSettings(settings) {
449
- if (settings.isolationLevel &&
450
- !TRANSACTION_ISOLATION_LEVELS.includes(settings.isolationLevel)) {
451
- throw new Error(`invalid transaction isolation level ${settings.isolationLevel}`);
574
+ export class ControlledTransactionBuilder {
575
+ #props;
576
+ constructor(props) {
577
+ this.#props = freeze(props);
578
+ }
579
+ setAccessMode(accessMode) {
580
+ return new ControlledTransactionBuilder({
581
+ ...this.#props,
582
+ accessMode,
583
+ });
584
+ }
585
+ setIsolationLevel(isolationLevel) {
586
+ return new ControlledTransactionBuilder({
587
+ ...this.#props,
588
+ isolationLevel,
589
+ });
590
+ }
591
+ async execute() {
592
+ const { isolationLevel, accessMode, ...props } = this.#props;
593
+ const settings = { isolationLevel, accessMode };
594
+ validateTransactionSettings(settings);
595
+ const connection = await provideControlledConnection(this.#props.executor);
596
+ await this.#props.driver.beginTransaction(connection.connection, settings);
597
+ return new ControlledTransaction({
598
+ ...props,
599
+ connection,
600
+ executor: this.#props.executor.withConnectionProvider(new SingleConnectionProvider(connection.connection)),
601
+ });
602
+ }
603
+ }
604
+ export class ControlledTransaction extends Transaction {
605
+ #props;
606
+ #compileQuery;
607
+ #state;
608
+ constructor(props) {
609
+ const state = { isCommitted: false, isRolledBack: false };
610
+ props = {
611
+ ...props,
612
+ executor: new NotCommittedOrRolledBackAssertingExecutor(props.executor, state),
613
+ };
614
+ const { connection, ...transactionProps } = props;
615
+ super(transactionProps);
616
+ this.#props = freeze(props);
617
+ this.#state = state;
618
+ const queryId = createQueryId();
619
+ this.#compileQuery = (node) => props.executor.compileQuery(node, queryId);
620
+ }
621
+ get isCommitted() {
622
+ return this.#state.isCommitted;
623
+ }
624
+ get isRolledBack() {
625
+ return this.#state.isRolledBack;
626
+ }
627
+ /**
628
+ * Commits the transaction.
629
+ *
630
+ * See {@link rollback}.
631
+ *
632
+ * ### Examples
633
+ *
634
+ * ```ts
635
+ * import type { Kysely } from 'kysely'
636
+ * import type { Database } from 'type-editor' // imaginary module
637
+ *
638
+ * const trx = await db.startTransaction().execute()
639
+ *
640
+ * try {
641
+ * await doSomething(trx)
642
+ *
643
+ * await trx.commit().execute()
644
+ * } catch (error) {
645
+ * await trx.rollback().execute()
646
+ * }
647
+ *
648
+ * async function doSomething(kysely: Kysely<Database>) {}
649
+ * ```
650
+ */
651
+ commit() {
652
+ assertNotCommittedOrRolledBack(this.#state);
653
+ return new Command(async () => {
654
+ await this.#props.driver.commitTransaction(this.#props.connection.connection);
655
+ this.#state.isCommitted = true;
656
+ this.#props.connection.release();
657
+ });
658
+ }
659
+ /**
660
+ * Rolls back the transaction.
661
+ *
662
+ * See {@link commit} and {@link rollbackToSavepoint}.
663
+ *
664
+ * ### Examples
665
+ *
666
+ * ```ts
667
+ * import type { Kysely } from 'kysely'
668
+ * import type { Database } from 'type-editor' // imaginary module
669
+ *
670
+ * const trx = await db.startTransaction().execute()
671
+ *
672
+ * try {
673
+ * await doSomething(trx)
674
+ *
675
+ * await trx.commit().execute()
676
+ * } catch (error) {
677
+ * await trx.rollback().execute()
678
+ * }
679
+ *
680
+ * async function doSomething(kysely: Kysely<Database>) {}
681
+ * ```
682
+ */
683
+ rollback() {
684
+ assertNotCommittedOrRolledBack(this.#state);
685
+ return new Command(async () => {
686
+ await this.#props.driver.rollbackTransaction(this.#props.connection.connection);
687
+ this.#state.isRolledBack = true;
688
+ this.#props.connection.release();
689
+ });
690
+ }
691
+ /**
692
+ * Creates a savepoint with a given name.
693
+ *
694
+ * See {@link rollbackToSavepoint} and {@link releaseSavepoint}.
695
+ *
696
+ * For a type-safe experience, you should use the returned instance from now on.
697
+ *
698
+ * ### Examples
699
+ *
700
+ * ```ts
701
+ * import type { Kysely } from 'kysely'
702
+ * import type { Database } from 'type-editor' // imaginary module
703
+ *
704
+ * const trx = await db.startTransaction().execute()
705
+ *
706
+ * await insertJennifer(trx)
707
+ *
708
+ * const trxAfterJennifer = await trx.savepoint('after_jennifer').execute()
709
+ *
710
+ * try {
711
+ * await doSomething(trxAfterJennifer)
712
+ * } catch (error) {
713
+ * await trxAfterJennifer.rollbackToSavepoint('after_jennifer').execute()
714
+ * }
715
+ *
716
+ * async function insertJennifer(kysely: Kysely<Database>) {}
717
+ * async function doSomething(kysely: Kysely<Database>) {}
718
+ * ```
719
+ */
720
+ savepoint(savepointName) {
721
+ assertNotCommittedOrRolledBack(this.#state);
722
+ return new Command(async () => {
723
+ await this.#props.driver.savepoint?.(this.#props.connection.connection, savepointName, this.#compileQuery);
724
+ return new ControlledTransaction({ ...this.#props });
725
+ });
726
+ }
727
+ /**
728
+ * Rolls back to a savepoint with a given name.
729
+ *
730
+ * See {@link savepoint} and {@link releaseSavepoint}.
731
+ *
732
+ * You must use the same instance returned by {@link savepoint}, or
733
+ * escape the type-check by using `as any`.
734
+ *
735
+ * ### Examples
736
+ *
737
+ * ```ts
738
+ * import type { Kysely } from 'kysely'
739
+ * import type { Database } from 'type-editor' // imaginary module
740
+ *
741
+ * const trx = await db.startTransaction().execute()
742
+ *
743
+ * await insertJennifer(trx)
744
+ *
745
+ * const trxAfterJennifer = await trx.savepoint('after_jennifer').execute()
746
+ *
747
+ * try {
748
+ * await doSomething(trxAfterJennifer)
749
+ * } catch (error) {
750
+ * await trxAfterJennifer.rollbackToSavepoint('after_jennifer').execute()
751
+ * }
752
+ *
753
+ * async function insertJennifer(kysely: Kysely<Database>) {}
754
+ * async function doSomething(kysely: Kysely<Database>) {}
755
+ * ```
756
+ */
757
+ rollbackToSavepoint(savepointName) {
758
+ assertNotCommittedOrRolledBack(this.#state);
759
+ return new Command(async () => {
760
+ await this.#props.driver.rollbackToSavepoint?.(this.#props.connection.connection, savepointName, this.#compileQuery);
761
+ return new ControlledTransaction({ ...this.#props });
762
+ });
763
+ }
764
+ /**
765
+ * Releases a savepoint with a given name.
766
+ *
767
+ * See {@link savepoint} and {@link rollbackToSavepoint}.
768
+ *
769
+ * You must use the same instance returned by {@link savepoint}, or
770
+ * escape the type-check by using `as any`.
771
+ *
772
+ * ### Examples
773
+ *
774
+ * ```ts
775
+ * import type { Kysely } from 'kysely'
776
+ * import type { Database } from 'type-editor' // imaginary module
777
+ *
778
+ * const trx = await db.startTransaction().execute()
779
+ *
780
+ * await insertJennifer(trx)
781
+ *
782
+ * const trxAfterJennifer = await trx.savepoint('after_jennifer').execute()
783
+ *
784
+ * try {
785
+ * await doSomething(trxAfterJennifer)
786
+ * } catch (error) {
787
+ * await trxAfterJennifer.rollbackToSavepoint('after_jennifer').execute()
788
+ * }
789
+ *
790
+ * await trxAfterJennifer.releaseSavepoint('after_jennifer').execute()
791
+ *
792
+ * await doSomethingElse(trx)
793
+ *
794
+ * async function insertJennifer(kysely: Kysely<Database>) {}
795
+ * async function doSomething(kysely: Kysely<Database>) {}
796
+ * async function doSomethingElse(kysely: Kysely<Database>) {}
797
+ * ```
798
+ */
799
+ releaseSavepoint(savepointName) {
800
+ assertNotCommittedOrRolledBack(this.#state);
801
+ return new Command(async () => {
802
+ await this.#props.driver.releaseSavepoint?.(this.#props.connection.connection, savepointName, this.#compileQuery);
803
+ return new ControlledTransaction({ ...this.#props });
804
+ });
805
+ }
806
+ withPlugin(plugin) {
807
+ return new ControlledTransaction({
808
+ ...this.#props,
809
+ executor: this.#props.executor.withPlugin(plugin),
810
+ });
811
+ }
812
+ withoutPlugins() {
813
+ return new ControlledTransaction({
814
+ ...this.#props,
815
+ executor: this.#props.executor.withoutPlugins(),
816
+ });
817
+ }
818
+ withSchema(schema) {
819
+ return new ControlledTransaction({
820
+ ...this.#props,
821
+ executor: this.#props.executor.withPluginAtFront(new WithSchemaPlugin(schema)),
822
+ });
823
+ }
824
+ withTables() {
825
+ return new ControlledTransaction({ ...this.#props });
826
+ }
827
+ }
828
+ export class Command {
829
+ #cb;
830
+ constructor(cb) {
831
+ this.#cb = cb;
832
+ }
833
+ /**
834
+ * Executes the command.
835
+ */
836
+ async execute() {
837
+ return await this.#cb();
838
+ }
839
+ }
840
+ function assertNotCommittedOrRolledBack(state) {
841
+ if (state.isCommitted) {
842
+ throw new Error('Transaction is already committed');
843
+ }
844
+ if (state.isRolledBack) {
845
+ throw new Error('Transaction is already rolled back');
846
+ }
847
+ }
848
+ /**
849
+ * An executor wrapper that asserts that the transaction state is not committed
850
+ * or rolled back when a query is executed.
851
+ *
852
+ * @internal
853
+ */
854
+ class NotCommittedOrRolledBackAssertingExecutor {
855
+ #executor;
856
+ #state;
857
+ constructor(executor, state) {
858
+ if (executor instanceof NotCommittedOrRolledBackAssertingExecutor) {
859
+ this.#executor = executor.#executor;
860
+ }
861
+ else {
862
+ this.#executor = executor;
863
+ }
864
+ this.#state = state;
865
+ }
866
+ get adapter() {
867
+ return this.#executor.adapter;
868
+ }
869
+ get plugins() {
870
+ return this.#executor.plugins;
871
+ }
872
+ transformQuery(node, queryId) {
873
+ return this.#executor.transformQuery(node, queryId);
874
+ }
875
+ compileQuery(node, queryId) {
876
+ return this.#executor.compileQuery(node, queryId);
877
+ }
878
+ provideConnection(consumer) {
879
+ return this.#executor.provideConnection(consumer);
880
+ }
881
+ executeQuery(compiledQuery, queryId) {
882
+ assertNotCommittedOrRolledBack(this.#state);
883
+ return this.#executor.executeQuery(compiledQuery, queryId);
884
+ }
885
+ stream(compiledQuery, chunkSize, queryId) {
886
+ assertNotCommittedOrRolledBack(this.#state);
887
+ return this.#executor.stream(compiledQuery, chunkSize, queryId);
888
+ }
889
+ withConnectionProvider(connectionProvider) {
890
+ return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withConnectionProvider(connectionProvider), this.#state);
891
+ }
892
+ withPlugin(plugin) {
893
+ return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withPlugin(plugin), this.#state);
894
+ }
895
+ withPlugins(plugins) {
896
+ return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withPlugins(plugins), this.#state);
897
+ }
898
+ withPluginAtFront(plugin) {
899
+ return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withPluginAtFront(plugin), this.#state);
900
+ }
901
+ withoutPlugins() {
902
+ return new NotCommittedOrRolledBackAssertingExecutor(this.#executor.withoutPlugins(), this.#state);
452
903
  }
453
904
  }
@@ -287,6 +287,14 @@ export interface MigratorProps {
287
287
  * Default is `name0.localeCompare(name1)`.
288
288
  */
289
289
  readonly nameComparator?: (name0: string, name1: string) => number;
290
+ /**
291
+ * When `true`, don't run migrations in transactions even if the dialect supports transactional DDL.
292
+ *
293
+ * Default is `false`.
294
+ *
295
+ * This is useful when some migrations include queries that would fail otherwise.
296
+ */
297
+ readonly disableTransactions?: boolean;
290
298
  }
291
299
  /**
292
300
  * All migration methods ({@link Migrator.migrateTo | migrateTo},
@@ -424,7 +424,7 @@ export class Migrator {
424
424
  await adapter.releaseMigrationLock(db, lockOptions);
425
425
  }
426
426
  };
427
- if (adapter.supportsTransactionalDdl) {
427
+ if (adapter.supportsTransactionalDdl && !this.#props.disableTransactions) {
428
428
  return this.#props.db.transaction().execute(run);
429
429
  }
430
430
  else {
@@ -9,6 +9,7 @@ export interface AggregateFunctionNode extends OperationNode {
9
9
  readonly aggregated: readonly OperationNode[];
10
10
  readonly distinct?: boolean;
11
11
  readonly orderBy?: OrderByNode;
12
+ readonly withinGroup?: OrderByNode;
12
13
  readonly filter?: WhereNode;
13
14
  readonly over?: OverNode;
14
15
  }
@@ -19,7 +20,7 @@ export declare const AggregateFunctionNode: Readonly<{
19
20
  is(node: OperationNode): node is AggregateFunctionNode;
20
21
  create(aggregateFunction: string, aggregated?: readonly OperationNode[]): AggregateFunctionNode;
21
22
  cloneWithDistinct(aggregateFunctionNode: AggregateFunctionNode): AggregateFunctionNode;
22
- cloneWithOrderBy(aggregateFunctionNode: AggregateFunctionNode, orderItems: ReadonlyArray<OrderByItemNode>): AggregateFunctionNode;
23
+ cloneWithOrderBy(aggregateFunctionNode: AggregateFunctionNode, orderItems: ReadonlyArray<OrderByItemNode>, withinGroup?: boolean): AggregateFunctionNode;
23
24
  cloneWithFilter(aggregateFunctionNode: AggregateFunctionNode, filter: OperationNode): AggregateFunctionNode;
24
25
  cloneWithOrFilter(aggregateFunctionNode: AggregateFunctionNode, filter: OperationNode): AggregateFunctionNode;
25
26
  cloneWithOver(aggregateFunctionNode: AggregateFunctionNode, over?: OverNode): AggregateFunctionNode;
@@ -22,11 +22,12 @@ export const AggregateFunctionNode = freeze({
22
22
  distinct: true,
23
23
  });
24
24
  },
25
- cloneWithOrderBy(aggregateFunctionNode, orderItems) {
25
+ cloneWithOrderBy(aggregateFunctionNode, orderItems, withinGroup = false) {
26
+ const prop = withinGroup ? 'withinGroup' : 'orderBy';
26
27
  return freeze({
27
28
  ...aggregateFunctionNode,
28
- orderBy: aggregateFunctionNode.orderBy
29
- ? OrderByNode.cloneWithItems(aggregateFunctionNode.orderBy, orderItems)
29
+ [prop]: aggregateFunctionNode[prop]
30
+ ? OrderByNode.cloneWithItems(aggregateFunctionNode[prop], orderItems)
30
31
  : OrderByNode.create(orderItems),
31
32
  });
32
33
  },
@@ -10,7 +10,8 @@ import { DropConstraintNode } from './drop-constraint-node.js';
10
10
  import { ModifyColumnNode } from './modify-column-node.js';
11
11
  import { DropIndexNode } from './drop-index-node.js';
12
12
  import { AddIndexNode } from './add-index-node.js';
13
- export type AlterTableNodeTableProps = Pick<AlterTableNode, 'renameTo' | 'setSchema' | 'addConstraint' | 'dropConstraint' | 'addIndex' | 'dropIndex'>;
13
+ import { RenameConstraintNode } from './rename-constraint-node.js';
14
+ export type AlterTableNodeTableProps = Pick<AlterTableNode, 'renameTo' | 'setSchema' | 'addConstraint' | 'dropConstraint' | 'addIndex' | 'dropIndex' | 'renameConstraint'>;
14
15
  export type AlterTableColumnAlterationNode = RenameColumnNode | AddColumnNode | DropColumnNode | AlterColumnNode | ModifyColumnNode;
15
16
  export interface AlterTableNode extends OperationNode {
16
17
  readonly kind: 'AlterTableNode';
@@ -20,6 +21,7 @@ export interface AlterTableNode extends OperationNode {
20
21
  readonly columnAlterations?: ReadonlyArray<AlterTableColumnAlterationNode>;
21
22
  readonly addConstraint?: AddConstraintNode;
22
23
  readonly dropConstraint?: DropConstraintNode;
24
+ readonly renameConstraint?: RenameConstraintNode;
23
25
  readonly addIndex?: AddIndexNode;
24
26
  readonly dropIndex?: DropIndexNode;
25
27
  }
@@ -0,0 +1,13 @@
1
+ import { IdentifierNode } from './identifier-node.js';
2
+ import { OperationNode } from './operation-node.js';
3
+ export interface CollateNode extends OperationNode {
4
+ readonly kind: 'CollateNode';
5
+ readonly collation: IdentifierNode;
6
+ }
7
+ /**
8
+ * @internal
9
+ */
10
+ export declare const CollateNode: {
11
+ is(node: OperationNode): node is CollateNode;
12
+ create(collation: string): CollateNode;
13
+ };
@@ -0,0 +1,17 @@
1
+ /// <reference types="./collate-node.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ import { IdentifierNode } from './identifier-node.js';
4
+ /**
5
+ * @internal
6
+ */
7
+ export const CollateNode = {
8
+ is(node) {
9
+ return node.kind === 'CollateNode';
10
+ },
11
+ create(collation) {
12
+ return freeze({
13
+ kind: 'CollateNode',
14
+ collation: IdentifierNode.create(collation),
15
+ });
16
+ },
17
+ };
@@ -1,5 +1,5 @@
1
1
  import { CheckConstraintNode } from './check-constraint-node.js';
2
2
  import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
3
- import { PrimaryKeyConstraintNode } from './primary-constraint-node.js';
3
+ import { PrimaryKeyConstraintNode } from './primary-key-constraint-node.js';
4
4
  import { UniqueConstraintNode } from './unique-constraint-node.js';
5
5
  export type ConstraintNode = PrimaryKeyConstraintNode | UniqueConstraintNode | CheckConstraintNode | ForeignKeyConstraintNode;
@@ -13,5 +13,5 @@ export interface CreateTypeNode extends OperationNode {
13
13
  export declare const CreateTypeNode: Readonly<{
14
14
  is(node: OperationNode): node is CreateTypeNode;
15
15
  create(name: SchemableIdentifierNode): CreateTypeNode;
16
- cloneWithEnum(createType: CreateTypeNode, values: string[]): CreateTypeNode;
16
+ cloneWithEnum(createType: CreateTypeNode, values: readonly string[]): CreateTypeNode;
17
17
  }>;
@@ -18,7 +18,7 @@ export const CreateTypeNode = freeze({
18
18
  cloneWithEnum(createType, values) {
19
19
  return freeze({
20
20
  ...createType,
21
- enum: ValueListNode.create(values.map((value) => ValueNode.createImmediate(value))),
21
+ enum: ValueListNode.create(values.map(ValueNode.createImmediate)),
22
22
  });
23
23
  },
24
24
  });
@@ -32,8 +32,14 @@ export interface DeleteQueryNode extends OperationNode {
32
32
  export declare const DeleteQueryNode: Readonly<{
33
33
  is(node: OperationNode): node is DeleteQueryNode;
34
34
  create(fromItems: OperationNode[], withNode?: WithNode): DeleteQueryNode;
35
- cloneWithOrderByItems(deleteNode: DeleteQueryNode, items: ReadonlyArray<OrderByItemNode>): DeleteQueryNode;
36
- cloneWithoutOrderBy(deleteNode: DeleteQueryNode): DeleteQueryNode;
35
+ /**
36
+ * @deprecated Use `QueryNode.cloneWithoutOrderBy` instead.
37
+ */
38
+ cloneWithOrderByItems: (node: DeleteQueryNode, items: ReadonlyArray<OrderByItemNode>) => DeleteQueryNode;
39
+ /**
40
+ * @deprecated Use `QueryNode.cloneWithoutOrderBy` instead.
41
+ */
42
+ cloneWithoutOrderBy: (node: DeleteQueryNode) => DeleteQueryNode;
37
43
  cloneWithLimit(deleteNode: DeleteQueryNode, limit: LimitNode): DeleteQueryNode;
38
44
  cloneWithoutLimit(deleteNode: DeleteQueryNode): DeleteQueryNode;
39
45
  cloneWithUsing(deleteNode: DeleteQueryNode, tables: OperationNode[]): DeleteQueryNode;