kysely 0.27.5 → 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 (371) hide show
  1. package/CODE_OF_CONDUCT.md +183 -0
  2. package/FUNDING.md +25 -0
  3. package/README.md +182 -3
  4. package/deno.check.d.ts +7 -0
  5. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  6. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +6 -3
  7. package/dist/cjs/dialect/mssql/mssql-driver.js +33 -19
  8. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  9. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +11 -0
  10. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +4 -0
  11. package/dist/cjs/dialect/mysql/mysql-driver.js +27 -12
  12. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +4 -0
  13. package/dist/cjs/dialect/postgres/postgres-driver.js +28 -18
  14. package/dist/cjs/dialect/postgres/postgres-introspector.js +7 -17
  15. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +4 -0
  16. package/dist/cjs/dialect/sqlite/sqlite-driver.js +19 -13
  17. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +66 -44
  18. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  19. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +4 -0
  20. package/dist/cjs/driver/database-connection.d.ts +0 -4
  21. package/dist/cjs/driver/driver.d.ts +17 -0
  22. package/dist/cjs/driver/driver.js +13 -1
  23. package/dist/cjs/driver/dummy-driver.d.ts +3 -0
  24. package/dist/cjs/driver/dummy-driver.js +9 -0
  25. package/dist/cjs/driver/runtime-driver.d.ts +4 -0
  26. package/dist/cjs/driver/runtime-driver.js +43 -3
  27. package/dist/cjs/expression/expression-builder.d.ts +9 -10
  28. package/dist/cjs/helpers/postgres.d.ts +48 -0
  29. package/dist/cjs/helpers/postgres.js +50 -0
  30. package/dist/cjs/index.d.ts +13 -2
  31. package/dist/cjs/index.js +13 -2
  32. package/dist/cjs/kysely.d.ts +339 -2
  33. package/dist/cjs/kysely.js +465 -11
  34. package/dist/cjs/migration/migrator.d.ts +16 -1
  35. package/dist/cjs/migration/migrator.js +14 -4
  36. package/dist/cjs/operation-node/aggregate-function-node.d.ts +2 -1
  37. package/dist/cjs/operation-node/aggregate-function-node.js +4 -3
  38. package/dist/cjs/operation-node/alter-table-node.d.ts +3 -1
  39. package/dist/cjs/operation-node/collate-node.d.ts +13 -0
  40. package/dist/cjs/operation-node/collate-node.js +19 -0
  41. package/dist/cjs/operation-node/constraint-node.d.ts +1 -1
  42. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  43. package/dist/cjs/operation-node/create-type-node.js +1 -1
  44. package/dist/cjs/operation-node/delete-query-node.d.ts +8 -2
  45. package/dist/cjs/operation-node/delete-query-node.js +11 -15
  46. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -0
  47. package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
  48. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  49. package/dist/cjs/operation-node/merge-query-node.d.ts +2 -0
  50. package/dist/cjs/operation-node/operation-node-transformer.d.ts +106 -97
  51. package/dist/cjs/operation-node/operation-node-transformer.js +352 -312
  52. package/dist/cjs/operation-node/operation-node-visitor.d.ts +9 -1
  53. package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
  54. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  55. package/dist/cjs/operation-node/or-action-node.d.ts +12 -0
  56. package/dist/cjs/operation-node/or-action-node.js +18 -0
  57. package/dist/cjs/operation-node/order-by-item-node.d.ts +5 -0
  58. package/dist/cjs/operation-node/order-by-item-node.js +6 -0
  59. package/dist/cjs/operation-node/primary-key-constraint-node.d.ts +29 -0
  60. package/dist/cjs/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  61. package/dist/cjs/operation-node/query-node.d.ts +7 -0
  62. package/dist/cjs/operation-node/query-node.js +15 -0
  63. package/dist/cjs/operation-node/refresh-materialized-view-node.d.ts +17 -0
  64. package/dist/cjs/operation-node/refresh-materialized-view-node.js +25 -0
  65. package/dist/cjs/operation-node/rename-constraint-node.d.ts +14 -0
  66. package/dist/cjs/operation-node/rename-constraint-node.js +20 -0
  67. package/dist/cjs/operation-node/select-query-node.d.ts +8 -2
  68. package/dist/cjs/operation-node/select-query-node.js +11 -15
  69. package/dist/cjs/operation-node/unique-constraint-node.d.ts +2 -0
  70. package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
  71. package/dist/cjs/operation-node/update-query-node.js +5 -2
  72. package/dist/cjs/parser/collate-parser.d.ts +1 -0
  73. package/dist/cjs/parser/collate-parser.js +2 -0
  74. package/dist/cjs/parser/delete-from-parser.d.ts +5 -0
  75. package/dist/cjs/parser/delete-from-parser.js +2 -0
  76. package/dist/cjs/parser/insert-values-parser.js +3 -1
  77. package/dist/cjs/parser/join-parser.d.ts +1 -1
  78. package/dist/cjs/parser/join-parser.js +7 -1
  79. package/dist/cjs/parser/merge-into-parser.d.ts +5 -0
  80. package/dist/cjs/parser/merge-into-parser.js +2 -0
  81. package/dist/cjs/parser/order-by-parser.d.ts +18 -5
  82. package/dist/cjs/parser/order-by-parser.js +24 -14
  83. package/dist/cjs/parser/savepoint-parser.d.ts +4 -0
  84. package/dist/cjs/parser/savepoint-parser.js +11 -0
  85. package/dist/cjs/parser/select-from-parser.d.ts +4 -0
  86. package/dist/cjs/parser/select-from-parser.js +2 -0
  87. package/dist/cjs/parser/table-parser.d.ts +2 -5
  88. package/dist/cjs/parser/update-parser.d.ts +5 -0
  89. package/dist/cjs/parser/update-parser.js +2 -0
  90. package/dist/cjs/parser/update-set-parser.d.ts +7 -4
  91. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
  92. package/dist/cjs/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  93. package/dist/cjs/plugin/camel-case/camel-case-transformer.js +2 -2
  94. package/dist/cjs/plugin/camel-case/camel-case.js +4 -1
  95. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  96. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  97. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  98. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  99. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +162 -0
  100. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  101. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +29 -0
  102. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  103. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.js +66 -0
  104. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.js +1 -1
  105. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  106. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.js +6 -4
  107. package/dist/cjs/plugin/with-schema/with-schema-plugin.js +1 -1
  108. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +8 -3
  109. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +45 -14
  110. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +83 -5
  111. package/dist/cjs/query-builder/aggregate-function-builder.js +15 -27
  112. package/dist/cjs/query-builder/cte-builder.js +0 -2
  113. package/dist/cjs/query-builder/delete-query-builder.d.ts +36 -47
  114. package/dist/cjs/query-builder/delete-query-builder.js +12 -78
  115. package/dist/cjs/query-builder/function-module.d.ts +31 -4
  116. package/dist/cjs/query-builder/insert-query-builder.d.ts +161 -6
  117. package/dist/cjs/query-builder/insert-query-builder.js +197 -10
  118. package/dist/cjs/query-builder/join-builder.js +0 -2
  119. package/dist/cjs/query-builder/merge-query-builder.d.ts +145 -3
  120. package/dist/cjs/query-builder/merge-query-builder.js +28 -7
  121. package/dist/cjs/query-builder/on-conflict-builder.js +0 -4
  122. package/dist/cjs/query-builder/order-by-interface.d.ts +176 -0
  123. package/dist/cjs/query-builder/order-by-interface.js +2 -0
  124. package/dist/cjs/query-builder/order-by-item-builder.d.ts +43 -0
  125. package/dist/cjs/query-builder/order-by-item-builder.js +75 -0
  126. package/dist/cjs/query-builder/over-builder.d.ts +43 -6
  127. package/dist/cjs/query-builder/over-builder.js +8 -25
  128. package/dist/cjs/query-builder/returning-interface.d.ts +20 -3
  129. package/dist/cjs/query-builder/select-query-builder.d.ts +279 -98
  130. package/dist/cjs/query-builder/select-query-builder.js +26 -26
  131. package/dist/cjs/query-builder/update-query-builder.d.ts +88 -9
  132. package/dist/cjs/query-builder/update-query-builder.js +17 -15
  133. package/dist/cjs/query-compiler/compiled-query.d.ts +2 -0
  134. package/dist/cjs/query-compiler/compiled-query.js +2 -0
  135. package/dist/cjs/query-compiler/default-query-compiler.d.ts +17 -2
  136. package/dist/cjs/query-compiler/default-query-compiler.js +97 -2
  137. package/dist/cjs/query-compiler/query-compiler.d.ts +4 -2
  138. package/dist/cjs/query-creator.d.ts +23 -25
  139. package/dist/cjs/query-creator.js +280 -8
  140. package/dist/cjs/query-executor/default-query-executor.d.ts +2 -1
  141. package/dist/cjs/query-executor/default-query-executor.js +2 -2
  142. package/dist/cjs/query-executor/query-executor-base.js +7 -25
  143. package/dist/cjs/raw-builder/raw-builder.js +0 -3
  144. package/dist/cjs/raw-builder/sql.d.ts +4 -4
  145. package/dist/cjs/raw-builder/sql.js +1 -1
  146. package/dist/cjs/schema/alter-column-builder.js +0 -3
  147. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  148. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  149. package/dist/cjs/schema/alter-table-add-index-builder.js +0 -2
  150. package/dist/cjs/schema/alter-table-builder.d.ts +7 -3
  151. package/dist/cjs/schema/alter-table-builder.js +21 -10
  152. package/dist/cjs/schema/alter-table-drop-constraint-builder.js +0 -2
  153. package/dist/cjs/schema/alter-table-executor.js +0 -2
  154. package/dist/cjs/schema/check-constraint-builder.d.ts +13 -0
  155. package/dist/cjs/schema/check-constraint-builder.js +20 -0
  156. package/dist/cjs/schema/column-definition-builder.js +0 -2
  157. package/dist/cjs/schema/create-index-builder.js +1 -3
  158. package/dist/cjs/schema/create-schema-builder.js +0 -2
  159. package/dist/cjs/schema/create-table-builder.d.ts +5 -4
  160. package/dist/cjs/schema/create-table-builder.js +9 -7
  161. package/dist/cjs/schema/create-type-builder.d.ts +1 -1
  162. package/dist/cjs/schema/create-type-builder.js +0 -2
  163. package/dist/cjs/schema/create-view-builder.js +0 -2
  164. package/dist/cjs/schema/drop-index-builder.js +0 -2
  165. package/dist/cjs/schema/drop-schema-builder.js +0 -2
  166. package/dist/cjs/schema/drop-table-builder.js +0 -2
  167. package/dist/cjs/schema/drop-type-builder.js +0 -2
  168. package/dist/cjs/schema/drop-view-builder.js +0 -2
  169. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +9 -0
  170. package/dist/cjs/schema/foreign-key-constraint-builder.js +16 -2
  171. package/dist/cjs/schema/primary-key-constraint-builder.d.ts +17 -0
  172. package/dist/cjs/schema/primary-key-constraint-builder.js +37 -0
  173. package/dist/cjs/schema/refresh-materialized-view-builder.d.ts +47 -0
  174. package/dist/cjs/schema/refresh-materialized-view-builder.js +75 -0
  175. package/dist/cjs/schema/schema.d.ts +14 -0
  176. package/dist/cjs/schema/schema.js +21 -0
  177. package/dist/cjs/schema/unique-constraint-builder.d.ts +10 -1
  178. package/dist/cjs/schema/unique-constraint-builder.js +26 -5
  179. package/dist/cjs/util/infer-result.d.ts +1 -1
  180. package/dist/cjs/util/log.d.ts +1 -0
  181. package/dist/cjs/util/log.js +3 -2
  182. package/dist/cjs/util/provide-controlled-connection.d.ts +7 -0
  183. package/dist/cjs/util/provide-controlled-connection.js +24 -0
  184. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  185. package/dist/esm/dialect/mssql/mssql-driver.d.ts +6 -3
  186. package/dist/esm/dialect/mssql/mssql-driver.js +33 -19
  187. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  188. package/dist/esm/dialect/mssql/mssql-query-compiler.js +11 -0
  189. package/dist/esm/dialect/mysql/mysql-driver.d.ts +4 -0
  190. package/dist/esm/dialect/mysql/mysql-driver.js +27 -12
  191. package/dist/esm/dialect/postgres/postgres-driver.d.ts +4 -0
  192. package/dist/esm/dialect/postgres/postgres-driver.js +28 -18
  193. package/dist/esm/dialect/postgres/postgres-introspector.js +7 -17
  194. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +4 -0
  195. package/dist/esm/dialect/sqlite/sqlite-driver.js +19 -13
  196. package/dist/esm/dialect/sqlite/sqlite-introspector.js +66 -44
  197. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  198. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +4 -0
  199. package/dist/esm/driver/database-connection.d.ts +0 -4
  200. package/dist/esm/driver/driver.d.ts +17 -0
  201. package/dist/esm/driver/driver.js +11 -0
  202. package/dist/esm/driver/dummy-driver.d.ts +3 -0
  203. package/dist/esm/driver/dummy-driver.js +9 -0
  204. package/dist/esm/driver/runtime-driver.d.ts +4 -0
  205. package/dist/esm/driver/runtime-driver.js +43 -3
  206. package/dist/esm/expression/expression-builder.d.ts +9 -10
  207. package/dist/esm/helpers/postgres.d.ts +48 -0
  208. package/dist/esm/helpers/postgres.js +49 -0
  209. package/dist/esm/index.d.ts +13 -2
  210. package/dist/esm/index.js +11 -1
  211. package/dist/esm/kysely.d.ts +339 -2
  212. package/dist/esm/kysely.js +461 -10
  213. package/dist/esm/migration/migrator.d.ts +16 -1
  214. package/dist/esm/migration/migrator.js +14 -4
  215. package/dist/esm/operation-node/aggregate-function-node.d.ts +2 -1
  216. package/dist/esm/operation-node/aggregate-function-node.js +4 -3
  217. package/dist/esm/operation-node/alter-table-node.d.ts +3 -1
  218. package/dist/esm/operation-node/collate-node.d.ts +13 -0
  219. package/dist/esm/operation-node/collate-node.js +17 -0
  220. package/dist/esm/operation-node/constraint-node.d.ts +1 -1
  221. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  222. package/dist/esm/operation-node/create-type-node.js +1 -1
  223. package/dist/esm/operation-node/delete-query-node.d.ts +8 -2
  224. package/dist/esm/operation-node/delete-query-node.js +11 -15
  225. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -0
  226. package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
  227. package/dist/esm/operation-node/join-node.d.ts +1 -1
  228. package/dist/esm/operation-node/merge-query-node.d.ts +2 -0
  229. package/dist/esm/operation-node/operation-node-transformer.d.ts +106 -97
  230. package/dist/esm/operation-node/operation-node-transformer.js +352 -312
  231. package/dist/esm/operation-node/operation-node-visitor.d.ts +9 -1
  232. package/dist/esm/operation-node/operation-node-visitor.js +4 -0
  233. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  234. package/dist/esm/operation-node/or-action-node.d.ts +12 -0
  235. package/dist/esm/operation-node/or-action-node.js +16 -0
  236. package/dist/esm/operation-node/order-by-item-node.d.ts +5 -0
  237. package/dist/esm/operation-node/order-by-item-node.js +6 -0
  238. package/dist/esm/operation-node/primary-key-constraint-node.d.ts +29 -0
  239. package/dist/esm/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  240. package/dist/esm/operation-node/query-node.d.ts +7 -0
  241. package/dist/esm/operation-node/query-node.js +15 -0
  242. package/dist/esm/operation-node/refresh-materialized-view-node.d.ts +17 -0
  243. package/dist/esm/operation-node/refresh-materialized-view-node.js +23 -0
  244. package/dist/esm/operation-node/rename-constraint-node.d.ts +14 -0
  245. package/dist/esm/operation-node/rename-constraint-node.js +18 -0
  246. package/dist/esm/operation-node/select-query-node.d.ts +8 -2
  247. package/dist/esm/operation-node/select-query-node.js +11 -15
  248. package/dist/esm/operation-node/unique-constraint-node.d.ts +2 -0
  249. package/dist/esm/operation-node/update-query-node.d.ts +3 -4
  250. package/dist/esm/operation-node/update-query-node.js +5 -2
  251. package/dist/esm/parser/collate-parser.d.ts +1 -0
  252. package/dist/esm/parser/collate-parser.js +2 -0
  253. package/dist/esm/parser/delete-from-parser.d.ts +5 -0
  254. package/dist/esm/parser/delete-from-parser.js +2 -0
  255. package/dist/esm/parser/insert-values-parser.js +3 -1
  256. package/dist/esm/parser/join-parser.d.ts +1 -1
  257. package/dist/esm/parser/join-parser.js +7 -1
  258. package/dist/esm/parser/merge-into-parser.d.ts +5 -0
  259. package/dist/esm/parser/merge-into-parser.js +2 -0
  260. package/dist/esm/parser/order-by-parser.d.ts +18 -5
  261. package/dist/esm/parser/order-by-parser.js +27 -17
  262. package/dist/esm/parser/savepoint-parser.d.ts +4 -0
  263. package/dist/esm/parser/savepoint-parser.js +9 -0
  264. package/dist/esm/parser/select-from-parser.d.ts +4 -0
  265. package/dist/esm/parser/select-from-parser.js +2 -0
  266. package/dist/esm/parser/table-parser.d.ts +2 -5
  267. package/dist/esm/parser/update-parser.d.ts +5 -0
  268. package/dist/esm/parser/update-parser.js +2 -0
  269. package/dist/esm/parser/update-set-parser.d.ts +7 -4
  270. package/dist/esm/plugin/camel-case/camel-case-plugin.js +1 -1
  271. package/dist/esm/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  272. package/dist/esm/plugin/camel-case/camel-case-transformer.js +2 -2
  273. package/dist/esm/plugin/camel-case/camel-case.js +4 -1
  274. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  275. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  276. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  277. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  278. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +159 -0
  279. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  280. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +26 -0
  281. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  282. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.js +63 -0
  283. package/dist/esm/plugin/immediate-value/immediate-value-plugin.js +1 -1
  284. package/dist/esm/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  285. package/dist/esm/plugin/immediate-value/immediate-value-transformer.js +6 -4
  286. package/dist/esm/plugin/with-schema/with-schema-plugin.js +1 -1
  287. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +8 -3
  288. package/dist/esm/plugin/with-schema/with-schema-transformer.js +45 -14
  289. package/dist/esm/query-builder/aggregate-function-builder.d.ts +83 -5
  290. package/dist/esm/query-builder/aggregate-function-builder.js +15 -27
  291. package/dist/esm/query-builder/cte-builder.js +0 -2
  292. package/dist/esm/query-builder/delete-query-builder.d.ts +36 -47
  293. package/dist/esm/query-builder/delete-query-builder.js +12 -78
  294. package/dist/esm/query-builder/function-module.d.ts +31 -4
  295. package/dist/esm/query-builder/insert-query-builder.d.ts +161 -6
  296. package/dist/esm/query-builder/insert-query-builder.js +197 -10
  297. package/dist/esm/query-builder/join-builder.js +0 -2
  298. package/dist/esm/query-builder/merge-query-builder.d.ts +145 -3
  299. package/dist/esm/query-builder/merge-query-builder.js +29 -8
  300. package/dist/esm/query-builder/on-conflict-builder.js +0 -4
  301. package/dist/esm/query-builder/order-by-interface.d.ts +176 -0
  302. package/dist/esm/query-builder/order-by-interface.js +2 -0
  303. package/dist/esm/query-builder/order-by-item-builder.d.ts +43 -0
  304. package/dist/esm/query-builder/order-by-item-builder.js +72 -0
  305. package/dist/esm/query-builder/over-builder.d.ts +43 -6
  306. package/dist/esm/query-builder/over-builder.js +8 -25
  307. package/dist/esm/query-builder/returning-interface.d.ts +20 -3
  308. package/dist/esm/query-builder/select-query-builder.d.ts +279 -98
  309. package/dist/esm/query-builder/select-query-builder.js +26 -26
  310. package/dist/esm/query-builder/update-query-builder.d.ts +88 -9
  311. package/dist/esm/query-builder/update-query-builder.js +17 -15
  312. package/dist/esm/query-compiler/compiled-query.d.ts +2 -0
  313. package/dist/esm/query-compiler/compiled-query.js +2 -0
  314. package/dist/esm/query-compiler/default-query-compiler.d.ts +17 -2
  315. package/dist/esm/query-compiler/default-query-compiler.js +97 -2
  316. package/dist/esm/query-compiler/query-compiler.d.ts +4 -2
  317. package/dist/esm/query-creator.d.ts +23 -25
  318. package/dist/esm/query-creator.js +281 -9
  319. package/dist/esm/query-executor/default-query-executor.d.ts +2 -1
  320. package/dist/esm/query-executor/default-query-executor.js +2 -2
  321. package/dist/esm/query-executor/query-executor-base.js +7 -25
  322. package/dist/esm/raw-builder/raw-builder.js +0 -3
  323. package/dist/esm/raw-builder/sql.d.ts +4 -4
  324. package/dist/esm/raw-builder/sql.js +1 -1
  325. package/dist/esm/schema/alter-column-builder.js +0 -3
  326. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  327. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  328. package/dist/esm/schema/alter-table-add-index-builder.js +0 -2
  329. package/dist/esm/schema/alter-table-builder.d.ts +7 -3
  330. package/dist/esm/schema/alter-table-builder.js +22 -11
  331. package/dist/esm/schema/alter-table-drop-constraint-builder.js +0 -2
  332. package/dist/esm/schema/alter-table-executor.js +0 -2
  333. package/dist/esm/schema/check-constraint-builder.d.ts +13 -0
  334. package/dist/esm/schema/check-constraint-builder.js +17 -0
  335. package/dist/esm/schema/column-definition-builder.js +0 -2
  336. package/dist/esm/schema/create-index-builder.js +1 -3
  337. package/dist/esm/schema/create-schema-builder.js +0 -2
  338. package/dist/esm/schema/create-table-builder.d.ts +5 -4
  339. package/dist/esm/schema/create-table-builder.js +10 -8
  340. package/dist/esm/schema/create-type-builder.d.ts +1 -1
  341. package/dist/esm/schema/create-type-builder.js +0 -2
  342. package/dist/esm/schema/create-view-builder.js +0 -2
  343. package/dist/esm/schema/drop-index-builder.js +0 -2
  344. package/dist/esm/schema/drop-schema-builder.js +0 -2
  345. package/dist/esm/schema/drop-table-builder.js +0 -2
  346. package/dist/esm/schema/drop-type-builder.js +0 -2
  347. package/dist/esm/schema/drop-view-builder.js +0 -2
  348. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +9 -0
  349. package/dist/esm/schema/foreign-key-constraint-builder.js +16 -2
  350. package/dist/esm/schema/primary-key-constraint-builder.d.ts +17 -0
  351. package/dist/esm/schema/primary-key-constraint-builder.js +34 -0
  352. package/dist/esm/schema/refresh-materialized-view-builder.d.ts +47 -0
  353. package/dist/esm/schema/refresh-materialized-view-builder.js +72 -0
  354. package/dist/esm/schema/schema.d.ts +14 -0
  355. package/dist/esm/schema/schema.js +21 -0
  356. package/dist/esm/schema/unique-constraint-builder.d.ts +10 -1
  357. package/dist/esm/schema/unique-constraint-builder.js +26 -5
  358. package/dist/esm/util/infer-result.d.ts +1 -1
  359. package/dist/esm/util/log.d.ts +1 -0
  360. package/dist/esm/util/log.js +3 -2
  361. package/dist/esm/util/provide-controlled-connection.d.ts +7 -0
  362. package/dist/esm/util/provide-controlled-connection.js +22 -0
  363. package/outdated-typescript.d.ts +5 -0
  364. package/package.json +16 -2
  365. package/CONTRIBUTING.md +0 -70
  366. package/dist/cjs/operation-node/primary-constraint-node.d.ts +0 -15
  367. package/dist/cjs/util/prevent-await.d.ts +0 -1
  368. package/dist/cjs/util/prevent-await.js +0 -13
  369. package/dist/esm/operation-node/primary-constraint-node.d.ts +0 -15
  370. package/dist/esm/util/prevent-await.d.ts +0 -1
  371. package/dist/esm/util/prevent-await.js +0 -11
