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
@@ -119,15 +119,17 @@ export class UpdateQueryBuilder {
119
119
  * Update the first 2 rows in the 'person' table:
120
120
  *
121
121
  * ```ts
122
- * return await db
122
+ * await db
123
123
  * .updateTable('person')
124
124
  * .set({ first_name: 'Foo' })
125
- * .limit(2);
125
+ * .limit(2)
126
+ * .execute()
126
127
  * ```
127
128
  *
128
129
  * The generated SQL (MySQL):
130
+ *
129
131
  * ```sql
130
- * update `person` set `first_name` = 'Foo' limit 2
132
+ * update `person` set `first_name` = ? limit ?
131
133
  * ```
132
134
  */
133
135
  limit(limit) {
@@ -148,10 +150,51 @@ export class UpdateQueryBuilder {
148
150
  queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectArg(selection)),
149
151
  });
150
152
  }
151
- returningAll() {
153
+ returningAll(table) {
154
+ return new UpdateQueryBuilder({
155
+ ...this.#props,
156
+ queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll(table)),
157
+ });
158
+ }
159
+ output(args) {
160
+ return new UpdateQueryBuilder({
161
+ ...this.#props,
162
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectArg(args)),
163
+ });
164
+ }
165
+ outputAll(table) {
166
+ return new UpdateQueryBuilder({
167
+ ...this.#props,
168
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectAll(table)),
169
+ });
170
+ }
171
+ /**
172
+ * This can be used to add any additional SQL to the end of the query.
173
+ *
174
+ * ### Examples
175
+ *
176
+ * ```ts
177
+ * import { sql } from 'kysely'
178
+ *
179
+ * await db.updateTable('person')
180
+ * .set({ age: 39 })
181
+ * .where('first_name', '=', 'John')
182
+ * .modifyEnd(sql.raw('-- This is a comment'))
183
+ * .execute()
184
+ * ```
185
+ *
186
+ * The generated SQL (MySQL):
187
+ *
188
+ * ```sql
189
+ * update `person`
190
+ * set `age` = 39
191
+ * where `first_name` = "John" -- This is a comment
192
+ * ```
193
+ */
194
+ modifyEnd(modifier) {
152
195
  return new UpdateQueryBuilder({
153
196
  ...this.#props,
154
- queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll()),
197
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, modifier.toOperationNode()),
155
198
  });
156
199
  }
157
200
  /**
@@ -191,11 +234,18 @@ export class UpdateQueryBuilder {
191
234
  * The next example uses a helper function `log` to log a query:
192
235
  *
193
236
  * ```ts
237
+ * import type { Compilable } from 'kysely'
238
+ * import type { PersonUpdate } from 'type-editor' // imaginary module
239
+ *
194
240
  * function log<T extends Compilable>(qb: T): T {
195
241
  * console.log(qb.compile())
196
242
  * return qb
197
243
  * }
198
244
  *
245
+ * const values = {
246
+ * first_name: 'John',
247
+ * } satisfies PersonUpdate
248
+ *
199
249
  * db.updateTable('person')
200
250
  * .set(values)
201
251
  * .$call(log)
@@ -218,7 +268,9 @@ export class UpdateQueryBuilder {
218
268
  * ### Examples
219
269
  *
220
270
  * ```ts
221
- * async function updatePerson(id: number, updates: UpdateablePerson, returnLastName: boolean) {
271
+ * import type { PersonUpdate } from 'type-editor' // imaginary module
272
+ *
273
+ * async function updatePerson(id: number, updates: PersonUpdate, returnLastName: boolean) {
222
274
  * return await db
223
275
  * .updateTable('person')
224
276
  * .set(updates)
@@ -234,11 +286,11 @@ export class UpdateQueryBuilder {
234
286
  * the code. In the example above the return type of the `updatePerson` function is:
235
287
  *
236
288
  * ```ts
237
- * {
289
+ * Promise<{
238
290
  * id: number
239
291
  * first_name: string
240
292
  * last_name?: string
241
- * }
293
+ * }>
242
294
  * ```
243
295
  */
