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
@@ -121,15 +121,17 @@ class UpdateQueryBuilder {
121
121
  * Update the first 2 rows in the 'person' table:
122
122
  *
123
123
  * ```ts
124
- * return await db
124
+ * await db
125
125
  * .updateTable('person')
126
126
  * .set({ first_name: 'Foo' })
127
- * .limit(2);
127
+ * .limit(2)
128
+ * .execute()
128
129
  * ```
129
130
  *
130
131
  * The generated SQL (MySQL):
132
+ *
131
133
  * ```sql
132
- * update `person` set `first_name` = 'Foo' limit 2
134
+ * update `person` set `first_name` = ? limit ?
133
135
  * ```
134
136
  */
135
137
  limit(limit) {
@@ -150,10 +152,51 @@ class UpdateQueryBuilder {
150
152
  queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectArg)(selection)),
151
153
  });
152
154
  }
153
- returningAll() {
155
+ returningAll(table) {
156
+ return new UpdateQueryBuilder({
157
+ ...this.#props,
158
+ queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)(table)),
159
+ });
160
+ }
161
+ output(args) {
162
+ return new UpdateQueryBuilder({
163
+ ...this.#props,
164
+ queryNode: query_node_js_1.QueryNode.cloneWithOutput(this.#props.queryNode, (0, select_parser_js_1.parseSelectArg)(args)),
165
+ });
166
+ }
167
+ outputAll(table) {
168
+ return new UpdateQueryBuilder({
169
+ ...this.#props,
170
+ queryNode: query_node_js_1.QueryNode.cloneWithOutput(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)(table)),
171
+ });
172
+ }
173
+ /**
174
+ * This can be used to add any additional SQL to the end of the query.
175
+ *
176
+ * ### Examples
177
+ *
178
+ * ```ts
179
+ * import { sql } from 'kysely'
180
+ *
181
+ * await db.updateTable('person')
182
+ * .set({ age: 39 })
183
+ * .where('first_name', '=', 'John')
184
+ * .modifyEnd(sql.raw('-- This is a comment'))
185
+ * .execute()
186
+ * ```
187
+ *
188
+ * The generated SQL (MySQL):
189
+ *
190
+ * ```sql
191
+ * update `person`
192
+ * set `age` = 39
193
+ * where `first_name` = "John" -- This is a comment
194
+ * ```
195
+ */
196
+ modifyEnd(modifier) {
154
197
  return new UpdateQueryBuilder({
155
198
  ...this.#props,
156
- queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)()),
199
+ queryNode: query_node_js_1.QueryNode.cloneWithEndModifier(this.#props.queryNode, modifier.toOperationNode()),
157
200
  });
158
201
  }
159
202
  /**
@@ -193,11 +236,18 @@ class UpdateQueryBuilder {
193
236
  * The next example uses a helper function `log` to log a query:
194
237
  *
195
238
  * ```ts
239
+ * import type { Compilable } from 'kysely'
240
+ * import type { PersonUpdate } from 'type-editor' // imaginary module
241
+ *
196
242
  * function log<T extends Compilable>(qb: T): T {
197
243
  * console.log(qb.compile())
198
244
  * return qb
199
245
  * }
200
246
  *
247
+ * const values = {
248
+ * first_name: 'John',
249
+ * } satisfies PersonUpdate
250
+ *
201
251
  * db.updateTable('person')
202
252
  * .set(values)
203
253
  * .$call(log)
@@ -220,7 +270,9 @@ class UpdateQueryBuilder {
220
270
  * ### Examples
221
271
  *
222
272
  * ```ts
223
- * async function updatePerson(id: number, updates: UpdateablePerson, returnLastName: boolean) {
273
+ * import type { PersonUpdate } from 'type-editor' // imaginary module
274
+ *
275
+ * async function updatePerson(id: number, updates: PersonUpdate, returnLastName: boolean) {
224
276
  * return await db
225
277
  * .updateTable('person')
226
278
  * .set(updates)
@@ -236,11 +288,11 @@ class UpdateQueryBuilder {
236
288
  * the code. In the example above the return type of the `updatePerson` function is:
237
289
  *
238
290
  * ```ts
239
- * {
291
+ * Promise<{
240
292
  * id: number
241
293
  * first_name: string
242
294
  * last_name?: string
243
- * }
295
+ * }>
244
296
  * ```
245
297
  */
