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
@@ -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
  }
@@ -26,6 +26,8 @@ import { ExpressionOrFactory } from '../parser/expression-parser.js';
26
26
  import { ExpressionWrapper } from '../expression/expression-wrapper.js';
27
27
  import { SelectQueryBuilderExpression } from './select-query-builder-expression.js';
28
28
  import { ValueExpression } from '../parser/value-parser.js';
29
+ import { FetchModifier } from '../operation-node/fetch-node.js';
30
+ import { TopModifier } from '../operation-node/top-node.js';
29
31
  export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInterface<DB, TB>, HavingInterface<DB, TB>, SelectQueryBuilderExpression<O>, Compilable<O>, Explainable, Streamable<O> {
30
32
  /**
31
33
  * Adds a `where` expression to the query.
@@ -289,7 +291,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
289
291
  * .selectFrom('person')
290
292
  * .selectAll()
291
293
  * .where(
292
- * sql`coalesce(first_name, last_name)`,
294
+ * sql<string>`coalesce(first_name, last_name)`,
293
295
  * 'like',
294
296
  * '%' + name + '%',
295
297
  * )
@@ -540,6 +542,45 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
540
542
  * In case you use the {@link sql} tag you need to specify the type of the expression
541
543
  * (in this example `string`).
542
544
  *
545
+ * <!-- siteExample("select", "Not null", 51) -->
546
+ *
547
+ * Sometimes you can be sure something's not null, but Kysely isn't able to infer
548
+ * it. For example calling `where('last_name', 'is not', null)` doesn't make
549
+ * `last_name` not null in the result type, but unless you have other where statements
550
+ * you can be sure it's never null.
551
+ *
552
+ * Kysely has a couple of helpers for dealing with these cases: `$notNull()` and `$narrowType`.
553
+ * Both are used in the following example:
554
+ *
555
+ * ```ts
556
+ * import { NotNull } from 'kysely'
557
+ * import { jsonObjectFrom } from 'kysely/helpers/postgres'
558
+ *
559
+ * const persons = db
560
+ * .selectFrom('person')
561
+ * .select((eb) => [
562
+ * 'last_name',
563
+ * // Let's assume we know the person has at least one
564
+ * // pet. We can use the `.$notNull()` method to make
565
+ * // the expression not null. You could just as well
566
+ * // add `pet` to the `$narrowType` call below.
567
+ * jsonObjectFrom(
568
+ * eb.selectFrom('pet')
569
+ * .selectAll()
570
+ * .limit(1)
571
+ * .whereRef('person.id', '=', 'pet.owner_id')
572
+ * ).$notNull().as('pet')
573
+ * ])
574
+ * .where('last_name', 'is not', null)
575
+ * // $narrowType can be used to narrow the output type.
576
+ * // The special `NotNull` type can be used to make a
577
+ * // selection not null. You could add `pet: NotNull`
578
+ * // here and omit the `$notNull()` call on it.
579
+ * // Use whichever way you prefer.
580
+ * .$narrowType<{ last_name: NotNull }>()
581
+ * .execute()
582
+ * ```
583
+ *
543
584
  * All the examples above assume you know the column names at compile time.
544
585
  * While it's better to build your code like that (that way you also know
545
586
  * the types) sometimes it's not possible or you just prefer to write more
@@ -809,8 +850,10 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
809
850
  * builder for creating more complex joins. The join builder has a
810
851
  * bunch of `on*` methods for building the `on` clause of the join.
811
852
  * There's basically an equivalent for every `where` method
812
- * (`on`, `onRef` etc.). You can do all the same things with the
813
- * `on` method that you can with the corresponding `where` method.
853
+ * (`on`, `onRef` etc.).
854
+ *
855
+ * You can do all the same things with the
856
+ * `on` method that you can with the corresponding `where` method (like [OR expressions for example](https://kysely.dev/docs/examples/WHERE/or-where)).
814
857
  * See the `where` method documentation for more examples.
815
858
  *
816
859
  * ```ts
@@ -820,6 +863,10 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
820
863
  * (join) => join
821
864
  * .onRef('pet.owner_id', '=', 'person.id')
822
865
  * .on('pet.name', '=', 'Doggo')
866
+ * .on((eb) => eb.or([
867
+ * eb('person.age', '>', 18),
868
+ * eb('person.age', '<', 100)
869
+ * ]))
823
870
  * )
824
871
  * .selectAll()
825
872
  * .execute()
@@ -833,6 +880,10 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
833
880
  * inner join "pet"
834
881
  * on "pet"."owner_id" = "person"."id"
835
882
  * and "pet"."name" = $1
883
+ * and (
884
+ * "person"."age" > $2
885
+ * OR "person"."age" < $3
886
+ * )
836
887
  * ```
837
888
  *
838
889
  * <!-- siteExample("join", "Subquery join", 40) -->
@@ -992,7 +1043,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
992
1043
  * .limit(1)
993
1044
  * )
994
1045
  * .orderBy(
995
- * sql`concat(first_name, last_name)`
1046
+ * sql<string>`concat(first_name, last_name)`
996
1047
  * )
997
1048
  * .execute()
998
1049
  * ```
@@ -1051,7 +1102,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1051
1102
  * .selectFrom('person')
1052
1103
  * .select([
1053
1104
  * 'first_name',
1054
- * sql`max(id)`.as('max_id')
1105
+ * sql<string>`max(id)`.as('max_id')
1055
1106
  * ])
1056
1107
  * .groupBy('first_name')
1057
1108
  * .execute()
@@ -1075,7 +1126,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1075
1126
  * .select([
1076
1127
  * 'first_name',
1077
1128
  * 'last_name',
1078
- * sql`max(id)`.as('max_id')
1129
+ * sql<string>`max(id)`.as('max_id')
1079
1130
  * ])
1080
1131
  * .groupBy([
1081
1132
  * 'first_name',
@@ -1103,10 +1154,10 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1103
1154
  * .select([
1104
1155
  * 'first_name',
1105
1156
  * 'last_name',
1106
- * sql`max(id)`.as('max_id')
1157
+ * sql<string>`max(id)`.as('max_id')
1107
1158
  * ])
1108
1159
  * .groupBy([
1109
- * sql`concat(first_name, last_name)`,
1160
+ * sql<string>`concat(first_name, last_name)`,
1110
1161
  * (qb) => qb.selectFrom('pet').select('id').limit(1)
1111
1162
  * ])
1112
1163
  * .execute()
@@ -1150,6 +1201,13 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1150
1201
  * .selectFrom('person')
1151
1202
  * .select('first_name')
1152
1203
  * .limit(10)
1204
+ * .execute()
1205
+ * ```
1206
+ *
1207
+ * The generated SQL (PostgreSQL):
1208
+ *
1209
+ * ```sql
1210
+ * select "first_name" from "person" limit $1
1153
1211
  * ```
1154
1212
  *
1155
1213
  * Select rows from index 10 to index 19 of the result:
@@ -1158,13 +1216,20 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1158
1216
  * return await db
1159
1217
  * .selectFrom('person')
1160
1218
  * .select('first_name')
1161
- * .offset(10)
1162
1219
  * .limit(10)
1220
+ * .offset(10)
1221
+ * .execute()
1222
+ * ```
1223
+ *
1224
+ * The generated SQL (PostgreSQL):
1225
+ *
1226
+ * ```sql
1227
+ * select "first_name" from "person" limit $1 offset $2
1163
1228
  * ```
1164
1229
  */
1165
- limit(limit: ValueExpression<DB, TB, number>): SelectQueryBuilder<DB, TB, O>;
1230
+ limit(limit: ValueExpression<DB, TB, number | bigint>): SelectQueryBuilder<DB, TB, O>;
1166
1231
  /**
1167
- * Adds an offset clause to the query.
1232
+ * Adds an `offset` clause to the query.
1168
1233
  *
1169
1234
  * ### Examples
1170
1235
  *
@@ -1174,11 +1239,87 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1174
1239
  * return await db
1175
1240
  * .selectFrom('person')
1176
1241
  * .select('first_name')
1177
- * .offset(10)
1178
1242
  * .limit(10)
1243
+ * .offset(10)
1244
+ * .execute()
1245
+ * ```
1246
+ *
1247
+ * The generated SQL (PostgreSQL):
1248
+ *
1249
+ * ```sql
1250
+ * select "first_name" from "person" limit $1 offset $2
1179
1251
  * ```
1180
1252
  */
1181
- offset(offset: ValueExpression<DB, TB, number>): SelectQueryBuilder<DB, TB, O>;
1253
+ offset(offset: ValueExpression<DB, TB, number | bigint>): SelectQueryBuilder<DB, TB, O>;
1254
+ /**
1255
+ * Adds a `fetch` clause to the query.
1256
+ *
1257
+ * This clause is only supported by some dialects like PostgreSQL or MS SQL Server.
1258
+ *
1259
+ * ### Examples
1260
+ *
1261
+ * ```ts
1262
+ * return await db
1263
+ * .selectFrom('person')
1264
+ * .select('first_name')
1265
+ * .orderBy('first_name')
1266
+ * .offset(0)
1267
+ * .fetch(10)
1268
+ * .execute()
1269
+ * ```
1270
+ *
1271
+ * The generated SQL (MS SQL Server):
1272
+ *
1273
+ * ```sql
1274
+ * select "first_name"
1275
+ * from "person"
1276
+ * order by "first_name"
1277
+ * offset 0 rows
1278
+ * fetch next 10 rows only
1279
+ * ```
1280
+ */
1281
+ fetch(rowCount: number | bigint, modifier?: FetchModifier): SelectQueryBuilder<DB, TB, O>;
1282
+ /**
1283
+ * Adds a `top` clause to the query.
1284
+ *
1285
+ * This clause is only supported by some dialects like MS SQL Server.
1286
+ *
1287
+ * ### Examples
1288
+ *
1289
+ * Select 10 biggest ages:
1290
+ *
1291
+ * ```ts
1292
+ * return await db
1293
+ * .selectFrom('person')
1294
+ * .select('age')
1295
+ * .top(10)
1296
+ * .orderBy('age desc')
1297
+ * .execute()
1298
+ * ```
1299
+ *
1300
+ * The generated SQL (MS SQL Server):
1301
+ *
1302
+ * ```sql
1303
+ * select top(10) "age" from "person" order by "age" desc
1304
+ * ```
1305
+ *
1306
+ * Select 10% first rows:
1307
+ *
1308
+ * ```ts
1309
+ * return await db
1310
+ * .selectFrom('person')
1311
+ * .selectAll()
1312
+ * .top(10, 'percent')
1313
+ * .execute()
1314
+ * ```
1315
+ *
1316
+ * The generated SQL (MS SQL Server):
1317
+ *
1318
+ * ```sql
1319
+ * select top(10) percent * from "person"
1320
+ * ```
1321
+ */
1322
+ top(expression: number | bigint, modifiers?: TopModifier): SelectQueryBuilder<DB, TB, O>;
1182
1323
  /**
1183
1324
  * Combines another select query or raw expression to this query using `union`.
1184
1325
  *
@@ -1457,6 +1598,25 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1457
1598
  * ```
1458
1599
  */
1459
1600
  clearOrderBy(): SelectQueryBuilder<DB, TB, O>;
1601
+ /**
1602
+ * Clears `group by` clause from the query.
1603
+ *
1604
+ * ### Examples
1605
+ *
1606
+ * ```ts
1607
+ * db.selectFrom('person')
1608
+ * .selectAll()
1609
+ * .groupBy('id')
1610
+ * .clearGroupBy()
1611
+ * ```
1612
+ *
1613
+ * The generated SQL(PostgreSQL):
1614
+ *
1615
+ * ```sql
1616
+ * select * from "person"
1617
+ * ```
1618
+ */
1619
+ clearGroupBy(): SelectQueryBuilder<DB, TB, O>;
1460
1620
  /**
1461
1621
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
1462
1622
  * what the provided function returns.
@@ -1484,7 +1644,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1484
1644
  /**
1485
1645
  * Call `func(this)` if `condition` is true.
1486
1646
  *
1487
- * NOTE: This method has an impact on typescript performance and it should only be used
1647
+ * NOTE: This method has an impact on TypeScript performance and it should only be used
1488
1648
  * when necessary. Remember that you can call most methods like `where` conditionally
1489
1649
  * like this:
1490
1650
  *
@@ -1662,17 +1822,17 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1662
1822
  /**
1663
1823
  * Asserts that query's output row type equals the given type `T`.
1664
1824
  *
1665
- * This method can be used to simplify excessively complex types to make typescript happy
1825
+ * This method can be used to simplify excessively complex types to make TypeScript happy
1666
1826
  * and much faster.
1667
1827
  *
1668
1828
  * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
1669
- * for typescript and you get errors like this:
1829
+ * for TypeScript and you get errors like this:
1670
1830
  *
1671
1831
  * ```
1672
1832
  * error TS2589: Type instantiation is excessively deep and possibly infinite.
1673
1833
  * ```
1674
1834
  *
1675
- * In these case you can often use this method to help typescript a little bit. When you use this
1835
+ * In these case you can often use this method to help TypeScript a little bit. When you use this
1676
1836
  * method to assert the output type of a query, Kysely can drop the complex output type that
1677
1837
  * consists of multiple nested helper types and replace it with the simple asserted type.
1678
1838
  *
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createSelectQueryBuilder = void 0;
3
+ exports.createSelectQueryBuilder = createSelectQueryBuilder;
4
4
  const alias_node_js_1 = require("../operation-node/alias-node.js");
5
5
  const select_modifier_node_js_1 = require("../operation-node/select-modifier-node.js");
6
6
  const join_parser_js_1 = require("../parser/join-parser.js");
@@ -21,6 +21,8 @@ const set_operation_parser_js_1 = require("../parser/set-operation-parser.js");
21
21
  const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
22
22
  const expression_wrapper_js_1 = require("../expression/expression-wrapper.js");
23
23
  const value_parser_js_1 = require("../parser/value-parser.js");
24
+ const fetch_parser_js_1 = require("../parser/fetch-parser.js");
25
+ const top_parser_js_1 = require("../parser/top-parser.js");
24
26
  class SelectQueryBuilderImpl {
25
27
  #props;
26
28
  constructor(props) {
@@ -188,6 +190,18 @@ class SelectQueryBuilderImpl {
188
190
  queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOffset(this.#props.queryNode, offset_node_js_1.OffsetNode.create((0, value_parser_js_1.parseValueExpression)(offset))),
189
191
  });
190
192
  }
193
+ fetch(rowCount, modifier = 'only') {
194
+ return new SelectQueryBuilderImpl({
195
+ ...this.#props,
196
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithFetch(this.#props.queryNode, (0, fetch_parser_js_1.parseFetch)(rowCount, modifier)),
197
+ });
198
+ }
199
+ top(expression, modifiers) {
200
+ return new SelectQueryBuilderImpl({
201
+ ...this.#props,
202
+ queryNode: query_node_js_1.QueryNode.cloneWithTop(this.#props.queryNode, (0, top_parser_js_1.parseTop)(expression, modifiers)),
203
+ });
204
+ }
191
205
  union(expression) {
192
206
  return new SelectQueryBuilderImpl({
193
207
  ...this.#props,
@@ -257,6 +271,12 @@ class SelectQueryBuilderImpl {
257
271
  queryNode: select_query_node_js_1.SelectQueryNode.cloneWithoutOrderBy(this.#props.queryNode),
258
272
  });
259
273
  }
274
+ clearGroupBy() {
275
+ return new SelectQueryBuilderImpl({
276
+ ...this.#props,
277
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithoutGroupBy(this.#props.queryNode),
278
+ });
279
+ }
260
280
  $call(func) {
261
281
  return func(this);
262
282
  }
@@ -330,7 +350,6 @@ class SelectQueryBuilderImpl {
330
350
  function createSelectQueryBuilder(props) {
331
351
  return new SelectQueryBuilderImpl(props);
332
352
  }
333
- exports.createSelectQueryBuilder = createSelectQueryBuilder;
334
353
  /**
335
354
  * {@link SelectQueryBuilder} with an alias. The result of calling {@link SelectQueryBuilder.as}.
336
355
  */
@@ -3,7 +3,7 @@ import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
3
  import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
4
4
  import { TableExpression, From, FromTables } from '../parser/table-parser.js';
5
5
  import { SelectExpression, SelectCallback } from '../parser/select-parser.js';
6
- import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
6
+ import { ReturningAllRow, ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
7
7
  import { ReferenceExpression } from '../parser/reference-parser.js';
8
8
  import { QueryNode } from '../operation-node/query-node.js';
9
9
  import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
@@ -17,7 +17,6 @@ import { KyselyPlugin } from '../plugin/kysely-plugin.js';
17
17
  import { WhereInterface } from './where-interface.js';
18
18
  import { ReturningInterface } from './returning-interface.js';
19
19
  import { NoResultErrorConstructor } from './no-result-error.js';
20
- import { Selectable } from '../util/column-type.js';
21
20
  import { Explainable, ExplainFormat } from '../util/explainable.js';
22
21
  import { AliasedExpression, Expression } from '../expression/expression.js';
23
22
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
@@ -25,7 +24,8 @@ import { KyselyTypeError } from '../util/type-error.js';
25
24
  import { Streamable } from '../util/streamable.js';
26
25
  import { ExpressionOrFactory } from '../parser/expression-parser.js';
27
26
  import { ValueExpression } from '../parser/value-parser.js';
28
- export declare class UpdateQueryBuilder<DB, UT extends keyof 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, OutputPrefix, SelectExpressionFromOutputCallback, SelectExpressionFromOutputExpression } from './output-interface.js';
28
+ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OutputInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
29
29
  #private;
30
30
  constructor(props: UpdateQueryBuilderProps);
31
31
  /**
@@ -290,7 +290,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
290
290
  * .selectFrom('person')
291
291
  * .selectAll()
292
292
  * .where(
293
- * sql`coalesce(first_name, last_name)`,
293
+ * sql<string>`coalesce(first_name, last_name)`,
294
294
  * 'like',
295
295
  * '%' + name + '%',
296
296
  * )
@@ -400,6 +400,46 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
400
400
  * ```
401
401
  */
402
402
  clearWhere(): UpdateQueryBuilder<DB, UT, TB, O>;
403
+ /**
404
+ * Changes an `update` query into a `update top` query.
405
+ *
406
+ * `top` clause is only supported by some dialects like MS SQL Server.
407
+ *
408
+ * ### Examples
409
+ *
410
+ * Update the first row:
411
+ *
412
+ * ```ts
413
+ * await db.updateTable('person')
414
+ * .top(1)
415
+ * .set({ first_name: 'Foo' })
416
+ * .where('age', '>', 18)
417
+ * .executeTakeFirstOrThrow()
418
+ * ```
419
+ *
420
+ * The generated SQL (MS SQL Server):
421
+ *
422
+ * ```sql
423
+ * update top(1) "person" set "first_name" = @1 where "age" > @2
424
+ * ```
425
+ *
426
+ * Update the 50% first rows:
427
+ *
428
+ * ```ts
429
+ * await db.updateTable('person')
430
+ * .top(50, 'percent')
431
+ * .set({ first_name: 'Foo' })
432
+ * .where('age', '>', 18)
433
+ * .executeTakeFirstOrThrow()
434
+ * ```
435
+ *
436
+ * The generated SQL (MS SQL Server):
437
+ *
438
+ * ```sql
439
+ * update top(50) percent "person" set "first_name" = @1 where "age" > @2
440
+ * ```
441
+ */
442
+ top(expression: number | bigint, modifiers?: 'percent'): UpdateQueryBuilder<DB, UT, TB, O>;
403
443
  /**
404
444
  * Adds a from clause to the update query.
405
445
  *
@@ -555,6 +595,26 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
555
595
  */
556
596
  fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilderWithFullJoin<DB, UT, TB, O, TE>;
557
597
  fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilderWithFullJoin<DB, UT, TB, O, TE>;
598
+ /**
599
+ * Adds a limit clause to the update query for supported databases, such as MySQL.
600
+ *
601
+ * ### Examples
602
+ *
603
+ * Update the first 2 rows in the 'person' table:
604
+ *
605
+ * ```ts
606
+ * return await db
607
+ * .updateTable('person')
608
+ * .set({ first_name: 'Foo' })
609
+ * .limit(2);
610
+ * ```
611
+ *
612
+ * The generated SQL (MySQL):
613
+ * ```sql
614
+ * update `person` set `first_name` = 'Foo' limit 2
615
+ * ```
616
+ */
617
+ limit(limit: ValueExpression<DB, TB, number>): UpdateQueryBuilder<DB, UT, TB, O>;
558
618
  /**
559
619
  * Sets the values to update for an {@link Kysely.updateTable | update} query.
560
620
  *
@@ -635,7 +695,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
635
695
  * .set('first_name', 'Foo')
636
696
  * // As always, both arguments can be arbitrary expressions or
637
697
  * // callbacks that give you access to an expression builder:
638
- * .set(sql`address['postalCode']`, (eb) => eb.val('61710))
698
+ * .set(sql<string>`address['postalCode']`, (eb) => eb.val('61710))
639
699
  * .where('id', '=', '1')
640
700
  * .executeTakeFirst()
641
701
  * ```
@@ -676,7 +736,7 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
676
736
  * first_name: selectFrom('person').select('first_name').limit(1),
677
737
  * middle_name: ref('first_name'),
678
738
  * age: eb('age', '+', 1),
679
- * last_name: sql`${'Ani'} || ${'ston'}`,
739
+ * last_name: sql<string>`${'Ani'} || ${'ston'}`,
680
740
  * }))
681
741
  * .where('id', '=', 1)
682
742
  * .executeTakeFirst()
@@ -762,8 +822,113 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
762
822
  /**
763
823
  * Adds a `returning *` to an insert/update/delete query on databases
764
824
  * that support `returning` such as PostgreSQL.
825
+ *
826
+ * Also see the {@link returning} method.
827
+ */
828
+ returningAll<T extends TB>(tables: ReadonlyArray<T>): UpdateQueryBuilder<DB, UT, TB, ReturningAllRow<DB, T, O>>;
829
+ returningAll<T extends TB>(table: T): UpdateQueryBuilder<DB, UT, TB, ReturningAllRow<DB, T, O>>;
830
+ returningAll(): UpdateQueryBuilder<DB, UT, TB, ReturningAllRow<DB, TB, O>>;
831
+ /**
832
+ * Allows you to return data from modified rows.
833
+ *
834
+ * On supported databases like MS SQL Server (MSSQL), this method can be chained
835
+ * to `insert`, `update`, `delete` and `merge` queries to return data.
836
+ *
837
+ * Also see the {@link outputAll} method.
838
+ *
839
+ * ### Examples
840
+ *
841
+ * Return one column:
842
+ *
843
+ * ```ts
844
+ * const { id } = await db
845
+ * .insertInto('person')
846
+ * .output('inserted.id')
847
+ * .values({
848
+ * first_name: 'Jennifer',
849
+ * last_name: 'Aniston'
850
+ * })
851
+ * .executeTakeFirst()
852
+ * ```
853
+ *
854
+ * Return multiple columns:
855
+ *
856
+ * ```ts
857
+ * const { id, first_name } = await db
858
+ * .updateTable('person')
859
+ * .set({ first_name: 'John', last_name: 'Doe' })
860
+ * .output([
861
+ * 'deleted.first_name as old_first_name',
862
+ * 'deleted.last_name as old_last_name',
863
+ * 'inserted.first_name as new_first_name',
864
+ * 'inserted.last_name as new_last_name',
865
+ * ])
866
+ * .where('created_at', '<', new Date())
867
+ * .executeTakeFirst()
868
+ * ```
869
+ *
870
+ * Return arbitrary expressions:
871
+ *
872
+ * ```ts
873
+ * import { sql } from 'kysely'
874
+ *
875
+ * const { id, full_name } = await db
876
+ * .deleteFrom('person')
877
+ * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
878
+ * .where('created_at', '<', new Date())
879
+ * .executeTakeFirst()
880
+ * ```
881
+ *
882
+ * Return the action performed on the row:
883
+ *
884
+ * ```ts
885
+ * await db
886
+ * .mergeInto('person')
887
+ * .using('pet', 'pet.owner_id', 'person.id')
888
+ * .whenMatched()
889
+ * .thenDelete()
890
+ * .whenNotMatched()
891
+ * .thenInsertValues({
892
+ * first_name: 'John',
893
+ * last_name: 'Doe',
894
+ * gender: 'male'
895
+ * })
896
+ * .output([
897
+ * 'inserted.id as inserted_id',
898
+ * 'deleted.id as deleted_id',
899
+ * ])
900
+ * ```
901
+ */
902
+ output<OE extends OutputExpression<DB, UT>>(selections: readonly OE[]): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
903
+ output<CB extends OutputCallback<DB, TB>>(callback: CB): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputCallback<CB>>>;
904
+ output<OE extends OutputExpression<DB, TB>>(selection: OE): UpdateQueryBuilder<DB, UT, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
905
+ /**
906
+ * Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
907
+ * that support `output` such as MS SQL Server (MSSQL).
908
+ *
909
+ * Also see the {@link output} method.
910
+ */
911
+ outputAll(table: OutputPrefix): UpdateQueryBuilder<DB, UT, TB, ReturningAllRow<DB, TB, O>>;
912
+ /**
913
+ * Clears all `returning` clauses from the query.
914
+ *
915
+ * ### Examples
916
+ *
917
+ * ```ts
918
+ * db.updateTable('person')
919
+ * .returningAll()
920
+ * .set({ age: 39 })
921
+ * .where('first_name', '=', 'John')
922
+ * .clearReturning()
923
+ * ```
924
+ *
925
+ * The generated SQL(PostgreSQL):
926
+ *
927
+ * ```sql
928
+ * update "person" set "age" = 39 where "first_name" = "John"
929
+ * ```
765
930
  */
766
- returningAll(): UpdateQueryBuilder<DB, UT, TB, Selectable<DB[TB]>>;
931
+ clearReturning(): UpdateQueryBuilder<DB, UT, TB, UpdateResult>;
767
932
  /**
768
933
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
769
934
  * what the provided function returns.
@@ -880,17 +1045,17 @@ export declare class UpdateQueryBuilder<DB, UT extends keyof DB, TB extends keyo
880
1045
  /**
881
1046
  * Asserts that query's output row type equals the given type `T`.
882
1047
  *
883
- * This method can be used to simplify excessively complex types to make typescript happy
1048
+ * This method can be used to simplify excessively complex types to make TypeScript happy
884
1049
  * and much faster.
885
1050
  *
886
1051
  * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
887
- * for typescript and you get errors like this:
1052
+ * for TypeScript and you get errors like this:
888
1053
  *
889
1054
  * ```
890
1055
  * error TS2589: Type instantiation is excessively deep and possibly infinite.
891
1056
  * ```
892
1057
  *
893
- * In these case you can often use this method to help typescript a little bit. When you use this
1058
+ * In these case you can often use this method to help TypeScript a little bit. When you use this
894
1059
  * method to assert the output type of a query, Kysely can drop the complex output type that
895
1060
  * consists of multiple nested helper types and replace it with the simple asserted type.
896
1061
  *