244
296
  $if(condition, func) {
@@ -276,27 +328,41 @@ export class UpdateQueryBuilder {
276
328
  * Turn this code:
277
329
  *
278
330
  * ```ts
331
+ * import type { Person } from 'type-editor' // imaginary module
332
+ *
333
+ * const id = 1
334
+ * const now = new Date().toISOString()
335
+ *
279
336
  * const person = await db.updateTable('person')
280
- * .set({ deletedAt: now })
337
+ * .set({ deleted_at: now })
281
338
  * .where('id', '=', id)
282
339
  * .where('nullable_column', 'is not', null)
283
340
  * .returningAll()
284
341
  * .executeTakeFirstOrThrow()
285
342
  *
286
- * if (person.nullable_column) {
343
+ * if (isWithNoNullValue(person)) {
287
344
  * functionThatExpectsPersonWithNonNullValue(person)
288
345
  * }
346
+ *
347
+ * function isWithNoNullValue(person: Person): person is Person & { nullable_column: string } {
348
+ * return person.nullable_column != null
349
+ * }
289
350
  * ```
290
351
  *
291
352
  * Into this:
292
353
  *
293
354
  * ```ts
355
+ * import type { NotNull } from 'kysely'
356
+ *
357
+ * const id = 1
358
+ * const now = new Date().toISOString()
359
+ *
294
360
  * const person = await db.updateTable('person')
295
- * .set({ deletedAt: now })
361
+ * .set({ deleted_at: now })
296
362
  * .where('id', '=', id)
297
363
  * .where('nullable_column', 'is not', null)
298
364
  * .returningAll()
299
- * .$narrowType<{ deletedAt: Date; nullable_column: string }>()
365
+ * .$narrowType<{ deleted_at: Date; nullable_column: NotNull }>()
300
366
  * .executeTakeFirstOrThrow()
301
367
  *
302
368
  * functionThatExpectsPersonWithNonNullValue(person)
@@ -308,17 +374,17 @@ export class UpdateQueryBuilder {
308
374
  /**
309
375
  * Asserts that query's output row type equals the given type `T`.
310
376
  *
311
- * This method can be used to simplify excessively complex types to make typescript happy
377
+ * This method can be used to simplify excessively complex types to make TypeScript happy
312
378
  * and much faster.
313
379
  *
314
380
  * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
315
- * for typescript and you get errors like this:
381
+ * for TypeScript and you get errors like this:
316
382
  *
317
383
  * ```
318
384
  * error TS2589: Type instantiation is excessively deep and possibly infinite.
319
385
  * ```
320
386
  *
321
- * In these case you can often use this method to help typescript a little bit. When you use this
387
+ * In these case you can often use this method to help TypeScript a little bit. When you use this
322
388
  * method to assert the output type of a query, Kysely can drop the complex output type that
323
389
  * consists of multiple nested helper types and replace it with the simple asserted type.
324
390
  *
@@ -328,6 +394,17 @@ export class UpdateQueryBuilder {
328
394
  * ### Examples
329
395
  *
330
396
  * ```ts
397
+ * import type { PersonUpdate, PetUpdate, Species } from 'type-editor' // imaginary module
398
+ *
399
+ * const person = {
400
+ * id: 1,
401
+ * gender: 'other',
402
+ * } satisfies PersonUpdate
403
+ *
404
+ * const pet = {
405
+ * name: 'Fluffy',
406
+ * } satisfies PetUpdate
407
+ *
331
408
  * const result = await db
332
409
  * .with('updated_person', (qb) => qb
333
410
  * .updateTable('person')
@@ -373,9 +450,11 @@ export class UpdateQueryBuilder {
373
450
  */
374
451
  async execute() {
375
452
  const compiledQuery = this.compile();
376
- const query = compiledQuery.query;
377
453
  const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
378
- if (this.#props.executor.adapter.supportsReturning && query.returning) {
454
+ const { adapter } = this.#props.executor;
455
+ const query = compiledQuery.query;
456
+ if ((query.returning && adapter.supportsReturning) ||
457
+ (query.output && adapter.supportsOutput)) {
379
458
  return result.rows;
380
459
  }
381
460
  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
  }
@@ -1,6 +1,15 @@
1
1
  /// <reference types="./update-result.d.ts" />
2
2
  export class UpdateResult {
3
+ /**
4
+ * The number of rows the update query updated (even if not changed).
5
+ */
3
6
  numUpdatedRows;
7
+ /**
8
+ * The number of rows the update query changed.
9
+ *
10
+ * This is **optional** and only supported in dialects such as MySQL.
11
+ * You would probably use {@link numUpdatedRows} in most cases.
12
+ */
4
13
  numChangedRows;
5
14
  constructor(numUpdatedRows, numChangedRows) {
6
15
  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;
@@ -18,6 +18,7 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
18
18
  compileQuery(node) {
19
19
  this.#sql = '';
20
20
  this.#parameters = [];
21
+ this.nodeStack.splice(0, this.nodeStack.length);
21
22
  this.visitNode(node);
22
23
  return freeze({
23
24
  query: node,
@@ -174,6 +175,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
174
175
  this.compileList(node.columns);
175
176
  this.append(')');
176
177
  }
178
+ if (node.output) {
179
+ this.append(' ');
180
+ this.visitNode(node.output);
181
+ }
177
182
  if (node.values) {
178
183
  this.append(' ');
179
184
  this.visitNode(node.values);
@@ -197,6 +202,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
197
202
  if (isSubQuery && !MergeQueryNode.is(rootQueryNode)) {
198
203
  this.append(')');
199
204
  }
205
+ if (node.endModifiers?.length) {
206
+ this.append(' ');
207
+ this.compileList(node.endModifiers, ' ');
208
+ }
200
209
  }
201
210
  visitValues(node) {
202
211
  this.append('values ');
@@ -221,6 +230,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
221
230
  this.append(' ');
222
231
  }
223
232
  this.visitNode(node.from);
233
+ if (node.output) {
234
+ this.append(' ');
235
+ this.visitNode(node.output);
236
+ }
224
237
  if (node.using) {
225
238
  this.append(' ');
226
239
  this.visitNode(node.using);
@@ -248,6 +261,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
248
261
  if (isSubQuery) {
249
262
  this.append(')');
250
263
  }
264
+ if (node.endModifiers?.length) {
265
+ this.append(' ');
266
+ this.compileList(node.endModifiers, ' ');
267
+ }
251
268
  }
252
269
  visitReturning(node) {
253
270
  this.append('returning ');
@@ -391,6 +408,9 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
391
408
  }
392
409
  }
393
410
  visitColumnDefinition(node) {
411
+ if (node.ifNotExists) {
412
+ this.append('if not exists ');
413
+ }
394
414
  this.visitNode(node.column);
395
415
  this.append(' ');
396
416
  this.visitNode(node.dataType);
@@ -517,6 +537,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
517
537
  if (node.updates) {
518
538
  this.compileList(node.updates);
519
539
  }
540
+ if (node.output) {
541
+ this.append(' ');
542
+ this.visitNode(node.output);
543
+ }
520
544
  if (node.from) {
521
545
  this.append(' ');
522
546
  this.visitNode(node.from);
@@ -540,6 +564,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
540
564
  if (isSubQuery && !MergeQueryNode.is(rootQueryNode)) {
541
565
  this.append(')');
542
566
  }
567
+ if (node.endModifiers?.length) {
568
+ this.append(' ');
569
+ this.compileList(node.endModifiers, ' ');
570
+ }
543
571
  }
544
572
  visitColumnUpdate(node) {
545
573
  this.visitNode(node.column);
@@ -955,6 +983,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
955
983
  this.append('distinct ');
956
984
  }
957
985
  this.compileList(node.aggregated);
986
+ if (node.orderBy) {
987
+ this.append(' ');
988
+ this.visitNode(node.orderBy);
989
+ }
958
990
  this.append(')');
959
991
  if (node.filter) {
960
992
  this.append(' filter(');
@@ -1091,7 +1123,15 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
1091
1123
  }
1092
1124
  if (node.whens) {
1093
1125
  this.append(' ');
1094
- this.compileList(node.whens);
1126
+ this.compileList(node.whens, ' ');
1127
+ }
1128
+ if (node.output) {
1129
+ this.append(' ');
1130
+ this.visitNode(node.output);
1131
+ }
1132
+ if (node.endModifiers?.length) {
1133
+ this.append(' ');
1134
+ this.compileList(node.endModifiers, ' ');
1095
1135
  }
1096
1136
  }
1097
1137
  visitMatched(node) {
@@ -1132,6 +1172,10 @@ export class DefaultQueryCompiler extends OperationNodeVisitor {
1132
1172
  this.visitNode(node.rowCount);
1133
1173
  this.append(` rows ${node.modifier}`);
1134
1174
  }
1175
+ visitOutput(node) {
1176
+ this.append('output ');
1177
+ this.compileList(node.selections);
1178
+ }
1135
1179
  visitTop(node) {
1136
1180
  this.append(`top(${node.expression})`);
1137
1181
  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