kysely 0.27.1 → 0.27.3

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 (161) hide show
  1. package/dist/cjs/dialect/database-introspector.d.ts +1 -0
  2. package/dist/cjs/dialect/mssql/mssql-introspector.js +13 -2
  3. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  4. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +8 -0
  5. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
  6. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  7. package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
  8. package/dist/cjs/dialect/postgres/postgres-introspector.js +2 -0
  9. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
  10. package/dist/cjs/driver/database-connection.d.ts +1 -1
  11. package/dist/cjs/expression/expression-builder.d.ts +30 -4
  12. package/dist/cjs/expression/expression-builder.js +5 -0
  13. package/dist/cjs/index.d.ts +7 -1
  14. package/dist/cjs/index.js +6 -0
  15. package/dist/cjs/migration/migrator.d.ts +19 -2
  16. package/dist/cjs/migration/migrator.js +77 -43
  17. package/dist/cjs/operation-node/add-index-node.js +1 -1
  18. package/dist/cjs/operation-node/cast-node.d.ts +13 -0
  19. package/dist/cjs/operation-node/cast-node.js +19 -0
  20. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  21. package/dist/cjs/operation-node/data-type-node.d.ts +5 -1
  22. package/dist/cjs/operation-node/data-type-node.js +55 -1
  23. package/dist/cjs/operation-node/delete-query-node.d.ts +4 -0
  24. package/dist/cjs/operation-node/delete-query-node.js +12 -0
  25. package/dist/cjs/operation-node/fetch-node.d.ts +15 -0
  26. package/dist/cjs/operation-node/fetch-node.js +19 -0
  27. package/dist/cjs/operation-node/insert-query-node.d.ts +4 -1
  28. package/dist/cjs/operation-node/insert-query-node.js +5 -0
  29. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  30. package/dist/cjs/operation-node/matched-node.d.ts +13 -0
  31. package/dist/cjs/operation-node/matched-node.js +19 -0
  32. package/dist/cjs/operation-node/merge-query-node.d.ts +25 -0
  33. package/dist/cjs/operation-node/merge-query-node.js +45 -0
  34. package/dist/cjs/operation-node/operation-node-transformer.d.ts +10 -0
  35. package/dist/cjs/operation-node/operation-node-transformer.js +50 -0
  36. package/dist/cjs/operation-node/operation-node-visitor.d.ts +10 -0
  37. package/dist/cjs/operation-node/operation-node-visitor.js +5 -0
  38. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/query-node.d.ts +10 -3
  40. package/dist/cjs/operation-node/query-node.js +15 -1
  41. package/dist/cjs/operation-node/select-query-node.d.ts +5 -0
  42. package/dist/cjs/operation-node/select-query-node.js +6 -0
  43. package/dist/cjs/operation-node/top-node.d.ts +14 -0
  44. package/dist/cjs/operation-node/top-node.js +19 -0
  45. package/dist/cjs/operation-node/update-query-node.d.ts +7 -1
  46. package/dist/cjs/operation-node/update-query-node.js +11 -0
  47. package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
  48. package/dist/cjs/parser/binary-operation-parser.js +2 -2
  49. package/dist/cjs/parser/data-type-parser.js +7 -3
  50. package/dist/cjs/parser/fetch-parser.d.ts +2 -0
  51. package/dist/cjs/parser/fetch-parser.js +18 -0
  52. package/dist/cjs/parser/insert-values-parser.d.ts +3 -3
  53. package/dist/cjs/parser/merge-parser.d.ts +9 -0
  54. package/dist/cjs/parser/merge-parser.js +32 -0
  55. package/dist/cjs/parser/table-parser.d.ts +4 -3
  56. package/dist/cjs/parser/top-parser.d.ts +2 -0
  57. package/dist/cjs/parser/top-parser.js +20 -0
  58. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +4 -0
  59. package/dist/cjs/query-builder/delete-query-builder.d.ts +99 -0
  60. package/dist/cjs/query-builder/delete-query-builder.js +120 -0
  61. package/dist/cjs/query-builder/insert-query-builder.d.ts +73 -3
  62. package/dist/cjs/query-builder/insert-query-builder.js +242 -0
  63. package/dist/cjs/query-builder/merge-query-builder.d.ts +557 -0
  64. package/dist/cjs/query-builder/merge-query-builder.js +518 -0
  65. package/dist/cjs/query-builder/merge-result.d.ts +4 -0
  66. package/dist/cjs/query-builder/merge-result.js +10 -0
  67. package/dist/cjs/query-builder/select-query-builder.d.ts +102 -7
  68. package/dist/cjs/query-builder/select-query-builder.js +14 -0
  69. package/dist/cjs/query-builder/update-query-builder.d.ts +82 -3
  70. package/dist/cjs/query-builder/update-query-builder.js +98 -0
  71. package/dist/cjs/query-compiler/default-query-compiler.d.ts +10 -0
  72. package/dist/cjs/query-compiler/default-query-compiler.js +94 -10
  73. package/dist/cjs/query-compiler/query-compiler.d.ts +2 -1
  74. package/dist/cjs/query-creator.d.ts +40 -2
  75. package/dist/cjs/query-creator.js +9 -0
  76. package/dist/cjs/schema/alter-table-add-index-builder.js +6 -2
  77. package/dist/cjs/schema/column-definition-builder.d.ts +13 -1
  78. package/dist/cjs/schema/column-definition-builder.js +15 -1
  79. package/dist/cjs/util/infer-result.d.ts +2 -1
  80. package/dist/cjs/util/type-utils.d.ts +3 -2
  81. package/dist/esm/dialect/database-introspector.d.ts +1 -0
  82. package/dist/esm/dialect/mssql/mssql-introspector.js +13 -2
  83. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  84. package/dist/esm/dialect/mssql/mssql-query-compiler.js +8 -0
  85. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
  86. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  87. package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
  88. package/dist/esm/dialect/postgres/postgres-introspector.js +2 -0
  89. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
  90. package/dist/esm/driver/database-connection.d.ts +1 -1
  91. package/dist/esm/expression/expression-builder.d.ts +30 -4
  92. package/dist/esm/expression/expression-builder.js +5 -0
  93. package/dist/esm/index.d.ts +7 -1
  94. package/dist/esm/index.js +6 -0
  95. package/dist/esm/migration/migrator.d.ts +19 -2
  96. package/dist/esm/migration/migrator.js +76 -42
  97. package/dist/esm/operation-node/add-index-node.js +1 -1
  98. package/dist/esm/operation-node/cast-node.d.ts +13 -0
  99. package/dist/esm/operation-node/cast-node.js +17 -0
  100. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  101. package/dist/esm/operation-node/data-type-node.d.ts +5 -1
  102. package/dist/esm/operation-node/data-type-node.js +53 -0
  103. package/dist/esm/operation-node/delete-query-node.d.ts +4 -0
  104. package/dist/esm/operation-node/delete-query-node.js +12 -0
  105. package/dist/esm/operation-node/fetch-node.d.ts +15 -0
  106. package/dist/esm/operation-node/fetch-node.js +17 -0
  107. package/dist/esm/operation-node/insert-query-node.d.ts +4 -1
  108. package/dist/esm/operation-node/insert-query-node.js +5 -0
  109. package/dist/esm/operation-node/join-node.d.ts +1 -1
  110. package/dist/esm/operation-node/matched-node.d.ts +13 -0
  111. package/dist/esm/operation-node/matched-node.js +17 -0
  112. package/dist/esm/operation-node/merge-query-node.d.ts +25 -0
  113. package/dist/esm/operation-node/merge-query-node.js +43 -0
  114. package/dist/esm/operation-node/operation-node-transformer.d.ts +10 -0
  115. package/dist/esm/operation-node/operation-node-transformer.js +50 -0
  116. package/dist/esm/operation-node/operation-node-visitor.d.ts +10 -0
  117. package/dist/esm/operation-node/operation-node-visitor.js +5 -0
  118. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  119. package/dist/esm/operation-node/query-node.d.ts +10 -3
  120. package/dist/esm/operation-node/query-node.js +15 -1
  121. package/dist/esm/operation-node/select-query-node.d.ts +5 -0
  122. package/dist/esm/operation-node/select-query-node.js +6 -0
  123. package/dist/esm/operation-node/top-node.d.ts +14 -0
  124. package/dist/esm/operation-node/top-node.js +17 -0
  125. package/dist/esm/operation-node/update-query-node.d.ts +7 -1
  126. package/dist/esm/operation-node/update-query-node.js +11 -0
  127. package/dist/esm/parser/binary-operation-parser.d.ts +1 -1
  128. package/dist/esm/parser/binary-operation-parser.js +2 -2
  129. package/dist/esm/parser/data-type-parser.js +8 -4
  130. package/dist/esm/parser/fetch-parser.d.ts +2 -0
  131. package/dist/esm/parser/fetch-parser.js +15 -0
  132. package/dist/esm/parser/insert-values-parser.d.ts +3 -3
  133. package/dist/esm/parser/merge-parser.d.ts +9 -0
  134. package/dist/esm/parser/merge-parser.js +28 -0
  135. package/dist/esm/parser/table-parser.d.ts +4 -3
  136. package/dist/esm/parser/top-parser.d.ts +2 -0
  137. package/dist/esm/parser/top-parser.js +17 -0
  138. package/dist/esm/plugin/with-schema/with-schema-transformer.js +4 -0
  139. package/dist/esm/query-builder/delete-query-builder.d.ts +99 -0
  140. package/dist/esm/query-builder/delete-query-builder.js +120 -0
  141. package/dist/esm/query-builder/insert-query-builder.d.ts +73 -3
  142. package/dist/esm/query-builder/insert-query-builder.js +242 -0
  143. package/dist/esm/query-builder/merge-query-builder.d.ts +557 -0
  144. package/dist/esm/query-builder/merge-query-builder.js +512 -0
  145. package/dist/esm/query-builder/merge-result.d.ts +4 -0
  146. package/dist/esm/query-builder/merge-result.js +7 -0
  147. package/dist/esm/query-builder/select-query-builder.d.ts +102 -7
  148. package/dist/esm/query-builder/select-query-builder.js +14 -0
  149. package/dist/esm/query-builder/update-query-builder.d.ts +82 -3
  150. package/dist/esm/query-builder/update-query-builder.js +98 -0
  151. package/dist/esm/query-compiler/default-query-compiler.d.ts +10 -0
  152. package/dist/esm/query-compiler/default-query-compiler.js +94 -10
  153. package/dist/esm/query-compiler/query-compiler.d.ts +2 -1
  154. package/dist/esm/query-creator.d.ts +40 -2
  155. package/dist/esm/query-creator.js +10 -1
  156. package/dist/esm/schema/alter-table-add-index-builder.js +7 -3
  157. package/dist/esm/schema/column-definition-builder.d.ts +13 -1
  158. package/dist/esm/schema/column-definition-builder.js +15 -1
  159. package/dist/esm/util/infer-result.d.ts +2 -1
  160. package/dist/esm/util/type-utils.d.ts +3 -2
  161. package/package.json +22 -21
