kysely 0.27.6 → 0.28.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (363) hide show
  1. package/README.md +169 -1
  2. package/deno.check.d.ts +7 -0
  3. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  4. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +6 -3
  5. package/dist/cjs/dialect/mssql/mssql-driver.js +33 -19
  6. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  7. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +11 -0
  8. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +4 -0
  9. package/dist/cjs/dialect/mysql/mysql-driver.js +27 -12
  10. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +4 -0
  11. package/dist/cjs/dialect/postgres/postgres-driver.js +28 -18
  12. package/dist/cjs/dialect/postgres/postgres-introspector.js +7 -17
  13. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +4 -0
  14. package/dist/cjs/dialect/sqlite/sqlite-driver.js +19 -13
  15. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  16. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +4 -0
  17. package/dist/cjs/driver/database-connection.d.ts +0 -4
  18. package/dist/cjs/driver/driver.d.ts +17 -0
  19. package/dist/cjs/driver/driver.js +13 -1
  20. package/dist/cjs/driver/dummy-driver.d.ts +3 -0
  21. package/dist/cjs/driver/dummy-driver.js +9 -0
  22. package/dist/cjs/driver/runtime-driver.d.ts +4 -0
  23. package/dist/cjs/driver/runtime-driver.js +43 -3
  24. package/dist/cjs/expression/expression-builder.d.ts +7 -10
  25. package/dist/cjs/helpers/postgres.d.ts +48 -0
  26. package/dist/cjs/helpers/postgres.js +50 -0
  27. package/dist/cjs/index.d.ts +13 -2
  28. package/dist/cjs/index.js +13 -2
  29. package/dist/cjs/kysely.d.ts +339 -2
  30. package/dist/cjs/kysely.js +465 -11
  31. package/dist/cjs/migration/migrator.d.ts +8 -0
  32. package/dist/cjs/migration/migrator.js +1 -1
  33. package/dist/cjs/operation-node/aggregate-function-node.d.ts +2 -1
  34. package/dist/cjs/operation-node/aggregate-function-node.js +4 -3
  35. package/dist/cjs/operation-node/alter-table-node.d.ts +3 -1
  36. package/dist/cjs/operation-node/collate-node.d.ts +13 -0
  37. package/dist/cjs/operation-node/collate-node.js +19 -0
  38. package/dist/cjs/operation-node/constraint-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/create-type-node.js +1 -1
  41. package/dist/cjs/operation-node/delete-query-node.d.ts +8 -2
  42. package/dist/cjs/operation-node/delete-query-node.js +11 -15
  43. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -0
  44. package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
  45. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  46. package/dist/cjs/operation-node/merge-query-node.d.ts +2 -0
  47. package/dist/cjs/operation-node/operation-node-transformer.d.ts +106 -97
  48. package/dist/cjs/operation-node/operation-node-transformer.js +352 -312
  49. package/dist/cjs/operation-node/operation-node-visitor.d.ts +9 -1
  50. package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
  51. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  52. package/dist/cjs/operation-node/or-action-node.d.ts +12 -0
  53. package/dist/cjs/operation-node/or-action-node.js +18 -0
  54. package/dist/cjs/operation-node/order-by-item-node.d.ts +5 -0
  55. package/dist/cjs/operation-node/order-by-item-node.js +6 -0
  56. package/dist/cjs/operation-node/primary-key-constraint-node.d.ts +29 -0
  57. package/dist/cjs/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  58. package/dist/cjs/operation-node/query-node.d.ts +7 -0
  59. package/dist/cjs/operation-node/query-node.js +15 -0
  60. package/dist/cjs/operation-node/refresh-materialized-view-node.d.ts +17 -0
  61. package/dist/cjs/operation-node/refresh-materialized-view-node.js +25 -0
  62. package/dist/cjs/operation-node/rename-constraint-node.d.ts +14 -0
  63. package/dist/cjs/operation-node/rename-constraint-node.js +20 -0
  64. package/dist/cjs/operation-node/select-query-node.d.ts +8 -2
  65. package/dist/cjs/operation-node/select-query-node.js +11 -15
  66. package/dist/cjs/operation-node/unique-constraint-node.d.ts +2 -0
  67. package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
  68. package/dist/cjs/operation-node/update-query-node.js +5 -2
  69. package/dist/cjs/parser/collate-parser.d.ts +1 -0
  70. package/dist/cjs/parser/collate-parser.js +2 -0
  71. package/dist/cjs/parser/delete-from-parser.d.ts +5 -0
  72. package/dist/cjs/parser/delete-from-parser.js +2 -0
  73. package/dist/cjs/parser/join-parser.d.ts +1 -1
  74. package/dist/cjs/parser/join-parser.js +7 -1
  75. package/dist/cjs/parser/merge-into-parser.d.ts +5 -0
  76. package/dist/cjs/parser/merge-into-parser.js +2 -0
  77. package/dist/cjs/parser/order-by-parser.d.ts +18 -5
  78. package/dist/cjs/parser/order-by-parser.js +24 -14
  79. package/dist/cjs/parser/savepoint-parser.d.ts +4 -0
  80. package/dist/cjs/parser/savepoint-parser.js +11 -0
  81. package/dist/cjs/parser/select-from-parser.d.ts +4 -0
  82. package/dist/cjs/parser/select-from-parser.js +2 -0
  83. package/dist/cjs/parser/table-parser.d.ts +2 -5
  84. package/dist/cjs/parser/update-parser.d.ts +5 -0
  85. package/dist/cjs/parser/update-parser.js +2 -0
  86. package/dist/cjs/parser/update-set-parser.d.ts +7 -4
  87. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
  88. package/dist/cjs/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  89. package/dist/cjs/plugin/camel-case/camel-case-transformer.js +2 -2
  90. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  91. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  92. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  93. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  94. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +162 -0
  95. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  96. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +29 -0
  97. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  98. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.js +66 -0
  99. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.js +1 -1
  100. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  101. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.js +6 -4
  102. package/dist/cjs/plugin/with-schema/with-schema-plugin.js +1 -1
  103. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +6 -5
  104. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +29 -24
  105. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +83 -5
  106. package/dist/cjs/query-builder/aggregate-function-builder.js +15 -27
  107. package/dist/cjs/query-builder/cte-builder.js +0 -2
  108. package/dist/cjs/query-builder/delete-query-builder.d.ts +36 -47
  109. package/dist/cjs/query-builder/delete-query-builder.js +12 -78
  110. package/dist/cjs/query-builder/function-module.d.ts +31 -4
  111. package/dist/cjs/query-builder/insert-query-builder.d.ts +161 -6
  112. package/dist/cjs/query-builder/insert-query-builder.js +197 -10
  113. package/dist/cjs/query-builder/join-builder.js +0 -2
  114. package/dist/cjs/query-builder/merge-query-builder.d.ts +145 -3
  115. package/dist/cjs/query-builder/merge-query-builder.js +28 -7
  116. package/dist/cjs/query-builder/on-conflict-builder.js +0 -4
  117. package/dist/cjs/query-builder/order-by-interface.d.ts +176 -0
  118. package/dist/cjs/query-builder/order-by-interface.js +2 -0
  119. package/dist/cjs/query-builder/order-by-item-builder.d.ts +43 -0
  120. package/dist/cjs/query-builder/order-by-item-builder.js +75 -0
  121. package/dist/cjs/query-builder/over-builder.d.ts +43 -6
  122. package/dist/cjs/query-builder/over-builder.js +8 -25
  123. package/dist/cjs/query-builder/returning-interface.d.ts +20 -3
  124. package/dist/cjs/query-builder/select-query-builder.d.ts +279 -98
  125. package/dist/cjs/query-builder/select-query-builder.js +26 -26
  126. package/dist/cjs/query-builder/update-query-builder.d.ts +88 -9
  127. package/dist/cjs/query-builder/update-query-builder.js +17 -15
  128. package/dist/cjs/query-compiler/compiled-query.d.ts +2 -0
  129. package/dist/cjs/query-compiler/compiled-query.js +2 -0
  130. package/dist/cjs/query-compiler/default-query-compiler.d.ts +17 -2
  131. package/dist/cjs/query-compiler/default-query-compiler.js +97 -2
  132. package/dist/cjs/query-compiler/query-compiler.d.ts +4 -2
  133. package/dist/cjs/query-creator.d.ts +23 -25
  134. package/dist/cjs/query-creator.js +280 -8
  135. package/dist/cjs/query-executor/default-query-executor.d.ts +2 -1
  136. package/dist/cjs/query-executor/default-query-executor.js +2 -2
  137. package/dist/cjs/query-executor/query-executor-base.js +7 -25
  138. package/dist/cjs/raw-builder/raw-builder.js +0 -3
  139. package/dist/cjs/raw-builder/sql.d.ts +3 -3
  140. package/dist/cjs/raw-builder/sql.js +1 -1
  141. package/dist/cjs/schema/alter-column-builder.js +0 -3
  142. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  143. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  144. package/dist/cjs/schema/alter-table-add-index-builder.js +0 -2
  145. package/dist/cjs/schema/alter-table-builder.d.ts +7 -3
  146. package/dist/cjs/schema/alter-table-builder.js +21 -10
  147. package/dist/cjs/schema/alter-table-drop-constraint-builder.js +0 -2
  148. package/dist/cjs/schema/alter-table-executor.js +0 -2
  149. package/dist/cjs/schema/check-constraint-builder.d.ts +13 -0
  150. package/dist/cjs/schema/check-constraint-builder.js +20 -0
  151. package/dist/cjs/schema/column-definition-builder.js +0 -2
  152. package/dist/cjs/schema/create-index-builder.js +1 -3
  153. package/dist/cjs/schema/create-schema-builder.js +0 -2
  154. package/dist/cjs/schema/create-table-builder.d.ts +5 -4
  155. package/dist/cjs/schema/create-table-builder.js +9 -7
  156. package/dist/cjs/schema/create-type-builder.d.ts +1 -1
  157. package/dist/cjs/schema/create-type-builder.js +0 -2
  158. package/dist/cjs/schema/create-view-builder.js +0 -2
  159. package/dist/cjs/schema/drop-index-builder.js +0 -2
  160. package/dist/cjs/schema/drop-schema-builder.js +0 -2
  161. package/dist/cjs/schema/drop-table-builder.js +0 -2
  162. package/dist/cjs/schema/drop-type-builder.js +0 -2
  163. package/dist/cjs/schema/drop-view-builder.js +0 -2
  164. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +9 -0
  165. package/dist/cjs/schema/foreign-key-constraint-builder.js +16 -2
  166. package/dist/cjs/schema/primary-key-constraint-builder.d.ts +17 -0
  167. package/dist/cjs/schema/primary-key-constraint-builder.js +37 -0
  168. package/dist/cjs/schema/refresh-materialized-view-builder.d.ts +47 -0
  169. package/dist/cjs/schema/refresh-materialized-view-builder.js +75 -0
  170. package/dist/cjs/schema/schema.d.ts +14 -0
  171. package/dist/cjs/schema/schema.js +21 -0
  172. package/dist/cjs/schema/unique-constraint-builder.d.ts +10 -1
  173. package/dist/cjs/schema/unique-constraint-builder.js +26 -5
  174. package/dist/cjs/util/infer-result.d.ts +1 -1
  175. package/dist/cjs/util/log.d.ts +1 -0
  176. package/dist/cjs/util/log.js +3 -2
  177. package/dist/cjs/util/provide-controlled-connection.d.ts +7 -0
  178. package/dist/cjs/util/provide-controlled-connection.js +24 -0
  179. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  180. package/dist/esm/dialect/mssql/mssql-driver.d.ts +6 -3
  181. package/dist/esm/dialect/mssql/mssql-driver.js +33 -19
  182. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  183. package/dist/esm/dialect/mssql/mssql-query-compiler.js +11 -0
  184. package/dist/esm/dialect/mysql/mysql-driver.d.ts +4 -0
  185. package/dist/esm/dialect/mysql/mysql-driver.js +27 -12
  186. package/dist/esm/dialect/postgres/postgres-driver.d.ts +4 -0
  187. package/dist/esm/dialect/postgres/postgres-driver.js +28 -18
  188. package/dist/esm/dialect/postgres/postgres-introspector.js +7 -17
  189. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +4 -0
  190. package/dist/esm/dialect/sqlite/sqlite-driver.js +19 -13
  191. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  192. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +4 -0
  193. package/dist/esm/driver/database-connection.d.ts +0 -4
  194. package/dist/esm/driver/driver.d.ts +17 -0
  195. package/dist/esm/driver/driver.js +11 -0
  196. package/dist/esm/driver/dummy-driver.d.ts +3 -0
  197. package/dist/esm/driver/dummy-driver.js +9 -0
  198. package/dist/esm/driver/runtime-driver.d.ts +4 -0
  199. package/dist/esm/driver/runtime-driver.js +43 -3
  200. package/dist/esm/expression/expression-builder.d.ts +7 -10
  201. package/dist/esm/helpers/postgres.d.ts +48 -0
  202. package/dist/esm/helpers/postgres.js +49 -0
  203. package/dist/esm/index.d.ts +13 -2
  204. package/dist/esm/index.js +11 -1
  205. package/dist/esm/kysely.d.ts +339 -2
  206. package/dist/esm/kysely.js +461 -10
  207. package/dist/esm/migration/migrator.d.ts +8 -0
  208. package/dist/esm/migration/migrator.js +1 -1
  209. package/dist/esm/operation-node/aggregate-function-node.d.ts +2 -1
  210. package/dist/esm/operation-node/aggregate-function-node.js +4 -3
  211. package/dist/esm/operation-node/alter-table-node.d.ts +3 -1
  212. package/dist/esm/operation-node/collate-node.d.ts +13 -0
  213. package/dist/esm/operation-node/collate-node.js +17 -0
  214. package/dist/esm/operation-node/constraint-node.d.ts +1 -1
  215. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  216. package/dist/esm/operation-node/create-type-node.js +1 -1
  217. package/dist/esm/operation-node/delete-query-node.d.ts +8 -2
  218. package/dist/esm/operation-node/delete-query-node.js +11 -15
  219. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -0
  220. package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
  221. package/dist/esm/operation-node/join-node.d.ts +1 -1
  222. package/dist/esm/operation-node/merge-query-node.d.ts +2 -0
  223. package/dist/esm/operation-node/operation-node-transformer.d.ts +106 -97
  224. package/dist/esm/operation-node/operation-node-transformer.js +352 -312
  225. package/dist/esm/operation-node/operation-node-visitor.d.ts +9 -1
  226. package/dist/esm/operation-node/operation-node-visitor.js +4 -0
  227. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  228. package/dist/esm/operation-node/or-action-node.d.ts +12 -0
  229. package/dist/esm/operation-node/or-action-node.js +16 -0
  230. package/dist/esm/operation-node/order-by-item-node.d.ts +5 -0
  231. package/dist/esm/operation-node/order-by-item-node.js +6 -0
  232. package/dist/esm/operation-node/primary-key-constraint-node.d.ts +29 -0
  233. package/dist/esm/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  234. package/dist/esm/operation-node/query-node.d.ts +7 -0
  235. package/dist/esm/operation-node/query-node.js +15 -0
  236. package/dist/esm/operation-node/refresh-materialized-view-node.d.ts +17 -0
  237. package/dist/esm/operation-node/refresh-materialized-view-node.js +23 -0
  238. package/dist/esm/operation-node/rename-constraint-node.d.ts +14 -0
  239. package/dist/esm/operation-node/rename-constraint-node.js +18 -0
  240. package/dist/esm/operation-node/select-query-node.d.ts +8 -2
  241. package/dist/esm/operation-node/select-query-node.js +11 -15
  242. package/dist/esm/operation-node/unique-constraint-node.d.ts +2 -0
  243. package/dist/esm/operation-node/update-query-node.d.ts +3 -4
  244. package/dist/esm/operation-node/update-query-node.js +5 -2
  245. package/dist/esm/parser/collate-parser.d.ts +1 -0
  246. package/dist/esm/parser/collate-parser.js +2 -0
  247. package/dist/esm/parser/delete-from-parser.d.ts +5 -0
  248. package/dist/esm/parser/delete-from-parser.js +2 -0
  249. package/dist/esm/parser/join-parser.d.ts +1 -1
  250. package/dist/esm/parser/join-parser.js +7 -1
  251. package/dist/esm/parser/merge-into-parser.d.ts +5 -0
  252. package/dist/esm/parser/merge-into-parser.js +2 -0
  253. package/dist/esm/parser/order-by-parser.d.ts +18 -5
  254. package/dist/esm/parser/order-by-parser.js +27 -17
  255. package/dist/esm/parser/savepoint-parser.d.ts +4 -0
  256. package/dist/esm/parser/savepoint-parser.js +9 -0
  257. package/dist/esm/parser/select-from-parser.d.ts +4 -0
  258. package/dist/esm/parser/select-from-parser.js +2 -0
  259. package/dist/esm/parser/table-parser.d.ts +2 -5
  260. package/dist/esm/parser/update-parser.d.ts +5 -0
  261. package/dist/esm/parser/update-parser.js +2 -0
  262. package/dist/esm/parser/update-set-parser.d.ts +7 -4
  263. package/dist/esm/plugin/camel-case/camel-case-plugin.js +1 -1
  264. package/dist/esm/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  265. package/dist/esm/plugin/camel-case/camel-case-transformer.js +2 -2
  266. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  267. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  268. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  269. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  270. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +159 -0
  271. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  272. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +26 -0
  273. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  274. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.js +63 -0
  275. package/dist/esm/plugin/immediate-value/immediate-value-plugin.js +1 -1
  276. package/dist/esm/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  277. package/dist/esm/plugin/immediate-value/immediate-value-transformer.js +6 -4
  278. package/dist/esm/plugin/with-schema/with-schema-plugin.js +1 -1
  279. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +6 -5
  280. package/dist/esm/plugin/with-schema/with-schema-transformer.js +29 -24
  281. package/dist/esm/query-builder/aggregate-function-builder.d.ts +83 -5
  282. package/dist/esm/query-builder/aggregate-function-builder.js +15 -27
  283. package/dist/esm/query-builder/cte-builder.js +0 -2
  284. package/dist/esm/query-builder/delete-query-builder.d.ts +36 -47
  285. package/dist/esm/query-builder/delete-query-builder.js +12 -78
  286. package/dist/esm/query-builder/function-module.d.ts +31 -4
  287. package/dist/esm/query-builder/insert-query-builder.d.ts +161 -6
  288. package/dist/esm/query-builder/insert-query-builder.js +197 -10
  289. package/dist/esm/query-builder/join-builder.js +0 -2
  290. package/dist/esm/query-builder/merge-query-builder.d.ts +145 -3
  291. package/dist/esm/query-builder/merge-query-builder.js +29 -8
  292. package/dist/esm/query-builder/on-conflict-builder.js +0 -4
  293. package/dist/esm/query-builder/order-by-interface.d.ts +176 -0
  294. package/dist/esm/query-builder/order-by-interface.js +2 -0
  295. package/dist/esm/query-builder/order-by-item-builder.d.ts +43 -0
  296. package/dist/esm/query-builder/order-by-item-builder.js +72 -0
  297. package/dist/esm/query-builder/over-builder.d.ts +43 -6
  298. package/dist/esm/query-builder/over-builder.js +8 -25
  299. package/dist/esm/query-builder/returning-interface.d.ts +20 -3
  300. package/dist/esm/query-builder/select-query-builder.d.ts +279 -98
  301. package/dist/esm/query-builder/select-query-builder.js +26 -26
  302. package/dist/esm/query-builder/update-query-builder.d.ts +88 -9
  303. package/dist/esm/query-builder/update-query-builder.js +17 -15
  304. package/dist/esm/query-compiler/compiled-query.d.ts +2 -0
  305. package/dist/esm/query-compiler/compiled-query.js +2 -0
  306. package/dist/esm/query-compiler/default-query-compiler.d.ts +17 -2
  307. package/dist/esm/query-compiler/default-query-compiler.js +97 -2
  308. package/dist/esm/query-compiler/query-compiler.d.ts +4 -2
  309. package/dist/esm/query-creator.d.ts +23 -25
  310. package/dist/esm/query-creator.js +281 -9
  311. package/dist/esm/query-executor/default-query-executor.d.ts +2 -1
  312. package/dist/esm/query-executor/default-query-executor.js +2 -2
  313. package/dist/esm/query-executor/query-executor-base.js +7 -25
  314. package/dist/esm/raw-builder/raw-builder.js +0 -3
  315. package/dist/esm/raw-builder/sql.d.ts +3 -3
  316. package/dist/esm/raw-builder/sql.js +1 -1
  317. package/dist/esm/schema/alter-column-builder.js +0 -3
  318. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  319. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  320. package/dist/esm/schema/alter-table-add-index-builder.js +0 -2
  321. package/dist/esm/schema/alter-table-builder.d.ts +7 -3
  322. package/dist/esm/schema/alter-table-builder.js +22 -11
  323. package/dist/esm/schema/alter-table-drop-constraint-builder.js +0 -2
  324. package/dist/esm/schema/alter-table-executor.js +0 -2
  325. package/dist/esm/schema/check-constraint-builder.d.ts +13 -0
  326. package/dist/esm/schema/check-constraint-builder.js +17 -0
  327. package/dist/esm/schema/column-definition-builder.js +0 -2
  328. package/dist/esm/schema/create-index-builder.js +1 -3
  329. package/dist/esm/schema/create-schema-builder.js +0 -2
  330. package/dist/esm/schema/create-table-builder.d.ts +5 -4
  331. package/dist/esm/schema/create-table-builder.js +10 -8
  332. package/dist/esm/schema/create-type-builder.d.ts +1 -1
  333. package/dist/esm/schema/create-type-builder.js +0 -2
  334. package/dist/esm/schema/create-view-builder.js +0 -2
  335. package/dist/esm/schema/drop-index-builder.js +0 -2
  336. package/dist/esm/schema/drop-schema-builder.js +0 -2
  337. package/dist/esm/schema/drop-table-builder.js +0 -2
  338. package/dist/esm/schema/drop-type-builder.js +0 -2
  339. package/dist/esm/schema/drop-view-builder.js +0 -2
  340. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +9 -0
  341. package/dist/esm/schema/foreign-key-constraint-builder.js +16 -2
  342. package/dist/esm/schema/primary-key-constraint-builder.d.ts +17 -0
  343. package/dist/esm/schema/primary-key-constraint-builder.js +34 -0
  344. package/dist/esm/schema/refresh-materialized-view-builder.d.ts +47 -0
  345. package/dist/esm/schema/refresh-materialized-view-builder.js +72 -0
  346. package/dist/esm/schema/schema.d.ts +14 -0
  347. package/dist/esm/schema/schema.js +21 -0
  348. package/dist/esm/schema/unique-constraint-builder.d.ts +10 -1
  349. package/dist/esm/schema/unique-constraint-builder.js +26 -5
  350. package/dist/esm/util/infer-result.d.ts +1 -1
  351. package/dist/esm/util/log.d.ts +1 -0
  352. package/dist/esm/util/log.js +3 -2
  353. package/dist/esm/util/provide-controlled-connection.d.ts +7 -0
  354. package/dist/esm/util/provide-controlled-connection.js +22 -0
  355. package/outdated-typescript.d.ts +5 -0
  356. package/package.json +16 -2
  357. package/CONTRIBUTING.md +0 -168
  358. package/dist/cjs/operation-node/primary-constraint-node.d.ts +0 -15
  359. package/dist/cjs/util/prevent-await.d.ts +0 -1
  360. package/dist/cjs/util/prevent-await.js +0 -13
  361. package/dist/esm/operation-node/primary-constraint-node.d.ts +0 -15
  362. package/dist/esm/util/prevent-await.d.ts +0 -1
  363. package/dist/esm/util/prevent-await.js +0 -11
