kysely 0.27.3 → 0.27.5

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 (301) hide show
  1. package/.renovaterc.json +3 -0
  2. package/CONTRIBUTING.md +2 -2
  3. package/README.md +7 -7
  4. package/deno.check.d.ts +86 -0
  5. package/deno.check.json +21 -0
  6. package/dist/cjs/dialect/dialect-adapter-base.d.ts +13 -3
  7. package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
  8. package/dist/cjs/dialect/dialect-adapter.d.ts +16 -2
  9. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +12 -7
  10. package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
  11. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +83 -55
  12. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
  13. package/dist/cjs/dialect/mssql/mssql-driver.js +114 -48
  14. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +11 -2
  15. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  16. package/dist/cjs/dialect/mysql/mysql-driver.js +3 -0
  17. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +11 -2
  18. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  19. package/dist/cjs/dialect/postgres/postgres-driver.js +3 -0
  20. package/dist/cjs/dialect/postgres/postgres-introspector.js +5 -1
  21. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  22. package/dist/cjs/driver/database-connection.d.ts +3 -1
  23. package/dist/cjs/driver/dummy-driver.d.ts +13 -12
  24. package/dist/cjs/driver/dummy-driver.js +13 -12
  25. package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
  26. package/dist/cjs/dynamic/dynamic.d.ts +7 -7
  27. package/dist/cjs/dynamic/dynamic.js +7 -7
  28. package/dist/cjs/expression/expression-builder.d.ts +153 -62
  29. package/dist/cjs/expression/expression-builder.js +2 -3
  30. package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
  31. package/dist/cjs/expression/expression.d.ts +40 -5
  32. package/dist/cjs/expression/expression.js +2 -3
  33. package/dist/cjs/helpers/mssql.d.ts +74 -14
  34. package/dist/cjs/helpers/mssql.js +77 -18
  35. package/dist/cjs/helpers/mysql.d.ts +17 -13
  36. package/dist/cjs/helpers/mysql.js +20 -17
  37. package/dist/cjs/helpers/postgres.d.ts +11 -8
  38. package/dist/cjs/helpers/postgres.js +14 -12
  39. package/dist/cjs/helpers/sqlite.d.ts +41 -16
  40. package/dist/cjs/helpers/sqlite.js +44 -20
  41. package/dist/cjs/index.d.ts +28 -21
  42. package/dist/cjs/index.js +28 -21
  43. package/dist/cjs/kysely.d.ts +100 -42
  44. package/dist/cjs/kysely.js +63 -39
  45. package/dist/cjs/migration/file-migration-provider.d.ts +2 -2
  46. package/dist/cjs/migration/file-migration-provider.js +2 -2
  47. package/dist/cjs/migration/migrator.d.ts +82 -14
  48. package/dist/cjs/migration/migrator.js +82 -14
  49. package/dist/cjs/operation-node/aggregate-function-node.d.ts +4 -0
  50. package/dist/cjs/operation-node/aggregate-function-node.js +9 -0
  51. package/dist/cjs/operation-node/alter-column-node.d.ts +1 -1
  52. package/dist/cjs/operation-node/case-node.d.ts +1 -1
  53. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  54. package/dist/cjs/operation-node/data-type-node.d.ts +2 -2
  55. package/dist/cjs/operation-node/data-type-node.js +17 -3
  56. package/dist/cjs/operation-node/delete-query-node.d.ts +3 -0
  57. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -4
  58. package/dist/cjs/operation-node/having-node.d.ts +1 -1
  59. package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
  60. package/dist/cjs/operation-node/merge-query-node.d.ts +3 -0
  61. package/dist/cjs/operation-node/on-node.d.ts +1 -1
  62. package/dist/cjs/operation-node/operation-node-source.js +1 -2
  63. package/dist/cjs/operation-node/operation-node-transformer.d.ts +11 -3
  64. package/dist/cjs/operation-node/operation-node-transformer.js +26 -3
  65. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  66. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  67. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  68. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  69. package/dist/cjs/operation-node/operator-node.js +8 -6
  70. package/dist/cjs/operation-node/output-node.d.ts +13 -0
  71. package/dist/cjs/operation-node/output-node.js +26 -0
  72. package/dist/cjs/operation-node/query-node.d.ts +15 -6
  73. package/dist/cjs/operation-node/query-node.js +17 -0
  74. package/dist/cjs/operation-node/select-query-node.d.ts +1 -1
  75. package/dist/cjs/operation-node/select-query-node.js +6 -8
  76. package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
  77. package/dist/cjs/operation-node/where-node.d.ts +1 -1
  78. package/dist/cjs/parser/binary-operation-parser.js +5 -6
  79. package/dist/cjs/parser/data-type-parser.js +1 -2
  80. package/dist/cjs/parser/default-value-parser.js +1 -2
  81. package/dist/cjs/parser/expression-parser.js +3 -4
  82. package/dist/cjs/parser/fetch-parser.js +1 -2
  83. package/dist/cjs/parser/group-by-parser.js +1 -2
  84. package/dist/cjs/parser/identifier-parser.js +1 -2
  85. package/dist/cjs/parser/insert-values-parser.js +1 -2
  86. package/dist/cjs/parser/join-parser.js +1 -2
  87. package/dist/cjs/parser/merge-parser.js +2 -3
  88. package/dist/cjs/parser/on-commit-action-parse.js +1 -2
  89. package/dist/cjs/parser/on-modify-action-parser.js +1 -2
  90. package/dist/cjs/parser/order-by-parser.js +3 -4
  91. package/dist/cjs/parser/parse-utils.js +4 -5
  92. package/dist/cjs/parser/partition-by-parser.js +1 -2
  93. package/dist/cjs/parser/reference-parser.js +8 -9
  94. package/dist/cjs/parser/returning-parser.d.ts +4 -3
  95. package/dist/cjs/parser/select-parser.js +2 -3
  96. package/dist/cjs/parser/set-operation-parser.js +1 -2
  97. package/dist/cjs/parser/table-parser.js +4 -5
  98. package/dist/cjs/parser/top-parser.js +1 -2
  99. package/dist/cjs/parser/unary-operation-parser.js +3 -4
  100. package/dist/cjs/parser/update-set-parser.js +2 -3
  101. package/dist/cjs/parser/value-parser.js +4 -5
  102. package/dist/cjs/parser/with-parser.js +1 -2
  103. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +54 -27
  104. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +26 -21
  105. package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
  106. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  107. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  108. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  109. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  110. package/dist/cjs/plugin/kysely-plugin.d.ts +28 -6
  111. package/dist/cjs/plugin/noop-plugin.d.ts +28 -6
  112. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +80 -9
  113. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +53 -14
  114. package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  115. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +43 -1
  116. package/dist/cjs/query-builder/aggregate-function-builder.js +30 -0
  117. package/dist/cjs/query-builder/delete-query-builder.d.ts +219 -43
  118. package/dist/cjs/query-builder/delete-query-builder.js +95 -31
  119. package/dist/cjs/query-builder/function-module.d.ts +40 -93
  120. package/dist/cjs/query-builder/function-module.js +1 -2
  121. package/dist/cjs/query-builder/insert-query-builder.d.ts +326 -67
  122. package/dist/cjs/query-builder/insert-query-builder.js +212 -61
  123. package/dist/cjs/query-builder/insert-result.d.ts +10 -5
  124. package/dist/cjs/query-builder/insert-result.js +10 -5
  125. package/dist/cjs/query-builder/json-path-builder.d.ts +33 -9
  126. package/dist/cjs/query-builder/json-path-builder.js +8 -5
  127. package/dist/cjs/query-builder/merge-query-builder.d.ts +312 -10
  128. package/dist/cjs/query-builder/merge-query-builder.js +98 -7
  129. package/dist/cjs/query-builder/no-result-error.js +2 -2
  130. package/dist/cjs/query-builder/on-conflict-builder.d.ts +53 -20
  131. package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
  132. package/dist/cjs/query-builder/output-interface.d.ts +138 -0
  133. package/dist/cjs/query-builder/output-interface.js +2 -0
  134. package/dist/cjs/query-builder/returning-interface.d.ts +7 -5
  135. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
  136. package/dist/cjs/query-builder/select-query-builder.d.ts +370 -73
  137. package/dist/cjs/query-builder/select-query-builder.js +14 -9
  138. package/dist/cjs/query-builder/update-query-builder.d.ts +225 -31
  139. package/dist/cjs/query-builder/update-query-builder.js +96 -17
  140. package/dist/cjs/query-builder/update-result.d.ts +9 -0
  141. package/dist/cjs/query-builder/update-result.js +9 -0
  142. package/dist/cjs/query-builder/where-interface.d.ts +6 -2
  143. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
  144. package/dist/cjs/query-compiler/default-query-compiler.js +45 -1
  145. package/dist/cjs/query-creator.d.ts +122 -21
  146. package/dist/cjs/query-creator.js +56 -3
  147. package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
  148. package/dist/cjs/raw-builder/raw-builder.js +1 -2
  149. package/dist/cjs/raw-builder/sql.d.ts +31 -12
  150. package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
  151. package/dist/cjs/schema/alter-column-builder.js +20 -3
  152. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +44 -10
  153. package/dist/cjs/schema/alter-table-add-index-builder.js +27 -10
  154. package/dist/cjs/schema/alter-table-builder.js +1 -2
  155. package/dist/cjs/schema/column-definition-builder.d.ts +286 -24
  156. package/dist/cjs/schema/column-definition-builder.js +288 -24
  157. package/dist/cjs/schema/create-table-builder.d.ts +86 -33
  158. package/dist/cjs/schema/create-table-builder.js +86 -33
  159. package/dist/cjs/util/assert.js +2 -3
  160. package/dist/cjs/util/column-type.d.ts +5 -9
  161. package/dist/cjs/util/compilable.js +1 -2
  162. package/dist/cjs/util/json-object-args.js +1 -2
  163. package/dist/cjs/util/log-once.js +1 -2
  164. package/dist/cjs/util/object-utils.js +38 -26
  165. package/dist/cjs/util/performance-now.js +1 -2
  166. package/dist/cjs/util/prevent-await.js +1 -2
  167. package/dist/cjs/util/query-id.js +1 -2
  168. package/dist/cjs/util/random-string.js +1 -2
  169. package/dist/cjs/util/require-all-props.d.ts +4 -2
  170. package/dist/cjs/util/require-all-props.js +5 -4
  171. package/dist/cjs/util/stack-trace-utils.js +1 -2
  172. package/dist/cjs/util/streamable.d.ts +1 -1
  173. package/dist/cjs/util/type-utils.d.ts +4 -2
  174. package/dist/esm/dialect/dialect-adapter-base.d.ts +13 -3
  175. package/dist/esm/dialect/dialect-adapter-base.js +4 -1
  176. package/dist/esm/dialect/dialect-adapter.d.ts +16 -2
  177. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +12 -7
  178. package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
  179. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +83 -55
  180. package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
  181. package/dist/esm/dialect/mssql/mssql-driver.js +114 -48
  182. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +11 -2
  183. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  184. package/dist/esm/dialect/mysql/mysql-driver.js +3 -0
  185. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +11 -2
  186. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  187. package/dist/esm/dialect/postgres/postgres-driver.js +3 -0
  188. package/dist/esm/dialect/postgres/postgres-introspector.js +5 -1
  189. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  190. package/dist/esm/driver/database-connection.d.ts +3 -1
  191. package/dist/esm/driver/dummy-driver.d.ts +13 -12
  192. package/dist/esm/driver/dummy-driver.js +13 -12
  193. package/dist/esm/dynamic/dynamic.d.ts +7 -7
  194. package/dist/esm/dynamic/dynamic.js +7 -7
  195. package/dist/esm/expression/expression-builder.d.ts +153 -62
  196. package/dist/esm/expression/expression-wrapper.d.ts +92 -23
  197. package/dist/esm/expression/expression.d.ts +40 -5
  198. package/dist/esm/helpers/mssql.d.ts +74 -14
  199. package/dist/esm/helpers/mssql.js +74 -14
  200. package/dist/esm/helpers/mysql.d.ts +17 -13
  201. package/dist/esm/helpers/mysql.js +17 -13
  202. package/dist/esm/helpers/postgres.d.ts +11 -8
  203. package/dist/esm/helpers/postgres.js +11 -8
  204. package/dist/esm/helpers/sqlite.d.ts +41 -16
  205. package/dist/esm/helpers/sqlite.js +41 -16
  206. package/dist/esm/index.d.ts +28 -21
  207. package/dist/esm/index.js +28 -21
  208. package/dist/esm/kysely.d.ts +100 -42
  209. package/dist/esm/kysely.js +61 -37
  210. package/dist/esm/migration/file-migration-provider.d.ts +2 -2
  211. package/dist/esm/migration/file-migration-provider.js +2 -2
  212. package/dist/esm/migration/migrator.d.ts +82 -14
  213. package/dist/esm/migration/migrator.js +82 -14
  214. package/dist/esm/operation-node/aggregate-function-node.d.ts +4 -0
  215. package/dist/esm/operation-node/aggregate-function-node.js +9 -0
  216. package/dist/esm/operation-node/alter-column-node.d.ts +1 -1
  217. package/dist/esm/operation-node/case-node.d.ts +1 -1
  218. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  219. package/dist/esm/operation-node/data-type-node.d.ts +2 -2
  220. package/dist/esm/operation-node/data-type-node.js +15 -1
  221. package/dist/esm/operation-node/delete-query-node.d.ts +3 -0
  222. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -4
  223. package/dist/esm/operation-node/having-node.d.ts +1 -1
  224. package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
  225. package/dist/esm/operation-node/merge-query-node.d.ts +3 -0
  226. package/dist/esm/operation-node/on-node.d.ts +1 -1
  227. package/dist/esm/operation-node/operation-node-transformer.d.ts +11 -3
  228. package/dist/esm/operation-node/operation-node-transformer.js +26 -3
  229. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  230. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  231. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  232. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  233. package/dist/esm/operation-node/operator-node.js +2 -0
  234. package/dist/esm/operation-node/output-node.d.ts +13 -0
  235. package/dist/esm/operation-node/output-node.js +24 -0
  236. package/dist/esm/operation-node/query-node.d.ts +15 -6
  237. package/dist/esm/operation-node/query-node.js +17 -0
  238. package/dist/esm/operation-node/select-query-node.d.ts +1 -1
  239. package/dist/esm/operation-node/select-query-node.js +6 -8
  240. package/dist/esm/operation-node/update-query-node.d.ts +3 -0
  241. package/dist/esm/operation-node/where-node.d.ts +1 -1
  242. package/dist/esm/parser/returning-parser.d.ts +4 -3
  243. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +54 -27
  244. package/dist/esm/plugin/camel-case/camel-case-plugin.js +26 -21
  245. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  246. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  247. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  248. package/dist/esm/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  249. package/dist/esm/plugin/kysely-plugin.d.ts +28 -6
  250. package/dist/esm/plugin/noop-plugin.d.ts +28 -6
  251. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +80 -9
  252. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +53 -14
  253. package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  254. package/dist/esm/query-builder/aggregate-function-builder.d.ts +43 -1
  255. package/dist/esm/query-builder/aggregate-function-builder.js +30 -0
  256. package/dist/esm/query-builder/delete-query-builder.d.ts +219 -43
  257. package/dist/esm/query-builder/delete-query-builder.js +95 -31
  258. package/dist/esm/query-builder/function-module.d.ts +40 -93
  259. package/dist/esm/query-builder/insert-query-builder.d.ts +326 -67
  260. package/dist/esm/query-builder/insert-query-builder.js +212 -61
  261. package/dist/esm/query-builder/insert-result.d.ts +10 -5
  262. package/dist/esm/query-builder/insert-result.js +10 -5
  263. package/dist/esm/query-builder/json-path-builder.d.ts +33 -9
  264. package/dist/esm/query-builder/json-path-builder.js +8 -5
  265. package/dist/esm/query-builder/merge-query-builder.d.ts +312 -10
  266. package/dist/esm/query-builder/merge-query-builder.js +98 -7
  267. package/dist/esm/query-builder/on-conflict-builder.d.ts +53 -20
  268. package/dist/esm/query-builder/on-conflict-builder.js +41 -16
  269. package/dist/esm/query-builder/output-interface.d.ts +138 -0
  270. package/dist/esm/query-builder/output-interface.js +2 -0
  271. package/dist/esm/query-builder/returning-interface.d.ts +7 -5
  272. package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
  273. package/dist/esm/query-builder/select-query-builder.d.ts +370 -73
  274. package/dist/esm/query-builder/select-query-builder.js +13 -7
  275. package/dist/esm/query-builder/update-query-builder.d.ts +225 -31
  276. package/dist/esm/query-builder/update-query-builder.js +96 -17
  277. package/dist/esm/query-builder/update-result.d.ts +9 -0
  278. package/dist/esm/query-builder/update-result.js +9 -0
  279. package/dist/esm/query-builder/where-interface.d.ts +6 -2
  280. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
  281. package/dist/esm/query-compiler/default-query-compiler.js +45 -1
  282. package/dist/esm/query-creator.d.ts +122 -21
  283. package/dist/esm/query-creator.js +56 -3
  284. package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
  285. package/dist/esm/raw-builder/sql.d.ts +31 -12
  286. package/dist/esm/schema/alter-column-builder.d.ts +17 -3
  287. package/dist/esm/schema/alter-column-builder.js +20 -3
  288. package/dist/esm/schema/alter-table-add-index-builder.d.ts +44 -10
  289. package/dist/esm/schema/alter-table-add-index-builder.js +27 -10
  290. package/dist/esm/schema/alter-table-builder.js +1 -2
  291. package/dist/esm/schema/column-definition-builder.d.ts +286 -24
  292. package/dist/esm/schema/column-definition-builder.js +288 -24
  293. package/dist/esm/schema/create-table-builder.d.ts +86 -33
  294. package/dist/esm/schema/create-table-builder.js +86 -33
  295. package/dist/esm/util/column-type.d.ts +5 -9
  296. package/dist/esm/util/object-utils.js +18 -5
  297. package/dist/esm/util/require-all-props.d.ts +4 -2
  298. package/dist/esm/util/require-all-props.js +4 -2
  299. package/dist/esm/util/streamable.d.ts +1 -1
  300. package/dist/esm/util/type-utils.d.ts +4 -2
  301. package/package.json +30 -24
