kysely 0.27.2 → 0.27.4

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 (285) hide show
  1. package/CONTRIBUTING.md +1 -1
  2. package/README.md +7 -7
  3. package/dist/cjs/dialect/database-introspector.d.ts +1 -0
  4. package/dist/cjs/dialect/dialect-adapter-base.d.ts +2 -1
  5. package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
  6. package/dist/cjs/dialect/dialect-adapter.d.ts +5 -0
  7. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +1 -5
  8. package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
  9. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +46 -26
  10. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
  11. package/dist/cjs/dialect/mssql/mssql-driver.js +95 -36
  12. package/dist/cjs/dialect/mssql/mssql-introspector.js +13 -2
  13. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  14. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +8 -0
  15. package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -0
  16. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  17. package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
  18. package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -1
  19. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
  20. package/dist/cjs/driver/database-connection.d.ts +4 -2
  21. package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
  22. package/dist/cjs/dynamic/dynamic.d.ts +1 -1
  23. package/dist/cjs/dynamic/dynamic.js +1 -1
  24. package/dist/cjs/expression/expression-builder.d.ts +31 -5
  25. package/dist/cjs/expression/expression-builder.js +7 -3
  26. package/dist/cjs/expression/expression.js +2 -3
  27. package/dist/cjs/helpers/mssql.js +3 -4
  28. package/dist/cjs/helpers/mysql.d.ts +3 -3
  29. package/dist/cjs/helpers/mysql.js +6 -7
  30. package/dist/cjs/helpers/postgres.d.ts +4 -4
  31. package/dist/cjs/helpers/postgres.js +7 -8
  32. package/dist/cjs/helpers/sqlite.js +3 -4
  33. package/dist/cjs/index.d.ts +31 -18
  34. package/dist/cjs/index.js +30 -17
  35. package/dist/cjs/kysely.d.ts +1 -1
  36. package/dist/cjs/kysely.js +3 -3
  37. package/dist/cjs/operation-node/add-index-node.js +1 -1
  38. package/dist/cjs/operation-node/alter-column-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/case-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/cast-node.d.ts +13 -0
  41. package/dist/cjs/operation-node/cast-node.js +19 -0
  42. package/dist/cjs/operation-node/column-definition-node.d.ts +2 -0
  43. package/dist/cjs/operation-node/data-type-node.d.ts +5 -1
  44. package/dist/cjs/operation-node/data-type-node.js +56 -0
  45. package/dist/cjs/operation-node/delete-query-node.d.ts +6 -0
  46. package/dist/cjs/operation-node/delete-query-node.js +12 -0
  47. package/dist/cjs/operation-node/fetch-node.d.ts +15 -0
  48. package/dist/cjs/operation-node/fetch-node.js +19 -0
  49. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -4
  50. package/dist/cjs/operation-node/having-node.d.ts +1 -1
  51. package/dist/cjs/operation-node/insert-query-node.d.ts +6 -1
  52. package/dist/cjs/operation-node/insert-query-node.js +5 -0
  53. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  54. package/dist/cjs/operation-node/matched-node.d.ts +13 -0
  55. package/dist/cjs/operation-node/matched-node.js +19 -0
  56. package/dist/cjs/operation-node/merge-query-node.d.ts +27 -0
  57. package/dist/cjs/operation-node/merge-query-node.js +45 -0
  58. package/dist/cjs/operation-node/on-node.d.ts +1 -1
  59. package/dist/cjs/operation-node/operation-node-source.js +1 -2
  60. package/dist/cjs/operation-node/operation-node-transformer.d.ts +12 -0
  61. package/dist/cjs/operation-node/operation-node-transformer.js +62 -0
  62. package/dist/cjs/operation-node/operation-node-visitor.d.ts +12 -0
  63. package/dist/cjs/operation-node/operation-node-visitor.js +6 -0
  64. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  65. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  66. package/dist/cjs/operation-node/operator-node.js +8 -6
  67. package/dist/cjs/operation-node/output-node.d.ts +13 -0
  68. package/dist/cjs/operation-node/output-node.js +26 -0
  69. package/dist/cjs/operation-node/query-node.d.ts +17 -5
  70. package/dist/cjs/operation-node/query-node.js +24 -1
  71. package/dist/cjs/operation-node/select-query-node.d.ts +6 -0
  72. package/dist/cjs/operation-node/select-query-node.js +12 -0
  73. package/dist/cjs/operation-node/top-node.d.ts +14 -0
  74. package/dist/cjs/operation-node/top-node.js +19 -0
  75. package/dist/cjs/operation-node/update-query-node.d.ts +9 -1
  76. package/dist/cjs/operation-node/update-query-node.js +11 -0
  77. package/dist/cjs/operation-node/where-node.d.ts +1 -1
  78. package/dist/cjs/parser/binary-operation-parser.d.ts +1 -1
  79. package/dist/cjs/parser/binary-operation-parser.js +7 -8
  80. package/dist/cjs/parser/data-type-parser.js +8 -5
  81. package/dist/cjs/parser/default-value-parser.js +1 -2
  82. package/dist/cjs/parser/expression-parser.js +3 -4
  83. package/dist/cjs/parser/fetch-parser.d.ts +2 -0
  84. package/dist/cjs/parser/fetch-parser.js +17 -0
  85. package/dist/cjs/parser/group-by-parser.js +1 -2
  86. package/dist/cjs/parser/identifier-parser.js +1 -2
  87. package/dist/cjs/parser/insert-values-parser.d.ts +3 -3
  88. package/dist/cjs/parser/insert-values-parser.js +1 -2
  89. package/dist/cjs/parser/join-parser.js +1 -2
  90. package/dist/cjs/parser/merge-parser.d.ts +9 -0
  91. package/dist/cjs/parser/merge-parser.js +31 -0
  92. package/dist/cjs/parser/on-commit-action-parse.js +1 -2
  93. package/dist/cjs/parser/on-modify-action-parser.js +1 -2
  94. package/dist/cjs/parser/order-by-parser.js +3 -4
  95. package/dist/cjs/parser/parse-utils.js +4 -5
  96. package/dist/cjs/parser/partition-by-parser.js +1 -2
  97. package/dist/cjs/parser/reference-parser.js +8 -9
  98. package/dist/cjs/parser/returning-parser.d.ts +4 -3
  99. package/dist/cjs/parser/select-parser.js +2 -3
  100. package/dist/cjs/parser/set-operation-parser.js +1 -2
  101. package/dist/cjs/parser/table-parser.d.ts +4 -3
  102. package/dist/cjs/parser/table-parser.js +4 -5
  103. package/dist/cjs/parser/top-parser.d.ts +2 -0
  104. package/dist/cjs/parser/top-parser.js +19 -0
  105. package/dist/cjs/parser/unary-operation-parser.js +3 -4
  106. package/dist/cjs/parser/update-set-parser.js +2 -3
  107. package/dist/cjs/parser/value-parser.js +4 -5
  108. package/dist/cjs/parser/with-parser.js +1 -2
  109. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +2 -2
  110. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +2 -2
  111. package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
  112. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
  113. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
  114. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +4 -0
  115. package/dist/cjs/query-builder/delete-query-builder.d.ts +188 -5
  116. package/dist/cjs/query-builder/delete-query-builder.js +139 -5
  117. package/dist/cjs/query-builder/function-module.d.ts +5 -5
  118. package/dist/cjs/query-builder/function-module.js +1 -2
  119. package/dist/cjs/query-builder/insert-query-builder.d.ts +166 -10
  120. package/dist/cjs/query-builder/insert-query-builder.js +107 -10
  121. package/dist/cjs/query-builder/merge-query-builder.d.ts +721 -0
  122. package/dist/cjs/query-builder/merge-query-builder.js +547 -0
  123. package/dist/cjs/query-builder/merge-result.d.ts +4 -0
  124. package/dist/cjs/query-builder/merge-result.js +10 -0
  125. package/dist/cjs/query-builder/no-result-error.js +2 -2
  126. package/dist/cjs/query-builder/on-conflict-builder.d.ts +2 -2
  127. package/dist/cjs/query-builder/output-interface.d.ts +95 -0
  128. package/dist/cjs/query-builder/output-interface.js +2 -0
  129. package/dist/cjs/query-builder/returning-interface.d.ts +2 -0
  130. package/dist/cjs/query-builder/select-query-builder.d.ts +177 -17
  131. package/dist/cjs/query-builder/select-query-builder.js +21 -2
  132. package/dist/cjs/query-builder/update-query-builder.d.ts +175 -10
  133. package/dist/cjs/query-builder/update-query-builder.js +119 -7
  134. package/dist/cjs/query-builder/update-result.d.ts +9 -0
  135. package/dist/cjs/query-builder/update-result.js +9 -0
  136. package/dist/cjs/query-builder/where-interface.d.ts +1 -1
  137. package/dist/cjs/query-compiler/default-query-compiler.d.ts +12 -0
  138. package/dist/cjs/query-compiler/default-query-compiler.js +118 -10
  139. package/dist/cjs/query-compiler/query-compiler.d.ts +2 -1
  140. package/dist/cjs/query-creator.d.ts +96 -5
  141. package/dist/cjs/query-creator.js +63 -1
  142. package/dist/cjs/raw-builder/raw-builder.js +1 -2
  143. package/dist/cjs/raw-builder/sql.d.ts +5 -5
  144. package/dist/cjs/schema/alter-column-builder.js +3 -0
  145. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +1 -1
  146. package/dist/cjs/schema/alter-table-add-index-builder.js +7 -3
  147. package/dist/cjs/schema/alter-table-builder.js +1 -2
  148. package/dist/cjs/schema/column-definition-builder.d.ts +18 -1
  149. package/dist/cjs/schema/column-definition-builder.js +22 -1
  150. package/dist/cjs/util/assert.js +2 -3
  151. package/dist/cjs/util/compilable.js +1 -2
  152. package/dist/cjs/util/infer-result.d.ts +2 -1
  153. package/dist/cjs/util/json-object-args.js +1 -2
  154. package/dist/cjs/util/log-once.js +1 -2
  155. package/dist/cjs/util/object-utils.js +38 -26
  156. package/dist/cjs/util/performance-now.js +1 -2
  157. package/dist/cjs/util/prevent-await.js +1 -2
  158. package/dist/cjs/util/query-id.js +1 -2
  159. package/dist/cjs/util/random-string.js +1 -2
  160. package/dist/cjs/util/require-all-props.js +1 -2
  161. package/dist/cjs/util/stack-trace-utils.js +1 -2
  162. package/dist/cjs/util/type-utils.d.ts +3 -2
  163. package/dist/esm/dialect/database-introspector.d.ts +1 -0
  164. package/dist/esm/dialect/dialect-adapter-base.d.ts +2 -1
  165. package/dist/esm/dialect/dialect-adapter-base.js +4 -1
  166. package/dist/esm/dialect/dialect-adapter.d.ts +5 -0
  167. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +1 -5
  168. package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
  169. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +46 -26
  170. package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
  171. package/dist/esm/dialect/mssql/mssql-driver.js +95 -36
  172. package/dist/esm/dialect/mssql/mssql-introspector.js +13 -2
  173. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +4 -0
  174. package/dist/esm/dialect/mssql/mssql-query-compiler.js +8 -0
  175. package/dist/esm/dialect/mysql/mysql-introspector.js +2 -0
  176. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +1 -1
  177. package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
  178. package/dist/esm/dialect/postgres/postgres-introspector.js +3 -1
  179. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
  180. package/dist/esm/driver/database-connection.d.ts +4 -2
  181. package/dist/esm/dynamic/dynamic.d.ts +1 -1
  182. package/dist/esm/dynamic/dynamic.js +1 -1
  183. package/dist/esm/expression/expression-builder.d.ts +31 -5
  184. package/dist/esm/expression/expression-builder.js +5 -0
  185. package/dist/esm/helpers/mysql.d.ts +3 -3
  186. package/dist/esm/helpers/mysql.js +3 -3
  187. package/dist/esm/helpers/postgres.d.ts +4 -4
  188. package/dist/esm/helpers/postgres.js +4 -4
  189. package/dist/esm/index.d.ts +31 -18
  190. package/dist/esm/index.js +30 -17
  191. package/dist/esm/kysely.d.ts +1 -1
  192. package/dist/esm/kysely.js +1 -1
  193. package/dist/esm/operation-node/add-index-node.js +1 -1
  194. package/dist/esm/operation-node/alter-column-node.d.ts +1 -1
  195. package/dist/esm/operation-node/case-node.d.ts +1 -1
  196. package/dist/esm/operation-node/cast-node.d.ts +13 -0
  197. package/dist/esm/operation-node/cast-node.js +17 -0
  198. package/dist/esm/operation-node/column-definition-node.d.ts +2 -0
  199. package/dist/esm/operation-node/data-type-node.d.ts +5 -1
  200. package/dist/esm/operation-node/data-type-node.js +55 -0
  201. package/dist/esm/operation-node/delete-query-node.d.ts +6 -0
  202. package/dist/esm/operation-node/delete-query-node.js +12 -0
  203. package/dist/esm/operation-node/fetch-node.d.ts +15 -0
  204. package/dist/esm/operation-node/fetch-node.js +17 -0
  205. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -4
  206. package/dist/esm/operation-node/having-node.d.ts +1 -1
  207. package/dist/esm/operation-node/insert-query-node.d.ts +6 -1
  208. package/dist/esm/operation-node/insert-query-node.js +5 -0
  209. package/dist/esm/operation-node/join-node.d.ts +1 -1
  210. package/dist/esm/operation-node/matched-node.d.ts +13 -0
  211. package/dist/esm/operation-node/matched-node.js +17 -0
  212. package/dist/esm/operation-node/merge-query-node.d.ts +27 -0
  213. package/dist/esm/operation-node/merge-query-node.js +43 -0
  214. package/dist/esm/operation-node/on-node.d.ts +1 -1
  215. package/dist/esm/operation-node/operation-node-transformer.d.ts +12 -0
  216. package/dist/esm/operation-node/operation-node-transformer.js +62 -0
  217. package/dist/esm/operation-node/operation-node-visitor.d.ts +12 -0
  218. package/dist/esm/operation-node/operation-node-visitor.js +6 -0
  219. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  220. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  221. package/dist/esm/operation-node/operator-node.js +2 -0
  222. package/dist/esm/operation-node/output-node.d.ts +13 -0
  223. package/dist/esm/operation-node/output-node.js +24 -0
  224. package/dist/esm/operation-node/query-node.d.ts +17 -5
  225. package/dist/esm/operation-node/query-node.js +24 -1
  226. package/dist/esm/operation-node/select-query-node.d.ts +6 -0
  227. package/dist/esm/operation-node/select-query-node.js +12 -0
  228. package/dist/esm/operation-node/top-node.d.ts +14 -0
  229. package/dist/esm/operation-node/top-node.js +17 -0
  230. package/dist/esm/operation-node/update-query-node.d.ts +9 -1
  231. package/dist/esm/operation-node/update-query-node.js +11 -0
  232. package/dist/esm/operation-node/where-node.d.ts +1 -1
  233. package/dist/esm/parser/binary-operation-parser.d.ts +1 -1
  234. package/dist/esm/parser/binary-operation-parser.js +2 -2
  235. package/dist/esm/parser/data-type-parser.js +8 -4
  236. package/dist/esm/parser/fetch-parser.d.ts +2 -0
  237. package/dist/esm/parser/fetch-parser.js +15 -0
  238. package/dist/esm/parser/insert-values-parser.d.ts +3 -3
  239. package/dist/esm/parser/merge-parser.d.ts +9 -0
  240. package/dist/esm/parser/merge-parser.js +28 -0
  241. package/dist/esm/parser/returning-parser.d.ts +4 -3
  242. package/dist/esm/parser/table-parser.d.ts +4 -3
  243. package/dist/esm/parser/top-parser.d.ts +2 -0
  244. package/dist/esm/parser/top-parser.js +17 -0
  245. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +2 -2
  246. package/dist/esm/plugin/camel-case/camel-case-plugin.js +2 -2
  247. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +18 -0
  248. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +19 -11
  249. package/dist/esm/plugin/with-schema/with-schema-transformer.js +4 -0
  250. package/dist/esm/query-builder/delete-query-builder.d.ts +188 -5
  251. package/dist/esm/query-builder/delete-query-builder.js +139 -5
  252. package/dist/esm/query-builder/function-module.d.ts +5 -5
  253. package/dist/esm/query-builder/insert-query-builder.d.ts +166 -10
  254. package/dist/esm/query-builder/insert-query-builder.js +107 -10
  255. package/dist/esm/query-builder/merge-query-builder.d.ts +721 -0
  256. package/dist/esm/query-builder/merge-query-builder.js +541 -0
  257. package/dist/esm/query-builder/merge-result.d.ts +4 -0
  258. package/dist/esm/query-builder/merge-result.js +7 -0
  259. package/dist/esm/query-builder/on-conflict-builder.d.ts +2 -2
  260. package/dist/esm/query-builder/output-interface.d.ts +95 -0
  261. package/dist/esm/query-builder/output-interface.js +2 -0
  262. package/dist/esm/query-builder/returning-interface.d.ts +2 -0
  263. package/dist/esm/query-builder/select-query-builder.d.ts +177 -17
  264. package/dist/esm/query-builder/select-query-builder.js +20 -0
  265. package/dist/esm/query-builder/update-query-builder.d.ts +175 -10
  266. package/dist/esm/query-builder/update-query-builder.js +119 -7
  267. package/dist/esm/query-builder/update-result.d.ts +9 -0
  268. package/dist/esm/query-builder/update-result.js +9 -0
  269. package/dist/esm/query-builder/where-interface.d.ts +1 -1
  270. package/dist/esm/query-compiler/default-query-compiler.d.ts +12 -0
  271. package/dist/esm/query-compiler/default-query-compiler.js +118 -10
  272. package/dist/esm/query-compiler/query-compiler.d.ts +2 -1
  273. package/dist/esm/query-creator.d.ts +96 -5
  274. package/dist/esm/query-creator.js +64 -2
  275. package/dist/esm/raw-builder/sql.d.ts +5 -5
  276. package/dist/esm/schema/alter-column-builder.js +3 -0
  277. package/dist/esm/schema/alter-table-add-index-builder.d.ts +1 -1
  278. package/dist/esm/schema/alter-table-add-index-builder.js +8 -4
  279. package/dist/esm/schema/alter-table-builder.js +1 -2
  280. package/dist/esm/schema/column-definition-builder.d.ts +18 -1
  281. package/dist/esm/schema/column-definition-builder.js +22 -1
  282. package/dist/esm/util/infer-result.d.ts +2 -1
  283. package/dist/esm/util/object-utils.js +18 -5
  284. package/dist/esm/util/type-utils.d.ts +3 -2
  285. package/package.json +26 -24