@@ -12,6 +12,7 @@ import { LimitNode } from '../operation-node/limit-node.js';
12
12
  import { parseOrderBy, } from '../parser/order-by-parser.js';
13
13
  import { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js';
14
14
  import { parseValueExpression, } from '../parser/value-parser.js';
15
+ import { parseTop } from '../parser/top-parser.js';
15
16
  export class DeleteQueryBuilder {
16
17
  #props;
17
18
  constructor(props) {
@@ -35,6 +36,51 @@ export class DeleteQueryBuilder {
35
36
  queryNode: QueryNode.cloneWithoutWhere(this.#props.queryNode),
36
37
  });
37
38
  }
39
+ /**
40
+ * Changes a `delete from` query into a `delete top from` query.
41
+ *
42
+ * `top` clause is only supported by some dialects like MS SQL Server.
43
+ *
44
+ * ### Examples
45
+ *
46
+ * Delete the first 5 rows:
47
+ *
48
+ * ```ts
49
+ * await db
50
+ * .deleteFrom('person')
51
+ * .top(5)
52
+ * .where('age', '>', 18)
53
+ * .executeTakeFirstOrThrow()
54
+ * ```
55
+ *
56
+ * The generated SQL (MS SQL Server):
57
+ *
58
+ * ```sql
59
+ * delete top(5) from "person" where "age" > @1
60
+ * ```
61
+ *
62
+ * Delete the first 50% of rows:
63
+ *
64
+ * ```ts
65
+ * await db
66
+ * .deleteFrom('person')
67
+ * .top(50, 'percent')
68
+ * .where('age', '>', 18)
69
+ * .executeTakeFirstOrThrow()
70
+ * ```
71
+ *
72
+ * The generated SQL (MS SQL Server):
73
+ *
74
+ * ```sql
75
+ * delete top(50) percent from "person" where "age" > @1
76
+ * ```
77
+ */
78
+ top(expression, modifiers) {
79
+ return new DeleteQueryBuilder({
80
+ ...this.#props,
81
+ queryNode: QueryNode.cloneWithTop(this.#props.queryNode, parseTop(expression, modifiers)),
82
+ });
83
+ }
38
84
  using(tables) {
39
85
  return new DeleteQueryBuilder({
40
86
  ...this.#props,
@@ -77,6 +123,80 @@ export class DeleteQueryBuilder {
77
123
  queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll(table)),
78
124
  });
79
125
  }
126
+ /**
127
+ * Clears all `returning` clauses from the query.
128
+ *
129
+ * ### Examples
130
+ *
131
+ * ```ts
132
+ * db.deleteFrom('pet')
133
+ * .returningAll()
134
+ * .where('name', '=', 'Max')
135
+ * .clearReturning()
136
+ * ```
137
+ *
138
+ * The generated SQL(PostgreSQL):
139
+ *
140
+ * ```sql
141
+ * delete from "pet" where "name" = "Max"
142
+ * ```
143
+ */
144
+ clearReturning() {
145
+ return new DeleteQueryBuilder({
146
+ ...this.#props,
147
+ queryNode: QueryNode.cloneWithoutReturning(this.#props.queryNode),
148
+ });
149
+ }
150
+ /**
151
+ * Clears the `limit` clause from the query.
152
+ *
153
+ * ### Examples
154
+ *
155
+ * ```ts
156
+ * db.deleteFrom('pet')
157
+ * .returningAll()
158
+ * .where('name', '=', 'Max')
159
+ * .limit(5)
160
+ * .clearLimit()
161
+ * ```
162
+ *
163
+ * The generated SQL(PostgreSQL):
164
+ *
165
+ * ```sql
166
+ * delete from "pet" where "name" = "Max" returning *
167
+ * ```
168
+ */
169
+ clearLimit() {
170
+ return new DeleteQueryBuilder({
171
+ ...this.#props,
172
+ queryNode: DeleteQueryNode.cloneWithoutLimit(this.#props.queryNode),
173
+ });
174
+ }
175
+ /**
176
+ * Clears the `order by` clause from the query.
177
+ *
178
+ * ### Examples
179
+ *
180
+ * ```ts
181
+ * db.deleteFrom('pet')
182
+ * .returningAll()
183
+ * .where('name', '=', 'Max')
184
+ * .orderBy('id')
185
+ * .clearOrderBy()
186
+ * ```
187
+ *
188
+ * The generated SQL(PostgreSQL):
189
+ *
190
+ * ```sql
191
+ * delete from "pet" where "name" = "Max" returning *
192
+ * ```
193
+ */
194
+ clearOrderBy() {
195
+ return new DeleteQueryBuilder({
196
+ ...this.#props,
197
+ queryNode: DeleteQueryNode.cloneWithoutOrderBy(this.#props.queryNode),
198
+ });
199
+ }
80
200
  /**
81
201
  * Adds an `order by` clause to the query.
82
202
  *
@@ -1,7 +1,7 @@
1
1
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
2
2
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
3
  import { SelectExpression, SelectCallback } from '../parser/select-parser.js';
4
- import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert-values-parser.js';
4
+ import { InsertExpression } from '../parser/insert-values-parser.js';
5
5
  import { InsertQueryNode } from '../operation-node/insert-query-node.js';
6
6
  import { QueryNode } from '../operation-node/query-node.js';
7
7
  import { NarrowPartial, SimplifyResult, SimplifySingleResult } from '../util/type-utils.js';
@@ -184,8 +184,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
184
184
  * }))
185
185
  * ```
186
186
  */
187
- values(insert: InsertObjectOrList<DB, TB>): InsertQueryBuilder<DB, TB, O>;
188
- values(insert: InsertObjectOrListFactory<DB, TB>): InsertQueryBuilder<DB, TB, O>;
187
+ values(insert: InsertExpression<DB, TB>): InsertQueryBuilder<DB, TB, O>;
189
188
  /**
190
189
  * Sets the columns to insert.
191
190
  *
@@ -242,6 +241,14 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
242
241
  expression(expression: ExpressionOrFactory<DB, TB, any>): InsertQueryBuilder<DB, TB, O>;
243
242
  /**
244
243
  * Creates an `insert into "person" default values` query.
244
+ *
245
+ * ### Examples
246
+ *
247
+ * ```ts
248
+ * await db.insertInto('person')
249
+ * .defaultValues()
250
+ * .execute()
251
+ * ```
245
252
  */
246
253
  defaultValues(): InsertQueryBuilder<DB, TB, O>;
247
254
  /**
@@ -266,6 +273,50 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
266
273
  * ```
267
274
  */
268
275
  ignore(): InsertQueryBuilder<DB, TB, O>;
276
+ /**
277
+ * Changes an `insert into` query to an `insert top into` query.
278
+ *
279
+ * `top` clause is only supported by some dialects like MS SQL Server.
280
+ *
281
+ * ### Examples
282
+ *
283
+ * Insert the first 5 rows:
284
+ *
285
+ * ```ts
286
+ * await db.insertInto('person')
287
+ * .top(5)
288
+ * .columns(['first_name', 'gender'])
289
+ * .expression(
290
+ * (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
291
+ * )
292
+ * .execute()
293
+ * ```
294
+ *
295
+ * The generated SQL (MS SQL Server):
296
+ *
297
+ * ```sql
298
+ * insert top(5) into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
299
+ * ```
300
+ *
301
+ * Insert the first 50 percent of rows:
302
+ *
303
+ * ```ts
304
+ * await db.insertInto('person')
305
+ * .top(50, 'percent')
306
+ * .columns(['first_name', 'gender'])
307
+ * .expression(
308
+ * (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
309
+ * )
310
+ * .execute()
311
+ * ```
312
+ *
313
+ * The generated SQL (MS SQL Server):
314
+ *
315
+ * ```sql
316
+ * insert top(50) percent into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
317
+ * ```
318
+ */
319
+ top(expression: number | bigint, modifiers?: 'percent'): InsertQueryBuilder<DB, TB, O>;
269
320
  /**
270
321
  * Adds an `on conflict` clause to the query.
271
322
  *
@@ -504,6 +555,25 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
504
555
  * that support `returning` such as PostgreSQL.
505
556
  */
506
557
  returningAll(): InsertQueryBuilder<DB, TB, Selectable<DB[TB]>>;
558
+ /**
559
+ * Clears all `returning` clauses from the query.
560
+ *
561
+ * ### Examples
562
+ *
563
+ * ```ts
564
+ * db.insertInto('person')
565
+ * .values({ first_name: 'James', last_name: 'Smith', age: 42 })
566
+ * .returning(['first_name'])
567
+ * .clearReturning()
568
+ * ```
569
+ *
570
+ * The generated SQL(PostgreSQL):
571
+ *
572
+ * ```sql
573
+ * insert into "person" ("James", "Smith", 42)
574
+ * ```
575
+ */
576
+ clearReturning(): InsertQueryBuilder<DB, TB, InsertResult>;
507
577
  /**
508
578
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
509
579
  * what the provided function returns.
@@ -13,11 +13,172 @@ 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) {
19
20
  this.#props = freeze(props);
20
21
  }
22
+ /**
23
+ * Sets the values to insert for an {@link Kysely.insertInto | insert} query.
24
+ *
25
+ * This method takes an object whose keys are column names and values are
26
+ * values to insert. In addition to the column's type, the values can be
27
+ * raw {@link sql} snippets or select queries.
28
+ *
29
+ * You must provide all fields you haven't explicitly marked as nullable
30
+ * or optional using {@link Generated} or {@link ColumnType}.
31
+ *
32
+ * The return value of an `insert` query is an instance of {@link InsertResult}. The
33
+ * {@link InsertResult.insertId | insertId} field holds the auto incremented primary
34
+ * key if the database returned one.
35
+ *
36
+ * On PostgreSQL and some other dialects, you need to call `returning` to get
37
+ * something out of the query.
38
+ *
39
+ * Also see the {@link expression} method for inserting the result of a select
40
+ * query or any other expression.
41
+ *
42
+ * ### Examples
43
+ *
44
+ * <!-- siteExample("insert", "Single row", 10) -->
45
+ *
46
+ * Insert a single row:
47
+ *
48
+ * ```ts
49
+ * const result = await db
50
+ * .insertInto('person')
51
+ * .values({
52
+ * first_name: 'Jennifer',
53
+ * last_name: 'Aniston',
54
+ * age: 40
55
+ * })
56
+ * .executeTakeFirst()
57
+ *
58
+ * // `insertId` is only available on dialects that
59
+ * // automatically return the id of the inserted row
60
+ * // such as MySQL and SQLite. On PostgreSQL, for example,
61
+ * // you need to add a `returning` clause to the query to
62
+ * // get anything out. See the "returning data" example.
63
+ * console.log(result.insertId)
64
+ * ```
65
+ *
66
+ * The generated SQL (MySQL):
67
+ *
68
+ * ```sql
69
+ * insert into `person` (`first_name`, `last_name`, `age`) values (?, ?, ?)
70
+ * ```
71
+ *
72
+ * <!-- siteExample("insert", "Multiple rows", 20) -->
73
+ *
74
+ * On dialects that support it (for example PostgreSQL) you can insert multiple
75
+ * rows by providing an array. Note that the return value is once again very
76
+ * dialect-specific. Some databases may only return the id of the *last* inserted
77
+ * row and some return nothing at all unless you call `returning`.
78
+ *
79
+ * ```ts
80
+ * await db
81
+ * .insertInto('person')
82
+ * .values([{
83
+ * first_name: 'Jennifer',
84
+ * last_name: 'Aniston',
85
+ * age: 40,
86
+ * }, {
87
+ * first_name: 'Arnold',
88
+ * last_name: 'Schwarzenegger',
89
+ * age: 70,
90
+ * }])
91
+ * .execute()
92
+ * ```
93
+ *
94
+ * The generated SQL (PostgreSQL):
95
+ *
96
+ * ```sql
97
+ * insert into "person" ("first_name", "last_name", "age") values (($1, $2, $3), ($4, $5, $6))
98
+ * ```
99
+ *
100
+ * <!-- siteExample("insert", "Returning data", 30) -->
101
+ *
102
+ * On supported dialects like PostgreSQL you need to chain `returning` to the query to get
103
+ * the inserted row's columns (or any other expression) as the return value. `returning`
104
+ * works just like `select`. Refer to `select` method's examples and documentation for
105
+ * more info.
106
+ *
107
+ * ```ts
108
+ * const result = await db
109
+ * .insertInto('person')
110
+ * .values({
111
+ * first_name: 'Jennifer',
112
+ * last_name: 'Aniston',
113
+ * age: 40,
114
+ * })
115
+ * .returning(['id', 'first_name as name'])
116
+ * .executeTakeFirstOrThrow()
117
+ * ```
118
+ *
119
+ * The generated SQL (PostgreSQL):
120
+ *
121
+ * ```sql
122
+ * insert into "person" ("first_name", "last_name", "age") values ($1, $2, $3) returning "id", "first_name" as "name"
123
+ * ```
124
+ *
125
+ * <!-- siteExample("insert", "Complex values", 40) -->
126
+ *
127
+ * In addition to primitives, the values can also be arbitrary expressions.
128
+ * You can build the expressions by using a callback and calling the methods
129
+ * on the expression builder passed to it:
130
+ *
131
+ * ```ts
132
+ * import { sql } from 'kysely'
133
+ *
134
+ * const ani = "Ani"
135
+ * const ston = "ston"
136
+ *
137
+ * const result = await db
138
+ * .insertInto('person')
139
+ * .values(({ ref, selectFrom, fn }) => ({
140
+ * first_name: 'Jennifer',
141
+ * last_name: sql`concat(${ani}, ${ston})`,
142
+ * middle_name: ref('first_name'),
143
+ * age: selectFrom('person')
144
+ * .select(fn.avg<number>('age')
145
+ * .as('avg_age')),
146
+ * }))
147
+ * .executeTakeFirst()
148
+ * ```
149
+ *
150
+ * The generated SQL (PostgreSQL):
151
+ *
152
+ * ```sql
153
+ * insert into "person" (
154
+ * "first_name",
155
+ * "last_name",
156
+ * "middle_name",
157
+ * "age"
158
+ * )
159
+ * values (
160
+ * $1,
161
+ * concat($2, $3),
162
+ * "first_name",
163
+ * (select avg("age") as "avg_age" from "person")
164
+ * )
165
+ * ```
166
+ *
167
+ * You can also use the callback version of subqueries or raw expressions:
168
+ *
169
+ * ```ts
170
+ * db.with('jennifer', (db) => db
171
+ * .selectFrom('person')
172
+ * .where('first_name', '=', 'Jennifer')
173
+ * .select(['id', 'first_name', 'gender'])
174
+ * .limit(1)
175
+ * ).insertInto('pet').values((eb) => ({
176
+ * owner_id: eb.selectFrom('jennifer').select('id'),
177
+ * name: eb.selectFrom('jennifer').select('first_name'),
178
+ * species: 'cat',
179
+ * }))
180
+ * ```
181
+ */
21
182
  values(insert) {
22
183
  const [columns, values] = parseInsertExpression(insert);
23
184
  return new InsertQueryBuilder({
@@ -98,6 +259,14 @@ export class InsertQueryBuilder {
98
259
  }
99
260
  /**
100
261
  * Creates an `insert into "person" default values` query.
262
+ *
263
+ * ### Examples
264
+ *
265
+ * ```ts
266
+ * await db.insertInto('person')
267
+ * .defaultValues()
268
+ * .execute()
269
+ * ```
101
270
  */
102
271
  defaultValues() {
103
272
  return new InsertQueryBuilder({
@@ -136,6 +305,55 @@ export class InsertQueryBuilder {
136
305
  }),
137
306
  });
138
307
  }
308
+ /**
309
+ * Changes an `insert into` query to an `insert top into` query.
310
+ *
311
+ * `top` clause is only supported by some dialects like MS SQL Server.
312
+ *
313
+ * ### Examples
314
+ *
315
+ * Insert the first 5 rows:
316
+ *
317
+ * ```ts
318
+ * await db.insertInto('person')
319
+ * .top(5)
320
+ * .columns(['first_name', 'gender'])
321
+ * .expression(
322
+ * (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
323
+ * )
324
+ * .execute()
325
+ * ```
326
+ *
327
+ * The generated SQL (MS SQL Server):
328
+ *
329
+ * ```sql
330
+ * insert top(5) into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
331
+ * ```
332
+ *
333
+ * Insert the first 50 percent of rows:
334
+ *
335
+ * ```ts
336
+ * await db.insertInto('person')
337
+ * .top(50, 'percent')
338
+ * .columns(['first_name', 'gender'])
339
+ * .expression(
340
+ * (eb) => eb.selectFrom('pet').select(['name', sql.lit('other').as('gender')])
341
+ * )
342
+ * .execute()
343
+ * ```
344
+ *
345
+ * The generated SQL (MS SQL Server):
346
+ *
347
+ * ```sql
348
+ * insert top(50) percent into "person" ("first_name", "gender") select "name", 'other' as "gender" from "pet"
349
+ * ```
350
+ */
351
+ top(expression, modifiers) {
352
+ return new InsertQueryBuilder({
353
+ ...this.#props,
354
+ queryNode: QueryNode.cloneWithTop(this.#props.queryNode, parseTop(expression, modifiers)),
355
+ });
356
+ }
139
357
  /**
140
358
  * Adds an `on conflict` clause to the query.
141
359
  *
@@ -335,6 +553,30 @@ export class InsertQueryBuilder {
335
553
  queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll()),
336
554
  });
337
555
  }
556
+ /**
557
+ * Clears all `returning` clauses from the query.
558
+ *
559
+ * ### Examples
560
+ *
561
+ * ```ts
562
+ * db.insertInto('person')
563
+ * .values({ first_name: 'James', last_name: 'Smith', age: 42 })
564
+ * .returning(['first_name'])
565
+ * .clearReturning()
566
+ * ```
567
+ *
568
+ * The generated SQL(PostgreSQL):
569
+ *
570
+ * ```sql
571
+ * insert into "person" ("James", "Smith", 42)
572
+ * ```
573
+ */
574
+ clearReturning() {
575
+ return new InsertQueryBuilder({
576
+ ...this.#props,
577
+ queryNode: QueryNode.cloneWithoutReturning(this.#props.queryNode),
578
+ });
579
+ }
338
580
  /**
339
581
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
340
582
  * what the provided function returns.