kysely 0.27.2 → 0.27.4

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 (285) hide show
  1. package/CONTRIBUTING.md +1 -1
  2. package/README.md +7 -7
  3. package/dist/cjs/dialect/database-introspector.d.ts +1 -0
  4. package/dist/cjs/dialect/dialect-adapter-base.d.ts +2 -1
  5. package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
  6. package/dist/cjs/dialect/dialect-adapter.d.ts +5 -0
  7. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +1 -5
  8. package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
  9. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +46 -26
  10. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
  11. package/dist/cjs/dialect/mssql/mssql-driver.js +95 -36
  12. package/dist/cjs/dialect/mssql/mssql-introspector.js +13 -2
  13. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  14. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +8 -0
  15. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
  16. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  17. package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
  18. package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -1
  19. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
  20. package/dist/cjs/driver/database-connection.d.ts +4 -2
  21. package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
  22. package/dist/cjs/dynamic/dynamic.d.ts +1 -1
  23. package/dist/cjs/dynamic/dynamic.js +1 -1
  24. package/dist/cjs/expression/expression-builder.d.ts +31 -5
  25. package/dist/cjs/expression/expression-builder.js +7 -3
  26. package/dist/cjs/expression/expression.js +2 -3
  27. package/dist/cjs/helpers/mssql.js +3 -4
  28. package/dist/cjs/helpers/mysql.d.ts +3 -3
  29. package/dist/cjs/helpers/mysql.js +6 -7
  30. package/dist/cjs/helpers/postgres.d.ts +4 -4
  31. package/dist/cjs/helpers/postgres.js +7 -8
  32. package/dist/cjs/helpers/sqlite.js +3 -4
  33. package/dist/cjs/index.d.ts +31 -18
  34. package/dist/cjs/index.js +30 -17
  35. package/dist/cjs/kysely.d.ts +1 -1
  36. package/dist/cjs/kysely.js +3 -3
  37. package/dist/cjs/operation-node/add-index-node.js +1 -1
  38. package/dist/cjs/operation-node/alter-column-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/case-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/cast-node.d.ts +13 -0
  41. package/dist/cjs/operation-node/cast-node.js +19 -0
  42. package/dist/cjs/operation-node/column-definition-node.d.ts +2 -0
  43. package/dist/cjs/operation-node/data-type-node.d.ts +5 -1
  44. package/dist/cjs/operation-node/data-type-node.js +56 -0
  45. package/dist/cjs/operation-node/delete-query-node.d.ts +6 -0
  46. package/dist/cjs/operation-node/delete-query-node.js +12 -0
  47. package/dist/cjs/operation-node/fetch-node.d.ts +15 -0
  48. package/dist/cjs/operation-node/fetch-node.js +19 -0
  49. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -4
  50. package/dist/cjs/operation-node/having-node.d.ts +1 -1
  51. package/dist/cjs/operation-node/insert-query-node.d.ts +6 -1
  52. package/dist/cjs/operation-node/insert-query-node.js +5 -0
  53. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  54. package/dist/cjs/operation-node/matched-node.d.ts +13 -0
  55. package/dist/cjs/operation-node/matched-node.js +19 -0
  56. package/dist/cjs/operation-node/merge-query-node.d.ts +27 -0
  57. package/dist/cjs/operation-node/merge-query-node.js +45 -0
  58. package/dist/cjs/operation-node/on-node.d.ts +1 -1
  59. package/dist/cjs/operation-node/operation-node-source.js +1 -2
  60. package/dist/cjs/operation-node/operation-node-transformer.d.ts +12 -0
  61. package/dist/cjs/operation-node/operation-node-transformer.js +62 -0
  62. package/dist/cjs/operation-node/operation-node-visitor.d.ts +12 -0
  63. package/dist/cjs/operation-node/operation-node-visitor.js +6 -0
  64. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  65. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  66. package/dist/cjs/operation-node/operator-node.js +8 -6
  67. package/dist/cjs/operation-node/output-node.d.ts +13 -0
  68. package/dist/cjs/operation-node/output-node.js +26 -0
  69. package/dist/cjs/operation-node/query-node.d.ts +17 -5
  70. package/dist/cjs/operation-node/query-node.js +24 -1
  71. package/dist/cjs/operation-node/select-query-node.d.ts +6 -0
  72. package/dist/cjs/operation-node/select-query-node.js +12 -0
  73. package/dist/cjs/operation-node/top-node.d.ts +14 -0
  74. package/dist/cjs/operation-node/top-node.js +19 -0
  75. package/dist/cjs/operation-node/update-query-node.d.ts +9 -1
  76. package/dist/cjs/operation-node/update-query-node.js +11 -0
  77. package/dist/cjs/operation-node/where-node.d.ts +1 -1
  78. package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
  79. package/dist/cjs/parser/binary-operation-parser.js +7 -8
  80. package/dist/cjs/parser/data-type-parser.js +8 -5
  81. package/dist/cjs/parser/default-value-parser.js +1 -2
  82. package/dist/cjs/parser/expression-parser.js +3 -4
  83. package/dist/cjs/parser/fetch-parser.d.ts +2 -0
  84. package/dist/cjs/parser/fetch-parser.js +17 -0
  85. package/dist/cjs/parser/group-by-parser.js +1 -2
  86. package/dist/cjs/parser/identifier-parser.js +1 -2
  87. package/dist/cjs/parser/insert-values-parser.d.ts +3 -3
  88. package/dist/cjs/parser/insert-values-parser.js +1 -2
  89. package/dist/cjs/parser/join-parser.js +1 -2
  90. package/dist/cjs/parser/merge-parser.d.ts +9 -0
  91. package/dist/cjs/parser/merge-parser.js +31 -0
  92. package/dist/cjs/parser/on-commit-action-parse.js +1 -2
  93. package/dist/cjs/parser/on-modify-action-parser.js +1 -2
  94. package/dist/cjs/parser/order-by-parser.js +3 -4
  95. package/dist/cjs/parser/parse-utils.js +4 -5
  96. package/dist/cjs/parser/partition-by-parser.js +1 -2
  97. package/dist/cjs/parser/reference-parser.js +8 -9
  98. package/dist/cjs/parser/returning-parser.d.ts +4 -3
  99. package/dist/cjs/parser/select-parser.js +2 -3
  100. package/dist/cjs/parser/set-operation-parser.js +1 -2
  101. package/dist/cjs/parser/table-parser.d.ts +4 -3
  102. package/dist/cjs/parser/table-parser.js +4 -5
  103. package/dist/cjs/parser/top-parser.d.ts +2 -0
  104. package/dist/cjs/parser/top-parser.js +19 -0
  105. package/dist/cjs/parser/unary-operation-parser.js +3 -4
  106. package/dist/cjs/parser/update-set-parser.js +2 -3
  107. package/dist/cjs/parser/value-parser.js +4 -5
  108. package/dist/cjs/parser/with-parser.js +1 -2
  109. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +2 -2
  110. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +2 -2
  111. package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
  112. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
  113. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
  114. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +4 -0
  115. package/dist/cjs/query-builder/delete-query-builder.d.ts +188 -5
  116. package/dist/cjs/query-builder/delete-query-builder.js +139 -5
  117. package/dist/cjs/query-builder/function-module.d.ts +5 -5
  118. package/dist/cjs/query-builder/function-module.js +1 -2
  119. package/dist/cjs/query-builder/insert-query-builder.d.ts +166 -10
  120. package/dist/cjs/query-builder/insert-query-builder.js +107 -10
  121. package/dist/cjs/query-builder/merge-query-builder.d.ts +721 -0
  122. package/dist/cjs/query-builder/merge-query-builder.js +547 -0
  123. package/dist/cjs/query-builder/merge-result.d.ts +4 -0
  124. package/dist/cjs/query-builder/merge-result.js +10 -0
  125. package/dist/cjs/query-builder/no-result-error.js +2 -2
  126. package/dist/cjs/query-builder/on-conflict-builder.d.ts +2 -2
  127. package/dist/cjs/query-builder/output-interface.d.ts +95 -0
  128. package/dist/cjs/query-builder/output-interface.js +2 -0
  129. package/dist/cjs/query-builder/returning-interface.d.ts +2 -0
  130. package/dist/cjs/query-builder/select-query-builder.d.ts +177 -17
  131. package/dist/cjs/query-builder/select-query-builder.js +21 -2
  132. package/dist/cjs/query-builder/update-query-builder.d.ts +175 -10
  133. package/dist/cjs/query-builder/update-query-builder.js +119 -7
  134. package/dist/cjs/query-builder/update-result.d.ts +9 -0
  135. package/dist/cjs/query-builder/update-result.js +9 -0
  136. package/dist/cjs/query-builder/where-interface.d.ts +1 -1
  137. package/dist/cjs/query-compiler/default-query-compiler.d.ts +12 -0
  138. package/dist/cjs/query-compiler/default-query-compiler.js +118 -10
  139. package/dist/cjs/query-compiler/query-compiler.d.ts +2 -1
  140. package/dist/cjs/query-creator.d.ts +96 -5
  141. package/dist/cjs/query-creator.js +63 -1
  142. package/dist/cjs/raw-builder/raw-builder.js +1 -2
  143. package/dist/cjs/raw-builder/sql.d.ts +5 -5
  144. package/dist/cjs/schema/alter-column-builder.js +3 -0
  145. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +1 -1
  146. package/dist/cjs/schema/alter-table-add-index-builder.js +7 -3
  147. package/dist/cjs/schema/alter-table-builder.js +1 -2
  148. package/dist/cjs/schema/column-definition-builder.d.ts +18 -1
  149. package/dist/cjs/schema/column-definition-builder.js +22 -1
  150. package/dist/cjs/util/assert.js +2 -3
  151. package/dist/cjs/util/compilable.js +1 -2
  152. package/dist/cjs/util/infer-result.d.ts +2 -1
  153. package/dist/cjs/util/json-object-args.js +1 -2
  154. package/dist/cjs/util/log-once.js +1 -2
  155. package/dist/cjs/util/object-utils.js +38 -26
  156. package/dist/cjs/util/performance-now.js +1 -2
  157. package/dist/cjs/util/prevent-await.js +1 -2
  158. package/dist/cjs/util/query-id.js +1 -2
  159. package/dist/cjs/util/random-string.js +1 -2
  160. package/dist/cjs/util/require-all-props.js +1 -2
  161. package/dist/cjs/util/stack-trace-utils.js +1 -2
  162. package/dist/cjs/util/type-utils.d.ts +3 -2
  163. package/dist/esm/dialect/database-introspector.d.ts +1 -0
  164. package/dist/esm/dialect/dialect-adapter-base.d.ts +2 -1
  165. package/dist/esm/dialect/dialect-adapter-base.js +4 -1
  166. package/dist/esm/dialect/dialect-adapter.d.ts +5 -0
  167. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +1 -5
  168. package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
  169. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +46 -26
  170. package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
  171. package/dist/esm/dialect/mssql/mssql-driver.js +95 -36
  172. package/dist/esm/dialect/mssql/mssql-introspector.js +13 -2
  173. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  174. package/dist/esm/dialect/mssql/mssql-query-compiler.js +8 -0
  175. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
  176. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  177. package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
  178. package/dist/esm/dialect/postgres/postgres-introspector.js +3 -1
  179. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
  180. package/dist/esm/driver/database-connection.d.ts +4 -2
  181. package/dist/esm/dynamic/dynamic.d.ts +1 -1
  182. package/dist/esm/dynamic/dynamic.js +1 -1
  183. package/dist/esm/expression/expression-builder.d.ts +31 -5
  184. package/dist/esm/expression/expression-builder.js +5 -0
  185. package/dist/esm/helpers/mysql.d.ts +3 -3
  186. package/dist/esm/helpers/mysql.js +3 -3
  187. package/dist/esm/helpers/postgres.d.ts +4 -4
  188. package/dist/esm/helpers/postgres.js +4 -4
  189. package/dist/esm/index.d.ts +31 -18
  190. package/dist/esm/index.js +30 -17
  191. package/dist/esm/kysely.d.ts +1 -1
  192. package/dist/esm/kysely.js +1 -1
  193. package/dist/esm/operation-node/add-index-node.js +1 -1
  194. package/dist/esm/operation-node/alter-column-node.d.ts +1 -1
  195. package/dist/esm/operation-node/case-node.d.ts +1 -1
  196. package/dist/esm/operation-node/cast-node.d.ts +13 -0
  197. package/dist/esm/operation-node/cast-node.js +17 -0
  198. package/dist/esm/operation-node/column-definition-node.d.ts +2 -0
  199. package/dist/esm/operation-node/data-type-node.d.ts +5 -1
  200. package/dist/esm/operation-node/data-type-node.js +55 -0
  201. package/dist/esm/operation-node/delete-query-node.d.ts +6 -0
  202. package/dist/esm/operation-node/delete-query-node.js +12 -0
  203. package/dist/esm/operation-node/fetch-node.d.ts +15 -0
  204. package/dist/esm/operation-node/fetch-node.js +17 -0
  205. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -4
  206. package/dist/esm/operation-node/having-node.d.ts +1 -1
  207. package/dist/esm/operation-node/insert-query-node.d.ts +6 -1
  208. package/dist/esm/operation-node/insert-query-node.js +5 -0
  209. package/dist/esm/operation-node/join-node.d.ts +1 -1
  210. package/dist/esm/operation-node/matched-node.d.ts +13 -0
  211. package/dist/esm/operation-node/matched-node.js +17 -0
  212. package/dist/esm/operation-node/merge-query-node.d.ts +27 -0
  213. package/dist/esm/operation-node/merge-query-node.js +43 -0
  214. package/dist/esm/operation-node/on-node.d.ts +1 -1
  215. package/dist/esm/operation-node/operation-node-transformer.d.ts +12 -0
  216. package/dist/esm/operation-node/operation-node-transformer.js +62 -0
  217. package/dist/esm/operation-node/operation-node-visitor.d.ts +12 -0
  218. package/dist/esm/operation-node/operation-node-visitor.js +6 -0
  219. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  220. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  221. package/dist/esm/operation-node/operator-node.js +2 -0
  222. package/dist/esm/operation-node/output-node.d.ts +13 -0
  223. package/dist/esm/operation-node/output-node.js +24 -0
  224. package/dist/esm/operation-node/query-node.d.ts +17 -5
  225. package/dist/esm/operation-node/query-node.js +24 -1
  226. package/dist/esm/operation-node/select-query-node.d.ts +6 -0
  227. package/dist/esm/operation-node/select-query-node.js +12 -0
  228. package/dist/esm/operation-node/top-node.d.ts +14 -0
  229. package/dist/esm/operation-node/top-node.js +17 -0
  230. package/dist/esm/operation-node/update-query-node.d.ts +9 -1
  231. package/dist/esm/operation-node/update-query-node.js +11 -0
  232. package/dist/esm/operation-node/where-node.d.ts +1 -1
  233. package/dist/esm/parser/binary-operation-parser.d.ts +1 -1
  234. package/dist/esm/parser/binary-operation-parser.js +2 -2
  235. package/dist/esm/parser/data-type-parser.js +8 -4
  236. package/dist/esm/parser/fetch-parser.d.ts +2 -0
  237. package/dist/esm/parser/fetch-parser.js +15 -0
  238. package/dist/esm/parser/insert-values-parser.d.ts +3 -3
  239. package/dist/esm/parser/merge-parser.d.ts +9 -0
  240. package/dist/esm/parser/merge-parser.js +28 -0
  241. package/dist/esm/parser/returning-parser.d.ts +4 -3
  242. package/dist/esm/parser/table-parser.d.ts +4 -3
  243. package/dist/esm/parser/top-parser.d.ts +2 -0
  244. package/dist/esm/parser/top-parser.js +17 -0
  245. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +2 -2
  246. package/dist/esm/plugin/camel-case/camel-case-plugin.js +2 -2
  247. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
  248. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
  249. package/dist/esm/plugin/with-schema/with-schema-transformer.js +4 -0
  250. package/dist/esm/query-builder/delete-query-builder.d.ts +188 -5
  251. package/dist/esm/query-builder/delete-query-builder.js +139 -5
  252. package/dist/esm/query-builder/function-module.d.ts +5 -5
  253. package/dist/esm/query-builder/insert-query-builder.d.ts +166 -10
  254. package/dist/esm/query-builder/insert-query-builder.js +107 -10
  255. package/dist/esm/query-builder/merge-query-builder.d.ts +721 -0
  256. package/dist/esm/query-builder/merge-query-builder.js +541 -0
  257. package/dist/esm/query-builder/merge-result.d.ts +4 -0
  258. package/dist/esm/query-builder/merge-result.js +7 -0
  259. package/dist/esm/query-builder/on-conflict-builder.d.ts +2 -2
  260. package/dist/esm/query-builder/output-interface.d.ts +95 -0
  261. package/dist/esm/query-builder/output-interface.js +2 -0
  262. package/dist/esm/query-builder/returning-interface.d.ts +2 -0
  263. package/dist/esm/query-builder/select-query-builder.d.ts +177 -17
  264. package/dist/esm/query-builder/select-query-builder.js +20 -0
  265. package/dist/esm/query-builder/update-query-builder.d.ts +175 -10
  266. package/dist/esm/query-builder/update-query-builder.js +119 -7
  267. package/dist/esm/query-builder/update-result.d.ts +9 -0
  268. package/dist/esm/query-builder/update-result.js +9 -0
  269. package/dist/esm/query-builder/where-interface.d.ts +1 -1
  270. package/dist/esm/query-compiler/default-query-compiler.d.ts +12 -0
  271. package/dist/esm/query-compiler/default-query-compiler.js +118 -10
  272. package/dist/esm/query-compiler/query-compiler.d.ts +2 -1
  273. package/dist/esm/query-creator.d.ts +96 -5
  274. package/dist/esm/query-creator.js +64 -2
  275. package/dist/esm/raw-builder/sql.d.ts +5 -5
  276. package/dist/esm/schema/alter-column-builder.js +3 -0
  277. package/dist/esm/schema/alter-table-add-index-builder.d.ts +1 -1
  278. package/dist/esm/schema/alter-table-add-index-builder.js +8 -4
  279. package/dist/esm/schema/alter-table-builder.js +1 -2
  280. package/dist/esm/schema/column-definition-builder.d.ts +18 -1
  281. package/dist/esm/schema/column-definition-builder.js +22 -1
  282. package/dist/esm/util/infer-result.d.ts +2 -1
  283. package/dist/esm/util/object-utils.js +18 -5
  284. package/dist/esm/util/type-utils.d.ts +3 -2
  285. package/package.json +26 -24
