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
@@ -12,11 +12,13 @@ import { DropViewNode } from '../operation-node/drop-view-node.js';
12
12
  import { MergeQueryNode } from '../operation-node/merge-query-node.js';
13
13
  import { QueryNode } from '../operation-node/query-node.js';
14
14
  import { RawNode } from '../operation-node/raw-node.js';
15
+ import { RefreshMaterializedViewNode } from '../operation-node/refresh-materialized-view-node.js';
16
+ import { QueryId } from '../util/query-id.js';
15
17
  import { CompiledQuery } from './compiled-query.js';
16
- export type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode | MergeQueryNode;
18
+ export type RootOperationNode = QueryNode | CreateTableNode | CreateIndexNode | CreateSchemaNode | CreateViewNode | RefreshMaterializedViewNode | DropTableNode | DropIndexNode | DropSchemaNode | DropViewNode | AlterTableNode | RawNode | CreateTypeNode | DropTypeNode | MergeQueryNode;
17
19
  /**
18
20
  * a `QueryCompiler` compiles a query expressed as a tree of `OperationNodes` into SQL.
19
21
  */
20
22
  export interface QueryCompiler {
21
- compileQuery(node: RootOperationNode): CompiledQuery;
23
+ compileQuery(node: RootOperationNode, queryId: QueryId): CompiledQuery;
22
24
  }
@@ -1,19 +1,17 @@
1
1
  import { SelectQueryBuilder } from './query-builder/select-query-builder.js';
2
2
  import { InsertQueryBuilder } from './query-builder/insert-query-builder.js';
3
- import { DeleteQueryBuilder } from './query-builder/delete-query-builder.js';
4
- import { UpdateQueryBuilder } from './query-builder/update-query-builder.js';
5
- import { TableExpression, From, FromTables, TableReference, ExtractTableAlias, AnyAliasedTable, PickTableWithAlias } from './parser/table-parser.js';
3
+ import { TableExpressionOrList, SimpleTableReference } from './parser/table-parser.js';
6
4
  import { QueryExecutor } from './query-executor/query-executor.js';
7
5
  import { CommonTableExpression, QueryCreatorWithCommonTableExpression, RecursiveCommonTableExpression } from './parser/with-parser.js';
8
6
  import { WithNode } from './operation-node/with-node.js';
9
7
  import { InsertResult } from './query-builder/insert-result.js';
10
- import { DeleteResult } from './query-builder/delete-result.js';
11
- import { UpdateResult } from './query-builder/update-result.js';
12
8
  import { KyselyPlugin } from './plugin/kysely-plugin.js';
13
9
  import { CTEBuilderCallback } from './query-builder/cte-builder.js';
14
10
  import { CallbackSelection, SelectCallback, SelectExpression, Selection } from './parser/select-parser.js';
