kysely 0.27.4 → 0.27.5

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 (209) hide show
  1. package/.renovaterc.json +3 -0
  2. package/CONTRIBUTING.md +1 -1
  3. package/deno.check.d.ts +86 -0
  4. package/deno.check.json +21 -0
  5. package/dist/cjs/dialect/dialect-adapter-base.d.ts +11 -2
  6. package/dist/cjs/dialect/dialect-adapter.d.ts +11 -2
  7. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +11 -2
  8. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +37 -29
  9. package/dist/cjs/dialect/mssql/mssql-driver.js +20 -13
  10. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +11 -2
  11. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  12. package/dist/cjs/dialect/mysql/mysql-driver.js +3 -0
  13. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +11 -2
  14. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  15. package/dist/cjs/dialect/postgres/postgres-driver.js +3 -0
  16. package/dist/cjs/dialect/postgres/postgres-introspector.js +5 -1
  17. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  18. package/dist/cjs/driver/dummy-driver.d.ts +13 -12
  19. package/dist/cjs/driver/dummy-driver.js +13 -12
  20. package/dist/cjs/dynamic/dynamic.d.ts +6 -6
  21. package/dist/cjs/dynamic/dynamic.js +6 -6
  22. package/dist/cjs/expression/expression-builder.d.ts +152 -61
  23. package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
  24. package/dist/cjs/expression/expression.d.ts +40 -5
  25. package/dist/cjs/helpers/mssql.d.ts +74 -14
  26. package/dist/cjs/helpers/mssql.js +74 -14
  27. package/dist/cjs/helpers/mysql.d.ts +14 -10
  28. package/dist/cjs/helpers/mysql.js +14 -10
  29. package/dist/cjs/helpers/postgres.d.ts +7 -4
  30. package/dist/cjs/helpers/postgres.js +7 -4
  31. package/dist/cjs/helpers/sqlite.d.ts +41 -16
  32. package/dist/cjs/helpers/sqlite.js +41 -16
  33. package/dist/cjs/kysely.d.ts +99 -41
  34. package/dist/cjs/kysely.js +60 -36
  35. package/dist/cjs/migration/file-migration-provider.d.ts +2 -2
  36. package/dist/cjs/migration/file-migration-provider.js +2 -2
  37. package/dist/cjs/migration/migrator.d.ts +82 -14
  38. package/dist/cjs/migration/migrator.js +82 -14
  39. package/dist/cjs/operation-node/aggregate-function-node.d.ts +4 -0
  40. package/dist/cjs/operation-node/aggregate-function-node.js +9 -0
  41. package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
  42. package/dist/cjs/operation-node/data-type-node.js +12 -0
  43. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -0
  44. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -0
  45. package/dist/cjs/operation-node/merge-query-node.d.ts +1 -0
  46. package/dist/cjs/operation-node/operation-node-transformer.d.ts +9 -3
  47. package/dist/cjs/operation-node/operation-node-transformer.js +14 -3
  48. package/dist/cjs/operation-node/query-node.d.ts +4 -0
  49. package/dist/cjs/operation-node/query-node.js +8 -0
  50. package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
  51. package/dist/cjs/operation-node/select-query-node.js +0 -8
  52. package/dist/cjs/operation-node/update-query-node.d.ts +1 -0
  53. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +52 -25
  54. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +24 -19
  55. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  56. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  57. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  58. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  59. package/dist/cjs/plugin/kysely-plugin.d.ts +28 -6
  60. package/dist/cjs/plugin/noop-plugin.d.ts +28 -6
  61. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
  62. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
  63. package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  64. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +43 -1
  65. package/dist/cjs/query-builder/aggregate-function-builder.js +30 -0
  66. package/dist/cjs/query-builder/delete-query-builder.d.ts +137 -45
  67. package/dist/cjs/query-builder/delete-query-builder.js +76 -26
  68. package/dist/cjs/query-builder/function-module.d.ts +35 -88
  69. package/dist/cjs/query-builder/insert-query-builder.d.ts +239 -65
  70. package/dist/cjs/query-builder/insert-query-builder.js +188 -52
  71. package/dist/cjs/query-builder/insert-result.d.ts +10 -5
  72. package/dist/cjs/query-builder/insert-result.js +10 -5
  73. package/dist/cjs/query-builder/json-path-builder.d.ts +33 -9
  74. package/dist/cjs/query-builder/json-path-builder.js +8 -5
  75. package/dist/cjs/query-builder/merge-query-builder.d.ts +159 -21
  76. package/dist/cjs/query-builder/merge-query-builder.js +68 -6
  77. package/dist/cjs/query-builder/on-conflict-builder.d.ts +51 -18
  78. package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
  79. package/dist/cjs/query-builder/output-interface.d.ts +50 -7
  80. package/dist/cjs/query-builder/returning-interface.d.ts +5 -5
  81. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
  82. package/dist/cjs/query-builder/select-query-builder.d.ts +295 -63
  83. package/dist/cjs/query-builder/select-query-builder.js +7 -7
  84. package/dist/cjs/query-builder/update-query-builder.d.ts +138 -29
  85. package/dist/cjs/query-builder/update-query-builder.js +75 -10
  86. package/dist/cjs/query-builder/update-result.d.ts +2 -2
  87. package/dist/cjs/query-builder/update-result.js +2 -2
  88. package/dist/cjs/query-builder/where-interface.d.ts +5 -1
  89. package/dist/cjs/query-compiler/default-query-compiler.js +20 -0
  90. package/dist/cjs/query-creator.d.ts +66 -18
  91. package/dist/cjs/query-creator.js +2 -2
  92. package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
  93. package/dist/cjs/raw-builder/sql.d.ts +26 -7
  94. package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
  95. package/dist/cjs/schema/alter-column-builder.js +17 -3
  96. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +43 -9
  97. package/dist/cjs/schema/alter-table-add-index-builder.js +26 -9
  98. package/dist/cjs/schema/column-definition-builder.d.ts +283 -26
  99. package/dist/cjs/schema/column-definition-builder.js +283 -26
  100. package/dist/cjs/schema/create-table-builder.d.ts +86 -33
  101. package/dist/cjs/schema/create-table-builder.js +86 -33
  102. package/dist/cjs/util/column-type.d.ts +5 -9
  103. package/dist/cjs/util/require-all-props.d.ts +4 -2
  104. package/dist/cjs/util/require-all-props.js +4 -2
  105. package/dist/cjs/util/streamable.d.ts +1 -1
  106. package/dist/cjs/util/type-utils.d.ts +4 -2
  107. package/dist/esm/dialect/dialect-adapter-base.d.ts +11 -2
  108. package/dist/esm/dialect/dialect-adapter.d.ts +11 -2
  109. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +11 -2
  110. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +37 -29
  111. package/dist/esm/dialect/mssql/mssql-driver.js +20 -13
  112. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +11 -2
  113. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  114. package/dist/esm/dialect/mysql/mysql-driver.js +3 -0
  115. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +11 -2
  116. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  117. package/dist/esm/dialect/postgres/postgres-driver.js +3 -0
  118. package/dist/esm/dialect/postgres/postgres-introspector.js +5 -1
  119. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  120. package/dist/esm/driver/dummy-driver.d.ts +13 -12
  121. package/dist/esm/driver/dummy-driver.js +13 -12
  122. package/dist/esm/dynamic/dynamic.d.ts +6 -6
  123. package/dist/esm/dynamic/dynamic.js +6 -6
  124. package/dist/esm/expression/expression-builder.d.ts +152 -61
  125. package/dist/esm/expression/expression-wrapper.d.ts +92 -23
  126. package/dist/esm/expression/expression.d.ts +40 -5
  127. package/dist/esm/helpers/mssql.d.ts +74 -14
  128. package/dist/esm/helpers/mssql.js +74 -14
  129. package/dist/esm/helpers/mysql.d.ts +14 -10
  130. package/dist/esm/helpers/mysql.js +14 -10
  131. package/dist/esm/helpers/postgres.d.ts +7 -4
  132. package/dist/esm/helpers/postgres.js +7 -4
  133. package/dist/esm/helpers/sqlite.d.ts +41 -16
  134. package/dist/esm/helpers/sqlite.js +41 -16
  135. package/dist/esm/kysely.d.ts +99 -41
  136. package/dist/esm/kysely.js +60 -36
  137. package/dist/esm/migration/file-migration-provider.d.ts +2 -2
  138. package/dist/esm/migration/file-migration-provider.js +2 -2
  139. package/dist/esm/migration/migrator.d.ts +82 -14
  140. package/dist/esm/migration/migrator.js +82 -14
  141. package/dist/esm/operation-node/aggregate-function-node.d.ts +4 -0
  142. package/dist/esm/operation-node/aggregate-function-node.js +9 -0
  143. package/dist/esm/operation-node/data-type-node.d.ts +1 -1
  144. package/dist/esm/operation-node/data-type-node.js +12 -0
  145. package/dist/esm/operation-node/delete-query-node.d.ts +1 -0
  146. package/dist/esm/operation-node/insert-query-node.d.ts +1 -0
  147. package/dist/esm/operation-node/merge-query-node.d.ts +1 -0
  148. package/dist/esm/operation-node/operation-node-transformer.d.ts +9 -3
  149. package/dist/esm/operation-node/operation-node-transformer.js +14 -3
  150. package/dist/esm/operation-node/query-node.d.ts +4 -0
  151. package/dist/esm/operation-node/query-node.js +8 -0
  152. package/dist/esm/operation-node/select-query-node.d.ts +0 -1
  153. package/dist/esm/operation-node/select-query-node.js +0 -8
  154. package/dist/esm/operation-node/update-query-node.d.ts +1 -0
  155. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +52 -25
  156. package/dist/esm/plugin/camel-case/camel-case-plugin.js +24 -19
  157. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  158. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  159. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  160. package/dist/esm/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  161. package/dist/esm/plugin/kysely-plugin.d.ts +28 -6
  162. package/dist/esm/plugin/noop-plugin.d.ts +28 -6
  163. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
  164. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
  165. package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  166. package/dist/esm/query-builder/aggregate-function-builder.d.ts +43 -1
  167. package/dist/esm/query-builder/aggregate-function-builder.js +30 -0
  168. package/dist/esm/query-builder/delete-query-builder.d.ts +137 -45
  169. package/dist/esm/query-builder/delete-query-builder.js +76 -26
  170. package/dist/esm/query-builder/function-module.d.ts +35 -88
  171. package/dist/esm/query-builder/insert-query-builder.d.ts +239 -65
  172. package/dist/esm/query-builder/insert-query-builder.js +188 -52
  173. package/dist/esm/query-builder/insert-result.d.ts +10 -5
  174. package/dist/esm/query-builder/insert-result.js +10 -5
  175. package/dist/esm/query-builder/json-path-builder.d.ts +33 -9
  176. package/dist/esm/query-builder/json-path-builder.js +8 -5
  177. package/dist/esm/query-builder/merge-query-builder.d.ts +159 -21
  178. package/dist/esm/query-builder/merge-query-builder.js +68 -6
  179. package/dist/esm/query-builder/on-conflict-builder.d.ts +51 -18
  180. package/dist/esm/query-builder/on-conflict-builder.js +41 -16
  181. package/dist/esm/query-builder/output-interface.d.ts +50 -7
  182. package/dist/esm/query-builder/returning-interface.d.ts +5 -5
  183. package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
  184. package/dist/esm/query-builder/select-query-builder.d.ts +295 -63
  185. package/dist/esm/query-builder/select-query-builder.js +7 -7
  186. package/dist/esm/query-builder/update-query-builder.d.ts +138 -29
  187. package/dist/esm/query-builder/update-query-builder.js +75 -10
  188. package/dist/esm/query-builder/update-result.d.ts +2 -2
  189. package/dist/esm/query-builder/update-result.js +2 -2
  190. package/dist/esm/query-builder/where-interface.d.ts +5 -1
  191. package/dist/esm/query-compiler/default-query-compiler.js +20 -0
  192. package/dist/esm/query-creator.d.ts +66 -18
  193. package/dist/esm/query-creator.js +2 -2
  194. package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
  195. package/dist/esm/raw-builder/sql.d.ts +26 -7
  196. package/dist/esm/schema/alter-column-builder.d.ts +17 -3
  197. package/dist/esm/schema/alter-column-builder.js +17 -3
  198. package/dist/esm/schema/alter-table-add-index-builder.d.ts +43 -9
  199. package/dist/esm/schema/alter-table-add-index-builder.js +26 -9
  200. package/dist/esm/schema/column-definition-builder.d.ts +283 -26
  201. package/dist/esm/schema/column-definition-builder.js +283 -26
  202. package/dist/esm/schema/create-table-builder.d.ts +86 -33
  203. package/dist/esm/schema/create-table-builder.js +86 -33
  204. package/dist/esm/util/column-type.d.ts +5 -9
  205. package/dist/esm/util/require-all-props.d.ts +4 -2
  206. package/dist/esm/util/require-all-props.js +4 -2
  207. package/dist/esm/util/streamable.d.ts +1 -1
  208. package/dist/esm/util/type-utils.d.ts +4 -2
  209. package/package.json +28 -23
