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
@@ -11,7 +11,7 @@ import { QueryExecutor } from '../query-executor/query-executor.js';
11
11
  import { QueryId } from '../util/query-id.js';
12
12
  import { InsertResult } from './insert-result.js';
13
13
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
14
- import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
14
+ import { ReturningAllRow, ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
15
15
  import { NoResultErrorConstructor } from './no-result-error.js';
16
16
  import { ExpressionOrFactory } from '../parser/expression-parser.js';
17
17
  import { ReturningInterface } from './returning-interface.js';
@@ -21,7 +21,8 @@ import { Explainable, ExplainFormat } from '../util/explainable.js';
21
21
  import { Expression } from '../expression/expression.js';
22
22
  import { KyselyTypeError } from '../util/type-error.js';
23
23
  import { Streamable } from '../util/streamable.js';
24
- export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
24
+ import { OutputCallback, OutputExpression, OutputInterface, SelectExpressionFromOutputCallback, SelectExpressionFromOutputExpression } from './output-interface.js';
25
+ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements ReturningInterface<DB, TB, O>, OutputInterface<DB, TB, O, 'inserted'>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
25
26
  #private;
26
27
  constructor(props: InsertQueryBuilderProps);
27
28
  /**
@@ -143,11 +144,10 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
143
144
  * .insertInto('person')
144
145
  * .values(({ ref, selectFrom, fn }) => ({
145
146
  * first_name: 'Jennifer',
146
- * last_name: sql`concat(${ani}, ${ston})`,
147
+ * last_name: sql<string>`>concat(${ani}, ${ston})`,
147
148
  * middle_name: ref('first_name'),
148
149
  * age: selectFrom('person')
149
- * .select(fn.avg<number>('age')
150
- * .as('avg_age')),
150
+ * .select(fn.avg<number>('age').as('avg_age')),
151
151
  * }))
152
152
  * .executeTakeFirst()
153
153
  * ```
@@ -215,7 +215,9 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
215
215
  *
216
216
  * <!-- siteExample("insert", "Insert subquery", 50) -->
217
217
  *
218
- * You can create an `INSERT INTO SELECT FROM` query using the `expression` method:
218
+ * You can create an `INSERT INTO SELECT FROM` query using the `expression` method.
219
+ * This API doesn't follow our WYSIWYG principles and might be a bit difficult to
220
+ * remember. The reasons for this design stem from implementation difficulties.
219
221
  *
220
222
  * ```ts
221
223
  * const result = await db.insertInto('person')
@@ -241,6 +243,14 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
241
243
  expression(expression: ExpressionOrFactory<DB, TB, any>): InsertQueryBuilder<DB, TB, O>;
242
244
  /**
243
245
  * Creates an `insert into "person" default values` query.
246
+ *
247
+ * ### Examples
248
+ *
249
+ * ```ts
250
+ * await db.insertInto('person')
251
+ * .defaultValues()
252
+ * .execute()
253
+ * ```
244
254
  */
245
255
  defaultValues(): InsertQueryBuilder<DB, TB, O>;
246
256
  /**
@@ -265,6 +275,50 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
265
275
  * ```
266
276
  */
267
277
  ignore(): InsertQueryBuilder<DB, TB, O>;
278
+ /**
279
+ * Changes an `insert into` query to an `insert top into` query.
280
+ *
281
+ * `top` clause is only supported by some dialects like MS SQL Server.
282
+ *
283
+ * ### Examples
284
+ *
285
+ * Insert the first 5 rows:
286
+ *
287
+ * ```ts
288
+ * await db.insertInto('person')
289
+ * .top(5)
290
+ * .columns(['first_name', 'gender'])
291
+ * .expression(
292
+ * (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
293
+ * )
294
+ * .execute()
295
+ * ```
296
+ *
297
+ * The generated SQL (MS SQL Server):
298
+ *
299
+ * ```sql
300
+ * insert top(5) into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
301
+ * ```
302
+ *
303
+ * Insert the first 50 percent of rows:
304
+ *
305
+ * ```ts
306
+ * await db.insertInto('person')
307
+ * .top(50, 'percent')
308
+ * .columns(['first_name', 'gender'])
309
+ * .expression(
310
+ * (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
311
+ * )
312
+ * .execute()
313
+ * ```
314
+ *
315
+ * The generated SQL (MS SQL Server):
316
+ *
317
+ * ```sql
318
+ * insert top(50) percent into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
319
+ * ```
320
+ */
321
+ top(expression: number | bigint, modifiers?: 'percent'): InsertQueryBuilder<DB, TB, O>;
268
322
  /**
269
323
  * Adds an `on conflict` clause to the query.
270
324
  *
@@ -334,7 +388,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
334
388
  * species: 'cat',
335
389
  * })
336
390
  * .onConflict((oc) => oc
337
- * .expression(sql`lower(name)`)
391
+ * .expression(sql<string>`lower(name)`)
338
392
  * .doUpdateSet({ species: 'hamster' })
339
393
  * )
340
394
  * .execute()
@@ -501,8 +555,110 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
501
555
  /**
502
556
  * Adds a `returning *` to an insert/update/delete query on databases
503
557
  * that support `returning` such as PostgreSQL.
558
+ *
559
+ * Also see the {@link returning} method.
504
560
  */
505
561
  returningAll(): InsertQueryBuilder<DB, TB, Selectable<DB[TB]>>;
562
+ /**
563
+ * Allows you to return data from modified rows.
564
+ *
565
+ * On supported databases like MS SQL Server (MSSQL), this method can be chained
566
+ * to `insert`, `update`, `delete` and `merge` queries to return data.
567
+ *
568
+ * Also see the {@link outputAll} method.
569
+ *
570
+ * ### Examples
571
+ *
572
+ * Return one column:
573
+ *
574
+ * ```ts
575
+ * const { id } = await db
576
+ * .insertInto('person')
577
+ * .output('inserted.id')
578
+ * .values({
579
+ * first_name: 'Jennifer',
580
+ * last_name: 'Aniston'
581
+ * })
582
+ * .executeTakeFirst()
583
+ * ```
584
+ *
585
+ * Return multiple columns:
586
+ *
587
+ * ```ts
588
+ * const { id, first_name } = await db
589
+ * .updateTable('person')
590
+ * .set({ first_name: 'John', last_name: 'Doe' })
591
+ * .output([
592
+ * 'deleted.first_name as old_first_name',
593
+ * 'deleted.last_name as old_last_name',
594
+ * 'inserted.first_name as new_first_name',
595
+ * 'inserted.last_name as new_last_name',
596
+ * ])
597
+ * .where('created_at', '<', new Date())
598
+ * .executeTakeFirst()
599
+ * ```
600
+ *
601
+ * Return arbitrary expressions:
602
+ *
603
+ * ```ts
604
+ * import { sql } from 'kysely'
605
+ *
606
+ * const { id, full_name } = await db
607
+ * .deleteFrom('person')
608
+ * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
609
+ * .where('created_at', '<', new Date())
610
+ * .executeTakeFirst()
611
+ * ```
612
+ *
613
+ * Return the action performed on the row:
614
+ *
615
+ * ```ts
616
+ * await db
617
+ * .mergeInto('person')
618
+ * .using('pet', 'pet.owner_id', 'person.id')
619
+ * .whenMatched()
620
+ * .thenDelete()
621
+ * .whenNotMatched()
622
+ * .thenInsertValues({
623
+ * first_name: 'John',
624
+ * last_name: 'Doe',
625
+ * gender: 'male'
626
+ * })
627
+ * .output([
628
+ * 'inserted.id as inserted_id',
629
+ * 'deleted.id as deleted_id',
630
+ * ])
631
+ * ```
632
+ */
633
+ output<OE extends OutputExpression<DB, TB, 'inserted'>>(selections: readonly OE[]): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
634
+ output<CB extends OutputCallback<DB, TB, 'inserted'>>(callback: CB): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputCallback<CB>>>;
635
+ output<OE extends OutputExpression<DB, TB, 'inserted'>>(selection: OE): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>>;
636
+ /**
637
+ * Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
638
+ * that support `output` such as MS SQL Server (MSSQL).
639
+ *
640
+ * Also see the {@link output} method.
641
+ */
642
+ outputAll(table: 'inserted'): InsertQueryBuilder<DB, TB, ReturningAllRow<DB, TB, O>>;
643
+ /**
644
+ * Clears all `returning` clauses from the query.
645
+ *
646
+ * ### Examples
647
+ *
648
+ * ```ts
649
+ * db.insertInto('person')
650
+ * .values({ first_name: 'James', last_name: 'Smith', age: 42 })
651
+ * .returning(['first_name'])
652
+ * .clearReturning()
653
+ * ```
654
+ *
655
+ * The generated SQL(PostgreSQL):
656
+ *
657
+ * ```sql
658
+ * insert into "person" ("James", "Smith", 42)
659
+ * ```
660
+ */
661
+ clearReturning(): InsertQueryBuilder<DB, TB, InsertResult>;
506
662
  /**
507
663
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
508
664
  * what the provided function returns.
@@ -614,17 +770,17 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
614
770
  /**
615
771
  * Asserts that query's output row type equals the given type `T`.
616
772
  *
617
- * This method can be used to simplify excessively complex types to make typescript happy
773
+ * This method can be used to simplify excessively complex types to make TypeScript happy
618
774
  * and much faster.
619
775
  *
620
776
  * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
621
- * for typescript and you get errors like this:
777
+ * for TypeScript and you get errors like this:
622
778
  *
623
779
  * ```
624
780
  * error TS2589: Type instantiation is excessively deep and possibly infinite.
625
781
  * ```
626
782
  *
627
- * In these case you can often use this method to help typescript a little bit. When you use this
783
+ * In these case you can often use this method to help TypeScript a little bit. When you use this
628
784
  * method to assert the output type of a query, Kysely can drop the complex output type that
629
785
  * consists of multiple nested helper types and replace it with the simple asserted type.
630
786
  *
@@ -13,6 +13,7 @@ import { parseExpression, } from '../parser/expression-parser.js';
13
13
  import { ColumnNode } from '../operation-node/column-node.js';
14
14
  import { OnConflictBuilder, } from './on-conflict-builder.js';
15
15
  import { OnConflictNode } from '../operation-node/on-conflict-node.js';
16
+ import { parseTop } from '../parser/top-parser.js';
16
17
  export class InsertQueryBuilder {
17
18
  #props;
18
19
  constructor(props) {
@@ -137,11 +138,10 @@ export class InsertQueryBuilder {
137
138
  * .insertInto('person')
138
139
  * .values(({ ref, selectFrom, fn }) => ({
139
140
  * first_name: 'Jennifer',
140
- * last_name: sql`concat(${ani}, ${ston})`,
141
+ * last_name: sql<string>`>concat(${ani}, ${ston})`,
141
142
  * middle_name: ref('first_name'),
142
143
  * age: selectFrom('person')
143
- * .select(fn.avg<number>('age')
144
- * .as('avg_age')),
144
+ * .select(fn.avg<number>('age').as('avg_age')),
145
145
  * }))
146
146
  * .executeTakeFirst()
147
147
  * ```
@@ -225,7 +225,9 @@ export class InsertQueryBuilder {
225
225
  *
226
226
  * <!-- siteExample("insert", "Insert subquery", 50) -->
227
227
  *
228
- * You can create an `INSERT INTO SELECT FROM` query using the `expression` method:
228
+ * You can create an `INSERT INTO SELECT FROM` query using the `expression` method.
229
+ * This API doesn't follow our WYSIWYG principles and might be a bit difficult to
230
+ * remember. The reasons for this design stem from implementation difficulties.
229
231
  *
230
232
  * ```ts
231
233
  * const result = await db.insertInto('person')
@@ -258,6 +260,14 @@ export class InsertQueryBuilder {
258
260
  }
259
261
  /**
260
262
  * Creates an `insert into "person" default values` query.
263
+ *
264
+ * ### Examples
265
+ *
266
+ * ```ts
267
+ * await db.insertInto('person')
268
+ * .defaultValues()
269
+ * .execute()
270
+ * ```
261
271
  */
262
272
  defaultValues() {
263
273
  return new InsertQueryBuilder({
@@ -296,6 +306,55 @@ export class InsertQueryBuilder {
296
306
  }),
297
307
  });
298
308
  }
