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.
- package/.renovaterc.json +3 -0
- package/CODE_OF_CONDUCT.md +183 -0
- package/CONTRIBUTING.md +121 -23
- package/FUNDING.md +25 -0
- package/README.md +13 -2
- 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/dialect/sqlite/sqlite-introspector.js +66 -44
- 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 +154 -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 +90 -15
- package/dist/cjs/migration/migrator.js +95 -17
- 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/parser/insert-values-parser.js +3 -1
- 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/camel-case/camel-case.js +4 -1
- 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/plugin/with-schema/with-schema-transformer.d.ts +4 -0
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +26 -0
- 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 +27 -8
- 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/dialect/sqlite/sqlite-introspector.js +66 -44
- 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 +154 -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 +90 -15
- package/dist/esm/migration/migrator.js +95 -17
- 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/parser/insert-values-parser.js +3 -1
- 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/camel-case/camel-case.js +4 -1
- 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/plugin/with-schema/with-schema-transformer.d.ts +4 -0
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +26 -0
- 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 +27 -8
- 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()
|
|
@@ -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(
|
|
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
|
-
*
|
|
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.
|
|
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', [
|
|
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()
|
|
@@ -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,
|
|
109
|
+
* .values({ first_name, id })
|
|
107
110
|
* .onConflict((oc) => oc
|
|
108
|
-
* .column('
|
|
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", "
|
|
120
|
+
* insert into "person" ("first_name", "id")
|
|
117
121
|
* values ($1, $2)
|
|
118
|
-
* on conflict ("
|
|
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,
|
|
144
|
+
* .values({ first_name, id })
|
|
138
145
|
* .onConflict((oc) => oc
|
|
139
|
-
* .column('
|
|
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", "
|
|
155
|
+
* insert into "person" ("first_name", "id")
|
|
148
156
|
* values ($1, $2)
|
|
149
|
-
* on conflict ("
|
|
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
|
-
*
|
|
159
|
-
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
* .
|
|
163
|
-
*
|
|
164
|
-
*
|
|
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) {
|