kysely 0.27.3 → 0.27.5

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 (301) hide show
  1. package/.renovaterc.json +3 -0
  2. package/CONTRIBUTING.md +2 -2
  3. package/README.md +7 -7
  4. package/deno.check.d.ts +86 -0
  5. package/deno.check.json +21 -0
  6. package/dist/cjs/dialect/dialect-adapter-base.d.ts +13 -3
  7. package/dist/cjs/dialect/dialect-adapter-base.js +4 -1
  8. package/dist/cjs/dialect/dialect-adapter.d.ts +16 -2
  9. package/dist/cjs/dialect/mssql/mssql-adapter.d.ts +12 -7
  10. package/dist/cjs/dialect/mssql/mssql-adapter.js +2 -4
  11. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +83 -55
  12. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +1 -0
  13. package/dist/cjs/dialect/mssql/mssql-driver.js +114 -48
  14. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +11 -2
  15. package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  16. package/dist/cjs/dialect/mysql/mysql-driver.js +3 -0
  17. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +11 -2
  18. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  19. package/dist/cjs/dialect/postgres/postgres-driver.js +3 -0
  20. package/dist/cjs/dialect/postgres/postgres-introspector.js +5 -1
  21. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  22. package/dist/cjs/driver/database-connection.d.ts +3 -1
  23. package/dist/cjs/driver/dummy-driver.d.ts +13 -12
  24. package/dist/cjs/driver/dummy-driver.js +13 -12
  25. package/dist/cjs/dynamic/dynamic-reference-builder.js +2 -2
  26. package/dist/cjs/dynamic/dynamic.d.ts +7 -7
  27. package/dist/cjs/dynamic/dynamic.js +7 -7
  28. package/dist/cjs/expression/expression-builder.d.ts +153 -62
  29. package/dist/cjs/expression/expression-builder.js +2 -3
  30. package/dist/cjs/expression/expression-wrapper.d.ts +92 -23
  31. package/dist/cjs/expression/expression.d.ts +40 -5
  32. package/dist/cjs/expression/expression.js +2 -3
  33. package/dist/cjs/helpers/mssql.d.ts +74 -14
  34. package/dist/cjs/helpers/mssql.js +77 -18
  35. package/dist/cjs/helpers/mysql.d.ts +17 -13
  36. package/dist/cjs/helpers/mysql.js +20 -17
  37. package/dist/cjs/helpers/postgres.d.ts +11 -8
  38. package/dist/cjs/helpers/postgres.js +14 -12
  39. package/dist/cjs/helpers/sqlite.d.ts +41 -16
  40. package/dist/cjs/helpers/sqlite.js +44 -20
  41. package/dist/cjs/index.d.ts +28 -21
  42. package/dist/cjs/index.js +28 -21
  43. package/dist/cjs/kysely.d.ts +100 -42
  44. package/dist/cjs/kysely.js +63 -39
  45. package/dist/cjs/migration/file-migration-provider.d.ts +2 -2
  46. package/dist/cjs/migration/file-migration-provider.js +2 -2
  47. package/dist/cjs/migration/migrator.d.ts +82 -14
  48. package/dist/cjs/migration/migrator.js +82 -14
  49. package/dist/cjs/operation-node/aggregate-function-node.d.ts +4 -0
  50. package/dist/cjs/operation-node/aggregate-function-node.js +9 -0
  51. package/dist/cjs/operation-node/alter-column-node.d.ts +1 -1
  52. package/dist/cjs/operation-node/case-node.d.ts +1 -1
  53. package/dist/cjs/operation-node/column-definition-node.d.ts +1 -0
  54. package/dist/cjs/operation-node/data-type-node.d.ts +2 -2
  55. package/dist/cjs/operation-node/data-type-node.js +17 -3
  56. package/dist/cjs/operation-node/delete-query-node.d.ts +3 -0
  57. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -4
  58. package/dist/cjs/operation-node/having-node.d.ts +1 -1
  59. package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
  60. package/dist/cjs/operation-node/merge-query-node.d.ts +3 -0
  61. package/dist/cjs/operation-node/on-node.d.ts +1 -1
  62. package/dist/cjs/operation-node/operation-node-source.js +1 -2
  63. package/dist/cjs/operation-node/operation-node-transformer.d.ts +11 -3
  64. package/dist/cjs/operation-node/operation-node-transformer.js +26 -3
  65. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  66. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  67. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  68. package/dist/cjs/operation-node/operator-node.d.ts +3 -3
  69. package/dist/cjs/operation-node/operator-node.js +8 -6
  70. package/dist/cjs/operation-node/output-node.d.ts +13 -0
  71. package/dist/cjs/operation-node/output-node.js +26 -0
  72. package/dist/cjs/operation-node/query-node.d.ts +15 -6
  73. package/dist/cjs/operation-node/query-node.js +17 -0
  74. package/dist/cjs/operation-node/select-query-node.d.ts +1 -1
  75. package/dist/cjs/operation-node/select-query-node.js +6 -8
  76. package/dist/cjs/operation-node/update-query-node.d.ts +3 -0
  77. package/dist/cjs/operation-node/where-node.d.ts +1 -1
  78. package/dist/cjs/parser/binary-operation-parser.js +5 -6
  79. package/dist/cjs/parser/data-type-parser.js +1 -2
  80. package/dist/cjs/parser/default-value-parser.js +1 -2
  81. package/dist/cjs/parser/expression-parser.js +3 -4
  82. package/dist/cjs/parser/fetch-parser.js +1 -2
  83. package/dist/cjs/parser/group-by-parser.js +1 -2
  84. package/dist/cjs/parser/identifier-parser.js +1 -2
  85. package/dist/cjs/parser/insert-values-parser.js +1 -2
  86. package/dist/cjs/parser/join-parser.js +1 -2
  87. package/dist/cjs/parser/merge-parser.js +2 -3
  88. package/dist/cjs/parser/on-commit-action-parse.js +1 -2
  89. package/dist/cjs/parser/on-modify-action-parser.js +1 -2
  90. package/dist/cjs/parser/order-by-parser.js +3 -4
  91. package/dist/cjs/parser/parse-utils.js +4 -5
  92. package/dist/cjs/parser/partition-by-parser.js +1 -2
  93. package/dist/cjs/parser/reference-parser.js +8 -9
  94. package/dist/cjs/parser/returning-parser.d.ts +4 -3
  95. package/dist/cjs/parser/select-parser.js +2 -3
  96. package/dist/cjs/parser/set-operation-parser.js +1 -2
  97. package/dist/cjs/parser/table-parser.js +4 -5
  98. package/dist/cjs/parser/top-parser.js +1 -2
  99. package/dist/cjs/parser/unary-operation-parser.js +3 -4
  100. package/dist/cjs/parser/update-set-parser.js +2 -3
  101. package/dist/cjs/parser/value-parser.js +4 -5
  102. package/dist/cjs/parser/with-parser.js +1 -2
  103. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +54 -27
  104. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +26 -21
  105. package/dist/cjs/plugin/camel-case/camel-case.js +2 -3
  106. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  107. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  108. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  109. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  110. package/dist/cjs/plugin/kysely-plugin.d.ts +28 -6
  111. package/dist/cjs/plugin/noop-plugin.d.ts +28 -6
  112. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +80 -9
  113. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +53 -14
  114. package/dist/cjs/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  115. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +43 -1
  116. package/dist/cjs/query-builder/aggregate-function-builder.js +30 -0
  117. package/dist/cjs/query-builder/delete-query-builder.d.ts +219 -43
  118. package/dist/cjs/query-builder/delete-query-builder.js +95 -31
  119. package/dist/cjs/query-builder/function-module.d.ts +40 -93
  120. package/dist/cjs/query-builder/function-module.js +1 -2
  121. package/dist/cjs/query-builder/insert-query-builder.d.ts +326 -67
  122. package/dist/cjs/query-builder/insert-query-builder.js +212 -61
  123. package/dist/cjs/query-builder/insert-result.d.ts +10 -5
  124. package/dist/cjs/query-builder/insert-result.js +10 -5
  125. package/dist/cjs/query-builder/json-path-builder.d.ts +33 -9
  126. package/dist/cjs/query-builder/json-path-builder.js +8 -5
  127. package/dist/cjs/query-builder/merge-query-builder.d.ts +312 -10
  128. package/dist/cjs/query-builder/merge-query-builder.js +98 -7
  129. package/dist/cjs/query-builder/no-result-error.js +2 -2
  130. package/dist/cjs/query-builder/on-conflict-builder.d.ts +53 -20
  131. package/dist/cjs/query-builder/on-conflict-builder.js +41 -16
  132. package/dist/cjs/query-builder/output-interface.d.ts +138 -0
  133. package/dist/cjs/query-builder/output-interface.js +2 -0
  134. package/dist/cjs/query-builder/returning-interface.d.ts +7 -5
  135. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +8 -0
  136. package/dist/cjs/query-builder/select-query-builder.d.ts +370 -73
  137. package/dist/cjs/query-builder/select-query-builder.js +14 -9
  138. package/dist/cjs/query-builder/update-query-builder.d.ts +225 -31
  139. package/dist/cjs/query-builder/update-query-builder.js +96 -17
  140. package/dist/cjs/query-builder/update-result.d.ts +9 -0
  141. package/dist/cjs/query-builder/update-result.js +9 -0
  142. package/dist/cjs/query-builder/where-interface.d.ts +6 -2
  143. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
  144. package/dist/cjs/query-compiler/default-query-compiler.js +45 -1
  145. package/dist/cjs/query-creator.d.ts +122 -21
  146. package/dist/cjs/query-creator.js +56 -3
  147. package/dist/cjs/raw-builder/raw-builder.d.ts +29 -7
  148. package/dist/cjs/raw-builder/raw-builder.js +1 -2
  149. package/dist/cjs/raw-builder/sql.d.ts +31 -12
  150. package/dist/cjs/schema/alter-column-builder.d.ts +17 -3
  151. package/dist/cjs/schema/alter-column-builder.js +20 -3
  152. package/dist/cjs/schema/alter-table-add-index-builder.d.ts +44 -10
  153. package/dist/cjs/schema/alter-table-add-index-builder.js +27 -10
  154. package/dist/cjs/schema/alter-table-builder.js +1 -2
  155. package/dist/cjs/schema/column-definition-builder.d.ts +286 -24
  156. package/dist/cjs/schema/column-definition-builder.js +288 -24
  157. package/dist/cjs/schema/create-table-builder.d.ts +86 -33
  158. package/dist/cjs/schema/create-table-builder.js +86 -33
  159. package/dist/cjs/util/assert.js +2 -3
  160. package/dist/cjs/util/column-type.d.ts +5 -9
  161. package/dist/cjs/util/compilable.js +1 -2
  162. package/dist/cjs/util/json-object-args.js +1 -2
  163. package/dist/cjs/util/log-once.js +1 -2
  164. package/dist/cjs/util/object-utils.js +38 -26
  165. package/dist/cjs/util/performance-now.js +1 -2
  166. package/dist/cjs/util/prevent-await.js +1 -2
  167. package/dist/cjs/util/query-id.js +1 -2
  168. package/dist/cjs/util/random-string.js +1 -2
  169. package/dist/cjs/util/require-all-props.d.ts +4 -2
  170. package/dist/cjs/util/require-all-props.js +5 -4
  171. package/dist/cjs/util/stack-trace-utils.js +1 -2
  172. package/dist/cjs/util/streamable.d.ts +1 -1
  173. package/dist/cjs/util/type-utils.d.ts +4 -2
  174. package/dist/esm/dialect/dialect-adapter-base.d.ts +13 -3
  175. package/dist/esm/dialect/dialect-adapter-base.js +4 -1
  176. package/dist/esm/dialect/dialect-adapter.d.ts +16 -2
  177. package/dist/esm/dialect/mssql/mssql-adapter.d.ts +12 -7
  178. package/dist/esm/dialect/mssql/mssql-adapter.js +2 -4
  179. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +83 -55
  180. package/dist/esm/dialect/mssql/mssql-driver.d.ts +1 -0
  181. package/dist/esm/dialect/mssql/mssql-driver.js +114 -48
  182. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +11 -2
  183. package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +4 -0
  184. package/dist/esm/dialect/mysql/mysql-driver.js +3 -0
  185. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +11 -2
  186. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +10 -3
  187. package/dist/esm/dialect/postgres/postgres-driver.js +3 -0
  188. package/dist/esm/dialect/postgres/postgres-introspector.js +5 -1
  189. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +11 -2
  190. package/dist/esm/driver/database-connection.d.ts +3 -1
  191. package/dist/esm/driver/dummy-driver.d.ts +13 -12
  192. package/dist/esm/driver/dummy-driver.js +13 -12
  193. package/dist/esm/dynamic/dynamic.d.ts +7 -7
  194. package/dist/esm/dynamic/dynamic.js +7 -7
  195. package/dist/esm/expression/expression-builder.d.ts +153 -62
  196. package/dist/esm/expression/expression-wrapper.d.ts +92 -23
  197. package/dist/esm/expression/expression.d.ts +40 -5
  198. package/dist/esm/helpers/mssql.d.ts +74 -14
  199. package/dist/esm/helpers/mssql.js +74 -14
  200. package/dist/esm/helpers/mysql.d.ts +17 -13
  201. package/dist/esm/helpers/mysql.js +17 -13
  202. package/dist/esm/helpers/postgres.d.ts +11 -8
  203. package/dist/esm/helpers/postgres.js +11 -8
  204. package/dist/esm/helpers/sqlite.d.ts +41 -16
  205. package/dist/esm/helpers/sqlite.js +41 -16
  206. package/dist/esm/index.d.ts +28 -21
  207. package/dist/esm/index.js +28 -21
  208. package/dist/esm/kysely.d.ts +100 -42
  209. package/dist/esm/kysely.js +61 -37
  210. package/dist/esm/migration/file-migration-provider.d.ts +2 -2
  211. package/dist/esm/migration/file-migration-provider.js +2 -2
  212. package/dist/esm/migration/migrator.d.ts +82 -14
  213. package/dist/esm/migration/migrator.js +82 -14
  214. package/dist/esm/operation-node/aggregate-function-node.d.ts +4 -0
  215. package/dist/esm/operation-node/aggregate-function-node.js +9 -0
  216. package/dist/esm/operation-node/alter-column-node.d.ts +1 -1
  217. package/dist/esm/operation-node/case-node.d.ts +1 -1
  218. package/dist/esm/operation-node/column-definition-node.d.ts +1 -0
  219. package/dist/esm/operation-node/data-type-node.d.ts +2 -2
  220. package/dist/esm/operation-node/data-type-node.js +15 -1
  221. package/dist/esm/operation-node/delete-query-node.d.ts +3 -0
  222. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -4
  223. package/dist/esm/operation-node/having-node.d.ts +1 -1
  224. package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
  225. package/dist/esm/operation-node/merge-query-node.d.ts +3 -0
  226. package/dist/esm/operation-node/on-node.d.ts +1 -1
  227. package/dist/esm/operation-node/operation-node-transformer.d.ts +11 -3
  228. package/dist/esm/operation-node/operation-node-transformer.js +26 -3
  229. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  230. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  231. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  232. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  233. package/dist/esm/operation-node/operator-node.js +2 -0
  234. package/dist/esm/operation-node/output-node.d.ts +13 -0
  235. package/dist/esm/operation-node/output-node.js +24 -0
  236. package/dist/esm/operation-node/query-node.d.ts +15 -6
  237. package/dist/esm/operation-node/query-node.js +17 -0
  238. package/dist/esm/operation-node/select-query-node.d.ts +1 -1
  239. package/dist/esm/operation-node/select-query-node.js +6 -8
  240. package/dist/esm/operation-node/update-query-node.d.ts +3 -0
  241. package/dist/esm/operation-node/where-node.d.ts +1 -1
  242. package/dist/esm/parser/returning-parser.d.ts +4 -3
  243. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +54 -27
  244. package/dist/esm/plugin/camel-case/camel-case-plugin.js +26 -21
  245. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +29 -7
  246. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  247. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +2 -2
  248. package/dist/esm/plugin/immediate-value/immediate-value-plugin.d.ts +28 -6
  249. package/dist/esm/plugin/kysely-plugin.d.ts +28 -6
  250. package/dist/esm/plugin/noop-plugin.d.ts +28 -6
  251. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +80 -9
  252. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +53 -14
  253. package/dist/esm/plugin/with-schema/with-schema-plugin.d.ts +28 -6
  254. package/dist/esm/query-builder/aggregate-function-builder.d.ts +43 -1
  255. package/dist/esm/query-builder/aggregate-function-builder.js +30 -0
  256. package/dist/esm/query-builder/delete-query-builder.d.ts +219 -43
  257. package/dist/esm/query-builder/delete-query-builder.js +95 -31
  258. package/dist/esm/query-builder/function-module.d.ts +40 -93
  259. package/dist/esm/query-builder/insert-query-builder.d.ts +326 -67
  260. package/dist/esm/query-builder/insert-query-builder.js +212 -61
  261. package/dist/esm/query-builder/insert-result.d.ts +10 -5
  262. package/dist/esm/query-builder/insert-result.js +10 -5
  263. package/dist/esm/query-builder/json-path-builder.d.ts +33 -9
  264. package/dist/esm/query-builder/json-path-builder.js +8 -5
  265. package/dist/esm/query-builder/merge-query-builder.d.ts +312 -10
  266. package/dist/esm/query-builder/merge-query-builder.js +98 -7
  267. package/dist/esm/query-builder/on-conflict-builder.d.ts +53 -20
  268. package/dist/esm/query-builder/on-conflict-builder.js +41 -16
  269. package/dist/esm/query-builder/output-interface.d.ts +138 -0
  270. package/dist/esm/query-builder/output-interface.js +2 -0
  271. package/dist/esm/query-builder/returning-interface.d.ts +7 -5
  272. package/dist/esm/query-builder/select-query-builder-expression.d.ts +8 -0
  273. package/dist/esm/query-builder/select-query-builder.d.ts +370 -73
  274. package/dist/esm/query-builder/select-query-builder.js +13 -7
  275. package/dist/esm/query-builder/update-query-builder.d.ts +225 -31
  276. package/dist/esm/query-builder/update-query-builder.js +96 -17
  277. package/dist/esm/query-builder/update-result.d.ts +9 -0
  278. package/dist/esm/query-builder/update-result.js +9 -0
  279. package/dist/esm/query-builder/where-interface.d.ts +6 -2
  280. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
  281. package/dist/esm/query-compiler/default-query-compiler.js +45 -1
  282. package/dist/esm/query-creator.d.ts +122 -21
  283. package/dist/esm/query-creator.js +56 -3
  284. package/dist/esm/raw-builder/raw-builder.d.ts +29 -7
  285. package/dist/esm/raw-builder/sql.d.ts +31 -12
  286. package/dist/esm/schema/alter-column-builder.d.ts +17 -3
  287. package/dist/esm/schema/alter-column-builder.js +20 -3
  288. package/dist/esm/schema/alter-table-add-index-builder.d.ts +44 -10
  289. package/dist/esm/schema/alter-table-add-index-builder.js +27 -10
  290. package/dist/esm/schema/alter-table-builder.js +1 -2
  291. package/dist/esm/schema/column-definition-builder.d.ts +286 -24
  292. package/dist/esm/schema/column-definition-builder.js +288 -24
  293. package/dist/esm/schema/create-table-builder.d.ts +86 -33
  294. package/dist/esm/schema/create-table-builder.js +86 -33
  295. package/dist/esm/util/column-type.d.ts +5 -9
  296. package/dist/esm/util/object-utils.js +18 -5
  297. package/dist/esm/util/require-all-props.d.ts +4 -2
  298. package/dist/esm/util/require-all-props.js +4 -2
  299. package/dist/esm/util/streamable.d.ts +1 -1
  300. package/dist/esm/util/type-utils.d.ts +4 -2
  301. package/package.json +30 -24
