kysely 0.27.5 → 0.28.0

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 (371) hide show
  1. package/CODE_OF_CONDUCT.md +183 -0
  2. package/FUNDING.md +25 -0
  3. package/README.md +182 -3
  4. package/deno.check.d.ts +7 -0
  5. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  6. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +6 -3
  7. package/dist/cjs/dialect/mssql/mssql-driver.js +33 -19
  8. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  9. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +11 -0
  10. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +4 -0
  11. package/dist/cjs/dialect/mysql/mysql-driver.js +27 -12
  12. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +4 -0
  13. package/dist/cjs/dialect/postgres/postgres-driver.js +28 -18
  14. package/dist/cjs/dialect/postgres/postgres-introspector.js +7 -17
  15. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +4 -0
  16. package/dist/cjs/dialect/sqlite/sqlite-driver.js +19 -13
  17. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +66 -44
  18. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  19. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +4 -0
  20. package/dist/cjs/driver/database-connection.d.ts +0 -4
  21. package/dist/cjs/driver/driver.d.ts +17 -0
  22. package/dist/cjs/driver/driver.js +13 -1
  23. package/dist/cjs/driver/dummy-driver.d.ts +3 -0
  24. package/dist/cjs/driver/dummy-driver.js +9 -0
  25. package/dist/cjs/driver/runtime-driver.d.ts +4 -0
  26. package/dist/cjs/driver/runtime-driver.js +43 -3
  27. package/dist/cjs/expression/expression-builder.d.ts +9 -10
  28. package/dist/cjs/helpers/postgres.d.ts +48 -0
  29. package/dist/cjs/helpers/postgres.js +50 -0
  30. package/dist/cjs/index.d.ts +13 -2
  31. package/dist/cjs/index.js +13 -2
  32. package/dist/cjs/kysely.d.ts +339 -2
  33. package/dist/cjs/kysely.js +465 -11
  34. package/dist/cjs/migration/migrator.d.ts +16 -1
  35. package/dist/cjs/migration/migrator.js +14 -4
  36. package/dist/cjs/operation-node/aggregate-function-node.d.ts +2 -1
  37. package/dist/cjs/operation-node/aggregate-function-node.js +4 -3
  38. package/dist/cjs/operation-node/alter-table-node.d.ts +3 -1
  39. package/dist/cjs/operation-node/collate-node.d.ts +13 -0
  40. package/dist/cjs/operation-node/collate-node.js +19 -0
  41. package/dist/cjs/operation-node/constraint-node.d.ts +1 -1
  42. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  43. package/dist/cjs/operation-node/create-type-node.js +1 -1
  44. package/dist/cjs/operation-node/delete-query-node.d.ts +8 -2
  45. package/dist/cjs/operation-node/delete-query-node.js +11 -15
  46. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -0
  47. package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
  48. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  49. package/dist/cjs/operation-node/merge-query-node.d.ts +2 -0
  50. package/dist/cjs/operation-node/operation-node-transformer.d.ts +106 -97
  51. package/dist/cjs/operation-node/operation-node-transformer.js +352 -312
  52. package/dist/cjs/operation-node/operation-node-visitor.d.ts +9 -1
  53. package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
  54. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  55. package/dist/cjs/operation-node/or-action-node.d.ts +12 -0
  56. package/dist/cjs/operation-node/or-action-node.js +18 -0
  57. package/dist/cjs/operation-node/order-by-item-node.d.ts +5 -0
  58. package/dist/cjs/operation-node/order-by-item-node.js +6 -0
  59. package/dist/cjs/operation-node/primary-key-constraint-node.d.ts +29 -0
  60. package/dist/cjs/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  61. package/dist/cjs/operation-node/query-node.d.ts +7 -0
  62. package/dist/cjs/operation-node/query-node.js +15 -0
  63. package/dist/cjs/operation-node/refresh-materialized-view-node.d.ts +17 -0
  64. package/dist/cjs/operation-node/refresh-materialized-view-node.js +25 -0
  65. package/dist/cjs/operation-node/rename-constraint-node.d.ts +14 -0
  66. package/dist/cjs/operation-node/rename-constraint-node.js +20 -0
  67. package/dist/cjs/operation-node/select-query-node.d.ts +8 -2
  68. package/dist/cjs/operation-node/select-query-node.js +11 -15
  69. package/dist/cjs/operation-node/unique-constraint-node.d.ts +2 -0
  70. package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
  71. package/dist/cjs/operation-node/update-query-node.js +5 -2
  72. package/dist/cjs/parser/collate-parser.d.ts +1 -0
  73. package/dist/cjs/parser/collate-parser.js +2 -0
  74. package/dist/cjs/parser/delete-from-parser.d.ts +5 -0
  75. package/dist/cjs/parser/delete-from-parser.js +2 -0
  76. package/dist/cjs/parser/insert-values-parser.js +3 -1
  77. package/dist/cjs/parser/join-parser.d.ts +1 -1
  78. package/dist/cjs/parser/join-parser.js +7 -1
  79. package/dist/cjs/parser/merge-into-parser.d.ts +5 -0
  80. package/dist/cjs/parser/merge-into-parser.js +2 -0
  81. package/dist/cjs/parser/order-by-parser.d.ts +18 -5
  82. package/dist/cjs/parser/order-by-parser.js +24 -14
  83. package/dist/cjs/parser/savepoint-parser.d.ts +4 -0
  84. package/dist/cjs/parser/savepoint-parser.js +11 -0
  85. package/dist/cjs/parser/select-from-parser.d.ts +4 -0
  86. package/dist/cjs/parser/select-from-parser.js +2 -0
  87. package/dist/cjs/parser/table-parser.d.ts +2 -5
  88. package/dist/cjs/parser/update-parser.d.ts +5 -0
  89. package/dist/cjs/parser/update-parser.js +2 -0
  90. package/dist/cjs/parser/update-set-parser.d.ts +7 -4
  91. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
  92. package/dist/cjs/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  93. package/dist/cjs/plugin/camel-case/camel-case-transformer.js +2 -2
  94. package/dist/cjs/plugin/camel-case/camel-case.js +4 -1
  95. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  96. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  97. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  98. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  99. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +162 -0
  100. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  101. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +29 -0
  102. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  103. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.js +66 -0
  104. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.js +1 -1
  105. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  106. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.js +6 -4
  107. package/dist/cjs/plugin/with-schema/with-schema-plugin.js +1 -1
  108. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +8 -3
  109. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +45 -14
  110. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +83 -5
  111. package/dist/cjs/query-builder/aggregate-function-builder.js +15 -27
  112. package/dist/cjs/query-builder/cte-builder.js +0 -2
  113. package/dist/cjs/query-builder/delete-query-builder.d.ts +36 -47
  114. package/dist/cjs/query-builder/delete-query-builder.js +12 -78
  115. package/dist/cjs/query-builder/function-module.d.ts +31 -4
  116. package/dist/cjs/query-builder/insert-query-builder.d.ts +161 -6
  117. package/dist/cjs/query-builder/insert-query-builder.js +197 -10
  118. package/dist/cjs/query-builder/join-builder.js +0 -2
  119. package/dist/cjs/query-builder/merge-query-builder.d.ts +145 -3
  120. package/dist/cjs/query-builder/merge-query-builder.js +28 -7
  121. package/dist/cjs/query-builder/on-conflict-builder.js +0 -4
  122. package/dist/cjs/query-builder/order-by-interface.d.ts +176 -0
  123. package/dist/cjs/query-builder/order-by-interface.js +2 -0
  124. package/dist/cjs/query-builder/order-by-item-builder.d.ts +43 -0
  125. package/dist/cjs/query-builder/order-by-item-builder.js +75 -0
  126. package/dist/cjs/query-builder/over-builder.d.ts +43 -6
  127. package/dist/cjs/query-builder/over-builder.js +8 -25
  128. package/dist/cjs/query-builder/returning-interface.d.ts +20 -3
  129. package/dist/cjs/query-builder/select-query-builder.d.ts +279 -98
  130. package/dist/cjs/query-builder/select-query-builder.js +26 -26
  131. package/dist/cjs/query-builder/update-query-builder.d.ts +88 -9
  132. package/dist/cjs/query-builder/update-query-builder.js +17 -15
  133. package/dist/cjs/query-compiler/compiled-query.d.ts +2 -0
  134. package/dist/cjs/query-compiler/compiled-query.js +2 -0
  135. package/dist/cjs/query-compiler/default-query-compiler.d.ts +17 -2
  136. package/dist/cjs/query-compiler/default-query-compiler.js +97 -2
  137. package/dist/cjs/query-compiler/query-compiler.d.ts +4 -2
  138. package/dist/cjs/query-creator.d.ts +23 -25
  139. package/dist/cjs/query-creator.js +280 -8
  140. package/dist/cjs/query-executor/default-query-executor.d.ts +2 -1
  141. package/dist/cjs/query-executor/default-query-executor.js +2 -2
  142. package/dist/cjs/query-executor/query-executor-base.js +7 -25
  143. package/dist/cjs/raw-builder/raw-builder.js +0 -3
  144. package/dist/cjs/raw-builder/sql.d.ts +4 -4
  145. package/dist/cjs/raw-builder/sql.js +1 -1
  146. package/dist/cjs/schema/alter-column-builder.js +0 -3
  147. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  148. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  149. package/dist/cjs/schema/alter-table-add-index-builder.js +0 -2
  150. package/dist/cjs/schema/alter-table-builder.d.ts +7 -3
  151. package/dist/cjs/schema/alter-table-builder.js +21 -10
  152. package/dist/cjs/schema/alter-table-drop-constraint-builder.js +0 -2
  153. package/dist/cjs/schema/alter-table-executor.js +0 -2
  154. package/dist/cjs/schema/check-constraint-builder.d.ts +13 -0
  155. package/dist/cjs/schema/check-constraint-builder.js +20 -0
  156. package/dist/cjs/schema/column-definition-builder.js +0 -2
  157. package/dist/cjs/schema/create-index-builder.js +1 -3
  158. package/dist/cjs/schema/create-schema-builder.js +0 -2
  159. package/dist/cjs/schema/create-table-builder.d.ts +5 -4
  160. package/dist/cjs/schema/create-table-builder.js +9 -7
  161. package/dist/cjs/schema/create-type-builder.d.ts +1 -1
  162. package/dist/cjs/schema/create-type-builder.js +0 -2
  163. package/dist/cjs/schema/create-view-builder.js +0 -2
  164. package/dist/cjs/schema/drop-index-builder.js +0 -2
  165. package/dist/cjs/schema/drop-schema-builder.js +0 -2
  166. package/dist/cjs/schema/drop-table-builder.js +0 -2
  167. package/dist/cjs/schema/drop-type-builder.js +0 -2
  168. package/dist/cjs/schema/drop-view-builder.js +0 -2
  169. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +9 -0
  170. package/dist/cjs/schema/foreign-key-constraint-builder.js +16 -2
  171. package/dist/cjs/schema/primary-key-constraint-builder.d.ts +17 -0
  172. package/dist/cjs/schema/primary-key-constraint-builder.js +37 -0
  173. package/dist/cjs/schema/refresh-materialized-view-builder.d.ts +47 -0
  174. package/dist/cjs/schema/refresh-materialized-view-builder.js +75 -0
  175. package/dist/cjs/schema/schema.d.ts +14 -0
  176. package/dist/cjs/schema/schema.js +21 -0
  177. package/dist/cjs/schema/unique-constraint-builder.d.ts +10 -1
  178. package/dist/cjs/schema/unique-constraint-builder.js +26 -5
  179. package/dist/cjs/util/infer-result.d.ts +1 -1
  180. package/dist/cjs/util/log.d.ts +1 -0
  181. package/dist/cjs/util/log.js +3 -2
  182. package/dist/cjs/util/provide-controlled-connection.d.ts +7 -0
  183. package/dist/cjs/util/provide-controlled-connection.js +24 -0
  184. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  185. package/dist/esm/dialect/mssql/mssql-driver.d.ts +6 -3
  186. package/dist/esm/dialect/mssql/mssql-driver.js +33 -19
  187. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  188. package/dist/esm/dialect/mssql/mssql-query-compiler.js +11 -0
  189. package/dist/esm/dialect/mysql/mysql-driver.d.ts +4 -0
  190. package/dist/esm/dialect/mysql/mysql-driver.js +27 -12
  191. package/dist/esm/dialect/postgres/postgres-driver.d.ts +4 -0
  192. package/dist/esm/dialect/postgres/postgres-driver.js +28 -18
  193. package/dist/esm/dialect/postgres/postgres-introspector.js +7 -17
  194. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +4 -0
  195. package/dist/esm/dialect/sqlite/sqlite-driver.js +19 -13
  196. package/dist/esm/dialect/sqlite/sqlite-introspector.js +66 -44
  197. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  198. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +4 -0
  199. package/dist/esm/driver/database-connection.d.ts +0 -4
  200. package/dist/esm/driver/driver.d.ts +17 -0
  201. package/dist/esm/driver/driver.js +11 -0
  202. package/dist/esm/driver/dummy-driver.d.ts +3 -0
  203. package/dist/esm/driver/dummy-driver.js +9 -0
  204. package/dist/esm/driver/runtime-driver.d.ts +4 -0
  205. package/dist/esm/driver/runtime-driver.js +43 -3
  206. package/dist/esm/expression/expression-builder.d.ts +9 -10
  207. package/dist/esm/helpers/postgres.d.ts +48 -0
  208. package/dist/esm/helpers/postgres.js +49 -0
  209. package/dist/esm/index.d.ts +13 -2
  210. package/dist/esm/index.js +11 -1
  211. package/dist/esm/kysely.d.ts +339 -2
  212. package/dist/esm/kysely.js +461 -10
  213. package/dist/esm/migration/migrator.d.ts +16 -1
  214. package/dist/esm/migration/migrator.js +14 -4
  215. package/dist/esm/operation-node/aggregate-function-node.d.ts +2 -1
  216. package/dist/esm/operation-node/aggregate-function-node.js +4 -3
  217. package/dist/esm/operation-node/alter-table-node.d.ts +3 -1
  218. package/dist/esm/operation-node/collate-node.d.ts +13 -0
  219. package/dist/esm/operation-node/collate-node.js +17 -0
  220. package/dist/esm/operation-node/constraint-node.d.ts +1 -1
  221. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  222. package/dist/esm/operation-node/create-type-node.js +1 -1
  223. package/dist/esm/operation-node/delete-query-node.d.ts +8 -2
  224. package/dist/esm/operation-node/delete-query-node.js +11 -15
  225. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -0
  226. package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
  227. package/dist/esm/operation-node/join-node.d.ts +1 -1
  228. package/dist/esm/operation-node/merge-query-node.d.ts +2 -0
  229. package/dist/esm/operation-node/operation-node-transformer.d.ts +106 -97
  230. package/dist/esm/operation-node/operation-node-transformer.js +352 -312
  231. package/dist/esm/operation-node/operation-node-visitor.d.ts +9 -1
  232. package/dist/esm/operation-node/operation-node-visitor.js +4 -0
  233. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  234. package/dist/esm/operation-node/or-action-node.d.ts +12 -0
  235. package/dist/esm/operation-node/or-action-node.js +16 -0
  236. package/dist/esm/operation-node/order-by-item-node.d.ts +5 -0
  237. package/dist/esm/operation-node/order-by-item-node.js +6 -0
  238. package/dist/esm/operation-node/primary-key-constraint-node.d.ts +29 -0
  239. package/dist/esm/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  240. package/dist/esm/operation-node/query-node.d.ts +7 -0
  241. package/dist/esm/operation-node/query-node.js +15 -0
  242. package/dist/esm/operation-node/refresh-materialized-view-node.d.ts +17 -0
  243. package/dist/esm/operation-node/refresh-materialized-view-node.js +23 -0
  244. package/dist/esm/operation-node/rename-constraint-node.d.ts +14 -0
  245. package/dist/esm/operation-node/rename-constraint-node.js +18 -0
  246. package/dist/esm/operation-node/select-query-node.d.ts +8 -2
  247. package/dist/esm/operation-node/select-query-node.js +11 -15
  248. package/dist/esm/operation-node/unique-constraint-node.d.ts +2 -0
  249. package/dist/esm/operation-node/update-query-node.d.ts +3 -4
  250. package/dist/esm/operation-node/update-query-node.js +5 -2
  251. package/dist/esm/parser/collate-parser.d.ts +1 -0
  252. package/dist/esm/parser/collate-parser.js +2 -0
  253. package/dist/esm/parser/delete-from-parser.d.ts +5 -0
  254. package/dist/esm/parser/delete-from-parser.js +2 -0
  255. package/dist/esm/parser/insert-values-parser.js +3 -1
  256. package/dist/esm/parser/join-parser.d.ts +1 -1
  257. package/dist/esm/parser/join-parser.js +7 -1
  258. package/dist/esm/parser/merge-into-parser.d.ts +5 -0
  259. package/dist/esm/parser/merge-into-parser.js +2 -0
  260. package/dist/esm/parser/order-by-parser.d.ts +18 -5
  261. package/dist/esm/parser/order-by-parser.js +27 -17
  262. package/dist/esm/parser/savepoint-parser.d.ts +4 -0
  263. package/dist/esm/parser/savepoint-parser.js +9 -0
  264. package/dist/esm/parser/select-from-parser.d.ts +4 -0
  265. package/dist/esm/parser/select-from-parser.js +2 -0
  266. package/dist/esm/parser/table-parser.d.ts +2 -5
  267. package/dist/esm/parser/update-parser.d.ts +5 -0
  268. package/dist/esm/parser/update-parser.js +2 -0
  269. package/dist/esm/parser/update-set-parser.d.ts +7 -4
  270. package/dist/esm/plugin/camel-case/camel-case-plugin.js +1 -1
  271. package/dist/esm/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  272. package/dist/esm/plugin/camel-case/camel-case-transformer.js +2 -2
  273. package/dist/esm/plugin/camel-case/camel-case.js +4 -1
  274. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  275. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  276. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  277. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  278. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +159 -0
  279. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  280. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +26 -0
  281. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  282. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.js +63 -0
  283. package/dist/esm/plugin/immediate-value/immediate-value-plugin.js +1 -1
  284. package/dist/esm/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  285. package/dist/esm/plugin/immediate-value/immediate-value-transformer.js +6 -4
  286. package/dist/esm/plugin/with-schema/with-schema-plugin.js +1 -1
  287. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +8 -3
  288. package/dist/esm/plugin/with-schema/with-schema-transformer.js +45 -14
  289. package/dist/esm/query-builder/aggregate-function-builder.d.ts +83 -5
  290. package/dist/esm/query-builder/aggregate-function-builder.js +15 -27
  291. package/dist/esm/query-builder/cte-builder.js +0 -2
  292. package/dist/esm/query-builder/delete-query-builder.d.ts +36 -47
  293. package/dist/esm/query-builder/delete-query-builder.js +12 -78
  294. package/dist/esm/query-builder/function-module.d.ts +31 -4
  295. package/dist/esm/query-builder/insert-query-builder.d.ts +161 -6
  296. package/dist/esm/query-builder/insert-query-builder.js +197 -10
  297. package/dist/esm/query-builder/join-builder.js +0 -2
  298. package/dist/esm/query-builder/merge-query-builder.d.ts +145 -3
  299. package/dist/esm/query-builder/merge-query-builder.js +29 -8
  300. package/dist/esm/query-builder/on-conflict-builder.js +0 -4
  301. package/dist/esm/query-builder/order-by-interface.d.ts +176 -0
  302. package/dist/esm/query-builder/order-by-interface.js +2 -0
  303. package/dist/esm/query-builder/order-by-item-builder.d.ts +43 -0
  304. package/dist/esm/query-builder/order-by-item-builder.js +72 -0
  305. package/dist/esm/query-builder/over-builder.d.ts +43 -6
  306. package/dist/esm/query-builder/over-builder.js +8 -25
  307. package/dist/esm/query-builder/returning-interface.d.ts +20 -3
  308. package/dist/esm/query-builder/select-query-builder.d.ts +279 -98
  309. package/dist/esm/query-builder/select-query-builder.js +26 -26
  310. package/dist/esm/query-builder/update-query-builder.d.ts +88 -9
  311. package/dist/esm/query-builder/update-query-builder.js +17 -15
  312. package/dist/esm/query-compiler/compiled-query.d.ts +2 -0
  313. package/dist/esm/query-compiler/compiled-query.js +2 -0
  314. package/dist/esm/query-compiler/default-query-compiler.d.ts +17 -2
  315. package/dist/esm/query-compiler/default-query-compiler.js +97 -2
  316. package/dist/esm/query-compiler/query-compiler.d.ts +4 -2
  317. package/dist/esm/query-creator.d.ts +23 -25
  318. package/dist/esm/query-creator.js +281 -9
  319. package/dist/esm/query-executor/default-query-executor.d.ts +2 -1
  320. package/dist/esm/query-executor/default-query-executor.js +2 -2
  321. package/dist/esm/query-executor/query-executor-base.js +7 -25
  322. package/dist/esm/raw-builder/raw-builder.js +0 -3
  323. package/dist/esm/raw-builder/sql.d.ts +4 -4
  324. package/dist/esm/raw-builder/sql.js +1 -1
  325. package/dist/esm/schema/alter-column-builder.js +0 -3
  326. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  327. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  328. package/dist/esm/schema/alter-table-add-index-builder.js +0 -2
  329. package/dist/esm/schema/alter-table-builder.d.ts +7 -3
  330. package/dist/esm/schema/alter-table-builder.js +22 -11
  331. package/dist/esm/schema/alter-table-drop-constraint-builder.js +0 -2
  332. package/dist/esm/schema/alter-table-executor.js +0 -2
  333. package/dist/esm/schema/check-constraint-builder.d.ts +13 -0
  334. package/dist/esm/schema/check-constraint-builder.js +17 -0
  335. package/dist/esm/schema/column-definition-builder.js +0 -2
  336. package/dist/esm/schema/create-index-builder.js +1 -3
  337. package/dist/esm/schema/create-schema-builder.js +0 -2
  338. package/dist/esm/schema/create-table-builder.d.ts +5 -4
  339. package/dist/esm/schema/create-table-builder.js +10 -8
  340. package/dist/esm/schema/create-type-builder.d.ts +1 -1
  341. package/dist/esm/schema/create-type-builder.js +0 -2
  342. package/dist/esm/schema/create-view-builder.js +0 -2
  343. package/dist/esm/schema/drop-index-builder.js +0 -2
  344. package/dist/esm/schema/drop-schema-builder.js +0 -2
  345. package/dist/esm/schema/drop-table-builder.js +0 -2
  346. package/dist/esm/schema/drop-type-builder.js +0 -2
  347. package/dist/esm/schema/drop-view-builder.js +0 -2
  348. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +9 -0
  349. package/dist/esm/schema/foreign-key-constraint-builder.js +16 -2
  350. package/dist/esm/schema/primary-key-constraint-builder.d.ts +17 -0
  351. package/dist/esm/schema/primary-key-constraint-builder.js +34 -0
  352. package/dist/esm/schema/refresh-materialized-view-builder.d.ts +47 -0
  353. package/dist/esm/schema/refresh-materialized-view-builder.js +72 -0
  354. package/dist/esm/schema/schema.d.ts +14 -0
  355. package/dist/esm/schema/schema.js +21 -0
  356. package/dist/esm/schema/unique-constraint-builder.d.ts +10 -1
  357. package/dist/esm/schema/unique-constraint-builder.js +26 -5
  358. package/dist/esm/util/infer-result.d.ts +1 -1
  359. package/dist/esm/util/log.d.ts +1 -0
  360. package/dist/esm/util/log.js +3 -2
  361. package/dist/esm/util/provide-controlled-connection.d.ts +7 -0
  362. package/dist/esm/util/provide-controlled-connection.js +22 -0
  363. package/outdated-typescript.d.ts +5 -0
  364. package/package.json +16 -2
  365. package/CONTRIBUTING.md +0 -70
  366. package/dist/cjs/operation-node/primary-constraint-node.d.ts +0 -15
  367. package/dist/cjs/util/prevent-await.d.ts +0 -1
  368. package/dist/cjs/util/prevent-await.js +0 -13
  369. package/dist/esm/operation-node/primary-constraint-node.d.ts +0 -15
  370. package/dist/esm/util/prevent-await.d.ts +0 -1
  371. package/dist/esm/util/prevent-await.js +0 -11
@@ -7,7 +7,8 @@ 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
+ import { ReturningAllRow, ReturningCallbackRow, ReturningRow } from '../parser/returning-parser.js';
11
+ import { SelectCallback, SelectExpression } from '../parser/select-parser.js';
11
12
  import { TableExpression } from '../parser/table-parser.js';
12
13
  import { ExtractUpdateTypeFromReferenceExpression, UpdateObject, UpdateObjectFactory } from '../parser/update-set-parser.js';
13
14
  import { ValueExpression } from '../parser/value-parser.js';
@@ -19,8 +20,9 @@ import { ShallowRecord, SimplifyResult, SimplifySingleResult, SqlBool } from '..
19
20
  import { MergeResult } from './merge-result.js';
20
21
  import { NoResultErrorConstructor } from './no-result-error.js';
21
22
  import { OutputCallback, OutputExpression, OutputInterface, OutputPrefix, SelectExpressionFromOutputCallback, SelectExpressionFromOutputExpression } from './output-interface.js';
23
+ import { MultiTableReturningInterface } from './returning-interface.js';
22
24
  import { UpdateQueryBuilder } from './update-query-builder.js';
23
- export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> implements OutputInterface<DB, TT, O> {
25
+ export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> implements MultiTableReturningInterface<DB, TT, O>, OutputInterface<DB, TT, O> {
24
26
  #private;
25
27
  constructor(props: MergeQueryBuilderProps);
26
28
  /**
@@ -122,6 +124,76 @@ export declare class MergeQueryBuilder<DB, TT extends keyof DB, O> implements Ou
122
124
  */
123
125
  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>;
124
126
  using<TE extends TableExpression<DB, TT>, FN extends JoinCallbackExpression<DB, TT, TE>>(sourceTable: TE, callback: FN): ExtractWheneableMergeQueryBuilder<DB, TT, TE, O>;
127
+ /**
128
+ * Allows you to return data from modified rows.
129
+ *
130
+ * On supported databases like PostgreSQL, this method can be chained to
131
+ * `insert`, `update`, `delete` and `merge` queries to return data.
132
+ *
133
+ * Note that on SQLite you need to give aliases for the expressions to avoid
134
+ * [this bug](https://sqlite.org/forum/forumpost/033daf0b32) in SQLite.
135
+ * For example `.returning('id as id')`.
136
+ *
137
+ * Also see the {@link returningAll} method.
138
+ *
139
+ * ### Examples
140
+ *
141
+ * Return one column:
142
+ *
143
+ * ```ts
144
+ * const { id } = await db
145
+ * .insertInto('person')
146
+ * .values({
147
+ * first_name: 'Jennifer',
148
+ * last_name: 'Aniston'
149
+ * })
150
+ * .returning('id')
151
+ * .executeTakeFirstOrThrow()
152
+ * ```
153
+ *
154
+ * Return multiple columns:
155
+ *
156
+ * ```ts
157
+ * const { id, last_name } = await db
158
+ * .insertInto('person')
159
+ * .values({
160
+ * first_name: 'Jennifer',
161
+ * last_name: 'Aniston'
162
+ * })
163
+ * .returning(['id', 'last_name'])
164
+ * .executeTakeFirstOrThrow()
165
+ * ```
166
+ *
167
+ * Return arbitrary expressions:
168
+ *
169
+ * ```ts
170
+ * import { sql } from 'kysely'
171
+ *
172
+ * const { id, full_name, first_pet_id } = await db
173
+ * .insertInto('person')
174
+ * .values({
175
+ * first_name: 'Jennifer',
176
+ * last_name: 'Aniston'
177
+ * })
178
+ * .returning((eb) => [
179
+ * 'id as id',
180
+ * sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
181
+ * eb.selectFrom('pet').select('pet.id').limit(1).as('first_pet_id')
182
+ * ])
183
+ * .executeTakeFirstOrThrow()
184
+ * ```
185
+ */
186
+ returning<SE extends SelectExpression<DB, TT>>(selections: ReadonlyArray<SE>): MergeQueryBuilder<DB, TT, ReturningRow<DB, TT, O, SE>>;
187
+ returning<CB extends SelectCallback<DB, TT>>(callback: CB): MergeQueryBuilder<DB, TT, ReturningCallbackRow<DB, TT, O, CB>>;
188
+ returning<SE extends SelectExpression<DB, TT>>(selection: SE): MergeQueryBuilder<DB, TT, ReturningRow<DB, TT, O, SE>>;
189
+ /**
190
+ * Adds a `returning *` or `returning table.*` to an insert/update/delete/merge
191
+ * query on databases that support `returning` such as PostgreSQL.
192
+ *
193
+ * Also see the {@link returning} method.
194
+ */
195
+ returningAll<T extends TT>(table: T): MergeQueryBuilder<DB, TT, ReturningAllRow<DB, T, O>>;
196
+ returningAll(): MergeQueryBuilder<DB, TT, ReturningAllRow<DB, TT, O>>;
125
197
  /**
126
198
  * Allows you to return data from modified rows.
127
199
  *
@@ -252,7 +324,7 @@ export interface MergeQueryBuilderProps {
252
324
  readonly queryNode: MergeQueryNode;
253
325
  readonly executor: QueryExecutor;
254
326
  }
255
- export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST extends keyof DB, O> implements Compilable<O>, OutputInterface<DB, TT, O>, OperationNodeSource {
327
+ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST extends keyof DB, O> implements Compilable<O>, MultiTableReturningInterface<DB, TT | ST, O>, OutputInterface<DB, TT, O>, OperationNodeSource {
256
328
  #private;
257
329
  constructor(props: MergeQueryBuilderProps);
258
330
  /**
@@ -449,6 +521,76 @@ export declare class WheneableMergeQueryBuilder<DB, TT extends keyof DB, ST exte
449
521
  * the target table, and not from source table and returns a {@link MatchedThenableMergeQueryBuilder}.
450
522
  */
451
523
  whenNotMatchedBySourceAndRef<LRE extends ReferenceExpression<DB, TT>, RRE extends ReferenceExpression<DB, TT>>(lhs: LRE, op: ComparisonOperatorExpression, rhs: RRE): MatchedThenableMergeQueryBuilder<DB, TT, ST, TT, O>;
524
+ /**
525
+ * Allows you to return data from modified rows.
526
+ *
527
+ * On supported databases like PostgreSQL, this method can be chained to
528
+ * `insert`, `update`, `delete` and `merge` queries to return data.
529
+ *
530
+ * Note that on SQLite you need to give aliases for the expressions to avoid
531
+ * [this bug](https://sqlite.org/forum/forumpost/033daf0b32) in SQLite.
532
+ * For example `.returning('id as id')`.
533
+ *
534
+ * Also see the {@link returningAll} method.
535
+ *
536
+ * ### Examples
537
+ *
538
+ * Return one column:
539
+ *
540
+ * ```ts
541
+ * const { id } = await db
542
+ * .insertInto('person')
543
+ * .values({
544
+ * first_name: 'Jennifer',
545
+ * last_name: 'Aniston'
546
+ * })
547
+ * .returning('id')
548
+ * .executeTakeFirstOrThrow()
549
+ * ```
550
+ *
551
+ * Return multiple columns:
552
+ *
553
+ * ```ts
554
+ * const { id, last_name } = await db
555
+ * .insertInto('person')
556
+ * .values({
557
+ * first_name: 'Jennifer',
558
+ * last_name: 'Aniston'
559
+ * })
560
+ * .returning(['id', 'last_name'])
561
+ * .executeTakeFirstOrThrow()
562
+ * ```
563
+ *
564
+ * Return arbitrary expressions:
565
+ *
566
+ * ```ts
567
+ * import { sql } from 'kysely'
568
+ *
569
+ * const { id, full_name, first_pet_id } = await db
570
+ * .insertInto('person')
571
+ * .values({
572
+ * first_name: 'Jennifer',
573
+ * last_name: 'Aniston'
574
+ * })
575
+ * .returning((eb) => [
576
+ * 'id as id',
577
+ * sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
578
+ * eb.selectFrom('pet').select('pet.id').limit(1).as('first_pet_id')
579
+ * ])
580
+ * .executeTakeFirstOrThrow()
581
+ * ```
582
+ */
583
+ returning<SE extends SelectExpression<DB, TT | ST>>(selections: ReadonlyArray<SE>): WheneableMergeQueryBuilder<DB, TT, ST, ReturningRow<DB, TT | ST, O, SE>>;
584
+ returning<CB extends SelectCallback<DB, TT | ST>>(callback: CB): WheneableMergeQueryBuilder<DB, TT, ST, ReturningCallbackRow<DB, TT | ST, O, CB>>;
585
+ returning<SE extends SelectExpression<DB, TT | ST>>(selection: SE): WheneableMergeQueryBuilder<DB, TT, ST, ReturningRow<DB, TT | ST, O, SE>>;
586
+ /**
587
+ * Adds a `returning *` or `returning table.*` to an insert/update/delete/merge
588
+ * query on databases that support `returning` such as PostgreSQL.
589
+ *
590
+ * Also see the {@link returning} method.
591
+ */
592
+ returningAll<T extends TT | ST>(table: T): WheneableMergeQueryBuilder<DB, TT, ST, ReturningAllRow<DB, T, O>>;
593
+ returningAll(): WheneableMergeQueryBuilder<DB, TT, ST, ReturningAllRow<DB, TT | ST, O>>;
452
594
  /**
453
595
  * Allows you to return data from modified rows.
454
596
  *
@@ -6,11 +6,10 @@ import { UpdateQueryNode } from '../operation-node/update-query-node.js';
6
6
  import { parseInsertExpression, } from '../parser/insert-values-parser.js';
7
7
  import { parseJoin, } from '../parser/join-parser.js';
8
8
  import { parseMergeThen, parseMergeWhen } from '../parser/merge-parser.js';
9
- import { parseSelectAll, parseSelectArg } from '../parser/select-parser.js';
9
+ import { parseSelectAll, parseSelectArg, } from '../parser/select-parser.js';
10
10
  import { parseTop } from '../parser/top-parser.js';
11
11
  import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';
12
12
  import { freeze } from '../util/object-utils.js';
13
- import { preventAwait } from '../util/prevent-await.js';
14
13
  import { MergeResult } from './merge-result.js';
15
14
  import { NoResultError, isNoResultErrorConstructor, } from './no-result-error.js';
16
15
  import { UpdateQueryBuilder } from './update-query-builder.js';
@@ -107,6 +106,18 @@ export class MergeQueryBuilder {
107
106
  queryNode: MergeQueryNode.cloneWithUsing(this.#props.queryNode, parseJoin('Using', args)),
108
107
  });
109
108
  }
109
+ returning(args) {
110
+ return new MergeQueryBuilder({
111
+ ...this.#props,
112
+ queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectArg(args)),
113
+ });
114
+ }
115
+ returningAll(table) {
116
+ return new MergeQueryBuilder({
117
+ ...this.#props,
118
+ queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll(table)),
119
+ });
120
+ }
110
121
  output(args) {
111
122
  return new MergeQueryBuilder({
112
123
  ...this.#props,
@@ -120,7 +131,6 @@ export class MergeQueryBuilder {
120
131
  });
121
132
  }
122
133
  }
123
- preventAwait(MergeQueryBuilder, "don't await MergeQueryBuilder instances directly. To execute the query you need to call `execute` when available.");
124
134
  export class WheneableMergeQueryBuilder {
125
135
  #props;
126
136
  constructor(props) {
@@ -285,6 +295,18 @@ export class WheneableMergeQueryBuilder {
285
295
  whenNotMatchedBySourceAndRef(lhs, op, rhs) {
286
296
  return this.#whenNotMatched([lhs, op, rhs], true, true);
287
297
  }
298
+ returning(args) {
299
+ return new WheneableMergeQueryBuilder({
300
+ ...this.#props,
301
+ queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectArg(args)),
302
+ });
303
+ }
304
+ returningAll(table) {
305
+ return new WheneableMergeQueryBuilder({
306
+ ...this.#props,
307
+ queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll(table)),
308
+ });
309
+ }
288
310
  output(args) {
289
311
  return new WheneableMergeQueryBuilder({
290
312
  ...this.#props,
@@ -395,8 +417,10 @@ export class WheneableMergeQueryBuilder {
395
417
  async execute() {
396
418
  const compiledQuery = this.compile();
397
419
  const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
398
- if (compiledQuery.query.output &&
399
- this.#props.executor.adapter.supportsOutput) {
420
+ const { adapter } = this.#props.executor;
421
+ const query = compiledQuery.query;
422
+ if ((query.returning && adapter.supportsReturning) ||
423
+ (query.output && adapter.supportsOutput)) {
400
424
  return result.rows;
401
425
  }
402
426
  return [new MergeResult(result.numAffectedRows)];
@@ -428,7 +452,6 @@ export class WheneableMergeQueryBuilder {
428
452
  return result;
429
453
  }
430
454
  }
431
- preventAwait(WheneableMergeQueryBuilder, "don't await WheneableMergeQueryBuilder instances directly. To execute the query you need to call `execute`.");
432
455
  export class MatchedThenableMergeQueryBuilder {
433
456
  #props;
434
457
  constructor(props) {
@@ -551,7 +574,6 @@ export class MatchedThenableMergeQueryBuilder {
551
574
  return this.thenUpdate((ub) => ub.set(...args));
552
575
  }
553
576
  }
554
- preventAwait(MatchedThenableMergeQueryBuilder, "don't await MatchedThenableMergeQueryBuilder instances directly. To execute the query you need to call `execute` when available.");
555
577
  export class NotMatchedThenableMergeQueryBuilder {
556
578
  #props;
557
579
  constructor(props) {
@@ -600,4 +622,3 @@ export class NotMatchedThenableMergeQueryBuilder {
600
622
  });
601
623
  }
602
624
  }
603
- preventAwait(NotMatchedThenableMergeQueryBuilder, "don't await NotMatchedThenableMergeQueryBuilder instances directly. To execute the query you need to call `execute` when available.");
@@ -5,7 +5,6 @@ import { OnConflictNode } from '../operation-node/on-conflict-node.js';
5
5
  import { parseValueBinaryOperationOrExpression, parseReferentialBinaryOperation, } from '../parser/binary-operation-parser.js';
6
6
  import { parseUpdateObjectExpression, } from '../parser/update-set-parser.js';
7
7
  import { freeze } from '../util/object-utils.js';
8
- import { preventAwait } from '../util/prevent-await.js';
9
8
  export class OnConflictBuilder {
10
9
  #props;
11
10
  constructor(props) {
@@ -205,7 +204,6 @@ export class OnConflictBuilder {
205
204
  return func(this);
206
205
  }
207
206
  }
208
- preventAwait(OnConflictBuilder, "don't await OnConflictBuilder instances.");
209
207
  export class OnConflictDoNothingBuilder {
210
208
  #props;
211
209
  constructor(props) {
@@ -215,7 +213,6 @@ export class OnConflictDoNothingBuilder {
215
213
  return this.#props.onConflictNode;
216
214
  }
217
215
  }
218
- preventAwait(OnConflictDoNothingBuilder, "don't await OnConflictDoNothingBuilder instances.");
219
216
  export class OnConflictUpdateBuilder {
220
217
  #props;
221
218
  constructor(props) {
@@ -255,4 +252,3 @@ export class OnConflictUpdateBuilder {
255
252
  return this.#props.onConflictNode;
256
253
  }
257
254
  }
258
- preventAwait(OnConflictUpdateBuilder, "don't await OnConflictUpdateBuilder instances.");
@@ -0,0 +1,176 @@
1
+ import { Expression } from '../expression/expression.js';
2
+ import { OrderByExpression, DirectedOrderByStringReference, OrderByModifiers } from '../parser/order-by-parser.js';
3
+ export interface OrderByInterface<DB, TB extends keyof DB, O> {
4
+ /**
5
+ * Adds an `order by` clause to the query.
6
+ *
7
+ * `orderBy` calls are additive. Meaning, additional `orderBy` calls append to
8
+ * the existing order by clause.
9
+ *
10
+ * `orderBy` is supported in select queries on all dialects. In MySQL, you can
11
+ * also use `orderBy` in update and delete queries.
12
+ *
13
+ * In a single call you can add a single column/expression or multiple columns/expressions.
14
+ *
15
+ * Single column/expression calls can have 1-2 arguments. The first argument is
16
+ * the expression to order by, while the second optional argument is the direction
17
+ * (`asc` or `desc`), a callback that accepts and returns an {@link OrderByItemBuilder}
18
+ * or an expression.
19
+ *
20
+ * See {@link clearOrderBy} to remove the `order by` clause from a query.
21
+ *
22
+ * ### Examples
23
+ *
24
+ * Single column/expression per call:
25
+ *
26
+ * ```ts
27
+ * await db
28
+ * .selectFrom('person')
29
+ * .select('person.first_name as fn')
30
+ * .orderBy('id')
31
+ * .orderBy('fn', 'desc')
32
+ * .execute()
33
+ * ```
34
+ *
35
+ * The generated SQL (PostgreSQL):
36
+ *
37
+ * ```sql
38
+ * select "person"."first_name" as "fn"
39
+ * from "person"
40
+ * order by "id", "fn" desc
41
+ * ```
42
+ *
43
+ * Multiple columns/expressions per call:
44
+ *
45
+ * ```ts
46
+ * await db
47
+ * .selectFrom('person')
48
+ * .select('person.first_name as fn')
49
+ * .orderBy(['id', 'fn'])
50
+ * .execute()
51
+ * ```
52
+ *
53
+ * The generated SQL (PostgreSQL):
54
+ *
55
+ * ```sql
56
+ * select "person"."first_name" as "fn"
57
+ * from "person"
58
+ * order by "id", "fn"
59
+ * ```
60
+ *
61
+ * Building advanced modifiers:
62
+ *
63
+ * ```ts
64
+ * await db
65
+ * .selectFrom('person')
66
+ * .select('person.first_name as fn')
67
+ * .orderBy('id', (ob) => ob.desc().nullsFirst())
68
+ * .execute()
69
+ * ```
70
+ *
71
+ * The generated SQL (PostgreSQL):
72
+ *
73
+ * ```sql
74
+ * select "person"."first_name" as "fn"
75
+ * from "person"
76
+ * order by "id" desc nulls first
77
+ * ```
78
+ *
79
+ * The order by expression can also be a raw sql expression or a subquery
80
+ * in addition to column references:
81
+ *
82
+ * ```ts
83
+ * import { sql } from 'kysely'
84
+ *
85
+ * await db
86
+ * .selectFrom('person')
87
+ * .selectAll()
88
+ * .orderBy((eb) => eb.selectFrom('pet')
89
+ * .select('pet.name')
90
+ * .whereRef('pet.owner_id', '=', 'person.id')
91
+ * .limit(1)
92
+ * )
93
+ * .orderBy(
94
+ * sql<string>`concat(first_name, last_name) asc`
95
+ * )
96
+ * .execute()
97
+ * ```
98
+ *
99
+ * The generated SQL (PostgreSQL):
100
+ *
101
+ * ```sql
102
+ * select *
103
+ * from "person"
104
+ * order by
105
+ * ( select "pet"."name"
106
+ * from "pet"
107
+ * where "pet"."owner_id" = "person"."id"
108
+ * limit $1
109
+ * ) asc,
110
+ * concat(first_name, last_name) asc
111
+ * ```
112
+ *
113
+ * `dynamic.ref` can be used to refer to columns not known at
114
+ * compile time:
115
+ *
116
+ * ```ts
117
+ * async function someQuery(orderBy: string) {
118
+ * const { ref } = db.dynamic
119
+ *
120
+ * return await db
121
+ * .selectFrom('person')
122
+ * .select('person.first_name as fn')
123
+ * .orderBy(ref(orderBy))
124
+ * .execute()
125
+ * }
126
+ *
127
+ * someQuery('fn')
128
+ * ```
129
+ *
130
+ * The generated SQL (PostgreSQL):
131
+ *
132
+ * ```sql
133
+ * select "person"."first_name" as "fn"
134
+ * from "person"
135
+ * order by "fn"
136
+ * ```
137
+ */
138
+ orderBy<OE extends OrderByExpression<DB, TB, O>>(expr: OE, modifiers?: OrderByModifiers): OrderByInterface<DB, TB, O>;
139
+ /**
140
+ * @deprecated It does ~2-2.6x more compile-time instantiations compared to multiple chained `orderBy(expr, modifiers?)` calls (in `order by` clauses with reasonable item counts), and has broken autocompletion.
141
+ */
142
+ orderBy<OE extends OrderByExpression<DB, TB, O> | DirectedOrderByStringReference<DB, TB, O>>(exprs: ReadonlyArray<OE>): OrderByInterface<DB, TB, O>;
143
+ /**
144
+ * @deprecated It does ~2.9x more compile-time instantiations compared to a `orderBy(expr, direction)` call.
145
+ */
146
+ orderBy<OE extends DirectedOrderByStringReference<DB, TB, O>>(expr: OE): OrderByInterface<DB, TB, O>;
147
+ /**
148
+ * @deprecated Use `orderBy(expr, (ob) => ...)` instead.
149
+ */
150
+ orderBy<OE extends OrderByExpression<DB, TB, O>>(expr: OE, modifiers: Expression<any>): OrderByInterface<DB, TB, O>;
151
+ /**
152
+ * Clears the `order by` clause from the query.
153
+ *
154
+ * See {@link orderBy} for adding an `order by` clause or item to a query.
155
+ *
156
+ * ### Examples
157
+ *
158
+ * ```ts
159
+ * const query = db
160
+ * .selectFrom('person')
161
+ * .selectAll()
162
+ * .orderBy('id', 'desc')
163
+ *
164
+ * const results = await query
165
+ * .clearOrderBy()
166
+ * .execute()
167
+ * ```
168
+ *
169
+ * The generated SQL (PostgreSQL):
170
+ *
171
+ * ```sql
172
+ * select * from "person"
173
+ * ```
174
+ */
175
+ clearOrderBy(): OrderByInterface<DB, TB, O>;
176
+ }
@@ -0,0 +1,2 @@
1
+ /// <reference types="./order-by-interface.d.ts" />
2
+ export {};
@@ -0,0 +1,43 @@
1
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
2
+ import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
3
+ import { Collation } from '../parser/collate-parser.js';
4
+ export declare class OrderByItemBuilder implements OperationNodeSource {
5
+ #private;
6
+ constructor(props: OrderByItemBuilderProps);
7
+ /**
8
+ * Adds `desc` to the `order by` item.
9
+ *
10
+ * See {@link asc} for the opposite.
11
+ */
12
+ desc(): OrderByItemBuilder;
13
+ /**
14
+ * Adds `asc` to the `order by` item.
15
+ *
16
+ * See {@link desc} for the opposite.
17
+ */
18
+ asc(): OrderByItemBuilder;
19
+ /**
20
+ * Adds `nulls last` to the `order by` item.
21
+ *
22
+ * This is only supported by some dialects like PostgreSQL and SQLite.
23
+ *
24
+ * See {@link nullsFirst} for the opposite.
25
+ */
26
+ nullsLast(): OrderByItemBuilder;
27
+ /**
28
+ * Adds `nulls first` to the `order by` item.
29
+ *
30
+ * This is only supported by some dialects like PostgreSQL and SQLite.
31
+ *
32
+ * See {@link nullsLast} for the opposite.
33
+ */
34
+ nullsFirst(): OrderByItemBuilder;
35
+ /**
36
+ * Adds `collate <collationName>` to the `order by` item.
37
+ */
38
+ collate(collation: Collation): OrderByItemBuilder;
39
+ toOperationNode(): OrderByItemNode;
40
+ }
41
+ export interface OrderByItemBuilderProps {
42
+ readonly node: OrderByItemNode;
43
+ }
@@ -0,0 +1,72 @@
1
+ /// <reference types="./order-by-item-builder.d.ts" />
2
+ import { CollateNode } from '../operation-node/collate-node.js';
3
+ import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
4
+ import { RawNode } from '../operation-node/raw-node.js';
5
+ import { freeze } from '../util/object-utils.js';
6
+ export class OrderByItemBuilder {
7
+ #props;
8
+ constructor(props) {
9
+ this.#props = freeze(props);
10
+ }
11
+ /**
12
+ * Adds `desc` to the `order by` item.
13
+ *
14
+ * See {@link asc} for the opposite.
15
+ */
16
+ desc() {
17
+ return new OrderByItemBuilder({
18
+ node: OrderByItemNode.cloneWith(this.#props.node, {
19
+ direction: RawNode.createWithSql('desc'),
20
+ }),
21
+ });
22
+ }
23
+ /**
24
+ * Adds `asc` to the `order by` item.
25
+ *
26
+ * See {@link desc} for the opposite.
27
+ */
28
+ asc() {
29
+ return new OrderByItemBuilder({
30
+ node: OrderByItemNode.cloneWith(this.#props.node, {
31
+ direction: RawNode.createWithSql('asc'),
32
+ }),
33
+ });
34
+ }
35
+ /**
36
+ * Adds `nulls last` to the `order by` item.
37
+ *
38
+ * This is only supported by some dialects like PostgreSQL and SQLite.
39
+ *
40
+ * See {@link nullsFirst} for the opposite.
41
+ */
42
+ nullsLast() {
43
+ return new OrderByItemBuilder({
44
+ node: OrderByItemNode.cloneWith(this.#props.node, { nulls: 'last' }),
45
+ });
46
+ }
47
+ /**
48
+ * Adds `nulls first` to the `order by` item.
49
+ *
50
+ * This is only supported by some dialects like PostgreSQL and SQLite.
51
+ *
52
+ * See {@link nullsLast} for the opposite.
53
+ */
54
+ nullsFirst() {
55
+ return new OrderByItemBuilder({
56
+ node: OrderByItemNode.cloneWith(this.#props.node, { nulls: 'first' }),
57
+ });
58
+ }
59
+ /**
60
+ * Adds `collate <collationName>` to the `order by` item.
61
+ */
62
+ collate(collation) {
63
+ return new OrderByItemBuilder({
64
+ node: OrderByItemNode.cloneWith(this.#props.node, {
65
+ collation: CollateNode.create(collation),
66
+ }),
67
+ });
68
+ }
69
+ toOperationNode() {
70
+ return this.#props.node;
71
+ }
72
+ }
@@ -1,14 +1,14 @@
1
- import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
1
+ import { Expression } from '../expression/expression.js';
2
2
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
3
  import { OverNode } from '../operation-node/over-node.js';
