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
@@ -0,0 +1,75 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RefreshMaterializedViewBuilder = void 0;
4
+ const object_utils_js_1 = require("../util/object-utils.js");
5
+ const refresh_materialized_view_node_js_1 = require("../operation-node/refresh-materialized-view-node.js");
6
+ class RefreshMaterializedViewBuilder {
7
+ #props;
8
+ constructor(props) {
9
+ this.#props = (0, object_utils_js_1.freeze)(props);
10
+ }
11
+ /**
12
+ * Adds the "concurrently" modifier.
13
+ *
14
+ * Use this to refresh the view without locking out concurrent selects on the materialized view.
15
+ *
16
+ * WARNING!
17
+ * This cannot be used with the "with no data" modifier.
18
+ */
19
+ concurrently() {
20
+ return new RefreshMaterializedViewBuilder({
21
+ ...this.#props,
22
+ node: refresh_materialized_view_node_js_1.RefreshMaterializedViewNode.cloneWith(this.#props.node, {
23
+ concurrently: true,
24
+ withNoData: false,
25
+ }),
26
+ });
27
+ }
28
+ /**
29
+ * Adds the "with data" modifier.
30
+ *
31
+ * If specified (or defaults) the backing query is executed to provide the new data, and the materialized view is left in a scannable state
32
+ */
33
+ withData() {
34
+ return new RefreshMaterializedViewBuilder({
35
+ ...this.#props,
36
+ node: refresh_materialized_view_node_js_1.RefreshMaterializedViewNode.cloneWith(this.#props.node, {
37
+ withNoData: false,
38
+ }),
39
+ });
40
+ }
41
+ /**
42
+ * Adds the "with no data" modifier.
43
+ *
44
+ * If specified, no new data is generated and the materialized view is left in an unscannable state.
45
+ *
46
+ * WARNING!
47
+ * This cannot be used with the "concurrently" modifier.
48
+ */
49
+ withNoData() {
50
+ return new RefreshMaterializedViewBuilder({
51
+ ...this.#props,
52
+ node: refresh_materialized_view_node_js_1.RefreshMaterializedViewNode.cloneWith(this.#props.node, {
53
+ withNoData: true,
54
+ concurrently: false,
55
+ }),
56
+ });
57
+ }
58
+ /**
59
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
60
+ * what the provided function returns.
61
+ */
62
+ $call(func) {
63
+ return func(this);
64
+ }
65
+ toOperationNode() {
66
+ return this.#props.executor.transformQuery(this.#props.node, this.#props.queryId);
67
+ }
68
+ compile() {
69
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
70
+ }
71
+ async execute() {
72
+ await this.#props.executor.executeQuery(this.compile(), this.#props.queryId);
73
+ }
74
+ }
75
+ exports.RefreshMaterializedViewBuilder = RefreshMaterializedViewBuilder;
@@ -11,6 +11,7 @@ import { DropViewBuilder } from './drop-view-builder.js';
11
11
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
12
12
  import { CreateTypeBuilder } from './create-type-builder.js';
13
13
  import { DropTypeBuilder } from './drop-type-builder.js';
14
+ import { RefreshMaterializedViewBuilder } from './refresh-materialized-view-builder.js';
14
15
  /**
15
16
  * Provides methods for building database schema.
16
17
  */