309
+ /**
310
+ * Changes an `insert into` query to an `insert top into` query.
311
+ *
312
+ * `top` clause is only supported by some dialects like MS SQL Server.
313
+ *
314
+ * ### Examples
315
+ *
316
+ * Insert the first 5 rows:
317
+ *
318
+ * ```ts
319
+ * await db.insertInto('person')
320
+ * .top(5)
321
+ * .columns(['first_name', 'gender'])
322
+ * .expression(
323
+ * (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
324
+ * )
325
+ * .execute()
326
+ * ```
327
+ *
328
+ * The generated SQL (MS SQL Server):
329
+ *
330
+ * ```sql
331
+ * insert top(5) into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
332
+ * ```
333
+ *
334
+ * Insert the first 50 percent of rows:
335
+ *
336
+ * ```ts
337
+ * await db.insertInto('person')
338
+ * .top(50, 'percent')
339
+ * .columns(['first_name', 'gender'])
340
+ * .expression(
341
+ * (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
342
+ * )
343
+ * .execute()
344
+ * ```
345
+ *
346
+ * The generated SQL (MS SQL Server):
347
+ *
348
+ * ```sql
349
+ * insert top(50) percent into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
350
+ * ```
351
+ */
352
+ top(expression, modifiers) {
353
+ return new InsertQueryBuilder({
354
+ ...this.#props,
355
+ queryNode: QueryNode.cloneWithTop(this.#props.queryNode, parseTop(expression, modifiers)),
356
+ });
357
+ }
299
358
  /**
300
359
  * Adds an `on conflict` clause to the query.
301
360
  *
@@ -365,7 +424,7 @@ export class InsertQueryBuilder {
365
424
  * species: 'cat',
366
425
  * })
367
426
  * .onConflict((oc) => oc
368
- * .expression(sql`lower(name)`)
427
+ * .expression(sql<string>`lower(name)`)
369
428
  * .doUpdateSet({ species: 'hamster' })
370
429
  * )
371
430
  * .execute()
@@ -495,6 +554,42 @@ export class InsertQueryBuilder {
495
554
  queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll()),
496
555
  });
497
556
  }
557
+ output(args) {
558
+ return new InsertQueryBuilder({
559
+ ...this.#props,
560
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectArg(args)),
561
+ });
562
+ }
563
+ outputAll(table) {
564
+ return new InsertQueryBuilder({
565
+ ...this.#props,
566
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectAll(table)),
567
+ });
568
+ }
569
+ /**
570
+ * Clears all `returning` clauses from the query.
571
+ *
572
+ * ### Examples
573
+ *
574
+ * ```ts
575
+ * db.insertInto('person')
576
+ * .values({ first_name: 'James', last_name: 'Smith', age: 42 })
577
+ * .returning(['first_name'])
578
+ * .clearReturning()
579
+ * ```
580
+ *
581
+ * The generated SQL(PostgreSQL):
582
+ *
583
+ * ```sql
584
+ * insert into "person" ("James", "Smith", 42)
585
+ * ```
586
+ */
587
+ clearReturning() {
588
+ return new InsertQueryBuilder({
589
+ ...this.#props,
590
+ queryNode: QueryNode.cloneWithoutReturning(this.#props.queryNode),
591
+ });
592
+ }
498
593
  /**
499
594
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
500
595
  * what the provided function returns.
@@ -619,17 +714,17 @@ export class InsertQueryBuilder {
619
714
  /**
620
715
  * Asserts that query's output row type equals the given type `T`.
621
716
  *
622
- * This method can be used to simplify excessively complex types to make typescript happy
717
+ * This method can be used to simplify excessively complex types to make TypeScript happy
623
718
  * and much faster.
624
719
  *
625
720
  * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
626
- * for typescript and you get errors like this:
721
+ * for TypeScript and you get errors like this:
627
722
  *
628
723
  * ```
629
724
  * error TS2589: Type instantiation is excessively deep and possibly infinite.
630
725
  * ```
631
726
  *
632
- * In these case you can often use this method to help typescript a little bit. When you use this
727
+ * In these case you can often use this method to help TypeScript a little bit. When you use this
633
728
  * method to assert the output type of a query, Kysely can drop the complex output type that
634
729
  * consists of multiple nested helper types and replace it with the simple asserted type.
635
730
  *
@@ -682,9 +777,11 @@ export class InsertQueryBuilder {
682
777
  */
683
778
  async execute() {
684
779
  const compiledQuery = this.compile();
685
- const query = compiledQuery.query;
686
780
  const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
687
- if (this.#props.executor.adapter.supportsReturning && query.returning) {
781
+ const { adapter } = this.#props.executor;
782
+ const query = compiledQuery.query;
783
+ if ((query.returning && adapter.supportsReturning) ||
784
+ (query.output && adapter.supportsOutput)) {
688
785
  return result.rows;
689
786
  }
690
787
  return [