246
298
  $if(condition, func) {
@@ -278,27 +330,41 @@ class UpdateQueryBuilder {
278
330
  * Turn this code:
279
331
  *
280
332
  * ```ts
333
+ * import type { Person } from 'type-editor' // imaginary module
334
+ *
335
+ * const id = 1
336
+ * const now = new Date().toISOString()
337
+ *
281
338
  * const person = await db.updateTable('person')
282
- * .set({ deletedAt: now })
339
+ * .set({ deleted_at: now })
283
340
  * .where('id', '=', id)
284
341
  * .where('nullable_column', 'is not', null)
285
342
  * .returningAll()
286
343
  * .executeTakeFirstOrThrow()
287
344
  *
288
- * if (person.nullable_column) {
345
+ * if (isWithNoNullValue(person)) {
289
346
  * functionThatExpectsPersonWithNonNullValue(person)
290
347
  * }
348
+ *
349
+ * function isWithNoNullValue(person: Person): person is Person & { nullable_column: string } {
350
+ * return person.nullable_column != null
351
+ * }
291
352
  * ```
292
353
  *
293
354
  * Into this:
294
355
  *
295
356
  * ```ts
357
+ * import type { NotNull } from 'kysely'
358
+ *
359
+ * const id = 1
360
+ * const now = new Date().toISOString()
361
+ *
296
362
  * const person = await db.updateTable('person')
297
- * .set({ deletedAt: now })
363
+ * .set({ deleted_at: now })
298
364
  * .where('id', '=', id)
299
365
  * .where('nullable_column', 'is not', null)
300
366
  * .returningAll()
301
- * .$narrowType<{ deletedAt: Date; nullable_column: string }>()
367
+ * .$narrowType<{ deleted_at: Date; nullable_column: NotNull }>()
302
368
  * .executeTakeFirstOrThrow()
303
369
  *
304
370
  * functionThatExpectsPersonWithNonNullValue(person)
@@ -310,17 +376,17 @@ class UpdateQueryBuilder {
310
376
  /**
311
377
  * Asserts that query's output row type equals the given type `T`.
312
378
  *
313
- * This method can be used to simplify excessively complex types to make typescript happy
379
+ * This method can be used to simplify excessively complex types to make TypeScript happy
314
380
  * and much faster.
315
381
  *
316
382
  * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
317
- * for typescript and you get errors like this:
383
+ * for TypeScript and you get errors like this:
318
384
  *
319
385
  * ```
320
386
  * error TS2589: Type instantiation is excessively deep and possibly infinite.
321
387
  * ```
322
388
  *
323
- * In these case you can often use this method to help typescript a little bit. When you use this
389
+ * In these case you can often use this method to help TypeScript a little bit. When you use this
324
390
  * method to assert the output type of a query, Kysely can drop the complex output type that
325
391
  * consists of multiple nested helper types and replace it with the simple asserted type.
326
392
  *
@@ -330,6 +396,17 @@ class UpdateQueryBuilder {
330
396
  * ### Examples
331
397
  *
332
398
  * ```ts
399
+ * import type { PersonUpdate, PetUpdate, Species } from 'type-editor' // imaginary module
400
+ *
401
+ * const person = {
402
+ * id: 1,
403
+ * gender: 'other',
404
+ * } satisfies PersonUpdate
405
+ *
406
+ * const pet = {
407
+ * name: 'Fluffy',
408
+ * } satisfies PetUpdate
409
+ *
333
410
  * const result = await db
334
411
  * .with('updated_person', (qb) => qb
335
412
  * .updateTable('person')
@@ -375,9 +452,11 @@ class UpdateQueryBuilder {
375
452
  */
376
453
  async execute() {
377
454
  const compiledQuery = this.compile();
378
- const query = compiledQuery.query;
379
455
  const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
380
- if (this.#props.executor.adapter.supportsReturning && query.returning) {
456
+ const { adapter } = this.#props.executor;
457
+ const query = compiledQuery.query;
458
+ if ((query.returning && adapter.supportsReturning) ||
459
+ (query.output && adapter.supportsOutput)) {
381
460
  return result.rows;
382
461
  }
383
462
  return [
@@ -1,5 +1,14 @@
1
1
  export declare class UpdateResult {
2
+ /**
3
+ * The number of rows the update query updated (even if not changed).
4
+ */
2
5
  readonly numUpdatedRows: bigint;
6
+ /**
7
+ * The number of rows the update query changed.
8
+ *
9
+ * This is **optional** and only supported in dialects such as MySQL.
10
+ * You would probably use {@link numUpdatedRows} in most cases.
11
+ */
3
12
  readonly numChangedRows?: bigint;
4
13
  constructor(numUpdatedRows: bigint, numChangedRows: bigint | undefined);
5
14
  }
@@ -2,7 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.UpdateResult = void 0;
4
4
  class UpdateResult {
5
+ /**
6
+ * The number of rows the update query updated (even if not changed).
7
+ */
5
8
  numUpdatedRows;
9
+ /**
10
+ * The number of rows the update query changed.
11
+ *
12
+ * This is **optional** and only supported in dialects such as MySQL.
13
+ * You would probably use {@link numUpdatedRows} in most cases.
14
+ */
6
15
  numChangedRows;
7
16
  constructor(numUpdatedRows, numChangedRows) {
8
17
  this.numUpdatedRows = numUpdatedRows;
@@ -35,6 +35,8 @@ export interface WhereInterface<DB, TB extends keyof DB> {
35
35
  * you can always use:
36
36
  *
37
37
  * ```ts
38
+ * import { sql } from 'kysely'
39
+ *
38
40
  * sql`your operator`
39
41
  * ```
40
42
  *
@@ -46,7 +48,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
46
48
  * const persons = await db
47
49
  * .selectFrom('person')
48
50
  * .selectAll()
49
- * .where('id', 'in', ['1', '2', '3'])
51
+ * .where('id', 'in', [1, 2, 3])
50
52
  * .execute()
51
53
  * ```
52
54
  *
@@ -265,7 +267,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
265
267
  * .selectFrom('person')
266
268
  * .selectAll()
267
269
  * .where(
268
- * sql`coalesce(first_name, last_name)`,
270
+ * sql<string>`coalesce(first_name, last_name)`,
269
271
  * 'like',
270
272
  * '%' + name + '%',
271
273
  * )
@@ -294,6 +296,8 @@ export interface WhereInterface<DB, TB extends keyof DB> {
294
296
  * import { sql } from 'kysely'
295
297
  * const { ref } = db.dynamic
296
298
  *
299
+ * const columnFromUserInput: string = 'id'
300
+ *
297
301
  * const persons = await db
298
302
  * .selectFrom('person')
299
303
  * .selectAll()
@@ -94,6 +94,7 @@ import { AddIndexNode } from '../operation-node/add-index-node.js';
94
94
  import { CastNode } from '../operation-node/cast-node.js';
95
95
  import { FetchNode } from '../operation-node/fetch-node.js';
96
96
  import { TopNode } from '../operation-node/top-node.js';
97
+ import { OutputNode } from '../operation-node/output-node.js';
97
98
  export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
98
99
  #private;
99
100
  protected get numParameters(): number;
@@ -195,6 +196,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
195
196
  protected visitAddIndex(node: AddIndexNode): void;
196
197
  protected visitCast(node: CastNode): void;
197
198
  protected visitFetch(node: FetchNode): void;
199
+ protected visitOutput(node: OutputNode): void;
198
200
  protected visitTop(node: TopNode): void;
199
201
  protected append(str: string): void;
200
202
  protected appendValue(parameter: unknown): void;
@@ -20,6 +20,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
20
20
  compileQuery(node) {
21
21
  this.#sql = '';
22
22
  this.#parameters = [];
23
+ this.nodeStack.splice(0, this.nodeStack.length);
23
24
  this.visitNode(node);
24
25
  return (0, object_utils_js_1.freeze)({
25
26
  query: node,
@@ -176,6 +177,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
176
177
  this.compileList(node.columns);
177
178
  this.append(')');
178
179
  }
180
+ if (node.output) {
181
+ this.append(' ');
182
+ this.visitNode(node.output);
183
+ }
179
184
  if (node.values) {
180
185
  this.append(' ');
181
186
  this.visitNode(node.values);
@@ -199,6 +204,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
199
204
  if (isSubQuery && !merge_query_node_js_1.MergeQueryNode.is(rootQueryNode)) {
200
205
  this.append(')');
201
206
  }
207
+ if (node.endModifiers?.length) {
208
+ this.append(' ');
209
+ this.compileList(node.endModifiers, ' ');
210
+ }
202
211
  }
203
212
  visitValues(node) {
204
213
  this.append('values ');
@@ -223,6 +232,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
223
232
  this.append(' ');
224
233
  }
225
234
  this.visitNode(node.from);
235
+ if (node.output) {
236
+ this.append(' ');
237
+ this.visitNode(node.output);
238
+ }
226
239
  if (node.using) {
227
240
  this.append(' ');
228
241
  this.visitNode(node.using);
@@ -250,6 +263,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
250
263
  if (isSubQuery) {
251
264
  this.append(')');
252
265
  }
266
+ if (node.endModifiers?.length) {
267
+ this.append(' ');
268
+ this.compileList(node.endModifiers, ' ');
269
+ }
253
270
  }
254
271
  visitReturning(node) {
255
272
  this.append('returning ');
@@ -393,6 +410,9 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
393
410
  }
394
411
  }
395
412
  visitColumnDefinition(node) {
413
+ if (node.ifNotExists) {
414
+ this.append('if not exists ');
415
+ }
396
416
  this.visitNode(node.column);
397
417
  this.append(' ');
398
418
  this.visitNode(node.dataType);
@@ -519,6 +539,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
519
539
  if (node.updates) {
520
540
  this.compileList(node.updates);
521
541
  }
542
+ if (node.output) {
543
+ this.append(' ');
544
+ this.visitNode(node.output);
545
+ }
522
546
  if (node.from) {
523
547
  this.append(' ');
524
548
  this.visitNode(node.from);
@@ -542,6 +566,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
542
566
  if (isSubQuery && !merge_query_node_js_1.MergeQueryNode.is(rootQueryNode)) {
543
567
  this.append(')');
544
568
  }
569
+ if (node.endModifiers?.length) {
570
+ this.append(' ');
571
+ this.compileList(node.endModifiers, ' ');
572
+ }
545
573
  }
546
574
  visitColumnUpdate(node) {
547
575
  this.visitNode(node.column);
@@ -957,6 +985,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
957
985
  this.append('distinct ');
958
986
  }
959
987
  this.compileList(node.aggregated);
988
+ if (node.orderBy) {
989
+ this.append(' ');
990
+ this.visitNode(node.orderBy);
991
+ }
960
992
  this.append(')');
961
993
  if (node.filter) {
962
994
  this.append(' filter(');
@@ -1093,7 +1125,15 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
1093
1125
  }
1094
1126
  if (node.whens) {
1095
1127
  this.append(' ');
1096
- this.compileList(node.whens);
1128
+ this.compileList(node.whens, ' ');
1129
+ }
1130
+ if (node.output) {
1131
+ this.append(' ');
1132
+ this.visitNode(node.output);
1133
+ }
1134
+ if (node.endModifiers?.length) {
1135
+ this.append(' ');
1136
+ this.compileList(node.endModifiers, ' ');
1097
1137
  }
1098
1138
  }
1099
1139
  visitMatched(node) {
@@ -1134,6 +1174,10 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
1134
1174
  this.visitNode(node.rowCount);
1135
1175
  this.append(` rows ${node.modifier}`);
1136
1176
  }
1177
+ visitOutput(node) {
1178
+ this.append('output ');
1179
+ this.compileList(node.selections);
1180
+ }
1137
1181
  visitTop(node) {
1138
1182
  this.append(`top(${node.expression})`);
1139
1183
  if (node.modifiers) {
@@ -125,10 +125,10 @@ export declare class QueryCreator<DB> {
125
125
  * ```
126
126
  */
127
127
  selectFrom<TE extends keyof DB & string>(from: TE[]): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>;
128
- selectFrom<TE extends TableExpression<DB, keyof DB>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
128
+ selectFrom<TE extends TableExpression<DB, never>>(from: TE[]): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
129
129
  selectFrom<TE extends keyof DB & string>(from: TE): SelectQueryBuilder<DB, ExtractTableAlias<DB, TE>, {}>;
130
130
  selectFrom<TE extends AnyAliasedTable<DB>>(from: TE): SelectQueryBuilder<DB & PickTableWithAlias<DB, TE>, ExtractTableAlias<DB & PickTableWithAlias<DB, TE>, TE>, {}>;
131
- selectFrom<TE extends TableExpression<DB, keyof DB>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
131
+ selectFrom<TE extends TableExpression<DB, never>>(from: TE): SelectQueryBuilder<From<DB, TE>, FromTables<DB, never, TE>, {}>;
132
132
  /**
133
133
  * Creates a `select` query builder without a `from` clause.
134
134
  *
@@ -141,20 +141,19 @@ export declare class QueryCreator<DB> {
141
141
  * ### Examples
142
142
  *
143
143
  * ```ts
144
- * const result = db.selectNoFrom((eb) => [
144
+ * const result = await db.selectNoFrom((eb) => [
145
145
  * eb.selectFrom('person')
146
146
  * .select('id')
147
147
  * .where('first_name', '=', 'Jennifer')
148
148
  * .limit(1)
149
149
  * .as('jennifer_id'),
150
- *
151
150
  * eb.selectFrom('pet')
152
151
  * .select('id')
153
152
  * .where('name', '=', 'Doggo')
154
153
  * .limit(1)
155
154
  * .as('doggo_id')
156
- * ])
157
- * .executeTakeFirstOrThrow()
155
+ * ])
156
+ * .executeTakeFirstOrThrow()
158
157
  *
159
158
  * console.log(result.jennifer_id)
160
159
  * console.log(result.doggo_id)
@@ -214,7 +213,7 @@ export declare class QueryCreator<DB> {
214
213
  * last_name: 'Aniston'
215
214
  * })
216
215
  * .returning('id')
217
- * .executeTakeFirst()
216
+ * .executeTakeFirstOrThrow()
218
217
  * ```
219
218
  */
220
219
  insertInto<T extends keyof DB & string>(table: T): InsertQueryBuilder<DB, T, InsertResult>;
@@ -262,7 +261,7 @@ export declare class QueryCreator<DB> {
262
261
  * ```ts
263
262
  * const result = await db
264
263
  * .deleteFrom('person')
265
- * .where('person.id', '=', '1')
264
+ * .where('person.id', '=', 1)
266
265
  * .executeTakeFirst()
267
266
  *
268
267
  * console.log(result.numDeletedRows)
@@ -280,7 +279,7 @@ export declare class QueryCreator<DB> {
280
279
  * const result = await db
281
280
  * .deleteFrom(['person', 'pet'])
282
281
  * .using('person')
283
- * .innerJoin('pet', 'pet.owner_id', '=', 'person.id')
282
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
284
283
  * .where('person.id', '=', 1)
285
284
  * .executeTakeFirst()
286
285
  * ```
@@ -334,14 +333,18 @@ export declare class QueryCreator<DB> {
334
333
  *
335
334
  * ### Examples
336
335
  *
336
+ * <!-- siteExample("merge", "Source row existence", 10) -->
337
+ *
338
+ * Update a target column based on the existence of a source row:
339
+ *
337
340
  * ```ts
338
341
  * const result = await db
339
- * .mergeInto('person')
340
- * .using('pet', 'pet.owner_id', 'person.id')
341
- * .whenMatched((and) => and('has_pets', '!=', 'Y'))
342
+ * .mergeInto('person as target')
343
+ * .using('pet as source', 'source.owner_id', 'target.id')
344
+ * .whenMatchedAnd('target.has_pets', '!=', 'Y')
342
345
  * .thenUpdateSet({ has_pets: 'Y' })
343
- * .whenNotMatched()
344
- * .thenDoNothing()
346
+ * .whenNotMatchedBySourceAnd('target.has_pets', '=', 'Y')
347
+ * .thenUpdateSet({ has_pets: 'N' })
345
348
  * .executeTakeFirstOrThrow()
346
349
  *
347
350
  * console.log(result.numChangedRows)
@@ -351,11 +354,56 @@ export declare class QueryCreator<DB> {
351
354
  *
352
355
  * ```sql
353
356
  * merge into "person"
354
- * using "pet" on "pet"."owner_id" = "person"."id"
355
- * when matched and "has_pets" != $1 then
356
- * update set "has_pets" = $2
357
- * when not matched then
358
- * do nothing
357
+ * using "pet"
358
+ * on "pet"."owner_id" = "person"."id"
359
+ * when matched and "has_pets" != $1
360
+ * then update set "has_pets" = $2
361
+ * when not matched by source and "has_pets" = $3
362
+ * then update set "has_pets" = $4
363
+ * ```
364
+ *
365
+ * <!-- siteExample("merge", "Temporary changes table", 20) -->
366
+ *
367
+ * Merge new entries from a temporary changes table:
368
+ *
369
+ * ```ts
370
+ * const result = await db
371
+ * .mergeInto('wine as target')
372
+ * .using(
373
+ * 'wine_stock_change as source',
374
+ * 'source.wine_name',
375
+ * 'target.name',
376
+ * )
377
+ * .whenNotMatchedAnd('source.stock_delta', '>', 0)
378
+ * .thenInsertValues(({ ref }) => ({
379
+ * name: ref('source.wine_name'),
380
+ * stock: ref('source.stock_delta'),
381
+ * }))
382
+ * .whenMatchedAnd(
383
+ * (eb) => eb('target.stock', '+', eb.ref('source.stock_delta')),
384
+ * '>',
385
+ * 0,
386
+ * )
387
+ * .thenUpdateSet('stock', (eb) =>
388
+ * eb('target.stock', '+', eb.ref('source.stock_delta')),
389
+ * )
390
+ * .whenMatched()
391
+ * .thenDelete()
392
+ * .executeTakeFirstOrThrow()
393
+ * ```
394
+ *
395
+ * The generated SQL (PostgreSQL):
396
+ *
397
+ * ```sql
398
+ * merge into "wine" as "target"
399
+ * using "wine_stock_change" as "source"
400
+ * on "source"."wine_name" = "target"."name"
401
+ * when not matched and "source"."stock_delta" > $1
402
+ * then insert ("name", "stock") values ("source"."wine_name", "source"."stock_delta")
403
+ * when matched and "target"."stock" + "source"."stock_delta" > $2
404
+ * then update set "stock" = "target"."stock" + "source"."stock_delta"
405
+ * when matched
406
+ * then delete
359
407
  * ```
360
408
  */
361
409
  mergeInto<TR extends keyof DB & string>(targetTable: TR): MergeQueryBuilder<DB, TR, MergeResult>;
@@ -365,24 +413,77 @@ export declare class QueryCreator<DB> {
365
413
  *
366
414
  * ### Examples
367
415
  *
416
+ * <!-- siteExample("cte", "Simple selects", 10) -->
417
+ *
418
+ * Common table expressions (CTE) are a great way to modularize complex queries.
419
+ * Essentially they allow you to run multiple separate queries within a
420
+ * single roundtrip to the DB.
421
+ *
422
+ * Since CTEs are a part of the main query, query optimizers inside DB
423
+ * engines are able to optimize the overall query. For example, postgres
424
+ * is able to inline the CTEs inside the using queries if it decides it's
425
+ * faster.
426
+ *
368
427
  * ```ts
369
- * await db
428
+ * const result = await db
429
+ * // Create a CTE called `jennifers` that selects all
430
+ * // persons named 'Jennifer'.
370
431
  * .with('jennifers', (db) => db
371
432
  * .selectFrom('person')
372
433
  * .where('first_name', '=', 'Jennifer')
373
434
  * .select(['id', 'age'])
374
435
  * )
436
+ * // Select all rows from the `jennifers` CTE and
437
+ * // further filter it.
375
438
  * .with('adult_jennifers', (db) => db
376
439
  * .selectFrom('jennifers')
377
440
  * .where('age', '>', 18)
378
441
  * .select(['id', 'age'])
379
442
  * )
443
+ * // Finally select all adult jennifers that are
444
+ * // also younger than 60.
380
445
  * .selectFrom('adult_jennifers')
381
446
  * .where('age', '<', 60)
382
447
  * .selectAll()
383
448
  * .execute()
384
449
  * ```
385
450
  *
451
+ * <!-- siteExample("cte", "Inserts, updates and deletions", 20) -->
452
+ *
453
+ * Some databases like postgres also allow you to run other queries than selects
454
+ * in CTEs. On these databases CTEs are extremely powerful:
455
+ *
456
+ * ```ts
457
+ * const result = await db
458
+ * .with('new_person', (db) => db
459
+ * .insertInto('person')
460
+ * .values({
461
+ * first_name: 'Jennifer',
462
+ * age: 35,
463
+ * })
464
+ * .returning('id')
465
+ * )
466
+ * .with('new_pet', (db) => db
467
+ * .insertInto('pet')
468
+ * .values({
469
+ * name: 'Doggo',
470
+ * species: 'dog',
471
+ * is_favorite: true,
472
+ * // Use the id of the person we just inserted.
473
+ * owner_id: db
474
+ * .selectFrom('new_person')
475
+ * .select('id')
476
+ * })
477
+ * .returning('id')
478
+ * )
479
+ * .selectFrom(['new_person', 'new_pet'])
480
+ * .select([
481
+ * 'new_person.id as person_id',
482
+ * 'new_pet.id as pet_id'
483
+ * ])
484
+ * .execute()
485
+ * ```
486
+ *
386
487
  * The CTE name can optionally specify column names in addition to
387
488
  * a name. In that case Kysely requires the expression to retun
388
489
  * rows with the same columns.
@@ -445,7 +546,7 @@ export declare class QueryCreator<DB> {
445
546
  * This only affects the query created through the builder returned from
446
547
  * this method and doesn't modify the `db` instance.
447
548
  *
448
- * See [this recipe](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/schemas.md)
549
+ * See [this recipe](https://github.com/kysely-org/kysely/blob/master/site/docs/recipes/0007-schemas.md)
449
550
  * for a more detailed explanation.
450
551
  *
451
552
  * ### Examples