@@ -158,6 +159,19 @@ export declare class SchemaModule {
158
159
  * ```
159
160
  */
160
161
  createView(viewName: string): CreateViewBuilder;
162
+ /**
163
+ * Refresh a materialized view.
164
+ *
165
+ * ### Examples
166
+ *
167
+ * ```ts
168
+ * await db.schema
169
+ * .refreshMaterializedView('my_view')
170
+ * .concurrently()
171
+ * .execute()
172
+ * ```
173
+ */
174
+ refreshMaterializedView(viewName: string): RefreshMaterializedViewBuilder;
161
175
  /**
162
176
  * Drop a view.
163
177
  *
@@ -27,6 +27,8 @@ const drop_type_builder_js_1 = require("./drop-type-builder.js");
27
27
  const create_type_node_js_1 = require("../operation-node/create-type-node.js");
28
28
  const drop_type_node_js_1 = require("../operation-node/drop-type-node.js");
29
29
  const identifier_parser_js_1 = require("../parser/identifier-parser.js");
30
+ const refresh_materialized_view_builder_js_1 = require("./refresh-materialized-view-builder.js");
31
+ const refresh_materialized_view_node_js_1 = require("../operation-node/refresh-materialized-view-node.js");
30
32
  /**
31
33
  * Provides methods for building database schema.
32
34
  */
@@ -224,6 +226,25 @@ class SchemaModule {
224
226
  node: create_view_node_js_1.CreateViewNode.create(viewName),
225
227
  });
226
228
  }
229
+ /**
230
+ * Refresh a materialized view.
231
+ *
232
+ * ### Examples
233
+ *
234
+ * ```ts
235
+ * await db.schema
236
+ * .refreshMaterializedView('my_view')
237
+ * .concurrently()
238
+ * .execute()
239
+ * ```
240
+ */
241
+ refreshMaterializedView(viewName) {
242
+ return new refresh_materialized_view_builder_js_1.RefreshMaterializedViewBuilder({
243
+ queryId: (0, query_id_js_1.createQueryId)(),
244
+ executor: this.#executor,
245
+ node: refresh_materialized_view_node_js_1.RefreshMaterializedViewNode.create(viewName),
246
+ });
247
+ }
227
248
  /**
228
249
  * Drop a view.
229
250
  *
@@ -3,12 +3,21 @@ import { UniqueConstraintNode } from '../operation-node/unique-constraint-node.j
3
3
  export declare class UniqueConstraintNodeBuilder implements OperationNodeSource {
4
4
  #private;
5
5
  constructor(node: UniqueConstraintNode);
6
- toOperationNode(): UniqueConstraintNode;
7
6
  /**
8
7
  * Adds `nulls not distinct` to the unique constraint definition
9
8
  *
10
9
  * Supported by PostgreSQL dialect only
11
10
  */
12
11
  nullsNotDistinct(): UniqueConstraintNodeBuilder;
12
+ deferrable(): UniqueConstraintNodeBuilder;
13
+ notDeferrable(): UniqueConstraintNodeBuilder;
14
+ initiallyDeferred(): UniqueConstraintNodeBuilder;
15
+ initiallyImmediate(): UniqueConstraintNodeBuilder;
16
+ /**
17
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
18
+ * what the provided function returns.
19
+ */
20
+ $call<T>(func: (qb: this) => T): T;
21
+ toOperationNode(): UniqueConstraintNode;
13
22
  }
14
23
  export type UniqueConstraintNodeBuilderCallback = (builder: UniqueConstraintNodeBuilder) => UniqueConstraintNodeBuilder;
@@ -2,15 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UniqueConstraintNodeBuilder = void 0;
4
4
  const unique_constraint_node_js_1 = require("../operation-node/unique-constraint-node.js");
5
- const prevent_await_js_1 = require("../util/prevent-await.js");
6
5
  class UniqueConstraintNodeBuilder {
7
6
  #node;
8
7
  constructor(node) {
9
8
  this.#node = node;
10
9
  }
11
- toOperationNode() {
12
- return this.#node;
13
- }
14
10
  /**
15
11
  * Adds `nulls not distinct` to the unique constraint definition
16
12
  *
@@ -19,6 +15,31 @@ class UniqueConstraintNodeBuilder {
19
15
  nullsNotDistinct() {
20
16
  return new UniqueConstraintNodeBuilder(unique_constraint_node_js_1.UniqueConstraintNode.cloneWith(this.#node, { nullsNotDistinct: true }));
21
17
  }
18
+ deferrable() {
19
+ return new UniqueConstraintNodeBuilder(unique_constraint_node_js_1.UniqueConstraintNode.cloneWith(this.#node, { deferrable: true }));
20
+ }
21
+ notDeferrable() {
22
+ return new UniqueConstraintNodeBuilder(unique_constraint_node_js_1.UniqueConstraintNode.cloneWith(this.#node, { deferrable: false }));
23
+ }
24
+ initiallyDeferred() {
25
+ return new UniqueConstraintNodeBuilder(unique_constraint_node_js_1.UniqueConstraintNode.cloneWith(this.#node, {
26
+ initiallyDeferred: true,
27
+ }));
28
+ }
29
+ initiallyImmediate() {
30
+ return new UniqueConstraintNodeBuilder(unique_constraint_node_js_1.UniqueConstraintNode.cloneWith(this.#node, {
31
+ initiallyDeferred: false,
32
+ }));
33
+ }
34
+ /**
35
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
36
+ * what the provided function returns.
37
+ */
38
+ $call(func) {
39
+ return func(this);
40
+ }
41
+ toOperationNode() {
42
+ return this.#node;
43
+ }
22
44
  }
23
45
  exports.UniqueConstraintNodeBuilder = UniqueConstraintNodeBuilder;
24
- (0, prevent_await_js_1.preventAwait)(UniqueConstraintNodeBuilder, "don't await UniqueConstraintNodeBuilder instances directly.");
@@ -44,5 +44,5 @@ import { Simplify } from './type-utils.js';
44
44
  * ```
45
45
  */
46
46
  export type InferResult<C extends Compilable<any> | CompiledQuery<any>> = C extends Compilable<infer O> ? ResolveResult<O> : C extends CompiledQuery<infer O> ? ResolveResult<O> : never;
47
- type ResolveResult<O> = O extends InsertResult | UpdateResult | DeleteResult | MergeResult ? O : Simplify<O>[];
47
+ type ResolveResult<O> = O extends InsertResult | UpdateResult | DeleteResult | MergeResult ? O[] : Simplify<O>[];
48
48
  export {};
@@ -4,6 +4,7 @@ export declare const LOG_LEVELS: readonly ["query", "error"];
4
4
  export type LogLevel = ArrayItemType<typeof LOG_LEVELS>;
5
5
  export interface QueryLogEvent {
6
6
  readonly level: 'query';
7
+ readonly isStream?: boolean;
7
8
  readonly query: CompiledQuery;
8
9
  readonly queryDurationMillis: number;
9
10
  }
@@ -39,8 +39,9 @@ class Log {
39
39
  exports.Log = Log;
40
40
  function defaultLogger(event) {
41
41
  if (event.level === 'query') {
42
- console.log(`kysely:query: ${event.query.sql}`);
43
- console.log(`kysely:query: duration: ${event.queryDurationMillis.toFixed(1)}ms`);
42
+ const prefix = `kysely:query:${event.isStream ? 'stream:' : ''}`;
43
+ console.log(`${prefix} ${event.query.sql}`);
44
+ console.log(`${prefix} duration: ${event.queryDurationMillis.toFixed(1)}ms`);
44
45
  }
45
46
  else if (event.level === 'error') {
46
47
  if (event.error instanceof Error) {
@@ -0,0 +1,7 @@
1
+ import { ConnectionProvider } from '../driver/connection-provider.js';
2
+ import { DatabaseConnection } from '../driver/database-connection.js';
3
+ export interface ControlledConnection {
4
+ readonly connection: DatabaseConnection;
5
+ readonly release: () => void;
6
+ }
7
+ export declare function provideControlledConnection(connectionProvider: ConnectionProvider): Promise<ControlledConnection>;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.provideControlledConnection = provideControlledConnection;
4
+ const deferred_js_1 = require("./deferred.js");
5
+ const object_utils_js_1 = require("./object-utils.js");
6
+ async function provideControlledConnection(connectionProvider) {
7
+ const connectionDefer = new deferred_js_1.Deferred();
8
+ const connectionReleaseDefer = new deferred_js_1.Deferred();
9
+ connectionProvider
10
+ .provideConnection(async (connection) => {
11
+ connectionDefer.resolve(connection);
12
+ return await connectionReleaseDefer.promise;
13
+ })
14
+ .catch((ex) => connectionDefer.reject(ex));
15
+ // Create composite of the connection and the release method instead of
16
+ // modifying the connection or creating a new nesting `DatabaseConnection`.
17
+ // This way we don't accidentally override any methods of 3rd party
18
+ // connections and don't return wrapped connections to drivers that
19
+ // expect a certain specific connection class.
20
+ return (0, object_utils_js_1.freeze)({
21
+ connection: await connectionDefer.promise,
22
+ release: connectionReleaseDefer.resolve,
23
+ });
24
+ }
@@ -1,4 +1,12 @@
1
+ import { KyselyTypeError } from '../../util/type-error.js';
1
2
  export interface MssqlDialectConfig {
3
+ /**
4
+ * When `true`, connections are reset to their initial states when released
5
+ * back to the pool, resulting in additional requests to the database.
6
+ *
7
+ * Defaults to `false`.
8
+ */
9
+ resetConnectionsOnRelease?: boolean;
2
10
  /**
3
11
  * This dialect uses the `tarn` package to manage the connection pool to your
4
12
  * database. To use it as a peer dependency and not bundle it with Kysely's code,
@@ -54,26 +62,30 @@ export interface MssqlDialectConfig {
54
62
  * ```
55
63
  */
56
64
  tedious: Tedious;
65
+ /**
66
+ * When `true`, connections are validated before being acquired from the pool,
67
+ * resulting in additional requests to the database.
68
+ *
69
+ * Defaults to `true`.
70
+ */
71
+ validateConnections?: boolean;
57
72
  }
58
73
  export interface Tedious {
59
74
  connectionFactory: () => TediousConnection | Promise<TediousConnection>;
60
75
  ISOLATION_LEVEL: TediousIsolationLevel;
61
76
  Request: TediousRequestClass;
62
- TYPES: TediousTypes;
63
77
  /**
64
- * Controls whether connections are reset to their initial states when released back to the pool. Resetting a connection performs additional requests to the database.
65
- * See {@link https://tediousjs.github.io/tedious/api-connection.html#function_reset | connection.reset}.
66
- *
67
- * Defaults to `true`.
78
+ * @deprecated use {@link MssqlDialectConfig.resetConnectionsOnRelease} instead.
68
79
  */
69
- resetConnectionOnRelease?: boolean;
80
+ resetConnectionOnRelease?: KyselyTypeError<'deprecated: use `MssqlDialectConfig.resetConnectionsOnRelease` instead'>;
81
+ TYPES: TediousTypes;
70
82
  }
71
83
  export interface TediousConnection {
72
- beginTransaction(callback: (error?: Error | null, transactionDescriptor?: any) => void, name?: string, isolationLevel?: number): void;
84
+ beginTransaction(callback: (err: Error | null | undefined, transactionDescriptor?: any) => void, name?: string | undefined, isolationLevel?: number | undefined): void;
73
85
  cancel(): boolean;
74
86
  close(): void;
75
- commitTransaction(callback: (error?: Error | null) => void, name?: string): void;
76
- connect(callback?: (error?: Error) => void): void;
87
+ commitTransaction(callback: (err: Error | null | undefined) => void, name?: string | undefined): void;
88
+ connect(connectListener: (err?: Error) => void): void;
77
89
  execSql(request: TediousRequest): void;
78
90
  off(event: 'error', listener: (error: unknown) => void): this;
79
91
  off(event: string, listener: (...args: any[]) => void): this;
@@ -81,9 +93,9 @@ export interface TediousConnection {
81
93
  on(event: string, listener: (...args: any[]) => void): this;
82
94
  once(event: 'end', listener: () => void): this;
83
95
  once(event: string, listener: (...args: any[]) => void): this;
84
- reset(callback: (error?: Error | null) => void): void;
85
- rollbackTransaction(callback: (error?: Error | null) => void, name?: string): void;
86
- saveTransaction(callback: (error?: Error | null) => void, name: string): void;
96
+ reset(callback: (err: Error | null | undefined) => void): void;
97
+ rollbackTransaction(callback: (err: Error | null | undefined) => void, name?: string | undefined): void;
98
+ saveTransaction(callback: (err: Error | null | undefined) => void, name: string): void;
87
99
  }
88
100
  export type TediousIsolationLevel = Record<string, number>;
89
101
  export interface TediousRequestClass {
@@ -132,11 +144,9 @@ export interface Tarn {
132
144
  */
133
145
  options: Omit<TarnPoolOptions<any>, 'create' | 'destroy' | 'validate'> & {
134
146
  /**
135
- * Controls whether connections are validated before being acquired from the pool. Connection validation performs additional requests to the database.
136
- *
137
- * Defaults to `true`.
147
+ * @deprecated use {@link MssqlDialectConfig.validateConnections} instead.
138
148
  */
139
- validateConnections?: boolean;
149
+ validateConnections?: KyselyTypeError<'deprecated: use `MssqlDialectConfig.validateConnections` instead'>;
140
150
  };
141
151
  /**
142
152
  * Tarn.js' Pool class.
@@ -2,7 +2,7 @@ import { DatabaseConnection, QueryResult } from '../../driver/database-connectio
2
2
  import { Driver, TransactionSettings } from '../../driver/driver.js';
3
3
  import { MssqlDialectConfig, Tedious, TediousConnection } from './mssql-dialect-config.js';
4
4
  import { CompiledQuery } from '../../query-compiler/compiled-query.js';
5
- declare const PRIVATE_RELEASE_METHOD: unique symbol;
5
+ declare const PRIVATE_RESET_METHOD: unique symbol;
6
6
  declare const PRIVATE_DESTROY_METHOD: unique symbol;
7
7
  export declare class MssqlDriver implements Driver {
8
8
  #private;
@@ -30,6 +30,8 @@ export declare class MssqlDriver implements Driver {
30
30
  * Rolls back a transaction.
31
31
  */
32
32
  rollbackTransaction(connection: MssqlConnection): Promise<void>;
33
+ savepoint(connection: MssqlConnection, savepointName: string): Promise<void>;
34
+ rollbackToSavepoint(connection: MssqlConnection, savepointName: string): Promise<void>;
33
35
  /**
34
36
  * Releases a connection back to the pool.
35
37
  */
@@ -46,10 +48,11 @@ declare class MssqlConnection implements DatabaseConnection {
46
48
  commitTransaction(): Promise<void>;
47
49
  connect(): Promise<this>;
48
50
  executeQuery<O>(compiledQuery: CompiledQuery): Promise<QueryResult<O>>;
49
- rollbackTransaction(): Promise<void>;
51
+ rollbackTransaction(savepointName?: string): Promise<void>;
52
+ savepoint(savepointName: string): Promise<void>;
50
53
  streamQuery<O>(compiledQuery: CompiledQuery, chunkSize: number): AsyncIterableIterator<QueryResult<O>>;
51
54
  validate(): Promise<boolean>;
52
- [PRIVATE_RELEASE_METHOD](): Promise<void>;
55
+ [PRIVATE_RESET_METHOD](): Promise<void>;
53
56
  [PRIVATE_DESTROY_METHOD](): Promise<void>;
54
57
  }
55
58
  export {};
@@ -4,15 +4,15 @@ import { CompiledQuery } from '../../query-compiler/compiled-query.js';
4
4
  import { extendStackTrace } from '../../util/stack-trace-utils.js';
5
5
  import { randomString } from '../../util/random-string.js';
6
6
  import { Deferred } from '../../util/deferred.js';
7
- const PRIVATE_RELEASE_METHOD = Symbol();
7
+ const PRIVATE_RESET_METHOD = Symbol();
8
8
  const PRIVATE_DESTROY_METHOD = Symbol();
9
9
  export class MssqlDriver {
10
10
  #config;
11
11
  #pool;
12
12
  constructor(config) {
13
13
  this.#config = freeze({ ...config });
14
- const { tarn, tedious } = this.#config;
15
- const { validateConnections, ...poolOptions } = tarn.options;
14
+ const { tarn, tedious, validateConnections } = this.#config;
15
+ const { validateConnections: deprecatedValidateConnections, ...poolOptions } = tarn.options;
16
16
  this.#pool = new tarn.Pool({
17
17
  ...poolOptions,
18
18
  create: async () => {
@@ -24,7 +24,8 @@ export class MssqlDriver {
24
24
  },
25
25
  // @ts-ignore `tarn` accepts a function that returns a promise here, but
26
26
  // the types are not aligned and it type errors.
27
- validate: validateConnections === false
27
+ validate: validateConnections === false ||
28
+ deprecatedValidateConnections === false
28
29
  ? undefined
29
30
  : (connection) => connection.validate(),
30
31
  });
@@ -44,8 +45,17 @@ export class MssqlDriver {
44
45
  async rollbackTransaction(connection) {
45
46
  await connection.rollbackTransaction();
46
47
  }
48
+ async savepoint(connection, savepointName) {
49
+ await connection.savepoint(savepointName);
50
+ }
51
+ async rollbackToSavepoint(connection, savepointName) {
52
+ await connection.rollbackTransaction(savepointName);
53
+ }
47
54
  async releaseConnection(connection) {
48
- await connection[PRIVATE_RELEASE_METHOD]();
55
+ if (this.#config.resetConnectionsOnRelease ||
56
+ this.#config.tedious.resetConnectionOnRelease) {
57
+ await connection[PRIVATE_RESET_METHOD]();
58
+ }
49
59
  this.#pool.release(connection);
50
60
  }
51
61
  async destroy() {
@@ -115,13 +125,21 @@ class MssqlConnection {
115
125
  throw extendStackTrace(err, new Error());
116
126
  }
117
127
  }
118
- async rollbackTransaction() {
128
+ async rollbackTransaction(savepointName) {
119
129
  await new Promise((resolve, reject) => this.#connection.rollbackTransaction((error) => {
120
130
  if (error)
121
131
  reject(error);
122
132
  else
123
133
  resolve(undefined);
124
- }));
134
+ }, savepointName));
135
+ }
136
+ async savepoint(savepointName) {
137
+ await new Promise((resolve, reject) => this.#connection.saveTransaction((error) => {
138
+ if (error)
139
+ reject(error);
140
+ else
141
+ resolve(undefined);
142
+ }, savepointName));
125
143
  }
126
144
  async *streamQuery(compiledQuery, chunkSize) {
127
145
  if (!Number.isInteger(chunkSize) || chunkSize <= 0) {
@@ -190,18 +208,15 @@ class MssqlConnection {
190
208
  }
191
209
  });
192
210
  }
193
- async [PRIVATE_RELEASE_METHOD]() {
194
- // TODO: flip this to `if (!this.#tedious.resetConnectionOnRelease) {}` in a future PR.
195
- if (this.#tedious.resetConnectionOnRelease !== false) {
196
- await new Promise((resolve, reject) => {
197
- this.#connection.reset((error) => {
198
- if (error)
199
- reject(error);
200
- else
201
- resolve(undefined);
202
- });
211
+ async [PRIVATE_RESET_METHOD]() {
212
+ await new Promise((resolve, reject) => {
213
+ this.#connection.reset((error) => {
214
+ if (error)
215
+ reject(error);
216
+ else
217
+ resolve(undefined);
203
218
  });
204
- }
219
+ });
205
220
  }
206
221
  [PRIVATE_DESTROY_METHOD]() {
207
222
  return new Promise((resolve) => {
@@ -218,7 +233,6 @@ class MssqlRequest {
218
233
  #streamChunkSize;
219
234
  #subscribers;
220
235
  #tedious;
221
- #error;
222
236
  #rowCount;
223
237
  constructor(props) {
224
238
  const { compiledQuery, onDone, streamChunkSize, tedious } = props;
@@ -4,6 +4,7 @@ import { DropColumnNode } from '../../operation-node/drop-column-node.js';
4
4
  import { OffsetNode } from '../../operation-node/offset-node.js';
5
5
  import { MergeQueryNode } from '../../operation-node/merge-query-node.js';
6
6
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
7
+ import { CollateNode } from '../../operation-node/collate-node.js';
7
8
  export declare class MssqlQueryCompiler extends DefaultQueryCompiler {
8
9
  protected getCurrentParameterPlaceholder(): string;
9
10
  protected visitOffset(node: OffsetNode): void;
@@ -11,5 +12,6 @@ export declare class MssqlQueryCompiler extends DefaultQueryCompiler {
11
12
  protected visitAddColumn(node: AddColumnNode): void;
12
13
  protected visitDropColumn(node: DropColumnNode): void;
13
14
  protected visitMergeQuery(node: MergeQueryNode): void;
15
+ protected visitCollate(node: CollateNode): void;
14
16
  protected announcesNewColumnDataType(): boolean;
15
17
  }
@@ -1,5 +1,6 @@
1
1
  /// <reference types="./mssql-query-compiler.d.ts" />
2
2
  import { DefaultQueryCompiler } from '../../query-compiler/default-query-compiler.js';
3
+ const COLLATION_CHAR_REGEX = /^[a-z0-9_]$/i;
3
4
  export class MssqlQueryCompiler extends DefaultQueryCompiler {
4
5
  getCurrentParameterPlaceholder() {
5
6
  return `@${this.numParameters}`;
@@ -63,6 +64,16 @@ export class MssqlQueryCompiler extends DefaultQueryCompiler {
63
64
  super.visitMergeQuery(node);
64
65
  this.append(';');
65
66
  }
67
+ visitCollate(node) {
68
+ this.append('collate ');
69
+ const { name } = node.collation;
70
+ for (const char of name) {
71
+ if (!COLLATION_CHAR_REGEX.test(char)) {
72
+ throw new Error(`Invalid collation: ${name}`);
73
+ }
74
+ }
75
+ this.append(name);
76
+ }
66
77
  announcesNewColumnDataType() {
67
78
  return false;
68
79
  }
@@ -1,6 +1,7 @@
1
1
  import { DatabaseConnection, QueryResult } from '../../driver/database-connection.js';
2
2
  import { Driver, TransactionSettings } from '../../driver/driver.js';
3
3
  import { CompiledQuery } from '../../query-compiler/compiled-query.js';
4
+ import { QueryCompiler } from '../../query-compiler/query-compiler.js';
4
5
  import { MysqlDialectConfig, MysqlPoolConnection } from './mysql-dialect-config.js';
5
6
  declare const PRIVATE_RELEASE_METHOD: unique symbol;
6
7
  export declare class MysqlDriver implements Driver {
@@ -29,6 +30,9 @@ export declare class MysqlDriver implements Driver {
29
30
  * Rolls back a transaction.
30
31
  */
31
32
  rollbackTransaction(connection: DatabaseConnection): Promise<void>;
33
+ savepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
34
+ rollbackToSavepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
35
+ releaseSavepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
32
36
  /**
33
37
  * Releases a connection back to the pool.
34
38
  */
@@ -1,6 +1,8 @@
1
1
  /// <reference types="./mysql-driver.d.ts" />
2
+ import { parseSavepointCommand } from '../../parser/savepoint-parser.js';
2
3
  import { CompiledQuery } from '../../query-compiler/compiled-query.js';
3
4
  import { isFunction, isObject, freeze } from '../../util/object-utils.js';
5
+ import { createQueryId } from '../../util/query-id.js';
4
6
  import { extendStackTrace } from '../../util/stack-trace-utils.js';
5
7
  const PRIVATE_RELEASE_METHOD = Symbol();
6
8
  export class MysqlDriver {
@@ -46,9 +48,17 @@ export class MysqlDriver {
46
48
  });
47
49
  }
48
50
  async beginTransaction(connection, settings) {
49
- if (settings.isolationLevel) {
51
+ if (settings.isolationLevel || settings.accessMode) {
52
+ const parts = [];
53
+ if (settings.isolationLevel) {
54
+ parts.push(`isolation level ${settings.isolationLevel}`);
55
+ }
56
+ if (settings.accessMode) {
57
+ parts.push(settings.accessMode);
58
+ }
59
+ const sql = `set transaction ${parts.join(', ')}`;
50
60
  // On MySQL this sets the isolation level of the next transaction.
51
- await connection.executeQuery(CompiledQuery.raw(`set transaction isolation level ${settings.isolationLevel}`));
61
+ await connection.executeQuery(CompiledQuery.raw(sql));
52
62
  }
53
63
  await connection.executeQuery(CompiledQuery.raw('begin'));
54
64
  }
@@ -58,6 +68,15 @@ export class MysqlDriver {
58
68
  async rollbackTransaction(connection) {
59
69
  await connection.executeQuery(CompiledQuery.raw('rollback'));
60
70
  }
71
+ async savepoint(connection, savepointName, compileQuery) {
72
+ await connection.executeQuery(compileQuery(parseSavepointCommand('savepoint', savepointName), createQueryId()));
73
+ }
74
+ async rollbackToSavepoint(connection, savepointName, compileQuery) {
75
+ await connection.executeQuery(compileQuery(parseSavepointCommand('rollback to', savepointName), createQueryId()));
76
+ }
77
+ async releaseSavepoint(connection, savepointName, compileQuery) {
78
+ await connection.executeQuery(compileQuery(parseSavepointCommand('release savepoint', savepointName), createQueryId()));
79
+ }
61
80
  async releaseConnection(connection) {
62
81
  connection[PRIVATE_RELEASE_METHOD]();
63
82
  }
@@ -87,22 +106,18 @@ class MysqlConnection {
87
106
  const result = await this.#executeQuery(compiledQuery);
88
107
  if (isOkPacket(result)) {
89
108
  const { insertId, affectedRows, changedRows } = result;
90
- const numAffectedRows = affectedRows !== undefined && affectedRows !== null
91
- ? BigInt(affectedRows)
92
- : undefined;
93
- const numChangedRows = changedRows !== undefined && changedRows !== null
94
- ? BigInt(changedRows)
95
- : undefined;
96
109
  return {
97
110
  insertId: insertId !== undefined &&
98
111
  insertId !== null &&
99
112
  insertId.toString() !== '0'
100
113
  ? BigInt(insertId)
101
114
  : undefined,
102
- // TODO: remove.
103
- numUpdatedOrDeletedRows: numAffectedRows,
104
- numAffectedRows,
105
- numChangedRows,
115
+ numAffectedRows: affectedRows !== undefined && affectedRows !== null
116
+ ? BigInt(affectedRows)
117
+ : undefined,
118
+ numChangedRows: changedRows !== undefined && changedRows !== null
119
+ ? BigInt(changedRows)
120
+ : undefined,
106
121
  rows: [],
107
122
  };
108
123
  }
@@ -1,6 +1,7 @@
1
1
  import { DatabaseConnection, QueryResult } from '../../driver/database-connection.js';
2
2
  import { Driver, TransactionSettings } from '../../driver/driver.js';
3
3
  import { CompiledQuery } from '../../query-compiler/compiled-query.js';
4
+ import { QueryCompiler } from '../../query-compiler/query-compiler.js';
4
5
  import { PostgresCursorConstructor, PostgresDialectConfig, PostgresPoolClient } from './postgres-dialect-config.js';
5
6
  declare const PRIVATE_RELEASE_METHOD: unique symbol;
6
7
  export declare class PostgresDriver implements Driver {
@@ -29,6 +30,9 @@ export declare class PostgresDriver implements Driver {
29
30
  * Rolls back a transaction.
30
31
  */
31
32
  rollbackTransaction(connection: DatabaseConnection): Promise<void>;
33
+ savepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
34
+ rollbackToSavepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
35
+ releaseSavepoint(connection: DatabaseConnection, savepointName: string, compileQuery: QueryCompiler['compileQuery']): Promise<void>;
32
36
  /**
33
37
  * Releases a connection back to the pool.
34
38
  */