kysely 0.27.6 → 0.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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
package/README.md CHANGED
@@ -54,7 +54,175 @@ Please visit our documentation site [kysely.dev](https://kysely.dev) to get star
54
54
  API documentation hosted [here](https://kysely-org.github.io/kysely-apidoc/), but you can access the same
55
55
  documentation in your IDE by hovering over a class/method/property/whatever.
56
56
 
57
- # Contributors
57
+ # Core team
58
+
59
+ ## Project leads
60
+
61
+ Responsible for project direction, API design, maintenance, code reviews, community support, documentation, and working on some of the most
62
+ impactful/challenging things.
63
+
64
+ <table>
65
+ <tbody>
66
+ <tr>
67
+ <td align="center">
68
+ <a href="https://github.com/koskimas">
69
+ <img src="https://avatars.githubusercontent.com/u/846508?v=4?s=100" width="100px;" alt=""/>
70
+ <br />
71
+ Sami Koskimäki
72
+ </a>
73
+ <br />
74
+ (the <a href="https://web.archive.org/web/20211203210043/https://www.jakso.me/blog/kysely-a-type-safe-sql-query-builder-for-typescript">author</a>)
75
+ </td>
76
+ <td align="center">
77
+ <a href="https://github.com/igalklebanov">
78
+ <img src="https://avatars.githubusercontent.com/u/14938291?v=4&s=100" width="100px;" alt=""/>
79
+ <br />
80
+ Igal Klebanov
81
+ </a>
82
+ <br />
83
+ (the <a href="https://github.com/kysely-org/kysely/pull/1414#issuecomment-2781281996">dynamo</a>)
84
+ </td>
85
+ </tr>
86
+ </tbody>
87
+ </table>
88
+
89
+ ## Honorable mentions
90
+
91
+ People who had special impact on the project and its growth.
92
+
93
+ <table>
94
+ <tbody>
95
+ <tr>
96
+ <td align="center">
97
+ <a href="https://github.com/fhur">
98
+ <img src="https://avatars.githubusercontent.com/u/6452323?v=4&s=100" width="100px;" alt=""/>
99
+ <br />
100
+ Fernando Hurtado
101
+ </a>
102
+ <br />
103
+ (1st <a href="https://kysely.dev">docs</a>)
104
+ </td>
105
+ <td align="center">
106
+ <a href="https://github.com/wirekang">
107
+ <img src="https://avatars.githubusercontent.com/u/43294688?v=4&s=100" width="100px;" alt=""/>
108
+ <br />
109
+ Wirekang
110
+ </a>
111
+ <br />
112
+ (<a href="https://kyse.link">playground</a>)
113
+ </td>
114
+ <td align="center">
115
+ <a href="https://github.com/tgriesser">
116
+ <img src="https://avatars.githubusercontent.com/u/154748?v=4&s=100" width="100px;" alt=""/>
117
+ <br />
118
+ Tim Griesser
119
+ </a>
120
+ <br />
121
+ (<a href="https://knexjs.org/">Knex</a>)
122
+ </td>
123
+ </tr>
124
+ <tr>
125
+ <td align="center">
126
+ <a href="https://github.com/RobinBlomberg">
127
+ <img src="https://avatars.githubusercontent.com/u/20827397?v=4&s=100" width="100px;" alt=""/>
128
+ <br />
129
+ Robin Blomberg
130
+ </a>
131
+ <br />
132
+ (<a href="https://github.com/RobinBlomberg/kysely-codegen">codegen</a>)
133
+ </td>
134
+ <td align="center">
135
+ <a href="https://github.com/nexxeln">
136
+ <img src="https://avatars.githubusercontent.com/u/95541290?v=4&s=100" width="100px" alt="" />
137
+ <br />
138
+ Shoubhit Dash
139
+ </a>
140
+ <br />
141
+ (prisma <a href="https://www.nexxel.dev/blog/typesafe-database">idea</a>)
142
+ </td>
143
+ <td align="center">
144
+ <a href="https://github.com/nexxeln">
145
+ <img src="https://avatars.githubusercontent.com/u/3050355?v=4&s=100" width="100px" alt="" />
146
+ <br />
147
+ Valtýr Örn Kjartansson
148
+ </a>
149
+ <br />
150
+ (prisma <a href="https://github.com/valtyr/prisma-kysely">impl</a>)
151
+ </td>
152
+ </tr>
153
+ <tr>
154
+ <td align="center">
155
+ <a href="https://github.com/thdxr">
156
+ <img src="https://avatars.githubusercontent.com/u/826656?v=4&s=100" width="100px;" alt=""/>
157
+ <br />
158
+ Dax Raad
159
+ </a>
160
+ <br />
161
+ (early <a href="https://thdxr.com/post/serverless-relational-showdown">adopter</a>)
162
+ </td>
163
+ <td align="center">
164
+ <a href="https://github.com/t3dotgg">
165
+ <img src="https://avatars.githubusercontent.com/u/6751787?v=4&s=100" width="100px;" alt=""/>
166
+ <br />
167
+ Theo Browne
168
+ </a>
169
+ <br />
170
+ (early <a href="https://discord.com/channels/966627436387266600/988912020558602331/993220628154961930">promoter</a>)
171
+ </td>
172
+ <td align="center">
173
+ <a href="https://github.com/leerob">
174
+ <img src="https://avatars.githubusercontent.com/u/9113740?v=4&s=100" width="100px;" alt="" />
175
+ <br />
176
+ Lee Robinson
177
+ </a>
178
+ <br />
179
+ (early <a href="https://x.com/leerob/status/1576929372811849730">promoter</a>)
180
+ </td>
181
+ </tr>
182
+ <tr>
183
+ <td align="center">
184
+ <a href="https://github.com/ethanresnick">
185
+ <img src="https://avatars.githubusercontent.com/u/471894?v=4&s=100" width="100px" alt="" />
186
+ <br />
187
+ Ethan Resnick
188
+ </a>
189
+ <br />
190
+ (timely <a href="https://github.com/kysely-org/kysely/issues/494">feedback</a>)
191
+ </td>
192
+ <td align="center">
193
+ <a href="https://github.com/thetutlage">
194
+ <img src="https://avatars.githubusercontent.com/u/1706381?v=4&s=100" width="100px;" alt="" />
195
+ <br />
196
+ Harminder Virk
197
+ </a>
198
+ <br />
199
+ (dope <a href="https://github.com/thetutlage/meta/discussions/8">writeup</a>)
200
+ </td>
201
+ <td align="center">
202
+ <a href="https://github.com/elitan">
203
+ <img src="https://avatars.githubusercontent.com/u/331818?v=4&s=100" width="100px;" alt="" />
204
+ <br />
205
+ Johan Eliasson
206
+ </a>
207
+ <br />
208
+ (<a href="https://eliasson.me/articles/crafting-the-perfect-t3-stack-my-journey-with-kysely-atlas-and-clerk">promoter</a>/<a href="https://www.youtube.com/watch?v=u2s39dRIpCM">educator</a>)
209
+ </td>
210
+ </tr>
211
+ <!-- <tr>
212
+ <td align="center">
213
+ <a href="">
214
+ <img src="" width="100px;" alt="" />
215
+ <br />
216
+ Name
217
+ </a>
218
+ <br />
219
+ (contribution)
220
+ </td>
221
+ </tr> -->
222
+ </tbody>
223
+ </table>
224
+
225
+ ## All contributors
58
226
 
59
227
  <p align="center">
60
228
  <a href="https://github.com/kysely-org/kysely/graphs/contributors">
package/deno.check.d.ts CHANGED
@@ -10,13 +10,19 @@ import type {
10
10
  } from './dist/esm'
11
11
 
12
12
  export interface Database {
13
+ audit: AuditTable
13
14
  person: PersonTable
15
+ person_backup: PersonTable
14
16
  pet: PetTable
15
17
  toy: ToyTable
16
18
  wine: WineTable
17
19
  wine_stock_change: WineStockChangeTable
18
20
  }
19
21
 
22
+ interface AuditTable {
23
+ action: string
24
+ }
25
+
20
26
  interface PersonTable {
21
27
  id: Generated<number>
22
28
  address: { city: string } | null
@@ -51,6 +57,7 @@ interface PetTable {
51
57
 
52
58
  interface ToyTable {
53
59
  id: Generated<number>
60
+ name: string
54
61
  pet_id: number
55
62
  price: number
56
63
  }
@@ -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 {};
@@ -6,15 +6,15 @@ const compiled_query_js_1 = require("../../query-compiler/compiled-query.js");
6
6
  const stack_trace_utils_js_1 = require("../../util/stack-trace-utils.js");
7
7
  const random_string_js_1 = require("../../util/random-string.js");
8
8
  const deferred_js_1 = require("../../util/deferred.js");
9
- const PRIVATE_RELEASE_METHOD = Symbol();
9
+ const PRIVATE_RESET_METHOD = Symbol();
10
10
  const PRIVATE_DESTROY_METHOD = Symbol();
11
11
  class MssqlDriver {
12
12
  #config;
13
13
  #pool;
14
14
  constructor(config) {
15
15
  this.#config = (0, object_utils_js_1.freeze)({ ...config });
16
- const { tarn, tedious } = this.#config;
17
- const { validateConnections, ...poolOptions } = tarn.options;
16
+ const { tarn, tedious, validateConnections } = this.#config;
17
+ const { validateConnections: deprecatedValidateConnections, ...poolOptions } = tarn.options;
18
18
  this.#pool = new tarn.Pool({
19
19
  ...poolOptions,
20
20
  create: async () => {
@@ -26,7 +26,8 @@ class MssqlDriver {
26
26
  },
27
27
  // @ts-ignore `tarn` accepts a function that returns a promise here, but
28
28
  // the types are not aligned and it type errors.
29
- validate: validateConnections === false
29
+ validate: validateConnections === false ||
30
+ deprecatedValidateConnections === false
30
31
  ? undefined
31
32
  : (connection) => connection.validate(),
32
33
  });
@@ -46,8 +47,17 @@ class MssqlDriver {
46
47
  async rollbackTransaction(connection) {
47
48
  await connection.rollbackTransaction();
48
49
  }
50
+ async savepoint(connection, savepointName) {
51
+ await connection.savepoint(savepointName);
52
+ }
53
+ async rollbackToSavepoint(connection, savepointName) {
54
+ await connection.rollbackTransaction(savepointName);
55
+ }
49
56
  async releaseConnection(connection) {
50
- await connection[PRIVATE_RELEASE_METHOD]();
57
+ if (this.#config.resetConnectionsOnRelease ||
58
+ this.#config.tedious.resetConnectionOnRelease) {
59
+ await connection[PRIVATE_RESET_METHOD]();
60
+ }
51
61
  this.#pool.release(connection);
52
62
  }
53
63
  async destroy() {
@@ -118,13 +128,21 @@ class MssqlConnection {
118
128
  throw (0, stack_trace_utils_js_1.extendStackTrace)(err, new Error());
119
129
  }
120
130
  }
121
- async rollbackTransaction() {
131
+ async rollbackTransaction(savepointName) {
122
132
  await new Promise((resolve, reject) => this.#connection.rollbackTransaction((error) => {
123
133
  if (error)
124
134
  reject(error);
125
135
  else
126
136
  resolve(undefined);
127
- }));
137
+ }, savepointName));
138
+ }
139
+ async savepoint(savepointName) {
140
+ await new Promise((resolve, reject) => this.#connection.saveTransaction((error) => {
141
+ if (error)
142
+ reject(error);
143
+ else
144
+ resolve(undefined);
145
+ }, savepointName));
128
146
  }