@@ -24,7 +24,8 @@ import { KyselyTypeError } from '../util/type-error.js';
24
24
  import { Streamable } from '../util/streamable.js';
25
25
  import { ExpressionOrFactory } from '../parser/expression-parser.js';
26
26
  import { ValueExpression } from '../parser/value-parser.js';
27
- export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
27
+ import { OutputCallback, OutputExpression, OutputInterface, SelectExpressionFromOutputCallback, SelectExpressionFromOutputExpression } from './output-interface.js';
28
+ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OutputInterface<DB, TB, O, 'deleted'>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
28
29
  #private;
29
30
  constructor(props: DeleteQueryBuilderProps);
30
31
  /**
@@ -289,7 +290,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
289
290
  * .selectFrom('person')
290
291
  * .selectAll()
291
292
  * .where(
292
- * sql`coalesce(first_name, last_name)`,
293
+ * sql<string>`coalesce(first_name, last_name)`,
293
294
  * 'like',
294
295
  * '%' + name + '%',
295
296
  * )
@@ -399,6 +400,46 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
399
400
  * ```
400
401
  */
401
402
  clearWhere(): DeleteQueryBuilder<DB, TB, O>;
403
+ /**
404
+ * Changes a `delete from` query into a `delete top from` query.
405
+ *
406
+ * `top` clause is only supported by some dialects like MS SQL Server.
407
+ *
408
+ * ### Examples
409
+ *
410
+ * Delete the first 5 rows:
411
+ *
412
+ * ```ts
413
+ * await db
414
+ * .deleteFrom('person')
415
+ * .top(5)
416
+ * .where('age', '>', 18)
417
+ * .executeTakeFirstOrThrow()
418
+ * ```
419
+ *
420
+ * The generated SQL (MS SQL Server):
421
+ *
422
+ * ```sql
423
+ * delete top(5) from "person" where "age" > @1
424
+ * ```
425
+ *
426
+ * Delete the first 50% of rows:
427
+ *
428
+ * ```ts
429
+ * await db
430
+ * .deleteFrom('person')
431
+ * .top(50, 'percent')
432
+ * .where('age', '>', 18)
433
+ * .executeTakeFirstOrThrow()
434
+ * ```
435
+ *
436
+ * The generated SQL (MS SQL Server):
437
+ *
438
+ * ```sql
439
+ * delete top(50) percent from "person" where "age" > @1
440
+ * ```
441
+ */
442
+ top(expression: number | bigint, modifiers?: 'percent'): DeleteQueryBuilder<DB, TB, O>;
402
443
  /**
403
444
  * Adds a `using` clause to the query.
404
445
  *
@@ -759,9 +800,151 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
759
800
  /**
760
801
  * Adds a `returning *` to an insert/update/delete query on databases
761
802
  * that support `returning` such as PostgreSQL.
803
+ *
804
+ * Also see the {@link returning} method.
762
805
  */
