kysely 0.27.1 → 0.27.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/dialect/database-introspector.d.ts +1 -0
- package/dist/cjs/dialect/mssql/mssql-introspector.js +13 -2
- package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +4 -0
- package/dist/cjs/dialect/mssql/mssql-query-compiler.js +8 -0
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
- package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.js +2 -0
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/cjs/driver/database-connection.d.ts +1 -1
- package/dist/cjs/expression/expression-builder.d.ts +30 -4
- package/dist/cjs/expression/expression-builder.js +5 -0
- package/dist/cjs/index.d.ts +7 -1
- package/dist/cjs/index.js +6 -0
- package/dist/cjs/migration/migrator.d.ts +19 -2
- package/dist/cjs/migration/migrator.js +77 -43
- package/dist/cjs/operation-node/add-index-node.js +1 -1
- package/dist/cjs/operation-node/cast-node.d.ts +13 -0
- package/dist/cjs/operation-node/cast-node.js +19 -0
- package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
- package/dist/cjs/operation-node/data-type-node.d.ts +5 -1
- package/dist/cjs/operation-node/data-type-node.js +55 -1
- package/dist/cjs/operation-node/delete-query-node.d.ts +4 -0
- package/dist/cjs/operation-node/delete-query-node.js +12 -0
- package/dist/cjs/operation-node/fetch-node.d.ts +15 -0
- package/dist/cjs/operation-node/fetch-node.js +19 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +4 -1
- package/dist/cjs/operation-node/insert-query-node.js +5 -0
- package/dist/cjs/operation-node/join-node.d.ts +1 -1
- package/dist/cjs/operation-node/matched-node.d.ts +13 -0
- package/dist/cjs/operation-node/matched-node.js +19 -0
- package/dist/cjs/operation-node/merge-query-node.d.ts +25 -0
- package/dist/cjs/operation-node/merge-query-node.js +45 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +10 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +50 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +10 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +5 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/query-node.d.ts +10 -3
- package/dist/cjs/operation-node/query-node.js +15 -1
- package/dist/cjs/operation-node/select-query-node.d.ts +5 -0
- package/dist/cjs/operation-node/select-query-node.js +6 -0
- package/dist/cjs/operation-node/top-node.d.ts +14 -0
- package/dist/cjs/operation-node/top-node.js +19 -0
- package/dist/cjs/operation-node/update-query-node.d.ts +7 -1
- package/dist/cjs/operation-node/update-query-node.js +11 -0
- package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
- package/dist/cjs/parser/binary-operation-parser.js +2 -2
- package/dist/cjs/parser/data-type-parser.js +7 -3
- package/dist/cjs/parser/fetch-parser.d.ts +2 -0
- package/dist/cjs/parser/fetch-parser.js +18 -0
- package/dist/cjs/parser/insert-values-parser.d.ts +3 -3
- package/dist/cjs/parser/merge-parser.d.ts +9 -0
- package/dist/cjs/parser/merge-parser.js +32 -0
- package/dist/cjs/parser/table-parser.d.ts +4 -3
- package/dist/cjs/parser/top-parser.d.ts +2 -0
- package/dist/cjs/parser/top-parser.js +20 -0
- package/dist/cjs/plugin/with-schema/with-schema-transformer.js +4 -0
- package/dist/cjs/query-builder/delete-query-builder.d.ts +99 -0
- package/dist/cjs/query-builder/delete-query-builder.js +120 -0
- package/dist/cjs/query-builder/insert-query-builder.d.ts +73 -3
- package/dist/cjs/query-builder/insert-query-builder.js +242 -0
- package/dist/cjs/query-builder/merge-query-builder.d.ts +557 -0
- package/dist/cjs/query-builder/merge-query-builder.js +518 -0
- package/dist/cjs/query-builder/merge-result.d.ts +4 -0
- package/dist/cjs/query-builder/merge-result.js +10 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +102 -7
- package/dist/cjs/query-builder/select-query-builder.js +14 -0
- package/dist/cjs/query-builder/update-query-builder.d.ts +82 -3
- package/dist/cjs/query-builder/update-query-builder.js +98 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +10 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +94 -10
- package/dist/cjs/query-compiler/query-compiler.d.ts +2 -1
- package/dist/cjs/query-creator.d.ts +40 -2
- package/dist/cjs/query-creator.js +9 -0
- package/dist/cjs/schema/alter-table-add-index-builder.js +6 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +13 -1
- package/dist/cjs/schema/column-definition-builder.js +15 -1
- package/dist/cjs/util/infer-result.d.ts +2 -1
- package/dist/cjs/util/type-utils.d.ts +3 -2
- package/dist/esm/dialect/database-introspector.d.ts +1 -0
- package/dist/esm/dialect/mssql/mssql-introspector.js +13 -2
- package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +4 -0
- package/dist/esm/dialect/mssql/mssql-query-compiler.js +8 -0
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
- package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
- package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
- package/dist/esm/dialect/postgres/postgres-introspector.js +2 -0
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
- package/dist/esm/driver/database-connection.d.ts +1 -1
- package/dist/esm/expression/expression-builder.d.ts +30 -4
- package/dist/esm/expression/expression-builder.js +5 -0
- package/dist/esm/index.d.ts +7 -1
- package/dist/esm/index.js +6 -0
- package/dist/esm/migration/migrator.d.ts +19 -2
- package/dist/esm/migration/migrator.js +76 -42
- package/dist/esm/operation-node/add-index-node.js +1 -1
- package/dist/esm/operation-node/cast-node.d.ts +13 -0
- package/dist/esm/operation-node/cast-node.js +17 -0
- package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
- package/dist/esm/operation-node/data-type-node.d.ts +5 -1
- package/dist/esm/operation-node/data-type-node.js +53 -0
- package/dist/esm/operation-node/delete-query-node.d.ts +4 -0
- package/dist/esm/operation-node/delete-query-node.js +12 -0
- package/dist/esm/operation-node/fetch-node.d.ts +15 -0
- package/dist/esm/operation-node/fetch-node.js +17 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +4 -1
- package/dist/esm/operation-node/insert-query-node.js +5 -0
- package/dist/esm/operation-node/join-node.d.ts +1 -1
- package/dist/esm/operation-node/matched-node.d.ts +13 -0
- package/dist/esm/operation-node/matched-node.js +17 -0
- package/dist/esm/operation-node/merge-query-node.d.ts +25 -0
- package/dist/esm/operation-node/merge-query-node.js +43 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +10 -0
- package/dist/esm/operation-node/operation-node-transformer.js +50 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +10 -0
- package/dist/esm/operation-node/operation-node-visitor.js +5 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/query-node.d.ts +10 -3
- package/dist/esm/operation-node/query-node.js +15 -1
- package/dist/esm/operation-node/select-query-node.d.ts +5 -0
- package/dist/esm/operation-node/select-query-node.js +6 -0
- package/dist/esm/operation-node/top-node.d.ts +14 -0
- package/dist/esm/operation-node/top-node.js +17 -0
- package/dist/esm/operation-node/update-query-node.d.ts +7 -1
- package/dist/esm/operation-node/update-query-node.js +11 -0
- package/dist/esm/parser/binary-operation-parser.d.ts +1 -1
- package/dist/esm/parser/binary-operation-parser.js +2 -2
- package/dist/esm/parser/data-type-parser.js +8 -4
- package/dist/esm/parser/fetch-parser.d.ts +2 -0
- package/dist/esm/parser/fetch-parser.js +15 -0
- package/dist/esm/parser/insert-values-parser.d.ts +3 -3
- package/dist/esm/parser/merge-parser.d.ts +9 -0
- package/dist/esm/parser/merge-parser.js +28 -0
- package/dist/esm/parser/table-parser.d.ts +4 -3
- package/dist/esm/parser/top-parser.d.ts +2 -0
- package/dist/esm/parser/top-parser.js +17 -0
- package/dist/esm/plugin/with-schema/with-schema-transformer.js +4 -0
- package/dist/esm/query-builder/delete-query-builder.d.ts +99 -0
- package/dist/esm/query-builder/delete-query-builder.js +120 -0
- package/dist/esm/query-builder/insert-query-builder.d.ts +73 -3
- package/dist/esm/query-builder/insert-query-builder.js +242 -0
- package/dist/esm/query-builder/merge-query-builder.d.ts +557 -0
- package/dist/esm/query-builder/merge-query-builder.js +512 -0
- package/dist/esm/query-builder/merge-result.d.ts +4 -0
- package/dist/esm/query-builder/merge-result.js +7 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +102 -7
- package/dist/esm/query-builder/select-query-builder.js +14 -0
- package/dist/esm/query-builder/update-query-builder.d.ts +82 -3
- package/dist/esm/query-builder/update-query-builder.js +98 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +10 -0
- package/dist/esm/query-compiler/default-query-compiler.js +94 -10
- package/dist/esm/query-compiler/query-compiler.d.ts +2 -1
- package/dist/esm/query-creator.d.ts +40 -2
- package/dist/esm/query-creator.js +10 -1
- package/dist/esm/schema/alter-table-add-index-builder.js +7 -3
- package/dist/esm/schema/column-definition-builder.d.ts +13 -1
- package/dist/esm/schema/column-definition-builder.js +15 -1
- package/dist/esm/util/infer-result.d.ts +2 -1
- package/dist/esm/util/type-utils.d.ts +3 -2
- package/package.json +22 -21
|
@@ -0,0 +1,557 @@
|
|
|
1
|
+
import { AliasedExpression } from '../expression/expression.js';
|
|
2
|
+
import { MergeQueryNode } from '../operation-node/merge-query-node.js';
|
|
3
|
+
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
4
|
+
import { QueryNode } from '../operation-node/query-node.js';
|
|
5
|
+
import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
|
|
6
|
+
import { ExpressionOrFactory } from '../parser/expression-parser.js';
|
|
7
|
+
import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert-values-parser.js';
|
|
8
|
+
import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
|
|
9
|
+
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
10
|
+
import { TableExpression } from '../parser/table-parser.js';
|
|
11
|
+
import { ExtractUpdateTypeFromReferenceExpression, UpdateObject, UpdateObjectFactory } from '../parser/update-set-parser.js';
|
|
12
|
+
import { ValueExpression } from '../parser/value-parser.js';
|
|
13
|
+
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
14
|
+
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
15
|
+
import { Compilable } from '../util/compilable.js';
|
|
16
|
+
import { QueryId } from '../util/query-id.js';
|
|
17
|
+
import { ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
|
|
18
|
+
import { MergeResult } from './merge-result.js';
|
|
19
|
+
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
20
|
+
import { UpdateQueryBuilder } from './update-query-builder.js';
|
|
21
|
+
export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> {
|
|
22
|
+
#private;
|
|
23
|
+
constructor(props: MergeQueryBuilderProps);
|
|
24
|
+
/**
|
|
25
|
+
* Changes a `merge into` query to an `merge top into` query.
|
|
26
|
+
*
|
|
27
|
+
* `top` clause is only supported by some dialects like MS SQL Server.
|
|
28
|
+
*
|
|
29
|
+
* ### Examples
|
|
30
|
+
*
|
|
31
|
+
* Affect 5 matched rows at most:
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* await db.mergeInto('person')
|
|
35
|
+
* .top(5)
|
|
36
|
+
* .using('pet', 'person.id', 'pet.owner_id')
|
|
37
|
+
* .whenMatched()
|
|
38
|
+
* .thenDelete()
|
|
39
|
+
* .execute()
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* The generated SQL (MS SQL Server):
|
|
43
|
+
*
|
|
44
|
+
* ```sql
|
|
45
|
+
* merge top(5) into "person"
|
|
46
|
+
* using "pet" on "person"."id" = "pet"."owner_id"
|
|
47
|
+
* when matched then
|
|
48
|
+
* delete
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* Affect 50% of matched rows:
|
|
52
|
+
*
|
|
53
|
+
* ```ts
|
|
54
|
+
* await db.mergeInto('person')
|
|
55
|
+
* .top(50, 'percent')
|
|
56
|
+
* .using('pet', 'person.id', 'pet.owner_id')
|
|
57
|
+
* .whenMatched()
|
|
58
|
+
* .thenDelete()
|
|
59
|
+
* .execute()
|
|
60
|
+
* ```
|
|
61
|
+
*
|
|
62
|
+
* The generated SQL (MS SQL Server):
|
|
63
|
+
*
|
|
64
|
+
* ```sql
|
|
65
|
+
* merge top(50) percent into "person"
|
|
66
|
+
* using "pet" on "person"."id" = "pet"."owner_id"
|
|
67
|
+
* when matched then
|
|
68
|
+
* delete
|
|
69
|
+
* ```
|
|
70
|
+
*/
|
|
71
|
+
top(expression: number | bigint, modifiers?: 'percent'): MergeQueryBuilder<DB, TT, O>;
|
|
72
|
+
/**
|
|
73
|
+
* Adds the `using` clause to the query.
|
|
74
|
+
*
|
|
75
|
+
* This method is similar to {@link SelectQueryBuilder.innerJoin}, so see the
|
|
76
|
+
* documentation for that method for more examples.
|
|
77
|
+
*
|
|
78
|
+
* ### Examples
|
|
79
|
+
*
|
|
80
|
+
* ```ts
|
|
81
|
+
* const result = await db.mergeInto('person')
|
|
82
|
+
* .using('pet', 'person.id', 'pet.owner_id')
|
|
83
|
+
* .whenMatched()
|
|
84
|
+
* .thenDelete()
|
|
85
|
+
* .execute()
|
|
86
|
+
* ```
|
|
87
|
+
*
|
|
88
|
+
* The generated SQL (PostgreSQL):
|
|
89
|
+
*
|
|
90
|
+
* ```sql
|
|
91
|
+
* merge into "person"
|
|
92
|
+
* using "pet" on "person"."id" = "pet"."owner_id"
|
|
93
|
+
* when matched then
|
|
94
|
+
* delete
|
|
95
|
+
* ```
|
|
96
|
+
*/
|
|
97
|
+
using<TE extends TableExpression<DB, TT>, K1 extends JoinReferenceExpression<DB, TT, TE>, K2 extends JoinReferenceExpression<DB, TT, TE>>(sourceTable: TE, k1: K1, k2: K2): ExtractWheneableMergeQueryBuilder<DB, TT, TE, O>;
|
|
98
|
+
using<TE extends TableExpression<DB, TT>, FN extends JoinCallbackExpression<DB, TT, TE>>(sourceTable: TE, callback: FN): ExtractWheneableMergeQueryBuilder<DB, TT, TE, O>;
|
|
99
|
+
}
|
|
100
|
+
export interface MergeQueryBuilderProps {
|
|
101
|
+
readonly queryId: QueryId;
|
|
102
|
+
readonly queryNode: MergeQueryNode;
|
|
103
|
+
readonly executor: QueryExecutor;
|
|
104
|
+
}
|
|
105
|
+
export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST extends keyof DB, O> implements Compilable<O>, OperationNodeSource {
|
|
106
|
+
#private;
|
|
107
|
+
constructor(props: MergeQueryBuilderProps);
|
|
108
|
+
/**
|
|
109
|
+
* See {@link MergeQueryBuilder.top}.
|
|
110
|
+
*/
|
|
111
|
+
top(expression: number | bigint, modifiers?: 'percent'): WheneableMergeQueryBuilder<DB, TT, ST, O>;
|
|
112
|
+
/**
|
|
113
|
+
* Adds a simple `when matched` clause to the query.
|
|
114
|
+
*
|
|
115
|
+
* For a `when matched` clause with an `and` condition, see {@link whenMatchedAnd}.
|
|
116
|
+
*
|
|
117
|
+
* For a simple `when not matched` clause, see {@link whenNotMatched}.
|
|
118
|
+
*
|
|
119
|
+
* For a `when not matched` clause with an `and` condition, see {@link whenNotMatchedAnd}.
|
|
120
|
+
*
|
|
121
|
+
* ### Examples
|
|
122
|
+
*
|
|
123
|
+
* ```ts
|
|
124
|
+
* const result = await db.mergeInto('person')
|
|
125
|
+
* .using('pet', 'person.id', 'pet.owner_id')
|
|
126
|
+
* .whenMatched()
|
|
127
|
+
* .thenDelete()
|
|
128
|
+
* .execute()
|
|
129
|
+
* ```
|
|
130
|
+
*
|
|
131
|
+
* The generated SQL (PostgreSQL):
|
|
132
|
+
*
|
|
133
|
+
* ```sql
|
|
134
|
+
* merge into "person"
|
|
135
|
+
* using "pet" on "person"."id" = "pet"."owner_id"
|
|
136
|
+
* when matched then
|
|
137
|
+
* delete
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
whenMatched(): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT | ST, O>;
|
|
141
|
+
/**
|
|
142
|
+
* Adds the `when matched` clause to the query with an `and` condition.
|
|
143
|
+
*
|
|
144
|
+
* This method is similar to {@link SelectQueryBuilder.where}, so see the documentation
|
|
145
|
+
* for that method for more examples.
|
|
146
|
+
*
|
|
147
|
+
* For a simple `when matched` clause (without an `and` condition) see {@link whenMatched}.
|
|
148
|
+
*
|
|
149
|
+
* ### Examples
|
|
150
|
+
*
|
|
151
|
+
* ```ts
|
|
152
|
+
* const result = await db.mergeInto('person')
|
|
153
|
+
* .using('pet', 'person.id', 'pet.owner_id')
|
|
154
|
+
* .whenMatchedAnd('person.first_name', '=', 'John')
|
|
155
|
+
* .thenDelete()
|
|
156
|
+
* .execute()
|
|
157
|
+
* ```
|
|
158
|
+
*
|
|
159
|
+
* The generated SQL (PostgreSQL):
|
|
160
|
+
*
|
|
161
|
+
* ```sql
|
|
162
|
+
* merge into "person"
|
|
163
|
+
* using "pet" on "person"."id" = "pet"."owner_id"
|
|
164
|
+
* when matched and "person"."first_name" = $1 then
|
|
165
|
+
* delete
|
|
166
|
+
* ```
|
|
167
|
+
*/
|
|
168
|
+
whenMatchedAnd<RE extends ReferenceExpression<DB, TT | ST>, VE extends OperandValueExpressionOrList<DB, TT | ST, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT | ST, O>;
|
|
169
|
+
whenMatchedAnd<E extends ExpressionOrFactory<DB, TT | ST, SqlBool>>(expression: E): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT | ST, O>;
|
|
170
|
+
/**
|
|
171
|
+
* Adds the `when matched` clause to the query with an `and` condition. But unlike
|
|
172
|
+
* {@link whenMatchedAnd}, this method accepts a column reference as the 3rd argument.
|
|
173
|
+
*
|
|
174
|
+
* This method is similar to {@link SelectQueryBuilder.whereRef}, so see the documentation
|
|
175
|
+
* for that method for more examples.
|
|
176
|
+
*/
|
|
177
|
+
whenMatchedAndRef<LRE extends ReferenceExpression<DB, TT | ST>, RRE extends ReferenceExpression<DB, TT | ST>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT | ST, O>;
|
|
178
|
+
/**
|
|
179
|
+
* Adds a simple `when not matched` clause to the query.
|
|
180
|
+
*
|
|
181
|
+
* For a `when not matched` clause with an `and` condition, see {@link whenNotMatchedAnd}.
|
|
182
|
+
*
|
|
183
|
+
* For a simple `when matched` clause, see {@link whenMatched}.
|
|
184
|
+
*
|
|
185
|
+
* For a `when matched` clause with an `and` condition, see {@link whenMatchedAnd}.
|
|
186
|
+
*
|
|
187
|
+
* ### Examples
|
|
188
|
+
*
|
|
189
|
+
* ```ts
|
|
190
|
+
* const result = await db.mergeInto('person')
|
|
191
|
+
* .using('pet', 'person.id', 'pet.owner_id')
|
|
192
|
+
* .whenNotMatched()
|
|
193
|
+
* .thenInsertValues({
|
|
194
|
+
* first_name: 'John',
|
|
195
|
+
* last_name: 'Doe',
|
|
196
|
+
* })
|
|
197
|
+
* .execute()
|
|
198
|
+
* ```
|
|
199
|
+
*
|
|
200
|
+
* The generated SQL (PostgreSQL):
|
|
201
|
+
*
|
|
202
|
+
* ```sql
|
|
203
|
+
* merge into "person"
|
|
204
|
+
* using "pet" on "person"."id" = "pet"."owner_id"
|
|
205
|
+
* when not matched then
|
|
206
|
+
* insert ("first_name", "last_name") values ($1, $2)
|
|
207
|
+
* ```
|
|
208
|
+
*/
|
|
209
|
+
whenNotMatched(): NotMatchedThenableMergeQueryBuilder<DB, TT, ST, O>;
|
|
210
|
+
/**
|
|
211
|
+
* Adds the `when not matched` clause to the query with an `and` condition.
|
|
212
|
+
*
|
|
213
|
+
* This method is similar to {@link SelectQueryBuilder.where}, so see the documentation
|
|
214
|
+
* for that method for more examples.
|
|
215
|
+
*
|
|
216
|
+
* For a simple `when not matched` clause (without an `and` condition) see {@link whenNotMatched}.
|
|
217
|
+
*
|
|
218
|
+
* Unlike {@link whenMatchedAnd}, you cannot reference columns from the table merged into.
|
|
219
|
+
*
|
|
220
|
+
* ### Examples
|
|
221
|
+
*
|
|
222
|
+
* ```ts
|
|
223
|
+
* const result = await db.mergeInto('person')
|
|
224
|
+
* .using('pet', 'person.id', 'pet.owner_id')
|
|
225
|
+
* .whenNotMatchedAnd('pet.name', '=', 'Lucky')
|
|
226
|
+
* .thenInsertValues({
|
|
227
|
+
* first_name: 'John',
|
|
228
|
+
* last_name: 'Doe',
|
|
229
|
+
* })
|
|
230
|
+
* .execute()
|
|
231
|
+
* ```
|
|
232
|
+
*
|
|
233
|
+
* The generated SQL (PostgreSQL):
|
|
234
|
+
*
|
|
235
|
+
* ```sql
|
|
236
|
+
* merge into "person"
|
|
237
|
+
* using "pet" on "person"."id" = "pet"."owner_id"
|
|
238
|
+
* when not matched and "pet"."name" = $1 then
|
|
239
|
+
* insert ("first_name", "last_name") values ($2, $3)
|
|
240
|
+
* ```
|
|
241
|
+
*/
|
|
242
|
+
whenNotMatchedAnd<RE extends ReferenceExpression<DB, ST>, VE extends OperandValueExpressionOrList<DB, ST, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): NotMatchedThenableMergeQueryBuilder<DB, TT, ST, O>;
|
|
243
|
+
whenNotMatchedAnd<E extends ExpressionOrFactory<DB, ST, SqlBool>>(expression: E): NotMatchedThenableMergeQueryBuilder<DB, TT, ST, O>;
|
|
244
|
+
/**
|
|
245
|
+
* Adds the `when not matched` clause to the query with an `and` condition. But unlike
|
|
246
|
+
* {@link whenNotMatchedAnd}, this method accepts a column reference as the 3rd argument.
|
|
247
|
+
*
|
|
248
|
+
* Unlike {@link whenMatchedAndRef}, you cannot reference columns from the target table.
|
|
249
|
+
*
|
|
250
|
+
* This method is similar to {@link SelectQueryBuilder.whereRef}, so see the documentation
|
|
251
|
+
* for that method for more examples.
|
|
252
|
+
*/
|
|
253
|
+
whenNotMatchedAndRef<LRE extends ReferenceExpression<DB, ST>, RRE extends ReferenceExpression<DB, ST>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): NotMatchedThenableMergeQueryBuilder<DB, TT, ST, O>;
|
|
254
|
+
/**
|
|
255
|
+
* Adds a simple `when not matched by source` clause to the query.
|
|
256
|
+
*
|
|
257
|
+
* Supported in MS SQL Server.
|
|
258
|
+
*
|
|
259
|
+
* Similar to {@link whenNotMatched}, but returns a {@link MatchedThenableMergeQueryBuilder}.
|
|
260
|
+
*/
|
|
261
|
+
whenNotMatchedBySource(): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT, O>;
|
|
262
|
+
/**
|
|
263
|
+
* Adds the `when not matched by source` clause to the query with an `and` condition.
|
|
264
|
+
*
|
|
265
|
+
* Supported in MS SQL Server.
|
|
266
|
+
*
|
|
267
|
+
* Similar to {@link whenNotMatchedAnd}, but returns a {@link MatchedThenableMergeQueryBuilder}.
|
|
268
|
+
*/
|
|
269
|
+
whenNotMatchedBySourceAnd<RE extends ReferenceExpression<DB, TT>, VE extends OperandValueExpressionOrList<DB, TT, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT, O>;
|
|
270
|
+
whenNotMatchedBySourceAnd<E extends ExpressionOrFactory<DB, TT, SqlBool>>(expression: E): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT, O>;
|
|
271
|
+
/**
|
|
272
|
+
* Adds the `when not matched by source` clause to the query with an `and` condition.
|
|
273
|
+
*
|
|
274
|
+
* Similar to {@link whenNotMatchedAndRef}, but you can reference columns from
|
|
275
|
+
* the target table, and not from source table and returns a {@link MatchedThenableMergeQueryBuilder}.
|
|
276
|
+
*/
|
|
277
|
+
whenNotMatchedBySourceAndRef<LRE extends ReferenceExpression<DB, TT>, RRE extends ReferenceExpression<DB, TT>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT, O>;
|
|
278
|
+
/**
|
|
279
|
+
* Simply calls the provided function passing `this` as the only argument. `$call` returns
|
|
280
|
+
* what the provided function returns.
|
|
281
|
+
*
|
|
282
|
+
* If you want to conditionally call a method on `this`, see
|
|
283
|
+
* the {@link $if} method.
|
|
284
|
+
*
|
|
285
|
+
* ### Examples
|
|
286
|
+
*
|
|
287
|
+
* The next example uses a helper function `log` to log a query:
|
|
288
|
+
*
|
|
289
|
+
* ```ts
|
|
290
|
+
* function log<T extends Compilable>(qb: T): T {
|
|
291
|
+
* console.log(qb.compile())
|
|
292
|
+
* return qb
|
|
293
|
+
* }
|
|
294
|
+
*
|
|
295
|
+
* db.updateTable('person')
|
|
296
|
+
* .set(values)
|
|
297
|
+
* .$call(log)
|
|
298
|
+
* .execute()
|
|
299
|
+
* ```
|
|
300
|
+
*/
|
|
301
|
+
$call<T>(func: (qb: this) => T): T;
|
|
302
|
+
/**
|
|
303
|
+
* Call `func(this)` if `condition` is true.
|
|
304
|
+
*
|
|
305
|
+
* This method is especially handy with optional selects. Any `returning` or `returningAll`
|
|
306
|
+
* method calls add columns as optional fields to the output type when called inside
|
|
307
|
+
* the `func` callback. This is because we can't know if those selections were actually
|
|
308
|
+
* made before running the code.
|
|
309
|
+
*
|
|
310
|
+
* You can also call any other methods inside the callback.
|
|
311
|
+
*
|
|
312
|
+
* ### Examples
|
|
313
|
+
*
|
|
314
|
+
* ```ts
|
|
315
|
+
* async function updatePerson(id: number, updates: UpdateablePerson, returnLastName: boolean) {
|
|
316
|
+
* return await db
|
|
317
|
+
* .updateTable('person')
|
|
318
|
+
* .set(updates)
|
|
319
|
+
* .where('id', '=', id)
|
|
320
|
+
* .returning(['id', 'first_name'])
|
|
321
|
+
* .$if(returnLastName, (qb) => qb.returning('last_name'))
|
|
322
|
+
* .executeTakeFirstOrThrow()
|
|
323
|
+
* }
|
|
324
|
+
* ```
|
|
325
|
+
*
|
|
326
|
+
* Any selections added inside the `if` callback will be added as optional fields to the
|
|
327
|
+
* output type since we can't know if the selections were actually made before running
|
|
328
|
+
* the code. In the example above the return type of the `updatePerson` function is:
|
|
329
|
+
*
|
|
330
|
+
* ```ts
|
|
331
|
+
* {
|
|
332
|
+
* id: number
|
|
333
|
+
* first_name: string
|
|
334
|
+
* last_name?: string
|
|
335
|
+
* }
|
|
336
|
+
* ```
|
|
337
|
+
*/
|
|
338
|
+
$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>>;
|
|
339
|
+
toOperationNode(): MergeQueryNode;
|
|
340
|
+
compile(): CompiledQuery<never>;
|
|
341
|
+
/**
|
|
342
|
+
* Executes the query and returns an array of rows.
|
|
343
|
+
*
|
|
344
|
+
* Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
|
|
345
|
+
*/
|
|
346
|
+
execute(): Promise<SimplifyResult<O>[]>;
|
|
347
|
+
/**
|
|
348
|
+
* Executes the query and returns the first result or undefined if
|
|
349
|
+
* the query returned no result.
|
|
350
|
+
*/
|
|
351
|
+
executeTakeFirst(): Promise<SimplifySingleResult<O>>;
|
|
352
|
+
/**
|
|
353
|
+
* Executes the query and returns the first result or throws if
|
|
354
|
+
* the query returned no result.
|
|
355
|
+
*
|
|
356
|
+
* By default an instance of {@link NoResultError} is thrown, but you can
|
|
357
|
+
* provide a custom error class, or callback as the only argument to throw a different
|
|
358
|
+
* error.
|
|
359
|
+
*/
|
|
360
|
+
executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor | ((node: QueryNode) => Error)): Promise<SimplifyResult<O>>;
|
|
361
|
+
}
|
|
362
|
+
export declare class MatchedThenableMergeQueryBuilder<DB, TT extends keyof DB, ST extends keyof DB, UT extends TT | ST, O> {
|
|
363
|
+
#private;
|
|
364
|
+
constructor(props: MergeQueryBuilderProps);
|
|
365
|
+
/**
|
|
366
|
+
* Performs the `delete` action.
|
|
367
|
+
*
|
|
368
|
+
* To perform the `do nothing` action, see {@link thenDoNothing}.
|
|
369
|
+
*
|
|
370
|
+
* To perform the `update` action, see {@link thenUpdate} or {@link thenUpdateSet}.
|
|
371
|
+
*
|
|
372
|
+
* ### Examples
|
|
373
|
+
*
|
|
374
|
+
* ```ts
|
|
375
|
+
* const result = await db.mergeInto('person')
|
|
376
|
+
* .using('pet', 'person.id', 'pet.owner_id')
|
|
377
|
+
* .whenMatched()
|
|
378
|
+
* .thenDelete()
|
|
379
|
+
* .execute()
|
|
380
|
+
* ```
|
|
381
|
+
*
|
|
382
|
+
* The generated SQL (PostgreSQL):
|
|
383
|
+
*
|
|
384
|
+
* ```sql
|
|
385
|
+
* merge into "person"
|
|
386
|
+
* using "pet" on "person"."id" = "pet"."owner_id"
|
|
387
|
+
* when matched then
|
|
388
|
+
* delete
|
|
389
|
+
* ```
|
|
390
|
+
*/
|
|
391
|
+
thenDelete(): WheneableMergeQueryBuilder<DB, TT, ST, O>;
|
|
392
|
+
/**
|
|
393
|
+
* Performs the `do nothing` action.
|
|
394
|
+
*
|
|
395
|
+
* This is supported in PostgreSQL.
|
|
396
|
+
*
|
|
397
|
+
* To perform the `delete` action, see {@link thenDelete}.
|
|
398
|
+
*
|
|
399
|
+
* To perform the `update` action, see {@link thenUpdate} or {@link thenUpdateSet}.
|
|
400
|
+
*
|
|
401
|
+
* ### Examples
|
|
402
|
+
*
|
|
403
|
+
* ```ts
|
|
404
|
+
* const result = await db.mergeInto('person')
|
|
405
|
+
* .using('pet', 'person.id', 'pet.owner_id')
|
|
406
|
+
* .whenMatched()
|
|
407
|
+
* .thenDoNothing()
|
|
408
|
+
* .execute()
|
|
409
|
+
* ```
|
|
410
|
+
*
|
|
411
|
+
* The generated SQL (PostgreSQL):
|
|
412
|
+
*
|
|
413
|
+
* ```sql
|
|
414
|
+
* merge into "person"
|
|
415
|
+
* using "pet" on "person"."id" = "pet"."owner_id"
|
|
416
|
+
* when matched then
|
|
417
|
+
* do nothing
|
|
418
|
+
* ```
|
|
419
|
+
*/
|
|
420
|
+
thenDoNothing(): WheneableMergeQueryBuilder<DB, TT, ST, O>;
|
|
421
|
+
/**
|
|
422
|
+
* Perform an `update` operation with a full-fledged {@link UpdateQueryBuilder}.
|
|
423
|
+
* This is handy when multiple `set` invocations are needed.
|
|
424
|
+
*
|
|
425
|
+
* For a shorthand version of this method, see {@link thenUpdateSet}.
|
|
426
|
+
*
|
|
427
|
+
* To perform the `delete` action, see {@link thenDelete}.
|
|
428
|
+
*
|
|
429
|
+
* To perform the `do nothing` action, see {@link thenDoNothing}.
|
|
430
|
+
*
|
|
431
|
+
* ### Examples
|
|
432
|
+
*
|
|
433
|
+
* ```ts
|
|
434
|
+
* import { sql } from 'kysely'
|
|
435
|
+
*
|
|
436
|
+
* const result = await db.mergeInto('person')
|
|
437
|
+
* .using('pet', 'person.id', 'pet.owner_id')
|
|
438
|
+
* .whenMatched()
|
|
439
|
+
* .thenUpdate((ub) => ub
|
|
440
|
+
* .set(sql`metadata['has_pets']`, 'Y')
|
|
441
|
+
* .set({
|
|
442
|
+
* updated_at: Date.now(),
|
|
443
|
+
* })
|
|
444
|
+
* )
|
|
445
|
+
* .execute()
|
|
446
|
+
* ```
|
|
447
|
+
*
|
|
448
|
+
* The generated SQL (PostgreSQL):
|
|
449
|
+
*
|
|
450
|
+
* ```sql
|
|
451
|
+
* merge into "person"
|
|
452
|
+
* using "pet" on "person"."id" = "pet"."owner_id"
|
|
453
|
+
* when matched then
|
|
454
|
+
* update set metadata['has_pets'] = $1, "updated_at" = $2
|
|
455
|
+
* ```
|
|
456
|
+
*/
|
|
457
|
+
thenUpdate<QB extends UpdateQueryBuilder<DB, TT, UT, never>>(set: (ub: QB) => QB): WheneableMergeQueryBuilder<DB, TT, ST, O>;
|
|
458
|
+
/**
|
|
459
|
+
* Performs an `update set` action, similar to {@link UpdateQueryBuilder.set}.
|
|
460
|
+
*
|
|
461
|
+
* For a full-fledged update query builder, see {@link thenUpdate}.
|
|
462
|
+
*
|
|
463
|
+
* To perform the `delete` action, see {@link thenDelete}.
|
|
464
|
+
*
|
|
465
|
+
* To perform the `do nothing` action, see {@link thenDoNothing}.
|
|
466
|
+
*
|
|
467
|
+
* ### Examples
|
|
468
|
+
*
|
|
469
|
+
* ```ts
|
|
470
|
+
* const result = await db.mergeInto('person')
|
|
471
|
+
* .using('pet', 'person.id', 'pet.owner_id')
|
|
472
|
+
* .whenMatched()
|
|
473
|
+
* .thenUpdateSet({
|
|
474
|
+
* middle_name: 'dog owner',
|
|
475
|
+
* })
|
|
476
|
+
* .execute()
|
|
477
|
+
* ```
|
|
478
|
+
*
|
|
479
|
+
* The generate SQL (PostgreSQL):
|
|
480
|
+
*
|
|
481
|
+
* ```sql
|
|
482
|
+
* merge into "person"
|
|
483
|
+
* using "pet" on "person"."id" = "pet"."owner_id"
|
|
484
|
+
* when matched then
|
|
485
|
+
* update set "middle_name" = $1
|
|
486
|
+
* ```
|
|
487
|
+
*/
|
|
488
|
+
thenUpdateSet<UO extends UpdateObject<DB, UT, TT>>(update: UO): WheneableMergeQueryBuilder<DB, TT, ST, O>;
|
|
489
|
+
thenUpdateSet<U extends UpdateObjectFactory<DB, UT, TT>>(update: U): WheneableMergeQueryBuilder<DB, TT, ST, O>;
|
|
490
|
+
thenUpdateSet<RE extends ReferenceExpression<DB, TT>, VE extends ValueExpression<DB, UT, ExtractUpdateTypeFromReferenceExpression<DB, TT, RE>>>(key: RE, value: VE): WheneableMergeQueryBuilder<DB, TT, ST, O>;
|
|
491
|
+
}
|
|
492
|
+
export declare class NotMatchedThenableMergeQueryBuilder<DB, TT extends keyof DB, ST extends keyof DB, O> {
|
|
493
|
+
#private;
|
|
494
|
+
constructor(props: MergeQueryBuilderProps);
|
|
495
|
+
/**
|
|
496
|
+
* Performs the `do nothing` action.
|
|
497
|
+
*
|
|
498
|
+
* This is supported in PostgreSQL.
|
|
499
|
+
*
|
|
500
|
+
* To perform the `insert` action, see {@link thenInsertValues}.
|
|
501
|
+
*
|
|
502
|
+
* ### Examples
|
|
503
|
+
*
|
|
504
|
+
* ```ts
|
|
505
|
+
* const result = await db.mergeInto('person')
|
|
506
|
+
* .using('pet', 'person.id', 'pet.owner_id')
|
|
507
|
+
* .whenNotMatched()
|
|
508
|
+
* .thenDoNothing()
|
|
509
|
+
* .execute()
|
|
510
|
+
* ```
|
|
511
|
+
*
|
|
512
|
+
* The generated SQL (PostgreSQL):
|
|
513
|
+
*
|
|
514
|
+
* ```sql
|
|
515
|
+
* merge into "person"
|
|
516
|
+
* using "pet" on "person"."id" = "pet"."owner_id"
|
|
517
|
+
* when not matched then
|
|
518
|
+
* do nothing
|
|
519
|
+
* ```
|
|
520
|
+
*/
|
|
521
|
+
thenDoNothing(): WheneableMergeQueryBuilder<DB, TT, ST, O>;
|
|
522
|
+
/**
|
|
523
|
+
* Performs the `insert (...) values` action.
|
|
524
|
+
*
|
|
525
|
+
* This method is similar to {@link InsertQueryBuilder.values}, so see the documentation
|
|
526
|
+
* for that method for more examples.
|
|
527
|
+
*
|
|
528
|
+
* To perform the `do nothing` action, see {@link thenDoNothing}.
|
|
529
|
+
*
|
|
530
|
+
* ### Examples
|
|
531
|
+
*
|
|
532
|
+
* ```ts
|
|
533
|
+
* const result = await db.mergeInto('person')
|
|
534
|
+
* .using('pet', 'person.id', 'pet.owner_id')
|
|
535
|
+
* .whenNotMatched()
|
|
536
|
+
* .thenInsertValues({
|
|
537
|
+
* first_name: 'John',
|
|
538
|
+
* last_name: 'Doe',
|
|
539
|
+
* })
|
|
540
|
+
* .execute()
|
|
541
|
+
* ```
|
|
542
|
+
*
|
|
543
|
+
* The generated SQL (PostgreSQL):
|
|
544
|
+
*
|
|
545
|
+
* ```sql
|
|
546
|
+
* merge into "person"
|
|
547
|
+
* using "pet" on "person"."id" = "pet"."owner_id"
|
|
548
|
+
* when not matched then
|
|
549
|
+
* insert ("first_name", "last_name") values ($1, $2)
|
|
550
|
+
* ```
|
|
551
|
+
*/
|
|
552
|
+
thenInsertValues<I extends InsertObjectOrList<DB, TT>>(insert: I): WheneableMergeQueryBuilder<DB, TT, ST, O>;
|
|
553
|
+
thenInsertValues<IO extends InsertObjectOrListFactory<DB, TT, ST>>(insert: IO): WheneableMergeQueryBuilder<DB, TT, ST, O>;
|
|
554
|
+
}
|
|
555
|
+
export type ExtractWheneableMergeQueryBuilder<DB, TT extends keyof DB, TE extends TableExpression<DB, TT>, O> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? UsingBuilder<DB, TT, A, DB[T], O> : never : TE extends keyof DB ? WheneableMergeQueryBuilder<DB, TT, TE, O> : TE extends AliasedExpression<infer QO, infer QA> ? UsingBuilder<DB, TT, QA, QO, O> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? UsingBuilder<DB, TT, QA, QO, O> : never;
|
|
556
|
+
type UsingBuilder<DB, TT extends keyof DB, A extends string, R, O> = A extends keyof DB ? WheneableMergeQueryBuilder<DB, TT, A, O> : WheneableMergeQueryBuilder<DB & ShallowRecord<A, R>, TT, A, O>;
|
|
557
|
+
export {};
|