129
147
  async *streamQuery(compiledQuery, chunkSize) {
130
148
  if (!Number.isInteger(chunkSize) || chunkSize <= 0) {
@@ -193,18 +211,15 @@ class MssqlConnection {
193
211
  }
194
212
  });
195
213
  }
196
- async [PRIVATE_RELEASE_METHOD]() {
197
- // TODO: flip this to `if (!this.#tedious.resetConnectionOnRelease) {}` in a future PR.
198
- if (this.#tedious.resetConnectionOnRelease !== false) {
199
- await new Promise((resolve, reject) => {
200
- this.#connection.reset((error) => {
201
- if (error)
202
- reject(error);
203
- else
204
- resolve(undefined);
205
- });
214
+ async [PRIVATE_RESET_METHOD]() {
215
+ await new Promise((resolve, reject) => {
216
+ this.#connection.reset((error) => {
217
+ if (error)
218
+ reject(error);
219
+ else
220
+ resolve(undefined);
206
221
  });
207
- }
222
+ });
208
223
  }
209
224
  [PRIVATE_DESTROY_METHOD]() {
210
225
  return new Promise((resolve) => {
@@ -221,7 +236,6 @@ class MssqlRequest {
221
236
  #streamChunkSize;
222
237
  #subscribers;
223
238
  #tedious;
224
- #error;
225
239
  #rowCount;
226
240
  constructor(props) {
227
241
  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
  }
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MssqlQueryCompiler = void 0;
4
4
  const default_query_compiler_js_1 = require("../../query-compiler/default-query-compiler.js");
5
+ const COLLATION_CHAR_REGEX = /^[a-z0-9_]$/i;
5
6
  class MssqlQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompiler {
6
7
  getCurrentParameterPlaceholder() {
7
8
  return `@${this.numParameters}`;
@@ -65,6 +66,16 @@ class MssqlQueryCompiler extends default_query_compiler_js_1.DefaultQueryCompile
65
66
  super.visitMergeQuery(node);
66
67
  this.append(';');
67
68
  }
69
+ visitCollate(node) {
70
+ this.append('collate ');
71
+ const { name } = node.collation;
72
+ for (const char of name) {
73
+ if (!COLLATION_CHAR_REGEX.test(char)) {
74
+ throw new Error(`Invalid collation: ${name}`);
75
+ }
76
+ }
77
+ this.append(name);
78
+ }
68
79
  announcesNewColumnDataType() {
69
80
  return false;
70
81
  }
@@ -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,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.MysqlDriver = void 0;
4
+ const savepoint_parser_js_1 = require("../../parser/savepoint-parser.js");
4
5
  const compiled_query_js_1 = require("../../query-compiler/compiled-query.js");
5
6
  const object_utils_js_1 = require("../../util/object-utils.js");
7
+ const query_id_js_1 = require("../../util/query-id.js");
6
8
  const stack_trace_utils_js_1 = require("../../util/stack-trace-utils.js");
7
9
  const PRIVATE_RELEASE_METHOD = Symbol();
8
10
  class MysqlDriver {
@@ -48,9 +50,17 @@ class MysqlDriver {
48
50
  });
49
51
  }
50
52
  async beginTransaction(connection, settings) {
51
- if (settings.isolationLevel) {
53
+ if (settings.isolationLevel || settings.accessMode) {
54
+ const parts = [];
55
+ if (settings.isolationLevel) {
56
+ parts.push(`isolation level ${settings.isolationLevel}`);
57
+ }
58
+ if (settings.accessMode) {
59
+ parts.push(settings.accessMode);
60
+ }
61
+ const sql = `set transaction ${parts.join(', ')}`;
52
62
  // On MySQL this sets the isolation level of the next transaction.
53
- await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw(`set transaction isolation level ${settings.isolationLevel}`));
63
+ await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw(sql));
54
64
  }
55
65
  await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw('begin'));
56
66
  }
@@ -60,6 +70,15 @@ class MysqlDriver {
60
70
  async rollbackTransaction(connection) {
61
71
  await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw('rollback'));
62
72
  }
73
+ async savepoint(connection, savepointName, compileQuery) {
74
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('savepoint', savepointName), (0, query_id_js_1.createQueryId)()));
75
+ }
76
+ async rollbackToSavepoint(connection, savepointName, compileQuery) {
77
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('rollback to', savepointName), (0, query_id_js_1.createQueryId)()));
78
+ }
79
+ async releaseSavepoint(connection, savepointName, compileQuery) {
80
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('release savepoint', savepointName), (0, query_id_js_1.createQueryId)()));
81
+ }
63
82
  async releaseConnection(connection) {
64
83
  connection[PRIVATE_RELEASE_METHOD]();
65
84
  }