@@ -3,7 +3,6 @@ import { parseJoin, } from '../parser/join-parser.js';
3
3
  import { parseTableExpressionOrList, } from '../parser/table-parser.js';
4
4
  import { parseSelectArg, parseSelectAll, } from '../parser/select-parser.js';
5
5
  import { QueryNode } from '../operation-node/query-node.js';
6
- import { preventAwait } from '../util/prevent-await.js';
7
6
  import { freeze } from '../util/object-utils.js';
8
7
  import { isNoResultErrorConstructor, NoResultError, } from './no-result-error.js';
9
8
  import { DeleteResult } from './delete-result.js';
@@ -88,27 +87,21 @@ export class DeleteQueryBuilder {
88
87
  });
89
88
  }
90
89
  innerJoin(...args) {
91
- return new DeleteQueryBuilder({
92
- ...this.#props,
93
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('InnerJoin', args)),
94
- });
90
+ return this.#join('InnerJoin', args);
95
91
  }
96
92
  leftJoin(...args) {
97
- return new DeleteQueryBuilder({
98
- ...this.#props,
99
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LeftJoin', args)),
100
- });
93
+ return this.#join('LeftJoin', args);
101
94
  }
102
95
  rightJoin(...args) {
103
- return new DeleteQueryBuilder({
104
- ...this.#props,
105
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('RightJoin', args)),
106
- });
96
+ return this.#join('RightJoin', args);
107
97
  }
