kysely 0.11.4 → 0.13.0

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 (262) hide show
  1. package/README.md +35 -11
  2. package/dist/cjs/dialect/dialect-adapter-base.d.ts +36 -0
  3. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +38 -2
  4. package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -1
  5. package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +16 -0
  6. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +29 -0
  7. package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +3 -0
  8. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +38 -2
  9. package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -1
  10. package/dist/cjs/dialect/postgres/postgres-dialect.d.ts +16 -0
  11. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +29 -0
  12. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +3 -0
  13. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +38 -2
  14. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +16 -0
  15. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +29 -0
  16. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +3 -0
  17. package/dist/cjs/driver/default-connection-provider.d.ts +4 -0
  18. package/dist/cjs/driver/runtime-driver.d.ts +29 -0
  19. package/dist/cjs/driver/single-connection-provider.d.ts +4 -0
  20. package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +1 -0
  21. package/dist/cjs/dynamic/dynamic-reference-builder.js +9 -1
  22. package/dist/cjs/dynamic/dynamic.d.ts +6 -7
  23. package/dist/cjs/dynamic/dynamic.js +6 -7
  24. package/dist/cjs/index.d.ts +15 -4
  25. package/dist/cjs/index.js +12 -1
  26. package/dist/cjs/kysely.d.ts +170 -11
  27. package/dist/cjs/kysely.js +69 -9
  28. package/dist/cjs/migration/migration.d.ts +156 -13
  29. package/dist/cjs/migration/migration.js +256 -135
  30. package/dist/cjs/operation-node/column-definition-node.d.ts +6 -5
  31. package/dist/cjs/operation-node/column-definition-node.js +0 -4
  32. package/dist/cjs/operation-node/common-table-expression-name-node.d.ts +15 -0
  33. package/dist/cjs/operation-node/common-table-expression-name-node.js +23 -0
  34. package/dist/cjs/operation-node/common-table-expression-node.d.ts +3 -3
  35. package/dist/cjs/operation-node/create-table-node.d.ts +6 -2
  36. package/dist/cjs/operation-node/create-table-node.js +6 -6
  37. package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
  38. package/dist/cjs/operation-node/insert-query-node.d.ts +4 -4
  39. package/dist/cjs/operation-node/operation-node-transformer.d.ts +4 -0
  40. package/dist/cjs/operation-node/operation-node-transformer.js +22 -2
  41. package/dist/cjs/operation-node/operation-node-visitor.d.ts +4 -0
  42. package/dist/cjs/operation-node/operation-node-visitor.js +2 -0
  43. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  44. package/dist/cjs/operation-node/query-node.d.ts +0 -2
  45. package/dist/cjs/operation-node/query-node.js +0 -10
  46. package/dist/cjs/operation-node/values-node.d.ts +15 -0
  47. package/dist/cjs/operation-node/values-node.js +18 -0
  48. package/dist/cjs/operation-node/with-node.d.ts +3 -1
  49. package/dist/cjs/operation-node/with-node.js +2 -1
  50. package/dist/cjs/package.json +1 -3
  51. package/dist/cjs/parser/complex-expression-parser.d.ts +9 -0
  52. package/dist/cjs/parser/complex-expression-parser.js +25 -0
  53. package/dist/cjs/parser/filter-parser.d.ts +13 -4
  54. package/dist/cjs/parser/filter-parser.js +21 -24
  55. package/dist/cjs/parser/insert-values-parser.d.ts +5 -9
  56. package/dist/cjs/parser/insert-values-parser.js +27 -41
  57. package/dist/cjs/parser/order-by-parser.d.ts +1 -1
  58. package/dist/cjs/parser/parse-context.d.ts +22 -8
  59. package/dist/cjs/parser/parse-context.js +10 -10
  60. package/dist/cjs/parser/reference-parser.d.ts +8 -7
  61. package/dist/cjs/parser/reference-parser.js +8 -17
  62. package/dist/cjs/parser/returning-parser.d.ts +1 -5
  63. package/dist/cjs/parser/select-parser.d.ts +12 -14
  64. package/dist/cjs/parser/select-parser.js +5 -9
  65. package/dist/cjs/parser/table-parser.d.ts +9 -11
  66. package/dist/cjs/parser/table-parser.js +2 -8
  67. package/dist/cjs/parser/union-parser.d.ts +2 -2
  68. package/dist/cjs/parser/union-parser.js +1 -6
  69. package/dist/cjs/parser/update-set-parser.d.ts +2 -8
  70. package/dist/cjs/parser/update-set-parser.js +6 -26
  71. package/dist/cjs/parser/value-parser.d.ts +9 -6
  72. package/dist/cjs/parser/value-parser.js +7 -30
  73. package/dist/cjs/parser/with-parser.d.ts +36 -6
  74. package/dist/cjs/parser/with-parser.js +13 -2
  75. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +36 -2
  76. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.d.ts +34 -0
  77. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  78. package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +34 -0
  79. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +8 -0
  80. package/dist/cjs/query-builder/delete-query-builder.d.ts +647 -0
  81. package/dist/cjs/query-builder/delete-query-builder.js +185 -0
  82. package/dist/cjs/query-builder/expression-builder.d.ts +8 -6
  83. package/dist/cjs/query-builder/expression-builder.js +3 -3
  84. package/dist/cjs/query-builder/function-builder.d.ts +2 -1
  85. package/dist/cjs/query-builder/function-builder.js +2 -1
  86. package/dist/cjs/query-builder/having-interface.d.ts +49 -0
  87. package/dist/cjs/query-builder/having-interface.js +2 -0
  88. package/dist/cjs/query-builder/insert-query-builder.d.ts +504 -0
  89. package/dist/cjs/query-builder/insert-query-builder.js +256 -0
  90. package/dist/cjs/query-builder/insert-result.d.ts +3 -2
  91. package/dist/cjs/query-builder/insert-result.js +3 -2
  92. package/dist/cjs/query-builder/join-builder.d.ts +19 -20
  93. package/dist/cjs/query-builder/join-builder.js +12 -12
  94. package/dist/cjs/query-builder/join-interface.d.ts +130 -0
  95. package/dist/cjs/query-builder/join-interface.js +2 -0
  96. package/dist/cjs/query-builder/no-result-error.d.ts +9 -0
  97. package/dist/cjs/query-builder/no-result-error.js +14 -0
  98. package/dist/cjs/query-builder/returning-interface.d.ts +73 -0
  99. package/dist/cjs/query-builder/returning-interface.js +2 -0
  100. package/dist/cjs/query-builder/{query-builder.d.ts → select-query-builder.d.ts} +145 -651
  101. package/dist/cjs/query-builder/select-query-builder.js +571 -0
  102. package/dist/cjs/query-builder/update-query-builder.d.ts +735 -0
  103. package/dist/cjs/query-builder/update-query-builder.js +279 -0
  104. package/dist/cjs/query-builder/where-interface.d.ts +378 -0
  105. package/dist/cjs/query-builder/where-interface.js +2 -0
  106. package/dist/cjs/query-compiler/default-query-compiler.d.ts +4 -0
  107. package/dist/cjs/query-compiler/default-query-compiler.js +37 -6
  108. package/dist/cjs/query-creator.d.ts +69 -43
  109. package/dist/cjs/query-creator.js +66 -29
  110. package/dist/cjs/query-executor/default-query-executor.d.ts +19 -0
  111. package/dist/cjs/query-executor/noop-query-executor.d.ts +19 -0
  112. package/dist/cjs/query-executor/query-executor.d.ts +1 -1
  113. package/dist/cjs/query-executor/query-executor.js +1 -1
  114. package/dist/cjs/raw-builder/raw-builder.d.ts +2 -0
  115. package/dist/cjs/raw-builder/raw-builder.js +7 -1
  116. package/dist/cjs/schema/alter-table-builder.d.ts +230 -2
  117. package/dist/cjs/schema/alter-table-builder.js +12 -0
  118. package/dist/cjs/schema/column-definition-builder.d.ts +147 -20
  119. package/dist/cjs/schema/column-definition-builder.js +4 -1
  120. package/dist/cjs/schema/create-index-builder.d.ts +2 -1
  121. package/dist/cjs/schema/create-index-builder.js +2 -1
  122. package/dist/cjs/schema/create-table-builder.d.ts +26 -9
  123. package/dist/cjs/schema/create-table-builder.js +42 -9
  124. package/dist/cjs/schema/create-view-builder.d.ts +17 -3
  125. package/dist/cjs/schema/create-view-builder.js +25 -16
  126. package/dist/cjs/schema/schema.d.ts +18 -11
  127. package/dist/cjs/schema/schema.js +18 -11
  128. package/dist/cjs/util/log.d.ts +3 -2
  129. package/dist/cjs/util/log.js +8 -15
  130. package/dist/cjs/util/type-utils.d.ts +7 -7
  131. package/dist/esm/dialect/dialect-adapter-base.d.ts +36 -0
  132. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +38 -2
  133. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -1
  134. package/dist/esm/dialect/mysql/mysql-dialect.d.ts +16 -0
  135. package/dist/esm/dialect/mysql/mysql-driver.d.ts +29 -0
  136. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +3 -0
  137. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +38 -2
  138. package/dist/esm/dialect/postgres/postgres-adapter.js +2 -1
  139. package/dist/esm/dialect/postgres/postgres-dialect.d.ts +16 -0
  140. package/dist/esm/dialect/postgres/postgres-driver.d.ts +29 -0
  141. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +3 -0
  142. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +38 -2
  143. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +16 -0
  144. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +29 -0
  145. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +3 -0
  146. package/dist/esm/driver/default-connection-provider.d.ts +4 -0
  147. package/dist/esm/driver/runtime-driver.d.ts +29 -0
  148. package/dist/esm/driver/single-connection-provider.d.ts +4 -0
  149. package/dist/esm/dynamic/dynamic-reference-builder.d.ts +1 -0
  150. package/dist/esm/dynamic/dynamic-reference-builder.js +7 -0
  151. package/dist/esm/dynamic/dynamic.d.ts +6 -7
  152. package/dist/esm/dynamic/dynamic.js +6 -7
  153. package/dist/esm/index.d.ts +15 -4
  154. package/dist/esm/index.js +12 -1
  155. package/dist/esm/kysely.d.ts +170 -11
  156. package/dist/esm/kysely.js +69 -9
  157. package/dist/esm/migration/migration.d.ts +156 -13
  158. package/dist/esm/migration/migration.js +255 -134
  159. package/dist/esm/operation-node/column-definition-node.d.ts +6 -5
  160. package/dist/esm/operation-node/column-definition-node.js +0 -4
  161. package/dist/esm/operation-node/common-table-expression-name-node.d.ts +15 -0
  162. package/dist/esm/operation-node/common-table-expression-name-node.js +20 -0
  163. package/dist/esm/operation-node/common-table-expression-node.d.ts +3 -3
  164. package/dist/esm/operation-node/create-table-node.d.ts +6 -2
  165. package/dist/esm/operation-node/create-table-node.js +6 -6
  166. package/dist/esm/operation-node/create-view-node.d.ts +1 -0
  167. package/dist/esm/operation-node/insert-query-node.d.ts +4 -4
  168. package/dist/esm/operation-node/operation-node-transformer.d.ts +4 -0
  169. package/dist/esm/operation-node/operation-node-transformer.js +22 -2
  170. package/dist/esm/operation-node/operation-node-visitor.d.ts +4 -0
  171. package/dist/esm/operation-node/operation-node-visitor.js +2 -0
  172. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  173. package/dist/esm/operation-node/query-node.d.ts +0 -2
  174. package/dist/esm/operation-node/query-node.js +0 -10
  175. package/dist/esm/operation-node/values-node.d.ts +15 -0
  176. package/dist/esm/operation-node/values-node.js +15 -0
  177. package/dist/esm/operation-node/with-node.d.ts +3 -1
  178. package/dist/esm/operation-node/with-node.js +2 -1
  179. package/dist/esm/package.json +1 -3
  180. package/dist/esm/parser/complex-expression-parser.d.ts +9 -0
  181. package/dist/esm/parser/complex-expression-parser.js +20 -0
  182. package/dist/esm/parser/filter-parser.d.ts +13 -4
  183. package/dist/esm/parser/filter-parser.js +21 -24
  184. package/dist/esm/parser/insert-values-parser.d.ts +5 -9
  185. package/dist/esm/parser/insert-values-parser.js +27 -40
  186. package/dist/esm/parser/order-by-parser.d.ts +1 -1
  187. package/dist/esm/parser/parse-context.d.ts +22 -8
  188. package/dist/esm/parser/parse-context.js +10 -10
  189. package/dist/esm/parser/reference-parser.d.ts +8 -7
  190. package/dist/esm/parser/reference-parser.js +9 -18
  191. package/dist/esm/parser/returning-parser.d.ts +1 -5
  192. package/dist/esm/parser/select-parser.d.ts +12 -14
  193. package/dist/esm/parser/select-parser.js +6 -10
  194. package/dist/esm/parser/table-parser.d.ts +9 -11
  195. package/dist/esm/parser/table-parser.js +3 -9
  196. package/dist/esm/parser/union-parser.d.ts +2 -2
  197. package/dist/esm/parser/union-parser.js +1 -6
  198. package/dist/esm/parser/update-set-parser.d.ts +2 -8
  199. package/dist/esm/parser/update-set-parser.js +5 -24
  200. package/dist/esm/parser/value-parser.d.ts +9 -6
  201. package/dist/esm/parser/value-parser.js +8 -31
  202. package/dist/esm/parser/with-parser.d.ts +36 -6
  203. package/dist/esm/parser/with-parser.js +13 -2
  204. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +36 -2
  205. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.d.ts +34 -0
  206. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  207. package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +34 -0
  208. package/dist/esm/plugin/with-schema/with-schema-transformer.js +8 -0
  209. package/dist/esm/query-builder/delete-query-builder.d.ts +647 -0
  210. package/dist/esm/query-builder/delete-query-builder.js +181 -0
  211. package/dist/esm/query-builder/expression-builder.d.ts +8 -6
  212. package/dist/esm/query-builder/expression-builder.js +3 -3
  213. package/dist/esm/query-builder/function-builder.d.ts +2 -1
  214. package/dist/esm/query-builder/function-builder.js +2 -1
  215. package/dist/esm/query-builder/having-interface.d.ts +49 -0
  216. package/dist/esm/query-builder/having-interface.js +1 -0
  217. package/dist/esm/query-builder/insert-query-builder.d.ts +504 -0
  218. package/dist/esm/query-builder/insert-query-builder.js +252 -0
  219. package/dist/esm/query-builder/insert-result.d.ts +3 -2
  220. package/dist/esm/query-builder/insert-result.js +3 -2
  221. package/dist/esm/query-builder/join-builder.d.ts +19 -20
  222. package/dist/esm/query-builder/join-builder.js +12 -12
  223. package/dist/esm/query-builder/join-interface.d.ts +130 -0
  224. package/dist/esm/query-builder/join-interface.js +1 -0
  225. package/dist/esm/query-builder/no-result-error.d.ts +9 -0
  226. package/dist/esm/query-builder/no-result-error.js +10 -0
  227. package/dist/esm/query-builder/returning-interface.d.ts +73 -0
  228. package/dist/esm/query-builder/returning-interface.js +1 -0
  229. package/dist/esm/query-builder/{query-builder.d.ts → select-query-builder.d.ts} +145 -651
  230. package/dist/esm/query-builder/select-query-builder.js +566 -0
  231. package/dist/esm/query-builder/update-query-builder.d.ts +735 -0
  232. package/dist/esm/query-builder/update-query-builder.js +275 -0
  233. package/dist/esm/query-builder/where-interface.d.ts +378 -0
  234. package/dist/esm/query-builder/where-interface.js +1 -0
  235. package/dist/esm/query-compiler/default-query-compiler.d.ts +4 -0
  236. package/dist/esm/query-compiler/default-query-compiler.js +37 -6
  237. package/dist/esm/query-creator.d.ts +69 -43
  238. package/dist/esm/query-creator.js +66 -29
  239. package/dist/esm/query-executor/default-query-executor.d.ts +19 -0
  240. package/dist/esm/query-executor/noop-query-executor.d.ts +19 -0
  241. package/dist/esm/query-executor/query-executor.d.ts +1 -1
  242. package/dist/esm/query-executor/query-executor.js +1 -1
  243. package/dist/esm/raw-builder/raw-builder.d.ts +2 -0
  244. package/dist/esm/raw-builder/raw-builder.js +7 -1
  245. package/dist/esm/schema/alter-table-builder.d.ts +230 -2
  246. package/dist/esm/schema/alter-table-builder.js +12 -0
  247. package/dist/esm/schema/column-definition-builder.d.ts +147 -20
  248. package/dist/esm/schema/column-definition-builder.js +4 -1
  249. package/dist/esm/schema/create-index-builder.d.ts +2 -1
  250. package/dist/esm/schema/create-index-builder.js +2 -1
  251. package/dist/esm/schema/create-table-builder.d.ts +26 -9
  252. package/dist/esm/schema/create-table-builder.js +43 -10
  253. package/dist/esm/schema/create-view-builder.d.ts +17 -3
  254. package/dist/esm/schema/create-view-builder.js +25 -16
  255. package/dist/esm/schema/schema.d.ts +18 -11
  256. package/dist/esm/schema/schema.js +18 -11
  257. package/dist/esm/util/log.d.ts +3 -2
  258. package/dist/esm/util/log.js +7 -14
  259. package/dist/esm/util/type-utils.d.ts +7 -7
  260. package/package.json +10 -8
  261. package/dist/cjs/query-builder/query-builder.js +0 -1067
  262. package/dist/esm/query-builder/query-builder.js +0 -1061
