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
@@ -18,9 +18,12 @@ export declare class JSONPathBuilder<S, O = S> {
18
18
  * ### Examples
19
19
  *
20
20
  * ```ts
21
- * db.selectFrom('person').select(eb =>
22
- * eb.ref('nicknames', '->').at(0).as('primary_nickname')
23
- * )
21
+ * await db.selectFrom('person')
22
+ * .select(eb =>
23
+ * eb.ref('nicknames', '->').at(0).as('primary_nickname')
24
+ * )
25
+ * .execute()
26
+ * ```
24
27
  *
25
28
  * The generated SQL (PostgreSQL):
26
29
  *
@@ -130,11 +133,19 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
130
133
  * All expressions need to have this getter for complicated type-related reasons.
131
134
  * Simply add this getter for your expression and always return `undefined` from it:
132
135
  *
136
+ * ### Examples
137
+ *
133
138
  * ```ts
139
+ * import { type Expression, type OperationNode, sql } from 'kysely'
140
+ *
134
141
  * class SomeExpression<T> implements Expression<T> {
135
142
  * get expressionType(): T | undefined {
136
143
  * return undefined
137
144
  * }
145
+ *
146
+ * toOperationNode(): OperationNode {
147
+ * return sql`some sql here`.toOperationNode()
148
+ * }
138
149
  * }
139
150
  * ```
140
151
  *
@@ -163,7 +174,7 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
163
174
  *
164
175
  * The generated SQL (PostgreSQL):
165
176
  *
166
- * ```ts
177
+ * ```sql
167
178
  * select "first_name" = $1 as "is_jennifer"
168
179
  * from "person"
169
180
  * ```
@@ -172,6 +183,8 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
172
183
  /**
173
184
  * Returns an aliased version of the expression.
174
185
  *
186
+ * ### Examples
187
+ *
175
188
  * In addition to slapping `as "the_alias"` at the end of the expression,
176
189
  * this method also provides strict typing:
177
190
  *
@@ -180,7 +193,7 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
180
193
  * .selectFrom('person')
181
194
  * .select((eb) =>
182
195
  * // `eb.fn<string>` returns an AliasableExpression<string>
183
- * eb.fn<string>('concat', ['first_name' eb.val(' '), 'last_name']).as('full_name')
196
+ * eb.fn<string>('concat', ['first_name', eb.val(' '), 'last_name']).as('full_name')
184
197
  * )
185
198
  * .executeTakeFirstOrThrow()
186
199
  *
@@ -190,7 +203,7 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
190
203
  *
191
204
  * The generated SQL (PostgreSQL):
192
205
  *
193
- * ```ts
206
+ * ```sql
194
207
  * select
195
208
  * concat("first_name", $1, "last_name") as "full_name"
196
209
  * from
@@ -201,6 +214,8 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
201
214
  * provide the alias as the only type argument:
202
215
  *
203
216
  * ```ts
217
+ * import { sql } from 'kysely'
218
+ *
204
219
  * const values = sql<{ a: number, b: string }>`(values (1, 'foo'))`
205
220
  *
206
221
  * // The alias is `t(a, b)` which specifies the column names
@@ -215,11 +230,12 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
215
230
  * .expression(
216
231
  * db.selectFrom(aliasedValues).select(['t.a', 't.b'])
217
232
  * )
233
+ * .execute()
218
234
  * ```
219
235
  *
220
236
  * The generated SQL (PostgreSQL):
221
237
  *
222
- * ```ts
238
+ * ```sql
223
239
  * insert into "person" ("first_name", "last_name")
224
240
  * from (values (1, 'foo')) as t(a, b)
225
241
  * select "t"."a", "t"."b"
@@ -232,16 +248,24 @@ export declare class TraversedJSONPathBuilder<S, O> extends JSONPathBuilder<S, O
232
248
  * This method call doesn't change the SQL in any way. This methods simply
233
249
  * returns a copy of this `JSONPathBuilder` with a new output type.
234
250
  */
235
- $castTo<C>(): JSONPathBuilder<C>;
236
- $notNull(): JSONPathBuilder<Exclude<O, null>>;
251
+ $castTo<O2>(): TraversedJSONPathBuilder<S, O2>;
252
+ $notNull(): TraversedJSONPathBuilder<S, Exclude<O, null>>;
237
253
  /**
238
254
  * Creates the OperationNode that describes how to compile this expression into SQL.
239
255
  *
256
+ * ### Examples
257
+ *
240
258
  * If you are creating a custom expression, it's often easiest to use the {@link sql}
241
259
  * template tag to build the node:
242
260
  *
243
261
  * ```ts
262
+ * import { type Expression, type OperationNode, sql } from 'kysely'
263
+ *
244
264
  * class SomeExpression<T> implements Expression<T> {
265
+ * get expressionType(): T | undefined {
266
+ * return undefined
267
+ * }
268
+ *
245
269
  * toOperationNode(): OperationNode {
246
270
  * return sql`some sql here`.toOperationNode()
247
271
  * }
@@ -24,9 +24,12 @@ export class JSONPathBuilder {
24
24
  * ### Examples
25
25
  *
26
26
  * ```ts
27
- * db.selectFrom('person').select(eb =>
28
- * eb.ref('nicknames', '->').at(0).as('primary_nickname')
29
- * )
27
+ * await db.selectFrom('person')
28
+ * .select(eb =>
29
+ * eb.ref('nicknames', '->').at(0).as('primary_nickname')
30
+ * )
31
+ * .execute()
32
+ * ```
30
33
  *
31
34
  * The generated SQL (PostgreSQL):
32
35
  *
@@ -160,10 +163,10 @@ export class TraversedJSONPathBuilder extends JSONPathBuilder {
160
163
  * returns a copy of this `JSONPathBuilder` with a new output type.
161
164
  */
162
165
  $castTo() {
163
- return new JSONPathBuilder(this.#node);
166
+ return new TraversedJSONPathBuilder(this.#node);
164
167
  }
165
168
  $notNull() {
166
- return new JSONPathBuilder(this.#node);
169
+ return new TraversedJSONPathBuilder(this.#node);
167
170
  }
168
171
  toOperationNode() {
169
172
  return this.#node;
@@ -1,4 +1,4 @@
1
- import { AliasedExpression } from '../expression/expression.js';
1
+ import { AliasedExpression, Expression } from '../expression/expression.js';
2
2
  import { MergeQueryNode } from '../operation-node/merge-query-node.js';
3
3
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
4
4
  import { QueryNode } from '../operation-node/query-node.js';
@@ -7,6 +7,7 @@ import { ExpressionOrFactory } from '../parser/expression-parser.js';
7
7
  import { InsertObjectOrList, InsertObjectOrListFactory } from '../parser/insert-values-parser.js';
8
8
  import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
9
9
  import { ReferenceExpression } from '../parser/reference-parser.js';
10
+ import { ReturningAllRow, ReturningRow } from '../parser/returning-parser.js';
10
11
  import { TableExpression } from '../parser/table-parser.js';
11
12
  import { ExtractUpdateTypeFromReferenceExpression, UpdateObject, UpdateObjectFactory } from '../parser/update-set-parser.js';
12
13
  import { ValueExpression } from '../parser/value-parser.js';
@@ -17,10 +18,35 @@ import { QueryId } from '../util/query-id.js';
17
18
  import { ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
18
19
  import { MergeResult } from './merge-result.js';
19
20
  import { NoResultErrorConstructor } from './no-result-error.js';
21
+ import { OutputCallback, OutputExpression, OutputInterface, OutputPrefix, SelectExpressionFromOutputCallback, SelectExpressionFromOutputExpression } from './output-interface.js';
20
22
  import { UpdateQueryBuilder } from './update-query-builder.js';
21
- export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> {
23
+ export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> implements OutputInterface<DB, TT, O> {
22
24
  #private;
23
25
  constructor(props: MergeQueryBuilderProps);
26
+ /**
27
+ * This can be used to add any additional SQL to the end of the query.
28
+ *
29
+ * ### Examples
30
+ *
31
+ * ```ts
32
+ * import { sql } from 'kysely'
33
+ *
34
+ * await db
35
+ * .mergeInto('person')
36
+ * .using('pet', 'pet.owner_id', 'person.id')
37
+ * .whenMatched()
38
+ * .thenDelete()
39
+ * .modifyEnd(sql.raw('-- this is a comment'))
40
+ * .execute()
41
+ * ```
42
+ *
43
+ * The generated SQL (PostgreSQL):
44
+ *
45
+ * ```sql
46
+ * merge into "person" using "pet" on "pet"."owner_id" = "person"."id" when matched then delete -- this is a comment
47
+ * ```
48
+ */
49
+ modifyEnd(modifier: Expression<any>): MergeQueryBuilder<DB, TT, O>;
24
50
  /**
25
51
  * Changes a `merge into` query to an `merge top into` query.
26
52
  *
@@ -96,15 +122,163 @@ export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> {
96
122
  */
97
123
  using<TE extends TableExpression<DB, TT>, K1 extends JoinReferenceExpression<DB, TT, TE>, K2 extends JoinReferenceExpression<DB, TT, TE>>(sourceTable: TE, k1: K1, k2: K2): ExtractWheneableMergeQueryBuilder<DB, TT, TE, O>;
98
124
  using<TE extends TableExpression<DB, TT>, FN extends JoinCallbackExpression<DB, TT, TE>>(sourceTable: TE, callback: FN): ExtractWheneableMergeQueryBuilder<DB, TT, TE, O>;
125
+ /**
126
+ * Allows you to return data from modified rows.
127
+ *
128
+ * On supported databases like MS SQL Server (MSSQL), this method can be chained
129
+ * to `insert`, `update`, `delete` and `merge` queries to return data.
130
+ *
131
+ * Also see the {@link outputAll} method.
132
+ *
133
+ * ### Examples
134
+ *
135
+ * Return one column:
136
+ *
137
+ * ```ts
138
+ * const { id } = await db
139
+ * .insertInto('person')
140
+ * .output('inserted.id')
141
+ * .values({
142
+ * first_name: 'Jennifer',
143
+ * last_name: 'Aniston',
144
+ * gender: 'female',
145
+ * })
146
+ * .executeTakeFirstOrThrow()
147
+ * ```
148
+ *
149
+ * The generated SQL (MSSQL):
150
+ *
151
+ * ```sql
152
+ * insert into "person" ("first_name", "last_name", "gender")
153
+ * output "inserted"."id"
154
+ * values (@1, @2, @3)
155
+ * ```
156
+ *
157
+ * Return multiple columns:
158
+ *
159
+ * ```ts
160
+ * const { old_first_name, old_last_name, new_first_name, new_last_name } = await db
161
+ * .updateTable('person')
162
+ * .set({ first_name: 'John', last_name: 'Doe' })
163
+ * .output([
164
+ * 'deleted.first_name as old_first_name',
165
+ * 'deleted.last_name as old_last_name',
166
+ * 'inserted.first_name as new_first_name',
167
+ * 'inserted.last_name as new_last_name',
168
+ * ])
169
+ * .where('created_at', '<', new Date())
170
+ * .executeTakeFirstOrThrow()
171
+ * ```
172
+ *
173
+ * The generated SQL (MSSQL):
174
+ *
175
+ * ```sql
176
+ * update "person"
177
+ * set "first_name" = @1, "last_name" = @2
178
+ * output "deleted"."first_name" as "old_first_name",
179
+ * "deleted"."last_name" as "old_last_name",
180
+ * "inserted"."first_name" as "new_first_name",
181
+ * "inserted"."last_name" as "new_last_name"
182
+ * where "created_at" < @3
183
+ * ```
184
+ *
185
+ * Return arbitrary expressions:
186
+ *
187
+ * ```ts
188
+ * import { sql } from 'kysely'
189
+ *
190
+ * const { full_name } = await db
191
+ * .deleteFrom('person')
192
+ * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name'))
193
+ * .where('created_at', '<', new Date())
194
+ * .executeTakeFirstOrThrow()
195
+ * ```
196
+ *
197
+ * The generated SQL (MSSQL):
198
+ *
199
+ * ```sql
200
+ * delete from "person"
201
+ * output concat("deleted"."first_name", ' ', "deleted"."last_name") as "full_name"
202
+ * where "created_at" < @1
203
+ * ```
204
+ *
205
+ * Return the action performed on the row:
206
+ *
207
+ * ```ts
208
+ * await db
209
+ * .mergeInto('person')
210
+ * .using('pet', 'pet.owner_id', 'person.id')
211
+ * .whenMatched()
212
+ * .thenDelete()
213
+ * .whenNotMatched()
214
+ * .thenInsertValues({
215
+ * first_name: 'John',
216
+ * last_name: 'Doe',
217
+ * gender: 'male'
218
+ * })
219
+ * .output([
220
+ * 'inserted.id as inserted_id',
221
+ * 'deleted.id as deleted_id',
222
+ * ])
223
+ * .execute()
224
+ * ```
225
+ *
226
+ * The generated SQL (MSSQL):
227
+ *
228
+ * ```sql
229
+ * merge into "person"
230
+ * using "pet" on "pet"."owner_id" = "person"."id"
231
+ * when matched then delete
232
+ * when not matched then
233
+ * insert ("first_name", "last_name", "gender")
234
+ * values (@1, @2, @3)
235
+ * output "inserted"."id" as "inserted_id", "deleted"."id" as "deleted_id"
236
+ * ```
237
+ *
238
+ */
239
+ output<OE extends OutputExpression<DB, TT>>(selections: readonly OE[]): MergeQueryBuilder<DB, TT, ReturningRow<DB, TT, O, SelectExpressionFromOutputExpression<OE>>>;
240
+ output<CB extends OutputCallback<DB, TT>>(callback: CB): MergeQueryBuilder<DB, TT, ReturningRow<DB, TT, O, SelectExpressionFromOutputCallback<CB>>>;
241
+ output<OE extends OutputExpression<DB, TT>>(selection: OE): MergeQueryBuilder<DB, TT, ReturningRow<DB, TT, O, SelectExpressionFromOutputExpression<OE>>>;
242
+ /**
243
+ * Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
244
+ * that support `output` such as MS SQL Server (MSSQL).
245
+ *
246
+ * Also see the {@link output} method.
247
+ */
248
+ outputAll(table: OutputPrefix): MergeQueryBuilder<DB, TT, ReturningAllRow<DB, TT, O>>;
99
249
  }
100
250
  export interface MergeQueryBuilderProps {
101
251
  readonly queryId: QueryId;
102
252
  readonly queryNode: MergeQueryNode;
103
253
  readonly executor: QueryExecutor;
104
254
  }
105
- export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST extends keyof DB, O> implements Compilable<O>, OperationNodeSource {
255
+ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST extends keyof DB, O> implements Compilable<O>, OutputInterface<DB, TT, O>, OperationNodeSource {
106
256
  #private;
107
257
  constructor(props: MergeQueryBuilderProps);
258
+ /**
259
+ * This can be used to add any additional SQL to the end of the query.
260
+ *
261
+ * ### Examples
262
+ *
263
+ * ```ts
264
+ * import { sql } from 'kysely'
265
+ *
266
+ * await db
267
+ * .mergeInto('person')
268
+ * .using('pet', 'pet.owner_id', 'person.id')
269
+ * .whenMatched()
270
+ * .thenDelete()
271
+ * .modifyEnd(sql.raw('-- this is a comment'))
272
+ * .execute()
273
+ * ```
274
+ *
275
+ * The generated SQL (PostgreSQL):
276
+ *
277
+ * ```sql
278
+ * merge into "person" using "pet" on "pet"."owner_id" = "person"."id" when matched then delete -- this is a comment
279
+ * ```
280
+ */
281
+ modifyEnd(modifier: Expression<any>): WheneableMergeQueryBuilder<DB, TT, ST, O>;
108
282
  /**
109
283
  * See {@link MergeQueryBuilder.top}.
110
284
  */
@@ -275,6 +449,130 @@ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST exte
275
449
  * the target table, and not from source table and returns a {@link MatchedThenableMergeQueryBuilder}.
276
450
  */
277
451
  whenNotMatchedBySourceAndRef<LRE extends ReferenceExpression<DB, TT>, RRE extends ReferenceExpression<DB, TT>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT, O>;
452
+ /**
453
+ * Allows you to return data from modified rows.
454
+ *
455
+ * On supported databases like MS SQL Server (MSSQL), this method can be chained
456
+ * to `insert`, `update`, `delete` and `merge` queries to return data.
457
+ *
458
+ * Also see the {@link outputAll} method.
459
+ *
460
+ * ### Examples
461
+ *
462
+ * Return one column:
463
+ *
464
+ * ```ts
465
+ * const { id } = await db
466
+ * .insertInto('person')
467
+ * .output('inserted.id')
468
+ * .values({
469
+ * first_name: 'Jennifer',
470
+ * last_name: 'Aniston',
471
+ * gender: 'female',
472
+ * })
473
+ * .executeTakeFirstOrThrow()
474
+ * ```
475
+ *
476
+ * The generated SQL (MSSQL):
477
+ *
478
+ * ```sql
479
+ * insert into "person" ("first_name", "last_name", "gender")
480
+ * output "inserted"."id"
481
+ * values (@1, @2, @3)
482
+ * ```
483
+ *
484
+ * Return multiple columns:
485
+ *
486
+ * ```ts
487
+ * const { old_first_name, old_last_name, new_first_name, new_last_name } = await db
488
+ * .updateTable('person')
489
+ * .set({ first_name: 'John', last_name: 'Doe' })
490
+ * .output([
491
+ * 'deleted.first_name as old_first_name',
492
+ * 'deleted.last_name as old_last_name',
493
+ * 'inserted.first_name as new_first_name',
494
+ * 'inserted.last_name as new_last_name',
495
+ * ])
496
+ * .where('created_at', '<', new Date())
497
+ * .executeTakeFirstOrThrow()
498
+ * ```
499
+ *
500
+ * The generated SQL (MSSQL):
501
+ *
502
+ * ```sql
503
+ * update "person"
504
+ * set "first_name" = @1, "last_name" = @2
505
+ * output "deleted"."first_name" as "old_first_name",
506
+ * "deleted"."last_name" as "old_last_name",
507
+ * "inserted"."first_name" as "new_first_name",
508
+ * "inserted"."last_name" as "new_last_name"
509
+ * where "created_at" < @3
510
+ * ```
511
+ *
512
+ * Return arbitrary expressions:
513
+ *
514
+ * ```ts
515
+ * import { sql } from 'kysely'
516
+ *
517
+ * const { full_name } = await db
518
+ * .deleteFrom('person')
519
+ * .output((eb) => sql<string>`concat(${eb.ref('deleted.first_name')}, ' ', ${eb.ref('deleted.last_name')})`.as('full_name'))
520
+ * .where('created_at', '<', new Date())
521
+ * .executeTakeFirstOrThrow()
522
+ * ```
523
+ *
524
+ * The generated SQL (MSSQL):
525
+ *
526
+ * ```sql
527
+ * delete from "person"
528
+ * output concat("deleted"."first_name", ' ', "deleted"."last_name") as "full_name"
529
+ * where "created_at" < @1
530
+ * ```
531
+ *
532
+ * Return the action performed on the row:
533
+ *
534
+ * ```ts
535
+ * await db
536
+ * .mergeInto('person')
537
+ * .using('pet', 'pet.owner_id', 'person.id')
538
+ * .whenMatched()
539
+ * .thenDelete()
540
+ * .whenNotMatched()
541
+ * .thenInsertValues({
542
+ * first_name: 'John',
543
+ * last_name: 'Doe',
544
+ * gender: 'male'
545
+ * })
546
+ * .output([
547
+ * 'inserted.id as inserted_id',
548
+ * 'deleted.id as deleted_id',
549
+ * ])
550
+ * .execute()
551
+ * ```
552
+ *
553
+ * The generated SQL (MSSQL):
554
+ *
555
+ * ```sql
556
+ * merge into "person"
557
+ * using "pet" on "pet"."owner_id" = "person"."id"
558
+ * when matched then delete
559
+ * when not matched then
560
+ * insert ("first_name", "last_name", "gender")
561
+ * values (@1, @2, @3)
562
+ * output "inserted"."id" as "inserted_id", "deleted"."id" as "deleted_id"
563
+ * ```
564
+ *
565
+ */
566
+ output<OE extends OutputExpression<DB, TT>>(selections: readonly OE[]): WheneableMergeQueryBuilder<DB, TT, ST, ReturningRow<DB, TT, O, SelectExpressionFromOutputExpression<OE>>>;
567
+ output<CB extends OutputCallback<DB, TT>>(callback: CB): WheneableMergeQueryBuilder<DB, TT, ST, ReturningRow<DB, TT, O, SelectExpressionFromOutputCallback<CB>>>;
568
+ output<OE extends OutputExpression<DB, TT>>(selection: OE): WheneableMergeQueryBuilder<DB, TT, ST, ReturningRow<DB, TT, O, SelectExpressionFromOutputExpression<OE>>>;
569
+ /**
570
+ * Adds an `output {prefix}.*` to an `insert`/`update`/`delete`/`merge` query on databases
571
+ * that support `output` such as MS SQL Server (MSSQL).
572
+ *
573
+ * Also see the {@link output} method.
574
+ */
575
+ outputAll(table: OutputPrefix): WheneableMergeQueryBuilder<DB, TT, ST, ReturningAllRow<DB, TT, O>>;
278
576
  /**
279
577
  * Simply calls the provided function passing `this` as the only argument. `$call` returns
280
578
  * what the provided function returns.
@@ -287,13 +585,15 @@ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST exte
287
585
  * The next example uses a helper function `log` to log a query:
288
586
  *
289
587
  * ```ts
588
+ * import type { Compilable } from 'kysely'
589
+ *
290
590
  * function log<T extends Compilable>(qb: T): T {
291
591
  * console.log(qb.compile())
292
592
  * return qb
293
593
  * }
294
594
  *
295
- * db.updateTable('person')
296
- * .set(values)
595
+ * await db.updateTable('person')
596
+ * .set({ first_name: 'John' })
297
597
  * .$call(log)
298
598
  * .execute()
299
599
  * ```
@@ -312,7 +612,9 @@ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST exte
312
612
  * ### Examples
313
613
  *
314
614
  * ```ts
315
- * async function updatePerson(id: number, updates: UpdateablePerson, returnLastName: boolean) {
615
+ * import type { PersonUpdate } from 'type-editor' // imaginary module
616
+ *
617
+ * async function updatePerson(id: number, updates: PersonUpdate, returnLastName: boolean) {
316
618
  * return await db
317
619
  * .updateTable('person')
318
620
  * .set(updates)
@@ -328,16 +630,16 @@ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST exte
328
630
  * the code. In the example above the return type of the `updatePerson` function is:
329
631
  *
330
632
  * ```ts
331
- * {
633
+ * Promise<{
332
634
  * id: number
333
635
  * first_name: string
334
636
  * last_name?: string
335
- * }
637
+ * }>
336
638
  * ```
337
639
  */
338
640
  $if<O2>(condition: boolean, func: (qb: this) => WheneableMergeQueryBuilder<any, any, any, O2>): O2 extends MergeResult ? WheneableMergeQueryBuilder<DB, TT, ST, MergeResult> : O2 extends O & infer E ? WheneableMergeQueryBuilder<DB, TT, ST, O & Partial<E>> : WheneableMergeQueryBuilder<DB, TT, ST, Partial<O2>>;
339
641
  toOperationNode(): MergeQueryNode;
340
- compile(): CompiledQuery<never>;
642
+ compile(): CompiledQuery<O>;
341
643
  /**
342
644
  * Executes the query and returns an array of rows.
343
645
  *
@@ -439,7 +741,7 @@ export declare class MatchedThenableMergeQueryBuilder<DB, TT extends keyof DB, S
439
741
  * .thenUpdate((ub) => ub
440
742
  * .set(sql`metadata['has_pets']`, 'Y')
441
743
  * .set({
442
- * updated_at: Date.now(),
744
+ * updated_at: new Date().toISOString(),
443
745
  * })
444
746
  * )
445
747
  * .execute()