15
- import { MergeQueryBuilder } from './query-builder/merge-query-builder.js';
16
- import { MergeResult } from './query-builder/merge-result.js';
11
+ import { SelectFrom } from './parser/select-from-parser.js';
12
+ import { DeleteFrom } from './parser/delete-from-parser.js';
13
+ import { UpdateTable } from './parser/update-parser.js';
14
+ import { MergeInto } from './parser/merge-into-parser.js';
17
15
  export declare class QueryCreator<DB> {
18
16
  #private;
19
17
  constructor(props: QueryCreatorProps);
@@ -124,11 +122,7 @@ export declare class QueryCreator<DB> {
124
122
  * (select 1 as one) as "q"
125
123
  * ```
126
124
  */
127
- selectFrom<TE extends keyof DB & string>(from: TE[]): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>;
128
- selectFrom<TE extends TableExpression<DB, never>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
129
- selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>;
130
- selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, ExtractTableAlias<DB & PickTableWithAlias<DB, TE>, TE>, {}>;
131
- selectFrom<TE extends TableExpression<DB, never>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
125
+ selectFrom<TE extends TableExpressionOrList<DB, never>>(from: TE): SelectFrom<DB, never, TE>;
132
126
  /**
133
127
  * Creates a `select` query builder without a `from` clause.
134
128
  *
@@ -218,10 +212,14 @@ export declare class QueryCreator<DB> {
218
212
  */
219
213
  insertInto<T extends keyof DB & string>(table: T): InsertQueryBuilder<DB, T, InsertResult>;
220
214
  /**
221
- * Creates a replace query.
215
+ * Creates a "replace into" query.
222
216
  *
223
- * A MySQL-only statement similar to {@link InsertQueryBuilder.onDuplicateKeyUpdate}
224
- * that deletes and inserts values on collision instead of updating existing rows.
217
+ * This is only supported by some dialects like MySQL or SQLite.
218
+ *
219
+ * Similar to MySQL's {@link InsertQueryBuilder.onDuplicateKeyUpdate} that deletes
220
+ * and inserts values on collision instead of updating existing rows.
221
+ *
222
+ * An alias of SQLite's {@link InsertQueryBuilder.orReplace}.
225
223
  *
226
224
  * The return value of this query is an instance of {@link InsertResult}. {@link InsertResult}
227
225
  * has the {@link InsertResult.insertId | insertId} field that holds the auto incremented id of
@@ -238,10 +236,16 @@ export declare class QueryCreator<DB> {
238
236
  * first_name: 'Jennifer',
239
237
  * last_name: 'Aniston'
240
238
  * })
241
- * .executeTakeFirst()
239
+ * .executeTakeFirstOrThrow()
242
240
  *
243
241
  * console.log(result.insertId)
244
242
  * ```
243
+ *
244
+ * The generated SQL (MySQL):
245
+ *
246
+ * ```sql
247
+ * replace into `person` (`first_name`, `last_name`) values (?, ?)
248
+ * ```
245
249
  */
246
250
  replaceInto<T extends keyof DB & string>(table: T): InsertQueryBuilder<DB, T, InsertResult>;
247
251
  /**
@@ -293,10 +297,7 @@ export declare class QueryCreator<DB> {
293
297
  * where `person`.`id` = ?
294
298
  * ```
295
299
  */
296
- deleteFrom<TR extends keyof DB & string>(from: TR[]): DeleteQueryBuilder<DB, ExtractTableAlias<DB, TR>, DeleteResult>;
297
- deleteFrom<TR extends TableReference<DB>>(tables: TR[]): DeleteQueryBuilder<From<DB, TR>, FromTables<DB, never, TR>, DeleteResult>;
298
- deleteFrom<TR extends keyof DB & string>(from: TR): DeleteQueryBuilder<DB, ExtractTableAlias<DB, TR>, DeleteResult>;
299
- deleteFrom<TR extends TableReference<DB>>(table: TR): DeleteQueryBuilder<From<DB, TR>, FromTables<DB, never, TR>, DeleteResult>;
300
+ deleteFrom<TE extends TableExpressionOrList<DB, never>>(from: TE): DeleteFrom<DB, TE>;
300
301
  /**
301
302
  * Creates an update query.
302
303
  *
@@ -320,9 +321,7 @@ export declare class QueryCreator<DB> {
320
321
  * console.log(result.numUpdatedRows)
321
322
  * ```
322
323
  */
323
- updateTable<TR extends keyof DB & string>(table: TR): UpdateQueryBuilder<DB, ExtractTableAlias<DB, TR>, ExtractTableAlias<DB, TR>, UpdateResult>;
324
- updateTable<TR extends AnyAliasedTable<DB>>(table: TR): UpdateQueryBuilder<DB & PickTableWithAlias<DB, TR>, ExtractTableAlias<DB & PickTableWithAlias<DB, TR>, TR>, ExtractTableAlias<DB & PickTableWithAlias<DB, TR>, TR>, UpdateResult>;
325
- updateTable<TR extends TableReference<DB>>(table: TR): UpdateQueryBuilder<From<DB, TR>, FromTables<DB, never, TR>, FromTables<DB, never, TR>, UpdateResult>;
324
+ updateTable<TE extends TableExpressionOrList<DB, never>>(tables: TE): UpdateTable<DB, TE>;
326
325
  /**
327
326
  * Creates a merge query.
328
327
  *
@@ -406,8 +405,7 @@ export declare class QueryCreator<DB> {
406
405
  * then delete
407
406
  * ```
408
407
  */
409
- mergeInto<TR extends keyof DB & string>(targetTable: TR): MergeQueryBuilder<DB, TR, MergeResult>;
410
- mergeInto<TR extends AnyAliasedTable<DB>>(targetTable: TR): MergeQueryBuilder<DB & PickTableWithAlias<DB, TR>, ExtractTableAlias<DB & PickTableWithAlias<DB, TR>, TR>, MergeResult>;
408
+ mergeInto<TR extends SimpleTableReference<DB>>(targetTable: TR): MergeInto<DB, TR>;
411
409
  /**
412
410
  * Creates a `with` query (Common Table Expression).
413
411
  *
@@ -7,7 +7,7 @@ import { DeleteQueryNode } from './operation-node/delete-query-node.js';
7
7
  import { InsertQueryNode } from './operation-node/insert-query-node.js';
8
8
  import { SelectQueryNode } from './operation-node/select-query-node.js';
9
9
  import { UpdateQueryNode } from './operation-node/update-query-node.js';
10
- import { parseTable, parseTableExpression, parseTableExpressionOrList, parseAliasedTable, } from './parser/table-parser.js';
10
+ import { parseTable, parseTableExpressionOrList, parseAliasedTable, } from './parser/table-parser.js';
11
11
  import { parseCommonTableExpression, } from './parser/with-parser.js';
12
12
  import { WithNode } from './operation-node/with-node.js';
13
13
  import { createQueryId } from './util/query-id.js';
@@ -21,6 +21,113 @@ export class QueryCreator {
21
21
  constructor(props) {
22
22
  this.#props = freeze(props);
23
23
  }
24
+ /**
25
+ * Creates a `select` query builder for the given table or tables.
26
+ *
27
+ * The tables passed to this method are built as the query's `from` clause.
28
+ *
29
+ * ### Examples
30
+ *
31
+ * Create a select query for one table:
32
+ *
33
+ * ```ts
34
+ * db.selectFrom('person').selectAll()
35
+ * ```
36
+ *
37
+ * The generated SQL (PostgreSQL):
38
+ *
39
+ * ```sql
40
+ * select * from "person"
41
+ * ```
42
+ *
43
+ * Create a select query for one table with an alias:
44
+ *
45
+ * ```ts
46
+ * const persons = await db.selectFrom('person as p')
47
+ * .select(['p.id', 'first_name'])
48
+ * .execute()
49
+ *
50
+ * console.log(persons[0].id)
51
+ * ```
52
+ *
53
+ * The generated SQL (PostgreSQL):
54
+ *
55
+ * ```sql
56
+ * select "p"."id", "first_name" from "person" as "p"
57
+ * ```
58
+ *
59
+ * Create a select query from a subquery:
60
+ *
61
+ * ```ts
62
+ * const persons = await db.selectFrom(
63
+ * (eb) => eb.selectFrom('person').select('person.id as identifier').as('p')
64
+ * )
65
+ * .select('p.identifier')
66
+ * .execute()
67
+ *
68
+ * console.log(persons[0].identifier)
69
+ * ```
70
+ *
71
+ * The generated SQL (PostgreSQL):
72
+ *
73
+ * ```sql
74
+ * select "p"."identifier",
75
+ * from (
76
+ * select "person"."id" as "identifier" from "person"
77
+ * ) as p
78
+ * ```
79
+ *
80
+ * Create a select query from raw sql:
81
+ *
82
+ * ```ts
83
+ * import { sql } from 'kysely'
84
+ *
85
+ * const items = await db
86
+ * .selectFrom(sql<{ one: number }>`(select 1 as one)`.as('q'))
87
+ * .select('q.one')
88
+ * .execute()
89
+ *
90
+ * console.log(items[0].one)
91
+ * ```
92
+ *
93
+ * The generated SQL (PostgreSQL):
94
+ *
95
+ * ```sql
96
+ * select "q"."one",
97
+ * from (
98
+ * select 1 as one
99
+ * ) as q
100
+ * ```
101
+ *
102
+ * When you use the `sql` tag you need to also provide the result type of the
103
+ * raw snippet / query so that Kysely can figure out what columns are
104
+ * available for the rest of the query.
105
+ *
106
+ * The `selectFrom` method also accepts an array for multiple tables. All
107
+ * the above examples can also be used in an array.
108
+ *
109
+ * ```ts
110
+ * import { sql } from 'kysely'
111
+ *
112
+ * const items = await db.selectFrom([
113
+ * 'person as p',
114
+ * db.selectFrom('pet').select('pet.species').as('a'),
115
+ * sql<{ one: number }>`(select 1 as one)`.as('q')
116
+ * ])
117
+ * .select(['p.id', 'a.species', 'q.one'])
118
+ * .execute()
119
+ * ```
120
+ *
121
+ * The generated SQL (PostgreSQL):
122
+ *
123
+ * ```sql
124
+ * select "p".id, "a"."species", "q"."one"
125
+ * from
126
+ * "person" as "p",
127
+ * (select "pet"."species" from "pet") as a,
128
+ * (select 1 as one) as "q"
129
+ * ```
130
+ */
24
131
  selectFrom(from) {
25
132
  return createSelectQueryBuilder({
26
133
  queryId: createQueryId(),
@@ -81,10 +188,14 @@ export class QueryCreator {
81
188
  });
82
189
  }
83
190
  /**
84
- * Creates a replace query.
191
+ * Creates a "replace into" query.
192
+ *
193
+ * This is only supported by some dialects like MySQL or SQLite.
194
+ *
195
+ * Similar to MySQL's {@link InsertQueryBuilder.onDuplicateKeyUpdate} that deletes
196
+ * and inserts values on collision instead of updating existing rows.
85
197
  *
86
- * A MySQL-only statement similar to {@link InsertQueryBuilder.onDuplicateKeyUpdate}
87
- * that deletes and inserts values on collision instead of updating existing rows.
198
+ * An alias of SQLite's {@link InsertQueryBuilder.orReplace}.
88
199
  *
89
200
  * The return value of this query is an instance of {@link InsertResult}. {@link InsertResult}
90
201
  * has the {@link InsertResult.insertId | insertId} field that holds the auto incremented id of
@@ -101,10 +212,16 @@ export class QueryCreator {
101
212
  * first_name: 'Jennifer',
102
213
  * last_name: 'Aniston'
103
214
  * })
104
- * .executeTakeFirst()
215
+ * .executeTakeFirstOrThrow()
105
216
  *
106
217
  * console.log(result.insertId)
107
218
  * ```
219
+ *
220
+ * The generated SQL (MySQL):
221
+ *
222
+ * ```sql
223
+ * replace into `person` (`first_name`, `last_name`) values (?, ?)
224
+ * ```
108
225
  */
109
226
  replaceInto(table) {
110
227
  return new InsertQueryBuilder({
@@ -113,20 +230,175 @@ export class QueryCreator {
113
230
  queryNode: InsertQueryNode.create(parseTable(table), this.#props.withNode, true),
114
231
  });
115
232
  }
116
- deleteFrom(tables) {
233
+ /**
234
+ * Creates a delete query.
235
+ *
236
+ * See the {@link DeleteQueryBuilder.where} method for examples on how to specify
237
+ * a where clause for the delete operation.
238
+ *
239
+ * The return value of the query is an instance of {@link DeleteResult}.
240
+ *
241
+ * ### Examples
242
+ *
243
+ * <!-- siteExample("delete", "Single row", 10) -->
244
+ *
245
+ * Delete a single row:
246
+ *
247
+ * ```ts
248
+ * const result = await db
249
+ * .deleteFrom('person')
250
+ * .where('person.id', '=', 1)
251
+ * .executeTakeFirst()
252
+ *
253
+ * console.log(result.numDeletedRows)
254
+ * ```
255
+ *
256
+ * The generated SQL (PostgreSQL):
257
+ *
258
+ * ```sql
259
+ * delete from "person" where "person"."id" = $1
260
+ * ```
261
+ *
262
+ * Some databases such as MySQL support deleting from multiple tables:
263
+ *
264
+ * ```ts
265
+ * const result = await db
266
+ * .deleteFrom(['person', 'pet'])
267
+ * .using('person')
268
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
269
+ * .where('person.id', '=', 1)
270
+ * .executeTakeFirst()
271
+ * ```
272
+ *
273
+ * The generated SQL (MySQL):
274
+ *
275
+ * ```sql
276
+ * delete from `person`, `pet`
277
+ * using `person`
278
+ * inner join `pet` on `pet`.`owner_id` = `person`.`id`
279
+ * where `person`.`id` = ?
280
+ * ```
281
+ */
282
+ deleteFrom(from) {
117
283
  return new DeleteQueryBuilder({
118
284
  queryId: createQueryId(),
119
285
  executor: this.#props.executor,
120
- queryNode: DeleteQueryNode.create(parseTableExpressionOrList(tables), this.#props.withNode),
286
+ queryNode: DeleteQueryNode.create(parseTableExpressionOrList(from), this.#props.withNode),
121
287
  });
122
288
  }
123
- updateTable(table) {
289
+ /**
290
+ * Creates an update query.
291
+ *
292
+ * See the {@link UpdateQueryBuilder.where} method for examples on how to specify
293
+ * a where clause for the update operation.
294
+ *
295
+ * See the {@link UpdateQueryBuilder.set} method for examples on how to
296
+ * specify the updates.
297
+ *
298
+ * The return value of the query is an {@link UpdateResult}.
299
+ *
300
+ * ### Examples
301
+ *
302
+ * ```ts
303
+ * const result = await db
304
+ * .updateTable('person')
305
+ * .set({ first_name: 'Jennifer' })
306
+ * .where('person.id', '=', 1)
307
+ * .executeTakeFirst()
308
+ *
309
+ * console.log(result.numUpdatedRows)
310
+ * ```
311
+ */
312
+ updateTable(tables) {
124
313
  return new UpdateQueryBuilder({
125
314
  queryId: createQueryId(),
126
315
  executor: this.#props.executor,
127
- queryNode: UpdateQueryNode.create(parseTableExpression(table), this.#props.withNode),
316
+ queryNode: UpdateQueryNode.create(parseTableExpressionOrList(tables), this.#props.withNode),
128
317
  });
129
318
  }
319
+ /**
320
+ * Creates a merge query.
321
+ *
322
+ * The return value of the query is a {@link MergeResult}.
323
+ *
324
+ * See the {@link MergeQueryBuilder.using} method for examples on how to specify
325
+ * the other table.
326
+ *
327
+ * ### Examples
328
+ *
329
+ * <!-- siteExample("merge", "Source row existence", 10) -->
330
+ *
331
+ * Update a target column based on the existence of a source row:
332
+ *
333
+ * ```ts
334
+ * const result = await db
335
+ * .mergeInto('person as target')
336
+ * .using('pet as source', 'source.owner_id', 'target.id')
337
+ * .whenMatchedAnd('target.has_pets', '!=', 'Y')
338
+ * .thenUpdateSet({ has_pets: 'Y' })
339
+ * .whenNotMatchedBySourceAnd('target.has_pets', '=', 'Y')
340
+ * .thenUpdateSet({ has_pets: 'N' })
341
+ * .executeTakeFirstOrThrow()
342
+ *
343
+ * console.log(result.numChangedRows)
344
+ * ```
345
+ *
346
+ * The generated SQL (PostgreSQL):
347
+ *
348
+ * ```sql
349
+ * merge into "person"
350
+ * using "pet"
351
+ * on "pet"."owner_id" = "person"."id"
352
+ * when matched and "has_pets" != $1
353
+ * then update set "has_pets" = $2
354
+ * when not matched by source and "has_pets" = $3
355
+ * then update set "has_pets" = $4
356
+ * ```
357
+ *
358
+ * <!-- siteExample("merge", "Temporary changes table", 20) -->
359
+ *
360
+ * Merge new entries from a temporary changes table:
361
+ *
362
+ * ```ts
363
+ * const result = await db
364
+ * .mergeInto('wine as target')
365
+ * .using(
366
+ * 'wine_stock_change as source',
367
+ * 'source.wine_name',
368
+ * 'target.name',
369
+ * )
370
+ * .whenNotMatchedAnd('source.stock_delta', '>', 0)
371
+ * .thenInsertValues(({ ref }) => ({
372
+ * name: ref('source.wine_name'),
373
+ * stock: ref('source.stock_delta'),
374
+ * }))
375
+ * .whenMatchedAnd(
376
+ * (eb) => eb('target.stock', '+', eb.ref('source.stock_delta')),
377
+ * '>',
378
+ * 0,
379
+ * )
380
+ * .thenUpdateSet('stock', (eb) =>
381
+ * eb('target.stock', '+', eb.ref('source.stock_delta')),
382
+ * )
383
+ * .whenMatched()
384
+ * .thenDelete()
385
+ * .executeTakeFirstOrThrow()
386
+ * ```
387
+ *
388
+ * The generated SQL (PostgreSQL):
389
+ *
390
+ * ```sql
391
+ * merge into "wine" as "target"
392
+ * using "wine_stock_change" as "source"
393
+ * on "source"."wine_name" = "target"."name"
394
+ * when not matched and "source"."stock_delta" > $1
395
+ * then insert ("name", "stock") values ("source"."wine_name", "source"."stock_delta")
396
+ * when matched and "target"."stock" + "source"."stock_delta" > $2
397
+ * then update set "stock" = "target"."stock" + "source"."stock_delta"
398
+ * when matched
399
+ * then delete
400
+ * ```
401
+ */
130
402
  mergeInto(targetTable) {
131
403
  return new MergeQueryBuilder({
132
404
  queryId: createQueryId(),
@@ -5,6 +5,7 @@ import { RootOperationNode, QueryCompiler } from '../query-compiler/query-compil
5
5
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
6
6
  import { QueryExecutorBase } from './query-executor-base.js';
7
7
  import { DialectAdapter } from '../dialect/dialect-adapter.js';
8
+ import { QueryId } from '../util/query-id.js';
8
9
  export declare class DefaultQueryExecutor extends QueryExecutorBase {
9
10
  #private;
10
11
  constructor(compiler: QueryCompiler, adapter: DialectAdapter, connectionProvider: ConnectionProvider, plugins?: KyselyPlugin[]);
@@ -17,7 +18,7 @@ export declare class DefaultQueryExecutor extends QueryExecutorBase {
17
18
  * the output of {@link transformQuery} into this method but you can
18
19
  * compile any query using this method.
19
20
  */
20
- compileQuery(node: RootOperationNode): CompiledQuery;
21
+ compileQuery(node: RootOperationNode, queryId: QueryId): CompiledQuery;
21
22
  /**
22
23
  * Provides a connection for the callback and takes care of disposing
23
24
  * the connection after the callback has been run.
@@ -13,8 +13,8 @@ export class DefaultQueryExecutor extends QueryExecutorBase {
13
13
  get adapter() {
14
14
  return this.#adapter;
15
15
  }
16
- compileQuery(node) {
17
- return this.#compiler.compileQuery(node);
16
+ compileQuery(node, queryId) {
17
+ return this.#compiler.compileQuery(node, queryId);
18
18
  }
19
19
  provideConnection(consumer) {
20
20
  return this.#connectionProvider.provideConnection(consumer);
@@ -1,6 +1,6 @@
1
1
  /// <reference types="./query-executor-base.d.ts" />
2
2
  import { freeze } from '../util/object-utils.js';
3
- import { Deferred } from '../util/deferred.js';
3
+ import { provideControlledConnection } from '../util/provide-controlled-connection.js';
4
4
  import { logOnce } from '../util/log-once.js';
5
5
  const NO_PLUGINS = freeze([]);
6
6
  export class QueryExecutorBase {
@@ -33,28 +33,21 @@ export class QueryExecutorBase {
33
33
  async executeQuery(compiledQuery, queryId) {
34
34
  return await this.provideConnection(async (connection) => {
35
35
  const result = await connection.executeQuery(compiledQuery);
36
- const transformedResult = await this.#transformResult(result, queryId);
37
- // TODO: remove.
38
- warnOfOutdatedDriverOrPlugins(result, transformedResult);
39
- return transformedResult;
36
+ if ('numUpdatedOrDeletedRows' in result) {
37
+ logOnce('kysely:warning: outdated driver/plugin detected! `QueryResult.numUpdatedOrDeletedRows` has been replaced with `QueryResult.numAffectedRows`.');
38
+ }
39
+ return await this.#transformResult(result, queryId);
40
40
  });
41
41
  }
42
42
  async *stream(compiledQuery, chunkSize, queryId) {
43
- const connectionDefer = new Deferred();
44
- const connectionReleaseDefer = new Deferred();
45
- this.provideConnection(async (connection) => {
46
- connectionDefer.resolve(connection);
47
- // Lets wait until we don't need connection before returning here (returning releases connection)
48
- return await connectionReleaseDefer.promise;
49
- }).catch((ex) => connectionDefer.reject(ex));
50
- const connection = await connectionDefer.promise;
43
+ const { connection, release } = await provideControlledConnection(this);
51
44
  try {
52
45
  for await (const result of connection.streamQuery(compiledQuery, chunkSize)) {
53
46
  yield await this.#transformResult(result, queryId);
54
47
  }
55
48
  }
56
49
  finally {
57
- connectionReleaseDefer.resolve();
50
+ release();
58
51
  }
59
52
  }
60
53
  async #transformResult(result, queryId) {
@@ -64,14 +57,3 @@ export class QueryExecutorBase {
64
57
  return result;
65
58
  }
66
59
  }
67
- // TODO: remove.
68
- function warnOfOutdatedDriverOrPlugins(result, transformedResult) {
69
- const { numAffectedRows } = result;
70
- if ((numAffectedRows === undefined &&
71
- result.numUpdatedOrDeletedRows === undefined) ||
72
- (numAffectedRows !== undefined &&
73
- transformedResult.numAffectedRows !== undefined)) {
74
- return;
75
- }
76
- logOnce('kysely:warning: outdated driver/plugin detected! QueryResult.numUpdatedOrDeletedRows is deprecated and will be removed in a future release.');
77
- }
@@ -1,6 +1,5 @@
1
1
  /// <reference types="./raw-builder.d.ts" />
2
2
  import { AliasNode } from '../operation-node/alias-node.js';
3
- import { preventAwait } from '../util/prevent-await.js';
4
3
  import { freeze } from '../util/object-utils.js';
5
4
  import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';
6
5
  import { IdentifierNode } from '../operation-node/identifier-node.js';
@@ -61,7 +60,6 @@ class RawBuilderImpl {
61
60
  export function createRawBuilder(props) {
62
61
  return new RawBuilderImpl(props);
63
62
  }
64
- preventAwait(RawBuilderImpl, "don't await RawBuilder instances directly. To execute the query you need to call `execute`");
65
63
  class AliasedRawBuilderImpl {
66
64
  #rawBuilder;
67
65
  #alias;
@@ -84,4 +82,3 @@ class AliasedRawBuilderImpl {
84
82
  : IdentifierNode.create(this.#alias));
85
83
  }
86
84
  }
87
- preventAwait(AliasedRawBuilderImpl, "don't await AliasedRawBuilder instances directly. AliasedRawBuilder should never be executed directly since it's always a part of another query.");
@@ -213,7 +213,7 @@ export interface Sql {
213
213
  * select first_name from "public"."person"
214
214
  * ```
215
215
  */
216
- table(tableReference: string): RawBuilder<unknown>;
216
+ table<T = unknown>(tableReference: string): RawBuilder<T>;
217
217
  /**
218
218
  * This can be used to add arbitrary identifiers to SQL snippets.
219
219
  *
@@ -255,7 +255,7 @@ export interface Sql {
255
255
  * select "public"."person"."first_name" from "public"."person"
256
256
  * ```
257
257
  */
258
- id(...ids: readonly string[]): RawBuilder<unknown>;
258
+ id<T = unknown>(...ids: readonly string[]): RawBuilder<T>;
259
259
  /**
260
260
  * This can be used to add literal values to SQL snippets.
261
261
  *
@@ -361,6 +361,6 @@ export interface Sql {
361
361
  * BEFORE $1::varchar, (1 == 1)::varchar, (select * from "person")::varchar, false::varchar, "first_name" AFTER
362
362
  * ```
363
363
  */
364
- join(array: readonly unknown[], separator?: RawBuilder<any>): RawBuilder<unknown>;
364
+ join<T = unknown>(array: readonly unknown[], separator?: RawBuilder<any>): RawBuilder<T>;
365
365
  }
366
366
  export declare const sql: Sql;
@@ -60,7 +60,7 @@ export const sql = Object.assign((sqlFragments, ...parameters) => {
60
60
  });
61
61
  },
62
62
  join(array, separator = sql `, `) {
63
- const nodes = new Array(2 * array.length - 1);
63
+ const nodes = new Array(Math.max(2 * array.length - 1, 0));
64
64
  const sep = separator.toOperationNode();
65
65
  for (let i = 0; i < array.length; ++i) {
66
66
  nodes[2 * i] = parseParameter(array[i]);
@@ -2,7 +2,6 @@
2
2
  import { AlterColumnNode } from '../operation-node/alter-column-node.js';
3
3
  import { parseDataTypeExpression, } from '../parser/data-type-parser.js';
4
4
  import { parseDefaultValueExpression, } from '../parser/default-value-parser.js';
5
- import { preventAwait } from '../util/prevent-await.js';
6
5
  export class AlterColumnBuilder {
7
6
  #column;
8
7
  constructor(column) {
@@ -31,7 +30,6 @@ export class AlterColumnBuilder {
31
30
  return func(this);
32
31
  }
33
32
  }
34
- preventAwait(AlterColumnBuilder, "don't await AlterColumnBuilder instances");
35
33
  /**
36
34
  * Allows us to force consumers to do exactly one alteration to a column.
37
35
  *
@@ -70,4 +68,3 @@ export class AlteredColumnBuilder {
70
68
  return this.#alterColumnNode;
71
69
  }
72
70
  }
73
- preventAwait(AlteredColumnBuilder, "don't await AlteredColumnBuilder instances");
@@ -11,6 +11,10 @@ export declare class AlterTableAddForeignKeyConstraintBuilder implements Foreign
11
11
  constructor(props: AlterTableAddForeignKeyConstraintBuilderProps);
12
12
  onDelete(onDelete: OnModifyForeignAction): AlterTableAddForeignKeyConstraintBuilder;
13
13
  onUpdate(onUpdate: OnModifyForeignAction): AlterTableAddForeignKeyConstraintBuilder;
14
+ deferrable(): AlterTableAddForeignKeyConstraintBuilder;
15
+ notDeferrable(): AlterTableAddForeignKeyConstraintBuilder;
16
+ initiallyDeferred(): AlterTableAddForeignKeyConstraintBuilder;
17
+ initiallyImmediate(): AlterTableAddForeignKeyConstraintBuilder;
14
18
  /**
15
19
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
16
20
  * what the provided function returns.