@@ -0,0 +1,721 @@
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 { ReturningAllRow, ReturningRow } from '../parser/returning-parser.js';
11
+ import { TableExpression } from '../parser/table-parser.js';
12
+ import { ExtractUpdateTypeFromReferenceExpression, UpdateObject, UpdateObjectFactory } from '../parser/update-set-parser.js';
13
+ import { ValueExpression } from '../parser/value-parser.js';
14
+ import { CompiledQuery } from '../query-compiler/compiled-query.js';
15
+ import { QueryExecutor } from '../query-executor/query-executor.js';
16
+ import { Compilable } from '../util/compilable.js';
17
+ import { QueryId } from '../util/query-id.js';
18
+ import { ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
19
+ import { MergeResult } from './merge-result.js';
20
+ import { NoResultErrorConstructor } from './no-result-error.js';
21
+ import { OutputCallback, OutputExpression, OutputInterface, OutputPrefix, SelectExpressionFromOutputCallback, SelectExpressionFromOutputExpression } from './output-interface.js';
22
+ import { UpdateQueryBuilder } from './update-query-builder.js';
23
+ export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> implements OutputInterface<DB, TT, O> {
24
+ #private;
25
+ constructor(props: MergeQueryBuilderProps);
26
+ /**
27
+ * Changes a `merge into` query to an `merge top into` query.
28
+ *
29
+ * `top` clause is only supported by some dialects like MS SQL Server.
30
+ *
31
+ * ### Examples
32
+ *
33
+ * Affect 5 matched rows at most:
34
+ *
35
+ * ```ts
36
+ * await db.mergeInto('person')
37
+ * .top(5)
38
+ * .using('pet', 'person.id', 'pet.owner_id')
39
+ * .whenMatched()
40
+ * .thenDelete()
41
+ * .execute()
42
+ * ```
43
+ *
44
+ * The generated SQL (MS SQL Server):
45
+ *
46
+ * ```sql
47
+ * merge top(5) into "person"
48
+ * using "pet" on "person"."id" = "pet"."owner_id"
49
+ * when matched then
50
+ * delete
51
+ * ```
52
+ *
53
+ * Affect 50% of matched rows:
54
+ *
55
+ * ```ts
56
+ * await db.mergeInto('person')
57
+ * .top(50, 'percent')
58
+ * .using('pet', 'person.id', 'pet.owner_id')
59
+ * .whenMatched()
60
+ * .thenDelete()
61
+ * .execute()
62
+ * ```
63
+ *
64
+ * The generated SQL (MS SQL Server):
65
+ *
66
+ * ```sql
67
+ * merge top(50) percent into "person"
68
+ * using "pet" on "person"."id" = "pet"."owner_id"
69
+ * when matched then
70
+ * delete
71
+ * ```
72
+ */
73
+ top(expression: number | bigint, modifiers?: 'percent'): MergeQueryBuilder<DB, TT, O>;
74
+ /**
75
+ * Adds the `using` clause to the query.
76
+ *
77
+ * This method is similar to {@link SelectQueryBuilder.innerJoin}, so see the
78
+ * documentation for that method for more examples.
79
+ *
80
+ * ### Examples
81
+ *
82
+ * ```ts
83
+ * const result = await db.mergeInto('person')
84
+ * .using('pet', 'person.id', 'pet.owner_id')
85
+ * .whenMatched()
86
+ * .thenDelete()
87
+ * .execute()
88
+ * ```
89
+ *
90
+ * The generated SQL (PostgreSQL):
91
+ *
92
+ * ```sql
93
+ * merge into "person"
94
+ * using "pet" on "person"."id" = "pet"."owner_id"
95
+ * when matched then
96
+ * delete
97
+ * ```
98
+ */
99
+ 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>;
100
+ using<TE extends TableExpression<DB, TT>, FN extends JoinCallbackExpression<DB, TT, TE>>(sourceTable: TE, callback: FN): ExtractWheneableMergeQueryBuilder<DB, TT, TE, O>;
101
+ /**
102
+ * Allows you to return data from modified rows.
103
+ *
104
+ * On supported databases like MS SQL Server (MSSQL), this method can be chained
105
+ * to `insert`, `update`, `delete` and `merge` queries to return data.
106
+ *
107
+ * Also see the {@link outputAll} method.
108
+ *
109
+ * ### Examples
110
+ *
111
+ * Return one column:
112
+ *
113
+ * ```ts
114
+ * const { id } = await db
115
+ * .insertInto('person')
116
+ * .output('inserted.id')
117
+ * .values({
118
+ * first_name: 'Jennifer',
119
+ * last_name: 'Aniston'
120
+ * })
121
+ * .executeTakeFirst()
122
+ * ```
123
+ *
124
+ * Return multiple columns:
125
+ *
126
+ * ```ts
127
+ * const { id, first_name } = await db
128
+ * .updateTable('person')
129
+ * .set({ first_name: 'John', last_name: 'Doe' })
130
+ * .output([
131
+ * 'deleted.first_name as old_first_name',
132
+ * 'deleted.last_name as old_last_name',
133
+ * 'inserted.first_name as new_first_name',
134
+ * 'inserted.last_name as new_last_name',
135
+ * ])
136
+ * .where('created_at', '<', new Date())
137
+ * .executeTakeFirst()
138
+ * ```
139
+ *
140
+ * Return arbitrary expressions:
141
+ *
142
+ * ```ts
143
+ * import { sql } from 'kysely'
144
+ *
145
+ * const { id, full_name } = await db
146
+ * .deleteFrom('person')
147
+ * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
148
+ * .where('created_at', '<', new Date())
149
+ * .executeTakeFirst()
150
+ * ```
151
+ *
152
+ * Return the action performed on the row:
153
+ *
154
+ * ```ts
155
+ * await db
156
+ * .mergeInto('person')
157
+ * .using('pet', 'pet.owner_id', 'person.id')
158
+ * .whenMatched()
159
+ * .thenDelete()
160
+ * .whenNotMatched()
161
+ * .thenInsertValues({
162
+ * first_name: 'John',
163
+ * last_name: 'Doe',
164
+ * gender: 'male'
165
+ * })
166
+ * .output([
167
+ * 'inserted.id as inserted_id',
168
+ * 'deleted.id as deleted_id',
169
+ * ])
170
+ * ```
171
+ */
172
+ output<OE extends OutputExpression<DB, TT>>(selections: readonly OE[]): MergeQueryBuilder<DB, TT, ReturningRow<DB, TT, O, SelectExpressionFromOutputExpression<OE>>>;
173
+ output<CB extends OutputCallback<DB, TT>>(callback: CB): MergeQueryBuilder<DB, TT, ReturningRow<DB, TT, O, SelectExpressionFromOutputCallback<CB>>>;
174
+ output<OE extends OutputExpression<DB, TT>>(selection: OE): MergeQueryBuilder<DB, TT, ReturningRow<DB, TT, O, SelectExpressionFromOutputExpression<OE>>>;
175
+ /**
176
+ * Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
177
+ * that support `output` such as MS SQL Server (MSSQL).
178
+ *
179
+ * Also see the {@link output} method.
180
+ */
181
+ outputAll(table: OutputPrefix): MergeQueryBuilder<DB, TT, ReturningAllRow<DB, TT, O>>;
182
+ }
183
+ export interface MergeQueryBuilderProps {
184
+ readonly queryId: QueryId;
185
+ readonly queryNode: MergeQueryNode;
186
+ readonly executor: QueryExecutor;
187
+ }
188
+ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST extends keyof DB, O> implements Compilable<O>, OutputInterface<DB, TT, O>, OperationNodeSource {
189
+ #private;
190
+ constructor(props: MergeQueryBuilderProps);
191
+ /**
192
+ * See {@link MergeQueryBuilder.top}.
193
+ */
194
+ top(expression: number | bigint, modifiers?: 'percent'): WheneableMergeQueryBuilder<DB, TT, ST, O>;
195
+ /**
196
+ * Adds a simple `when matched` clause to the query.
197
+ *
198
+ * For a `when matched` clause with an `and` condition, see {@link whenMatchedAnd}.
199
+ *
200
+ * For a simple `when not matched` clause, see {@link whenNotMatched}.
201
+ *
202
+ * For a `when not matched` clause with an `and` condition, see {@link whenNotMatchedAnd}.
203
+ *
204
+ * ### Examples
205
+ *
206
+ * ```ts
207
+ * const result = await db.mergeInto('person')
208
+ * .using('pet', 'person.id', 'pet.owner_id')
209
+ * .whenMatched()
210
+ * .thenDelete()
211
+ * .execute()
212
+ * ```
213
+ *
214
+ * The generated SQL (PostgreSQL):
215
+ *
216
+ * ```sql
217
+ * merge into "person"
218
+ * using "pet" on "person"."id" = "pet"."owner_id"
219
+ * when matched then
220
+ * delete
221
+ * ```
222
+ */
223
+ whenMatched(): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT | ST, O>;
224
+ /**
225
+ * Adds the `when matched` clause to the query with an `and` condition.
226
+ *
227
+ * This method is similar to {@link SelectQueryBuilder.where}, so see the documentation
228
+ * for that method for more examples.
229
+ *
230
+ * For a simple `when matched` clause (without an `and` condition) see {@link whenMatched}.
231
+ *
232
+ * ### Examples
233
+ *
234
+ * ```ts
235
+ * const result = await db.mergeInto('person')
236
+ * .using('pet', 'person.id', 'pet.owner_id')
237
+ * .whenMatchedAnd('person.first_name', '=', 'John')
238
+ * .thenDelete()
239
+ * .execute()
240
+ * ```
241
+ *
242
+ * The generated SQL (PostgreSQL):
243
+ *
244
+ * ```sql
245
+ * merge into "person"
246
+ * using "pet" on "person"."id" = "pet"."owner_id"
247
+ * when matched and "person"."first_name" = $1 then
248
+ * delete
249
+ * ```
250
+ */
251
+ 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>;
252
+ whenMatchedAnd<E extends ExpressionOrFactory<DB, TT | ST, SqlBool>>(expression: E): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT | ST, O>;
253
+ /**
254
+ * Adds the `when matched` clause to the query with an `and` condition. But unlike
255
+ * {@link whenMatchedAnd}, this method accepts a column reference as the 3rd argument.
256
+ *
257
+ * This method is similar to {@link SelectQueryBuilder.whereRef}, so see the documentation
258
+ * for that method for more examples.
259
+ */
260
+ 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>;
261
+ /**
262
+ * Adds a simple `when not matched` clause to the query.
263
+ *
264
+ * For a `when not matched` clause with an `and` condition, see {@link whenNotMatchedAnd}.
265
+ *
266
+ * For a simple `when matched` clause, see {@link whenMatched}.
267
+ *
268
+ * For a `when matched` clause with an `and` condition, see {@link whenMatchedAnd}.
269
+ *
270
+ * ### Examples
271
+ *
272
+ * ```ts
273
+ * const result = await db.mergeInto('person')
274
+ * .using('pet', 'person.id', 'pet.owner_id')
275
+ * .whenNotMatched()
276
+ * .thenInsertValues({
277
+ * first_name: 'John',
278
+ * last_name: 'Doe',
279
+ * })
280
+ * .execute()
281
+ * ```
282
+ *
283
+ * The generated SQL (PostgreSQL):
284
+ *
285
+ * ```sql
286
+ * merge into "person"
287
+ * using "pet" on "person"."id" = "pet"."owner_id"
288
+ * when not matched then
289
+ * insert ("first_name", "last_name") values ($1, $2)
290
+ * ```
291
+ */
292
+ whenNotMatched(): NotMatchedThenableMergeQueryBuilder<DB, TT, ST, O>;
293
+ /**
294
+ * Adds the `when not matched` clause to the query with an `and` condition.
295
+ *
296
+ * This method is similar to {@link SelectQueryBuilder.where}, so see the documentation
297
+ * for that method for more examples.
298
+ *
299
+ * For a simple `when not matched` clause (without an `and` condition) see {@link whenNotMatched}.
300
+ *
301
+ * Unlike {@link whenMatchedAnd}, you cannot reference columns from the table merged into.
302
+ *
303
+ * ### Examples
304
+ *
305
+ * ```ts
306
+ * const result = await db.mergeInto('person')
307
+ * .using('pet', 'person.id', 'pet.owner_id')
308
+ * .whenNotMatchedAnd('pet.name', '=', 'Lucky')
309
+ * .thenInsertValues({
310
+ * first_name: 'John',
311
+ * last_name: 'Doe',
312
+ * })
313
+ * .execute()
314
+ * ```
315
+ *
316
+ * The generated SQL (PostgreSQL):
317
+ *
318
+ * ```sql
319
+ * merge into "person"
320
+ * using "pet" on "person"."id" = "pet"."owner_id"
321
+ * when not matched and "pet"."name" = $1 then
322
+ * insert ("first_name", "last_name") values ($2, $3)
323
+ * ```
324
+ */
325
+ whenNotMatchedAnd<RE extends ReferenceExpression<DB, ST>, VE extends OperandValueExpressionOrList<DB, ST, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): NotMatchedThenableMergeQueryBuilder<DB, TT, ST, O>;
326
+ whenNotMatchedAnd<E extends ExpressionOrFactory<DB, ST, SqlBool>>(expression: E): NotMatchedThenableMergeQueryBuilder<DB, TT, ST, O>;
327
+ /**
328
+ * Adds the `when not matched` clause to the query with an `and` condition. But unlike
329
+ * {@link whenNotMatchedAnd}, this method accepts a column reference as the 3rd argument.
330
+ *
331
+ * Unlike {@link whenMatchedAndRef}, you cannot reference columns from the target table.
332
+ *
333
+ * This method is similar to {@link SelectQueryBuilder.whereRef}, so see the documentation
334
+ * for that method for more examples.
335
+ */
336
+ whenNotMatchedAndRef<LRE extends ReferenceExpression<DB, ST>, RRE extends ReferenceExpression<DB, ST>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): NotMatchedThenableMergeQueryBuilder<DB, TT, ST, O>;
337
+ /**
338
+ * Adds a simple `when not matched by source` clause to the query.
339
+ *
340
+ * Supported in MS SQL Server.
341
+ *
342
+ * Similar to {@link whenNotMatched}, but returns a {@link MatchedThenableMergeQueryBuilder}.
343
+ */
344
+ whenNotMatchedBySource(): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT, O>;
345
+ /**
346
+ * Adds the `when not matched by source` clause to the query with an `and` condition.
347
+ *
348
+ * Supported in MS SQL Server.
349
+ *
350
+ * Similar to {@link whenNotMatchedAnd}, but returns a {@link MatchedThenableMergeQueryBuilder}.
351
+ */
352
+ whenNotMatchedBySourceAnd<RE extends ReferenceExpression<DB, TT>, VE extends OperandValueExpressionOrList<DB, TT, RE>>(lhs: RE, op: ComparisonOperatorExpression, rhs: VE): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT, O>;
353
+ whenNotMatchedBySourceAnd<E extends ExpressionOrFactory<DB, TT, SqlBool>>(expression: E): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT, O>;
354
+ /**
355
+ * Adds the `when not matched by source` clause to the query with an `and` condition.
356
+ *
357
+ * Similar to {@link whenNotMatchedAndRef}, but you can reference columns from
358
+ * the target table, and not from source table and returns a {@link MatchedThenableMergeQueryBuilder}.
359
+ */
360
+ whenNotMatchedBySourceAndRef<LRE extends ReferenceExpression<DB, TT>, RRE extends ReferenceExpression<DB, TT>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT, O>;
361
+ /**
362
+ * Allows you to return data from modified rows.
363
+ *
364
+ * On supported databases like MS SQL Server (MSSQL), this method can be chained
365
+ * to `insert`, `update`, `delete` and `merge` queries to return data.
366
+ *
367
+ * Also see the {@link outputAll} method.
368
+ *
369
+ * ### Examples
370
+ *
371
+ * Return one column:
372
+ *
373
+ * ```ts
374
+ * const { id } = await db
375
+ * .insertInto('person')
376
+ * .output('inserted.id')
377
+ * .values({
378
+ * first_name: 'Jennifer',
379
+ * last_name: 'Aniston'
380
+ * })
381
+ * .executeTakeFirst()
382
+ * ```
383
+ *
384
+ * Return multiple columns:
385
+ *
386
+ * ```ts
387
+ * const { id, first_name } = await db
388
+ * .updateTable('person')
389
+ * .set({ first_name: 'John', last_name: 'Doe' })
390
+ * .output([
391
+ * 'deleted.first_name as old_first_name',
392
+ * 'deleted.last_name as old_last_name',
393
+ * 'inserted.first_name as new_first_name',
394
+ * 'inserted.last_name as new_last_name',
395
+ * ])
396
+ * .where('created_at', '<', new Date())
397
+ * .executeTakeFirst()
398
+ * ```
399
+ *
400
+ * Return arbitrary expressions:
401
+ *
402
+ * ```ts
403
+ * import { sql } from 'kysely'
404
+ *
405
+ * const { id, full_name } = await db
406
+ * .deleteFrom('person')
407
+ * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
408
+ * .where('created_at', '<', new Date())
409
+ * .executeTakeFirst()
410
+ * ```
411
+ *
412
+ * Return the action performed on the row:
413
+ *
414
+ * ```ts
415
+ * await db
416
+ * .mergeInto('person')
417
+ * .using('pet', 'pet.owner_id', 'person.id')
418
+ * .whenMatched()
419
+ * .thenDelete()
420
+ * .whenNotMatched()
421
+ * .thenInsertValues({
422
+ * first_name: 'John',
423
+ * last_name: 'Doe',
424
+ * gender: 'male'
425
+ * })
426
+ * .output([
427
+ * 'inserted.id as inserted_id',
428
+ * 'deleted.id as deleted_id',
429
+ * ])
430
+ * ```
431
+ */
432
+ output<OE extends OutputExpression<DB, TT>>(selections: readonly OE[]): WheneableMergeQueryBuilder<DB, TT, ST, ReturningRow<DB, TT, O, SelectExpressionFromOutputExpression<OE>>>;
433
+ output<CB extends OutputCallback<DB, TT>>(callback: CB): WheneableMergeQueryBuilder<DB, TT, ST, ReturningRow<DB, TT, O, SelectExpressionFromOutputCallback<CB>>>;
434
+ output<OE extends OutputExpression<DB, TT>>(selection: OE): WheneableMergeQueryBuilder<DB, TT, ST, ReturningRow<DB, TT, O, SelectExpressionFromOutputExpression<OE>>>;
435
+ /**
436
+ * Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
437
+ * that support `output` such as MS SQL Server (MSSQL).
438
+ *
439
+ * Also see the {@link output} method.
440
+ */
441
+ outputAll(table: OutputPrefix): WheneableMergeQueryBuilder<DB, TT, ST, ReturningAllRow<DB, TT, O>>;
442
+ /**
443
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
444
+ * what the provided function returns.
445
+ *
446
+ * If you want to conditionally call a method on `this`, see
447
+ * the {@link $if} method.
448
+ *
449
+ * ### Examples
450
+ *
451
+ * The next example uses a helper function `log` to log a query:
452
+ *
453
+ * ```ts
454
+ * function log<T extends Compilable>(qb: T): T {
455
+ * console.log(qb.compile())
456
+ * return qb
457
+ * }
458
+ *
459
+ * db.updateTable('person')
460
+ * .set(values)
461
+ * .$call(log)
462
+ * .execute()
463
+ * ```
464
+ */
465
+ $call<T>(func: (qb: this) => T): T;
466
+ /**
467
+ * Call `func(this)` if `condition` is true.
468
+ *
469
+ * This method is especially handy with optional selects. Any `returning` or `returningAll`
470
+ * method calls add columns as optional fields to the output type when called inside
471
+ * the `func` callback. This is because we can't know if those selections were actually
472
+ * made before running the code.
473
+ *
474
+ * You can also call any other methods inside the callback.
475
+ *
476
+ * ### Examples
477
+ *
478
+ * ```ts
479
+ * async function updatePerson(id: number, updates: UpdateablePerson, returnLastName: boolean) {
480
+ * return await db
481
+ * .updateTable('person')
482
+ * .set(updates)
483
+ * .where('id', '=', id)
484
+ * .returning(['id', 'first_name'])
485
+ * .$if(returnLastName, (qb) => qb.returning('last_name'))
486
+ * .executeTakeFirstOrThrow()
487
+ * }
488
+ * ```
489
+ *
490
+ * Any selections added inside the `if` callback will be added as optional fields to the
491
+ * output type since we can't know if the selections were actually made before running
492
+ * the code. In the example above the return type of the `updatePerson` function is:
493
+ *
494
+ * ```ts
495
+ * {
496
+ * id: number
497
+ * first_name: string
498
+ * last_name?: string
499
+ * }
500
+ * ```
501
+ */
502
+ $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>>;
503
+ toOperationNode(): MergeQueryNode;
504
+ compile(): CompiledQuery<O>;
505
+ /**
506
+ * Executes the query and returns an array of rows.
507
+ *
508
+ * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
509
+ */
510
+ execute(): Promise<SimplifyResult<O>[]>;
511
+ /**
512
+ * Executes the query and returns the first result or undefined if
513
+ * the query returned no result.
514
+ */
515
+ executeTakeFirst(): Promise<SimplifySingleResult<O>>;
516
+ /**
517
+ * Executes the query and returns the first result or throws if
518
+ * the query returned no result.
519
+ *
520
+ * By default an instance of {@link NoResultError} is thrown, but you can
521
+ * provide a custom error class, or callback as the only argument to throw a different
522
+ * error.
523
+ */
524
+ executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor | ((node: QueryNode) => Error)): Promise<SimplifyResult<O>>;
525
+ }
526
+ export declare class MatchedThenableMergeQueryBuilder<DB, TT extends keyof DB, ST extends keyof DB, UT extends TT | ST, O> {
527
+ #private;
528
+ constructor(props: MergeQueryBuilderProps);
529
+ /**
530
+ * Performs the `delete` action.
531
+ *
532
+ * To perform the `do nothing` action, see {@link thenDoNothing}.
533
+ *
534
+ * To perform the `update` action, see {@link thenUpdate} or {@link thenUpdateSet}.
535
+ *
536
+ * ### Examples
537
+ *
538
+ * ```ts
539
+ * const result = await db.mergeInto('person')
540
+ * .using('pet', 'person.id', 'pet.owner_id')
541
+ * .whenMatched()
542
+ * .thenDelete()
543
+ * .execute()
544
+ * ```
545
+ *
546
+ * The generated SQL (PostgreSQL):
547
+ *
548
+ * ```sql
549
+ * merge into "person"
550
+ * using "pet" on "person"."id" = "pet"."owner_id"
551
+ * when matched then
552
+ * delete
553
+ * ```
554
+ */
555
+ thenDelete(): WheneableMergeQueryBuilder<DB, TT, ST, O>;
556
+ /**
557
+ * Performs the `do nothing` action.
558
+ *
559
+ * This is supported in PostgreSQL.
560
+ *
561
+ * To perform the `delete` action, see {@link thenDelete}.
562
+ *
563
+ * To perform the `update` action, see {@link thenUpdate} or {@link thenUpdateSet}.
564
+ *
565
+ * ### Examples
566
+ *
567
+ * ```ts
568
+ * const result = await db.mergeInto('person')
569
+ * .using('pet', 'person.id', 'pet.owner_id')
570
+ * .whenMatched()
571
+ * .thenDoNothing()
572
+ * .execute()
573
+ * ```
574
+ *
575
+ * The generated SQL (PostgreSQL):
576
+ *
577
+ * ```sql
578
+ * merge into "person"
579
+ * using "pet" on "person"."id" = "pet"."owner_id"
580
+ * when matched then
581
+ * do nothing
582
+ * ```
583
+ */
584
+ thenDoNothing(): WheneableMergeQueryBuilder<DB, TT, ST, O>;
585
+ /**
586
+ * Perform an `update` operation with a full-fledged {@link UpdateQueryBuilder}.
587
+ * This is handy when multiple `set` invocations are needed.
588
+ *
589
+ * For a shorthand version of this method, see {@link thenUpdateSet}.
590
+ *
591
+ * To perform the `delete` action, see {@link thenDelete}.
592
+ *
593
+ * To perform the `do nothing` action, see {@link thenDoNothing}.
594
+ *
595
+ * ### Examples
596
+ *
597
+ * ```ts
598
+ * import { sql } from 'kysely'
599
+ *
600
+ * const result = await db.mergeInto('person')
601
+ * .using('pet', 'person.id', 'pet.owner_id')
602
+ * .whenMatched()
603
+ * .thenUpdate((ub) => ub
604
+ * .set(sql`metadata['has_pets']`, 'Y')
605
+ * .set({
606
+ * updated_at: Date.now(),
607
+ * })
608
+ * )
609
+ * .execute()
610
+ * ```
611
+ *
612
+ * The generated SQL (PostgreSQL):
613
+ *
614
+ * ```sql
615
+ * merge into "person"
616
+ * using "pet" on "person"."id" = "pet"."owner_id"
617
+ * when matched then
618
+ * update set metadata['has_pets'] = $1, "updated_at" = $2
619
+ * ```
620
+ */
621
+ thenUpdate<QB extends UpdateQueryBuilder<DB, TT, UT, never>>(set: (ub: QB) => QB): WheneableMergeQueryBuilder<DB, TT, ST, O>;
622
+ /**
623
+ * Performs an `update set` action, similar to {@link UpdateQueryBuilder.set}.
624
+ *
625
+ * For a full-fledged update query builder, see {@link thenUpdate}.
626
+ *
627
+ * To perform the `delete` action, see {@link thenDelete}.
628
+ *
629
+ * To perform the `do nothing` action, see {@link thenDoNothing}.
630
+ *
631
+ * ### Examples
632
+ *
633
+ * ```ts
634
+ * const result = await db.mergeInto('person')
635
+ * .using('pet', 'person.id', 'pet.owner_id')
636
+ * .whenMatched()
637
+ * .thenUpdateSet({
638
+ * middle_name: 'dog owner',
639
+ * })
640
+ * .execute()
641
+ * ```
642
+ *
643
+ * The generate SQL (PostgreSQL):
644
+ *
645
+ * ```sql
646
+ * merge into "person"
647
+ * using "pet" on "person"."id" = "pet"."owner_id"
648
+ * when matched then
649
+ * update set "middle_name" = $1
650
+ * ```
651
+ */
652
+ thenUpdateSet<UO extends UpdateObject<DB, UT, TT>>(update: UO): WheneableMergeQueryBuilder<DB, TT, ST, O>;
653
+ thenUpdateSet<U extends UpdateObjectFactory<DB, UT, TT>>(update: U): WheneableMergeQueryBuilder<DB, TT, ST, O>;
654
+ thenUpdateSet<RE extends ReferenceExpression<DB, TT>, VE extends ValueExpression<DB, UT, ExtractUpdateTypeFromReferenceExpression<DB, TT, RE>>>(key: RE, value: VE): WheneableMergeQueryBuilder<DB, TT, ST, O>;
655
+ }
656
+ export declare class NotMatchedThenableMergeQueryBuilder<DB, TT extends keyof DB, ST extends keyof DB, O> {
657
+ #private;
658
+ constructor(props: MergeQueryBuilderProps);
659
+ /**
660
+ * Performs the `do nothing` action.
661
+ *
662
+ * This is supported in PostgreSQL.
663
+ *
664
+ * To perform the `insert` action, see {@link thenInsertValues}.
665
+ *
666
+ * ### Examples
667
+ *
668
+ * ```ts
669
+ * const result = await db.mergeInto('person')
670
+ * .using('pet', 'person.id', 'pet.owner_id')
671
+ * .whenNotMatched()
672
+ * .thenDoNothing()
673
+ * .execute()
674
+ * ```
675
+ *
676
+ * The generated SQL (PostgreSQL):
677
+ *
678
+ * ```sql
679
+ * merge into "person"
680
+ * using "pet" on "person"."id" = "pet"."owner_id"
681
+ * when not matched then
682
+ * do nothing
683
+ * ```
684
+ */
685
+ thenDoNothing(): WheneableMergeQueryBuilder<DB, TT, ST, O>;
686
+ /**
687
+ * Performs the `insert (...) values` action.
688
+ *
689
+ * This method is similar to {@link InsertQueryBuilder.values}, so see the documentation
690
+ * for that method for more examples.
691
+ *
692
+ * To perform the `do nothing` action, see {@link thenDoNothing}.
693
+ *
694
+ * ### Examples
695
+ *
696
+ * ```ts
697
+ * const result = await db.mergeInto('person')
698
+ * .using('pet', 'person.id', 'pet.owner_id')
699
+ * .whenNotMatched()
700
+ * .thenInsertValues({
701
+ * first_name: 'John',
702
+ * last_name: 'Doe',
703
+ * })
704
+ * .execute()
705
+ * ```
706
+ *
707
+ * The generated SQL (PostgreSQL):
708
+ *
709
+ * ```sql
710
+ * merge into "person"
711
+ * using "pet" on "person"."id" = "pet"."owner_id"
712
+ * when not matched then
713
+ * insert ("first_name", "last_name") values ($1, $2)
714
+ * ```
715
+ */
716
+ thenInsertValues<I extends InsertObjectOrList<DB, TT>>(insert: I): WheneableMergeQueryBuilder<DB, TT, ST, O>;
717
+ thenInsertValues<IO extends InsertObjectOrListFactory<DB, TT, ST>>(insert: IO): WheneableMergeQueryBuilder<DB, TT, ST, O>;
718
+ }
719
+ 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;
720
+ 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>;
721
+ export {};