@@ -0,0 +1,504 @@
1
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
2
+ import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
+ import { SelectExpression } from '../parser/select-parser.js';
4
+ import { InsertObject } from '../parser/insert-values-parser.js';
5
+ import { InsertQueryNode } from '../operation-node/insert-query-node.js';
6
+ import { AnyColumn, SingleResultType } from '../util/type-utils.js';
7
+ import { MutationObject } from '../parser/update-set-parser.js';
8
+ import { Compilable } from '../util/compilable.js';
9
+ import { QueryExecutor } from '../query-executor/query-executor.js';
10
+ import { QueryId } from '../util/query-id.js';
11
+ import { OnConflictConstraintTarget } from '../parser/on-conflict-parser.js';
12
+ import { ParseContext } from '../parser/parse-context.js';
13
+ import { KyselyPlugin } from '../plugin/kysely-plugin.js';
14
+ import { ReturningRow } from '../parser/returning-parser.js';
15
+ import { NoResultErrorConstructor } from './no-result-error.js';
16
+ import { ComplexExpression } from '../parser/complex-expression-parser.js';
17
+ import { ReturningInterface } from './returning-interface.js';
18
+ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
19
+ #private;
20
+ constructor(props: InsertQueryBuilderProps);
21
+ /**
22
+ * Sets the values to insert for an {@link Kysely.insertInto | insert} query.
23
+ *
24
+ * This method takes an object whose keys are column names and values are
25
+ * values to insert. In addition to the column's type, the values can be
26
+ * {@link Kysely.raw | raw} instances, select queries or the
27
+ * {@link Kysely.generated | generated} placeholder.
28
+ *
29
+ * You must provide all values defined by the interface of the table you
30
+ * are inserting into. Values that are generated by the database like auto incrementing
31
+ * identifiers can be marked with the {@link Kysely.generated} placeholder unless you
32
+ * want to insert a specific value instead of the generated default.
33
+ *
34
+ * The return value of an `insert` query is an instance of {@link InsertResult}. The
35
+ * {@link InsertResult.insertId | insertId} field holds the auto incremented primary
36
+ * key if the database returned one.
37
+ *
38
+ * On PostgreSQL and some other dialects, you need to call `returning` to get
39
+ * something out of the query.
40
+ *
41
+ * Also see the {@link expression} method for inserting the result of a select
42
+ * query or any other expression.
43
+ *
44
+ * ### Examples
45
+ *
46
+ * Insert a row into `person`:
47
+ * ```ts
48
+ * const id = await db
49
+ * .insertInto('person')
50
+ * .values({
51
+ * id: db.generated,
52
+ * first_name: 'Jennifer',
53
+ * last_name: 'Aniston'
54
+ * })
55
+ * .executeTakeFirstOrThrow()
56
+ * ```
57
+ *
58
+ * The generated SQL (PostgreSQL):
59
+ *
60
+ * ```sql
61
+ * insert into "person" ("first_name", "last_name") values ($1, $2)
62
+ * ```
63
+ *
64
+ * On dialects that support it (for example PostgreSQL) you can insert multiple
65
+ * rows by providing an array. Note that the return value is once again very
66
+ * dialect-specific. Some databases may only return the id of the *last* inserted
67
+ * row and some return nothing at all unless you call `returning`.
68
+ *
69
+ * ```ts
70
+ * await db
71
+ * .insertInto('person')
72
+ * .values([{
73
+ * id: db.generated,
74
+ * first_name: 'Jennifer',
75
+ * last_name: 'Aniston'
76
+ * }, {
77
+ * id: db.generated,
78
+ * first_name: 'Arnold',
79
+ * last_name: 'Schwarzenegger',
80
+ * }])
81
+ * .execute()
82
+ * ```
83
+ *
84
+ * The generated SQL (PostgreSQL):
85
+ *
86
+ * ```sql
87
+ * insert into "person" ("first_name", "last_name") values (($1, $2), ($3, $4))
88
+ * ```
89
+ *
90
+ * On PostgreSQL you need to chain `returning` to the query to get
91
+ * the inserted row's columns (or any other expression) as the
92
+ * return value:
93
+ *
94
+ * ```ts
95
+ * const row = await db
96
+ * .insertInto('person')
97
+ * .values({
98
+ * id: db.generated,
99
+ * first_name: 'Jennifer',
100
+ * last_name: 'Aniston'
101
+ * })
102
+ * .returning('id')
103
+ * .executeTakeFirstOrThrow()
104
+ *
105
+ * row.id
106
+ * ```
107
+ *
108
+ * The generated SQL (PostgreSQL):
109
+ *
110
+ * ```sql
111
+ * insert into "person" ("first_name", "last_name") values ($1, $2) returning "id"
112
+ * ```
113
+ *
114
+ * In addition to primitives, the values can also be `raw` expressions or
115
+ * select queries:
116
+ *
117
+ * ```ts
118
+ * const result = await db
119
+ * .insertInto('person')
120
+ * .values({
121
+ * id: db.generated,
122
+ * first_name: 'Jennifer',
123
+ * last_name: db.raw('? || ?', ['Ani', 'ston']),
124
+ * age: db.selectFrom('person').select(raw('avg(age)')),
125
+ * })
126
+ * .executeTakeFirst()
127
+ *
128
+ * console.log(result.insertId)
129
+ * ```
130
+ *
131
+ * The generated SQL (PostgreSQL):
132
+ *
133
+ * ```sql
134
+ * insert into "person" ("first_name", "last_name", "age")
135
+ * values ($1, $2 || $3, (select avg(age) from "person"))
136
+ * ```
137
+ *
138
+ * You can also use the callback version of subqueries or raw expressions:
139
+ *
140
+ * ```ts
141
+ * db.with('jennifer', (db) => db
142
+ * .selectFrom('person')
143
+ * .where('first_name', '=', 'Jennifer')
144
+ * .select(['id', 'first_name', 'gender'])
145
+ * .limit(1)
146
+ * ).insertInto('pet').values({
147
+ * id: db.generated,
148
+ * owner_id: (eb) => eb.selectFrom('jennifer').select('id'),
149
+ * name: (eb) => eb.selectFrom('jennifer').select('first_name'),
150
+ * species: 'cat',
151
+ * })
152
+ * ```
153
+ */
154
+ values(row: InsertObject<DB, TB>): InsertQueryBuilder<DB, TB, O>;
155
+ values(row: ReadonlyArray<InsertObject<DB, TB>>): InsertQueryBuilder<DB, TB, O>;
156
+ /**
157
+ * Sets the columns to insert.
158
+ *
159
+ * The {@link values} method sets both the columns and the values and this method
160
+ * is not needed. But if you are using the {@link expression} method, you can use
161
+ * this method to set the columns to insert.
162
+ *
163
+ * ### Examples
164
+ *
165
+ * ```ts
166
+ * db.insertInto('person')
167
+ * .columns(['first_name'])
168
+ * .expression((eb) => eb.selectFrom('pet').select('pet.name'))
169
+ * ```
170
+ *
171
+ * The generated SQL (PostgreSQL):
172
+ *
173
+ * ```sql
174
+ * insert into "person" ("first_name")
175
+ * select "pet"."name" from "pet"
176
+ * ```
177
+ */
178
+ columns(columns: ReadonlyArray<keyof DB[TB] & string>): InsertQueryBuilder<DB, TB, O>;
179
+ /**
180
+ * Insert an arbitrary expression. For example the result of a select query.
181
+ *
182
+ * ### Examples
183
+ *
184
+ * ```ts
185
+ * db.insertInto('person')
186
+ * .columns(['first_name'])
187
+ * .expression((eb) => eb.selectFrom('pet').select('pet.name'))
188
+ * ```
189
+ *
190
+ * The generated SQL (PostgreSQL):
191
+ *
192
+ * ```sql
193
+ * insert into "person" ("first_name")
194
+ * select "pet"."name" from "pet"
195
+ * ```
196
+ */
197
+ expression(expression: ComplexExpression<DB, TB>): InsertQueryBuilder<DB, TB, O>;
198
+ /**
199
+ * Ignores the insert if the column or constraint given as the first
200
+ * argument conflicts with the current rows in the database. The
201
+ * default behavior without this method call is to throw an error.
202
+ *
203
+ * For example if a table has a field `name` that has a unique constraint
204
+ * and you try to insert a row with a `name` that already exists in the
205
+ * database, calling `onConflictDoNothing('name')` will ignore the conflict
206
+ * and do nothing. By default the query would throw.
207
+ *
208
+ * Only some dialects like PostgreSQL and SQLite implement the `on conflict`
209
+ * statement. On MySQL you should use the {@link ignore} method to achieve
210
+ * similar results.
211
+ *
212
+ * Also see the {@link onConflictUpdate} method if you want to perform an
213
+ * update in case of a conflict (upsert).
214
+ *
215
+ * ### Examples
216
+ *
217
+ * ```ts
218
+ * await db
219
+ * .insertInto('pet')
220
+ * .values({
221
+ * id: db.generated,
222
+ * name: 'Catto',
223
+ * species: 'cat',
224
+ * })
225
+ * .onConflictDoNothing('name')
226
+ * .execute()
227
+ * ```
228
+ *
229
+ * The generated SQL (PostgreSQL):
230
+ *
231
+ * ```sql
232
+ * insert into "pet" ("name", "species")
233
+ * values ($1, $2)
234
+ * on conflict ("name") do nothing
235
+ * ```
236
+ *
237
+ * You can provide the name of the constraint instead of a column name
238
+ *
239
+ * ```ts
240
+ * await db
241
+ * .insertInto('pet')
242
+ * .values({
243
+ * id: db.generated,
244
+ * name: 'Catto',
245
+ * species: 'cat',
246
+ * })
247
+ * .onConflictDoNothing({
248
+ * constraint: 'pet_name_key'
249
+ * })
250
+ * .execute()
251
+ * ```
252
+ *
253
+ * The generated SQL (PostgreSQL):
254
+ *
255
+ * ```sql
256
+ * insert into "pet" ("name", "species")
257
+ * values ($1, $2)
258
+ * on conflict on constraint "pet_name_key"
259
+ * do nothing
260
+ * ```
261
+ */
262
+ onConflictDoNothing(column: AnyColumn<DB, TB>): InsertQueryBuilder<DB, TB, O>;
263
+ onConflictDoNothing(columns: ReadonlyArray<AnyColumn<DB, TB>>): InsertQueryBuilder<DB, TB, O>;
264
+ onConflictDoNothing(constraint: OnConflictConstraintTarget): InsertQueryBuilder<DB, TB, O>;
265
+ /**
266
+ * Changes an `insert into` query to an `insert ignore into` query.
267
+ *
268
+ * If you use the ignore modifier, ignorable errors that occur while executing the
269
+ * insert statement are ignored. For example, without ignore, a row that duplicates
270
+ * an existing unique index or primary key value in the table causes a duplicate-key
271
+ * error and the statement is aborted. With ignore, the row is discarded and no error
272
+ * occurs.
273
+ *
274
+ * This is only supported on some dialects like MySQL. On most dialects you should
275
+ * use the {@link onConflictDoNothing} method.
276
+ *
277
+ * ### Examples
278
+ *
279
+ * ```ts
280
+ * await db.insertInto('person')
281
+ * .ignore()
282
+ * .values(values)
283
+ * .execute()
284
+ * ```
285
+ */
286
+ ignore(): InsertQueryBuilder<DB, TB, O>;
287
+ /**
288
+ * Ignores an insert if the column or constraint given as the first
289
+ * argument conflicts with the current rows in the database and
290
+ * performs an update on the conflicting row instead. This method
291
+ * can be used to implement an upsert operation.
292
+ *
293
+ * For example if a table has a field `name` that has a unique constraint
294
+ * and you try to insert a row with a `name` that already exists in the
295
+ * database, calling `onConfictUpdate('name', { species: 'hamster' })`
296
+ * will set the conflicting row's `species` field to value `'hamster'`.
297
+ * By default the query would throw.
298
+ *
299
+ * The second argument (updates) can be anything the {@link UpdateQueryBuilder.set | set}
300
+ * method accepts.
301
+ *
302
+ * The `on conflict do update` statement is only implemented by some dialects
303
+ * like PostgreSQL and SQLite. On MySQL you should use the {@link onDuplicateKeyUpdate}
304
+ * method instead.
305
+ *
306
+ * Also see the {@link onConflictDoNothing} method.
307
+ *
308
+ * ### Examples
309
+ *
310
+ * ```ts
311
+ * await db
312
+ * .insertInto('pet')
313
+ * .values({
314
+ * id: db.generated,
315
+ * name: 'Catto',
316
+ * species: 'cat',
317
+ * })
318
+ * .onConflictUpdate('name', { species: 'hamster' })
319
+ * .execute()
320
+ * ```
321
+ *
322
+ * The generated SQL (PostgreSQL):
323
+ *
324
+ * ```sql
325
+ * insert into "pet" ("name", "species")
326
+ * values ($1, $2)
327
+ * on conflict ("name") do update set "species" = $3
328
+ * ```
329
+ *
330
+ * You can provied the name of the constraint instead of a column name
331
+ *
332
+ * ```ts
333
+ * await db
334
+ * .insertInto('pet')
335
+ * .values({
336
+ * id: db.generated,
337
+ * name: 'Catto',
338
+ * species: 'cat',
339
+ * })
340
+ * .onConflictUpdate(
341
+ * { constraint: 'pet_name_key' },
342
+ * { species: 'hamster' }
343
+ * )
344
+ * .execute()
345
+ * ```
346
+ *
347
+ * The generated SQL (PostgreSQL):
348
+ *
349
+ * ```sql
350
+ * insert into "pet" ("name", "species")
351
+ * values ($1, $2)
352
+ * on conflict on constraint "pet_name_key"
353
+ * do update set "species" = $3
354
+ * ```
355
+ */
356
+ onConflictUpdate(column: AnyColumn<DB, TB>, updates: MutationObject<DB, TB>): InsertQueryBuilder<DB, TB, O>;
357
+ onConflictUpdate(columns: ReadonlyArray<AnyColumn<DB, TB>>, updates: MutationObject<DB, TB>): InsertQueryBuilder<DB, TB, O>;
358
+ onConflictUpdate(constraint: OnConflictConstraintTarget, updates: MutationObject<DB, TB>): InsertQueryBuilder<DB, TB, O>;
359
+ /**
360
+ * Adds `on duplicate key update` to the query.
361
+ *
362
+ * If you specify `on duplicate key update`, and a row is inserted that would cause
363
+ * a duplicate value in a unique index or primary key, an update of the old row occurs.
364
+ *
365
+ * This is only implemented by some dialects like MySQL. On most dialects you should
366
+ * use {@link onConflictUpdate} instead.
367
+ *
368
+ * ### Examples
369
+ *
370
+ * ```ts
371
+ * await db
372
+ * .insertInto('person')
373
+ * .values(values)
374
+ * .onDuplicateKeyUpdate({ species: 'hamster' })
375
+ * ```
376
+ */
377
+ onDuplicateKeyUpdate(updates: MutationObject<DB, TB>): InsertQueryBuilder<DB, TB, O>;
378
+ /**
379
+ * Allows you to return data from modified rows.
380
+ *
381
+ * On supported databases like PostgreSQL, this method can be chained to
382
+ * `insert`, `update` and `delete` queries to return data.
383
+ *
384
+ * Note that on SQLite you need to give aliases for the expressions to avoid
385
+ * [this bug](https://sqlite.org/forum/forumpost/033daf0b32) in SQLite.
386
+ * For example `.returning('id as id')`.
387
+ *
388
+ * Also see the {@link returningAll} method.
389
+ *
390
+ * ### Examples
391
+ *
392
+ * Return one column:
393
+ *
394
+ * ```ts
395
+ * const { id } = await db
396
+ * .insertInto('person')
397
+ * .values({
398
+ * id: db.generated,
399
+ * first_name: 'Jennifer',
400
+ * last_name: 'Aniston'
401
+ * })
402
+ * .returning('id')
403
+ * .executeTakeFirst()
404
+ * ```
405
+ *
406
+ * Return multiple columns:
407
+ *
408
+ * ```ts
409
+ * const { id, first_name } = await db
410
+ * .insertInto('person')
411
+ * .values({
412
+ * id: db.generated,
413
+ * first_name: 'Jennifer',
414
+ * last_name: 'Aniston'
415
+ * })
416
+ * .returning(['id', 'last_name'])
417
+ * .executeTakeFirst()
418
+ * ```
419
+ *
420
+ * Return arbitrary expressions:
421
+ *
422
+ * ```ts
423
+ * const { raw } = db
424
+ *
425
+ * const { id, full_name, first_pet_id } = await db
426
+ * .insertInto('person')
427
+ * .values({
428
+ * id: db.generated,
429
+ * first_name: 'Jennifer',
430
+ * last_name: 'Aniston'
431
+ * })
432
+ * .returning([
433
+ * 'id as id',
434
+ * raw<string>(`concat(first_name, ' ', last_name)`).as('full_name'),
435
+ * (qb) => qb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
436
+ * ])
437
+ * .executeTakeFirst()
438
+ * ```
439
+ */
440
+ returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
441
+ returning<SE extends SelectExpression<DB, TB>>(selection: SE): InsertQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
442
+ /**
443
+ * Adds a `returning *` to an insert/update/delete query on databases
444
+ * that support `returning` such as PostgreSQL.
445
+ */
446
+ returningAll(): InsertQueryBuilder<DB, TB, DB[TB]>;
447
+ /**
448
+ * Simply calls the given function passing `this` as the only argument.
449
+ *
450
+ * This method can be useful when adding optional method calls:
451
+ *
452
+ * ### Examples
453
+ *
454
+ * ```ts
455
+ * db.insertInto('person')
456
+ * .selectAll()
457
+ * .call((qb) => {
458
+ * if (something) {
459
+ * return qb.onConflictDoNothing('something')
460
+ * } else {
461
+ * return qb.onConflictDoNothing('something_else')
462
+ * }
463
+ * })
464
+ * .execute()
465
+ * ```
466
+ */
467
+ call<T>(func: (qb: this) => T): T;
468
+ /**
469
+ * Change the output type of the query.
470
+ *
471
+ * You should only use this method as the last resort if the types
472
+ * don't support your use case.
473
+ */
474
+ castTo<T>(): InsertQueryBuilder<DB, TB, T>;
475
+ withPlugin(plugin: KyselyPlugin): InsertQueryBuilder<DB, TB, O>;
476
+ toOperationNode(): InsertQueryNode;
477
+ compile(): CompiledQuery;
478
+ /**
479
+ * Executes the query and returns an array of rows.
480
+ *
481
+ * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
482
+ */
483
+ execute(): Promise<O[]>;
484
+ /**
485
+ * Executes the query and returns the first result or undefined if
486
+ * the query returned no result.
487
+ */
488
+ executeTakeFirst(): Promise<SingleResultType<O>>;
489
+ /**
490
+ * Executes the query and returns the first result or throws if
491
+ * the query returned no result.
492
+ *
493
+ * By default an instance of {@link NoResultError} is thrown, but you can
494
+ * provide a custom error class as the only argument to throw a different
495
+ * error.
496
+ */
497
+ executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor): Promise<O>;
498
+ }
499
+ export interface InsertQueryBuilderProps {
500
+ readonly queryId: QueryId;
501
+ readonly queryNode: InsertQueryNode;
502
+ readonly executor: QueryExecutor;
503
+ readonly parseContext: ParseContext;
504
+ }