kysely 0.27.4 → 0.27.6

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 (222) hide show
  1. package/.renovaterc.json +3 -0
  2. package/CODE_OF_CONDUCT.md +183 -0
  3. package/CONTRIBUTING.md +121 -23
  4. package/FUNDING.md +25 -0
  5. package/README.md +13 -2
  6. package/deno.check.d.ts +86 -0
  7. package/deno.check.json +21 -0
  8. package/dist/cjs/dialect/dialect-adapter-base.d.ts +11 -2
  9. package/dist/cjs/dialect/dialect-adapter.d.ts +11 -2
  10. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +11 -2
  11. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +37 -29
  12. package/dist/cjs/dialect/mssql/mssql-driver.js +20 -13
  13. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +11 -2
  14. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  15. package/dist/cjs/dialect/mysql/mysql-driver.js +3 -0
  16. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +11 -2
  17. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  18. package/dist/cjs/dialect/postgres/postgres-driver.js +3 -0
  19. package/dist/cjs/dialect/postgres/postgres-introspector.js +5 -1
  20. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  21. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +66 -44
  22. package/dist/cjs/driver/dummy-driver.d.ts +13 -12
  23. package/dist/cjs/driver/dummy-driver.js +13 -12
  24. package/dist/cjs/dynamic/dynamic.d.ts +6 -6
  25. package/dist/cjs/dynamic/dynamic.js +6 -6
  26. package/dist/cjs/expression/expression-builder.d.ts +154 -61
  27. package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
  28. package/dist/cjs/expression/expression.d.ts +40 -5
  29. package/dist/cjs/helpers/mssql.d.ts +74 -14
  30. package/dist/cjs/helpers/mssql.js +74 -14
  31. package/dist/cjs/helpers/mysql.d.ts +14 -10
  32. package/dist/cjs/helpers/mysql.js +14 -10
  33. package/dist/cjs/helpers/postgres.d.ts +7 -4
  34. package/dist/cjs/helpers/postgres.js +7 -4
  35. package/dist/cjs/helpers/sqlite.d.ts +41 -16
  36. package/dist/cjs/helpers/sqlite.js +41 -16
  37. package/dist/cjs/kysely.d.ts +99 -41
  38. package/dist/cjs/kysely.js +60 -36
  39. package/dist/cjs/migration/file-migration-provider.d.ts +2 -2
  40. package/dist/cjs/migration/file-migration-provider.js +2 -2
  41. package/dist/cjs/migration/migrator.d.ts +90 -15
  42. package/dist/cjs/migration/migrator.js +95 -17
  43. package/dist/cjs/operation-node/aggregate-function-node.d.ts +4 -0
  44. package/dist/cjs/operation-node/aggregate-function-node.js +9 -0
  45. package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
  46. package/dist/cjs/operation-node/data-type-node.js +12 -0
  47. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -0
  48. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -0
  49. package/dist/cjs/operation-node/merge-query-node.d.ts +1 -0
  50. package/dist/cjs/operation-node/operation-node-transformer.d.ts +9 -3
  51. package/dist/cjs/operation-node/operation-node-transformer.js +14 -3
  52. package/dist/cjs/operation-node/query-node.d.ts +4 -0
  53. package/dist/cjs/operation-node/query-node.js +8 -0
  54. package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
  55. package/dist/cjs/operation-node/select-query-node.js +0 -8
  56. package/dist/cjs/operation-node/update-query-node.d.ts +1 -0
  57. package/dist/cjs/parser/insert-values-parser.js +3 -1
  58. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +52 -25
  59. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +24 -19
  60. package/dist/cjs/plugin/camel-case/camel-case.js +4 -1
  61. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  62. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  63. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  64. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  65. package/dist/cjs/plugin/kysely-plugin.d.ts +28 -6
  66. package/dist/cjs/plugin/noop-plugin.d.ts +28 -6
  67. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
  68. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
  69. package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  70. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +4 -0
  71. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +26 -0
  72. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +43 -1
  73. package/dist/cjs/query-builder/aggregate-function-builder.js +30 -0
  74. package/dist/cjs/query-builder/delete-query-builder.d.ts +137 -45
  75. package/dist/cjs/query-builder/delete-query-builder.js +76 -26
  76. package/dist/cjs/query-builder/function-module.d.ts +35 -88
  77. package/dist/cjs/query-builder/insert-query-builder.d.ts +239 -65
  78. package/dist/cjs/query-builder/insert-query-builder.js +188 -52
  79. package/dist/cjs/query-builder/insert-result.d.ts +10 -5
  80. package/dist/cjs/query-builder/insert-result.js +10 -5
  81. package/dist/cjs/query-builder/json-path-builder.d.ts +33 -9
  82. package/dist/cjs/query-builder/json-path-builder.js +8 -5
  83. package/dist/cjs/query-builder/merge-query-builder.d.ts +159 -21
  84. package/dist/cjs/query-builder/merge-query-builder.js +68 -6
  85. package/dist/cjs/query-builder/on-conflict-builder.d.ts +51 -18
  86. package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
  87. package/dist/cjs/query-builder/output-interface.d.ts +50 -7
  88. package/dist/cjs/query-builder/returning-interface.d.ts +5 -5
  89. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
  90. package/dist/cjs/query-builder/select-query-builder.d.ts +295 -63
  91. package/dist/cjs/query-builder/select-query-builder.js +7 -7
  92. package/dist/cjs/query-builder/update-query-builder.d.ts +138 -29
  93. package/dist/cjs/query-builder/update-query-builder.js +75 -10
  94. package/dist/cjs/query-builder/update-result.d.ts +2 -2
  95. package/dist/cjs/query-builder/update-result.js +2 -2
  96. package/dist/cjs/query-builder/where-interface.d.ts +5 -1
  97. package/dist/cjs/query-compiler/default-query-compiler.js +20 -0
  98. package/dist/cjs/query-creator.d.ts +66 -18
  99. package/dist/cjs/query-creator.js +2 -2
  100. package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
  101. package/dist/cjs/raw-builder/sql.d.ts +27 -8
  102. package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
  103. package/dist/cjs/schema/alter-column-builder.js +17 -3
  104. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +43 -9
  105. package/dist/cjs/schema/alter-table-add-index-builder.js +26 -9
  106. package/dist/cjs/schema/column-definition-builder.d.ts +283 -26
  107. package/dist/cjs/schema/column-definition-builder.js +283 -26
  108. package/dist/cjs/schema/create-table-builder.d.ts +86 -33
  109. package/dist/cjs/schema/create-table-builder.js +86 -33
  110. package/dist/cjs/util/column-type.d.ts +5 -9
  111. package/dist/cjs/util/require-all-props.d.ts +4 -2
  112. package/dist/cjs/util/require-all-props.js +4 -2
  113. package/dist/cjs/util/streamable.d.ts +1 -1
  114. package/dist/cjs/util/type-utils.d.ts +4 -2
  115. package/dist/esm/dialect/dialect-adapter-base.d.ts +11 -2
  116. package/dist/esm/dialect/dialect-adapter.d.ts +11 -2
  117. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +11 -2
  118. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +37 -29
  119. package/dist/esm/dialect/mssql/mssql-driver.js +20 -13
  120. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +11 -2
  121. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  122. package/dist/esm/dialect/mysql/mysql-driver.js +3 -0
  123. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +11 -2
  124. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  125. package/dist/esm/dialect/postgres/postgres-driver.js +3 -0
  126. package/dist/esm/dialect/postgres/postgres-introspector.js +5 -1
  127. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  128. package/dist/esm/dialect/sqlite/sqlite-introspector.js +66 -44
  129. package/dist/esm/driver/dummy-driver.d.ts +13 -12
  130. package/dist/esm/driver/dummy-driver.js +13 -12
  131. package/dist/esm/dynamic/dynamic.d.ts +6 -6
  132. package/dist/esm/dynamic/dynamic.js +6 -6
  133. package/dist/esm/expression/expression-builder.d.ts +154 -61
  134. package/dist/esm/expression/expression-wrapper.d.ts +92 -23
  135. package/dist/esm/expression/expression.d.ts +40 -5
  136. package/dist/esm/helpers/mssql.d.ts +74 -14
  137. package/dist/esm/helpers/mssql.js +74 -14
  138. package/dist/esm/helpers/mysql.d.ts +14 -10
  139. package/dist/esm/helpers/mysql.js +14 -10
  140. package/dist/esm/helpers/postgres.d.ts +7 -4
  141. package/dist/esm/helpers/postgres.js +7 -4
  142. package/dist/esm/helpers/sqlite.d.ts +41 -16
  143. package/dist/esm/helpers/sqlite.js +41 -16
  144. package/dist/esm/kysely.d.ts +99 -41
  145. package/dist/esm/kysely.js +60 -36
  146. package/dist/esm/migration/file-migration-provider.d.ts +2 -2
  147. package/dist/esm/migration/file-migration-provider.js +2 -2
  148. package/dist/esm/migration/migrator.d.ts +90 -15
  149. package/dist/esm/migration/migrator.js +95 -17
  150. package/dist/esm/operation-node/aggregate-function-node.d.ts +4 -0
  151. package/dist/esm/operation-node/aggregate-function-node.js +9 -0
  152. package/dist/esm/operation-node/data-type-node.d.ts +1 -1
  153. package/dist/esm/operation-node/data-type-node.js +12 -0
  154. package/dist/esm/operation-node/delete-query-node.d.ts +1 -0
  155. package/dist/esm/operation-node/insert-query-node.d.ts +1 -0
  156. package/dist/esm/operation-node/merge-query-node.d.ts +1 -0
  157. package/dist/esm/operation-node/operation-node-transformer.d.ts +9 -3
  158. package/dist/esm/operation-node/operation-node-transformer.js +14 -3
  159. package/dist/esm/operation-node/query-node.d.ts +4 -0
  160. package/dist/esm/operation-node/query-node.js +8 -0
  161. package/dist/esm/operation-node/select-query-node.d.ts +0 -1
  162. package/dist/esm/operation-node/select-query-node.js +0 -8
  163. package/dist/esm/operation-node/update-query-node.d.ts +1 -0
  164. package/dist/esm/parser/insert-values-parser.js +3 -1
  165. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +52 -25
  166. package/dist/esm/plugin/camel-case/camel-case-plugin.js +24 -19
  167. package/dist/esm/plugin/camel-case/camel-case.js +4 -1
  168. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  169. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  170. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  171. package/dist/esm/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  172. package/dist/esm/plugin/kysely-plugin.d.ts +28 -6
  173. package/dist/esm/plugin/noop-plugin.d.ts +28 -6
  174. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
  175. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
  176. package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  177. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +4 -0
  178. package/dist/esm/plugin/with-schema/with-schema-transformer.js +26 -0
  179. package/dist/esm/query-builder/aggregate-function-builder.d.ts +43 -1
  180. package/dist/esm/query-builder/aggregate-function-builder.js +30 -0
  181. package/dist/esm/query-builder/delete-query-builder.d.ts +137 -45
  182. package/dist/esm/query-builder/delete-query-builder.js +76 -26
  183. package/dist/esm/query-builder/function-module.d.ts +35 -88
  184. package/dist/esm/query-builder/insert-query-builder.d.ts +239 -65
  185. package/dist/esm/query-builder/insert-query-builder.js +188 -52
  186. package/dist/esm/query-builder/insert-result.d.ts +10 -5
  187. package/dist/esm/query-builder/insert-result.js +10 -5
  188. package/dist/esm/query-builder/json-path-builder.d.ts +33 -9
  189. package/dist/esm/query-builder/json-path-builder.js +8 -5
  190. package/dist/esm/query-builder/merge-query-builder.d.ts +159 -21
  191. package/dist/esm/query-builder/merge-query-builder.js +68 -6
  192. package/dist/esm/query-builder/on-conflict-builder.d.ts +51 -18
  193. package/dist/esm/query-builder/on-conflict-builder.js +41 -16
  194. package/dist/esm/query-builder/output-interface.d.ts +50 -7
  195. package/dist/esm/query-builder/returning-interface.d.ts +5 -5
  196. package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
  197. package/dist/esm/query-builder/select-query-builder.d.ts +295 -63
  198. package/dist/esm/query-builder/select-query-builder.js +7 -7
  199. package/dist/esm/query-builder/update-query-builder.d.ts +138 -29
  200. package/dist/esm/query-builder/update-query-builder.js +75 -10
  201. package/dist/esm/query-builder/update-result.d.ts +2 -2
  202. package/dist/esm/query-builder/update-result.js +2 -2
  203. package/dist/esm/query-builder/where-interface.d.ts +5 -1
  204. package/dist/esm/query-compiler/default-query-compiler.js +20 -0
  205. package/dist/esm/query-creator.d.ts +66 -18
  206. package/dist/esm/query-creator.js +2 -2
  207. package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
  208. package/dist/esm/raw-builder/sql.d.ts +27 -8
  209. package/dist/esm/schema/alter-column-builder.d.ts +17 -3
  210. package/dist/esm/schema/alter-column-builder.js +17 -3
  211. package/dist/esm/schema/alter-table-add-index-builder.d.ts +43 -9
  212. package/dist/esm/schema/alter-table-add-index-builder.js +26 -9
  213. package/dist/esm/schema/column-definition-builder.d.ts +283 -26
  214. package/dist/esm/schema/column-definition-builder.js +283 -26
  215. package/dist/esm/schema/create-table-builder.d.ts +86 -33
  216. package/dist/esm/schema/create-table-builder.js +86 -33
  217. package/dist/esm/util/column-type.d.ts +5 -9
  218. package/dist/esm/util/require-all-props.d.ts +4 -2
  219. package/dist/esm/util/require-all-props.js +4 -2
  220. package/dist/esm/util/streamable.d.ts +1 -1
  221. package/dist/esm/util/type-utils.d.ts +4 -2
  222. 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()
