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
@@ -138,11 +138,10 @@ export class InsertQueryBuilder {
138
138
  * .insertInto('person')
139
139
  * .values(({ ref, selectFrom, fn }) => ({
140
140
  * first_name: 'Jennifer',
141
- * last_name: sql`concat(${ani}, ${ston})`,
141
+ * last_name: sql<string>`concat(${ani}, ${ston})`,
142
142
  * middle_name: ref('first_name'),
143
143
  * age: selectFrom('person')
144
- * .select(fn.avg<number>('age')
145
- * .as('avg_age')),
144
+ * .select(fn.avg<number>('age').as('avg_age')),
146
145
  * }))
147
146
  * .executeTakeFirst()
148
147
  * ```
@@ -167,7 +166,7 @@ export class InsertQueryBuilder {
167
166
  * You can also use the callback version of subqueries or raw expressions:
168
167
  *
169
168
  * ```ts
170
- * db.with('jennifer', (db) => db
169
+ * await db.with('jennifer', (db) => db
171
170
  * .selectFrom('person')
172
171
  * .where('first_name', '=', 'Jennifer')
173
172
  * .select(['id', 'first_name', 'gender'])
@@ -177,6 +176,24 @@ export class InsertQueryBuilder {
177
176
  * name: eb.selectFrom('jennifer').select('first_name'),
178
177
  * species: 'cat',
179
178
  * }))
179
+ * .execute()
180
+ * ```
181
+ *
182
+ * The generated SQL (PostgreSQL):
183
+ *
184
+ * ```sql
185
+ * with "jennifer" as (
186
+ * select "id", "first_name", "gender"
187
+ * from "person"
188
+ * where "first_name" = $1
189
+ * limit $2
190
+ * )
191
+ * insert into "pet" ("owner_id", "name", "species")
192
+ * values (
193
+ * (select "id" from "jennifer"),
194
+ * (select "first_name" from "jennifer"),
195
+ * $3
196
+ * )
180
197
  * ```
181
198
  */
182
199
  values(insert) {
@@ -199,9 +216,10 @@ export class InsertQueryBuilder {
199
216
  * ### Examples
200
217
  *
201
218
  * ```ts
202
- * db.insertInto('person')
219
+ * await db.insertInto('person')
203
220
  * .columns(['first_name'])
204
221
  * .expression((eb) => eb.selectFrom('pet').select('pet.name'))
222
+ * .execute()
205
223
  * ```
206
224
  *
207
225
  * The generated SQL (PostgreSQL):
@@ -226,7 +244,9 @@ export class InsertQueryBuilder {
226
244
  *
227
245
  * <!-- siteExample("insert", "Insert subquery", 50) -->
228
246
  *
229
- * You can create an `INSERT INTO SELECT FROM` query using the `expression` method:
247
+ * You can create an `INSERT INTO SELECT FROM` query using the `expression` method.
248
+ * This API doesn't follow our WYSIWYG principles and might be a bit difficult to
249
+ * remember. The reasons for this design stem from implementation difficulties.
230
250
  *
231
251
  * ```ts
232
252
  * const result = await db.insertInto('person')
@@ -267,6 +287,12 @@ export class InsertQueryBuilder {
267
287
  * .defaultValues()
268
288
  * .execute()
269
289
  * ```
290
+ *
291
+ * The generated SQL (PostgreSQL):
292
+ *
293
+ * ```sql
294
+ * insert into "person" default values
295
+ * ```
270
296
  */
271
297
  defaultValues() {
272
298
  return new InsertQueryBuilder({
@@ -276,6 +302,37 @@ export class InsertQueryBuilder {
276
302
  }),
277
303
  });
278
304
  }
305
+ /**
306
+ * This can be used to add any additional SQL to the end of the query.
307
+ *
308
+ * ### Examples
309
+ *
310
+ * ```ts
311
+ * import { sql } from 'kysely'
312
+ *
313
+ * await db.insertInto('person')
314
+ * .values({
315
+ * first_name: 'John',
316
+ * last_name: 'Doe',
317
+ * gender: 'male',
318
+ * })
319
+ * .modifyEnd(sql`-- This is a comment`)
320
+ * .execute()
321
+ * ```
322
+ *
323
+ * The generated SQL (MySQL):
324
+ *
325
+ * ```sql
326
+ * insert into `person` ("first_name", "last_name", "gender")
327
+ * values (?, ?, ?) -- This is a comment
328
+ * ```
329
+ */
330
+ modifyEnd(modifier) {
331
+ return new InsertQueryBuilder({
332
+ ...this.#props,
333
+ queryNode: QueryNode.cloneWithEndModifier(this.#props.queryNode, modifier.toOperationNode()),
334
+ });
335
+ }
279
336
  /**
280
337
  * Changes an `insert into` query to an `insert ignore into` query.
281
338
  *
@@ -293,9 +350,19 @@ export class InsertQueryBuilder {
293
350
  * ```ts
294
351
  * await db.insertInto('person')
295
352
  * .ignore()
296
- * .values(values)
353
+ * .values({
354
+ * first_name: 'John',
355
+ * last_name: 'Doe',
356
+ * gender: 'female',
357
+ * })
297
358
  * .execute()
298
359
  * ```
360
+ *
361
+ * The generated SQL (MySQL):
362
+ *
363
+ * ```sql
364
+ * insert ignore into `person` ("first_name", "last_name", "gender") values (?, ?, ?)
365
+ * ```
299
366
  */
300
367
  ignore() {
301
368
  return new InsertQueryBuilder({
@@ -315,6 +382,8 @@ export class InsertQueryBuilder {
315
382
  * Insert the first 5 rows:
316
383
  *
317
384
  * ```ts
385
+ * import { sql } from 'kysely'
386
+ *
318
387
  * await db.insertInto('person')
319
388
  * .top(5)
320
389
  * .columns(['first_name', 'gender'])
@@ -333,6 +402,8 @@ export class InsertQueryBuilder {
333
402
  * Insert the first 50 percent of rows:
334
403
  *
335
404
  * ```ts
405
+ * import { sql } from 'kysely'
406
+ *
336
407
  * await db.insertInto('person')
337
408
  * .top(50, 'percent')
338
409
  * .columns(['first_name', 'gender'])
@@ -368,6 +439,7 @@ export class InsertQueryBuilder {
368
439
  * .values({
369
440
  * name: 'Catto',
370
441
  * species: 'cat',
442
+ * owner_id: 3,
371
443
  * })
372
444
  * .onConflict((oc) => oc
373
445
  * .column('name')
@@ -379,10 +451,10 @@ export class InsertQueryBuilder {
379
451
  * The generated SQL (PostgreSQL):
380
452
  *
381
453
  * ```sql
382
- * insert into "pet" ("name", "species")
383
- * values ($1, $2)
454
+ * insert into "pet" ("name", "species", "owner_id")
455
+ * values ($1, $2, $3)
384
456
  * on conflict ("name")
385
- * do update set "species" = $3
457
+ * do update set "species" = $4
386
458
  * ```
387
459
  *
388
460
  * You can provide the name of the constraint instead of a column name:
@@ -393,6 +465,7 @@ export class InsertQueryBuilder {
393
465
  * .values({
394
466
  * name: 'Catto',
395
467
  * species: 'cat',
468
+ * owner_id: 3,
396
469
  * })
397
470
  * .onConflict((oc) => oc
398
471
  * .constraint('pet_name_key')
@@ -404,10 +477,10 @@ export class InsertQueryBuilder {
404
477
  * The generated SQL (PostgreSQL):
405
478
  *
406
479
  * ```sql
407
- * insert into "pet" ("name", "species")
408
- * values ($1, $2)
480
+ * insert into "pet" ("name", "species", "owner_id")
481
+ * values ($1, $2, $3)
409
482
  * on conflict on constraint "pet_name_key"
410
- * do update set "species" = $3
483
+ * do update set "species" = $4
411
484
  * ```
412
485
  *
413
486
  * You can also specify an expression as the conflict target in case
@@ -421,9 +494,10 @@ export class InsertQueryBuilder {
421
494
  * .values({
422
495
  * name: 'Catto',
423
496
  * species: 'cat',
497
+ * owner_id: 3,
424
498
  * })
425
499
  * .onConflict((oc) => oc
426
- * .expression(sql`lower(name)`)
500
+ * .expression(sql<string>`lower(name)`)
427
501
  * .doUpdateSet({ species: 'hamster' })
428
502
  * )
429
503
  * .execute()
@@ -432,10 +506,10 @@ export class InsertQueryBuilder {
432
506
  * The generated SQL (PostgreSQL):
433
507
  *
434
508
  * ```sql
435
- * insert into "pet" ("name", "species")
436
- * values ($1, $2)
509
+ * insert into "pet" ("name", "species", "owner_id")
510
+ * values ($1, $2, $3)
437
511
  * on conflict (lower(name))
438
- * do update set "species" = $3
512
+ * do update set "species" = $4
439
513
  * ```
440
514
  *
441
515
  * You can add a filter for the update statement like this:
@@ -446,11 +520,12 @@ export class InsertQueryBuilder {
446
520
  * .values({
447
521
  * name: 'Catto',
448
522
  * species: 'cat',
523
+ * owner_id: 3,
449
524
  * })
450
525
  * .onConflict((oc) => oc
451
526
  * .column('name')
452
527
  * .doUpdateSet({ species: 'hamster' })
453
- * .where('excluded.name', '!=', 'Catto'')
528
+ * .where('excluded.name', '!=', 'Catto')
454
529
  * )
455
530
  * .execute()
456
531
  * ```
@@ -458,11 +533,11 @@ export class InsertQueryBuilder {
458
533
  * The generated SQL (PostgreSQL):
459
534
  *
460
535
  * ```sql
461
- * insert into "pet" ("name", "species")
462
- * values ($1, $2)
536
+ * insert into "pet" ("name", "species", "owner_id")
537
+ * values ($1, $2, $3)
463
538
  * on conflict ("name")
464
- * do update set "species" = $3
465
- * where "excluded"."name" != $4
539
+ * do update set "species" = $4
540
+ * where "excluded"."name" != $5
466
541
  * ```
467
542
  *
468
543
  * You can create an `on conflict do nothing` clauses like this:
@@ -473,6 +548,7 @@ export class InsertQueryBuilder {
473
548
  * .values({
474
549
  * name: 'Catto',
475
550
  * species: 'cat',
551
+ * owner_id: 3,
476
552
  * })
477
553
  * .onConflict((oc) => oc
478
554
  * .column('name')
@@ -484,8 +560,8 @@ export class InsertQueryBuilder {
484
560
  * The generated SQL (PostgreSQL):
485
561
  *
486
562
  * ```sql
487
- * insert into "pet" ("name", "species")
488
- * values ($1, $2)
563
+ * insert into "pet" ("name", "species", "owner_id")
564
+ * values ($1, $2, $3)
489
565
  * on conflict ("name") do nothing
490
566
  * ```
491
567
  *
@@ -494,8 +570,13 @@ export class InsertQueryBuilder {
494
570
  * `ExpressionBuilder`:
495
571
  *
496
572
  * ```ts
497
- * db.insertInto('person')
498
- * .values(person)
573
+ * await db.insertInto('person')
574
+ * .values({
575
+ * id: 1,
576
+ * first_name: 'John',
577
+ * last_name: 'Doe',
578
+ * gender: 'male',
579
+ * })
499
580
  * .onConflict(oc => oc
500
581
  * .column('id')
501
582
  * .doUpdateSet({
@@ -503,6 +584,18 @@ export class InsertQueryBuilder {
503
584
  * last_name: (eb) => eb.ref('excluded.last_name')
504
585
  * })
505
586
  * )
587
+ * .execute()
588
+ * ```
589
+ *
590
+ * The generated SQL (PostgreSQL):
591
+ *
592
+ * ```sql
593
+ * insert into "person" ("id", "first_name", "last_name", "gender")
594
+ * values ($1, $2, $3, $4)
595
+ * on conflict ("id")
596
+ * do update set
597
+ * "first_name" = "excluded"."first_name",
598
+ * "last_name" = "excluded"."last_name"
506
599
  * ```
507
600
  */
508
601
  onConflict(callback) {
@@ -529,8 +622,22 @@ export class InsertQueryBuilder {
529
622
  * ```ts
530
623
  * await db
531
624
  * .insertInto('person')
532
- * .values(values)
533
- * .onDuplicateKeyUpdate({ species: 'hamster' })
625
+ * .values({
626
+ * id: 1,
627
+ * first_name: 'John',
628
+ * last_name: 'Doe',
629
+ * gender: 'male',
630
+ * })
631
+ * .onDuplicateKeyUpdate({ updated_at: new Date().toISOString() })
632
+ * .execute()
633
+ * ```
634
+ *
635
+ * The generated SQL (MySQL):
636
+ *
637
+ * ```sql
638
+ * insert into `person` (`id`, `first_name`, `last_name`, `gender`)
639
+ * values (?, ?, ?, ?)
640
+ * on duplicate key update `updated_at` = ?
534
641
  * ```
535
642
  */
536
643
  onDuplicateKeyUpdate(update) {
@@ -553,22 +660,35 @@ export class InsertQueryBuilder {
553
660
  queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll()),
554
661
  });
555
662
  }
663
+ output(args) {
664
+ return new InsertQueryBuilder({
665
+ ...this.#props,
666
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectArg(args)),
667
+ });
668
+ }
669
+ outputAll(table) {
670
+ return new InsertQueryBuilder({
671
+ ...this.#props,
672
+ queryNode: QueryNode.cloneWithOutput(this.#props.queryNode, parseSelectAll(table)),
673
+ });
674
+ }
556
675
  /**
557
676
  * Clears all `returning` clauses from the query.
558
677
  *
559
678
  * ### Examples
560
679
  *
561
680
  * ```ts
562
- * db.insertInto('person')
563
- * .values({ first_name: 'James', last_name: 'Smith', age: 42 })
681
+ * await db.insertInto('person')
682
+ * .values({ first_name: 'James', last_name: 'Smith', gender: 'male' })
564
683
  * .returning(['first_name'])
565
684
  * .clearReturning()
685
+ * .execute()
566
686
  * ```
567
687
  *
568
688
  * The generated SQL(PostgreSQL):
569
689
  *
570
690
  * ```sql
571
- * insert into "person" ("James", "Smith", 42)
691
+ * insert into "person" ("first_name", "last_name", "gender") values ($1, $2, $3)
572
692
  * ```
573
693
  */
574
694
  clearReturning() {
@@ -589,13 +709,15 @@ export class InsertQueryBuilder {
589
709
  * The next example uses a helper function `log` to log a query:
590
710
  *
591
711
  * ```ts
712
+ * import type { Compilable } from 'kysely'
713
+ *
592
714
  * function log<T extends Compilable>(qb: T): T {
593
715
  * console.log(qb.compile())
594
716
  * return qb
595
717
  * }
596
718
  *
597
- * db.updateTable('person')
598
- * .set(values)
719
+ * await db.insertInto('person')
720
+ * .values({ first_name: 'John', last_name: 'Doe', gender: 'male' })
599
721
  * .$call(log)
600
722
  * .execute()
601
723
  * ```
@@ -616,7 +738,9 @@ export class InsertQueryBuilder {
616
738
  * ### Examples
617
739
  *
618
740
  * ```ts
619
- * async function insertPerson(values: InsertablePerson, returnLastName: boolean) {
741
+ * import type { NewPerson } from 'type-editor' // imaginary module
742
+ *
743
+ * async function insertPerson(values: NewPerson, returnLastName: boolean) {
620
744
  * return await db
621
745
  * .insertInto('person')
622
746
  * .values(values)
@@ -631,11 +755,11 @@ export class InsertQueryBuilder {
631
755
  * the code. In the example above the return type of the `insertPerson` function is:
632
756
  *
633
757
  * ```ts
634
- * {
758
+ * Promise<{
635
759
  * id: number
636
760
  * first_name: string
637
761
  * last_name?: string
638
- * }
762
+ * }>
639
763
  * ```
640
764
  */
641
765
  $if(condition, func) {
@@ -673,23 +797,41 @@ export class InsertQueryBuilder {
673
797
  * Turn this code:
674
798
  *
675
799
  * ```ts
800
+ * import type { Person } from 'type-editor' // imaginary module
801
+ *
676
802
  * const person = await db.insertInto('person')
677
- * .values({ ...inputPerson, nullable_column: 'hell yeah!' })
803
+ * .values({
804
+ * first_name: 'John',
805
+ * last_name: 'Doe',
806
+ * gender: 'male',
807
+ * nullable_column: 'hell yeah!'
808
+ * })
678
809
  * .returningAll()
679
810
  * .executeTakeFirstOrThrow()
680
811
  *
681
- * if (nullable_column) {
812
+ * if (isWithNoNullValue(person)) {
682
813
  * functionThatExpectsPersonWithNonNullValue(person)
683
814
  * }
815
+ *
816
+ * function isWithNoNullValue(person: Person): person is Person & { nullable_column: string } {
817
+ * return person.nullable_column != null
818
+ * }
684
819
  * ```
685
820
  *
686
821
  * Into this:
687
822
  *
688
823
  * ```ts
824
+ * import type { NotNull } from 'kysely'
825
+ *
689
826
  * const person = await db.insertInto('person')
690
- * .values({ ...inputPerson, nullable_column: 'hell yeah!' })
827
+ * .values({
828
+ * first_name: 'John',
829
+ * last_name: 'Doe',
830
+ * gender: 'male',
831
+ * nullable_column: 'hell yeah!'
832
+ * })
691
833
  * .returningAll()
692
- * .$narrowType<{ nullable_column: string }>()
834
+ * .$narrowType<{ nullable_column: NotNull }>()
693
835
  * .executeTakeFirstOrThrow()
694
836
  *
695
837
  * functionThatExpectsPersonWithNonNullValue(person)
@@ -701,17 +843,17 @@ export class InsertQueryBuilder {
701
843
  /**
702
844
  * Asserts that query's output row type equals the given type `T`.
703
845
  *
704
- * This method can be used to simplify excessively complex types to make typescript happy
846
+ * This method can be used to simplify excessively complex types to make TypeScript happy
705
847
  * and much faster.
706
848
  *
707
849
  * Kysely uses complex type magic to achieve its type safety. This complexity is sometimes too much
708
- * for typescript and you get errors like this:
850
+ * for TypeScript and you get errors like this:
709
851
  *
710
852
  * ```
711
853
  * error TS2589: Type instantiation is excessively deep and possibly infinite.
712
854
  * ```
713
855
  *
714
- * In these case you can often use this method to help typescript a little bit. When you use this
856
+ * In these case you can often use this method to help TypeScript a little bit. When you use this
715
857
  * method to assert the output type of a query, Kysely can drop the complex output type that
716
858
  * consists of multiple nested helper types and replace it with the simple asserted type.
717
859
  *
@@ -721,22 +863,29 @@ export class InsertQueryBuilder {
721
863
  * ### Examples
722
864
  *
723
865
  * ```ts
724
- * const result = await db
725
- * .with('new_person', (qb) => qb
726
- * .insertInto('person')
727
- * .values(person)
728
- * .returning('id')
729
- * .$assertType<{ id: string }>()
730
- * )
731
- * .with('new_pet', (qb) => qb
732
- * .insertInto('pet')
733
- * .values((eb) => ({ owner_id: eb.selectFrom('new_person').select('id'), ...pet }))
734
- * .returning(['name as pet_name', 'species'])
735
- * .$assertType<{ pet_name: string, species: Species }>()
736
- * )
737
- * .selectFrom(['new_person', 'new_pet'])
738
- * .selectAll()
739
- * .executeTakeFirstOrThrow()
866
+ * import type { NewPerson, NewPet, Species } from 'type-editor' // imaginary module
867
+ *
868
+ * async function insertPersonAndPet(person: NewPerson, pet: Omit<NewPet, 'owner_id'>) {
869
+ * return await db
870
+ * .with('new_person', (qb) => qb
871
+ * .insertInto('person')
872
+ * .values(person)
873
+ * .returning('id')
874
+ * .$assertType<{ id: number }>()
875
+ * )
876
+ * .with('new_pet', (qb) => qb
877
+ * .insertInto('pet')
878
+ * .values((eb) => ({
879
+ * owner_id: eb.selectFrom('new_person').select('id'),
880
+ * ...pet
881
+ * }))
882
+ * .returning(['name as pet_name', 'species'])
883
+ * .$assertType<{ pet_name: string, species: Species }>()
884
+ * )
885
+ * .selectFrom(['new_person', 'new_pet'])
886
+ * .selectAll()
887
+ * .executeTakeFirstOrThrow()
888
+ * }
740
889
  * ```
741
890
  */
742
891
  $assertType() {
@@ -764,9 +913,11 @@ export class InsertQueryBuilder {
764
913
  */
765
914
  async execute() {
766
915
  const compiledQuery = this.compile();
767
- const query = compiledQuery.query;
768
916
  const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
769
- if (this.#props.executor.adapter.supportsReturning && query.returning) {
917
+ const { adapter } = this.#props.executor;
918
+ const query = compiledQuery.query;
919
+ if ((query.returning && adapter.supportsReturning) ||
920
+ (query.output && adapter.supportsOutput)) {
770
921
  return result.rows;
771
922
  }
772
923
  return [
@@ -13,12 +13,17 @@
13
13
  * ### Examples
14
14
  *
15
15
  * ```ts
16
- * const result = await db
17
- * .insertInto('person')
18
- * .values(person)
19
- * .executeTakeFirst()
16
+ * import type { NewPerson } from 'type-editor' // imaginary module
20
17
  *
21
- * console.log(result.insertId)
18
+ * async function insertPerson(person: NewPerson) {
19
+ * const result = await db
20
+ * .insertInto('person')
21
+ * .values(person)
22
+ * .executeTakeFirstOrThrow()
23
+ *
24
+ * console.log(result.insertId) // relevant on MySQL
25
+ * console.log(result.numInsertedOrUpdatedRows) // always relevant
26
+ * }
22
27
  * ```
23
28
  */
24
29
  export declare class InsertResult {
@@ -14,12 +14,17 @@
14
14
  * ### Examples
15
15
  *
16
16
  * ```ts
17
- * const result = await db
18
- * .insertInto('person')
19
- * .values(person)
20
- * .executeTakeFirst()
17
+ * import type { NewPerson } from 'type-editor' // imaginary module
21
18
  *
22
- * console.log(result.insertId)
19
+ * async function insertPerson(person: NewPerson) {
20
+ * const result = await db
21
+ * .insertInto('person')
22
+ * .values(person)
23
+ * .executeTakeFirstOrThrow()
24
+ *
25
+ * console.log(result.insertId) // relevant on MySQL
26
+ * console.log(result.numInsertedOrUpdatedRows) // always relevant
27
+ * }
23
28
  * ```
24
29
  */
25
30
  export class InsertResult {