108
98
  fullJoin(...args) {
99
+ return this.#join('FullJoin', args);
100
+ }
101
+ #join(joinType, args) {
109
102
  return new DeleteQueryBuilder({
110
103
  ...this.#props,
111
- queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
104
+ queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(joinType, args)),
112
105
  });
113
106
  }
114
107
  returning(selection) {
@@ -186,70 +179,16 @@ export class DeleteQueryBuilder {
186
179
  queryNode: DeleteQueryNode.cloneWithoutLimit(this.#props.queryNode),
187
180
  });
188
181
  }
189
- /**
190
- * Clears the `order by` clause from the query.
191
- *
192
- * ### Examples
193
- *
194
- * ```ts
195
- * await db.deleteFrom('pet')
196
- * .returningAll()
197
- * .where('name', '=', 'Max')
198
- * .orderBy('id')
199
- * .clearOrderBy()
200
- * .execute()
201
- * ```
202
- *
203
- * The generated SQL(PostgreSQL):
204
- *
205
- * ```sql
206
- * delete from "pet" where "name" = "Max" returning *
207
- * ```
208
- */
209
- clearOrderBy() {
182
+ orderBy(...args) {
210
183
  return new DeleteQueryBuilder({
211
184
  ...this.#props,
212
- queryNode: DeleteQueryNode.cloneWithoutOrderBy(this.#props.queryNode),
185
+ queryNode: QueryNode.cloneWithOrderByItems(this.#props.queryNode, parseOrderBy(args)),
213
186
  });
214
187
  }
215
- /**
216
- * Adds an `order by` clause to the query.
217
- *
218
- * `orderBy` calls are additive. To order by multiple columns, call `orderBy`
219
- * multiple times.
220
- *
221
- * The first argument is the expression to order by and the second is the
222
- * order (`asc` or `desc`).
223
- *
224
- * An `order by` clause in a delete query is only supported by some dialects
225
- * like MySQL.
226
- *
227
- * See {@link SelectQueryBuilder.orderBy} for more examples.
228
- *
229
- * ### Examples
230
- *
231
- * Delete 5 oldest items in a table:
232
- *
233
- * ```ts
234
- * await db
235
- * .deleteFrom('pet')
236
- * .orderBy('created_at')
237
- * .limit(5)
238
- * .execute()
239
- * ```
240
- *
241
- * The generated SQL (MySQL):
242
- *
243
- * ```sql
244
- * delete from `pet`
245
- * order by `created_at`
246
- * limit ?
247
- * ```
248
- */
249
- orderBy(orderBy, direction) {
188
+ clearOrderBy() {
250
189
  return new DeleteQueryBuilder({
251
190
  ...this.#props,
252
- queryNode: DeleteQueryNode.cloneWithOrderByItems(this.#props.queryNode, parseOrderBy([orderBy, direction])),
191
+ queryNode: QueryNode.cloneWithoutOrderBy(this.#props.queryNode),
253
192
  });
254
193
  }
255
194
  /**
@@ -517,11 +456,7 @@ export class DeleteQueryBuilder {
517
456
  (query.output && adapter.supportsOutput)) {
518
457
  return result.rows;
519
458
  }
520
- return [
521
- new DeleteResult(
522
- // TODO: remove numUpdatedOrDeletedRows.
523
- result.numAffectedRows ?? result.numUpdatedOrDeletedRows ?? BigInt(0)),
524
- ];
459
+ return [new DeleteResult(result.numAffectedRows ?? BigInt(0))];
525
460
  }
526
461
  /**
527
462
  * Executes the query and returns the first result or undefined if
@@ -564,4 +499,3 @@ export class DeleteQueryBuilder {
564
499
  return await builder.execute();
565
500
  }
566
501
  }
567
- preventAwait(DeleteQueryBuilder, "don't await DeleteQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");
@@ -393,7 +393,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
393
393
  * .execute()
394
394
  * ```
395
395
  */
396
- max<O extends number | string | bigint | null = never, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, IsNever<O> extends true ? ExtractTypeFromReferenceExpression<DB, TB, RE, number | string | bigint> : O>;
396
+ max<O extends number | string | Date | bigint | null = never, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, IsNever<O> extends true ? ExtractTypeFromReferenceExpression<DB, TB, RE, number | string | Date | bigint> : O>;
397
397
  /**
398
398
  * Calls the `min` function for the column or expression given as the argument.
399
399
  *
@@ -432,7 +432,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
432
432
  * .execute()
433
433
  * ```
434
434
  */
435
- min<O extends number | string | bigint | null = never, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, IsNever<O> extends true ? ExtractTypeFromReferenceExpression<DB, TB, RE, number | string | bigint> : O>;
435
+ min<O extends number | string | Date | bigint | null = never, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, IsNever<O> extends true ? ExtractTypeFromReferenceExpression<DB, TB, RE, number | string | Date | bigint> : O>;
436
436
  /**
437
437
  * Calls the `sum` function for the column or expression given as the argument.
438
438
  *
@@ -518,9 +518,13 @@ export interface FunctionModule<DB, TB extends keyof DB> {
518
518
  any<T>(subquery: SelectQueryBuilderExpression<Record<string, T>>): ExpressionWrapper<DB, TB, T>;
519
519
  any<T>(expr: Expression<ReadonlyArray<T>>): ExpressionWrapper<DB, TB, T>;
520
520
  /**
521
- * Creates a json_agg function call.
521
+ * Creates a `json_agg` function call.
522
522
  *
523
- * This function is only available on PostgreSQL.
523
+ * This is only supported by some dialects like PostgreSQL.
524
+ *
525
+ * ### Examples
526
+ *
527
+ * You can use it on table expressions:
524
528
  *
525
529
  * ```ts
526
530
  * await db.selectFrom('person')
@@ -538,8 +542,31 @@ export interface FunctionModule<DB, TB extends keyof DB> {
538
542
  * inner join "pet" on "pet"."owner_id" = "person"."id"
539
543
  * group by "person"."first_name"
540
544
  * ```
545
+ *
546
+ * or on columns:
547
+ *
548
+ * ```ts
549
+ * await db.selectFrom('person')
550
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
551
+ * .select((eb) => [
552
+ * 'first_name',
553
+ * eb.fn.jsonAgg('pet.name').as('pet_names'),
554
+ * ])
555
+ * .groupBy('person.first_name')
556
+ * .execute()
557
+ * ```
558
+ *
559
+ * The generated SQL (PostgreSQL):
560
+ *
561
+ * ```sql
562
+ * select "first_name", json_agg("pet"."name") AS "pet_names"
563
+ * from "person"
564
+ * inner join "pet" ON "pet"."owner_id" = "person"."id"
565
+ * group by "person"."first_name"
566
+ * ```
541
567
  */
542
568
  jsonAgg<T extends (TB & string) | Expression<unknown>>(table: T): AggregateFunctionBuilder<DB, TB, T extends TB ? Selectable<DB[T]>[] : T extends Expression<infer O> ? O[] : never>;
569
+ jsonAgg<RE extends StringReference<DB, TB>>(column: RE): AggregateFunctionBuilder<DB, TB, ExtractTypeFromStringReference<DB, TB, RE>[] | null>;
543
570
  /**
544
571
  * Creates a to_json function call.
545
572
  *
@@ -307,15 +307,18 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
307
307
  /**
308
308
  * Changes an `insert into` query to an `insert ignore into` query.
309
309
  *
310
+ * This is only supported by some dialects like MySQL.
311
+ *
312
+ * To avoid a footgun, when invoked with the SQLite dialect, this method will
313
+ * be handled like {@link orIgnore}. See also, {@link orAbort}, {@link orFail},
314
+ * {@link orReplace}, and {@link orRollback}.
315
+ *
310
316
  * If you use the ignore modifier, ignorable errors that occur while executing the
311
317
  * insert statement are ignored. For example, without ignore, a row that duplicates
312
318
  * an existing unique index or primary key value in the table causes a duplicate-key
313
319
  * error and the statement is aborted. With ignore, the row is discarded and no error
314
320
  * occurs.
315
321
  *
316
- * This is only supported on some dialects like MySQL. On most dialects you should
317
- * use the {@link onConflict} method.
318
- *
319
322
  * ### Examples
320
323
  *
321
324
  * ```ts
@@ -332,10 +335,162 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
332
335
  * The generated SQL (MySQL):
333
336
  *
334
337
  * ```sql
335
- * insert ignore into `person` ("first_name", "last_name", "gender") values (?, ?, ?)
338
+ * insert ignore into `person` (`first_name`, `last_name`, `gender`) values (?, ?, ?)
339
+ * ```
340
+ *
341
+ * The generated SQL (SQLite):
342
+ *
343
+ * ```sql
344
+ * insert or ignore into "person" ("first_name", "last_name", "gender") values (?, ?, ?)
336
345
  * ```
337
346
  */
338
347
  ignore(): InsertQueryBuilder<DB, TB, O>;
348
+ /**
349
+ * Changes an `insert into` query to an `insert or ignore into` query.
350
+ *
351
+ * This is only supported by some dialects like SQLite.
352
+ *
353
+ * To avoid a footgun, when invoked with the MySQL dialect, this method will
354
+ * be handled like {@link ignore}.
355
+ *
356
+ * See also, {@link orAbort}, {@link orFail}, {@link orReplace}, and {@link orRollback}.
357
+ *
358
+ * ### Examples
359
+ *
360
+ * ```ts
361
+ * await db.insertInto('person')
362
+ * .orIgnore()
363
+ * .values({
364
+ * first_name: 'John',
365
+ * last_name: 'Doe',
366
+ * gender: 'female',
367
+ * })
368
+ * .execute()
369
+ * ```
370
+ *
371
+ * The generated SQL (SQLite):
372
+ *
373
+ * ```sql
374
+ * insert or ignore into "person" ("first_name", "last_name", "gender") values (?, ?, ?)
375
+ * ```
376
+ *
377
+ * The generated SQL (MySQL):
378
+ *
379
+ * ```sql
380
+ * insert ignore into `person` (`first_name`, `last_name`, `gender`) values (?, ?, ?)
381
+ * ```
382
+ */
383
+ orIgnore(): InsertQueryBuilder<DB, TB, O>;
384
+ /**
385
+ * Changes an `insert into` query to an `insert or abort into` query.
386
+ *
387
+ * This is only supported by some dialects like SQLite.
388
+ *
389
+ * See also, {@link orIgnore}, {@link orFail}, {@link orReplace}, and {@link orRollback}.
390
+ *
391
+ * ### Examples
392
+ *
393
+ * ```ts
394
+ * await db.insertInto('person')
395
+ * .orAbort()
396
+ * .values({
397
+ * first_name: 'John',
398
+ * last_name: 'Doe',
399
+ * gender: 'female',
400
+ * })
401
+ * .execute()
402
+ * ```
403
+ *
404
+ * The generated SQL (SQLite):
405
+ *
406
+ * ```sql
407
+ * insert or abort into "person" ("first_name", "last_name", "gender") values (?, ?, ?)
408
+ * ```
409
+ */
410
+ orAbort(): InsertQueryBuilder<DB, TB, O>;
411
+ /**
412
+ * Changes an `insert into` query to an `insert or fail into` query.
413
+ *
414
+ * This is only supported by some dialects like SQLite.
415
+ *
416
+ * See also, {@link orIgnore}, {@link orAbort}, {@link orReplace}, and {@link orRollback}.
417
+ *
418
+ * ### Examples
419
+ *
420
+ * ```ts
421
+ * await db.insertInto('person')
422
+ * .orFail()
423
+ * .values({
424
+ * first_name: 'John',
425
+ * last_name: 'Doe',
426
+ * gender: 'female',
427
+ * })
428
+ * .execute()
429
+ * ```
430
+ *
431
+ * The generated SQL (SQLite):
432
+ *
433
+ * ```sql
434
+ * insert or fail into "person" ("first_name", "last_name", "gender") values (?, ?, ?)
435
+ * ```
436
+ */
437
+ orFail(): InsertQueryBuilder<DB, TB, O>;
438
+ /**
439
+ * Changes an `insert into` query to an `insert or replace into` query.
440
+ *
441
+ * This is only supported by some dialects like SQLite.
442
+ *
443
+ * You can also use {@link Kysely.replaceInto} to achieve the same result.
444
+ *
445
+ * See also, {@link orIgnore}, {@link orAbort}, {@link orFail}, and {@link orRollback}.
446
+ *
447
+ * ### Examples
448
+ *
449
+ * ```ts
450
+ * await db.insertInto('person')
451
+ * .orReplace()
452
+ * .values({
453
+ * first_name: 'John',
454
+ * last_name: 'Doe',
455
+ * gender: 'female',
456
+ * })
457
+ * .execute()
458
+ * ```
459
+ *
460
+ * The generated SQL (SQLite):
461
+ *
462
+ * ```sql
463
+ * insert or replace into "person" ("first_name", "last_name", "gender") values (?, ?, ?)
464
+ * ```
465
+ */
466
+ orReplace(): InsertQueryBuilder<DB, TB, O>;
467
+ /**
468
+ * Changes an `insert into` query to an `insert or rollback into` query.
469
+ *
470
+ * This is only supported by some dialects like SQLite.
471
+ *
472
+ * See also, {@link orIgnore}, {@link orAbort}, {@link orFail}, and {@link orReplace}.
473
+ *
474
+ * ### Examples
475
+ *
476
+ * ```ts
477
+ * await db.insertInto('person')
478
+ * .orRollback()
479
+ * .values({
480
+ * first_name: 'John',
481
+ * last_name: 'Doe',
482
+ * gender: 'female',
483
+ * })
484
+ * .execute()
485
+ * ```
486
+ *
487
+ * The generated SQL (SQLite):
488
+ *
489
+ * ```sql
490
+ * insert or rollback into "person" ("first_name", "last_name", "gender") values (?, ?, ?)
491
+ * ```
492
+ */
493
+ orRollback(): InsertQueryBuilder<DB, TB, O>;
339
494
  /**
340
495
  * Changes an `insert into` query to an `insert top into` query.
341
496
  *
@@ -595,7 +750,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
595
750
  * Allows you to return data from modified rows.
596
751
  *
597
752
  * On supported databases like PostgreSQL, this method can be chained to
598
- * `insert`, `update` and `delete` queries to return data.
753
+ * `insert`, `update`, `delete` and `merge` queries to return data.
599
754
  *
600
755
  * Note that on SQLite you need to give aliases for the expressions to avoid
601
756
  * [this bug](https://sqlite.org/forum/forumpost/033daf0b32) in SQLite.
@@ -654,7 +809,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
654
809
  returning<CB extends SelectCallback<DB, TB>>(callback: CB): InsertQueryBuilder<DB, TB, ReturningCallbackRow<DB, TB, O, CB>>;
655
810
  returning<SE extends SelectExpression<DB, TB>>(selection: SE): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
656
811
  /**
657
- * Adds a `returning *` to an insert/update/delete query on databases
812
+ * Adds a `returning *` to an insert/update/delete/merge query on databases
658
813
  * that support `returning` such as PostgreSQL.
659
814
  *
660
815
  * Also see the {@link returning} method.
@@ -4,7 +4,6 @@ import { parseInsertExpression, } from '../parser/insert-values-parser.js';
4
4
  import { InsertQueryNode } from '../operation-node/insert-query-node.js';
5
5
  import { QueryNode } from '../operation-node/query-node.js';
6
6
  import { parseUpdateObjectExpression, } from '../parser/update-set-parser.js';
7
- import { preventAwait } from '../util/prevent-await.js';
8
7
  import { freeze } from '../util/object-utils.js';
9
8
  import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
10
9
  import { InsertResult } from './insert-result.js';
@@ -14,6 +13,7 @@ import { ColumnNode } from '../operation-node/column-node.js';
14
13
  import { OnConflictBuilder, } from './on-conflict-builder.js';
15
14
  import { OnConflictNode } from '../operation-node/on-conflict-node.js';
16
15
  import { parseTop } from '../parser/top-parser.js';
16
+ import { OrActionNode } from '../operation-node/or-action-node.js';
17
17
  export class InsertQueryBuilder {
18
18
  #props;
19
19
  constructor(props) {
@@ -336,15 +336,18 @@ export class InsertQueryBuilder {
336
336
  /**
337
337
  * Changes an `insert into` query to an `insert ignore into` query.
338
338
  *
339
+ * This is only supported by some dialects like MySQL.
340
+ *
341
+ * To avoid a footgun, when invoked with the SQLite dialect, this method will
342
+ * be handled like {@link orIgnore}. See also, {@link orAbort}, {@link orFail},
343
+ * {@link orReplace}, and {@link orRollback}.
344
+ *
339
345
  * If you use the ignore modifier, ignorable errors that occur while executing the
340
346
  * insert statement are ignored. For example, without ignore, a row that duplicates
341
347
  * an existing unique index or primary key value in the table causes a duplicate-key
342
348
  * error and the statement is aborted. With ignore, the row is discarded and no error
343
349
  * occurs.
344
350
  *
345
- * This is only supported on some dialects like MySQL. On most dialects you should
346
- * use the {@link onConflict} method.
347
- *
348
351
  * ### Examples
349
352
  *
350
353
  * ```ts
@@ -361,14 +364,201 @@ export class InsertQueryBuilder {
361
364
  * The generated SQL (MySQL):
362
365
  *
363
366
  * ```sql
364
- * insert ignore into `person` ("first_name", "last_name", "gender") values (?, ?, ?)
367
+ * insert ignore into `person` (`first_name`, `last_name`, `gender`) values (?, ?, ?)
368
+ * ```
369
+ *
370
+ * The generated SQL (SQLite):
371
+ *
372
+ * ```sql
373
+ * insert or ignore into "person" ("first_name", "last_name", "gender") values (?, ?, ?)
365
374
  * ```
366
375
  */
367
376
  ignore() {
368
377
  return new InsertQueryBuilder({
369
378
  ...this.#props,
370
379
  queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
371
- ignore: true,
380
+ orAction: OrActionNode.create('ignore'),
381
+ }),
382
+ });
383
+ }
384
+ /**
385
+ * Changes an `insert into` query to an `insert or ignore into` query.
386
+ *
387
+ * This is only supported by some dialects like SQLite.
388
+ *
389
+ * To avoid a footgun, when invoked with the MySQL dialect, this method will
390
+ * be handled like {@link ignore}.
391
+ *
392
+ * See also, {@link orAbort}, {@link orFail}, {@link orReplace}, and {@link orRollback}.
393
+ *
394
+ * ### Examples
395
+ *
396
+ * ```ts
397
+ * await db.insertInto('person')
398
+ * .orIgnore()
399
+ * .values({
400
+ * first_name: 'John',
401
+ * last_name: 'Doe',
402
+ * gender: 'female',
403
+ * })
404
+ * .execute()
405
+ * ```
406
+ *
407
+ * The generated SQL (SQLite):
408
+ *
409
+ * ```sql
410
+ * insert or ignore into "person" ("first_name", "last_name", "gender") values (?, ?, ?)
411
+ * ```
412
+ *
413
+ * The generated SQL (MySQL):
414
+ *
415
+ * ```sql
416
+ * insert ignore into `person` (`first_name`, `last_name`, `gender`) values (?, ?, ?)
417
+ * ```
418
+ */
419
+ orIgnore() {
420
+ return new InsertQueryBuilder({
421
+ ...this.#props,
422
+ queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
423
+ orAction: OrActionNode.create('ignore'),
424
+ }),
425
+ });
426
+ }
427
+ /**
428
+ * Changes an `insert into` query to an `insert or abort into` query.
429
+ *
430
+ * This is only supported by some dialects like SQLite.
431
+ *
432
+ * See also, {@link orIgnore}, {@link orFail}, {@link orReplace}, and {@link orRollback}.
433
+ *
434
+ * ### Examples
435
+ *
436
+ * ```ts
437
+ * await db.insertInto('person')
438
+ * .orAbort()
439
+ * .values({
440
+ * first_name: 'John',
441
+ * last_name: 'Doe',
442
+ * gender: 'female',
443
+ * })
444
+ * .execute()
445
+ * ```
446
+ *
447
+ * The generated SQL (SQLite):
448
+ *
449
+ * ```sql
450
+ * insert or abort into "person" ("first_name", "last_name", "gender") values (?, ?, ?)
451
+ * ```
452
+ */
453
+ orAbort() {
454
+ return new InsertQueryBuilder({
455
+ ...this.#props,
456
+ queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
457
+ orAction: OrActionNode.create('abort'),
458
+ }),
459
+ });
460
+ }
461
+ /**
462
+ * Changes an `insert into` query to an `insert or fail into` query.
463
+ *
464
+ * This is only supported by some dialects like SQLite.
465
+ *
466
+ * See also, {@link orIgnore}, {@link orAbort}, {@link orReplace}, and {@link orRollback}.
467
+ *
468
+ * ### Examples
469
+ *
470
+ * ```ts
471
+ * await db.insertInto('person')
472
+ * .orFail()
473
+ * .values({
474
+ * first_name: 'John',
475
+ * last_name: 'Doe',
476
+ * gender: 'female',
477
+ * })
478
+ * .execute()
479
+ * ```
480
+ *
481
+ * The generated SQL (SQLite):
482
+ *
483
+ * ```sql
484
+ * insert or fail into "person" ("first_name", "last_name", "gender") values (?, ?, ?)
485
+ * ```
486
+ */
487
+ orFail() {
488
+ return new InsertQueryBuilder({
489
+ ...this.#props,
490
+ queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
491
+ orAction: OrActionNode.create('fail'),
492
+ }),
493
+ });
494
+ }
495
+ /**
496
+ * Changes an `insert into` query to an `insert or replace into` query.
497
+ *
498
+ * This is only supported by some dialects like SQLite.
499
+ *
500
+ * You can also use {@link Kysely.replaceInto} to achieve the same result.
501
+ *
502
+ * See also, {@link orIgnore}, {@link orAbort}, {@link orFail}, and {@link orRollback}.
503
+ *
504
+ * ### Examples
505
+ *
506
+ * ```ts
507
+ * await db.insertInto('person')
508
+ * .orReplace()
509
+ * .values({
510
+ * first_name: 'John',
511
+ * last_name: 'Doe',
512
+ * gender: 'female',
513
+ * })
514
+ * .execute()
515
+ * ```
516
+ *
517
+ * The generated SQL (SQLite):
518
+ *
519
+ * ```sql
520
+ * insert or replace into "person" ("first_name", "last_name", "gender") values (?, ?, ?)
521
+ * ```
522
+ */
523
+ orReplace() {
524
+ return new InsertQueryBuilder({
525
+ ...this.#props,
526
+ queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
527
+ orAction: OrActionNode.create('replace'),
528
+ }),
529
+ });
530
+ }
531
+ /**
532
+ * Changes an `insert into` query to an `insert or rollback into` query.
533
+ *
534
+ * This is only supported by some dialects like SQLite.
535
+ *
536
+ * See also, {@link orIgnore}, {@link orAbort}, {@link orFail}, and {@link orReplace}.
537
+ *
538
+ * ### Examples
539
+ *
540
+ * ```ts
541
+ * await db.insertInto('person')
542
+ * .orRollback()
543
+ * .values({
544
+ * first_name: 'John',
545
+ * last_name: 'Doe',
546
+ * gender: 'female',
547
+ * })
548
+ * .execute()
549
+ * ```
550
+ *
551
+ * The generated SQL (SQLite):
552
+ *
553
+ * ```sql
554
+ * insert or rollback into "person" ("first_name", "last_name", "gender") values (?, ?, ?)
555
+ * ```
556
+ */
557
+ orRollback() {
558
+ return new InsertQueryBuilder({
559
+ ...this.#props,
560
+ queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
561
+ orAction: OrActionNode.create('rollback'),
372
562
  }),
373
563
  });