@@ -19,6 +19,35 @@ export class MergeQueryBuilder {
19
19
  constructor(props) {
20
20
  this.#props = freeze(props);
21
21
  }
22
+ /**
23
+ * This can be used to add any additional SQL to the end of the query.
24
+ *
25
+ * ### Examples
26
+ *
27
+ * ```ts
28
+ * import { sql } from 'kysely'
29
+ *
30
+ * await db
31
+ * .mergeInto('person')
32
+ * .using('pet', 'pet.owner_id', 'person.id')
33
+ * .whenMatched()
34
+ * .thenDelete()
35
+ * .modifyEnd(sql.raw('-- this is a comment'))
36
+ * .execute()
37
+ * ```
38
+ *
39
+ * The generated SQL (PostgreSQL):
40
+ *
41
+ * ```sql
42
+ * merge into "person" using "pet" on "pet"."owner_id" = "person"."id" when matched then delete -- this is a comment
43
+ * ```
44
+ */
45
+ modifyEnd(modifier) {
46
+ return new MergeQueryBuilder({
47
+ ...this.#props,
48
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, modifier.toOperationNode()),
49
+ });
50
+ }
22
51
  /**
23
52
  * Changes a `merge into` query to an `merge top into` query.
24
53
  *
@@ -97,6 +126,35 @@ export class WheneableMergeQueryBuilder {
97
126
  constructor(props) {
98
127
  this.#props = freeze(props);
99
128
  }
129
+ /**
130
+ * This can be used to add any additional SQL to the end of the query.
131
+ *
132
+ * ### Examples
133
+ *
134
+ * ```ts
135
+ * import { sql } from 'kysely'
136
+ *
137
+ * await db
138
+ * .mergeInto('person')
139
+ * .using('pet', 'pet.owner_id', 'person.id')
140
+ * .whenMatched()
141
+ * .thenDelete()
142
+ * .modifyEnd(sql.raw('-- this is a comment'))
143
+ * .execute()
144
+ * ```
145
+ *
146
+ * The generated SQL (PostgreSQL):
147
+ *
148
+ * ```sql
149
+ * merge into "person" using "pet" on "pet"."owner_id" = "person"."id" when matched then delete -- this is a comment
150
+ * ```
151
+ */
152
+ modifyEnd(modifier) {
153
+ return new WheneableMergeQueryBuilder({
154
+ ...this.#props,
155
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, modifier.toOperationNode()),
156
+ });
157
+ }
100
158
  /**
101
159
  * See {@link MergeQueryBuilder.top}.
102
160
  */