@@ -6,6 +6,7 @@ import { UpdateQueryNode } from '../operation-node/update-query-node.js';
6
6
  import { parseInsertExpression, } from '../parser/insert-values-parser.js';
7
7
  import { parseJoin, } from '../parser/join-parser.js';
8
8
  import { parseMergeThen, parseMergeWhen } from '../parser/merge-parser.js';
9
+ import { parseSelectAll, parseSelectArg } from '../parser/select-parser.js';
9
10
  import { parseTop } from '../parser/top-parser.js';
10
11
  import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';
11
12
  import { freeze } from '../util/object-utils.js';
@@ -18,6 +19,35 @@ export class MergeQueryBuilder {
18
19
  constructor(props) {
19
20
  this.#props = freeze(props);
20
21
  }
22
+ /**
23
+ * This can be used to add any additional SQL to the end of the query.
24
+ *
25
+ * ### Examples
26
+ *
27
+ * ```ts
28
+ * import { sql } from 'kysely'
29
+ *
30
+ * await db
31
+ * .mergeInto('person')
32
+ * .using('pet', 'pet.owner_id', 'person.id')
33
+ * .whenMatched()
34
+ * .thenDelete()
35
+ * .modifyEnd(sql.raw('-- this is a comment'))
36
+ * .execute()
37
+ * ```
38
+ *
39
+ * The generated SQL (PostgreSQL):
40
+ *
41
+ * ```sql
42
+ * merge into "person" using "pet" on "pet"."owner_id" = "person"."id" when matched then delete -- this is a comment
43
+ * ```
44
+ */
45
+ modifyEnd(modifier) {
46
+ return new MergeQueryBuilder({
47
+ ...this.#props,
48
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, modifier.toOperationNode()),
49
+ });
50
+ }
21
51
  /**
22
52
  * Changes a `merge into` query to an `merge top into` query.
23
53
  *
@@ -77,6 +107,18 @@ export class MergeQueryBuilder {
77
107
  queryNode: MergeQueryNode.cloneWithUsing(this.#props.queryNode, parseJoin('Using', args)),
78
108
  });
79
109
  }
110
+ output(args) {
111
+ return new MergeQueryBuilder({
112
+ ...this.#props,
113
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectArg(args)),
114
+ });
115
+ }
116
+ outputAll(table) {
117
+ return new MergeQueryBuilder({
118
+ ...this.#props,
119
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectAll(table)),
120
+ });
121
+ }
80
122
  }
81
123
  preventAwait(MergeQueryBuilder, "don't await MergeQueryBuilder instances directly. To execute the query you need to call `execute` when available.");
82
124
  export class WheneableMergeQueryBuilder {
@@ -84,6 +126,35 @@ export class WheneableMergeQueryBuilder {
84
126
  constructor(props) {
85
127
  this.#props = freeze(props);
86
128
  }
129
+ /**
130
+ * This can be used to add any additional SQL to the end of the query.
131
+ *
132
+ * ### Examples
133
+ *
134
+ * ```ts
135
+ * import { sql } from 'kysely'
136
+ *
137
+ * await db
138
+ * .mergeInto('person')
139
+ * .using('pet', 'pet.owner_id', 'person.id')
140
+ * .whenMatched()
141
+ * .thenDelete()
142
+ * .modifyEnd(sql.raw('-- this is a comment'))
143
+ * .execute()
144
+ * ```
145
+ *
146
+ * The generated SQL (PostgreSQL):
147
+ *
148
+ * ```sql
149
+ * merge into "person" using "pet" on "pet"."owner_id" = "person"."id" when matched then delete -- this is a comment
150
+ * ```
151
+ */
152
+ modifyEnd(modifier) {
153
+ return new WheneableMergeQueryBuilder({
154
+ ...this.#props,
155
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, modifier.toOperationNode()),
156
+ });
157
+ }
87
158
  /**
88
159
  * See {@link MergeQueryBuilder.top}.
89
160
  */