@@ -90,22 +109,18 @@ class MysqlConnection {
90
109
  const result = await this.#executeQuery(compiledQuery);
91
110
  if (isOkPacket(result)) {
92
111
  const { insertId, affectedRows, changedRows } = result;
93
- const numAffectedRows = affectedRows !== undefined && affectedRows !== null
94
- ? BigInt(affectedRows)
95
- : undefined;
96
- const numChangedRows = changedRows !== undefined && changedRows !== null
97
- ? BigInt(changedRows)
98
- : undefined;
99
112
  return {
100
113
  insertId: insertId !== undefined &&
101
114
  insertId !== null &&
102
115
  insertId.toString() !== '0'
103
116
  ? BigInt(insertId)
104
117
  : undefined,
105
- // TODO: remove.
106
- numUpdatedOrDeletedRows: numAffectedRows,
107
- numAffectedRows,
108
- numChangedRows,
118
+ numAffectedRows: affectedRows !== undefined && affectedRows !== null
119
+ ? BigInt(affectedRows)
120
+ : undefined,
121
+ numChangedRows: changedRows !== undefined && changedRows !== null
122
+ ? BigInt(changedRows)
123
+ : undefined,
109
124
  rows: [],
110
125
  };
111
126
  }
@@ -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
  */
@@ -1,8 +1,10 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PostgresDriver = void 0;
4
+ const savepoint_parser_js_1 = require("../../parser/savepoint-parser.js");
4
5
  const compiled_query_js_1 = require("../../query-compiler/compiled-query.js");
5
6
  const object_utils_js_1 = require("../../util/object-utils.js");
7
+ const query_id_js_1 = require("../../util/query-id.js");
6
8
  const stack_trace_utils_js_1 = require("../../util/stack-trace-utils.js");
7
9
  const PRIVATE_RELEASE_METHOD = Symbol();
8
10
  class PostgresDriver {
@@ -38,8 +40,15 @@ class PostgresDriver {
38
40
  return connection;
39
41
  }
40
42
  async beginTransaction(connection, settings) {
41
- if (settings.isolationLevel) {
42
- await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw(`start transaction isolation level ${settings.isolationLevel}`));
43
+ if (settings.isolationLevel || settings.accessMode) {
44
+ let sql = 'start transaction';
45
+ if (settings.isolationLevel) {
46
+ sql += ` isolation level ${settings.isolationLevel}`;
47
+ }
48
+ if (settings.accessMode) {
49
+ sql += ` ${settings.accessMode}`;
50
+ }
51
+ await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw(sql));
43
52
  }
44
53
  else {
45
54
  await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw('begin'));
@@ -51,6 +60,15 @@ class PostgresDriver {
51
60
  async rollbackTransaction(connection) {
52
61
  await connection.executeQuery(compiled_query_js_1.CompiledQuery.raw('rollback'));
53
62
  }
63
+ async savepoint(connection, savepointName, compileQuery) {
64
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('savepoint', savepointName), (0, query_id_js_1.createQueryId)()));
65
+ }
66
+ async rollbackToSavepoint(connection, savepointName, compileQuery) {
67
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('rollback to', savepointName), (0, query_id_js_1.createQueryId)()));
68
+ }
69
+ async releaseSavepoint(connection, savepointName, compileQuery) {
70
+ await connection.executeQuery(compileQuery((0, savepoint_parser_js_1.parseSavepointCommand)('release', savepointName), (0, query_id_js_1.createQueryId)()));
71
+ }
54
72
  async releaseConnection(connection) {
55
73
  connection[PRIVATE_RELEASE_METHOD]();
56
74
  }
@@ -72,23 +90,15 @@ class PostgresConnection {
72
90
  }
73
91
  async executeQuery(compiledQuery) {
74
92
  try {
75
- const result = await this.#client.query(compiledQuery.sql, [
76
- ...compiledQuery.parameters,
77
- ]);
78
- if (result.command === 'INSERT' ||
79
- result.command === 'UPDATE' ||
80
- result.command === 'DELETE' ||
81
- result.command === 'MERGE') {
82
- const numAffectedRows = BigInt(result.rowCount);
83
- return {
84
- // TODO: remove.
85
- numUpdatedOrDeletedRows: numAffectedRows,
86
- numAffectedRows,
87
- rows: result.rows ?? [],
88
- };
89
- }
93
+ const { command, rowCount, rows } = await this.#client.query(compiledQuery.sql, [...compiledQuery.parameters]);
90
94
  return {
91
- rows: result.rows ?? [],
95
+ numAffectedRows: command === 'INSERT' ||
96
+ command === 'UPDATE' ||
97
+ command === 'DELETE' ||
98
+ command === 'MERGE'
99
+ ? BigInt(rowCount)
100
+ : undefined,
101
+ rows: rows ?? [],
92
102
  };
93
103
  }
94
104
  catch (err) {