@@ -261,13 +319,15 @@ export class WheneableMergeQueryBuilder {
261
319
  * The next example uses a helper function `log` to log a query:
262
320
  *
263
321
  * ```ts
322
+ * import type { Compilable } from 'kysely'
323
+ *
264
324
  * function log<T extends Compilable>(qb: T): T {
265
325
  * console.log(qb.compile())
266
326
  * return qb
267
327
  * }
268
328
  *
269
- * db.updateTable('person')
270
- * .set(values)
329
+ * await db.updateTable('person')
330
+ * .set({ first_name: 'John' })
271
331
  * .$call(log)
272
332
  * .execute()
273
333
  * ```
@@ -288,7 +348,9 @@ export class WheneableMergeQueryBuilder {
288
348
  * ### Examples
289
349
  *
290
350
  * ```ts
291
- * async function updatePerson(id: number, updates: UpdateablePerson, returnLastName: boolean) {
351
+ * import type { PersonUpdate } from 'type-editor' // imaginary module
352
+ *
353
+ * async function updatePerson(id: number, updates: PersonUpdate, returnLastName: boolean) {
292
354
  * return await db
293
355
  * .updateTable('person')
294
356
  * .set(updates)
@@ -304,11 +366,11 @@ export class WheneableMergeQueryBuilder {
304
366
  * the code. In the example above the return type of the `updatePerson` function is:
305
367
  *
306
368
  * ```ts
307
- * {
369
+ * Promise<{
308
370
  * id: number
309
371
  * first_name: string
310
372
  * last_name?: string
311
- * }
373
+ * }>
312
374
  * ```
313
375
  */
314
376
  $if(condition, func) {
@@ -459,7 +521,7 @@ export class MatchedThenableMergeQueryBuilder {
459
521
  * .thenUpdate((ub) => ub
460
522
  * .set(sql`metadata['has_pets']`, 'Y')
461
523
  * .set({
462
- * updated_at: Date.now(),
524
+ * updated_at: new Date().toISOString(),
463
525
  * })
464
526
  * )
465
527
  * .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()
@@ -99,21 +99,25 @@ export class OnConflictBuilder {
99
99
  * ### Examples
100
100
  *
101
101
  * ```ts
102
+ * const id = 1
103
+ * const first_name = 'John'
104
+ *
102
105
  * await db
103
106
  * .insertInto('person')
104
- * .values({ first_name, pic })
107
+ * .values({ first_name, id })
105
108
  * .onConflict((oc) => oc
106
- * .column('pic')
109
+ * .column('id')
107
110
  * .doNothing()
108
111
  * )
112
+ * .execute()
109
113
  * ```
110
114
  *
111
115
  * The generated SQL (PostgreSQL):
112
116
  *
113
117
  * ```sql
114
- * insert into "person" ("first_name", "pic")
118
+ * insert into "person" ("first_name", "id")
115
119
  * values ($1, $2)
116
- * on conflict ("pic") do nothing
120
+ * on conflict ("id") do nothing
117
121
  * ```
118
122
  */
119
123
  doNothing() {
@@ -130,21 +134,25 @@ export class OnConflictBuilder {
130
134
  * ### Examples
131
135
  *
132
136
  * ```ts
137
+ * const id = 1
138
+ * const first_name = 'John'
139
+ *
133
140
  * await db
134
141
  * .insertInto('person')
135
- * .values({ first_name, pic })
142
+ * .values({ first_name, id })
136
143
  * .onConflict((oc) => oc
137
- * .column('pic')
144
+ * .column('id')
138
145
  * .doUpdateSet({ first_name })
139
146
  * )
147
+ * .execute()
140
148
  * ```
141
149
  *
142
150
  * The generated SQL (PostgreSQL):
143
151
  *
144
152
  * ```sql
145
- * insert into "person" ("first_name", "pic")
153
+ * insert into "person" ("first_name", "id")
146
154
  * values ($1, $2)
147
- * on conflict ("pic")
155
+ * on conflict ("id")
148
156
  * do update set "first_name" = $3
149
157
  * ```
150
158
  *
@@ -153,15 +161,32 @@ export class OnConflictBuilder {
153
161
  * to create an upsert operation:
154
162
  *
155
163
  * ```ts
156
- * db.insertInto('person')
157
- * .values(person)
158
- * .onConflict((oc) => oc
159
- * .column('id')
160
- * .doUpdateSet((eb) => ({
161
- * first_name: eb.ref('excluded.first_name'),
162
- * last_name: eb.ref('excluded.last_name')
163
- * }))
164
+ * import type { NewPerson } from 'type-editor' // imaginary module
165
+ *
166
+ * async function upsertPerson(person: NewPerson): Promise<void> {
167
+ * await db.insertInto('person')
168
+ * .values(person)
169
+ * .onConflict((oc) => oc
170
+ * .column('id')
171
+ * .doUpdateSet((eb) => ({
172
+ * first_name: eb.ref('excluded.first_name'),
173
+ * last_name: eb.ref('excluded.last_name')
174
+ * })
175
+ * )
164
176
  * )
177
+ * .execute()
178
+ * }
179
+ * ```
180
+ *
181
+ * The generated SQL (PostgreSQL):
182
+ *
183
+ * ```sql
184
+ * insert into "person" ("first_name", "last_name")
185
+ * values ($1, $2)
186
+ * on conflict ("id")
187
+ * do update set
188
+ * "first_name" = excluded."first_name",
189
+ * "last_name" = excluded."last_name"
165
190
  * ```
166
191
  */
167
192
  doUpdateSet(update) {