@@ -214,6 +285,18 @@ export class WheneableMergeQueryBuilder {
214
285
  whenNotMatchedBySourceAndRef(lhs, op, rhs) {
215
286
  return this.#whenNotMatched([lhs, op, rhs], true, true);
216
287
  }
288
+ output(args) {
289
+ return new WheneableMergeQueryBuilder({
290
+ ...this.#props,
291
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectArg(args)),
292
+ });
293
+ }
294
+ outputAll(table) {
295
+ return new WheneableMergeQueryBuilder({
296
+ ...this.#props,
297
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectAll(table)),
298
+ });
299
+ }
217
300
  #whenNotMatched(args, refRight = false, bySource = false) {
218
301
  const props = {
219
302
  ...this.#props,
@@ -236,13 +319,15 @@ export class WheneableMergeQueryBuilder {
236
319
  * The next example uses a helper function `log` to log a query:
237
320
  *
238
321
  * ```ts
322
+ * import type { Compilable } from 'kysely'
323
+ *
239
324
  * function log<T extends Compilable>(qb: T): T {
240
325
  * console.log(qb.compile())
241
326
  * return qb
242
327
  * }
243
328
  *
244
- * db.updateTable('person')
245
- * .set(values)
329
+ * await db.updateTable('person')
330
+ * .set({ first_name: 'John' })
246
331
  * .$call(log)
247
332
  * .execute()
248
333
  * ```
@@ -263,7 +348,9 @@ export class WheneableMergeQueryBuilder {
263
348
  * ### Examples
264
349
  *
265
350
  * ```ts
266
- * async function updatePerson(id: number, updates: UpdateablePerson, returnLastName: boolean) {
351
+ * import type { PersonUpdate } from 'type-editor' // imaginary module
352
+ *
353
+ * async function updatePerson(id: number, updates: PersonUpdate, returnLastName: boolean) {
267
354
  * return await db
268
355
  * .updateTable('person')
269
356
  * .set(updates)
@@ -279,11 +366,11 @@ export class WheneableMergeQueryBuilder {
279
366
  * the code. In the example above the return type of the `updatePerson` function is:
280
367
  *
281
368
  * ```ts
282
- * {
369
+ * Promise<{
283
370
  * id: number
284
371
  * first_name: string
285
372
  * last_name?: string
286
- * }
373
+ * }>
287
374
  * ```
288
375
  */
289
376
  $if(condition, func) {
@@ -298,7 +385,7 @@ export class WheneableMergeQueryBuilder {
298
385
  return this.#props.executor.transformQuery(this.#props.queryNode, this.#props.queryId);
299
386
  }
300
387
  compile() {
301
- return this.#props.executor.compileQuery(this.#props.queryNode, this.#props.queryId);
388
+ return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
302
389
  }
303
390
  /**
304
391
  * Executes the query and returns an array of rows.
@@ -308,6 +395,10 @@ export class WheneableMergeQueryBuilder {
308
395
  async execute() {
309
396
  const compiledQuery = this.compile();
310
397
  const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
398
+ if (compiledQuery.query.output &&
399
+ this.#props.executor.adapter.supportsOutput) {
400
+ return result.rows;
401
+ }
311
402
  return [new MergeResult(result.numAffectedRows)];
312
403
  }
313
404
  /**
@@ -430,7 +521,7 @@ export class MatchedThenableMergeQueryBuilder {
430
521
  * .thenUpdate((ub) => ub
431
522
  * .set(sql`metadata['has_pets']`, 'Y')
432
523
  * .set({
433
- * updated_at: Date.now(),
524
+ * updated_at: new Date().toISOString(),
434
525
  * })
435
526
  * )
436
527
  * .execute()
@@ -73,6 +73,8 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
73
73
  * you can always use:
74
74
  *
75
75
  * ```ts
76
+ * import { sql } from 'kysely'
77
+ *
76
78
  * sql`your operator`
77
79
  * ```
78
80
  *
@@ -84,7 +86,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
84
86
  * const persons = await db
85
87
  * .selectFrom('person')
86
88
  * .selectAll()
87
- * .where('id', 'in', ['1', '2', '3'])
89
+ * .where('id', 'in', [1, 2, 3])
88
90
  * .execute()
89
91
  * ```
90
92
  *
@@ -303,7 +305,7 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
303
305
  * .selectFrom('person')
304
306
  * .selectAll()
305
307
  * .where(
306
- * sql`coalesce(first_name, last_name)`,
308
+ * sql<string>`coalesce(first_name, last_name)`,
307
309
  * 'like',
308
310
  * '%' + name + '%',
309
311
  * )
@@ -332,6 +334,8 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
332
334
  * import { sql } from 'kysely'
333
335
  * const { ref } = db.dynamic
334
336
  *
337
+ * const columnFromUserInput: string = 'id'
338
+ *
335
339
  * const persons = await db
336
340
  * .selectFrom('person')
337
341
  * .selectAll()
@@ -419,21 +423,25 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
419
423
  * ### Examples
420
424
  *
421
425
  * ```ts
426
+ * const id = 1
427
+ * const first_name = 'John'
428
+ *
422
429
  * await db
423
430
  * .insertInto('person')
424
- * .values({ first_name, pic })
431
+ * .values({ first_name, id })
425
432
  * .onConflict((oc) => oc
426
- * .column('pic')
433
+ * .column('id')
427
434
  * .doNothing()
428
435
  * )
436
+ * .execute()
429
437
  * ```
430
438
  *
431
439
  * The generated SQL (PostgreSQL):
432
440
  *
433
441
  * ```sql
434
- * insert into "person" ("first_name", "pic")
442
+ * insert into "person" ("first_name", "id")
435
443
  * values ($1, $2)
436
- * on conflict ("pic") do nothing
444
+ * on conflict ("id") do nothing
437
445
  * ```
438
446
  */
439
447
  doNothing(): OnConflictDoNothingBuilder<DB, TB>;
@@ -443,21 +451,25 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
443
451
  * ### Examples
444
452
  *
445
453
  * ```ts
454
+ * const id = 1
455
+ * const first_name = 'John'
456
+ *
446
457
  * await db
447
458
  * .insertInto('person')
448
- * .values({ first_name, pic })
459
+ * .values({ first_name, id })
449
460
  * .onConflict((oc) => oc
450
- * .column('pic')
461
+ * .column('id')
451
462
  * .doUpdateSet({ first_name })
452
463
  * )
464
+ * .execute()
453
465
  * ```
454
466
  *
455
467
  * The generated SQL (PostgreSQL):
456
468
  *
457
469
  * ```sql
458
- * insert into "person" ("first_name", "pic")
470
+ * insert into "person" ("first_name", "id")
459
471
  * values ($1, $2)
460
- * on conflict ("pic")
472
+ * on conflict ("id")
461
473
  * do update set "first_name" = $3
462
474
  * ```
463
475
  *
@@ -466,15 +478,32 @@ export declare class OnConflictBuilder<DB, TB extends keyof DB> implements Where
466
478
  * to create an upsert operation:
467
479
  *
468
480
  * ```ts
469
- * db.insertInto('person')
470
- * .values(person)
471
- * .onConflict((oc) => oc
472
- * .column('id')
473
- * .doUpdateSet((eb) => ({
474
- * first_name: eb.ref('excluded.first_name'),
475
- * last_name: eb.ref('excluded.last_name')
476
- * }))
481
+ * import type { NewPerson } from 'type-editor' // imaginary module
482
+ *
483
+ * async function upsertPerson(person: NewPerson): Promise<void> {
484
+ * await db.insertInto('person')
485
+ * .values(person)
486
+ * .onConflict((oc) => oc
487
+ * .column('id')
488
+ * .doUpdateSet((eb) => ({
489
+ * first_name: eb.ref('excluded.first_name'),
490
+ * last_name: eb.ref('excluded.last_name')
491
+ * })
492
+ * )
477
493
  * )
494
+ * .execute()
495
+ * }
496
+ * ```
497
+ *
498
+ * The generated SQL (PostgreSQL):
499
+ *
500
+ * ```sql
501
+ * insert into "person" ("first_name", "last_name")
502
+ * values ($1, $2)
503
+ * on conflict ("id")
504
+ * do update set
505
+ * "first_name" = excluded."first_name",
506
+ * "last_name" = excluded."last_name"
478
507
  * ```
479
508
  */
480
509
  doUpdateSet(update: UpdateObjectExpression<OnConflictDatabase<DB, TB>, OnConflictTables<TB>, OnConflictTables<TB>>): OnConflictUpdateBuilder<OnConflictDatabase<DB, TB>, OnConflictTables<TB>>;
@@ -537,6 +566,8 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
537
566
  * you can always use:
538
567
  *
539
568
  * ```ts
569
+ * import { sql } from 'kysely'
570
+ *
540
571
  * sql`your operator`
541
572
  * ```
542
573
  *
@@ -548,7 +579,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
548
579
  * const persons = await db
549
580
  * .selectFrom('person')
550
581
  * .selectAll()
551
- * .where('id', 'in', ['1', '2', '3'])
582
+ * .where('id', 'in', [1, 2, 3])
552
583
  * .execute()
553
584
  * ```
554
585
  *
@@ -767,7 +798,7 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
767
798
  * .selectFrom('person')
768
799
  * .selectAll()
769
800
  * .where(
770
- * sql`coalesce(first_name, last_name)`,
801
+ * sql<string>`coalesce(first_name, last_name)`,
771
802
  * 'like',
772
803
  * '%' + name + '%',
773
804
  * )
@@ -796,6 +827,8 @@ export declare class OnConflictUpdateBuilder<DB, TB extends keyof DB> implements
796
827
  * import { sql } from 'kysely'
797
828
  * const { ref } = db.dynamic
798
829
  *
830
+ * const columnFromUserInput: string = 'id'
831
+ *
799
832
  * const persons = await db
800
833
  * .selectFrom('person')
801
834
  * .selectAll()
@@ -99,21 +99,25 @@ export class OnConflictBuilder {
99
99
  * ### Examples
100
100
  *
101
101
  * ```ts
102
+ * const id = 1
103
+ * const first_name = 'John'
104
+ *
102
105
  * await db
103
106
  * .insertInto('person')
104
- * .values({ first_name, pic })
107
+ * .values({ first_name, id })
105
108
  * .onConflict((oc) => oc
106
- * .column('pic')
109
+ * .column('id')
107
110
  * .doNothing()
108
111
  * )
112
+ * .execute()
109
113
  * ```
110
114
  *
111
115
  * The generated SQL (PostgreSQL):
112
116
  *
113
117
  * ```sql
114
- * insert into "person" ("first_name", "pic")
118
+ * insert into "person" ("first_name", "id")
115
119
  * values ($1, $2)
116
- * on conflict ("pic") do nothing
120
+ * on conflict ("id") do nothing
117
121
  * ```
118
122
  */
119
123
  doNothing() {
@@ -130,21 +134,25 @@ export class OnConflictBuilder {
130
134
  * ### Examples
131
135
  *
132
136
  * ```ts
137
+ * const id = 1
138
+ * const first_name = 'John'
139
+ *
133
140
  * await db
134
141
  * .insertInto('person')
135
- * .values({ first_name, pic })
142
+ * .values({ first_name, id })
136
143
  * .onConflict((oc) => oc
137
- * .column('pic')
144
+ * .column('id')
138
145
  * .doUpdateSet({ first_name })
139
146
  * )
147
+ * .execute()
140
148
  * ```
141
149
  *
142
150
  * The generated SQL (PostgreSQL):
143
151
  *
144
152
  * ```sql
145
- * insert into "person" ("first_name", "pic")
153
+ * insert into "person" ("first_name", "id")
146
154
  * values ($1, $2)
147
- * on conflict ("pic")
155
+ * on conflict ("id")
148
156
  * do update set "first_name" = $3
149
157
  * ```
150
158
  *
@@ -153,15 +161,32 @@ export class OnConflictBuilder {
153
161
  * to create an upsert operation:
154
162
  *
155
163
  * ```ts
156
- * db.insertInto('person')
157
- * .values(person)
158
- * .onConflict((oc) => oc
159
- * .column('id')
160
- * .doUpdateSet((eb) => ({
161
- * first_name: eb.ref('excluded.first_name'),
162
- * last_name: eb.ref('excluded.last_name')
163
- * }))
164
+ * import type { NewPerson } from 'type-editor' // imaginary module
165
+ *
166
+ * async function upsertPerson(person: NewPerson): Promise<void> {
167
+ * await db.insertInto('person')
168
+ * .values(person)
169
+ * .onConflict((oc) => oc
170
+ * .column('id')
171
+ * .doUpdateSet((eb) => ({
172
+ * first_name: eb.ref('excluded.first_name'),
173
+ * last_name: eb.ref('excluded.last_name')
174
+ * })
175
+ * )
164
176
  * )
177
+ * .execute()
178
+ * }
179
+ * ```
180
+ *
181
+ * The generated SQL (PostgreSQL):
182
+ *
183
+ * ```sql
184
+ * insert into "person" ("first_name", "last_name")
185
+ * values ($1, $2)
186
+ * on conflict ("id")
187
+ * do update set
188
+ * "first_name" = excluded."first_name",
189
+ * "last_name" = excluded."last_name"
165
190
  * ```
166
191
  */
167
192
  doUpdateSet(update) {
@@ -0,0 +1,138 @@
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
+ * gender: 'female',
26
+ * })
27
+ * .executeTakeFirstOrThrow()
28
+ * ```
29
+ *
30
+ * The generated SQL (MSSQL):
31
+ *
32
+ * ```sql
33
+ * insert into "person" ("first_name", "last_name", "gender")
34
+ * output "inserted"."id"
35
+ * values (@1, @2, @3)
36
+ * ```
37
+ *
38
+ * Return multiple columns:
39
+ *
40
+ * ```ts
41
+ * const { old_first_name, old_last_name, new_first_name, new_last_name } = await db
42
+ * .updateTable('person')
43
+ * .set({ first_name: 'John', last_name: 'Doe' })
44
+ * .output([
45
+ * 'deleted.first_name as old_first_name',
46
+ * 'deleted.last_name as old_last_name',
47
+ * 'inserted.first_name as new_first_name',
48
+ * 'inserted.last_name as new_last_name',
49
+ * ])
50
+ * .where('created_at', '<', new Date())
51
+ * .executeTakeFirstOrThrow()
52
+ * ```
53
+ *
54
+ * The generated SQL (MSSQL):
55
+ *
56
+ * ```sql
57
+ * update "person"
58
+ * set "first_name" = @1, "last_name" = @2
59
+ * output "deleted"."first_name" as "old_first_name",
60
+ * "deleted"."last_name" as "old_last_name",
61
+ * "inserted"."first_name" as "new_first_name",
62
+ * "inserted"."last_name" as "new_last_name"
63
+ * where "created_at" < @3
64
+ * ```
65
+ *
66
+ * Return arbitrary expressions:
67
+ *
68
+ * ```ts
69
+ * import { sql } from 'kysely'
70
+ *
71
+ * const { full_name } = await db
72
+ * .deleteFrom('person')
73
+ * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name'))
74
+ * .where('created_at', '<', new Date())
75
+ * .executeTakeFirstOrThrow()
76
+ * ```
77
+ *
78
+ * The generated SQL (MSSQL):
79
+ *
80
+ * ```sql
81
+ * delete from "person"
82
+ * output concat("deleted"."first_name", ' ', "deleted"."last_name") as "full_name"
83
+ * where "created_at" < @1
84
+ * ```
85
+ *
86
+ * Return the action performed on the row:
87
+ *
88
+ * ```ts
89
+ * await db
90
+ * .mergeInto('person')
91
+ * .using('pet', 'pet.owner_id', 'person.id')
92
+ * .whenMatched()
93
+ * .thenDelete()
94
+ * .whenNotMatched()
95
+ * .thenInsertValues({
96
+ * first_name: 'John',
97
+ * last_name: 'Doe',
98
+ * gender: 'male'
99
+ * })
100
+ * .output([
101
+ * 'inserted.id as inserted_id',
102
+ * 'deleted.id as deleted_id',
103
+ * ])
104
+ * .execute()
105
+ * ```
106
+ *
107
+ * The generated SQL (MSSQL):
108
+ *
109
+ * ```sql
110
+ * merge into "person"
111
+ * using "pet" on "pet"."owner_id" = "person"."id"
112
+ * when matched then delete
113
+ * when not matched then
114
+ * insert ("first_name", "last_name", "gender")
115
+ * values (@1, @2, @3)
116
+ * output "inserted"."id" as "inserted_id", "deleted"."id" as "deleted_id"
117
+ * ```
118
+ *
119
+ */
120
+ output<OE extends OutputExpression<DB, TB, OP>>(selections: ReadonlyArray<OE>): OutputInterface<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>, OP>;
121
+ output<CB extends OutputCallback<DB, TB, OP>>(callback: CB): OutputInterface<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputCallback<CB>>, OP>;
122
+ output<OE extends OutputExpression<DB, TB, OP>>(selection: OE): OutputInterface<DB, TB, ReturningRow<DB, TB, O, SelectExpressionFromOutputExpression<OE>>, OP>;
123
+ /**
124
+ * Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
125
+ * that support `output` such as MS SQL Server (MSSQL).
126
+ *
127
+ * Also see the {@link output} method.
128
+ */
129
+ outputAll(table: OP): OutputInterface<DB, TB, ReturningAllRow<DB, TB, O>, OP>;
130
+ }
131
+ export type OutputPrefix = 'deleted' | 'inserted';
132
+ export type OutputDatabase<DB, TB extends keyof DB, OP extends OutputPrefix = OutputPrefix> = {
133
+ [K in OP]: DB[TB];
134
+ };
135
+ 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>;
136
+ export type OutputCallback<DB, TB extends keyof DB, OP extends OutputPrefix = OutputPrefix> = (eb: ExpressionBuilder<OutputDatabase<DB, TB, OP>, OP>) => ReadonlyArray<OutputExpression<DB, TB, OP>>;
137
+ export type SelectExpressionFromOutputExpression<OE> = OE extends `${OutputPrefix}.${infer C}` ? C : OE;
138
+ export type SelectExpressionFromOutputCallback<CB> = CB extends (eb: ExpressionBuilder<any, any>) => ReadonlyArray<infer OE> ? SelectExpressionFromOutputExpression<OE> : never;
@@ -0,0 +1,2 @@
1
+ /// <reference types="./output-interface.d.ts" />
2
+ export {};
@@ -26,20 +26,20 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
26
26
  * last_name: 'Aniston'
27
27
  * })
28
28
  * .returning('id')
29
- * .executeTakeFirst()
29
+ * .executeTakeFirstOrThrow()
30
30
  * ```
31
31
  *
32
32
  * Return multiple columns:
33
33
  *
34
34
  * ```ts
35
- * const { id, first_name } = await db
35
+ * const { id, last_name } = await db
36
36
  * .insertInto('person')
37
37
  * .values({
38
38
  * first_name: 'Jennifer',
39
39
  * last_name: 'Aniston'
40
40
  * })
41
41
  * .returning(['id', 'last_name'])
42
- * .executeTakeFirst()
42
+ * .executeTakeFirstOrThrow()
43
43
  * ```
44
44
  *
45
45
  * Return arbitrary expressions:
@@ -56,9 +56,9 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
56
56
  * .returning((eb) => [
57
57
  * 'id as id',
58
58
  * sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
59
- * eb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
59
+ * eb.selectFrom('pet').select('pet.id').limit(1).as('first_pet_id')
60
60
  * ])
61
- * .executeTakeFirst()
61
+ * .executeTakeFirstOrThrow()
62
62
  * ```
63
63
  */
64
64
  returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): ReturningInterface<DB, TB, ReturningRow<DB, TB, O, SE>>;
@@ -67,6 +67,8 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
67
67
  /**
68
68
  * Adds a `returning *` to an insert/update/delete query on databases
69
69
  * that support `returning` such as PostgreSQL.
70
+ *
71
+ * Also see the {@link returning} method.
70
72
  */
71
73
  returningAll(): ReturningInterface<DB, TB, Selectable<DB[TB]>>;
72
74
  }
@@ -5,11 +5,19 @@ export interface SelectQueryBuilderExpression<O> extends AliasableExpression<O>
5
5
  /**
6
6
  * Creates the OperationNode that describes how to compile this expression into SQL.
7
7
  *
8
+ * ### Examples
9
+ *
8
10
  * If you are creating a custom expression, it's often easiest to use the {@link sql}
9
11
  * template tag to build the node:
10
12
  *
11
13
  * ```ts
14
+ * import { type Expression, type OperationNode, sql } from 'kysely'
15
+ *
12
16
  * class SomeExpression<T> implements Expression<T> {
17
+ * get expressionType(): T | undefined {
18
+ * return undefined
19
+ * }
20
+ *
13
21
  * toOperationNode(): OperationNode {
14
22
  * return sql`some sql here`.toOperationNode()
15
23
  * }