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.
Files changed (161) hide show
  1. package/dist/cjs/dialect/database-introspector.d.ts +1 -0
  2. package/dist/cjs/dialect/mssql/mssql-introspector.js +13 -2
  3. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  4. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +8 -0
  5. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
  6. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  7. package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
  8. package/dist/cjs/dialect/postgres/postgres-introspector.js +2 -0
  9. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
  10. package/dist/cjs/driver/database-connection.d.ts +1 -1
  11. package/dist/cjs/expression/expression-builder.d.ts +30 -4
  12. package/dist/cjs/expression/expression-builder.js +5 -0
  13. package/dist/cjs/index.d.ts +7 -1
  14. package/dist/cjs/index.js +6 -0
  15. package/dist/cjs/migration/migrator.d.ts +19 -2
  16. package/dist/cjs/migration/migrator.js +77 -43
  17. package/dist/cjs/operation-node/add-index-node.js +1 -1
  18. package/dist/cjs/operation-node/cast-node.d.ts +13 -0
  19. package/dist/cjs/operation-node/cast-node.js +19 -0
  20. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  21. package/dist/cjs/operation-node/data-type-node.d.ts +5 -1
  22. package/dist/cjs/operation-node/data-type-node.js +55 -1
  23. package/dist/cjs/operation-node/delete-query-node.d.ts +4 -0
  24. package/dist/cjs/operation-node/delete-query-node.js +12 -0
  25. package/dist/cjs/operation-node/fetch-node.d.ts +15 -0
  26. package/dist/cjs/operation-node/fetch-node.js +19 -0
  27. package/dist/cjs/operation-node/insert-query-node.d.ts +4 -1
  28. package/dist/cjs/operation-node/insert-query-node.js +5 -0
  29. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  30. package/dist/cjs/operation-node/matched-node.d.ts +13 -0
  31. package/dist/cjs/operation-node/matched-node.js +19 -0
  32. package/dist/cjs/operation-node/merge-query-node.d.ts +25 -0
  33. package/dist/cjs/operation-node/merge-query-node.js +45 -0
  34. package/dist/cjs/operation-node/operation-node-transformer.d.ts +10 -0
  35. package/dist/cjs/operation-node/operation-node-transformer.js +50 -0
  36. package/dist/cjs/operation-node/operation-node-visitor.d.ts +10 -0
  37. package/dist/cjs/operation-node/operation-node-visitor.js +5 -0
  38. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/query-node.d.ts +10 -3
  40. package/dist/cjs/operation-node/query-node.js +15 -1
  41. package/dist/cjs/operation-node/select-query-node.d.ts +5 -0
  42. package/dist/cjs/operation-node/select-query-node.js +6 -0
  43. package/dist/cjs/operation-node/top-node.d.ts +14 -0
  44. package/dist/cjs/operation-node/top-node.js +19 -0
  45. package/dist/cjs/operation-node/update-query-node.d.ts +7 -1
  46. package/dist/cjs/operation-node/update-query-node.js +11 -0
  47. package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
  48. package/dist/cjs/parser/binary-operation-parser.js +2 -2
  49. package/dist/cjs/parser/data-type-parser.js +7 -3
  50. package/dist/cjs/parser/fetch-parser.d.ts +2 -0
  51. package/dist/cjs/parser/fetch-parser.js +18 -0
  52. package/dist/cjs/parser/insert-values-parser.d.ts +3 -3
  53. package/dist/cjs/parser/merge-parser.d.ts +9 -0
  54. package/dist/cjs/parser/merge-parser.js +32 -0
  55. package/dist/cjs/parser/table-parser.d.ts +4 -3
  56. package/dist/cjs/parser/top-parser.d.ts +2 -0
  57. package/dist/cjs/parser/top-parser.js +20 -0
  58. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +4 -0
  59. package/dist/cjs/query-builder/delete-query-builder.d.ts +99 -0
  60. package/dist/cjs/query-builder/delete-query-builder.js +120 -0
  61. package/dist/cjs/query-builder/insert-query-builder.d.ts +73 -3
  62. package/dist/cjs/query-builder/insert-query-builder.js +242 -0
  63. package/dist/cjs/query-builder/merge-query-builder.d.ts +557 -0
  64. package/dist/cjs/query-builder/merge-query-builder.js +518 -0
  65. package/dist/cjs/query-builder/merge-result.d.ts +4 -0
  66. package/dist/cjs/query-builder/merge-result.js +10 -0
  67. package/dist/cjs/query-builder/select-query-builder.d.ts +102 -7
  68. package/dist/cjs/query-builder/select-query-builder.js +14 -0
  69. package/dist/cjs/query-builder/update-query-builder.d.ts +82 -3
  70. package/dist/cjs/query-builder/update-query-builder.js +98 -0
  71. package/dist/cjs/query-compiler/default-query-compiler.d.ts +10 -0
  72. package/dist/cjs/query-compiler/default-query-compiler.js +94 -10
  73. package/dist/cjs/query-compiler/query-compiler.d.ts +2 -1
  74. package/dist/cjs/query-creator.d.ts +40 -2
  75. package/dist/cjs/query-creator.js +9 -0
  76. package/dist/cjs/schema/alter-table-add-index-builder.js +6 -2
  77. package/dist/cjs/schema/column-definition-builder.d.ts +13 -1
  78. package/dist/cjs/schema/column-definition-builder.js +15 -1
  79. package/dist/cjs/util/infer-result.d.ts +2 -1
  80. package/dist/cjs/util/type-utils.d.ts +3 -2
  81. package/dist/esm/dialect/database-introspector.d.ts +1 -0
  82. package/dist/esm/dialect/mssql/mssql-introspector.js +13 -2
  83. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  84. package/dist/esm/dialect/mssql/mssql-query-compiler.js +8 -0
  85. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
  86. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  87. package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
  88. package/dist/esm/dialect/postgres/postgres-introspector.js +2 -0
  89. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
  90. package/dist/esm/driver/database-connection.d.ts +1 -1
  91. package/dist/esm/expression/expression-builder.d.ts +30 -4
  92. package/dist/esm/expression/expression-builder.js +5 -0
  93. package/dist/esm/index.d.ts +7 -1
  94. package/dist/esm/index.js +6 -0
  95. package/dist/esm/migration/migrator.d.ts +19 -2
  96. package/dist/esm/migration/migrator.js +76 -42
  97. package/dist/esm/operation-node/add-index-node.js +1 -1
  98. package/dist/esm/operation-node/cast-node.d.ts +13 -0
  99. package/dist/esm/operation-node/cast-node.js +17 -0
  100. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  101. package/dist/esm/operation-node/data-type-node.d.ts +5 -1
  102. package/dist/esm/operation-node/data-type-node.js +53 -0
  103. package/dist/esm/operation-node/delete-query-node.d.ts +4 -0
  104. package/dist/esm/operation-node/delete-query-node.js +12 -0
  105. package/dist/esm/operation-node/fetch-node.d.ts +15 -0
  106. package/dist/esm/operation-node/fetch-node.js +17 -0
  107. package/dist/esm/operation-node/insert-query-node.d.ts +4 -1
  108. package/dist/esm/operation-node/insert-query-node.js +5 -0
  109. package/dist/esm/operation-node/join-node.d.ts +1 -1
  110. package/dist/esm/operation-node/matched-node.d.ts +13 -0
  111. package/dist/esm/operation-node/matched-node.js +17 -0
  112. package/dist/esm/operation-node/merge-query-node.d.ts +25 -0
  113. package/dist/esm/operation-node/merge-query-node.js +43 -0
  114. package/dist/esm/operation-node/operation-node-transformer.d.ts +10 -0
  115. package/dist/esm/operation-node/operation-node-transformer.js +50 -0
  116. package/dist/esm/operation-node/operation-node-visitor.d.ts +10 -0
  117. package/dist/esm/operation-node/operation-node-visitor.js +5 -0
  118. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  119. package/dist/esm/operation-node/query-node.d.ts +10 -3
  120. package/dist/esm/operation-node/query-node.js +15 -1
  121. package/dist/esm/operation-node/select-query-node.d.ts +5 -0
  122. package/dist/esm/operation-node/select-query-node.js +6 -0
  123. package/dist/esm/operation-node/top-node.d.ts +14 -0
  124. package/dist/esm/operation-node/top-node.js +17 -0
  125. package/dist/esm/operation-node/update-query-node.d.ts +7 -1
  126. package/dist/esm/operation-node/update-query-node.js +11 -0
  127. package/dist/esm/parser/binary-operation-parser.d.ts +1 -1
  128. package/dist/esm/parser/binary-operation-parser.js +2 -2
  129. package/dist/esm/parser/data-type-parser.js +8 -4
  130. package/dist/esm/parser/fetch-parser.d.ts +2 -0
  131. package/dist/esm/parser/fetch-parser.js +15 -0
  132. package/dist/esm/parser/insert-values-parser.d.ts +3 -3
  133. package/dist/esm/parser/merge-parser.d.ts +9 -0
  134. package/dist/esm/parser/merge-parser.js +28 -0
  135. package/dist/esm/parser/table-parser.d.ts +4 -3
  136. package/dist/esm/parser/top-parser.d.ts +2 -0
  137. package/dist/esm/parser/top-parser.js +17 -0
  138. package/dist/esm/plugin/with-schema/with-schema-transformer.js +4 -0
  139. package/dist/esm/query-builder/delete-query-builder.d.ts +99 -0
  140. package/dist/esm/query-builder/delete-query-builder.js +120 -0
  141. package/dist/esm/query-builder/insert-query-builder.d.ts +73 -3
  142. package/dist/esm/query-builder/insert-query-builder.js +242 -0
  143. package/dist/esm/query-builder/merge-query-builder.d.ts +557 -0
  144. package/dist/esm/query-builder/merge-query-builder.js +512 -0
  145. package/dist/esm/query-builder/merge-result.d.ts +4 -0
  146. package/dist/esm/query-builder/merge-result.js +7 -0
  147. package/dist/esm/query-builder/select-query-builder.d.ts +102 -7
  148. package/dist/esm/query-builder/select-query-builder.js +14 -0
  149. package/dist/esm/query-builder/update-query-builder.d.ts +82 -3
  150. package/dist/esm/query-builder/update-query-builder.js +98 -0
  151. package/dist/esm/query-compiler/default-query-compiler.d.ts +10 -0
  152. package/dist/esm/query-compiler/default-query-compiler.js +94 -10
  153. package/dist/esm/query-compiler/query-compiler.d.ts +2 -1
  154. package/dist/esm/query-creator.d.ts +40 -2
  155. package/dist/esm/query-creator.js +10 -1
  156. package/dist/esm/schema/alter-table-add-index-builder.js +7 -3
  157. package/dist/esm/schema/column-definition-builder.d.ts +13 -1
  158. package/dist/esm/schema/column-definition-builder.js +15 -1
  159. package/dist/esm/util/infer-result.d.ts +2 -1
  160. package/dist/esm/util/type-utils.d.ts +3 -2
  161. 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 {};