@@ -123,16 +123,29 @@ export class DeleteQueryBuilder {
123
123
  queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll(table)),
124
124
  });
125
125
  }
126
+ output(args) {
127
+ return new DeleteQueryBuilder({
128
+ ...this.#props,
129
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectArg(args)),
130
+ });
131
+ }
132
+ outputAll(table) {
133
+ return new DeleteQueryBuilder({
134
+ ...this.#props,
135
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectAll(table)),
136
+ });
137
+ }
126
138
  /**
127
139
  * Clears all `returning` clauses from the query.
128
140
  *
129
141
  * ### Examples
130
142
  *
131
143
  * ```ts
132
- * db.deleteFrom('pet')
144
+ * await db.deleteFrom('pet')
133
145
  * .returningAll()
134
146
  * .where('name', '=', 'Max')
135
147
  * .clearReturning()
148
+ * .execute()
136
149
  * ```
137
150
  *
138
151
  * The generated SQL(PostgreSQL):
@@ -153,11 +166,12 @@ export class DeleteQueryBuilder {
153
166
  * ### Examples
154
167
  *
155
168
  * ```ts
156
- * db.deleteFrom('pet')
169
+ * await db.deleteFrom('pet')
157
170
  * .returningAll()
158
171
  * .where('name', '=', 'Max')
159
172
  * .limit(5)
160
173
  * .clearLimit()
174
+ * .execute()
161
175
  * ```
162
176
  *
163
177
  * The generated SQL(PostgreSQL):
@@ -178,11 +192,12 @@ export class DeleteQueryBuilder {
178
192
  * ### Examples
179
193
  *
180
194
  * ```ts
181
- * db.deleteFrom('pet')
195
+ * await db.deleteFrom('pet')
182
196
  * .returningAll()
183
197
  * .where('name', '=', 'Max')
184
198
  * .orderBy('id')
185
199
  * .clearOrderBy()
200
+ * .execute()
186
201
  * ```
187
202
  *
188
203
  * The generated SQL(PostgreSQL):
@@ -254,6 +269,12 @@ export class DeleteQueryBuilder {
254
269
  * .limit(5)
255
270
  * .execute()
256
271
  * ```
272
+ *
273
+ * The generated SQL (MySQL):
274
+ *
275
+ * ```sql
276
+ * delete from `pet` order by `created_at` limit ?
277
+ * ```
257
278
  */