374
564
  }
@@ -921,9 +1111,7 @@ export class InsertQueryBuilder {
921
1111
  return result.rows;
922
1112
  }
923
1113
  return [
924
- new InsertResult(result.insertId,
925
- // TODO: remove numUpdatedOrDeletedRows.
926
- result.numAffectedRows ?? result.numUpdatedOrDeletedRows),
1114
+ new InsertResult(result.insertId, result.numAffectedRows ?? BigInt(0)),
927
1115
  ];
928
1116
  }
929
1117
  /**
@@ -967,4 +1155,3 @@ export class InsertQueryBuilder {
967
1155
  return await builder.execute();
968
1156
  }
969
1157
  }
970
- preventAwait(InsertQueryBuilder, "don't await InsertQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");
@@ -3,7 +3,6 @@ import { JoinNode } from '../operation-node/join-node.js';
3
3
  import { RawNode } from '../operation-node/raw-node.js';
4
4
  import { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js';
5
5
  import { freeze } from '../util/object-utils.js';
6
- import { preventAwait } from '../util/prevent-await.js';
7
6
  export class JoinBuilder {
8
7
  #props;
9
8
  constructor(props) {
@@ -47,4 +46,3 @@ export class JoinBuilder {
47
46
  return this.#props.joinNode;
48
47
  }
49
48
  }
50
- preventAwait(JoinBuilder, "don't await JoinBuilder instances. They are never executed directly and are always just a part of a query.");