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,547 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.NotMatchedThenableMergeQueryBuilder = exports.MatchedThenableMergeQueryBuilder = exports.WheneableMergeQueryBuilder = exports.MergeQueryBuilder = void 0;
4
+ const insert_query_node_js_1 = require("../operation-node/insert-query-node.js");
5
+ const merge_query_node_js_1 = require("../operation-node/merge-query-node.js");
6
+ const query_node_js_1 = require("../operation-node/query-node.js");
7
+ const update_query_node_js_1 = require("../operation-node/update-query-node.js");
8
+ const insert_values_parser_js_1 = require("../parser/insert-values-parser.js");
9
+ const join_parser_js_1 = require("../parser/join-parser.js");
10
+ const merge_parser_js_1 = require("../parser/merge-parser.js");
11
+ const select_parser_js_1 = require("../parser/select-parser.js");
12
+ const top_parser_js_1 = require("../parser/top-parser.js");
13
+ const noop_query_executor_js_1 = require("../query-executor/noop-query-executor.js");
14
+ const object_utils_js_1 = require("../util/object-utils.js");
15
+ const prevent_await_js_1 = require("../util/prevent-await.js");
16
+ const merge_result_js_1 = require("./merge-result.js");
17
+ const no_result_error_js_1 = require("./no-result-error.js");
18
+ const update_query_builder_js_1 = require("./update-query-builder.js");
19
+ class MergeQueryBuilder {
20
+ #props;
21
+ constructor(props) {
22
+ this.#props = (0, object_utils_js_1.freeze)(props);
23
+ }
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, modifiers) {
72
+ return new MergeQueryBuilder({
73
+ ...this.#props,
74
+ queryNode: query_node_js_1.QueryNode.cloneWithTop(this.#props.queryNode, (0, top_parser_js_1.parseTop)(expression, modifiers)),
75
+ });
76
+ }
77
+ using(...args) {
78
+ return new WheneableMergeQueryBuilder({
79
+ ...this.#props,
80
+ queryNode: merge_query_node_js_1.MergeQueryNode.cloneWithUsing(this.#props.queryNode, (0, join_parser_js_1.parseJoin)('Using', args)),
81
+ });
82
+ }
83
+ output(args) {
84
+ return new MergeQueryBuilder({
85
+ ...this.#props,
86
+ queryNode: query_node_js_1.QueryNode.cloneWithOutput(this.#props.queryNode, (0, select_parser_js_1.parseSelectArg)(args)),
87
+ });
88
+ }
89
+ outputAll(table) {
90
+ return new MergeQueryBuilder({
91
+ ...this.#props,
92
+ queryNode: query_node_js_1.QueryNode.cloneWithOutput(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)(table)),
93
+ });
94
+ }
95
+ }
96
+ exports.MergeQueryBuilder = MergeQueryBuilder;
97
+ (0, prevent_await_js_1.preventAwait)(MergeQueryBuilder, "don't await MergeQueryBuilder instances directly. To execute the query you need to call `execute` when available.");
98
+ class WheneableMergeQueryBuilder {
99
+ #props;
100
+ constructor(props) {
101
+ this.#props = (0, object_utils_js_1.freeze)(props);
102
+ }
103
+ /**
104
+ * See {@link MergeQueryBuilder.top}.
105
+ */
106
+ top(expression, modifiers) {
107
+ return new WheneableMergeQueryBuilder({
108
+ ...this.#props,
109
+ queryNode: query_node_js_1.QueryNode.cloneWithTop(this.#props.queryNode, (0, top_parser_js_1.parseTop)(expression, modifiers)),
110
+ });
111
+ }
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() {
141
+ return this.#whenMatched([]);
142
+ }
143
+ whenMatchedAnd(...args) {
144
+ return this.#whenMatched(args);
145
+ }
146
+ /**
147
+ * Adds the `when matched` clause to the query with an `and` condition. But unlike
148
+ * {@link whenMatchedAnd}, this method accepts a column reference as the 3rd argument.
149
+ *
150
+ * This method is similar to {@link SelectQueryBuilder.whereRef}, so see the documentation
151
+ * for that method for more examples.
152
+ */
153
+ whenMatchedAndRef(lhs, op, rhs) {
154
+ return this.#whenMatched([lhs, op, rhs], true);
155
+ }
156
+ #whenMatched(args, refRight) {
157
+ return new MatchedThenableMergeQueryBuilder({
158
+ ...this.#props,
159
+ queryNode: merge_query_node_js_1.MergeQueryNode.cloneWithWhen(this.#props.queryNode, (0, merge_parser_js_1.parseMergeWhen)({ isMatched: true }, args, refRight)),
160
+ });
161
+ }
162
+ /**
163
+ * Adds a simple `when not matched` clause to the query.
164
+ *
165
+ * For a `when not matched` clause with an `and` condition, see {@link whenNotMatchedAnd}.
166
+ *
167
+ * For a simple `when matched` clause, see {@link whenMatched}.
168
+ *
169
+ * For a `when matched` clause with an `and` condition, see {@link whenMatchedAnd}.
170
+ *
171
+ * ### Examples
172
+ *
173
+ * ```ts
174
+ * const result = await db.mergeInto('person')
175
+ * .using('pet', 'person.id', 'pet.owner_id')
176
+ * .whenNotMatched()
177
+ * .thenInsertValues({
178
+ * first_name: 'John',
179
+ * last_name: 'Doe',
180
+ * })
181
+ * .execute()
182
+ * ```
183
+ *
184
+ * The generated SQL (PostgreSQL):
185
+ *
186
+ * ```sql
187
+ * merge into "person"
188
+ * using "pet" on "person"."id" = "pet"."owner_id"
189
+ * when not matched then
190
+ * insert ("first_name", "last_name") values ($1, $2)
191
+ * ```
192
+ */
193
+ whenNotMatched() {
194
+ return this.#whenNotMatched([]);
195
+ }
196
+ whenNotMatchedAnd(...args) {
197
+ return this.#whenNotMatched(args);
198
+ }
199
+ /**
200
+ * Adds the `when not matched` clause to the query with an `and` condition. But unlike
201
+ * {@link whenNotMatchedAnd}, this method accepts a column reference as the 3rd argument.
202
+ *
203
+ * Unlike {@link whenMatchedAndRef}, you cannot reference columns from the target table.
204
+ *
205
+ * This method is similar to {@link SelectQueryBuilder.whereRef}, so see the documentation
206
+ * for that method for more examples.
207
+ */
208
+ whenNotMatchedAndRef(lhs, op, rhs) {
209
+ return this.#whenNotMatched([lhs, op, rhs], true);
210
+ }
211
+ /**
212
+ * Adds a simple `when not matched by source` clause to the query.
213
+ *
214
+ * Supported in MS SQL Server.
215
+ *
216
+ * Similar to {@link whenNotMatched}, but returns a {@link MatchedThenableMergeQueryBuilder}.
217
+ */
218
+ whenNotMatchedBySource() {
219
+ return this.#whenNotMatched([], false, true);
220
+ }
221
+ whenNotMatchedBySourceAnd(...args) {
222
+ return this.#whenNotMatched(args, false, true);
223
+ }
224
+ /**
225
+ * Adds the `when not matched by source` clause to the query with an `and` condition.
226
+ *
227
+ * Similar to {@link whenNotMatchedAndRef}, but you can reference columns from
228
+ * the target table, and not from source table and returns a {@link MatchedThenableMergeQueryBuilder}.
229
+ */
230
+ whenNotMatchedBySourceAndRef(lhs, op, rhs) {
231
+ return this.#whenNotMatched([lhs, op, rhs], true, true);
232
+ }
233
+ output(args) {
234
+ return new WheneableMergeQueryBuilder({
235
+ ...this.#props,
236
+ queryNode: query_node_js_1.QueryNode.cloneWithOutput(this.#props.queryNode, (0, select_parser_js_1.parseSelectArg)(args)),
237
+ });
238
+ }
239
+ outputAll(table) {
240
+ return new WheneableMergeQueryBuilder({
241
+ ...this.#props,
242
+ queryNode: query_node_js_1.QueryNode.cloneWithOutput(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)(table)),
243
+ });
244
+ }
245
+ #whenNotMatched(args, refRight = false, bySource = false) {
246
+ const props = {
247
+ ...this.#props,
248
+ queryNode: merge_query_node_js_1.MergeQueryNode.cloneWithWhen(this.#props.queryNode, (0, merge_parser_js_1.parseMergeWhen)({ isMatched: false, bySource }, args, refRight)),
249
+ };
250
+ const Builder = bySource
251
+ ? MatchedThenableMergeQueryBuilder
252
+ : NotMatchedThenableMergeQueryBuilder;
253
+ return new Builder(props);
254
+ }
255
+ /**
256
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
257
+ * what the provided function returns.
258
+ *
259
+ * If you want to conditionally call a method on `this`, see
260
+ * the {@link $if} method.
261
+ *
262
+ * ### Examples
263
+ *
264
+ * The next example uses a helper function `log` to log a query:
265
+ *
266
+ * ```ts
267
+ * function log<T extends Compilable>(qb: T): T {
268
+ * console.log(qb.compile())
269
+ * return qb
270
+ * }
271
+ *
272
+ * db.updateTable('person')
273
+ * .set(values)
274
+ * .$call(log)
275
+ * .execute()
276
+ * ```
277
+ */
278
+ $call(func) {
279
+ return func(this);
280
+ }
281
+ /**
282
+ * Call `func(this)` if `condition` is true.
283
+ *
284
+ * This method is especially handy with optional selects. Any `returning` or `returningAll`
285
+ * method calls add columns as optional fields to the output type when called inside
286
+ * the `func` callback. This is because we can't know if those selections were actually
287
+ * made before running the code.
288
+ *
289
+ * You can also call any other methods inside the callback.
290
+ *
291
+ * ### Examples
292
+ *
293
+ * ```ts
294
+ * async function updatePerson(id: number, updates: UpdateablePerson, returnLastName: boolean) {
295
+ * return await db
296
+ * .updateTable('person')
297
+ * .set(updates)
298
+ * .where('id', '=', id)
299
+ * .returning(['id', 'first_name'])
300
+ * .$if(returnLastName, (qb) => qb.returning('last_name'))
301
+ * .executeTakeFirstOrThrow()
302
+ * }
303
+ * ```
304
+ *
305
+ * Any selections added inside the `if` callback will be added as optional fields to the
306
+ * output type since we can't know if the selections were actually made before running
307
+ * the code. In the example above the return type of the `updatePerson` function is:
308
+ *
309
+ * ```ts
310
+ * {
311
+ * id: number
312
+ * first_name: string
313
+ * last_name?: string
314
+ * }
315
+ * ```
316
+ */
317
+ $if(condition, func) {
318
+ if (condition) {
319
+ return func(this);
320
+ }
321
+ return new WheneableMergeQueryBuilder({
322
+ ...this.#props,
323
+ });
324
+ }
325
+ toOperationNode() {
326
+ return this.#props.executor.transformQuery(this.#props.queryNode, this.#props.queryId);
327
+ }
328
+ compile() {
329
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
330
+ }
331
+ /**
332
+ * Executes the query and returns an array of rows.
333
+ *
334
+ * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
335
+ */
336
+ async execute() {
337
+ const compiledQuery = this.compile();
338
+ const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
339
+ if (compiledQuery.query.output &&
340
+ this.#props.executor.adapter.supportsOutput) {
341
+ return result.rows;
342
+ }
343
+ return [new merge_result_js_1.MergeResult(result.numAffectedRows)];
344
+ }
345
+ /**
346
+ * Executes the query and returns the first result or undefined if
347
+ * the query returned no result.
348
+ */
349
+ async executeTakeFirst() {
350
+ const [result] = await this.execute();
351
+ return result;
352
+ }
353
+ /**
354
+ * Executes the query and returns the first result or throws if
355
+ * the query returned no result.
356
+ *
357
+ * By default an instance of {@link NoResultError} is thrown, but you can
358
+ * provide a custom error class, or callback as the only argument to throw a different
359
+ * error.
360
+ */
361
+ async executeTakeFirstOrThrow(errorConstructor = no_result_error_js_1.NoResultError) {
362
+ const result = await this.executeTakeFirst();
363
+ if (result === undefined) {
364
+ const error = (0, no_result_error_js_1.isNoResultErrorConstructor)(errorConstructor)
365
+ ? new errorConstructor(this.toOperationNode())
366
+ : errorConstructor(this.toOperationNode());
367
+ throw error;
368
+ }
369
+ return result;
370
+ }
371
+ }
372
+ exports.WheneableMergeQueryBuilder = WheneableMergeQueryBuilder;
373
+ (0, prevent_await_js_1.preventAwait)(WheneableMergeQueryBuilder, "don't await WheneableMergeQueryBuilder instances directly. To execute the query you need to call `execute`.");
374
+ class MatchedThenableMergeQueryBuilder {
375
+ #props;
376
+ constructor(props) {
377
+ this.#props = (0, object_utils_js_1.freeze)(props);
378
+ }
379
+ /**
380
+ * Performs the `delete` action.
381
+ *
382
+ * To perform the `do nothing` action, see {@link thenDoNothing}.
383
+ *
384
+ * To perform the `update` action, see {@link thenUpdate} or {@link thenUpdateSet}.
385
+ *
386
+ * ### Examples
387
+ *
388
+ * ```ts
389
+ * const result = await db.mergeInto('person')
390
+ * .using('pet', 'person.id', 'pet.owner_id')
391
+ * .whenMatched()
392
+ * .thenDelete()
393
+ * .execute()
394
+ * ```
395
+ *
396
+ * The generated SQL (PostgreSQL):
397
+ *
398
+ * ```sql
399
+ * merge into "person"
400
+ * using "pet" on "person"."id" = "pet"."owner_id"
401
+ * when matched then
402
+ * delete
403
+ * ```
404
+ */
405
+ thenDelete() {
406
+ return new WheneableMergeQueryBuilder({
407
+ ...this.#props,
408
+ queryNode: merge_query_node_js_1.MergeQueryNode.cloneWithThen(this.#props.queryNode, (0, merge_parser_js_1.parseMergeThen)('delete')),
409
+ });
410
+ }
411
+ /**
412
+ * Performs the `do nothing` action.
413
+ *
414
+ * This is supported in PostgreSQL.
415
+ *
416
+ * To perform the `delete` action, see {@link thenDelete}.
417
+ *
418
+ * To perform the `update` action, see {@link thenUpdate} or {@link thenUpdateSet}.
419
+ *
420
+ * ### Examples
421
+ *
422
+ * ```ts
423
+ * const result = await db.mergeInto('person')
424
+ * .using('pet', 'person.id', 'pet.owner_id')
425
+ * .whenMatched()
426
+ * .thenDoNothing()
427
+ * .execute()
428
+ * ```
429
+ *
430
+ * The generated SQL (PostgreSQL):
431
+ *
432
+ * ```sql
433
+ * merge into "person"
434
+ * using "pet" on "person"."id" = "pet"."owner_id"
435
+ * when matched then
436
+ * do nothing
437
+ * ```
438
+ */
439
+ thenDoNothing() {
440
+ return new WheneableMergeQueryBuilder({
441
+ ...this.#props,
442
+ queryNode: merge_query_node_js_1.MergeQueryNode.cloneWithThen(this.#props.queryNode, (0, merge_parser_js_1.parseMergeThen)('do nothing')),
443
+ });
444
+ }
445
+ /**
446
+ * Perform an `update` operation with a full-fledged {@link UpdateQueryBuilder}.
447
+ * This is handy when multiple `set` invocations are needed.
448
+ *
449
+ * For a shorthand version of this method, see {@link thenUpdateSet}.
450
+ *
451
+ * To perform the `delete` action, see {@link thenDelete}.
452
+ *
453
+ * To perform the `do nothing` action, see {@link thenDoNothing}.
454
+ *
455
+ * ### Examples
456
+ *
457
+ * ```ts
458
+ * import { sql } from 'kysely'
459
+ *
460
+ * const result = await db.mergeInto('person')
461
+ * .using('pet', 'person.id', 'pet.owner_id')
462
+ * .whenMatched()
463
+ * .thenUpdate((ub) => ub
464
+ * .set(sql`metadata['has_pets']`, 'Y')
465
+ * .set({
466
+ * updated_at: Date.now(),
467
+ * })
468
+ * )
469
+ * .execute()
470
+ * ```
471
+ *
472
+ * The generated SQL (PostgreSQL):
473
+ *
474
+ * ```sql
475
+ * merge into "person"
476
+ * using "pet" on "person"."id" = "pet"."owner_id"
477
+ * when matched then
478
+ * update set metadata['has_pets'] = $1, "updated_at" = $2
479
+ * ```
480
+ */
481
+ thenUpdate(set) {
482
+ return new WheneableMergeQueryBuilder({
483
+ ...this.#props,
484
+ queryNode: merge_query_node_js_1.MergeQueryNode.cloneWithThen(this.#props.queryNode, (0, merge_parser_js_1.parseMergeThen)(set(new update_query_builder_js_1.UpdateQueryBuilder({
485
+ queryId: this.#props.queryId,
486
+ executor: noop_query_executor_js_1.NOOP_QUERY_EXECUTOR,
487
+ queryNode: update_query_node_js_1.UpdateQueryNode.createWithoutTable(),
488
+ })))),
489
+ });
490
+ }
491
+ thenUpdateSet(...args) {
492
+ // @ts-ignore not sure how to type this so it won't complain about set(...args).
493
+ return this.thenUpdate((ub) => ub.set(...args));
494
+ }
495
+ }
496
+ exports.MatchedThenableMergeQueryBuilder = MatchedThenableMergeQueryBuilder;
497
+ (0, prevent_await_js_1.preventAwait)(MatchedThenableMergeQueryBuilder, "don't await MatchedThenableMergeQueryBuilder instances directly. To execute the query you need to call `execute` when available.");
498
+ class NotMatchedThenableMergeQueryBuilder {
499
+ #props;
500
+ constructor(props) {
501
+ this.#props = (0, object_utils_js_1.freeze)(props);
502
+ }
503
+ /**
504
+ * Performs the `do nothing` action.
505
+ *
506
+ * This is supported in PostgreSQL.
507
+ *
508
+ * To perform the `insert` action, see {@link thenInsertValues}.
509
+ *
510
+ * ### Examples
511
+ *
512
+ * ```ts
513
+ * const result = await db.mergeInto('person')
514
+ * .using('pet', 'person.id', 'pet.owner_id')
515
+ * .whenNotMatched()
516
+ * .thenDoNothing()
517
+ * .execute()
518
+ * ```
519
+ *
520
+ * The generated SQL (PostgreSQL):
521
+ *
522
+ * ```sql
523
+ * merge into "person"
524
+ * using "pet" on "person"."id" = "pet"."owner_id"
525
+ * when not matched then
526
+ * do nothing
527
+ * ```
528
+ */
529
+ thenDoNothing() {
530
+ return new WheneableMergeQueryBuilder({
531
+ ...this.#props,
532
+ queryNode: merge_query_node_js_1.MergeQueryNode.cloneWithThen(this.#props.queryNode, (0, merge_parser_js_1.parseMergeThen)('do nothing')),
533
+ });
534
+ }
535
+ thenInsertValues(insert) {
536
+ const [columns, values] = (0, insert_values_parser_js_1.parseInsertExpression)(insert);
537
+ return new WheneableMergeQueryBuilder({
538
+ ...this.#props,
539
+ queryNode: merge_query_node_js_1.MergeQueryNode.cloneWithThen(this.#props.queryNode, (0, merge_parser_js_1.parseMergeThen)(insert_query_node_js_1.InsertQueryNode.cloneWith(insert_query_node_js_1.InsertQueryNode.createWithoutInto(), {
540
+ columns,
541
+ values,
542
+ }))),
543
+ });
544
+ }
545
+ }
546
+ exports.NotMatchedThenableMergeQueryBuilder = NotMatchedThenableMergeQueryBuilder;
547
+ (0, prevent_await_js_1.preventAwait)(NotMatchedThenableMergeQueryBuilder, "don't await NotMatchedThenableMergeQueryBuilder instances directly. To execute the query you need to call `execute` when available.");
@@ -0,0 +1,4 @@
1
+ export declare class MergeResult {
2
+ readonly numChangedRows: bigint | undefined;
3
+ constructor(numChangedRows: bigint | undefined);
4
+ }
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MergeResult = void 0;
4
+ class MergeResult {
5
+ numChangedRows;
6
+ constructor(numChangedRows) {
7
+ this.numChangedRows = numChangedRows;
8
+ }
9
+ }
10
+ exports.MergeResult = MergeResult;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isNoResultErrorConstructor = exports.NoResultError = void 0;
3
+ exports.NoResultError = void 0;
4
+ exports.isNoResultErrorConstructor = isNoResultErrorConstructor;
4
5
  class NoResultError extends Error {
5
6
  /**
6
7
  * The operation node tree of the query that was executed.
@@ -15,4 +16,3 @@ exports.NoResultError = NoResultError;
15
16
  function isNoResultErrorConstructor(fn) {
16
17
  return Object.prototype.hasOwnProperty.call(fn, 'prototype');
17
18
  }
18
- exports.isNoResultErrorConstructor = isNoResultErrorConstructor;
@@ -303,7 +303,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
303
303
  * .selectFrom('person')
304
304
  * .selectAll()
305
305
  * .where(
306
- * sql`coalesce(first_name, last_name)`,
306
+ * sql<string>`coalesce(first_name, last_name)`,
307
307
  * 'like',
308
308
  * '%' + name + '%',
309
309
  * )
@@ -767,7 +767,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
767
767
  * .selectFrom('person')
768
768
  * .selectAll()
769
769
  * .where(
770
- * sql`coalesce(first_name, last_name)`,
770
+ * sql<string>`coalesce(first_name, last_name)`,
771
771
  * 'like',
772
772
  * '%' + name + '%',
773
773
  * )
@@ -0,0 +1,95 @@
1
+ import { ExpressionBuilder } from '../expression/expression-builder.js';
2
+ import { AliasedExpressionOrFactory } from '../parser/expression-parser.js';
3
+ import { ReturningAllRow, ReturningRow } from '../parser/returning-parser.js';
4
+ import { AnyAliasedColumnWithTable, AnyColumnWithTable } from '../util/type-utils.js';
5
+ export interface OutputInterface<DB, TB extends keyof DB, O, OP extends OutputPrefix = OutputPrefix> {
6
+ /**
7
+ * Allows you to return data from modified rows.
8
+ *
9
+ * On supported databases like MS SQL Server (MSSQL), this method can be chained
10
+ * to `insert`, `update`, `delete` and `merge` queries to return data.
11
+ *
12
+ * Also see the {@link outputAll} method.
13
+ *
14
+ * ### Examples
15
+ *
16
+ * Return one column:
17
+ *
18
+ * ```ts
19
+ * const { id } = await db
20
+ * .insertInto('person')
21
+ * .output('inserted.id')
22
+ * .values({
23
+ * first_name: 'Jennifer',
24
+ * last_name: 'Aniston'
25
+ * })
26
+ * .executeTakeFirst()
27
+ * ```
28
+ *
29
+ * Return multiple columns:
30
+ *
31
+ * ```ts
32
+ * const { id, first_name } = await db
33
+ * .updateTable('person')
34
+ * .set({ first_name: 'John', last_name: 'Doe' })
35
+ * .output([
36
+ * 'deleted.first_name as old_first_name',
37
+ * 'deleted.last_name as old_last_name',
38
+ * 'inserted.first_name as new_first_name',
39
+ * 'inserted.last_name as new_last_name',
40
+ * ])
41
+ * .where('created_at', '<', new Date())
42
+ * .executeTakeFirst()
43
+ * ```
44
+ *
45
+ * Return arbitrary expressions:
46
+ *
47
+ * ```ts
48
+ * import { sql } from 'kysely'
49
+ *
50
+ * const { id, full_name } = await db
51
+ * .deleteFrom('person')
52
+ * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name')
53
+ * .where('created_at', '<', new Date())
54
+ * .executeTakeFirst()
55
+ * ```
56
+ *
57
+ * Return the action performed on the row:
58
+ *
59
+ * ```ts
60
+ * await db
61
+ * .mergeInto('person')
62
+ * .using('pet', 'pet.owner_id', 'person.id')
63
+ * .whenMatched()
64
+ * .thenDelete()
65
+ * .whenNotMatched()
66
+ * .thenInsertValues({
67
+ * first_name: 'John',
68
+ * last_name: 'Doe',
69
+ * gender: 'male'
70
+ * })
71
+ * .output([
72
+ * 'inserted.id as inserted_id',
73
+ * 'deleted.id as deleted_id',
74
+ * ])
75
+ * ```
76
+ */
77
+ output<OE extends OutputExpression<DB, TB, OP>>(selections: ReadonlyArray<OE>): OutputInterface<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>, OP>;
78
+ output<CB extends OutputCallback<DB, TB, OP>>(callback: CB): OutputInterface<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputCallback<CB>>, OP>;
79
+ output<OE extends OutputExpression<DB, TB, OP>>(selection: OE): OutputInterface<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>, OP>;
80
+ /**
81
+ * Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
82
+ * that support `output` such as MS SQL Server (MSSQL).
83
+ *
84
+ * Also see the {@link output} method.
85
+ */
86
+ outputAll(table: OP): OutputInterface<DB, TB, ReturningAllRow<DB, TB, O>, OP>;
87
+ }
88
+ export type OutputPrefix = 'deleted' | 'inserted';
89
+ export type OutputDatabase<DB, TB extends keyof DB, OP extends OutputPrefix = OutputPrefix> = {
90
+ [K in OP]: DB[TB];
91
+ };
92
+ export type OutputExpression<DB, TB extends keyof DB, OP extends OutputPrefix = OutputPrefix, ODB = OutputDatabase<DB, TB, OP>, OTB extends keyof ODB = keyof ODB> = AnyAliasedColumnWithTable<ODB, OTB> | AnyColumnWithTable<ODB, OTB> | AliasedExpressionOrFactory<ODB, OTB>;
93
+ export type OutputCallback<DB, TB extends keyof DB, OP extends OutputPrefix = OutputPrefix> = (eb: ExpressionBuilder<OutputDatabase<DB, TB, OP>, OP>) => ReadonlyArray<OutputExpression<DB, TB, OP>>;
94
+ export type SelectExpressionFromOutputExpression<OE> = OE extends `${OutputPrefix}.${infer C}` ? C : OE;
95
+ export type SelectExpressionFromOutputCallback<CB> = CB extends (eb: ExpressionBuilder<any, any>) => ReadonlyArray<infer OE> ? SelectExpressionFromOutputExpression<OE> : never;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });