kysely 0.27.6 → 0.28.1

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 (363) hide show
  1. package/README.md +169 -1
  2. package/deno.check.d.ts +7 -0
  3. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  4. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +6 -3
  5. package/dist/cjs/dialect/mssql/mssql-driver.js +33 -19
  6. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  7. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +11 -0
  8. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +4 -0
  9. package/dist/cjs/dialect/mysql/mysql-driver.js +27 -12
  10. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +4 -0
  11. package/dist/cjs/dialect/postgres/postgres-driver.js +28 -18
  12. package/dist/cjs/dialect/postgres/postgres-introspector.js +7 -17
  13. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +4 -0
  14. package/dist/cjs/dialect/sqlite/sqlite-driver.js +19 -13
  15. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  16. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +4 -0
  17. package/dist/cjs/driver/database-connection.d.ts +0 -4
  18. package/dist/cjs/driver/driver.d.ts +17 -0
  19. package/dist/cjs/driver/driver.js +13 -1
  20. package/dist/cjs/driver/dummy-driver.d.ts +3 -0
  21. package/dist/cjs/driver/dummy-driver.js +9 -0
  22. package/dist/cjs/driver/runtime-driver.d.ts +4 -0
  23. package/dist/cjs/driver/runtime-driver.js +43 -3
  24. package/dist/cjs/expression/expression-builder.d.ts +7 -10
  25. package/dist/cjs/helpers/postgres.d.ts +48 -0
  26. package/dist/cjs/helpers/postgres.js +50 -0
  27. package/dist/cjs/index.d.ts +13 -2
  28. package/dist/cjs/index.js +13 -2
  29. package/dist/cjs/kysely.d.ts +339 -2
  30. package/dist/cjs/kysely.js +465 -11
  31. package/dist/cjs/migration/migrator.d.ts +8 -0
  32. package/dist/cjs/migration/migrator.js +1 -1
  33. package/dist/cjs/operation-node/aggregate-function-node.d.ts +2 -1
  34. package/dist/cjs/operation-node/aggregate-function-node.js +4 -3
  35. package/dist/cjs/operation-node/alter-table-node.d.ts +3 -1
  36. package/dist/cjs/operation-node/collate-node.d.ts +13 -0
  37. package/dist/cjs/operation-node/collate-node.js +19 -0
  38. package/dist/cjs/operation-node/constraint-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/create-type-node.js +1 -1
  41. package/dist/cjs/operation-node/delete-query-node.d.ts +8 -2
  42. package/dist/cjs/operation-node/delete-query-node.js +11 -15
  43. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -0
  44. package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
  45. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  46. package/dist/cjs/operation-node/merge-query-node.d.ts +2 -0
  47. package/dist/cjs/operation-node/operation-node-transformer.d.ts +106 -97
  48. package/dist/cjs/operation-node/operation-node-transformer.js +352 -312
  49. package/dist/cjs/operation-node/operation-node-visitor.d.ts +9 -1
  50. package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
  51. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  52. package/dist/cjs/operation-node/or-action-node.d.ts +12 -0
  53. package/dist/cjs/operation-node/or-action-node.js +18 -0
  54. package/dist/cjs/operation-node/order-by-item-node.d.ts +5 -0
  55. package/dist/cjs/operation-node/order-by-item-node.js +6 -0
  56. package/dist/cjs/operation-node/primary-key-constraint-node.d.ts +29 -0
  57. package/dist/cjs/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  58. package/dist/cjs/operation-node/query-node.d.ts +7 -0
  59. package/dist/cjs/operation-node/query-node.js +15 -0
  60. package/dist/cjs/operation-node/refresh-materialized-view-node.d.ts +17 -0
  61. package/dist/cjs/operation-node/refresh-materialized-view-node.js +25 -0
  62. package/dist/cjs/operation-node/rename-constraint-node.d.ts +14 -0
  63. package/dist/cjs/operation-node/rename-constraint-node.js +20 -0
  64. package/dist/cjs/operation-node/select-query-node.d.ts +8 -2
  65. package/dist/cjs/operation-node/select-query-node.js +11 -15
  66. package/dist/cjs/operation-node/unique-constraint-node.d.ts +2 -0
  67. package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
  68. package/dist/cjs/operation-node/update-query-node.js +5 -2
  69. package/dist/cjs/parser/collate-parser.d.ts +1 -0
  70. package/dist/cjs/parser/collate-parser.js +2 -0
  71. package/dist/cjs/parser/delete-from-parser.d.ts +5 -0
  72. package/dist/cjs/parser/delete-from-parser.js +2 -0
  73. package/dist/cjs/parser/join-parser.d.ts +1 -1
  74. package/dist/cjs/parser/join-parser.js +7 -1
  75. package/dist/cjs/parser/merge-into-parser.d.ts +5 -0
  76. package/dist/cjs/parser/merge-into-parser.js +2 -0
  77. package/dist/cjs/parser/order-by-parser.d.ts +18 -5
  78. package/dist/cjs/parser/order-by-parser.js +24 -14
  79. package/dist/cjs/parser/savepoint-parser.d.ts +4 -0
  80. package/dist/cjs/parser/savepoint-parser.js +11 -0
  81. package/dist/cjs/parser/select-from-parser.d.ts +4 -0
  82. package/dist/cjs/parser/select-from-parser.js +2 -0
  83. package/dist/cjs/parser/table-parser.d.ts +2 -5
  84. package/dist/cjs/parser/update-parser.d.ts +5 -0
  85. package/dist/cjs/parser/update-parser.js +2 -0
  86. package/dist/cjs/parser/update-set-parser.d.ts +7 -4
  87. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
  88. package/dist/cjs/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  89. package/dist/cjs/plugin/camel-case/camel-case-transformer.js +2 -2
  90. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  91. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  92. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  93. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  94. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +162 -0
  95. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  96. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +29 -0
  97. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  98. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.js +66 -0
  99. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.js +1 -1
  100. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  101. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.js +6 -4
  102. package/dist/cjs/plugin/with-schema/with-schema-plugin.js +1 -1
  103. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +6 -5
  104. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +29 -24
  105. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +83 -5
  106. package/dist/cjs/query-builder/aggregate-function-builder.js +15 -27
  107. package/dist/cjs/query-builder/cte-builder.js +0 -2
  108. package/dist/cjs/query-builder/delete-query-builder.d.ts +36 -47
  109. package/dist/cjs/query-builder/delete-query-builder.js +12 -78
  110. package/dist/cjs/query-builder/function-module.d.ts +31 -4
  111. package/dist/cjs/query-builder/insert-query-builder.d.ts +161 -6
  112. package/dist/cjs/query-builder/insert-query-builder.js +197 -10
  113. package/dist/cjs/query-builder/join-builder.js +0 -2
  114. package/dist/cjs/query-builder/merge-query-builder.d.ts +145 -3
  115. package/dist/cjs/query-builder/merge-query-builder.js +28 -7
  116. package/dist/cjs/query-builder/on-conflict-builder.js +0 -4
  117. package/dist/cjs/query-builder/order-by-interface.d.ts +176 -0
  118. package/dist/cjs/query-builder/order-by-interface.js +2 -0
  119. package/dist/cjs/query-builder/order-by-item-builder.d.ts +43 -0
  120. package/dist/cjs/query-builder/order-by-item-builder.js +75 -0
  121. package/dist/cjs/query-builder/over-builder.d.ts +43 -6
  122. package/dist/cjs/query-builder/over-builder.js +8 -25
  123. package/dist/cjs/query-builder/returning-interface.d.ts +20 -3
  124. package/dist/cjs/query-builder/select-query-builder.d.ts +279 -98
  125. package/dist/cjs/query-builder/select-query-builder.js +26 -26
  126. package/dist/cjs/query-builder/update-query-builder.d.ts +88 -9
  127. package/dist/cjs/query-builder/update-query-builder.js +17 -15
  128. package/dist/cjs/query-compiler/compiled-query.d.ts +2 -0
  129. package/dist/cjs/query-compiler/compiled-query.js +2 -0
  130. package/dist/cjs/query-compiler/default-query-compiler.d.ts +17 -2
  131. package/dist/cjs/query-compiler/default-query-compiler.js +97 -2
  132. package/dist/cjs/query-compiler/query-compiler.d.ts +4 -2
  133. package/dist/cjs/query-creator.d.ts +23 -25
  134. package/dist/cjs/query-creator.js +280 -8
  135. package/dist/cjs/query-executor/default-query-executor.d.ts +2 -1
  136. package/dist/cjs/query-executor/default-query-executor.js +2 -2
  137. package/dist/cjs/query-executor/query-executor-base.js +7 -25
  138. package/dist/cjs/raw-builder/raw-builder.js +0 -3
  139. package/dist/cjs/raw-builder/sql.d.ts +3 -3
  140. package/dist/cjs/raw-builder/sql.js +1 -1
  141. package/dist/cjs/schema/alter-column-builder.js +0 -3
  142. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  143. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  144. package/dist/cjs/schema/alter-table-add-index-builder.js +0 -2
  145. package/dist/cjs/schema/alter-table-builder.d.ts +7 -3
  146. package/dist/cjs/schema/alter-table-builder.js +21 -10
  147. package/dist/cjs/schema/alter-table-drop-constraint-builder.js +0 -2
  148. package/dist/cjs/schema/alter-table-executor.js +0 -2
  149. package/dist/cjs/schema/check-constraint-builder.d.ts +13 -0
  150. package/dist/cjs/schema/check-constraint-builder.js +20 -0
  151. package/dist/cjs/schema/column-definition-builder.js +0 -2
  152. package/dist/cjs/schema/create-index-builder.js +1 -3
  153. package/dist/cjs/schema/create-schema-builder.js +0 -2
  154. package/dist/cjs/schema/create-table-builder.d.ts +5 -4
  155. package/dist/cjs/schema/create-table-builder.js +9 -7
  156. package/dist/cjs/schema/create-type-builder.d.ts +1 -1
  157. package/dist/cjs/schema/create-type-builder.js +0 -2
  158. package/dist/cjs/schema/create-view-builder.js +0 -2
  159. package/dist/cjs/schema/drop-index-builder.js +0 -2
  160. package/dist/cjs/schema/drop-schema-builder.js +0 -2
  161. package/dist/cjs/schema/drop-table-builder.js +0 -2
  162. package/dist/cjs/schema/drop-type-builder.js +0 -2
  163. package/dist/cjs/schema/drop-view-builder.js +0 -2
  164. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +9 -0
  165. package/dist/cjs/schema/foreign-key-constraint-builder.js +16 -2
  166. package/dist/cjs/schema/primary-key-constraint-builder.d.ts +17 -0
  167. package/dist/cjs/schema/primary-key-constraint-builder.js +37 -0
  168. package/dist/cjs/schema/refresh-materialized-view-builder.d.ts +47 -0
  169. package/dist/cjs/schema/refresh-materialized-view-builder.js +75 -0
  170. package/dist/cjs/schema/schema.d.ts +14 -0
  171. package/dist/cjs/schema/schema.js +21 -0
  172. package/dist/cjs/schema/unique-constraint-builder.d.ts +10 -1
  173. package/dist/cjs/schema/unique-constraint-builder.js +26 -5
  174. package/dist/cjs/util/infer-result.d.ts +1 -1
  175. package/dist/cjs/util/log.d.ts +1 -0
  176. package/dist/cjs/util/log.js +3 -2
  177. package/dist/cjs/util/provide-controlled-connection.d.ts +7 -0
  178. package/dist/cjs/util/provide-controlled-connection.js +24 -0
  179. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  180. package/dist/esm/dialect/mssql/mssql-driver.d.ts +6 -3
  181. package/dist/esm/dialect/mssql/mssql-driver.js +33 -19
  182. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  183. package/dist/esm/dialect/mssql/mssql-query-compiler.js +11 -0
  184. package/dist/esm/dialect/mysql/mysql-driver.d.ts +4 -0
  185. package/dist/esm/dialect/mysql/mysql-driver.js +27 -12
  186. package/dist/esm/dialect/postgres/postgres-driver.d.ts +4 -0
  187. package/dist/esm/dialect/postgres/postgres-driver.js +28 -18
  188. package/dist/esm/dialect/postgres/postgres-introspector.js +7 -17
  189. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +4 -0
  190. package/dist/esm/dialect/sqlite/sqlite-driver.js +19 -13
  191. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  192. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +4 -0
  193. package/dist/esm/driver/database-connection.d.ts +0 -4
  194. package/dist/esm/driver/driver.d.ts +17 -0
  195. package/dist/esm/driver/driver.js +11 -0
  196. package/dist/esm/driver/dummy-driver.d.ts +3 -0
  197. package/dist/esm/driver/dummy-driver.js +9 -0
  198. package/dist/esm/driver/runtime-driver.d.ts +4 -0
  199. package/dist/esm/driver/runtime-driver.js +43 -3
  200. package/dist/esm/expression/expression-builder.d.ts +7 -10
  201. package/dist/esm/helpers/postgres.d.ts +48 -0
  202. package/dist/esm/helpers/postgres.js +49 -0
  203. package/dist/esm/index.d.ts +13 -2
  204. package/dist/esm/index.js +11 -1
  205. package/dist/esm/kysely.d.ts +339 -2
  206. package/dist/esm/kysely.js +461 -10
  207. package/dist/esm/migration/migrator.d.ts +8 -0
  208. package/dist/esm/migration/migrator.js +1 -1
  209. package/dist/esm/operation-node/aggregate-function-node.d.ts +2 -1
  210. package/dist/esm/operation-node/aggregate-function-node.js +4 -3
  211. package/dist/esm/operation-node/alter-table-node.d.ts +3 -1
  212. package/dist/esm/operation-node/collate-node.d.ts +13 -0
  213. package/dist/esm/operation-node/collate-node.js +17 -0
  214. package/dist/esm/operation-node/constraint-node.d.ts +1 -1
  215. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  216. package/dist/esm/operation-node/create-type-node.js +1 -1
  217. package/dist/esm/operation-node/delete-query-node.d.ts +8 -2
  218. package/dist/esm/operation-node/delete-query-node.js +11 -15
  219. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -0
  220. package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
  221. package/dist/esm/operation-node/join-node.d.ts +1 -1
  222. package/dist/esm/operation-node/merge-query-node.d.ts +2 -0
  223. package/dist/esm/operation-node/operation-node-transformer.d.ts +106 -97
  224. package/dist/esm/operation-node/operation-node-transformer.js +352 -312
  225. package/dist/esm/operation-node/operation-node-visitor.d.ts +9 -1
  226. package/dist/esm/operation-node/operation-node-visitor.js +4 -0
  227. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  228. package/dist/esm/operation-node/or-action-node.d.ts +12 -0
  229. package/dist/esm/operation-node/or-action-node.js +16 -0
  230. package/dist/esm/operation-node/order-by-item-node.d.ts +5 -0
  231. package/dist/esm/operation-node/order-by-item-node.js +6 -0
  232. package/dist/esm/operation-node/primary-key-constraint-node.d.ts +29 -0
  233. package/dist/esm/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  234. package/dist/esm/operation-node/query-node.d.ts +7 -0
  235. package/dist/esm/operation-node/query-node.js +15 -0
  236. package/dist/esm/operation-node/refresh-materialized-view-node.d.ts +17 -0
  237. package/dist/esm/operation-node/refresh-materialized-view-node.js +23 -0
  238. package/dist/esm/operation-node/rename-constraint-node.d.ts +14 -0
  239. package/dist/esm/operation-node/rename-constraint-node.js +18 -0
  240. package/dist/esm/operation-node/select-query-node.d.ts +8 -2
  241. package/dist/esm/operation-node/select-query-node.js +11 -15
  242. package/dist/esm/operation-node/unique-constraint-node.d.ts +2 -0
  243. package/dist/esm/operation-node/update-query-node.d.ts +3 -4
  244. package/dist/esm/operation-node/update-query-node.js +5 -2
  245. package/dist/esm/parser/collate-parser.d.ts +1 -0
  246. package/dist/esm/parser/collate-parser.js +2 -0
  247. package/dist/esm/parser/delete-from-parser.d.ts +5 -0
  248. package/dist/esm/parser/delete-from-parser.js +2 -0
  249. package/dist/esm/parser/join-parser.d.ts +1 -1
  250. package/dist/esm/parser/join-parser.js +7 -1
  251. package/dist/esm/parser/merge-into-parser.d.ts +5 -0
  252. package/dist/esm/parser/merge-into-parser.js +2 -0
  253. package/dist/esm/parser/order-by-parser.d.ts +18 -5
  254. package/dist/esm/parser/order-by-parser.js +27 -17
  255. package/dist/esm/parser/savepoint-parser.d.ts +4 -0
  256. package/dist/esm/parser/savepoint-parser.js +9 -0
  257. package/dist/esm/parser/select-from-parser.d.ts +4 -0
  258. package/dist/esm/parser/select-from-parser.js +2 -0
  259. package/dist/esm/parser/table-parser.d.ts +2 -5
  260. package/dist/esm/parser/update-parser.d.ts +5 -0
  261. package/dist/esm/parser/update-parser.js +2 -0
  262. package/dist/esm/parser/update-set-parser.d.ts +7 -4
  263. package/dist/esm/plugin/camel-case/camel-case-plugin.js +1 -1
  264. package/dist/esm/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  265. package/dist/esm/plugin/camel-case/camel-case-transformer.js +2 -2
  266. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  267. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  268. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  269. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  270. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +159 -0
  271. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  272. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +26 -0
  273. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  274. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.js +63 -0
  275. package/dist/esm/plugin/immediate-value/immediate-value-plugin.js +1 -1
  276. package/dist/esm/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  277. package/dist/esm/plugin/immediate-value/immediate-value-transformer.js +6 -4
  278. package/dist/esm/plugin/with-schema/with-schema-plugin.js +1 -1
  279. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +6 -5
  280. package/dist/esm/plugin/with-schema/with-schema-transformer.js +29 -24
  281. package/dist/esm/query-builder/aggregate-function-builder.d.ts +83 -5
  282. package/dist/esm/query-builder/aggregate-function-builder.js +15 -27
  283. package/dist/esm/query-builder/cte-builder.js +0 -2
  284. package/dist/esm/query-builder/delete-query-builder.d.ts +36 -47
  285. package/dist/esm/query-builder/delete-query-builder.js +12 -78
  286. package/dist/esm/query-builder/function-module.d.ts +31 -4
  287. package/dist/esm/query-builder/insert-query-builder.d.ts +161 -6
  288. package/dist/esm/query-builder/insert-query-builder.js +197 -10
  289. package/dist/esm/query-builder/join-builder.js +0 -2
  290. package/dist/esm/query-builder/merge-query-builder.d.ts +145 -3
  291. package/dist/esm/query-builder/merge-query-builder.js +29 -8
  292. package/dist/esm/query-builder/on-conflict-builder.js +0 -4
  293. package/dist/esm/query-builder/order-by-interface.d.ts +176 -0
  294. package/dist/esm/query-builder/order-by-interface.js +2 -0
  295. package/dist/esm/query-builder/order-by-item-builder.d.ts +43 -0
  296. package/dist/esm/query-builder/order-by-item-builder.js +72 -0
  297. package/dist/esm/query-builder/over-builder.d.ts +43 -6
  298. package/dist/esm/query-builder/over-builder.js +8 -25
  299. package/dist/esm/query-builder/returning-interface.d.ts +20 -3
  300. package/dist/esm/query-builder/select-query-builder.d.ts +279 -98
  301. package/dist/esm/query-builder/select-query-builder.js +26 -26
  302. package/dist/esm/query-builder/update-query-builder.d.ts +88 -9
  303. package/dist/esm/query-builder/update-query-builder.js +17 -15
  304. package/dist/esm/query-compiler/compiled-query.d.ts +2 -0
  305. package/dist/esm/query-compiler/compiled-query.js +2 -0
  306. package/dist/esm/query-compiler/default-query-compiler.d.ts +17 -2
  307. package/dist/esm/query-compiler/default-query-compiler.js +97 -2
  308. package/dist/esm/query-compiler/query-compiler.d.ts +4 -2
  309. package/dist/esm/query-creator.d.ts +23 -25
  310. package/dist/esm/query-creator.js +281 -9
  311. package/dist/esm/query-executor/default-query-executor.d.ts +2 -1
  312. package/dist/esm/query-executor/default-query-executor.js +2 -2
  313. package/dist/esm/query-executor/query-executor-base.js +7 -25
  314. package/dist/esm/raw-builder/raw-builder.js +0 -3
  315. package/dist/esm/raw-builder/sql.d.ts +3 -3
  316. package/dist/esm/raw-builder/sql.js +1 -1
  317. package/dist/esm/schema/alter-column-builder.js +0 -3
  318. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  319. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  320. package/dist/esm/schema/alter-table-add-index-builder.js +0 -2
  321. package/dist/esm/schema/alter-table-builder.d.ts +7 -3
  322. package/dist/esm/schema/alter-table-builder.js +22 -11
  323. package/dist/esm/schema/alter-table-drop-constraint-builder.js +0 -2
  324. package/dist/esm/schema/alter-table-executor.js +0 -2
  325. package/dist/esm/schema/check-constraint-builder.d.ts +13 -0
  326. package/dist/esm/schema/check-constraint-builder.js +17 -0
  327. package/dist/esm/schema/column-definition-builder.js +0 -2
  328. package/dist/esm/schema/create-index-builder.js +1 -3
  329. package/dist/esm/schema/create-schema-builder.js +0 -2
  330. package/dist/esm/schema/create-table-builder.d.ts +5 -4
  331. package/dist/esm/schema/create-table-builder.js +10 -8
  332. package/dist/esm/schema/create-type-builder.d.ts +1 -1
  333. package/dist/esm/schema/create-type-builder.js +0 -2
  334. package/dist/esm/schema/create-view-builder.js +0 -2
  335. package/dist/esm/schema/drop-index-builder.js +0 -2
  336. package/dist/esm/schema/drop-schema-builder.js +0 -2
  337. package/dist/esm/schema/drop-table-builder.js +0 -2
  338. package/dist/esm/schema/drop-type-builder.js +0 -2
  339. package/dist/esm/schema/drop-view-builder.js +0 -2
  340. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +9 -0
  341. package/dist/esm/schema/foreign-key-constraint-builder.js +16 -2
  342. package/dist/esm/schema/primary-key-constraint-builder.d.ts +17 -0
  343. package/dist/esm/schema/primary-key-constraint-builder.js +34 -0
  344. package/dist/esm/schema/refresh-materialized-view-builder.d.ts +47 -0
  345. package/dist/esm/schema/refresh-materialized-view-builder.js +72 -0
  346. package/dist/esm/schema/schema.d.ts +14 -0
  347. package/dist/esm/schema/schema.js +21 -0
  348. package/dist/esm/schema/unique-constraint-builder.d.ts +10 -1
  349. package/dist/esm/schema/unique-constraint-builder.js +26 -5
  350. package/dist/esm/util/infer-result.d.ts +1 -1
  351. package/dist/esm/util/log.d.ts +1 -0
  352. package/dist/esm/util/log.js +3 -2
  353. package/dist/esm/util/provide-controlled-connection.d.ts +7 -0
  354. package/dist/esm/util/provide-controlled-connection.js +22 -0
  355. package/outdated-typescript.d.ts +5 -0
  356. package/package.json +16 -2
  357. package/CONTRIBUTING.md +0 -168
  358. package/dist/cjs/operation-node/primary-constraint-node.d.ts +0 -15
  359. package/dist/cjs/util/prevent-await.d.ts +0 -1
  360. package/dist/cjs/util/prevent-await.js +0 -13
  361. package/dist/esm/operation-node/primary-constraint-node.d.ts +0 -15
  362. package/dist/esm/util/prevent-await.d.ts +0 -1
  363. package/dist/esm/util/prevent-await.js +0 -11
@@ -1,38 +1,22 @@
1
1
  /// <reference types="./over-builder.d.ts" />
2
2
  import { OverNode } from '../operation-node/over-node.js';
3
+ import { QueryNode } from '../operation-node/query-node.js';
3
4
  import { parseOrderBy, } from '../parser/order-by-parser.js';
4
5
  import { parsePartitionBy, } from '../parser/partition-by-parser.js';
5
6
  import { freeze } from '../util/object-utils.js';
6
- import { preventAwait } from '../util/prevent-await.js';
7
7
  export class OverBuilder {
8
8
  #props;
9
9
  constructor(props) {
10
10
  this.#props = freeze(props);
11
11
  }
12
- /**
13
- * Adds an order by clause item inside the over function.
14
- *
15
- * ```ts
16
- * const result = await db
17
- * .selectFrom('person')
18
- * .select(
19
- * (eb) => eb.fn.avg<number>('age').over(
20
- * ob => ob.orderBy('first_name', 'asc').orderBy('last_name', 'asc')
21
- * ).as('average_age')
22
- * )
23
- * .execute()
24
- * ```
25
- *
26
- * The generated SQL (PostgreSQL):
27
- *
28
- * ```sql
29
- * select avg("age") over(order by "first_name" asc, "last_name" asc) as "average_age"
30
- * from "person"
31
- * ```
32
- */
33
- orderBy(orderBy, direction) {
12
+ orderBy(...args) {
13
+ return new OverBuilder({
14
+ overNode: OverNode.cloneWithOrderByItems(this.#props.overNode, parseOrderBy(args)),
15
+ });
16
+ }
17
+ clearOrderBy() {
34
18
  return new OverBuilder({
35
- overNode: OverNode.cloneWithOrderByItems(this.#props.overNode, parseOrderBy([orderBy, direction])),
19
+ overNode: QueryNode.cloneWithoutOrderBy(this.#props.overNode),
36
20
  });
37
21
  }
38
22
  partitionBy(partitionBy) {
@@ -51,4 +35,3 @@ export class OverBuilder {
51
35
  return this.#props.overNode;
52
36
  }
53
37
  }
54
- preventAwait(OverBuilder, "don't await OverBuilder instances. They are never executed directly and are always just a part of a query.");
@@ -1,4 +1,4 @@
1
- import { ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
1
+ import { ReturningAllRow, ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
2
2
  import { SelectCallback, SelectExpression } from '../parser/select-parser.js';
3
3
  import { Selectable } from '../util/column-type.js';
4
4
  export interface ReturningInterface<DB, TB extends keyof DB, O> {
@@ -6,7 +6,7 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
6
6
  * Allows you to return data from modified rows.
7
7
  *
8
8
  * On supported databases like PostgreSQL, this method can be chained to
9
- * `insert`, `update` and `delete` queries to return data.
9
+ * `insert`, `update`, `delete` and `merge` queries to return data.
10
10
  *
11
11
  * Note that on SQLite you need to give aliases for the expressions to avoid
12
12
  * [this bug](https://sqlite.org/forum/forumpost/033daf0b32) in SQLite.
@@ -65,10 +65,27 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
65
65
  returning<CB extends SelectCallback<DB, TB>>(callback: CB): ReturningInterface<DB, TB, ReturningCallbackRow<DB, TB, O, CB>>;
66
66
  returning<SE extends SelectExpression<DB, TB>>(selection: SE): ReturningInterface<DB, TB, ReturningRow<DB, TB, O, SE>>;
67
67
  /**
68
- * Adds a `returning *` to an insert/update/delete query on databases
68
+ * Adds a `returning *` to an insert/update/delete/merge query on databases
69
69
  * that support `returning` such as PostgreSQL.
70
70
  *
71
71
  * Also see the {@link returning} method.
72
72
  */
73
73
  returningAll(): ReturningInterface<DB, TB, Selectable<DB[TB]>>;
74
74
  }
75
+ export interface MultiTableReturningInterface<DB, TB extends keyof DB, O> extends ReturningInterface<DB, TB, O> {
76
+ /**
77
+ * Adds a `returning *` or `returning table.*` to an insert/update/delete/merge
78
+ * query on databases that support `returning` such as PostgreSQL.
79
+ *
80
+ * Also see the {@link returning} method.
81
+ */
82
+ returningAll<T extends TB>(tables: ReadonlyArray<T>): MultiTableReturningInterface<DB, TB, ReturningAllRow<DB, T, O>>;
83
+ /**
84
+ * Adds a `returning *` to an insert/update/delete/merge query on databases
85
+ * that support `returning` such as PostgreSQL.
86
+ *
87
+ * Also see the {@link returning} method.
88
+ */
89
+ returningAll<T extends TB>(table: T): MultiTableReturningInterface<DB, TB, ReturningAllRow<DB, T, O>>;
90
+ returningAll(): ReturningInterface<DB, TB, Selectable<DB[TB]>>;
91
+ }
@@ -6,7 +6,7 @@ import { ReferenceExpression } from '../parser/reference-parser.js';
6
6
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
7
7
  import { QueryNode } from '../operation-node/query-node.js';
8
8
  import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, Simplify, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
9
- import { OrderByDirectionExpression, OrderByExpression, DirectedOrderByStringReference, UndirectedOrderByExpression } from '../parser/order-by-parser.js';
9
+ import { DirectedOrderByStringReference, OrderByExpression, OrderByModifiers } from '../parser/order-by-parser.js';
10
10
  import { Compilable } from '../util/compilable.js';
11
11
  import { QueryExecutor } from '../query-executor/query-executor.js';
12
12
  import { QueryId } from '../util/query-id.js';
@@ -28,7 +28,8 @@ import { SelectQueryBuilderExpression } from './select-query-builder-expression.
28
28
  import { ValueExpression } from '../parser/value-parser.js';
29
29
  import { FetchModifier } from '../operation-node/fetch-node.js';
30
30
  import { TopModifier } from '../operation-node/top-node.js';
31
- export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInterface<DB, TB>, HavingInterface<DB, TB>, SelectQueryBuilderExpression<O>, Compilable<O>, Explainable, Streamable<O> {
31
+ import { OrderByInterface } from './order-by-interface.js';
32
+ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInterface<DB, TB>, HavingInterface<DB, TB>, OrderByInterface<DB, TB, O>, SelectQueryBuilderExpression<O>, Compilable<O>, Explainable, Streamable<O> {
32
33
  /**
33
34
  * Adds a `where` expression to the query.
34
35
  *
@@ -505,7 +506,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
505
506
  * import { sql } from 'kysely'
506
507
  *
507
508
  * const persons = await db.selectFrom('person')
508
- * .select(({ eb, selectFrom, or }) => [
509
+ * .select(({ eb, selectFrom, or, val, lit }) => [
509
510
  * // Select a correlated subquery
510
511
  * selectFrom('pet')
511
512
  * .whereRef('person.id', '=', 'pet.owner_id')
@@ -522,7 +523,13 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
522
523
  * ]).as('is_jennifer_or_arnold'),
523
524
  *
524
525
  * // Select a raw sql expression
525
- * sql<string>`concat(first_name, ' ', last_name)`.as('full_name')
526
+ * sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
527
+ *
528
+ * // Select a static string value
529
+ * val('Some value').as('string_value'),
530
+ *
531
+ * // Select a literal value
532
+ * lit(42).as('literal_value'),
526
533
  * ])
527
534
  * .execute()
528
535
  * ```
@@ -539,7 +546,9 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
539
546
  * limit $1
540
547
  * ) as "pet_name",
541
548
  * ("first_name" = $2 or "first_name" = $3) as "jennifer_or_arnold",
542
- * concat(first_name, ' ', last_name) as "full_name"
549
+ * concat(first_name, ' ', last_name) as "full_name",
550
+ * $4 as "string_value",
551
+ * 42 as "literal_value"
543
552
  * from "person"
544
553
  * ```
545
554
  *
@@ -803,13 +812,13 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
803
812
  selectAll<T extends TB>(table: T): SelectQueryBuilder<DB, TB, O & Selectable<DB[T]>>;
804
813
  selectAll(): SelectQueryBuilder<DB, TB, O & AllSelection<DB, TB>>;
805
814
  /**
806
- * Joins another table to the query using an inner join.
815
+ * Joins another table to the query using an `inner join`.
807
816
  *
808
817
  * ### Examples
809
818
  *
810
819
  * <!-- siteExample("join", "Simple inner join", 10) -->
811
820
  *
812
- * Simple inner joins can be done by providing a table name and two columns to join:
821
+ * Simple `inner join`s can be done by providing a table name and two columns to join:
813
822
  *
814
823
  * ```ts
815
824
  * const result = await db
@@ -929,23 +938,31 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
929
938
  innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilderWithInnerJoin<DB, TB, O, TE>;
930
939
  innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilderWithInnerJoin<DB, TB, O, TE>;
931
940
  /**
932
- * Just like {@link innerJoin} but adds a left join instead of an inner join.
941
+ * Just like {@link innerJoin} but adds a `left join` instead of an `inner join`.
933
942
  */
934
943
  leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilderWithLeftJoin<DB, TB, O, TE>;
935
944
  leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilderWithLeftJoin<DB, TB, O, TE>;
936
945
  /**
937
- * Just like {@link innerJoin} but adds a right join instead of an inner join.
946
+ * Just like {@link innerJoin} but adds a `right join` instead of an `inner join`.
938
947
  */
939
948
  rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilderWithRightJoin<DB, TB, O, TE>;
940
949
  rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilderWithRightJoin<DB, TB, O, TE>;
941
950
  /**
942
- * Just like {@link innerJoin} but adds a full join instead of an inner join.
951
+ * Just like {@link innerJoin} but adds a `full join` instead of an `inner join`.
952
+ *
953
+ * This is only supported by some dialects like PostgreSQL, MS SQL Server and SQLite.
943
954
  */
944
955
  fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilderWithFullJoin<DB, TB, O, TE>;
945
956
  fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilderWithFullJoin<DB, TB, O, TE>;
957
+ /**
958
+ * Just like {@link innerJoin} but adds a `cross join` instead of an `inner join`.
959
+ */
960
+ crossJoin<TE extends TableExpression<DB, TB>>(table: TE): SelectQueryBuilderWithInnerJoin<DB, TB, O, TE>;
946
961
  /**
947
962
  * Just like {@link innerJoin} but adds a lateral join instead of an inner join.
948
963
  *
964
+ * This is only supported by some dialects like PostgreSQL and MySQL.
965
+ *
949
966
  * ### Examples
950
967
  *
951
968
  * ```ts
@@ -979,7 +996,10 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
979
996
  innerJoinLateral<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilderWithInnerJoin<DB, TB, O, TE>;
980
997
  innerJoinLateral<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilderWithInnerJoin<DB, TB, O, TE>;
981
998
  /**
982
- * Just like {@link innerJoin} but adds a lateral left join instead of an inner join.
999
+ * Just like {@link innerJoin} but adds a `left join lateral` instead of an `inner join`.
1000
+ *
1001
+ * This is only supported by some dialects like PostgreSQL and MySQL.
1002
+ *
983
1003
  * ### Examples
984
1004
  *
985
1005
  * ```ts
@@ -1013,119 +1033,81 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1013
1033
  leftJoinLateral<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilderWithLeftJoin<DB, TB, O, TE>;
1014
1034
  leftJoinLateral<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilderWithLeftJoin<DB, TB, O, TE>;
1015
1035
  /**
1016
- * Adds an `order by` clause to the query.
1036
+ * Just like {@link innerJoin} but adds a `cross join lateral` instead of an `inner join`.
1017
1037
  *
1018
- * `orderBy` calls are additive. Meaning, additional `orderBy` calls append to
1019
- * the existing order by clause.
1020
- *
1021
- * In a single call you can add a single column/expression or multiple columns/expressions.
1022
- *
1023
- * Single column/expression calls can have 1-2 arguments. The first argument is
1024
- * the expression to order by (optionally including the direction) while the second
1025
- * optional argument is the direction (`asc` or `desc`).
1038
+ * This is only supported by some dialects like PostgreSQL.
1026
1039
  *
1027
1040
  * ### Examples
1028
1041
  *
1029
- * Single column/expression per call:
1030
- *
1031
1042
  * ```ts
1032
- * await db
1033
- * .selectFrom('person')
1034
- * .select('person.first_name as fn')
1035
- * .orderBy('id')
1036
- * .orderBy('fn desc')
1037
- * .execute()
1038
- * ```
1039
- *
1040
- * ```ts
1041
- * await db
1042
- * .selectFrom('person')
1043
- * .select('person.first_name as fn')
1044
- * .orderBy('id')
1045
- * .orderBy('fn', 'desc')
1043
+ * await db.selectFrom('person')
1044
+ * .crossJoinLateral(
1045
+ * (eb) =>
1046
+ * eb.selectFrom('pet')
1047
+ * .select('name')
1048
+ * .whereRef('pet.owner_id', '=', 'person.id')
1049
+ * .as('p')
1050
+ * )
1051
+ * .select(['first_name', 'p.name'])
1052
+ * .orderBy('first_name')
1046
1053
  * .execute()
1047
1054
  * ```
1048
1055
  *
1049
1056
  * The generated SQL (PostgreSQL):
1050
1057
  *
1051
1058
  * ```sql
1052
- * select "person"."first_name" as "fn"
1059
+ * select "person"."first_name", "p"."name"
1053
1060
  * from "person"
1054
- * order by "id" asc, "fn" desc
1061
+ * cross join lateral (
1062
+ * select "name"
1063
+ * from "pet"
1064
+ * where "pet"."owner_id" = "person"."id"
1065
+ * ) as "p"
1066
+ * order by "first_name"
1055
1067
  * ```
1068
+ */
1069
+ crossJoinLateral<TE extends TableExpression<DB, TB>>(table: TE): SelectQueryBuilderWithInnerJoin<DB, TB, O, TE>;
1070
+ /**
1071
+ * Joins another table to the query using a `cross apply`.
1056
1072
  *
1057
- * Multiple columns/expressions per call:
1073
+ * This is only supported by some dialects like MS SQL Server.
1058
1074
  *
1059
- * ```ts
1060
- * await db
1061
- * .selectFrom('person')
1062
- * .select('person.first_name as fn')
1063
- * .orderBy(['id', 'fn desc'])
1064
- * .execute()
1065
- * ```
1066
- *
1067
- * The order by expression can also be a raw sql expression or a subquery
1068
- * in addition to column references:
1075
+ * ### Examples
1069
1076
  *
1070
1077
  * ```ts
1071
- * import { sql } from 'kysely'
1072
- *
1073
- * await db
1074
- * .selectFrom('person')
1075
- * .selectAll()
1076
- * .orderBy((eb) => eb.selectFrom('pet')
1077
- * .select('pet.name')
1078
- * .whereRef('pet.owner_id', '=', 'person.id')
1079
- * .limit(1)
1080
- * )
1081
- * .orderBy(
1082
- * sql<string>`concat(first_name, last_name)`
1078
+ * await db.selectFrom('person')
1079
+ * .crossApply(
1080
+ * (eb) =>
1081
+ * eb.selectFrom('pet')
1082
+ * .select('name')
1083
+ * .whereRef('pet.owner_id', '=', 'person.id')
1084
+ * .as('p')
1083
1085
  * )
1086
+ * .select(['first_name', 'p.name'])
1087
+ * .orderBy('first_name')
1084
1088
  * .execute()
1085
1089
  * ```
1086
1090
  *
1087
- * The generated SQL (PostgreSQL):
1091
+ * The generated SQL (MS SQL Server):
1088
1092
  *
1089
1093
  * ```sql
1090
- * select *
1094
+ * select "person"."first_name", "p"."name"
1091
1095
  * from "person"
1092
- * order by
1093
- * ( select "pet"."name"
1094
- * from "pet"
1095
- * where "pet"."owner_id" = "person"."id"
1096
- * limit 1
1097
- * ) asc,
1098
- * concat(first_name, last_name) asc
1099
- * ```
1100
- *
1101
- * `dynamic.ref` can be used to refer to columns not known at
1102
- * compile time:
1103
- *
1104
- * ```ts
1105
- * async function someQuery(orderBy: string) {
1106
- * const { ref } = db.dynamic
1107
- *
1108
- * return await db
1109
- * .selectFrom('person')
1110
- * .select('person.first_name as fn')
1111
- * .orderBy(ref(orderBy))
1112
- * .execute()
1113
- * }
1114
- *
1115
- * someQuery('fn')
1096
+ * cross apply (
1097
+ * select "name"
1098
+ * from "pet"
1099
+ * where "pet"."owner_id" = "person"."id"
1100
+ * ) as "p"
1101
+ * order by "first_name"
1116
1102
  * ```
1103
+ */
1104
+ crossApply<TE extends TableExpression<DB, TB>>(table: TE): SelectQueryBuilderWithInnerJoin<DB, TB, O, TE>;
1105
+ /**
1106
+ * Just like {@link crossApply} but adds an `outer apply` instead of a `cross apply`.
1117
1107
  *
1118
- * The generated SQL (PostgreSQL):
1119
- *
1120
- * ```sql
1121
- * select "person"."first_name" as "fn"
1122
- * from "person"
1123
- * order by "fn" asc
1124
- * ```
1108
+ * This is only supported by some dialects like MS SQL Server.
1125
1109
  */
1126
- orderBy<OE extends UndirectedOrderByExpression<DB, TB, O>>(orderBy: OE, direction?: OrderByDirectionExpression): SelectQueryBuilder<DB, TB, O>;
1127
- orderBy<OE extends DirectedOrderByStringReference<DB, TB, O>>(ref: OE): SelectQueryBuilder<DB, TB, O>;
1128
- orderBy<OE extends OrderByExpression<DB, TB, O>>(refs: ReadonlyArray<OE>): SelectQueryBuilder<DB, TB, O>;
1110
+ outerApply<TE extends TableExpression<DB, TB>>(table: TE): SelectQueryBuilderWithLeftJoin<DB, TB, O, TE>;
1129
1111
  /**
1130
1112
  * Adds a `group by` clause to the query.
1131
1113
  *
@@ -1225,9 +1207,159 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1225
1207
  * ```
1226
1208
  */
1227
1209
  groupBy<GE extends GroupByArg<DB, TB, O>>(groupBy: GE): SelectQueryBuilder<DB, TB, O>;
1210
+ /**
1211
+ * Adds an `order by` clause to the query.
1212
+ *
1213
+ * `orderBy` calls are additive. Meaning, additional `orderBy` calls append to
1214
+ * the existing order by clause.
1215
+ *
1216
+ * `orderBy` is supported in select queries on all dialects. In MySQL, you can
1217
+ * also use `orderBy` in update and delete queries.
1218
+ *
1219
+ * In a single call you can add a single column/expression or multiple columns/expressions.
1220
+ *
1221
+ * Single column/expression calls can have 1-2 arguments. The first argument is
1222
+ * the expression to order by, while the second optional argument is the direction
1223
+ * (`asc` or `desc`), a callback that accepts and returns an {@link OrderByItemBuilder}
1224
+ * or an expression.
1225
+ *
1226
+ * See {@link clearOrderBy} to remove the `order by` clause from a query.
1227
+ *
1228
+ * ### Examples
1229
+ *
1230
+ * Single column/expression per call:
1231
+ *
1232
+ * ```ts
1233
+ * await db
1234
+ * .selectFrom('person')
1235
+ * .select('person.first_name as fn')
1236
+ * .orderBy('id')
1237
+ * .orderBy('fn', 'desc')
1238
+ * .execute()
1239
+ * ```
1240
+ *
1241
+ * The generated SQL (PostgreSQL):
1242
+ *
1243
+ * ```sql
1244
+ * select "person"."first_name" as "fn"
1245
+ * from "person"
1246
+ * order by "id", "fn" desc
1247
+ * ```
1248
+ *
1249
+ * Multiple columns/expressions per call:
1250
+ *
1251
+ * ```ts
1252
+ * await db
1253
+ * .selectFrom('person')
1254
+ * .select('person.first_name as fn')
1255
+ * .orderBy(['id', 'fn'])
1256
+ * .execute()
1257
+ * ```
1258
+ *
1259
+ * The generated SQL (PostgreSQL):
1260
+ *
1261
+ * ```sql
1262
+ * select "person"."first_name" as "fn"
1263
+ * from "person"
1264
+ * order by "id", "fn"
1265
+ * ```
1266
+ *
1267
+ * Building advanced modifiers:
1268
+ *
1269
+ * ```ts
1270
+ * await db
1271
+ * .selectFrom('person')
1272
+ * .select('person.first_name as fn')
1273
+ * .orderBy('id', (ob) => ob.desc().nullsFirst())
1274
+ * .execute()
1275
+ * ```
1276
+ *
1277
+ * The generated SQL (PostgreSQL):
1278
+ *
1279
+ * ```sql
1280
+ * select "person"."first_name" as "fn"
1281
+ * from "person"
1282
+ * order by "id" desc nulls first
1283
+ * ```
1284
+ *
1285
+ * The order by expression can also be a raw sql expression or a subquery
1286
+ * in addition to column references:
1287
+ *
1288
+ * ```ts
1289
+ * import { sql } from 'kysely'
1290
+ *
1291
+ * await db
1292
+ * .selectFrom('person')
1293
+ * .selectAll()
1294
+ * .orderBy((eb) => eb.selectFrom('pet')
1295
+ * .select('pet.name')
1296
+ * .whereRef('pet.owner_id', '=', 'person.id')
1297
+ * .limit(1)
1298
+ * )
1299
+ * .orderBy(
1300
+ * sql<string>`concat(first_name, last_name) asc`
1301
+ * )
1302
+ * .execute()
1303
+ * ```
1304
+ *
1305
+ * The generated SQL (PostgreSQL):
1306
+ *
1307
+ * ```sql
1308
+ * select *
1309
+ * from "person"
1310
+ * order by
1311
+ * ( select "pet"."name"
1312
+ * from "pet"
1313
+ * where "pet"."owner_id" = "person"."id"
1314
+ * limit $1
1315
+ * ) asc,
1316
+ * concat(first_name, last_name) asc
1317
+ * ```
1318
+ *
1319
+ * `dynamic.ref` can be used to refer to columns not known at
1320
+ * compile time:
1321
+ *
1322
+ * ```ts
1323
+ * async function someQuery(orderBy: string) {
1324
+ * const { ref } = db.dynamic
1325
+ *
1326
+ * return await db
1327
+ * .selectFrom('person')
1328
+ * .select('person.first_name as fn')
1329
+ * .orderBy(ref(orderBy))
1330
+ * .execute()
1331
+ * }
1332
+ *
1333
+ * someQuery('fn')
1334
+ * ```
1335
+ *
1336
+ * The generated SQL (PostgreSQL):
1337
+ *
1338
+ * ```sql
1339
+ * select "person"."first_name" as "fn"
1340
+ * from "person"
1341
+ * order by "fn"
1342
+ * ```
1343
+ */
1344
+ orderBy<OE extends OrderByExpression<DB, TB, O>>(expr: OE, modifiers?: OrderByModifiers): SelectQueryBuilder<DB, TB, O>;
1345
+ /**
1346
+ * @deprecated It does ~2-2.5x more compile-time instantiations than multiple `orderBy(expr, modifiers?)` calls, and has broken autocompletion.
1347
+ */
1348
+ orderBy<OE extends OrderByExpression<DB, TB, O> | DirectedOrderByStringReference<DB, TB, O>>(exprs: ReadonlyArray<OE>): SelectQueryBuilder<DB, TB, O>;
1349
+ /**
1350
+ * @deprecated Use orderBy(expr, direction) instead.
1351
+ */
1352
+ orderBy<OE extends DirectedOrderByStringReference<DB, TB, O>>(expr: OE): SelectQueryBuilder<DB, TB, O>;
1353
+ /**
1354
+ * @deprecated Use `orderBy(expr, (ob) => ...)` instead.
1355
+ */
1356
+ orderBy<OE extends OrderByExpression<DB, TB, O>>(expr: OE, modifiers: Expression<any>): SelectQueryBuilder<DB, TB, O>;
1228
1357
  /**
1229
1358
  * Adds a limit clause to the query.
1230
1359
  *
1360
+ * Passing a `null` value is only supported by some dialects like PostgreSQL,
1361
+ * and will result in a no-op limit clause.
1362
+ *
1231
1363
  * ### Examples
1232
1364
  *
1233
1365
  * Select the first 10 rows of the result:
@@ -1263,7 +1395,7 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1263
1395
  * select "first_name" from "person" limit $1 offset $2
1264
1396
  * ```
1265
1397
  */
1266
- limit(limit: ValueExpression<DB, TB, number | bigint>): SelectQueryBuilder<DB, TB, O>;
1398
+ limit(limit: ValueExpression<DB, TB, number | bigint | null>): SelectQueryBuilder<DB, TB, O>;
1267
1399
  /**
1268
1400
  * Adds an `offset` clause to the query.
1269
1401
  *
@@ -1978,6 +2110,55 @@ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInt
1978
2110
  $asTuple<K1 extends keyof O, K2 extends Exclude<keyof O, K1>, K3 extends Exclude<keyof O, K1 | K2>>(key1: K1, key2: K2, key3: K3): keyof O extends K1 | K2 | K3 ? ExpressionWrapper<DB, TB, [O[K1], O[K2], O[K3]]> : KyselyTypeError<'$asTuple() call failed: All selected columns must be provided as arguments'>;
1979
2111
  $asTuple<K1 extends keyof O, K2 extends Exclude<keyof O, K1>, K3 extends Exclude<keyof O, K1 | K2>, K4 extends Exclude<keyof O, K1 | K2 | K3>>(key1: K1, key2: K2, key3: K3, key4: K4): keyof O extends K1 | K2 | K3 | K4 ? ExpressionWrapper<DB, TB, [O[K1], O[K2], O[K3], O[K4]]> : KyselyTypeError<'$asTuple() call failed: All selected columns must be provided as arguments'>;
1980
2112
  $asTuple<K1 extends keyof O, K2 extends Exclude<keyof O, K1>, K3 extends Exclude<keyof O, K1 | K2>, K4 extends Exclude<keyof O, K1 | K2 | K3>, K5 extends Exclude<keyof O, K1 | K2 | K3 | K4>>(key1: K1, key2: K2, key3: K3, key4: K4, key5: K5): keyof O extends K1 | K2 | K3 | K4 | K5 ? ExpressionWrapper<DB, TB, [O[K1], O[K2], O[K3], O[K4], O[K5]]> : KyselyTypeError<'$asTuple() call failed: All selected columns must be provided as arguments'>;
2113
+ /**
2114
+ * Plucks the value type of the output record.
2115
+ *
2116
+ * In SQL, any record type that only has one column can be used as a scalar.
2117
+ * For example a query like this works:
2118
+ *
2119
+ * ```sql
2120
+ * select
2121
+ * id,
2122
+ * first_name
2123
+ * from
2124
+ * person as p
2125
+ * where
2126
+ * -- This is ok since the query only selects one row
2127
+ * -- and one column.
2128
+ * (select name from pet where pet.owner_id = p.id limit 1) = 'Doggo'
2129
+ * ```
2130
+ *
2131
+ * In many cases Kysely handles this automatically and picks the correct
2132
+ * scalar type instead of the record type, but sometimes you need to give
2133
+ * Kysely a hint.
2134
+ *
2135
+ * One such case are custom helper functions that take `Expression<T>`
2136
+ * instances as inputs:
2137
+ *
2138
+ * ```ts
2139
+ * import type { Expression } from 'kysely'
2140
+ *
2141
+ * function doStuff(expr: Expression<string>) {
2142
+ * // ...
2143
+ * }
2144
+ *
2145
+ * // Error! This is not ok because the expression type is
2146
+ * // `{ first_name: string }` instead of `string`.
2147
+ * // doStuff(db.selectFrom('person').select('first_name'))
2148
+ *
2149
+ * // Ok! This is ok since we've plucked the `string` type of the
2150
+ * // only column in the output type.
2151
+ * doStuff(db.selectFrom('person').select('first_name').$asScalar())
2152
+ * ```
2153
+ *
2154
+ * This function has absolutely no effect on the generated SQL. It's
2155
+ * purely a type-level helper.
2156
+ *
2157
+ * This method returns an `ExpressionWrapper` instead of a `SelectQueryBuilder`
2158
+ * since the return value should only be used as a part of an expression
2159
+ * and never executed as the main query.
2160
+ */
2161
+ $asScalar<K extends keyof O = keyof O>(): ExpressionWrapper<DB, TB, O[K]>;
1981
2162
  /**
1982
2163
  * Narrows (parts of) the output type of the query.
1983
2164
  *