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.
- package/.renovaterc.json +3 -0
- package/CONTRIBUTING.md +1 -1
- package/deno.check.d.ts +86 -0
- package/deno.check.json +21 -0
- package/dist/cjs/dialect/dialect-adapter-base.d.ts +11 -2
- package/dist/cjs/dialect/dialect-adapter.d.ts +11 -2
- package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +11 -2
- package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +37 -29
- package/dist/cjs/dialect/mssql/mssql-driver.js +20 -13
- package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +11 -2
- package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +4 -0
- package/dist/cjs/dialect/mysql/mysql-driver.js +3 -0
- package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +11 -2
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +10 -3
- package/dist/cjs/dialect/postgres/postgres-driver.js +3 -0
- package/dist/cjs/dialect/postgres/postgres-introspector.js +5 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +11 -2
- package/dist/cjs/driver/dummy-driver.d.ts +13 -12
- package/dist/cjs/driver/dummy-driver.js +13 -12
- package/dist/cjs/dynamic/dynamic.d.ts +6 -6
- package/dist/cjs/dynamic/dynamic.js +6 -6
- package/dist/cjs/expression/expression-builder.d.ts +152 -61
- package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
- package/dist/cjs/expression/expression.d.ts +40 -5
- package/dist/cjs/helpers/mssql.d.ts +74 -14
- package/dist/cjs/helpers/mssql.js +74 -14
- package/dist/cjs/helpers/mysql.d.ts +14 -10
- package/dist/cjs/helpers/mysql.js +14 -10
- package/dist/cjs/helpers/postgres.d.ts +7 -4
- package/dist/cjs/helpers/postgres.js +7 -4
- package/dist/cjs/helpers/sqlite.d.ts +41 -16
- package/dist/cjs/helpers/sqlite.js +41 -16
- package/dist/cjs/kysely.d.ts +99 -41
- package/dist/cjs/kysely.js +60 -36
- package/dist/cjs/migration/file-migration-provider.d.ts +2 -2
- package/dist/cjs/migration/file-migration-provider.js +2 -2
- package/dist/cjs/migration/migrator.d.ts +82 -14
- package/dist/cjs/migration/migrator.js +82 -14
- package/dist/cjs/operation-node/aggregate-function-node.d.ts +4 -0
- package/dist/cjs/operation-node/aggregate-function-node.js +9 -0
- package/dist/cjs/operation-node/data-type-node.d.ts +1 -1
- package/dist/cjs/operation-node/data-type-node.js +12 -0
- package/dist/cjs/operation-node/delete-query-node.d.ts +1 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +1 -0
- package/dist/cjs/operation-node/merge-query-node.d.ts +1 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +9 -3
- package/dist/cjs/operation-node/operation-node-transformer.js +14 -3
- package/dist/cjs/operation-node/query-node.d.ts +4 -0
- package/dist/cjs/operation-node/query-node.js +8 -0
- package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
- package/dist/cjs/operation-node/select-query-node.js +0 -8
- package/dist/cjs/operation-node/update-query-node.d.ts +1 -0
- package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +52 -25
- package/dist/cjs/plugin/camel-case/camel-case-plugin.js +24 -19
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
- package/dist/cjs/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
- package/dist/cjs/plugin/kysely-plugin.d.ts +28 -6
- package/dist/cjs/plugin/noop-plugin.d.ts +28 -6
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
- package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
- package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +43 -1
- package/dist/cjs/query-builder/aggregate-function-builder.js +30 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +137 -45
- package/dist/cjs/query-builder/delete-query-builder.js +76 -26
- package/dist/cjs/query-builder/function-module.d.ts +35 -88
- package/dist/cjs/query-builder/insert-query-builder.d.ts +239 -65
- package/dist/cjs/query-builder/insert-query-builder.js +188 -52
- package/dist/cjs/query-builder/insert-result.d.ts +10 -5
- package/dist/cjs/query-builder/insert-result.js +10 -5
- package/dist/cjs/query-builder/json-path-builder.d.ts +33 -9
- package/dist/cjs/query-builder/json-path-builder.js +8 -5
- package/dist/cjs/query-builder/merge-query-builder.d.ts +159 -21
- package/dist/cjs/query-builder/merge-query-builder.js +68 -6
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +51 -18
- package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
- package/dist/cjs/query-builder/output-interface.d.ts +50 -7
- package/dist/cjs/query-builder/returning-interface.d.ts +5 -5
- package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +295 -63
- package/dist/cjs/query-builder/select-query-builder.js +7 -7
- package/dist/cjs/query-builder/update-query-builder.d.ts +138 -29
- package/dist/cjs/query-builder/update-query-builder.js +75 -10
- package/dist/cjs/query-builder/update-result.d.ts +2 -2
- package/dist/cjs/query-builder/update-result.js +2 -2
- package/dist/cjs/query-builder/where-interface.d.ts +5 -1
- package/dist/cjs/query-compiler/default-query-compiler.js +20 -0
- package/dist/cjs/query-creator.d.ts +66 -18
- package/dist/cjs/query-creator.js +2 -2
- package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
- package/dist/cjs/raw-builder/sql.d.ts +26 -7
- package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
- package/dist/cjs/schema/alter-column-builder.js +17 -3
- package/dist/cjs/schema/alter-table-add-index-builder.d.ts +43 -9
- package/dist/cjs/schema/alter-table-add-index-builder.js +26 -9
- package/dist/cjs/schema/column-definition-builder.d.ts +283 -26
- package/dist/cjs/schema/column-definition-builder.js +283 -26
- package/dist/cjs/schema/create-table-builder.d.ts +86 -33
- package/dist/cjs/schema/create-table-builder.js +86 -33
- package/dist/cjs/util/column-type.d.ts +5 -9
- package/dist/cjs/util/require-all-props.d.ts +4 -2
- package/dist/cjs/util/require-all-props.js +4 -2
- package/dist/cjs/util/streamable.d.ts +1 -1
- package/dist/cjs/util/type-utils.d.ts +4 -2
- package/dist/esm/dialect/dialect-adapter-base.d.ts +11 -2
- package/dist/esm/dialect/dialect-adapter.d.ts +11 -2
- package/dist/esm/dialect/mssql/mssql-adapter.d.ts +11 -2
- package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +37 -29
- package/dist/esm/dialect/mssql/mssql-driver.js +20 -13
- package/dist/esm/dialect/mysql/mysql-adapter.d.ts +11 -2
- package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +4 -0
- package/dist/esm/dialect/mysql/mysql-driver.js +3 -0
- package/dist/esm/dialect/postgres/postgres-adapter.d.ts +11 -2
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +10 -3
- package/dist/esm/dialect/postgres/postgres-driver.js +3 -0
- package/dist/esm/dialect/postgres/postgres-introspector.js +5 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +11 -2
- package/dist/esm/driver/dummy-driver.d.ts +13 -12
- package/dist/esm/driver/dummy-driver.js +13 -12
- package/dist/esm/dynamic/dynamic.d.ts +6 -6
- package/dist/esm/dynamic/dynamic.js +6 -6
- package/dist/esm/expression/expression-builder.d.ts +152 -61
- package/dist/esm/expression/expression-wrapper.d.ts +92 -23
- package/dist/esm/expression/expression.d.ts +40 -5
- package/dist/esm/helpers/mssql.d.ts +74 -14
- package/dist/esm/helpers/mssql.js +74 -14
- package/dist/esm/helpers/mysql.d.ts +14 -10
- package/dist/esm/helpers/mysql.js +14 -10
- package/dist/esm/helpers/postgres.d.ts +7 -4
- package/dist/esm/helpers/postgres.js +7 -4
- package/dist/esm/helpers/sqlite.d.ts +41 -16
- package/dist/esm/helpers/sqlite.js +41 -16
- package/dist/esm/kysely.d.ts +99 -41
- package/dist/esm/kysely.js +60 -36
- package/dist/esm/migration/file-migration-provider.d.ts +2 -2
- package/dist/esm/migration/file-migration-provider.js +2 -2
- package/dist/esm/migration/migrator.d.ts +82 -14
- package/dist/esm/migration/migrator.js +82 -14
- package/dist/esm/operation-node/aggregate-function-node.d.ts +4 -0
- package/dist/esm/operation-node/aggregate-function-node.js +9 -0
- package/dist/esm/operation-node/data-type-node.d.ts +1 -1
- package/dist/esm/operation-node/data-type-node.js +12 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +1 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +1 -0
- package/dist/esm/operation-node/merge-query-node.d.ts +1 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +9 -3
- package/dist/esm/operation-node/operation-node-transformer.js +14 -3
- package/dist/esm/operation-node/query-node.d.ts +4 -0
- package/dist/esm/operation-node/query-node.js +8 -0
- package/dist/esm/operation-node/select-query-node.d.ts +0 -1
- package/dist/esm/operation-node/select-query-node.js +0 -8
- package/dist/esm/operation-node/update-query-node.d.ts +1 -0
- package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +52 -25
- package/dist/esm/plugin/camel-case/camel-case-plugin.js +24 -19
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
- package/dist/esm/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
- package/dist/esm/plugin/kysely-plugin.d.ts +28 -6
- package/dist/esm/plugin/noop-plugin.d.ts +28 -6
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +62 -9
- package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +34 -3
- package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +43 -1
- package/dist/esm/query-builder/aggregate-function-builder.js +30 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +137 -45
- package/dist/esm/query-builder/delete-query-builder.js +76 -26
- package/dist/esm/query-builder/function-module.d.ts +35 -88
- package/dist/esm/query-builder/insert-query-builder.d.ts +239 -65
- package/dist/esm/query-builder/insert-query-builder.js +188 -52
- package/dist/esm/query-builder/insert-result.d.ts +10 -5
- package/dist/esm/query-builder/insert-result.js +10 -5
- package/dist/esm/query-builder/json-path-builder.d.ts +33 -9
- package/dist/esm/query-builder/json-path-builder.js +8 -5
- package/dist/esm/query-builder/merge-query-builder.d.ts +159 -21
- package/dist/esm/query-builder/merge-query-builder.js +68 -6
- package/dist/esm/query-builder/on-conflict-builder.d.ts +51 -18
- package/dist/esm/query-builder/on-conflict-builder.js +41 -16
- package/dist/esm/query-builder/output-interface.d.ts +50 -7
- package/dist/esm/query-builder/returning-interface.d.ts +5 -5
- package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +295 -63
- package/dist/esm/query-builder/select-query-builder.js +7 -7
- package/dist/esm/query-builder/update-query-builder.d.ts +138 -29
- package/dist/esm/query-builder/update-query-builder.js +75 -10
- package/dist/esm/query-builder/update-result.d.ts +2 -2
- package/dist/esm/query-builder/update-result.js +2 -2
- package/dist/esm/query-builder/where-interface.d.ts +5 -1
- package/dist/esm/query-compiler/default-query-compiler.js +20 -0
- package/dist/esm/query-creator.d.ts +66 -18
- package/dist/esm/query-creator.js +2 -2
- package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
- package/dist/esm/raw-builder/sql.d.ts +26 -7
- package/dist/esm/schema/alter-column-builder.d.ts +17 -3
- package/dist/esm/schema/alter-column-builder.js +17 -3
- package/dist/esm/schema/alter-table-add-index-builder.d.ts +43 -9
- package/dist/esm/schema/alter-table-add-index-builder.js +26 -9
- package/dist/esm/schema/column-definition-builder.d.ts +283 -26
- package/dist/esm/schema/column-definition-builder.js +283 -26
- package/dist/esm/schema/create-table-builder.d.ts +86 -33
- package/dist/esm/schema/create-table-builder.js +86 -33
- package/dist/esm/util/column-type.d.ts +5 -9
- package/dist/esm/util/require-all-props.d.ts +4 -2
- package/dist/esm/util/require-all-props.js +4 -2
- package/dist/esm/util/streamable.d.ts +1 -1
- package/dist/esm/util/type-utils.d.ts +4 -2
- 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
|
-
* .
|
|
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 {
|
|
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
|
-
* .
|
|
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 {
|
|
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
|
-
* .
|
|
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
|
-
* .
|
|
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 {
|
|
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
|
-
* .
|
|
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 {
|
|
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
|
-
* .
|
|
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(
|
|
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
|
-
*
|
|
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.
|
|
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(
|
|
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
|
-
*
|
|
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.
|
|
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', [
|
|
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,
|
|
431
|
+
* .values({ first_name, id })
|
|
425
432
|
* .onConflict((oc) => oc
|
|
426
|
-
* .column('
|
|
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", "
|
|
442
|
+
* insert into "person" ("first_name", "id")
|
|
435
443
|
* values ($1, $2)
|
|
436
|
-
* on conflict ("
|
|
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,
|
|
459
|
+
* .values({ first_name, id })
|
|
449
460
|
* .onConflict((oc) => oc
|
|
450
|
-
* .column('
|
|
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", "
|
|
470
|
+
* insert into "person" ("first_name", "id")
|
|
459
471
|
* values ($1, $2)
|
|
460
|
-
* on conflict ("
|
|
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
|
-
*
|
|
470
|
-
*
|
|
471
|
-
*
|
|
472
|
-
*
|
|
473
|
-
* .
|
|
474
|
-
*
|
|
475
|
-
*
|
|
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', [
|
|
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,
|
|
107
|
+
* .values({ first_name, id })
|
|
105
108
|
* .onConflict((oc) => oc
|
|
106
|
-
* .column('
|
|
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", "
|
|
118
|
+
* insert into "person" ("first_name", "id")
|
|
115
119
|
* values ($1, $2)
|
|
116
|
-
* on conflict ("
|
|
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,
|
|
142
|
+
* .values({ first_name, id })
|
|
136
143
|
* .onConflict((oc) => oc
|
|
137
|
-
* .column('
|
|
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", "
|
|
153
|
+
* insert into "person" ("first_name", "id")
|
|
146
154
|
* values ($1, $2)
|
|
147
|
-
* on conflict ("
|
|
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
|
-
*
|
|
157
|
-
*
|
|
158
|
-
*
|
|
159
|
-
*
|
|
160
|
-
* .
|
|
161
|
-
*
|
|
162
|
-
*
|
|
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) {
|