4
- import { OrderByDirectionExpression } from '../parser/order-by-parser.js';
4
+ import { DirectedOrderByStringReference, OrderByExpression, OrderByModifiers } from '../parser/order-by-parser.js';
5
5
  import { PartitionByExpression } from '../parser/partition-by-parser.js';
6
- import { StringReference } from '../parser/reference-parser.js';
7
- export declare class OverBuilder<DB, TB extends keyof DB> implements OperationNodeSource {
6
+ import { OrderByInterface } from './order-by-interface.js';
7
+ export declare class OverBuilder<DB, TB extends keyof DB> implements OrderByInterface<DB, TB, {}>, OperationNodeSource {
8
8
  #private;
9
9
  constructor(props: OverBuilderProps);
10
10
  /**
11
- * Adds an order by clause item inside the over function.
11
+ * Adds an `order by` clause or item inside the `over` function.
12
12
  *
13
13
  * ```ts
14
14
  * const result = await db
@@ -28,7 +28,44 @@ export declare class OverBuilder<DB, TB extends keyof DB> implements OperationNo
28
28
  * from "person"
29
29
  * ```
30
30
  */
31
- orderBy<OE extends StringReference<DB, TB> | DynamicReferenceBuilder<any>>(orderBy: OE, direction?: OrderByDirectionExpression): OverBuilder<DB, TB>;
31
+ orderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers?: OrderByModifiers): OverBuilder<DB, TB>;
32
+ /**
33
+ * @deprecated It does ~2-2.6x more compile-time instantiations compared to multiple chained `orderBy(expr, modifiers?)` calls (in `order by` clauses with reasonable item counts), and has broken autocompletion.
34
+ */
35
+ orderBy<OE extends OrderByExpression<DB, TB, {}> | DirectedOrderByStringReference<DB, TB, {}>>(exprs: ReadonlyArray<OE>): OverBuilder<DB, TB>;
36
+ /**
37
+ * @deprecated It does ~2.9x more compile-time instantiations compared to a `orderBy(expr, direction)` call.
38
+ */
39
+ orderBy<OE extends DirectedOrderByStringReference<DB, TB, {}>>(expr: OE): OverBuilder<DB, TB>;
40
+ /**
41
+ * @deprecated Use `orderBy(expr, (ob) => ...)` instead.
42
+ */
43
+ orderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers: Expression<any>): OverBuilder<DB, TB>;
44
+ /**
45
+ * Clears the `order by` clause from the query.
46
+ *
47
+ * See {@link orderBy} for adding an `order by` clause or item to a query.
48
+ *
49
+ * ### Examples
50
+ *
51
+ * ```ts
52
+ * const query = db
53
+ * .selectFrom('person')
54
+ * .selectAll()
55
+ * .orderBy('id', 'desc')
56
+ *
57
+ * const results = await query
58
+ * .clearOrderBy()
59
+ * .execute()
60
+ * ```
61
+ *
62
+ * The generated SQL (PostgreSQL):
63
+ *
64
+ * ```sql
65
+ * select * from "person"
66
+ * ```
67
+ */
68
+ clearOrderBy(): OverBuilder<DB, TB>;
32
69
  /**
33
70
  * Adds partition by clause item/s inside the over function.
34
71
  *