258
279
  limit(limit) {
259
280
  return new DeleteQueryBuilder({
@@ -261,6 +282,33 @@ export class DeleteQueryBuilder {
261
282
  queryNode: DeleteQueryNode.cloneWithLimit(this.#props.queryNode, LimitNode.create(parseValueExpression(limit))),
262
283
  });
263
284
  }
285
+ /**
286
+ * This can be used to add any additional SQL to the end of the query.
287
+ *
288
+ * ### Examples
289
+ *
290
+ * ```ts
291
+ * import { sql } from 'kysely'
292
+ *
293
+ * await db.deleteFrom('person')
294
+ * .where('first_name', '=', 'John')
295
+ * .modifyEnd(sql`-- This is a comment`)
296
+ * .execute()
297
+ * ```
298
+ *
299
+ * The generated SQL (MySQL):
300
+ *
301
+ * ```sql
302
+ * delete from `person`
303
+ * where `first_name` = "John" -- This is a comment
304
+ * ```
305
+ */
306
+ modifyEnd(modifier) {
307
+ return new DeleteQueryBuilder({
308
+ ...this.#props,
309
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, modifier.toOperationNode()),
310
+ });
311
+ }
264
312
  /**
265
313
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
266
314
  * what the provided function returns.
@@ -273,12 +321,14 @@ export class DeleteQueryBuilder {
273
321
  * The next example uses a helper function `log` to log a query:
274
322
  *
275
323
  * ```ts
324
+ * import type { Compilable } from 'kysely'
325
+ *
276
326
  * function log<T extends Compilable>(qb: T): T {
277
327
  * console.log(qb.compile())
278
328
  * return qb
279
329
  * }
280
330
  *
281
- * db.deleteFrom('person')
331
+ * await db.deleteFrom('person')
282
332
  * .$call(log)
283
333
  * .execute()
284
334
  * ```
@@ -314,11 +364,11 @@ export class DeleteQueryBuilder {
314
364
  * the code. In the example above the return type of the `deletePerson` function is:
315
365
  *
316
366
  * ```ts
317
- * {
367
+ * Promise<{
318
368
  * id: number
319
369
  * first_name: string
320
370
  * last_name?: string
321
- * }
371
+ * }>
322
372
  * ```
323
373
  */
324
374
  $if(condition, func) {
@@ -355,25 +405,33 @@ export class DeleteQueryBuilder {
355
405
  * Turn this code:
356
406
  *
357
407
  * ```ts
408
+ * import type { Person } from 'type-editor' // imaginary module
409
+ *
358
410
  * const person = await db.deleteFrom('person')
359
- * .where('id', '=', id)
411
+ * .where('id', '=', 3)
360
412
  * .where('nullable_column', 'is not', null)
361
413
  * .returningAll()
362
414
  * .executeTakeFirstOrThrow()
363
415
  *
364
- * if (person.nullable_column) {
416
+ * if (isWithNoNullValue(person)) {
365
417
  * functionThatExpectsPersonWithNonNullValue(person)
366
418
  * }
419
+ *
420
+ * function isWithNoNullValue(person: Person): person is Person & { nullable_column: string } {
421
+ * return person.nullable_column != null
422
+ * }
367
423
  * ```
368
424
  *
369
425
  * Into this:
370
426
  *
371
427
  * ```ts
428
+ * import type { NotNull } from 'kysely'
429
+ *
372
430
  * const person = await db.deleteFrom('person')
373
- * .where('id', '=', id)
431
+ * .where('id', '=', 3)
374
432
  * .where('nullable_column', 'is not', null)
375
433
  * .returningAll()
376
- * .$narrowType<{ nullable_column: string }>()
434
+ * .$narrowType<{ nullable_column: NotNull }>()
377
435
  * .executeTakeFirstOrThrow()
378
436
  *
379
437
  * functionThatExpectsPersonWithNonNullValue(person)
@@ -385,17 +443,17 @@ export class DeleteQueryBuilder {
385
443
  /**
386
444
  * Asserts that query's output row type equals the given type `T`.
387
445
  *
388
- * This method can be used to simplify excessively complex types to make typescript happy
446
+ * This method can be used to simplify excessively complex types to make TypeScript happy
389
447
  * and much faster.
390
448
  *
391
449
  * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
392
- * for typescript and you get errors like this:
450
+ * for TypeScript and you get errors like this:
393
451
  *
394
452
  * ```
395
453
  * error TS2589: Type instantiation is excessively deep and possibly infinite.
396
454
  * ```
397
455
  *
398
- * In these case you can often use this method to help typescript a little bit. When you use this
456
+ * In these case you can often use this method to help TypeScript a little bit. When you use this
399
457
  * method to assert the output type of a query, Kysely can drop the complex output type that
400
458
  * consists of multiple nested helper types and replace it with the simple asserted type.
401
459
  *
@@ -405,22 +463,26 @@ export class DeleteQueryBuilder {
405
463
  * ### Examples
406
464
  *
407
465
  * ```ts
408
- * const result = await db
409
- * .with('deleted_person', (qb) => qb
410
- * .deleteFrom('person')
411
- * .where('id', '=', person.id)
412
- * .returning('first_name')
413
- * .$assertType<{ first_name: string }>()
414
- * )
415
- * .with('deleted_pet', (qb) => qb
416
- * .deleteFrom('pet')
417
- * .where('owner_id', '=', person.id)
418
- * .returning(['name as pet_name', 'species'])
419
- * .$assertType<{ pet_name: string, species: Species }>()
420
- * )
421
- * .selectFrom(['deleted_person', 'deleted_pet'])
422
- * .selectAll()
423
- * .executeTakeFirstOrThrow()
466
+ * import type { Species } from 'type-editor' // imaginary module
467
+ *
468
+ * async function deletePersonAndPets(personId: number) {
469
+ * return await db
470
+ * .with('deleted_person', (qb) => qb
471
+ * .deleteFrom('person')
472
+ * .where('id', '=', personId)
473
+ * .returning('first_name')
474
+ * .$assertType<{ first_name: string }>()
475
+ * )
476
+ * .with('deleted_pets', (qb) => qb
477
+ * .deleteFrom('pet')
478
+ * .where('owner_id', '=', personId)
479
+ * .returning(['name as pet_name', 'species'])
480
+ * .$assertType<{ pet_name: string, species: Species }>()
481
+ * )
482
+ * .selectFrom(['deleted_person', 'deleted_pets'])
483
+ * .selectAll()
484
+ * .execute()
485
+ * }
424
486
  * ```
425
487
  */
426
488
  $assertType() {
@@ -448,9 +510,11 @@ export class DeleteQueryBuilder {
448
510
  */
449
511
  async execute() {
450
512
  const compiledQuery = this.compile();
451
- const query = compiledQuery.query;
452
513
  const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
453
- if (this.#props.executor.adapter.supportsReturning && query.returning) {
514
+ const { adapter } = this.#props.executor;
515
+ const query = compiledQuery.query;
516
+ if ((query.returning && adapter.supportsReturning) ||
517
+ (query.output && adapter.supportsOutput)) {
454
518
  return result.rows;
455
519
  }
456
520
  return [
@@ -88,9 +88,10 @@ export interface FunctionModule<DB, TB extends keyof DB> {
88
88
  * ### Examples
89
89
  *
90
90
  * ```ts
91
- * db.selectFrom('person')
91
+ * await db.selectFrom('person')
92
92
  * .selectAll('person')
93
93
  * .where(db.fn('upper', ['first_name']), '=', 'JENNIFER')
94
+ * .execute()
94
95
  * ```
95
96
  *
96
97
  * The generated SQL (PostgreSQL):
@@ -104,9 +105,12 @@ export interface FunctionModule<DB, TB extends keyof DB> {
104
105
  * If you prefer readability over type-safety, you can always use raw `sql`:
105
106
  *
106
107
  * ```ts
107
- * db.selectFrom('person')
108
+ * import { sql } from 'kysely'
109
+ *
110
+ * await db.selectFrom('person')
108
111
  * .selectAll('person')
109
- * .where(sql`upper(first_name)`, '=', 'JENNIFER')
112
+ * .where(sql<string>`upper(first_name)`, '=', 'JENNIFER')
113
+ * .execute()
110
114
  * ```
111
115
  */
112
116
  <O, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(name: string, args?: ReadonlyArray<RE>): ExpressionWrapper<DB, TB, O>;
@@ -123,11 +127,12 @@ export interface FunctionModule<DB, TB extends keyof DB> {
123
127
  * ### Examples
124
128
  *
125
129
  * ```ts
126
- * db.selectFrom('person')
130
+ * await db.selectFrom('person')
127
131
  * .select(({ fn }) => [
128
132
  * fn.agg<number>('rank').over().as('rank'),
129
133
  * fn.agg<string>('group_concat', ['first_name']).distinct().as('first_names')
130
134
  * ])
135
+ * .execute()
131
136
  * ```
132
137
  *
133
138
  * The generated SQL (MySQL):
@@ -151,7 +156,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
151
156
  * ### Examples
152
157
  *
153
158
  * ```ts
154
- * db.selectFrom('toy')
159
+ * await db.selectFrom('toy')
155
160
  * .select((eb) => eb.fn.avg('price').as('avg_price'))
156
161
  * .execute()
157
162
  * ```
@@ -162,18 +167,10 @@ export interface FunctionModule<DB, TB extends keyof DB> {
162
167
  * select avg("price") as "avg_price" from "toy"
163
168
  * ```
164
169
  *
165
- * You can limit column range to only columns participating in current query:
166
- *
167
- * ```ts
168
- * db.selectFrom('toy')
169
- * .select((eb) => eb.fn.avg('price').as('avg_price'))
170
- * .execute()
171
- * ```
172
- *
173
170
  * If this function is used in a `select` statement, the type of the selected
174
171
  * expression will be `number | string` by default. This is because Kysely can't know the
175
172
  * type the db driver outputs. Sometimes the output can be larger than the largest
176
- * javascript number and a string is returned instead. Most drivers allow you
173
+ * JavaScript number and a string is returned instead. Most drivers allow you
177
174
  * to configure the output type of large numbers and Kysely can't know if you've
178
175
  * done so.
179
176
  *
@@ -181,7 +178,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
181
178
  * the first type argument:
182
179
  *
183
180
  * ```ts
184
- * db.selectFrom('toy')
181
+ * await db.selectFrom('toy')
185
182
  * .select((eb) => eb.fn.avg<number>('price').as('avg_price'))
186
183
  * .execute()
187
184
  * ```
@@ -192,7 +189,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
192
189
  * function.
193
190
  *
194
191
  * ```ts
195
- * db.selectFrom('toy')
192
+ * await db.selectFrom('toy')
196
193
  * .select((eb) => eb.fn.avg<number | null>('price').as('avg_price'))
197
194
  * .execute()
198
195
  * ```
@@ -219,35 +216,25 @@ export interface FunctionModule<DB, TB extends keyof DB> {
219
216
  * ### Examples
220
217
  *
221
218
  * ```ts
222
- * db.selectFrom('participant')
223
- * .select((eb) => eb.fn.coalesce('nickname', sql<string>`'<anonymous>'`).as('nickname'))
224
- * .where('room_id', '=', roomId)
219
+ * import { sql } from 'kysely'
220
+ *
221
+ * await db.selectFrom('person')
222
+ * .select((eb) => eb.fn.coalesce('nullable_column', sql.lit('<unknown>')).as('column'))
223
+ * .where('first_name', '=', 'Jessie')
225
224
  * .execute()
226
225
  * ```
227
226
  *
228
227
  * The generated SQL (PostgreSQL):
229
228
  *
230
229
  * ```sql
231
- * select coalesce("nickname", '<anonymous>') as "nickname"
232
- * from "participant" where "room_id" = $1
233
- * ```
234
- *
235
- * You can limit column range to only columns participating in current query:
236
- *
237
- * ```ts
238
- * db.selectFrom('participant')
239
- * .select((eb) =>
240
- * eb.fn.coalesce('nickname', sql<string>`'<anonymous>'`).as('nickname')
241
- * )
242
- * .where('room_id', '=', roomId)
243
- * .execute()
230
+ * select coalesce("nullable_column", '<unknown>') as "column" from "person" where "first_name" = $1
244
231
  * ```
245
232
  *
246
233
  * You can combine this function with other helpers in this module:
247
234
  *
248
235
  * ```ts
249
- * db.selectFrom('person')
250
- * .select((eb) => eb.fn.coalesce(eb.fn.avg<number | null>('age'), sql<number>`0`).as('avg_age'))
236
+ * await db.selectFrom('person')
237
+ * .select((eb) => eb.fn.coalesce(eb.fn.avg<number | null>('age'), eb.lit(0)).as('avg_age'))
251
238
  * .where('first_name', '=', 'Jennifer')
252
239
  * .execute()
253
240
  * ```
@@ -278,7 +265,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
278
265
  * ### Examples
279
266
  *
280
267
  * ```ts
281
- * db.selectFrom('toy')
268
+ * await db.selectFrom('toy')
282
269
  * .select((eb) => eb.fn.count('id').as('num_toys'))
283
270
  * .execute()
284
271
  * ```
@@ -292,7 +279,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
292
279
  * If this function is used in a `select` statement, the type of the selected
293
280
  * expression will be `number | string | bigint` by default. This is because
294
281
  * Kysely can't know the type the db driver outputs. Sometimes the output can
295
- * be larger than the largest javascript number and a string is returned instead.
282
+ * be larger than the largest JavaScript number and a string is returned instead.
296
283
  * Most drivers allow you to configure the output type of large numbers and Kysely
297
284
  * can't know if you've done so.
298
285
  *
@@ -300,18 +287,10 @@ export interface FunctionModule<DB, TB extends keyof DB> {
300
287
  * the type as the first type argument:
301
288
  *
302
289
  * ```ts
303
- * db.selectFrom('toy')
290
+ * await db.selectFrom('toy')
304
291
  * .select((eb) => eb.fn.count<number>('id').as('num_toys'))
305
292
  * .execute()
306
293
  * ```
307
- *
308
- * You can limit column range to only columns participating in current query:
309
- *
310
- * ```ts
311
- * db.selectFrom('toy')
312
- * .select((eb) => eb.fn.count('id').as('num_toys'))
313
- * .execute()
314
- * ```
315
294
  */
316
295
  count<O extends number | string | bigint, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(expr: RE): AggregateFunctionBuilder<DB, TB, O>;
317
296
  /**
@@ -330,7 +309,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
330
309
  * ### Examples
331
310
  *
332
311
  * ```ts
333
- * db.selectFrom('toy')
312
+ * await db.selectFrom('toy')
334
313
  * .select((eb) => eb.fn.countAll().as('num_toys'))
335
314
  * .execute()
336
315
  * ```
@@ -344,7 +323,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
344
323
  * If this is used in a `select` statement, the type of the selected expression
345
324
  * will be `number | string | bigint` by default. This is because Kysely
346
325
  * can't know the type the db driver outputs. Sometimes the output can be larger
347
- * than the largest javascript number and a string is returned instead. Most
326
+ * than the largest JavaScript number and a string is returned instead. Most
348
327
  * drivers allow you to configure the output type of large numbers and Kysely
349
328
  * can't know if you've done so.
350
329
  *
@@ -352,7 +331,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
352
331
  * the type as the first type argument:
353
332
  *
354
333
  * ```ts
355
- * db.selectFrom('toy')
334
+ * await db.selectFrom('toy')
356
335
  * .select((eb) => eb.fn.countAll<number>().as('num_toys'))
357
336
  * .execute()
358
337
  * ```
@@ -361,7 +340,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
361
340
  * table:
362
341
  *
363
342
  * ```ts
364
- * db.selectFrom('toy')
343
+ * await db.selectFrom('toy')
365
344
  * .innerJoin('pet', 'pet.id', 'toy.pet_id')
366
345
  * .select((eb) => eb.fn.countAll('toy').as('num_toys'))
367
346
  * .execute()
@@ -373,15 +352,6 @@ export interface FunctionModule<DB, TB extends keyof DB> {
373
352
  * select count("toy".*) as "num_toys"
374
353
  * from "toy" inner join "pet" on "pet"."id" = "toy"."pet_id"
375
354
  * ```
376
- *
377
- * You can limit table range to only tables participating in current query:
378
- *
379
- * ```ts
380
- * db.selectFrom('toy')
381
- * .innerJoin('pet', 'pet.id', 'toy.pet_id')
382
- * .select((eb) => eb.fn.countAll('toy').as('num_toys'))
383
- * .execute()
384
- * ```
385
355
  */
386
356
  countAll<O extends number | string | bigint, T extends TB = TB>(table: T): AggregateFunctionBuilder<DB, TB, O>;
387
357
  countAll<O extends number | string | bigint>(): AggregateFunctionBuilder<DB, TB, O>;
@@ -401,7 +371,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
401
371
  * ### Examples
402
372
  *
403
373
  * ```ts
404
- * db.selectFrom('toy')
374
+ * await db.selectFrom('toy')
405
375
  * .select((eb) => eb.fn.max('price').as('max_price'))
406
376
  * .execute()
407
377
  * ```
@@ -412,21 +382,13 @@ export interface FunctionModule<DB, TB extends keyof DB> {
412
382
  * select max("price") as "max_price" from "toy"
413
383
  * ```
414
384
  *
415
- * You can limit column range to only columns participating in current query:
416
- *
417
- * ```ts
418
- * db.selectFrom('toy')
419
- * .select((eb) => eb.fn.max('price').as('max_price'))
420
- * .execute()
421
- * ```
422
- *
423
385
  * Sometimes a null is returned, e.g. when row count is 0, and no `group by`
424
386
  * was used. It is highly recommended to include null in the output type union
425
387
  * and handle null values in post-execute code, or wrap the function with a {@link coalesce}
426
388
  * function.
427
389
  *
428
390
  * ```ts
429
- * db.selectFrom('toy')
391
+ * await db.selectFrom('toy')
430
392
  * .select((eb) => eb.fn.max<number | null>('price').as('max_price'))
431
393
  * .execute()
432
394
  * ```
@@ -448,7 +410,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
448
410
  * ### Examples
449
411
  *
450
412
  * ```ts
451
- * db.selectFrom('toy')
413
+ * await db.selectFrom('toy')
452
414
  * .select((eb) => eb.fn.min('price').as('min_price'))
453
415
  * .execute()
454
416
  * ```
@@ -459,21 +421,13 @@ export interface FunctionModule<DB, TB extends keyof DB> {
459
421
  * select min("price") as "min_price" from "toy"
460
422
  * ```
461
423
  *
462
- * You can limit column range to only columns participating in current query:
463
- *
464
- * ```ts
465
- * db.selectFrom('toy')
466
- * .select((eb) => eb.fn.min('price').as('min_price'))
467
- * .execute()
468
- * ```
469
- *
470
424
  * Sometimes a null is returned, e.g. when row count is 0, and no `group by`
471
425
  * was used. It is highly recommended to include null in the output type union
472
426
  * and handle null values in post-execute code, or wrap the function with a {@link coalesce}
473
427
  * function.
474
428
  *
475
429
  * ```ts
476
- * db.selectFrom('toy')
430
+ * await db.selectFrom('toy')
477
431
  * .select((eb) => eb.fn.min<number | null>('price').as('min_price'))
478
432
  * .execute()
479
433
  * ```
@@ -491,7 +445,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
491
445
  * ### Examples
492
446
  *
493
447
  * ```ts
494
- * db.selectFrom('toy')
448
+ * await db.selectFrom('toy')
495
449
  * .select((eb) => eb.fn.sum('price').as('total_price'))
496
450
  * .execute()
497
451
  * ```
@@ -502,18 +456,10 @@ export interface FunctionModule<DB, TB extends keyof DB> {
502
456
  * select sum("price") as "total_price" from "toy"
503
457
  * ```
504
458
  *
505
- * You can limit column range to only columns participating in current query:
506
- *
507
- * ```ts
508
- * db.selectFrom('toy')
509
- * .select((eb) => eb.fn.sum('price').as('total_price'))
510
- * .execute()
511
- * ```
512
- *
513
459
  * If this function is used in a `select` statement, the type of the selected
514
460
  * expression will be `number | string` by default. This is because Kysely can't know the
515
461
  * type the db driver outputs. Sometimes the output can be larger than the largest
516
- * javascript number and a string is returned instead. Most drivers allow you
462
+ * JavaScript number and a string is returned instead. Most drivers allow you
517
463
  * to configure the output type of large numbers and Kysely can't know if you've
518
464
  * done so.
519
465
  *
@@ -521,7 +467,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
521
467
  * the first type argument:
522
468
  *
523
469
  * ```ts
524
- * db.selectFrom('toy')
470
+ * await db.selectFrom('toy')
525
471
  * .select((eb) => eb.fn.sum<number>('price').as('total_price'))
526
472
  * .execute()
527
473
  * ```
@@ -532,7 +478,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
532
478
  * function.
533
479
  *
534
480
  * ```ts
535
- * db.selectFrom('toy')
481
+ * await db.selectFrom('toy')
536
482
  * .select((eb) => eb.fn.sum<number | null>('price').as('total_price'))
537
483
  * .execute()
538
484
  * ```
@@ -548,11 +494,12 @@ export interface FunctionModule<DB, TB extends keyof DB> {
548
494
  * In the following example, `nicknames` is assumed to be a column of type `string[]`:
549
495
  *
550
496
  * ```ts
551
- * db.selectFrom('person')
497
+ * await db.selectFrom('person')
552
498
  * .selectAll('person')
553
499
  * .where((eb) => eb(
554
500
  * eb.val('Jen'), '=', eb.fn.any('person.nicknames')
555
501
  * ))
502
+ * .execute()
556
503
  * ```
557
504
  *
558
505
  *
@@ -576,7 +523,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
576
523
  * This function is only available on PostgreSQL.
577
524
  *
578
525
  * ```ts
579
- * db.selectFrom('person')
526
+ * await db.selectFrom('person')
580
527
  * .innerJoin('pet', 'pet.owner_id', 'person.id')
581
528
  * .select((eb) => ['first_name', eb.fn.jsonAgg('pet').as('pets')])
582
529
  * .groupBy('person.first_name')
@@ -599,7 +546,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
599
546
  * This function is only available on PostgreSQL.
600
547
  *
601
548
  * ```ts
602
- * db.selectFrom('person')
549
+ * await db.selectFrom('person')
603
550
  * .innerJoin('pet', 'pet.owner_id', 'person.id')
604
551
  * .select((eb) => ['first_name', eb.fn.toJson('pet').as('pet')])
605
552
  * .execute()