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
@@ -0,0 +1,541 @@
1
+ /// <reference types="./merge-query-builder.d.ts" />
2
+ import { InsertQueryNode } from '../operation-node/insert-query-node.js';
3
+ import { MergeQueryNode } from '../operation-node/merge-query-node.js';
4
+ import { QueryNode } from '../operation-node/query-node.js';
5
+ import { UpdateQueryNode } from '../operation-node/update-query-node.js';
6
+ import { parseInsertExpression, } from '../parser/insert-values-parser.js';
7
+ import { parseJoin, } from '../parser/join-parser.js';
8
+ import { parseMergeThen, parseMergeWhen } from '../parser/merge-parser.js';
9
+ import { parseSelectAll, parseSelectArg } from '../parser/select-parser.js';
10
+ import { parseTop } from '../parser/top-parser.js';
11
+ import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';
12
+ import { freeze } from '../util/object-utils.js';
13
+ import { preventAwait } from '../util/prevent-await.js';
14
+ import { MergeResult } from './merge-result.js';
15
+ import { NoResultError, isNoResultErrorConstructor, } from './no-result-error.js';
16
+ import { UpdateQueryBuilder } from './update-query-builder.js';
17
+ export class MergeQueryBuilder {
18
+ #props;
19
+ constructor(props) {
20
+ this.#props = freeze(props);
21
+ }
22
+ /**
23
+ * Changes a `merge into` query to an `merge top into` query.
24
+ *
25
+ * `top` clause is only supported by some dialects like MS SQL Server.
26
+ *
27
+ * ### Examples
28
+ *
29
+ * Affect 5 matched rows at most:
30
+ *
31
+ * ```ts
32
+ * await db.mergeInto('person')
33
+ * .top(5)
34
+ * .using('pet', 'person.id', 'pet.owner_id')
35
+ * .whenMatched()
36
+ * .thenDelete()
37
+ * .execute()
38
+ * ```
39
+ *
40
+ * The generated SQL (MS SQL Server):
41
+ *
42
+ * ```sql
43
+ * merge top(5) into "person"
44
+ * using "pet" on "person"."id" = "pet"."owner_id"
45
+ * when matched then
46
+ * delete
47
+ * ```
48
+ *
49
+ * Affect 50% of matched rows:
50
+ *
51
+ * ```ts
52
+ * await db.mergeInto('person')
53
+ * .top(50, 'percent')
54
+ * .using('pet', 'person.id', 'pet.owner_id')
55
+ * .whenMatched()
56
+ * .thenDelete()
57
+ * .execute()
58
+ * ```
59
+ *
60
+ * The generated SQL (MS SQL Server):
61
+ *
62
+ * ```sql
63
+ * merge top(50) percent into "person"
64
+ * using "pet" on "person"."id" = "pet"."owner_id"
65
+ * when matched then
66
+ * delete
67
+ * ```
68
+ */
69
+ top(expression, modifiers) {
70
+ return new MergeQueryBuilder({
71
+ ...this.#props,
72
+ queryNode: QueryNode.cloneWithTop(this.#props.queryNode, parseTop(expression, modifiers)),
73
+ });
74
+ }
75
+ using(...args) {
76
+ return new WheneableMergeQueryBuilder({
77
+ ...this.#props,
78
+ queryNode: MergeQueryNode.cloneWithUsing(this.#props.queryNode, parseJoin('Using', args)),
79
+ });
80
+ }
81
+ output(args) {
82
+ return new MergeQueryBuilder({
83
+ ...this.#props,
84
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectArg(args)),
85
+ });
86
+ }
87
+ outputAll(table) {
88
+ return new MergeQueryBuilder({
89
+ ...this.#props,
90
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectAll(table)),
91
+ });
92
+ }
93
+ }
94
+ preventAwait(MergeQueryBuilder, "don't await MergeQueryBuilder instances directly. To execute the query you need to call `execute` when available.");
95
+ export class WheneableMergeQueryBuilder {
96
+ #props;
97
+ constructor(props) {
98
+ this.#props = freeze(props);
99
+ }
100
+ /**
101
+ * See {@link MergeQueryBuilder.top}.
102
+ */
103
+ top(expression, modifiers) {
104
+ return new WheneableMergeQueryBuilder({
105
+ ...this.#props,
106
+ queryNode: QueryNode.cloneWithTop(this.#props.queryNode, parseTop(expression, modifiers)),
107
+ });
108
+ }
109
+ /**
110
+ * Adds a simple `when matched` clause to the query.
111
+ *
112
+ * For a `when matched` clause with an `and` condition, see {@link whenMatchedAnd}.
113
+ *
114
+ * For a simple `when not matched` clause, see {@link whenNotMatched}.
115
+ *
116
+ * For a `when not matched` clause with an `and` condition, see {@link whenNotMatchedAnd}.
117
+ *
118
+ * ### Examples
119
+ *
120
+ * ```ts
121
+ * const result = await db.mergeInto('person')
122
+ * .using('pet', 'person.id', 'pet.owner_id')
123
+ * .whenMatched()
124
+ * .thenDelete()
125
+ * .execute()
126
+ * ```
127
+ *
128
+ * The generated SQL (PostgreSQL):
129
+ *
130
+ * ```sql
131
+ * merge into "person"
132
+ * using "pet" on "person"."id" = "pet"."owner_id"
133
+ * when matched then
134
+ * delete
135
+ * ```
136
+ */
137
+ whenMatched() {
138
+ return this.#whenMatched([]);
139
+ }
140
+ whenMatchedAnd(...args) {
141
+ return this.#whenMatched(args);
142
+ }
143
+ /**
144
+ * Adds the `when matched` clause to the query with an `and` condition. But unlike
145
+ * {@link whenMatchedAnd}, this method accepts a column reference as the 3rd argument.
146
+ *
147
+ * This method is similar to {@link SelectQueryBuilder.whereRef}, so see the documentation
148
+ * for that method for more examples.
149
+ */
150
+ whenMatchedAndRef(lhs, op, rhs) {
151
+ return this.#whenMatched([lhs, op, rhs], true);
152
+ }
153
+ #whenMatched(args, refRight) {
154
+ return new MatchedThenableMergeQueryBuilder({
155
+ ...this.#props,
156
+ queryNode: MergeQueryNode.cloneWithWhen(this.#props.queryNode, parseMergeWhen({ isMatched: true }, args, refRight)),
157
+ });
158
+ }
159
+ /**
160
+ * Adds a simple `when not matched` clause to the query.
161
+ *
162
+ * For a `when not matched` clause with an `and` condition, see {@link whenNotMatchedAnd}.
163
+ *
164
+ * For a simple `when matched` clause, see {@link whenMatched}.
165
+ *
166
+ * For a `when matched` clause with an `and` condition, see {@link whenMatchedAnd}.
167
+ *
168
+ * ### Examples
169
+ *
170
+ * ```ts
171
+ * const result = await db.mergeInto('person')
172
+ * .using('pet', 'person.id', 'pet.owner_id')
173
+ * .whenNotMatched()
174
+ * .thenInsertValues({
175
+ * first_name: 'John',
176
+ * last_name: 'Doe',
177
+ * })
178
+ * .execute()
179
+ * ```
180
+ *
181
+ * The generated SQL (PostgreSQL):
182
+ *
183
+ * ```sql
184
+ * merge into "person"
185
+ * using "pet" on "person"."id" = "pet"."owner_id"
186
+ * when not matched then
187
+ * insert ("first_name", "last_name") values ($1, $2)
188
+ * ```
189
+ */
190
+ whenNotMatched() {
191
+ return this.#whenNotMatched([]);
192
+ }
193
+ whenNotMatchedAnd(...args) {
194
+ return this.#whenNotMatched(args);
195
+ }
196
+ /**
197
+ * Adds the `when not matched` clause to the query with an `and` condition. But unlike
198
+ * {@link whenNotMatchedAnd}, this method accepts a column reference as the 3rd argument.
199
+ *
200
+ * Unlike {@link whenMatchedAndRef}, you cannot reference columns from the target table.
201
+ *
202
+ * This method is similar to {@link SelectQueryBuilder.whereRef}, so see the documentation
203
+ * for that method for more examples.
204
+ */
205
+ whenNotMatchedAndRef(lhs, op, rhs) {
206
+ return this.#whenNotMatched([lhs, op, rhs], true);
207
+ }
208
+ /**
209
+ * Adds a simple `when not matched by source` clause to the query.
210
+ *
211
+ * Supported in MS SQL Server.
212
+ *
213
+ * Similar to {@link whenNotMatched}, but returns a {@link MatchedThenableMergeQueryBuilder}.
214
+ */
215
+ whenNotMatchedBySource() {
216
+ return this.#whenNotMatched([], false, true);
217
+ }
218
+ whenNotMatchedBySourceAnd(...args) {
219
+ return this.#whenNotMatched(args, false, true);
220
+ }
221
+ /**
222
+ * Adds the `when not matched by source` clause to the query with an `and` condition.
223
+ *
224
+ * Similar to {@link whenNotMatchedAndRef}, but you can reference columns from
225
+ * the target table, and not from source table and returns a {@link MatchedThenableMergeQueryBuilder}.
226
+ */
227
+ whenNotMatchedBySourceAndRef(lhs, op, rhs) {
228
+ return this.#whenNotMatched([lhs, op, rhs], true, true);
229
+ }
230
+ output(args) {
231
+ return new WheneableMergeQueryBuilder({
232
+ ...this.#props,
233
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectArg(args)),
234
+ });
235
+ }
236
+ outputAll(table) {
237
+ return new WheneableMergeQueryBuilder({
238
+ ...this.#props,
239
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectAll(table)),
240
+ });
241
+ }
242
+ #whenNotMatched(args, refRight = false, bySource = false) {
243
+ const props = {
244
+ ...this.#props,
245
+ queryNode: MergeQueryNode.cloneWithWhen(this.#props.queryNode, parseMergeWhen({ isMatched: false, bySource }, args, refRight)),
246
+ };
247
+ const Builder = bySource
248
+ ? MatchedThenableMergeQueryBuilder
249
+ : NotMatchedThenableMergeQueryBuilder;
250
+ return new Builder(props);
251
+ }
252
+ /**
253
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
254
+ * what the provided function returns.
255
+ *
256
+ * If you want to conditionally call a method on `this`, see
257
+ * the {@link $if} method.
258
+ *
259
+ * ### Examples
260
+ *
261
+ * The next example uses a helper function `log` to log a query:
262
+ *
263
+ * ```ts
264
+ * function log<T extends Compilable>(qb: T): T {
265
+ * console.log(qb.compile())
266
+ * return qb
267
+ * }
268
+ *
269
+ * db.updateTable('person')
270
+ * .set(values)
271
+ * .$call(log)
272
+ * .execute()
273
+ * ```
274
+ */
275
+ $call(func) {
276
+ return func(this);
277
+ }
278
+ /**
279
+ * Call `func(this)` if `condition` is true.
280
+ *
281
+ * This method is especially handy with optional selects. Any `returning` or `returningAll`
282
+ * method calls add columns as optional fields to the output type when called inside
283
+ * the `func` callback. This is because we can't know if those selections were actually
284
+ * made before running the code.
285
+ *
286
+ * You can also call any other methods inside the callback.
287
+ *
288
+ * ### Examples
289
+ *
290
+ * ```ts
291
+ * async function updatePerson(id: number, updates: UpdateablePerson, returnLastName: boolean) {
292
+ * return await db
293
+ * .updateTable('person')
294
+ * .set(updates)
295
+ * .where('id', '=', id)
296
+ * .returning(['id', 'first_name'])
297
+ * .$if(returnLastName, (qb) => qb.returning('last_name'))
298
+ * .executeTakeFirstOrThrow()
299
+ * }
300
+ * ```
301
+ *
302
+ * Any selections added inside the `if` callback will be added as optional fields to the
303
+ * output type since we can't know if the selections were actually made before running
304
+ * the code. In the example above the return type of the `updatePerson` function is:
305
+ *
306
+ * ```ts
307
+ * {
308
+ * id: number
309
+ * first_name: string
310
+ * last_name?: string
311
+ * }
312
+ * ```
313
+ */
314
+ $if(condition, func) {
315
+ if (condition) {
316
+ return func(this);
317
+ }
318
+ return new WheneableMergeQueryBuilder({
319
+ ...this.#props,
320
+ });
321
+ }
322
+ toOperationNode() {
323
+ return this.#props.executor.transformQuery(this.#props.queryNode, this.#props.queryId);
324
+ }
325
+ compile() {
326
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
327
+ }
328
+ /**
329
+ * Executes the query and returns an array of rows.
330
+ *
331
+ * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
332
+ */
333
+ async execute() {
334
+ const compiledQuery = this.compile();
335
+ const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
336
+ if (compiledQuery.query.output &&
337
+ this.#props.executor.adapter.supportsOutput) {
338
+ return result.rows;
339
+ }
340
+ return [new MergeResult(result.numAffectedRows)];
341
+ }
342
+ /**
343
+ * Executes the query and returns the first result or undefined if
344
+ * the query returned no result.
345
+ */
346
+ async executeTakeFirst() {
347
+ const [result] = await this.execute();
348
+ return result;
349
+ }
350
+ /**
351
+ * Executes the query and returns the first result or throws if
352
+ * the query returned no result.
353
+ *
354
+ * By default an instance of {@link NoResultError} is thrown, but you can
355
+ * provide a custom error class, or callback as the only argument to throw a different
356
+ * error.
357
+ */
358
+ async executeTakeFirstOrThrow(errorConstructor = NoResultError) {
359
+ const result = await this.executeTakeFirst();
360
+ if (result === undefined) {
361
+ const error = isNoResultErrorConstructor(errorConstructor)
362
+ ? new errorConstructor(this.toOperationNode())
363
+ : errorConstructor(this.toOperationNode());
364
+ throw error;
365
+ }
366
+ return result;
367
+ }
368
+ }
369
+ preventAwait(WheneableMergeQueryBuilder, "don't await WheneableMergeQueryBuilder instances directly. To execute the query you need to call `execute`.");
370
+ export class MatchedThenableMergeQueryBuilder {
371
+ #props;
372
+ constructor(props) {
373
+ this.#props = freeze(props);
374
+ }
375
+ /**
376
+ * Performs the `delete` action.
377
+ *
378
+ * To perform the `do nothing` action, see {@link thenDoNothing}.
379
+ *
380
+ * To perform the `update` action, see {@link thenUpdate} or {@link thenUpdateSet}.
381
+ *
382
+ * ### Examples
383
+ *
384
+ * ```ts
385
+ * const result = await db.mergeInto('person')
386
+ * .using('pet', 'person.id', 'pet.owner_id')
387
+ * .whenMatched()
388
+ * .thenDelete()
389
+ * .execute()
390
+ * ```
391
+ *
392
+ * The generated SQL (PostgreSQL):
393
+ *
394
+ * ```sql
395
+ * merge into "person"
396
+ * using "pet" on "person"."id" = "pet"."owner_id"
397
+ * when matched then
398
+ * delete
399
+ * ```
400
+ */
401
+ thenDelete() {
402
+ return new WheneableMergeQueryBuilder({
403
+ ...this.#props,
404
+ queryNode: MergeQueryNode.cloneWithThen(this.#props.queryNode, parseMergeThen('delete')),
405
+ });
406
+ }
407
+ /**
408
+ * Performs the `do nothing` action.
409
+ *
410
+ * This is supported in PostgreSQL.
411
+ *
412
+ * To perform the `delete` action, see {@link thenDelete}.
413
+ *
414
+ * To perform the `update` action, see {@link thenUpdate} or {@link thenUpdateSet}.
415
+ *
416
+ * ### Examples
417
+ *
418
+ * ```ts
419
+ * const result = await db.mergeInto('person')
420
+ * .using('pet', 'person.id', 'pet.owner_id')
421
+ * .whenMatched()
422
+ * .thenDoNothing()
423
+ * .execute()
424
+ * ```
425
+ *
426
+ * The generated SQL (PostgreSQL):
427
+ *
428
+ * ```sql
429
+ * merge into "person"
430
+ * using "pet" on "person"."id" = "pet"."owner_id"
431
+ * when matched then
432
+ * do nothing
433
+ * ```
434
+ */
435
+ thenDoNothing() {
436
+ return new WheneableMergeQueryBuilder({
437
+ ...this.#props,
438
+ queryNode: MergeQueryNode.cloneWithThen(this.#props.queryNode, parseMergeThen('do nothing')),
439
+ });
440
+ }
441
+ /**
442
+ * Perform an `update` operation with a full-fledged {@link UpdateQueryBuilder}.
443
+ * This is handy when multiple `set` invocations are needed.
444
+ *
445
+ * For a shorthand version of this method, see {@link thenUpdateSet}.
446
+ *
447
+ * To perform the `delete` action, see {@link thenDelete}.
448
+ *
449
+ * To perform the `do nothing` action, see {@link thenDoNothing}.
450
+ *
451
+ * ### Examples
452
+ *
453
+ * ```ts
454
+ * import { sql } from 'kysely'
455
+ *
456
+ * const result = await db.mergeInto('person')
457
+ * .using('pet', 'person.id', 'pet.owner_id')
458
+ * .whenMatched()
459
+ * .thenUpdate((ub) => ub
460
+ * .set(sql`metadata['has_pets']`, 'Y')
461
+ * .set({
462
+ * updated_at: Date.now(),
463
+ * })
464
+ * )
465
+ * .execute()
466
+ * ```
467
+ *
468
+ * The generated SQL (PostgreSQL):
469
+ *
470
+ * ```sql
471
+ * merge into "person"
472
+ * using "pet" on "person"."id" = "pet"."owner_id"
473
+ * when matched then
474
+ * update set metadata['has_pets'] = $1, "updated_at" = $2
475
+ * ```
476
+ */
477
+ thenUpdate(set) {
478
+ return new WheneableMergeQueryBuilder({
479
+ ...this.#props,
480
+ queryNode: MergeQueryNode.cloneWithThen(this.#props.queryNode, parseMergeThen(set(new UpdateQueryBuilder({
481
+ queryId: this.#props.queryId,
482
+ executor: NOOP_QUERY_EXECUTOR,
483
+ queryNode: UpdateQueryNode.createWithoutTable(),
484
+ })))),
485
+ });
486
+ }
487
+ thenUpdateSet(...args) {
488
+ // @ts-ignore not sure how to type this so it won't complain about set(...args).
489
+ return this.thenUpdate((ub) => ub.set(...args));
490
+ }
491
+ }
492
+ preventAwait(MatchedThenableMergeQueryBuilder, "don't await MatchedThenableMergeQueryBuilder instances directly. To execute the query you need to call `execute` when available.");
493
+ export class NotMatchedThenableMergeQueryBuilder {
494
+ #props;
495
+ constructor(props) {
496
+ this.#props = freeze(props);
497
+ }
498
+ /**
499
+ * Performs the `do nothing` action.
500
+ *
501
+ * This is supported in PostgreSQL.
502
+ *
503
+ * To perform the `insert` action, see {@link thenInsertValues}.
504
+ *
505
+ * ### Examples
506
+ *
507
+ * ```ts
508
+ * const result = await db.mergeInto('person')
509
+ * .using('pet', 'person.id', 'pet.owner_id')
510
+ * .whenNotMatched()
511
+ * .thenDoNothing()
512
+ * .execute()
513
+ * ```
514
+ *
515
+ * The generated SQL (PostgreSQL):
516
+ *
517
+ * ```sql
518
+ * merge into "person"
519
+ * using "pet" on "person"."id" = "pet"."owner_id"
520
+ * when not matched then
521
+ * do nothing
522
+ * ```
523
+ */
524
+ thenDoNothing() {
525
+ return new WheneableMergeQueryBuilder({
526
+ ...this.#props,
527
+ queryNode: MergeQueryNode.cloneWithThen(this.#props.queryNode, parseMergeThen('do nothing')),
528
+ });
529
+ }
530
+ thenInsertValues(insert) {
531
+ const [columns, values] = parseInsertExpression(insert);
532
+ return new WheneableMergeQueryBuilder({
533
+ ...this.#props,
534
+ queryNode: MergeQueryNode.cloneWithThen(this.#props.queryNode, parseMergeThen(InsertQueryNode.cloneWith(InsertQueryNode.createWithoutInto(), {
535
+ columns,
536
+ values,
537
+ }))),
538
+ });
539
+ }
540
+ }
541
+ preventAwait(NotMatchedThenableMergeQueryBuilder, "don't await NotMatchedThenableMergeQueryBuilder instances directly. To execute the query you need to call `execute` when available.");
@@ -0,0 +1,4 @@
1
+ export declare class MergeResult {
2
+ readonly numChangedRows: bigint | undefined;
3
+ constructor(numChangedRows: bigint | undefined);
4
+ }
@@ -0,0 +1,7 @@
1
+ /// <reference types="./merge-result.d.ts" />
2
+ export class MergeResult {
3
+ numChangedRows;
4
+ constructor(numChangedRows) {
5
+ this.numChangedRows = numChangedRows;
6
+ }
7
+ }
@@ -303,7 +303,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
303
303
  * .selectFrom('person')