@@ -1,4 +1,4 @@
1
- import { AliasedExpression } from '../expression/expression.js';
1
+ import { AliasedExpression, Expression } from '../expression/expression.js';
2
2
  import { MergeQueryNode } from '../operation-node/merge-query-node.js';
3
3
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
4
4
  import { QueryNode } from '../operation-node/query-node.js';
@@ -23,6 +23,30 @@ import { UpdateQueryBuilder } from './update-query-builder.js';
23
23
  export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> implements OutputInterface<DB, TT, O> {
24
24
  #private;
25
25
  constructor(props: MergeQueryBuilderProps);
26
+ /**
27
+ * This can be used to add any additional SQL to the end of the query.
28
+ *
29
+ * ### Examples
30
+ *
31
+ * ```ts
32
+ * import { sql } from 'kysely'
33
+ *
34
+ * await db
35
+ * .mergeInto('person')
36
+ * .using('pet', 'pet.owner_id', 'person.id')
37
+ * .whenMatched()
38
+ * .thenDelete()
39
+ * .modifyEnd(sql.raw('-- this is a comment'))
40
+ * .execute()
41
+ * ```
42
+ *
43
+ * The generated SQL (PostgreSQL):
44
+ *
45
+ * ```sql
46
+ * merge into "person" using "pet" on "pet"."owner_id" = "person"."id" when matched then delete -- this is a comment
47
+ * ```
48
+ */
49
+ modifyEnd(modifier: Expression<any>): MergeQueryBuilder<DB, TT, O>;
26
50
  /**
27
51
  * Changes a `merge into` query to an `merge top into` query.
28
52
  *
@@ -116,15 +140,24 @@ export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> implements Ou
116
140
  * .output('inserted.id')
117
141
  * .values({
118
142
  * first_name: 'Jennifer',
119
- * last_name: 'Aniston'
143
+ * last_name: 'Aniston',
144
+ * gender: 'female',
120
145
  * })
121
- * .executeTakeFirst()
146
+ * .executeTakeFirstOrThrow()
147
+ * ```
148
+ *
149
+ * The generated SQL (MSSQL):
150
+ *
151
+ * ```sql
152
+ * insert into "person" ("first_name", "last_name", "gender")
153
+ * output "inserted"."id"
154
+ * values (@1, @2, @3)
122
155
  * ```
123
156
  *
124
157
  * Return multiple columns:
125
158
  *
126
159
  * ```ts
127
- * const { id, first_name } = await db
160
+ * const { old_first_name, old_last_name, new_first_name, new_last_name } = await db
128
161
  * .updateTable('person')
129
162
  * .set({ first_name: 'John', last_name: 'Doe' })
130
163
  * .output([
@@ -134,7 +167,19 @@ export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> implements Ou
134
167
  * 'inserted.last_name as new_last_name',
135
168
  * ])
136
169
  * .where('created_at', '<', new Date())
137
- * .executeTakeFirst()
170
+ * .executeTakeFirstOrThrow()
171
+ * ```
172
+ *
173
+ * The generated SQL (MSSQL):
174
+ *
175
+ * ```sql
176
+ * update "person"
177
+ * set "first_name" = @1, "last_name" = @2
178
+ * output "deleted"."first_name" as "old_first_name",
179
+ * "deleted"."last_name" as "old_last_name",
180
+ * "inserted"."first_name" as "new_first_name",
181
+ * "inserted"."last_name" as "new_last_name"
182
+ * where "created_at" < @3
138
183
  * ```
139
184
  *
140
185
  * Return arbitrary expressions:
@@ -142,11 +187,19 @@ export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> implements Ou
142
187
  * ```ts
143
188
  * import { sql } from 'kysely'
144
189
  *
145
- * const { id, full_name } = await db
190
+ * const { full_name } = await db
146
191
  * .deleteFrom('person')
147
- * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
192
+ * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name'))
148
193
  * .where('created_at', '<', new Date())
149
- * .executeTakeFirst()
194
+ * .executeTakeFirstOrThrow()
195
+ * ```
196
+ *
197
+ * The generated SQL (MSSQL):
198
+ *
199
+ * ```sql
200
+ * delete from "person"
201
+ * output concat("deleted"."first_name", ' ', "deleted"."last_name") as "full_name"
202
+ * where "created_at" < @1
150
203
  * ```
151
204
  *
152
205
  * Return the action performed on the row:
@@ -167,7 +220,21 @@ export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> implements Ou
167
220
  * 'inserted.id as inserted_id',
168
221
  * 'deleted.id as deleted_id',
169
222
  * ])
223
+ * .execute()
224
+ * ```
225
+ *
226
+ * The generated SQL (MSSQL):
227
+ *
228
+ * ```sql
229
+ * merge into "person"
230
+ * using "pet" on "pet"."owner_id" = "person"."id"
231
+ * when matched then delete
232
+ * when not matched then
233
+ * insert ("first_name", "last_name", "gender")
234
+ * values (@1, @2, @3)
235
+ * output "inserted"."id" as "inserted_id", "deleted"."id" as "deleted_id"
170
236
  * ```
237
+ *
171
238
  */
172
239
  output<OE extends OutputExpression<DB, TT>>(selections: readonly OE[]): MergeQueryBuilder<DB, TT, ReturningRow<DB, TT, O, SelectExpressionFromOutputExpression<OE>>>;
173
240
  output<CB extends OutputCallback<DB, TT>>(callback: CB): MergeQueryBuilder<DB, TT, ReturningRow<DB, TT, O, SelectExpressionFromOutputCallback<CB>>>;
@@ -188,6 +255,30 @@ export interface MergeQueryBuilderProps {
188
255
  export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST extends keyof DB, O> implements Compilable<O>, OutputInterface<DB, TT, O>, OperationNodeSource {
189
256
  #private;
190
257
  constructor(props: MergeQueryBuilderProps);
258
+ /**
259
+ * This can be used to add any additional SQL to the end of the query.
260
+ *
261
+ * ### Examples
262
+ *
263
+ * ```ts
264
+ * import { sql } from 'kysely'
265
+ *
266
+ * await db
267
+ * .mergeInto('person')
268
+ * .using('pet', 'pet.owner_id', 'person.id')
269
+ * .whenMatched()
270
+ * .thenDelete()
271
+ * .modifyEnd(sql.raw('-- this is a comment'))
272
+ * .execute()
273
+ * ```
274
+ *
275
+ * The generated SQL (PostgreSQL):
276
+ *
277
+ * ```sql
278
+ * merge into "person" using "pet" on "pet"."owner_id" = "person"."id" when matched then delete -- this is a comment
279
+ * ```
280
+ */
281
+ modifyEnd(modifier: Expression<any>): WheneableMergeQueryBuilder<DB, TT, ST, O>;
191
282
  /**
192
283
  * See {@link MergeQueryBuilder.top}.
193
284
  */
@@ -376,15 +467,24 @@ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST exte
376
467
  * .output('inserted.id')
377
468
  * .values({
378
469
  * first_name: 'Jennifer',
379
- * last_name: 'Aniston'
470
+ * last_name: 'Aniston',
471
+ * gender: 'female',
380
472
  * })
381
- * .executeTakeFirst()
473
+ * .executeTakeFirstOrThrow()
474
+ * ```
475
+ *
476
+ * The generated SQL (MSSQL):
477
+ *
478
+ * ```sql
479
+ * insert into "person" ("first_name", "last_name", "gender")
480
+ * output "inserted"."id"
481
+ * values (@1, @2, @3)
382
482
  * ```
383
483
  *
384
484
  * Return multiple columns:
385
485
  *
386
486
  * ```ts
387
- * const { id, first_name } = await db
487
+ * const { old_first_name, old_last_name, new_first_name, new_last_name } = await db
388
488
  * .updateTable('person')
389
489
  * .set({ first_name: 'John', last_name: 'Doe' })
390
490
  * .output([
@@ -394,7 +494,19 @@ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST exte
394
494
  * 'inserted.last_name as new_last_name',
395
495
  * ])
396
496
  * .where('created_at', '<', new Date())
397
- * .executeTakeFirst()
497
+ * .executeTakeFirstOrThrow()
498
+ * ```
499
+ *
500
+ * The generated SQL (MSSQL):
501
+ *
502
+ * ```sql
503
+ * update "person"
504
+ * set "first_name" = @1, "last_name" = @2
505
+ * output "deleted"."first_name" as "old_first_name",
506
+ * "deleted"."last_name" as "old_last_name",
507
+ * "inserted"."first_name" as "new_first_name",
508
+ * "inserted"."last_name" as "new_last_name"
509
+ * where "created_at" < @3
398
510
  * ```
399
511
  *
400
512
  * Return arbitrary expressions:
@@ -402,11 +514,19 @@ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST exte
402
514
  * ```ts
403
515
  * import { sql } from 'kysely'
404
516
  *
405
- * const { id, full_name } = await db
517
+ * const { full_name } = await db
406
518
  * .deleteFrom('person')
407
- * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
519
+ * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name'))
408
520
  * .where('created_at', '<', new Date())
409
- * .executeTakeFirst()
521
+ * .executeTakeFirstOrThrow()
522
+ * ```
523
+ *
524
+ * The generated SQL (MSSQL):
525
+ *
526
+ * ```sql
527
+ * delete from "person"
528
+ * output concat("deleted"."first_name", ' ', "deleted"."last_name") as "full_name"
529
+ * where "created_at" < @1
410
530
  * ```
411
531
  *
412
532
  * Return the action performed on the row:
@@ -427,7 +547,21 @@ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST exte
427
547
  * 'inserted.id as inserted_id',
428
548
  * 'deleted.id as deleted_id',
429
549
  * ])
550
+ * .execute()
430
551
  * ```
552
+ *
553
+ * The generated SQL (MSSQL):
554
+ *
555
+ * ```sql
556
+ * merge into "person"
557
+ * using "pet" on "pet"."owner_id" = "person"."id"
558
+ * when matched then delete
559
+ * when not matched then
560
+ * insert ("first_name", "last_name", "gender")
561
+ * values (@1, @2, @3)
562
+ * output "inserted"."id" as "inserted_id", "deleted"."id" as "deleted_id"
563
+ * ```
564
+ *
431
565
  */
432
566
  output<OE extends OutputExpression<DB, TT>>(selections: readonly OE[]): WheneableMergeQueryBuilder<DB, TT, ST, ReturningRow<DB, TT, O, SelectExpressionFromOutputExpression<OE>>>;
433
567
  output<CB extends OutputCallback<DB, TT>>(callback: CB): WheneableMergeQueryBuilder<DB, TT, ST, ReturningRow<DB, TT, O, SelectExpressionFromOutputCallback<CB>>>;
@@ -451,13 +585,15 @@ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST exte
451
585
  * The next example uses a helper function `log` to log a query:
452
586
  *
453
587
  * ```ts
588
+ * import type { Compilable } from 'kysely'
589
+ *
454
590
  * function log<T extends Compilable>(qb: T): T {
455
591
  * console.log(qb.compile())
456
592
  * return qb
457
593
  * }
458
594
  *
459
- * db.updateTable('person')
460
- * .set(values)
595
+ * await db.updateTable('person')
596
+ * .set({ first_name: 'John' })
461
597
  * .$call(log)
462
598
  * .execute()
463
599
  * ```
@@ -476,7 +612,9 @@ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST exte
476
612
  * ### Examples
477
613
  *
478
614
  * ```ts
479
- * async function updatePerson(id: number, updates: UpdateablePerson, returnLastName: boolean) {
615
+ * import type { PersonUpdate } from 'type-editor' // imaginary module
616
+ *
617
+ * async function updatePerson(id: number, updates: PersonUpdate, returnLastName: boolean) {
480
618
  * return await db
481
619
  * .updateTable('person')
482
620
  * .set(updates)
@@ -492,11 +630,11 @@ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST exte
492
630
  * the code. In the example above the return type of the `updatePerson` function is:
493
631
  *
494
632
  * ```ts
495
- * {
633
+ * Promise<{
496
634
  * id: number
497
635
  * first_name: string
498
636
  * last_name?: string
499
- * }
637
+ * }>
500
638
  * ```
501
639
  */
502
640
  $if<O2>(condition: boolean, func: (qb: this) => WheneableMergeQueryBuilder<any, any, any, O2>): O2 extends MergeResult ? WheneableMergeQueryBuilder<DB, TT, ST, MergeResult> : O2 extends O & infer E ? WheneableMergeQueryBuilder<DB, TT, ST, O & Partial<E>> : WheneableMergeQueryBuilder<DB, TT, ST, Partial<O2>>;
@@ -603,7 +741,7 @@ export declare class MatchedThenableMergeQueryBuilder<DB, TT extends keyof DB, S
603
741
  * .thenUpdate((ub) => ub
604
742
  * .set(sql`metadata['has_pets']`, 'Y')
605
743
  * .set({
606
- * updated_at: Date.now(),
744
+ * updated_at: new Date().toISOString(),
607
745
  * })
608
746
  * )
609
747
  * .execute()
@@ -21,6 +21,35 @@ class MergeQueryBuilder {
21
21
  constructor(props) {
22
22
  this.#props = (0, object_utils_js_1.freeze)(props);
23
23
  }
24
+ /**
25
+ * This can be used to add any additional SQL to the end of the query.
26
+ *
27
+ * ### Examples
28
+ *
29
+ * ```ts
30
+ * import { sql } from 'kysely'
31
+ *
32
+ * await db
33
+ * .mergeInto('person')
34
+ * .using('pet', 'pet.owner_id', 'person.id')
35
+ * .whenMatched()
36
+ * .thenDelete()
37
+ * .modifyEnd(sql.raw('-- this is a comment'))
38
+ * .execute()
39
+ * ```
40
+ *
41
+ * The generated SQL (PostgreSQL):
42
+ *
43
+ * ```sql
44
+ * merge into "person" using "pet" on "pet"."owner_id" = "person"."id" when matched then delete -- this is a comment
45
+ * ```
46
+ */
47
+ modifyEnd(modifier) {
48
+ return new MergeQueryBuilder({
49
+ ...this.#props,
50
+ queryNode: query_node_js_1.QueryNode.cloneWithEndModifier(this.#props.queryNode, modifier.toOperationNode()),
51
+ });
52
+ }
24
53
  /**
25
54
  * Changes a `merge into` query to an `merge top into` query.
26
55
  *
@@ -100,6 +129,35 @@ class WheneableMergeQueryBuilder {
100
129
  constructor(props) {
101
130
  this.#props = (0, object_utils_js_1.freeze)(props);
102
131
  }
132
+ /**
133
+ * This can be used to add any additional SQL to the end of the query.
134
+ *
135
+ * ### Examples
136
+ *
137
+ * ```ts
138
+ * import { sql } from 'kysely'
139
+ *
140
+ * await db
141
+ * .mergeInto('person')
142
+ * .using('pet', 'pet.owner_id', 'person.id')
143
+ * .whenMatched()
144
+ * .thenDelete()
145
+ * .modifyEnd(sql.raw('-- this is a comment'))
146
+ * .execute()
147
+ * ```
148
+ *
149
+ * The generated SQL (PostgreSQL):
150
+ *
151
+ * ```sql
152
+ * merge into "person" using "pet" on "pet"."owner_id" = "person"."id" when matched then delete -- this is a comment
153
+ * ```
154
+ */
155
+ modifyEnd(modifier) {
156
+ return new WheneableMergeQueryBuilder({
157
+ ...this.#props,
158
+ queryNode: query_node_js_1.QueryNode.cloneWithEndModifier(this.#props.queryNode, modifier.toOperationNode()),
159
+ });
160
+ }
103
161
  /**
104
162
  * See {@link MergeQueryBuilder.top}.
105
163
  */
@@ -264,13 +322,15 @@ class WheneableMergeQueryBuilder {
264
322
  * The next example uses a helper function `log` to log a query:
265
323
  *
266
324
  * ```ts
325
+ * import type { Compilable } from 'kysely'
326
+ *
267
327
  * function log<T extends Compilable>(qb: T): T {
268
328
  * console.log(qb.compile())
269
329
  * return qb
270
330
  * }
271
331
  *
272
- * db.updateTable('person')
273
- * .set(values)
332
+ * await db.updateTable('person')
333
+ * .set({ first_name: 'John' })
274
334
  * .$call(log)
275
335
  * .execute()
276
336
  * ```
@@ -291,7 +351,9 @@ class WheneableMergeQueryBuilder {
291
351
  * ### Examples
292
352
  *
293
353
  * ```ts
294
- * async function updatePerson(id: number, updates: UpdateablePerson, returnLastName: boolean) {
354
+ * import type { PersonUpdate } from 'type-editor' // imaginary module
355
+ *
356
+ * async function updatePerson(id: number, updates: PersonUpdate, returnLastName: boolean) {
295
357
  * return await db
296
358
  * .updateTable('person')
297
359
  * .set(updates)
@@ -307,11 +369,11 @@ class WheneableMergeQueryBuilder {
307
369
  * the code. In the example above the return type of the `updatePerson` function is:
308
370
  *
309
371
  * ```ts
310
- * {
372
+ * Promise<{
311
373
  * id: number
312
374
  * first_name: string
313
375
  * last_name?: string
314
- * }
376
+ * }>
315
377
  * ```
316
378
  */
317
379
  $if(condition, func) {
@@ -463,7 +525,7 @@ class MatchedThenableMergeQueryBuilder {
463
525
  * .thenUpdate((ub) => ub
464
526
  * .set(sql`metadata['has_pets']`, 'Y')
465
527
  * .set({
466
- * updated_at: Date.now(),
528
+ * updated_at: new Date().toISOString(),
467
529
  * })
468
530
  * )
469
531
  * .execute()
@@ -73,6 +73,8 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
73
73
  * you can always use:
74
74
  *
75
75
  * ```ts
76
+ * import { sql } from 'kysely'
77
+ *
76
78
  * sql`your operator`
77
79
  * ```
78
80
  *
@@ -84,7 +86,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
84
86
  * const persons = await db
85
87
  * .selectFrom('person')
86
88
  * .selectAll()
87
- * .where('id', 'in', ['1', '2', '3'])
89
+ * .where('id', 'in', [1, 2, 3])
88
90
  * .execute()
89
91
  * ```
90
92
  *
@@ -332,6 +334,8 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
332
334
  * import { sql } from 'kysely'
333
335
  * const { ref } = db.dynamic
334
336
  *
337
+ * const columnFromUserInput: string = 'id'
338
+ *
335
339
  * const persons = await db
336
340
  * .selectFrom('person')
337
341
  * .selectAll()
@@ -419,21 +423,25 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
419
423
  * ### Examples
420
424
  *
421
425
  * ```ts
426
+ * const id = 1
427
+ * const first_name = 'John'
428
+ *
422
429
  * await db
423
430
  * .insertInto('person')
424
- * .values({ first_name, pic })
431
+ * .values({ first_name, id })
425
432
  * .onConflict((oc) => oc
426
- * .column('pic')
433
+ * .column('id')
427
434
  * .doNothing()
428
435
  * )
436
+ * .execute()
429
437
  * ```
430
438
  *
431
439
  * The generated SQL (PostgreSQL):
432
440
  *
433
441
  * ```sql
434
- * insert into "person" ("first_name", "pic")
442
+ * insert into "person" ("first_name", "id")
435
443
  * values ($1, $2)
436
- * on conflict ("pic") do nothing
444
+ * on conflict ("id") do nothing
437
445
  * ```
438
446
  */
439
447
  doNothing(): OnConflictDoNothingBuilder<DB, TB>;
@@ -443,21 +451,25 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
443
451
  * ### Examples
444
452
  *
445
453
  * ```ts
454
+ * const id = 1
455
+ * const first_name = 'John'
456
+ *
446
457
  * await db
447
458
  * .insertInto('person')
448
- * .values({ first_name, pic })
459
+ * .values({ first_name, id })
449
460
  * .onConflict((oc) => oc
450
- * .column('pic')
461
+ * .column('id')
451
462
  * .doUpdateSet({ first_name })
452
463
  * )
464
+ * .execute()
453
465
  * ```
454
466
  *
455
467
  * The generated SQL (PostgreSQL):
456
468
  *
457
469
  * ```sql
458
- * insert into "person" ("first_name", "pic")
470
+ * insert into "person" ("first_name", "id")
459
471
  * values ($1, $2)
460
- * on conflict ("pic")
472
+ * on conflict ("id")
461
473
  * do update set "first_name" = $3
462
474
  * ```
463
475
  *
@@ -466,15 +478,32 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
466
478
  * to create an upsert operation:
467
479
  *
468
480
  * ```ts
469
- * db.insertInto('person')
470
- * .values(person)
471
- * .onConflict((oc) => oc
472
- * .column('id')
473
- * .doUpdateSet((eb) => ({
474
- * first_name: eb.ref('excluded.first_name'),
475
- * last_name: eb.ref('excluded.last_name')
476
- * }))
481
+ * import type { NewPerson } from 'type-editor' // imaginary module
482
+ *
483
+ * async function upsertPerson(person: NewPerson): Promise<void> {
484
+ * await db.insertInto('person')
485
+ * .values(person)
486
+ * .onConflict((oc) => oc
487
+ * .column('id')
488
+ * .doUpdateSet((eb) => ({
489
+ * first_name: eb.ref('excluded.first_name'),
490
+ * last_name: eb.ref('excluded.last_name')
491
+ * })
492
+ * )
477
493
  * )
494
+ * .execute()
495
+ * }
496
+ * ```
497
+ *
498
+ * The generated SQL (PostgreSQL):
499
+ *
500
+ * ```sql
501
+ * insert into "person" ("first_name", "last_name")
502
+ * values ($1, $2)
503
+ * on conflict ("id")
504
+ * do update set
505
+ * "first_name" = excluded."first_name",
506
+ * "last_name" = excluded."last_name"
478
507
  * ```
479
508
  */
480
509
  doUpdateSet(update: UpdateObjectExpression<OnConflictDatabase<DB, TB>, OnConflictTables<TB>, OnConflictTables<TB>>): OnConflictUpdateBuilder<OnConflictDatabase<DB, TB>, OnConflictTables<TB>>;
@@ -537,6 +566,8 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
537
566
  * you can always use:
538
567
  *
539
568
  * ```ts
569
+ * import { sql } from 'kysely'
570
+ *
540
571
  * sql`your operator`
541
572
  * ```
542
573
  *
@@ -548,7 +579,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
548
579
  * const persons = await db
549
580
  * .selectFrom('person')
550
581
  * .selectAll()
551
- * .where('id', 'in', ['1', '2', '3'])
582
+ * .where('id', 'in', [1, 2, 3])
552
583
  * .execute()
553
584
  * ```
554
585
  *
@@ -796,6 +827,8 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
796
827
  * import { sql } from 'kysely'
797
828
  * const { ref } = db.dynamic
798
829
  *
830
+ * const columnFromUserInput: string = 'id'
831
+ *
799
832
  * const persons = await db
800
833
  * .selectFrom('person')
801
834
  * .selectAll()
@@ -101,21 +101,25 @@ class OnConflictBuilder {
101
101
  * ### Examples
102
102
  *
103
103
  * ```ts
104
+ * const id = 1
105
+ * const first_name = 'John'
106
+ *
104
107
  * await db
105
108
  * .insertInto('person')
106
- * .values({ first_name, pic })
109
+ * .values({ first_name, id })
107
110
  * .onConflict((oc) => oc
108
- * .column('pic')
111
+ * .column('id')
109
112
  * .doNothing()
110
113
  * )
114
+ * .execute()
111
115
  * ```
112
116
  *
113
117
  * The generated SQL (PostgreSQL):
114
118
  *
115
119
  * ```sql
116
- * insert into "person" ("first_name", "pic")
120
+ * insert into "person" ("first_name", "id")
117
121
  * values ($1, $2)
118
- * on conflict ("pic") do nothing
122
+ * on conflict ("id") do nothing
119
123
  * ```
120
124
  */
121
125
  doNothing() {
@@ -132,21 +136,25 @@ class OnConflictBuilder {
132
136
  * ### Examples
133
137
  *
134
138
  * ```ts
139
+ * const id = 1
140
+ * const first_name = 'John'
141
+ *
135
142
  * await db
136
143
  * .insertInto('person')
137
- * .values({ first_name, pic })
144
+ * .values({ first_name, id })
138
145
  * .onConflict((oc) => oc
139
- * .column('pic')
146
+ * .column('id')
140
147
  * .doUpdateSet({ first_name })
141
148
  * )
149
+ * .execute()
142
150
  * ```
143
151
  *
144
152
  * The generated SQL (PostgreSQL):
145
153
  *
146
154
  * ```sql
147
- * insert into "person" ("first_name", "pic")
155
+ * insert into "person" ("first_name", "id")
148
156
  * values ($1, $2)
149
- * on conflict ("pic")
157
+ * on conflict ("id")
150
158
  * do update set "first_name" = $3
151
159
  * ```
152
160
  *
@@ -155,15 +163,32 @@ class OnConflictBuilder {
155
163
  * to create an upsert operation:
156
164
  *
157
165
  * ```ts
158
- * db.insertInto('person')
159
- * .values(person)
160
- * .onConflict((oc) => oc
161
- * .column('id')
162
- * .doUpdateSet((eb) => ({
163
- * first_name: eb.ref('excluded.first_name'),
164
- * last_name: eb.ref('excluded.last_name')
165
- * }))
166
+ * import type { NewPerson } from 'type-editor' // imaginary module
167
+ *
168
+ * async function upsertPerson(person: NewPerson): Promise<void> {
169
+ * await db.insertInto('person')
170
+ * .values(person)
171
+ * .onConflict((oc) => oc
172
+ * .column('id')
173
+ * .doUpdateSet((eb) => ({
174
+ * first_name: eb.ref('excluded.first_name'),
175
+ * last_name: eb.ref('excluded.last_name')
176
+ * })
177
+ * )
166
178
  * )
179
+ * .execute()
180
+ * }
181
+ * ```
182
+ *
183
+ * The generated SQL (PostgreSQL):
184
+ *
185
+ * ```sql
186
+ * insert into "person" ("first_name", "last_name")
187
+ * values ($1, $2)
188
+ * on conflict ("id")
189
+ * do update set
190
+ * "first_name" = excluded."first_name",
191
+ * "last_name" = excluded."last_name"
167
192
  * ```
168
193
  */
169
194
  doUpdateSet(update) {