763
806
  returningAll<T extends TB>(table: T): DeleteQueryBuilder<DB, TB, ReturningAllRow<DB, T, O>>;
764
807
  returningAll(): DeleteQueryBuilder<DB, TB, ReturningAllRow<DB, TB, O>>;
808
+ /**
809
+ * Allows you to return data from modified rows.
810
+ *
811
+ * On supported databases like MS SQL Server (MSSQL), this method can be chained
812
+ * to `insert`, `update`, `delete` and `merge` queries to return data.
813
+ *
814
+ * Also see the {@link outputAll} method.
815
+ *
816
+ * ### Examples
817
+ *
818
+ * Return one column:
819
+ *
820
+ * ```ts
821
+ * const { id } = await db
822
+ * .insertInto('person')
823
+ * .output('inserted.id')
824
+ * .values({
825
+ * first_name: 'Jennifer',
826
+ * last_name: 'Aniston'
827
+ * })
828
+ * .executeTakeFirst()
829
+ * ```
830
+ *
831
+ * Return multiple columns:
832
+ *
833
+ * ```ts
834
+ * const { id, first_name } = await db
835
+ * .updateTable('person')
836
+ * .set({ first_name: 'John', last_name: 'Doe' })
837
+ * .output([
838
+ * 'deleted.first_name as old_first_name',
839
+ * 'deleted.last_name as old_last_name',
840
+ * 'inserted.first_name as new_first_name',
841
+ * 'inserted.last_name as new_last_name',
842
+ * ])
843
+ * .where('created_at', '<', new Date())
844
+ * .executeTakeFirst()
845
+ * ```
846
+ *
847
+ * Return arbitrary expressions:
848
+ *
849
+ * ```ts
850
+ * import { sql } from 'kysely'
851
+ *
852
+ * const { id, full_name } = await db
853
+ * .deleteFrom('person')
854
+ * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
855
+ * .where('created_at', '<', new Date())
856
+ * .executeTakeFirst()
857
+ * ```
858
+ *
859
+ * Return the action performed on the row:
860
+ *
861
+ * ```ts
862
+ * await db
863
+ * .mergeInto('person')
864
+ * .using('pet', 'pet.owner_id', 'person.id')
865
+ * .whenMatched()
866
+ * .thenDelete()
867
+ * .whenNotMatched()
868
+ * .thenInsertValues({
869
+ * first_name: 'John',
870
+ * last_name: 'Doe',
871
+ * gender: 'male'
872
+ * })
873
+ * .output([
874
+ * 'inserted.id as inserted_id',
875
+ * 'deleted.id as deleted_id',
876
+ * ])
877
+ * ```
878
+ */
879
+ output<OE extends OutputExpression<DB, TB, 'deleted'>>(selections: readonly OE[]): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
880
+ output<CB extends OutputCallback<DB, TB, 'deleted'>>(callback: CB): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputCallback<CB>>>;
881
+ output<OE extends OutputExpression<DB, TB, 'deleted'>>(selection: OE): DeleteQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
882
+ /**
883
+ * Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
884
+ * that support `output` such as MS SQL Server (MSSQL).
885
+ *
886
+ * Also see the {@link output} method.
887
+ */
888
+ outputAll(table: 'deleted'): DeleteQueryBuilder<DB, TB, ReturningAllRow<DB, TB, O>>;
889
+ /**
890
+ * Clears all `returning` clauses from the query.
891
+ *
892
+ * ### Examples
893
+ *
894
+ * ```ts
895
+ * db.deleteFrom('pet')
896
+ * .returningAll()
897
+ * .where('name', '=', 'Max')
898
+ * .clearReturning()
899
+ * ```
900
+ *
901
+ * The generated SQL(PostgreSQL):
902
+ *
903
+ * ```sql
904
+ * delete from "pet" where "name" = "Max"
905
+ * ```
906
+ */
907
+ clearReturning(): DeleteQueryBuilder<DB, TB, DeleteResult>;
908
+ /**
909
+ * Clears the `limit` clause from the query.
910
+ *
911
+ * ### Examples
912
+ *
913
+ * ```ts
914
+ * db.deleteFrom('pet')
915
+ * .returningAll()
916
+ * .where('name', '=', 'Max')
917
+ * .limit(5)
918
+ * .clearLimit()
919
+ * ```
920
+ *
921
+ * The generated SQL(PostgreSQL):
922
+ *
923
+ * ```sql
924
+ * delete from "pet" where "name" = "Max" returning *
925
+ * ```
926
+ */
927
+ clearLimit(): DeleteQueryBuilder<DB, TB, O>;
928
+ /**
929
+ * Clears the `order by` clause from the query.
930
+ *
931
+ * ### Examples
932
+ *
933
+ * ```ts
934
+ * db.deleteFrom('pet')
935
+ * .returningAll()
936
+ * .where('name', '=', 'Max')
937
+ * .orderBy('id')
938
+ * .clearOrderBy()
939
+ * ```
940
+ *
941
+ * The generated SQL(PostgreSQL):
942
+ *
943
+ * ```sql
944
+ * delete from "pet" where "name" = "Max" returning *
945
+ * ```
946
+ */
947
+ clearOrderBy(): DeleteQueryBuilder<DB, TB, O>;
765
948
  /**
766
949
  * Adds an `order by` clause to the query.
767
950
  *
@@ -927,17 +1110,17 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
927
1110
  /**
928
1111
  * Asserts that query's output row type equals the given type `T`.
929
1112
  *
930
- * This method can be used to simplify excessively complex types to make typescript happy
1113
+ * This method can be used to simplify excessively complex types to make TypeScript happy
931
1114
  * and much faster.
932
1115
  *
933
1116
  * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
934
- * for typescript and you get errors like this:
1117
+ * for TypeScript and you get errors like this:
935
1118
  *
936
1119
  * ```
937
1120
  * error TS2589: Type instantiation is excessively deep and possibly infinite.
938
1121
  * ```
939
1122
  *
940
- * In these case you can often use this method to help typescript a little bit. When you use this
1123
+ * In these case you can often use this method to help TypeScript a little bit. When you use this
941
1124
  * method to assert the output type of a query, Kysely can drop the complex output type that
942
1125
  * consists of multiple nested helper types and replace it with the simple asserted type.
943
1126
  *
@@ -12,6 +12,7 @@ import { LimitNode } from '../operation-node/limit-node.js';
12
12
  import { parseOrderBy, } from '../parser/order-by-parser.js';
13
13
  import { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js';
14
14
  import { parseValueExpression, } from '../parser/value-parser.js';
15
+ import { parseTop } from '../parser/top-parser.js';
15
16
  export class DeleteQueryBuilder {
16
17
  #props;
17
18
  constructor(props) {
@@ -35,6 +36,51 @@ export class DeleteQueryBuilder {
35
36
  queryNode: QueryNode.cloneWithoutWhere(this.#props.queryNode),
36
37
  });
37
38
  }
39
+ /**
40
+ * Changes a `delete from` query into a `delete top from` query.
41
+ *
42
+ * `top` clause is only supported by some dialects like MS SQL Server.
43
+ *
44
+ * ### Examples
45
+ *
46
+ * Delete the first 5 rows:
47
+ *
48
+ * ```ts
49
+ * await db
50
+ * .deleteFrom('person')
51
+ * .top(5)
52
+ * .where('age', '>', 18)
53
+ * .executeTakeFirstOrThrow()
54
+ * ```
55
+ *
56
+ * The generated SQL (MS SQL Server):
57
+ *
58
+ * ```sql
59
+ * delete top(5) from "person" where "age" > @1
60
+ * ```
61
+ *
62
+ * Delete the first 50% of rows:
63
+ *
64
+ * ```ts
65
+ * await db
66
+ * .deleteFrom('person')
67
+ * .top(50, 'percent')
68
+ * .where('age', '>', 18)
69
+ * .executeTakeFirstOrThrow()
70
+ * ```
71
+ *
72
+ * The generated SQL (MS SQL Server):
73
+ *
74
+ * ```sql
75
+ * delete top(50) percent from "person" where "age" > @1
76
+ * ```
77
+ */
78
+ top(expression, modifiers) {
79
+ return new DeleteQueryBuilder({
80
+ ...this.#props,
81
+ queryNode: QueryNode.cloneWithTop(this.#props.queryNode, parseTop(expression, modifiers)),
82
+ });
83
+ }
38
84
  using(tables) {
39
85
  return new DeleteQueryBuilder({
40
86
  ...this.#props,
@@ -77,6 +123,92 @@ export class DeleteQueryBuilder {
77
123
  queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll(table)),
78
124
  });
79
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
+ }
138
+ /**
139
+ * Clears all `returning` clauses from the query.
140
+ *
141
+ * ### Examples
142
+ *
143
+ * ```ts
144
+ * db.deleteFrom('pet')
145
+ * .returningAll()
146
+ * .where('name', '=', 'Max')
147
+ * .clearReturning()
148
+ * ```
149
+ *
150
+ * The generated SQL(PostgreSQL):
151
+ *
152
+ * ```sql
153
+ * delete from "pet" where "name" = "Max"
154
+ * ```
155
+ */
156
+ clearReturning() {
157
+ return new DeleteQueryBuilder({
158
+ ...this.#props,
159
+ queryNode: QueryNode.cloneWithoutReturning(this.#props.queryNode),
160
+ });
161
+ }
162
+ /**
163
+ * Clears the `limit` clause from the query.
164
+ *
165
+ * ### Examples
166
+ *
167
+ * ```ts
168
+ * db.deleteFrom('pet')
169
+ * .returningAll()
170
+ * .where('name', '=', 'Max')
171
+ * .limit(5)
172
+ * .clearLimit()
173
+ * ```
174
+ *
175
+ * The generated SQL(PostgreSQL):
176
+ *
177
+ * ```sql
178
+ * delete from "pet" where "name" = "Max" returning *
179
+ * ```
180
+ */
181
+ clearLimit() {
182
+ return new DeleteQueryBuilder({
183
+ ...this.#props,
184
+ queryNode: DeleteQueryNode.cloneWithoutLimit(this.#props.queryNode),
185
+ });
186
+ }
187
+ /**
188
+ * Clears the `order by` clause from the query.
189
+ *
190
+ * ### Examples
191
+ *
192
+ * ```ts
193
+ * db.deleteFrom('pet')
194
+ * .returningAll()
195
+ * .where('name', '=', 'Max')
196
+ * .orderBy('id')
197
+ * .clearOrderBy()
198
+ * ```
199
+ *
200
+ * The generated SQL(PostgreSQL):
201
+ *
202
+ * ```sql
203
+ * delete from "pet" where "name" = "Max" returning *
204
+ * ```
205
+ */
206
+ clearOrderBy() {
207
+ return new DeleteQueryBuilder({
208
+ ...this.#props,
209
+ queryNode: DeleteQueryNode.cloneWithoutOrderBy(this.#props.queryNode),
210
+ });
211
+ }
80
212
  /**
81
213
  * Adds an `order by` clause to the query.
82
214
  *
@@ -265,17 +397,17 @@ export class DeleteQueryBuilder {
265
397
  /**
266
398
  * Asserts that query's output row type equals the given type `T`.
267
399
  *
268
- * This method can be used to simplify excessively complex types to make typescript happy
400
+ * This method can be used to simplify excessively complex types to make TypeScript happy
269
401
  * and much faster.
270
402
  *
271
403
  * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
272
- * for typescript and you get errors like this:
404
+ * for TypeScript and you get errors like this:
273
405
  *
274
406
  * ```
275
407
  * error TS2589: Type instantiation is excessively deep and possibly infinite.
276
408
  * ```
277
409
  *
278
- * In these case you can often use this method to help typescript a little bit. When you use this
410
+ * In these case you can often use this method to help TypeScript a little bit. When you use this
279
411
  * method to assert the output type of a query, Kysely can drop the complex output type that
280
412
  * consists of multiple nested helper types and replace it with the simple asserted type.
281
413
  *
@@ -328,9 +460,11 @@ export class DeleteQueryBuilder {
328
460
  */
329
461
  async execute() {
330
462
  const compiledQuery = this.compile();
331
- const query = compiledQuery.query;
332
463
  const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
333
- if (this.#props.executor.adapter.supportsReturning && query.returning) {
464
+ const { adapter } = this.#props.executor;
465
+ const query = compiledQuery.query;
466
+ if ((query.returning && adapter.supportsReturning) ||
467
+ (query.output && adapter.supportsOutput)) {
334
468
  return result.rows;
335
469
  }
336
470
  return [
@@ -106,7 +106,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
106
106
  * ```ts
107
107
  * db.selectFrom('person')
108
108
  * .selectAll('person')
109
- * .where(sql`upper(first_name)`, '=', 'JENNIFER')
109
+ * .where(sql<string>`upper(first_name)`, '=', 'JENNIFER')
110
110
  * ```
111
111
  */
112
112
  <O, RE extends ReferenceExpression<DB, TB> = ReferenceExpression<DB, TB>>(name: string, args?: ReadonlyArray<RE>): ExpressionWrapper<DB, TB, O>;
@@ -173,7 +173,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
173
173
  * If this function is used in a `select` statement, the type of the selected
174
174
  * expression will be `number | string` by default. This is because Kysely can't know the
175
175
  * 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
176
+ * JavaScript number and a string is returned instead. Most drivers allow you
177
177
  * to configure the output type of large numbers and Kysely can't know if you've
178
178
  * done so.
179
179
  *
@@ -292,7 +292,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
292
292
  * If this function is used in a `select` statement, the type of the selected
293
293
  * expression will be `number | string | bigint` by default. This is because
294
294
  * 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.
295
+ * be larger than the largest JavaScript number and a string is returned instead.
296
296
  * Most drivers allow you to configure the output type of large numbers and Kysely
297
297
  * can't know if you've done so.
298
298
  *
@@ -344,7 +344,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
344
344
  * If this is used in a `select` statement, the type of the selected expression
345
345
  * will be `number | string | bigint` by default. This is because Kysely
346
346
  * 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
347
+ * than the largest JavaScript number and a string is returned instead. Most
348
348
  * drivers allow you to configure the output type of large numbers and Kysely
349
349
  * can't know if you've done so.
350
350
  *
@@ -513,7 +513,7 @@ export interface FunctionModule<DB, TB extends keyof DB> {
513
513
  * If this function is used in a `select` statement, the type of the selected
514
514
  * expression will be `number | string` by default. This is because Kysely can't know the
515
515
  * 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
516
+ * JavaScript number and a string is returned instead. Most drivers allow you
517
517
  * to configure the output type of large numbers and Kysely can't know if you've
518
518
  * done so.
519
519
  *