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
  *
@@ -15,6 +15,7 @@ const expression_parser_js_1 = require("../parser/expression-parser.js");
15
15
  const column_node_js_1 = require("../operation-node/column-node.js");
16
16
  const on_conflict_builder_js_1 = require("./on-conflict-builder.js");
17
17
  const on_conflict_node_js_1 = require("../operation-node/on-conflict-node.js");
18
+ const top_parser_js_1 = require("../parser/top-parser.js");
18
19
  class InsertQueryBuilder {
19
20
  #props;
20
21
  constructor(props) {
@@ -139,11 +140,10 @@ class InsertQueryBuilder {
139
140
  * .insertInto('person')
140
141
  * .values(({ ref, selectFrom, fn }) => ({
141
142
  * first_name: 'Jennifer',
142
- * last_name: sql`concat(${ani}, ${ston})`,
143
+ * last_name: sql<string>`>concat(${ani}, ${ston})`,
143
144
  * middle_name: ref('first_name'),
144
145
  * age: selectFrom('person')
145
- * .select(fn.avg<number>('age')
146
- * .as('avg_age')),
146
+ * .select(fn.avg<number>('age').as('avg_age')),
147
147
  * }))
148
148
  * .executeTakeFirst()
149
149
  * ```
@@ -227,7 +227,9 @@ class InsertQueryBuilder {
227
227
  *
228
228
  * <!-- siteExample("insert", "Insert subquery", 50) -->
229
229
  *
230
- * You can create an `INSERT INTO SELECT FROM` query using the `expression` method:
230
+ * You can create an `INSERT INTO SELECT FROM` query using the `expression` method.
231
+ * This API doesn't follow our WYSIWYG principles and might be a bit difficult to
232
+ * remember. The reasons for this design stem from implementation difficulties.
231
233
  *
232
234
  * ```ts
233
235
  * const result = await db.insertInto('person')
@@ -260,6 +262,14 @@ class InsertQueryBuilder {
260
262
  }
261
263
  /**
262
264
  * Creates an `insert into "person" default values` query.
265
+ *
266
+ * ### Examples
267
+ *
268
+ * ```ts
269
+ * await db.insertInto('person')
270
+ * .defaultValues()
271
+ * .execute()
272
+ * ```
263
273
  */
264
274
  defaultValues() {
265
275
  return new InsertQueryBuilder({
@@ -298,6 +308,55 @@ class InsertQueryBuilder {
298
308
  }),
299
309
  });
300
310
  }
311
+ /**
312
+ * Changes an `insert into` query to an `insert top into` query.
313
+ *
314
+ * `top` clause is only supported by some dialects like MS SQL Server.
315
+ *
316
+ * ### Examples
317
+ *
318
+ * Insert the first 5 rows:
319
+ *
320
+ * ```ts
321
+ * await db.insertInto('person')
322
+ * .top(5)
323
+ * .columns(['first_name', 'gender'])
324
+ * .expression(
325
+ * (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
326
+ * )
327
+ * .execute()
328
+ * ```
329
+ *
330
+ * The generated SQL (MS SQL Server):
331
+ *
332
+ * ```sql
333
+ * insert top(5) into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
334
+ * ```
335
+ *
336
+ * Insert the first 50 percent of rows:
337
+ *
338
+ * ```ts
339
+ * await db.insertInto('person')
340
+ * .top(50, 'percent')
341
+ * .columns(['first_name', 'gender'])
342
+ * .expression(
343
+ * (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
344
+ * )
345
+ * .execute()
346
+ * ```
347
+ *
348
+ * The generated SQL (MS SQL Server):
349
+ *
350
+ * ```sql
351
+ * insert top(50) percent into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
352
+ * ```
353
+ */
354
+ top(expression, modifiers) {
355
+ return new InsertQueryBuilder({
356
+ ...this.#props,
357
+ queryNode: query_node_js_1.QueryNode.cloneWithTop(this.#props.queryNode, (0, top_parser_js_1.parseTop)(expression, modifiers)),
358
+ });
359
+ }
301
360
  /**
302
361
  * Adds an `on conflict` clause to the query.
303
362
  *
@@ -367,7 +426,7 @@ class InsertQueryBuilder {
367
426
  * species: 'cat',
368
427
  * })
369
428
  * .onConflict((oc) => oc
370
- * .expression(sql`lower(name)`)
429
+ * .expression(sql<string>`lower(name)`)
371
430
  * .doUpdateSet({ species: 'hamster' })
372
431
  * )
373
432
  * .execute()
@@ -497,6 +556,42 @@ class InsertQueryBuilder {
497
556
  queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)()),
498
557
  });
499
558
  }
559
+ output(args) {
560
+ return new InsertQueryBuilder({
561
+ ...this.#props,
562
+ queryNode: query_node_js_1.QueryNode.cloneWithOutput(this.#props.queryNode, (0, select_parser_js_1.parseSelectArg)(args)),
563
+ });
564
+ }
565
+ outputAll(table) {
566
+ return new InsertQueryBuilder({
567
+ ...this.#props,
568
+ queryNode: query_node_js_1.QueryNode.cloneWithOutput(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)(table)),
569
+ });
570
+ }
571
+ /**
572
+ * Clears all `returning` clauses from the query.
573
+ *
574
+ * ### Examples
575
+ *
576
+ * ```ts
577
+ * db.insertInto('person')
578
+ * .values({ first_name: 'James', last_name: 'Smith', age: 42 })
579
+ * .returning(['first_name'])
580
+ * .clearReturning()
581
+ * ```
582
+ *
583
+ * The generated SQL(PostgreSQL):
584
+ *
585
+ * ```sql
586
+ * insert into "person" ("James", "Smith", 42)
587
+ * ```
588
+ */
589
+ clearReturning() {
590
+ return new InsertQueryBuilder({
591
+ ...this.#props,
592
+ queryNode: query_node_js_1.QueryNode.cloneWithoutReturning(this.#props.queryNode),
593
+ });
594
+ }
500
595
  /**
501
596
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
502
597
  * what the provided function returns.
@@ -621,17 +716,17 @@ class InsertQueryBuilder {
621
716
  /**
622
717
  * Asserts that query's output row type equals the given type `T`.
623
718
  *
624
- * This method can be used to simplify excessively complex types to make typescript happy
719
+ * This method can be used to simplify excessively complex types to make TypeScript happy
625
720
  * and much faster.
626
721
  *
627
722
  * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
628
- * for typescript and you get errors like this:
723
+ * for TypeScript and you get errors like this:
629
724
  *
630
725
  * ```
631
726
  * error TS2589: Type instantiation is excessively deep and possibly infinite.
632
727
  * ```
633
728
  *
634
- * In these case you can often use this method to help typescript a little bit. When you use this
729
+ * In these case you can often use this method to help TypeScript a little bit. When you use this
635
730
  * method to assert the output type of a query, Kysely can drop the complex output type that
636
731
  * consists of multiple nested helper types and replace it with the simple asserted type.
637
732
  *
@@ -684,9 +779,11 @@ class InsertQueryBuilder {
684
779
  */
685
780
  async execute() {
686
781
  const compiledQuery = this.compile();
687
- const query = compiledQuery.query;
688
782
  const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
689
- if (this.#props.executor.adapter.supportsReturning && query.returning) {
783
+ const { adapter } = this.#props.executor;
784
+ const query = compiledQuery.query;
785
+ if ((query.returning && adapter.supportsReturning) ||
786
+ (query.output && adapter.supportsOutput)) {
690
787
  return result.rows;
691
788
  }
692
789
  return [