@@ -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
  *
@@ -23,6 +23,113 @@ class QueryCreator {
23
23
  constructor(props) {
24
24
  this.#props = (0, object_utils_js_1.freeze)(props);
25
25
  }
26
+ /**
27
+ * Creates a `select` query builder for the given table or tables.
28
+ *
29
+ * The tables passed to this method are built as the query's `from` clause.
30
+ *
31
+ * ### Examples
32
+ *
33
+ * Create a select query for one table:
34
+ *
35
+ * ```ts
36
+ * db.selectFrom('person').selectAll()
37
+ * ```
38
+ *
39
+ * The generated SQL (PostgreSQL):
40
+ *
41
+ * ```sql
42
+ * select * from "person"
43
+ * ```
44
+ *
45
+ * Create a select query for one table with an alias:
46
+ *
47
+ * ```ts
48
+ * const persons = await db.selectFrom('person as p')
49
+ * .select(['p.id', 'first_name'])
50
+ * .execute()
51
+ *
52
+ * console.log(persons[0].id)
53
+ * ```
54
+ *
55
+ * The generated SQL (PostgreSQL):
56
+ *
57
+ * ```sql
58
+ * select "p"."id", "first_name" from "person" as "p"
59
+ * ```
60
+ *
61
+ * Create a select query from a subquery:
62
+ *
63
+ * ```ts
64
+ * const persons = await db.selectFrom(
65
+ * (eb) => eb.selectFrom('person').select('person.id as identifier').as('p')
66
+ * )
67
+ * .select('p.identifier')
68
+ * .execute()
69
+ *
70
+ * console.log(persons[0].identifier)
71
+ * ```
72
+ *
73
+ * The generated SQL (PostgreSQL):
74
+ *
75
+ * ```sql
76
+ * select "p"."identifier",
77
+ * from (
78
+ * select "person"."id" as "identifier" from "person"
79
+ * ) as p
80
+ * ```
81
+ *
82
+ * Create a select query from raw sql:
83
+ *
84
+ * ```ts
85
+ * import { sql } from 'kysely'
86
+ *
87
+ * const items = await db
88
+ * .selectFrom(sql<{ one: number }>`(select 1 as one)`.as('q'))
89
+ * .select('q.one')
90
+ * .execute()
91
+ *
92
+ * console.log(items[0].one)
93
+ * ```
94
+ *
95
+ * The generated SQL (PostgreSQL):
96
+ *
97
+ * ```sql
98
+ * select "q"."one",
99
+ * from (
100
+ * select 1 as one
101
+ * ) as q
102
+ * ```
103
+ *
104
+ * When you use the `sql` tag you need to also provide the result type of the
105
+ * raw snippet / query so that Kysely can figure out what columns are
106
+ * available for the rest of the query.
107
+ *
108
+ * The `selectFrom` method also accepts an array for multiple tables. All
109
+ * the above examples can also be used in an array.
110
+ *
111
+ * ```ts
112
+ * import { sql } from 'kysely'
113
+ *
114
+ * const items = await db.selectFrom([
115
+ * 'person as p',
116
+ * db.selectFrom('pet').select('pet.species').as('a'),
117
+ * sql<{ one: number }>`(select 1 as one)`.as('q')
118
+ * ])
119
+ * .select(['p.id', 'a.species', 'q.one'])
120
+ * .execute()
121
+ * ```
122
+ *
123
+ * The generated SQL (PostgreSQL):
124
+ *
125
+ * ```sql
126
+ * select "p".id, "a"."species", "q"."one"
127
+ * from
128
+ * "person" as "p",
129
+ * (select "pet"."species" from "pet") as a,
130
+ * (select 1 as one) as "q"
131
+ * ```
132
+ */
26
133
  selectFrom(from) {
27
134
  return (0, select_query_builder_js_1.createSelectQueryBuilder)({
28
135
  queryId: (0, query_id_js_1.createQueryId)(),
@@ -83,10 +190,14 @@ class QueryCreator {
83
190
  });
84
191
  }
85
192
  /**
86
- * Creates a replace query.
193
+ * Creates a "replace into" query.
194
+ *
195
+ * This is only supported by some dialects like MySQL or SQLite.
196
+ *
197
+ * Similar to MySQL's {@link InsertQueryBuilder.onDuplicateKeyUpdate} that deletes
198
+ * and inserts values on collision instead of updating existing rows.
87
199
  *
88
- * A MySQL-only statement similar to {@link InsertQueryBuilder.onDuplicateKeyUpdate}
89
- * that deletes and inserts values on collision instead of updating existing rows.
200
+ * An alias of SQLite's {@link InsertQueryBuilder.orReplace}.
90
201
  *
91
202
  * The return value of this query is an instance of {@link InsertResult}. {@link InsertResult}
92
203
  * has the {@link InsertResult.insertId | insertId} field that holds the auto incremented id of
@@ -103,10 +214,16 @@ class QueryCreator {
103
214
  * first_name: 'Jennifer',
104
215
  * last_name: 'Aniston'
105
216
  * })
106
- * .executeTakeFirst()
217
+ * .executeTakeFirstOrThrow()
107
218
  *
108
219
  * console.log(result.insertId)
109
220
  * ```
221
+ *
222
+ * The generated SQL (MySQL):
223
+ *
224
+ * ```sql
225
+ * replace into `person` (`first_name`, `last_name`) values (?, ?)
226
+ * ```
110
227
  */
111
228
  replaceInto(table) {
112
229
  return new insert_query_builder_js_1.InsertQueryBuilder({
@@ -115,20 +232,175 @@ class QueryCreator {
115
232
  queryNode: insert_query_node_js_1.InsertQueryNode.create((0, table_parser_js_1.parseTable)(table), this.#props.withNode, true),
116
233
  });
117
234
  }
118
- deleteFrom(tables) {
235
+ /**
236
+ * Creates a delete query.
237
+ *
238
+ * See the {@link DeleteQueryBuilder.where} method for examples on how to specify
239
+ * a where clause for the delete operation.
240
+ *
241
+ * The return value of the query is an instance of {@link DeleteResult}.
242
+ *
243
+ * ### Examples
244
+ *
245
+ * <!-- siteExample("delete", "Single row", 10) -->
246
+ *
247
+ * Delete a single row:
248
+ *
249
+ * ```ts
250
+ * const result = await db
251
+ * .deleteFrom('person')
252
+ * .where('person.id', '=', 1)
253
+ * .executeTakeFirst()
254
+ *
255
+ * console.log(result.numDeletedRows)
256
+ * ```
257
+ *
258
+ * The generated SQL (PostgreSQL):
259
+ *
260
+ * ```sql
261
+ * delete from "person" where "person"."id" = $1
262
+ * ```
263
+ *
264
+ * Some databases such as MySQL support deleting from multiple tables:
265
+ *
266
+ * ```ts
267
+ * const result = await db
268
+ * .deleteFrom(['person', 'pet'])
269
+ * .using('person')
270
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
271
+ * .where('person.id', '=', 1)
272
+ * .executeTakeFirst()
273
+ * ```
274
+ *
275
+ * The generated SQL (MySQL):
276
+ *
277
+ * ```sql
278
+ * delete from `person`, `pet`
279
+ * using `person`
280
+ * inner join `pet` on `pet`.`owner_id` = `person`.`id`
281
+ * where `person`.`id` = ?
282
+ * ```
283
+ */
284
+ deleteFrom(from) {
119
285
  return new delete_query_builder_js_1.DeleteQueryBuilder({
120
286
  queryId: (0, query_id_js_1.createQueryId)(),
121
287
  executor: this.#props.executor,
122
- queryNode: delete_query_node_js_1.DeleteQueryNode.create((0, table_parser_js_1.parseTableExpressionOrList)(tables), this.#props.withNode),
288
+ queryNode: delete_query_node_js_1.DeleteQueryNode.create((0, table_parser_js_1.parseTableExpressionOrList)(from), this.#props.withNode),
123
289
  });
124
290
  }
125
- updateTable(table) {
291
+ /**
292
+ * Creates an update query.
293
+ *
294
+ * See the {@link UpdateQueryBuilder.where} method for examples on how to specify
295
+ * a where clause for the update operation.
296
+ *
297
+ * See the {@link UpdateQueryBuilder.set} method for examples on how to
298
+ * specify the updates.
299
+ *
300
+ * The return value of the query is an {@link UpdateResult}.
301
+ *
302
+ * ### Examples
303
+ *
304
+ * ```ts
305
+ * const result = await db
306
+ * .updateTable('person')
307
+ * .set({ first_name: 'Jennifer' })
308
+ * .where('person.id', '=', 1)
309
+ * .executeTakeFirst()
310
+ *
311
+ * console.log(result.numUpdatedRows)
312
+ * ```
313
+ */
314
+ updateTable(tables) {
126
315
  return new update_query_builder_js_1.UpdateQueryBuilder({
127
316
  queryId: (0, query_id_js_1.createQueryId)(),
128
317
  executor: this.#props.executor,
129
- queryNode: update_query_node_js_1.UpdateQueryNode.create((0, table_parser_js_1.parseTableExpression)(table), this.#props.withNode),
318
+ queryNode: update_query_node_js_1.UpdateQueryNode.create((0, table_parser_js_1.parseTableExpressionOrList)(tables), this.#props.withNode),
130
319
  });
131
320
  }
321
+ /**
322
+ * Creates a merge query.
323
+ *
324
+ * The return value of the query is a {@link MergeResult}.
325
+ *
326
+ * See the {@link MergeQueryBuilder.using} method for examples on how to specify
327
+ * the other table.
328
+ *
329
+ * ### Examples
330
+ *
331
+ * <!-- siteExample("merge", "Source row existence", 10) -->
332
+ *
333
+ * Update a target column based on the existence of a source row:
334
+ *
335
+ * ```ts
336
+ * const result = await db
337
+ * .mergeInto('person as target')
338
+ * .using('pet as source', 'source.owner_id', 'target.id')
339
+ * .whenMatchedAnd('target.has_pets', '!=', 'Y')
340
+ * .thenUpdateSet({ has_pets: 'Y' })
341
+ * .whenNotMatchedBySourceAnd('target.has_pets', '=', 'Y')
342
+ * .thenUpdateSet({ has_pets: 'N' })
343
+ * .executeTakeFirstOrThrow()
344
+ *
345
+ * console.log(result.numChangedRows)
346
+ * ```
347
+ *
348
+ * The generated SQL (PostgreSQL):
349
+ *
350
+ * ```sql
351
+ * merge into "person"
352
+ * using "pet"
353
+ * on "pet"."owner_id" = "person"."id"
354
+ * when matched and "has_pets" != $1
355
+ * then update set "has_pets" = $2
356
+ * when not matched by source and "has_pets" = $3
357
+ * then update set "has_pets" = $4
358
+ * ```
359
+ *
360
+ * <!-- siteExample("merge", "Temporary changes table", 20) -->
361
+ *
362
+ * Merge new entries from a temporary changes table:
363
+ *
364
+ * ```ts
365
+ * const result = await db
366
+ * .mergeInto('wine as target')
367
+ * .using(
368
+ * 'wine_stock_change as source',
369
+ * 'source.wine_name',
370
+ * 'target.name',
371
+ * )
372
+ * .whenNotMatchedAnd('source.stock_delta', '>', 0)
373
+ * .thenInsertValues(({ ref }) => ({
374
+ * name: ref('source.wine_name'),
375
+ * stock: ref('source.stock_delta'),
376
+ * }))
377
+ * .whenMatchedAnd(
378
+ * (eb) => eb('target.stock', '+', eb.ref('source.stock_delta')),
379
+ * '>',
380
+ * 0,
381
+ * )
382
+ * .thenUpdateSet('stock', (eb) =>
383
+ * eb('target.stock', '+', eb.ref('source.stock_delta')),
384
+ * )
385
+ * .whenMatched()
386
+ * .thenDelete()
387
+ * .executeTakeFirstOrThrow()
388
+ * ```
389
+ *
390
+ * The generated SQL (PostgreSQL):
391
+ *
392
+ * ```sql
393
+ * merge into "wine" as "target"
394
+ * using "wine_stock_change" as "source"
395
+ * on "source"."wine_name" = "target"."name"
396
+ * when not matched and "source"."stock_delta" > $1
397
+ * then insert ("name", "stock") values ("source"."wine_name", "source"."stock_delta")
398
+ * when matched and "target"."stock" + "source"."stock_delta" > $2
399
+ * then update set "stock" = "target"."stock" + "source"."stock_delta"
400
+ * when matched
401
+ * then delete
402
+ * ```
403
+ */
132
404
  mergeInto(targetTable) {
133
405
  return new merge_query_builder_js_1.MergeQueryBuilder({
134
406
  queryId: (0, query_id_js_1.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.
@@ -15,8 +15,8 @@ class DefaultQueryExecutor extends query_executor_base_js_1.QueryExecutorBase {
15
15
  get adapter() {
16
16
  return this.#adapter;
17
17
  }
18
- compileQuery(node) {
19
- return this.#compiler.compileQuery(node);
18
+ compileQuery(node, queryId) {
19
+ return this.#compiler.compileQuery(node, queryId);
20
20
  }
21
21
  provideConnection(consumer) {
22
22
  return this.#connectionProvider.provideConnection(consumer);
@@ -2,7 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.QueryExecutorBase = void 0;
4
4
  const object_utils_js_1 = require("../util/object-utils.js");
5
- const deferred_js_1 = require("../util/deferred.js");
5
+ const provide_controlled_connection_js_1 = require("../util/provide-controlled-connection.js");
6
6
  const log_once_js_1 = require("../util/log-once.js");
7
7
  const NO_PLUGINS = (0, object_utils_js_1.freeze)([]);
8
8
  class QueryExecutorBase {
@@ -35,28 +35,21 @@ class QueryExecutorBase {
35
35
  async executeQuery(compiledQuery, queryId) {
36
36
  return await this.provideConnection(async (connection) => {
37
37
  const result = await connection.executeQuery(compiledQuery);
38
- const transformedResult = await this.#transformResult(result, queryId);
39
- // TODO: remove.
40
- warnOfOutdatedDriverOrPlugins(result, transformedResult);
41
- return transformedResult;
38
+ if ('numUpdatedOrDeletedRows' in result) {
39
+ (0, log_once_js_1.logOnce)('kysely:warning: outdated driver/plugin detected! `QueryResult.numUpdatedOrDeletedRows` has been replaced with `QueryResult.numAffectedRows`.');
40
+ }
41
+ return await this.#transformResult(result, queryId);
42
42
  });
43
43
  }
44
44
  async *stream(compiledQuery, chunkSize, queryId) {
45
- const connectionDefer = new deferred_js_1.Deferred();
46
- const connectionReleaseDefer = new deferred_js_1.Deferred();
47
- this.provideConnection(async (connection) => {
48
- connectionDefer.resolve(connection);
49
- // Lets wait until we don't need connection before returning here (returning releases connection)
50
- return await connectionReleaseDefer.promise;
51
- }).catch((ex) => connectionDefer.reject(ex));
52
- const connection = await connectionDefer.promise;
45
+ const { connection, release } = await (0, provide_controlled_connection_js_1.provideControlledConnection)(this);
53
46
  try {
54
47
  for await (const result of connection.streamQuery(compiledQuery, chunkSize)) {
55
48
  yield await this.#transformResult(result, queryId);
56
49
  }
57
50
  }
58
51
  finally {
59
- connectionReleaseDefer.resolve();
52
+ release();
60
53
  }
61
54
  }
62
55
  async #transformResult(result, queryId) {
@@ -67,14 +60,3 @@ class QueryExecutorBase {
67
60
  }
68
61
  }
69
62
  exports.QueryExecutorBase = QueryExecutorBase;
70
- // TODO: remove.
71
- function warnOfOutdatedDriverOrPlugins(result, transformedResult) {
72
- const { numAffectedRows } = result;
73
- if ((numAffectedRows === undefined &&
74
- result.numUpdatedOrDeletedRows === undefined) ||
75
- (numAffectedRows !== undefined &&
76
- transformedResult.numAffectedRows !== undefined)) {
77
- return;
78
- }
79
- (0, log_once_js_1.logOnce)('kysely:warning: outdated driver/plugin detected! QueryResult.numUpdatedOrDeletedRows is deprecated and will be removed in a future release.');
80
- }
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createRawBuilder = createRawBuilder;
4
4
  const alias_node_js_1 = require("../operation-node/alias-node.js");
5
- const prevent_await_js_1 = require("../util/prevent-await.js");
6
5
  const object_utils_js_1 = require("../util/object-utils.js");
7
6
  const noop_query_executor_js_1 = require("../query-executor/noop-query-executor.js");
8
7
  const identifier_node_js_1 = require("../operation-node/identifier-node.js");
@@ -63,7 +62,6 @@ class RawBuilderImpl {
63
62
  function createRawBuilder(props) {
64
63
  return new RawBuilderImpl(props);
65
64
  }
66
- (0, prevent_await_js_1.preventAwait)(RawBuilderImpl, "don't await RawBuilder instances directly. To execute the query you need to call `execute`");
67
65
  class AliasedRawBuilderImpl {
68
66
  #rawBuilder;
69
67
  #alias;
@@ -86,4 +84,3 @@ class AliasedRawBuilderImpl {
86
84
  : identifier_node_js_1.IdentifierNode.create(this.#alias));
87
85
  }
88
86
  }
89
- (0, prevent_await_js_1.preventAwait)(AliasedRawBuilderImpl, "don't await AliasedRawBuilder instances directly. AliasedRawBuilder should never be executed directly since it's always a part of another query.");
@@ -199,7 +199,7 @@ export interface Sql {
199
199
  * select first_name from "person"
200
200
  * ```
201
201
  *
202
- * The refefences can also include a schema on supported databases:
202
+ * The references can also include a schema on supported databases:
203
203
  *
204
204
  * ```ts
205
205
  * const table = 'public.person'
@@ -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;
@@ -62,7 +62,7 @@ exports.sql = Object.assign((sqlFragments, ...parameters) => {
62
62
  });
63
63
  },
64
64
  join(array, separator = (0, exports.sql) `, `) {
65
- const nodes = new Array(2 * array.length - 1);
65
+ const nodes = new Array(Math.max(2 * array.length - 1, 0));
66
66
  const sep = separator.toOperationNode();
67
67
  for (let i = 0; i < array.length; ++i) {
68
68
  nodes[2 * i] = parseParameter(array[i]);
@@ -4,7 +4,6 @@ exports.AlteredColumnBuilder = exports.AlterColumnBuilder = void 0;
4
4
  const alter_column_node_js_1 = require("../operation-node/alter-column-node.js");
5
5
  const data_type_parser_js_1 = require("../parser/data-type-parser.js");
6
6
  const default_value_parser_js_1 = require("../parser/default-value-parser.js");
7
- const prevent_await_js_1 = require("../util/prevent-await.js");
8
7
  class AlterColumnBuilder {
9
8
  #column;
10
9
  constructor(column) {
@@ -34,7 +33,6 @@ class AlterColumnBuilder {
34
33
  }
35
34
  }
36
35
  exports.AlterColumnBuilder = AlterColumnBuilder;
37
- (0, prevent_await_js_1.preventAwait)(AlterColumnBuilder, "don't await AlterColumnBuilder instances");
38
36
  /**
39
37
  * Allows us to force consumers to do exactly one alteration to a column.
40
38
  *
@@ -74,4 +72,3 @@ class AlteredColumnBuilder {
74
72
  }
75
73
  }
76
74
  exports.AlteredColumnBuilder = AlteredColumnBuilder;
77
- (0, prevent_await_js_1.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.
@@ -4,7 +4,6 @@ exports.AlterTableAddForeignKeyConstraintBuilder = void 0;
4
4
  const add_constraint_node_js_1 = require("../operation-node/add-constraint-node.js");
5
5
  const alter_table_node_js_1 = require("../operation-node/alter-table-node.js");
6
6
  const object_utils_js_1 = require("../util/object-utils.js");
7
- const prevent_await_js_1 = require("../util/prevent-await.js");
8
7
  class AlterTableAddForeignKeyConstraintBuilder {
9
8
  #props;
10
9
  constructor(props) {
@@ -22,6 +21,30 @@ class AlterTableAddForeignKeyConstraintBuilder {
22
21
  constraintBuilder: this.#props.constraintBuilder.onUpdate(onUpdate),
23
22
  });
24
23
  }
24
+ deferrable() {
25
+ return new AlterTableAddForeignKeyConstraintBuilder({
26
+ ...this.#props,
27
+ constraintBuilder: this.#props.constraintBuilder.deferrable(),
28
+ });
29
+ }
30
+ notDeferrable() {
31
+ return new AlterTableAddForeignKeyConstraintBuilder({
32
+ ...this.#props,
33
+ constraintBuilder: this.#props.constraintBuilder.notDeferrable(),
34
+ });
35
+ }
36
+ initiallyDeferred() {
37
+ return new AlterTableAddForeignKeyConstraintBuilder({
38
+ ...this.#props,
39
+ constraintBuilder: this.#props.constraintBuilder.initiallyDeferred(),
40
+ });
41
+ }
42
+ initiallyImmediate() {
43
+ return new AlterTableAddForeignKeyConstraintBuilder({
44
+ ...this.#props,
45
+ constraintBuilder: this.#props.constraintBuilder.initiallyImmediate(),
46
+ });
47
+ }
25
48
  /**
26
49
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
27
50
  * what the provided function returns.
@@ -42,4 +65,3 @@ class AlterTableAddForeignKeyConstraintBuilder {
42
65
  }
43
66
  }
44
67
  exports.AlterTableAddForeignKeyConstraintBuilder = AlterTableAddForeignKeyConstraintBuilder;
45
- (0, prevent_await_js_1.preventAwait)(AlterTableAddForeignKeyConstraintBuilder, "don't await AlterTableAddForeignKeyConstraintBuilder instances directly. To execute the query you need to call `execute`");