304
304
  * .selectAll()
305
305
  * .where(
306
- * sql`coalesce(first_name, last_name)`,
306
+ * sql<string>`coalesce(first_name, last_name)`,
307
307
  * 'like',
308
308
  * '%' + name + '%',
309
309
  * )
@@ -767,7 +767,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
767
767
  * .selectFrom('person')
768
768
  * .selectAll()
769
769
  * .where(
770
- * sql`coalesce(first_name, last_name)`,
770
+ * sql<string>`coalesce(first_name, last_name)`,
771
771
  * 'like',
772
772
  * '%' + name + '%',
773
773
  * )
@@ -0,0 +1,95 @@
1
+ import { ExpressionBuilder } from '../expression/expression-builder.js';
2
+ import { AliasedExpressionOrFactory } from '../parser/expression-parser.js';
3
+ import { ReturningAllRow, ReturningRow } from '../parser/returning-parser.js';
4
+ import { AnyAliasedColumnWithTable, AnyColumnWithTable } from '../util/type-utils.js';
5
+ export interface OutputInterface<DB, TB extends keyof DB, O, OP extends OutputPrefix = OutputPrefix> {
6
+ /**
7
+ * Allows you to return data from modified rows.
8
+ *
9
+ * On supported databases like MS SQL Server (MSSQL), this method can be chained
10
+ * to `insert`, `update`, `delete` and `merge` queries to return data.
11
+ *
12
+ * Also see the {@link outputAll} method.
13
+ *
14
+ * ### Examples
15
+ *
16
+ * Return one column:
17
+ *
18
+ * ```ts
19
+ * const { id } = await db
20
+ * .insertInto('person')
21
+ * .output('inserted.id')
22
+ * .values({
23
+ * first_name: 'Jennifer',
24
+ * last_name: 'Aniston'
25
+ * })
26
+ * .executeTakeFirst()
27
+ * ```
28
+ *
29
+ * Return multiple columns:
30
+ *
31
+ * ```ts
32
+ * const { id, first_name } = await db
33
+ * .updateTable('person')
34
+ * .set({ first_name: 'John', last_name: 'Doe' })
35
+ * .output([
36
+ * 'deleted.first_name as old_first_name',
37
+ * 'deleted.last_name as old_last_name',
38
+ * 'inserted.first_name as new_first_name',
39
+ * 'inserted.last_name as new_last_name',
40
+ * ])
41
+ * .where('created_at', '<', new Date())
42
+ * .executeTakeFirst()
43
+ * ```
44
+ *
45
+ * Return arbitrary expressions:
46
+ *
47
+ * ```ts
48
+ * import { sql } from 'kysely'
49
+ *
50
+ * const { id, full_name } = await db
51
+ * .deleteFrom('person')
52
+ * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
53
+ * .where('created_at', '<', new Date())
54
+ * .executeTakeFirst()
55
+ * ```
56
+ *
57
+ * Return the action performed on the row:
58
+ *
59
+ * ```ts
60
+ * await db
61
+ * .mergeInto('person')
62
+ * .using('pet', 'pet.owner_id', 'person.id')
63
+ * .whenMatched()
64
+ * .thenDelete()
65
+ * .whenNotMatched()
66
+ * .thenInsertValues({
67
+ * first_name: 'John',
68
+ * last_name: 'Doe',
69
+ * gender: 'male'
70
+ * })
71
+ * .output([
72
+ * 'inserted.id as inserted_id',
73
+ * 'deleted.id as deleted_id',
74
+ * ])
75
+ * ```
76
+ */
77
+ output<OE extends OutputExpression<DB, TB, OP>>(selections: ReadonlyArray<OE>): OutputInterface<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>, OP>;
78
+ output<CB extends OutputCallback<DB, TB, OP>>(callback: CB): OutputInterface<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputCallback<CB>>, OP>;
79
+ output<OE extends OutputExpression<DB, TB, OP>>(selection: OE): OutputInterface<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>, OP>;
80
+ /**
81
+ * Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
82
+ * that support `output` such as MS SQL Server (MSSQL).
83
+ *
84
+ * Also see the {@link output} method.
85
+ */
86
+ outputAll(table: OP): OutputInterface<DB, TB, ReturningAllRow<DB, TB, O>, OP>;
87
+ }
88
+ export type OutputPrefix = 'deleted' | 'inserted';
89
+ export type OutputDatabase<DB, TB extends keyof DB, OP extends OutputPrefix = OutputPrefix> = {
90
+ [K in OP]: DB[TB];
91
+ };
92
+ export type OutputExpression<DB, TB extends keyof DB, OP extends OutputPrefix = OutputPrefix, ODB = OutputDatabase<DB, TB, OP>, OTB extends keyof ODB = keyof ODB> = AnyAliasedColumnWithTable<ODB, OTB> | AnyColumnWithTable<ODB, OTB> | AliasedExpressionOrFactory<ODB, OTB>;
93
+ export type OutputCallback<DB, TB extends keyof DB, OP extends OutputPrefix = OutputPrefix> = (eb: ExpressionBuilder<OutputDatabase<DB, TB, OP>, OP>) => ReadonlyArray<OutputExpression<DB, TB, OP>>;
94
+ export type SelectExpressionFromOutputExpression<OE> = OE extends `${OutputPrefix}.${infer C}` ? C : OE;
95
+ export type SelectExpressionFromOutputCallback<CB> = CB extends (eb: ExpressionBuilder<any, any>) => ReadonlyArray<infer OE> ? SelectExpressionFromOutputExpression<OE> : never;
@@ -0,0 +1,2 @@
1
+ /// <reference types="./output-interface.d.ts" />
2
+ export {};
@@ -67,6 +67,8 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
67
67
  /**
68
68
  * Adds a `returning *` to an insert/update/delete query on databases
69
69
  * that support `returning` such as PostgreSQL.
70
+ *
71
+ * Also see the {@link returning} method.
70
72
  */
71
73
  returningAll(): ReturningInterface<DB, TB, Selectable<DB[TB]>>;
72
74
  }