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
@@ -0,0 +1,26 @@
1
+ /// <reference types="./handle-empty-in-lists-transformer.d.ts" />
2
+ import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
3
+ import { PrimitiveValueListNode } from '../../operation-node/primitive-value-list-node.js';
4
+ import { OperatorNode } from '../../operation-node/operator-node.js';
5
+ import { ValueListNode } from '../../operation-node/value-list-node.js';
6
+ export class HandleEmptyInListsTransformer extends OperationNodeTransformer {
7
+ #strategy;
8
+ constructor(strategy) {
9
+ super();
10
+ this.#strategy = strategy;
11
+ }
12
+ transformBinaryOperation(node) {
13
+ if (this.#isEmptyInListNode(node)) {
14
+ return this.#strategy(node);
15
+ }
16
+ return node;
17
+ }
18
+ #isEmptyInListNode(node) {
19
+ const { operator, rightOperand } = node;
20
+ return ((PrimitiveValueListNode.is(rightOperand) ||
21
+ ValueListNode.is(rightOperand)) &&
22
+ rightOperand.values.length === 0 &&
23
+ OperatorNode.is(operator) &&
24
+ (operator.operator === 'in' || operator.operator === 'not in'));
25
+ }
26
+ }
@@ -0,0 +1,44 @@
1
+ import { BinaryOperationNode } from '../../operation-node/binary-operation-node.js';
2
+ import { OperatorNode } from '../../operation-node/operator-node.js';
3
+ import { PrimitiveValueListNode } from '../../operation-node/primitive-value-list-node.js';
4
+ import { ValueListNode } from '../../operation-node/value-list-node.js';
5
+ export interface HandleEmptyInListsOptions {
6
+ /**
7
+ * The strategy to use when handling `in ()` and `not in ()`.
8
+ *
9
+ * See {@link HandleEmptyInListsPlugin} for examples.
10
+ */
11
+ strategy: EmptyInListsStrategy;
12
+ }
13
+ export type EmptyInListNode = BinaryOperationNode & {
14
+ operator: OperatorNode & {
15
+ operator: 'in' | 'not in';
16
+ };
17
+ rightOperand: (ValueListNode | PrimitiveValueListNode) & {
18
+ values: Readonly<[]>;
19
+ };
20
+ };
21
+ export type EmptyInListsStrategy = (node: EmptyInListNode) => BinaryOperationNode;
22
+ /**
23
+ * Replaces the `in`/`not in` expression with a noncontingent expression (always true or always
24
+ * false) depending on the original operator.
25
+ *
26
+ * This is how Knex.js, PrismaORM, Laravel, and SQLAlchemy handle `in ()` and `not in ()`.
27
+ *
28
+ * See {@link pushValueIntoList} for an alternative strategy.
29
+ */
30
+ export declare function replaceWithNoncontingentExpression(node: EmptyInListNode): BinaryOperationNode;
31
+ /**
32
+ * When `in`, pushes a `null` value into the list resulting in `in (null)`. This
33
+ * is how TypeORM and Sequelize handle `in ()`. `in (null)` is logically the equivalent
34
+ * of `= null`, which returns `null`, which is a falsy expression in most SQL databases.
35
+ * We recommend NOT using this strategy if you plan to use `in` in `select`, `returning`,
36
+ * or `output` clauses, as the return type differs from the `SqlBool` default type.
37
+ *
38
+ * When `not in`, casts the left operand as `char` and pushes a literal value into
39
+ * the list resulting in `cast({{lhs}} as char) not in ({{VALUE}})`. Casting
40
+ * is required to avoid database errors with non-string columns.
41
+ *
42
+ * See {@link replaceWithNoncontingentExpression} for an alternative strategy.
43
+ */
44
+ export declare function pushValueIntoList(uniqueNotInLiteral: '__kysely_no_values_were_provided__' | (string & {})): EmptyInListsStrategy;
@@ -0,0 +1,63 @@
1
+ /// <reference types="./handle-empty-in-lists.d.ts" />
2
+ import { BinaryOperationNode } from '../../operation-node/binary-operation-node.js';
3
+ import { CastNode } from '../../operation-node/cast-node.js';
4
+ import { DataTypeNode } from '../../operation-node/data-type-node.js';
5
+ import { OperatorNode } from '../../operation-node/operator-node.js';
6
+ import { ValueListNode } from '../../operation-node/value-list-node.js';
7
+ import { ValueNode } from '../../operation-node/value-node.js';
8
+ import { freeze } from '../../util/object-utils.js';
9
+ let contradiction;
10
+ let eq;
11
+ let one;
12
+ let tautology;
13
+ /**
14
+ * Replaces the `in`/`not in` expression with a noncontingent expression (always true or always
15
+ * false) depending on the original operator.
16
+ *
17
+ * This is how Knex.js, PrismaORM, Laravel, and SQLAlchemy handle `in ()` and `not in ()`.
18
+ *
19
+ * See {@link pushValueIntoList} for an alternative strategy.
20
+ */
21
+ export function replaceWithNoncontingentExpression(node) {
22
+ const _one = (one ||= ValueNode.createImmediate(1));
23
+ const _eq = (eq ||= OperatorNode.create('='));
24
+ if (node.operator.operator === 'in') {
25
+ return (contradiction ||= BinaryOperationNode.create(_one, _eq, ValueNode.createImmediate(0)));
26
+ }
27
+ return (tautology ||= BinaryOperationNode.create(_one, _eq, _one));
28
+ }
29
+ let char;
30
+ let listNull;
31
+ let listVal;
32
+ /**
33
+ * When `in`, pushes a `null` value into the list resulting in `in (null)`. This
34
+ * is how TypeORM and Sequelize handle `in ()`. `in (null)` is logically the equivalent
35
+ * of `= null`, which returns `null`, which is a falsy expression in most SQL databases.
36
+ * We recommend NOT using this strategy if you plan to use `in` in `select`, `returning`,
37
+ * or `output` clauses, as the return type differs from the `SqlBool` default type.
38
+ *
39
+ * When `not in`, casts the left operand as `char` and pushes a literal value into
40
+ * the list resulting in `cast({{lhs}} as char) not in ({{VALUE}})`. Casting
41
+ * is required to avoid database errors with non-string columns.
42
+ *
43
+ * See {@link replaceWithNoncontingentExpression} for an alternative strategy.
44
+ */
45
+ export function pushValueIntoList(uniqueNotInLiteral) {
46
+ return function pushValueIntoList(node) {
47
+ if (node.operator.operator === 'in') {
48
+ return freeze({
49
+ ...node,
50
+ rightOperand: (listNull ||= ValueListNode.create([
51
+ ValueNode.createImmediate(null),
52
+ ])),
53
+ });
54
+ }
55
+ return freeze({
56
+ ...node,
57
+ leftOperand: CastNode.create(node.leftOperand, (char ||= DataTypeNode.create('char'))),
58
+ rightOperand: (listVal ||= ValueListNode.create([
59
+ ValueNode.createImmediate(uniqueNotInLiteral),
60
+ ])),
61
+ });
62
+ };
63
+ }
@@ -11,7 +11,7 @@ import { ImmediateValueTransformer } from './immediate-value-transformer.js';
11
11
  export class ImmediateValuePlugin {
12
12
  #transformer = new ImmediateValueTransformer();
13
13
  transformQuery(args) {
14
- return this.#transformer.transformNode(args.node);
14
+ return this.#transformer.transformNode(args.node, args.queryId);
15
15
  }
16
16
  transformResult(args) {
17
17
  return Promise.resolve(args.result);
@@ -1,4 +1,5 @@
1
1
  import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
2
+ import { PrimitiveValueListNode } from '../../operation-node/primitive-value-list-node.js';
2
3
  import { ValueNode } from '../../operation-node/value-node.js';
3
4
  /**
4
5
  * Transforms all ValueNodes to immediate.
@@ -9,5 +10,6 @@ import { ValueNode } from '../../operation-node/value-node.js';
9
10
  * @internal
10
11
  */
11
12
  export declare class ImmediateValueTransformer extends OperationNodeTransformer {
13
+ transformPrimitiveValueList(node: PrimitiveValueListNode): PrimitiveValueListNode;
12
14
  transformValue(node: ValueNode): ValueNode;
13
15
  }
@@ -1,5 +1,7 @@
1
1
  /// <reference types="./immediate-value-transformer.d.ts" />
2
2
  import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
3
+ import { ValueListNode } from '../../operation-node/value-list-node.js';
4
+ import { ValueNode } from '../../operation-node/value-node.js';
3
5
  /**
4
6
  * Transforms all ValueNodes to immediate.
5
7
  *
@@ -9,10 +11,10 @@ import { OperationNodeTransformer } from '../../operation-node/operation-node-tr
9
11
  * @internal
10
12
  */
11
13
  export class ImmediateValueTransformer extends OperationNodeTransformer {
14
+ transformPrimitiveValueList(node) {
15
+ return ValueListNode.create(node.values.map(ValueNode.createImmediate));
16
+ }
12
17
  transformValue(node) {
13
- return {
14
- ...super.transformValue(node),
15
- immediate: true,
16
- };
18
+ return ValueNode.createImmediate(node.value);
17
19
  }
18
20
  }
@@ -6,7 +6,7 @@ export class WithSchemaPlugin {
6
6
  this.#transformer = new WithSchemaTransformer(schema);
7
7
  }
8
8
  transformQuery(args) {
9
- return this.#transformer.transformNode(args.node);
9
+ return this.#transformer.transformNode(args.node, args.queryId);
10
10
  }
11
11
  async transformResult(args) {
12
12
  return args.result;
@@ -1,11 +1,16 @@
1
+ import { AggregateFunctionNode } from '../../operation-node/aggregate-function-node.js';
2
+ import { FunctionNode } from '../../operation-node/function-node.js';
1
3
  import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
2
4
  import { OperationNode } from '../../operation-node/operation-node.js';
3
5
  import { ReferencesNode } from '../../operation-node/references-node.js';
4
6
  import { SchemableIdentifierNode } from '../../operation-node/schemable-identifier-node.js';
7
+ import { QueryId } from '../../util/query-id.js';
5
8
  export declare class WithSchemaTransformer extends OperationNodeTransformer {
6
9
  #private;
7
10
  constructor(schema: string);
8
- protected transformNodeImpl<T extends OperationNode>(node: T): T;
9
- protected transformSchemableIdentifier(node: SchemableIdentifierNode): SchemableIdentifierNode;
10
- protected transformReferences(node: ReferencesNode): ReferencesNode;
11
+ protected transformNodeImpl<T extends OperationNode>(node: T, queryId: QueryId): T;
12
+ protected transformSchemableIdentifier(node: SchemableIdentifierNode, queryId: QueryId): SchemableIdentifierNode;
13
+ protected transformReferences(node: ReferencesNode, queryId: QueryId): ReferencesNode;
14
+ protected transformAggregateFunction(node: AggregateFunctionNode, queryId: QueryId): AggregateFunctionNode;
15
+ protected transformFunction(node: FunctionNode, queryId: QueryId): FunctionNode;
11
16
  }
@@ -1,6 +1,7 @@
1
1
  /// <reference types="./with-schema-transformer.d.ts" />
2
2
  import { AliasNode } from '../../operation-node/alias-node.js';
3
3
  import { IdentifierNode } from '../../operation-node/identifier-node.js';
4
+ import { ListNode } from '../../operation-node/list-node.js';
4
5
  import { OperationNodeTransformer } from '../../operation-node/operation-node-transformer.js';
5
6
  import { SchemableIdentifierNode } from '../../operation-node/schemable-identifier-node.js';
6
7
  import { TableNode } from '../../operation-node/table-node.js';
@@ -17,6 +18,7 @@ const ROOT_OPERATION_NODES = freeze({
17
18
  CreateTableNode: true,
18
19
  CreateTypeNode: true,
19
20
  CreateViewNode: true,
21
+ RefreshMaterializedViewNode: true,
20
22
  DeleteQueryNode: true,
21
23
  DropIndexNode: true,
22
24
  DropSchemaNode: true,
@@ -29,6 +31,10 @@ const ROOT_OPERATION_NODES = freeze({
29
31
  UpdateQueryNode: true,
30
32
  MergeQueryNode: true,
31
33
  });
34
+ const SCHEMALESS_FUNCTIONS = {
35
+ json_agg: true,
36
+ to_json: true,
37
+ };
32
38
  export class WithSchemaTransformer extends OperationNodeTransformer {
33
39
  #schema;
34
40
  #schemableIds = new Set();
@@ -37,9 +43,9 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
37
43
  super();
38
44
  this.#schema = schema;
39
45
  }
40
- transformNodeImpl(node) {
46
+ transformNodeImpl(node, queryId) {
41
47
  if (!this.#isRootOperationNode(node)) {
42
- return super.transformNodeImpl(node);
48
+ return super.transformNodeImpl(node, queryId);
43
49
  }
44
50
  const ctes = this.#collectCTEs(node);
45
51
  for (const cte of ctes) {
@@ -49,7 +55,7 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
49
55
  for (const table of tables) {
50
56
  this.#schemableIds.add(table);
51
57
  }
52
- const transformed = super.transformNodeImpl(node);
58
+ const transformed = super.transformNodeImpl(node, queryId);
53
59
  for (const table of tables) {
54
60
  this.#schemableIds.delete(table);
55
61
  }
@@ -58,8 +64,8 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
58
64
  }
59
65
  return transformed;
60
66
  }
61
- transformSchemableIdentifier(node) {
62
- const transformed = super.transformSchemableIdentifier(node);
67
+ transformSchemableIdentifier(node, queryId) {
68
+ const transformed = super.transformSchemableIdentifier(node, queryId);
63
69
  if (transformed.schema || !this.#schemableIds.has(node.identifier.name)) {
64
70
  return transformed;
65
71
  }
@@ -68,8 +74,8 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
68
74
  schema: IdentifierNode.create(this.#schema),
69
75
  };
70
76
  }
71
- transformReferences(node) {
72
- const transformed = super.transformReferences(node);
77
+ transformReferences(node, queryId) {
78
+ const transformed = super.transformReferences(node, queryId);
73
79
  if (transformed.table.table.schema) {
74
80
  return transformed;
75
81
  }
@@ -78,6 +84,28 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
78
84
  table: TableNode.createWithSchema(this.#schema, transformed.table.table.identifier.name),
79
85
  };
80
86
  }
87
+ transformAggregateFunction(node, queryId) {
88
+ return {
89
+ ...super.transformAggregateFunction({ ...node, aggregated: [] }, queryId),
90
+ aggregated: this.#transformTableArgsWithoutSchemas(node, queryId, 'aggregated'),
91
+ };
92
+ }
93
+ transformFunction(node, queryId) {
94
+ return {
95
+ ...super.transformFunction({ ...node, arguments: [] }, queryId),
96
+ arguments: this.#transformTableArgsWithoutSchemas(node, queryId, 'arguments'),
97
+ };
98
+ }
99
+ #transformTableArgsWithoutSchemas(node, queryId, argsKey) {
100
+ return SCHEMALESS_FUNCTIONS[node.func]
101
+ ? node[argsKey].map((arg) => !TableNode.is(arg) || arg.table.schema
102
+ ? this.transformNode(arg, queryId)
103
+ : {
104
+ ...arg,
105
+ table: this.transformIdentifier(arg.table.identifier, queryId),
106
+ })
107
+ : this.transformNodeList(node[argsKey], queryId);
108
+ }
81
109
  #isRootOperationNode(node) {
82
110
  return node.kind in ROOT_OPERATION_NODES;
83
111
  }
@@ -115,13 +143,16 @@ export class WithSchemaTransformer extends OperationNodeTransformer {
115
143
  return ctes;
116
144
  }
117
145
  #collectSchemableIdsFromTableExpr(node, schemableIds) {
118
- const table = TableNode.is(node)
119
- ? node
120
- : AliasNode.is(node) && TableNode.is(node.node)
121
- ? node.node
122
- : null;
123
- if (table) {
124
- this.#collectSchemableId(table.table, schemableIds);
146
+ if (TableNode.is(node)) {
147
+ this.#collectSchemableId(node.table, schemableIds);
148
+ }
149
+ else if (AliasNode.is(node) && TableNode.is(node.node)) {
150
+ this.#collectSchemableId(node.node.table, schemableIds);
151
+ }
152
+ else if (ListNode.is(node)) {
153
+ for (const table of node.items) {
154
+ this.#collectSchemableIdsFromTableExpr(table, schemableIds);
155
+ }
125
156
  }
126
157
  }
127
158
  #collectSchemableId(node, schemableIds) {
@@ -2,13 +2,13 @@ import { AggregateFunctionNode } from '../operation-node/aggregate-function-node
2
2
  import { AliasNode } from '../operation-node/alias-node.js';
3
3
  import { OverBuilder } from './over-builder.js';
4
4
  import { AliasableExpression, AliasedExpression, Expression } from '../expression/expression.js';
5
- import { ReferenceExpression, StringReference } from '../parser/reference-parser.js';
5
+ import { ReferenceExpression } from '../parser/reference-parser.js';
6
6
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
7
7
  import { SqlBool } from '../util/type-utils.js';
8
8
  import { ExpressionOrFactory } from '../parser/expression-parser.js';
9
- import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
10
- import { OrderByDirectionExpression } from '../parser/order-by-parser.js';
11
- export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown> implements AliasableExpression<O> {
9
+ import { DirectedOrderByStringReference, OrderByExpression, OrderByModifiers } from '../parser/order-by-parser.js';
10
+ import { OrderByInterface } from './order-by-interface.js';
11
+ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown> implements OrderByInterface<DB, TB, {}>, AliasableExpression<O> {
12
12
  #private;
13
13
  constructor(props: AggregateFunctionBuilderProps);
14
14
  /** @private */
@@ -108,7 +108,85 @@ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unkno
108
108
  * inner join "pet" ON "pet"."owner_id" = "person"."id"
109
109
  * ```
110
110
  */
111
- orderBy<OE extends StringReference<DB, TB> | DynamicReferenceBuilder<any>>(orderBy: OE, direction?: OrderByDirectionExpression): AggregateFunctionBuilder<DB, TB, O>;
111
+ orderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers?: OrderByModifiers): AggregateFunctionBuilder<DB, TB, O>;
112
+ /**
113
+ * @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.
114
+ */
115
+ orderBy<OE extends OrderByExpression<DB, TB, {}> | DirectedOrderByStringReference<DB, TB, {}>>(exprs: ReadonlyArray<OE>): AggregateFunctionBuilder<DB, TB, O>;
116
+ /**
117
+ * @deprecated It does ~2.9x more compile-time instantiations compared to a `orderBy(expr, direction)` call.
118
+ */
119
+ orderBy<OE extends DirectedOrderByStringReference<DB, TB, {}>>(expr: OE): AggregateFunctionBuilder<DB, TB, O>;
120
+ /**
121
+ * @deprecated Use `orderBy(expr, (ob) => ...)` instead.
122
+ */
123
+ orderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers: Expression<any>): AggregateFunctionBuilder<DB, TB, O>;
124
+ /**
125
+ * Clears the `order by` clause from the query.
126
+ *
127
+ * See {@link orderBy} for adding an `order by` clause or item to a query.
128
+ *
129
+ * ### Examples
130
+ *
131
+ * ```ts
132
+ * const query = db
133
+ * .selectFrom('person')
134
+ * .selectAll()
135
+ * .orderBy('id', 'desc')
136
+ *
137
+ * const results = await query
138
+ * .clearOrderBy()
139
+ * .execute()
140
+ * ```
141
+ *
142
+ * The generated SQL (PostgreSQL):
143
+ *
144
+ * ```sql
145
+ * select * from "person"
146
+ * ```
147
+ */
148
+ clearOrderBy(): AggregateFunctionBuilder<DB, TB, O>;
149
+ /**
150
+ * Adds a `withing group` clause with a nested `order by` clause after the function.
151
+ *
152
+ * This is only supported by some dialects like PostgreSQL or MS SQL Server.
153
+ *
154
+ * ### Examples
155
+ *
156
+ * Most frequent person name:
157
+ *
158
+ * ```ts
159
+ * const result = await db
160
+ * .selectFrom('person')
161
+ * .select((eb) => [
162
+ * eb.fn
163
+ * .agg<string>('mode')
164
+ * .withinGroupOrderBy('person.first_name')
165
+ * .as('most_frequent_name')
166
+ * ])
167
+ * .executeTakeFirstOrThrow()
168
+ * ```
169
+ *
170
+ * The generated SQL (PostgreSQL):
171
+ *
172
+ * ```sql
173
+ * select mode() within group (order by "person"."first_name") as "most_frequent_name"
174
+ * from "person"
175
+ * ```
176
+ */
177
+ withinGroupOrderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers?: OrderByModifiers): AggregateFunctionBuilder<DB, TB, O>;
178
+ /**
179
+ * @deprecated It does ~2-2.6x more compile-time instantiations compared to multiple chained `withinGroupOrderBy(expr, modifiers?)` calls (in `order by` clauses with reasonable item counts), and has broken autocompletion.
180
+ */
181
+ withinGroupOrderBy<OE extends OrderByExpression<DB, TB, {}> | DirectedOrderByStringReference<DB, TB, {}>>(exprs: ReadonlyArray<OE>): AggregateFunctionBuilder<DB, TB, O>;
182
+ /**
183
+ * @deprecated It does ~2.9x more compile-time instantiations compared to a `withinGroupOrderBy(expr, direction)` call.
184
+ */
185
+ withinGroupOrderBy<OE extends DirectedOrderByStringReference<DB, TB, {}>>(expr: OE): AggregateFunctionBuilder<DB, TB, O>;
186
+ /**
187
+ * @deprecated Use `withinGroupOrderBy(expr, (ob) => ...)` instead.
188
+ */
189
+ withinGroupOrderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers: Expression<any>): AggregateFunctionBuilder<DB, TB, O>;
112
190
  /**
113
191
  * Adds a `filter` clause with a nested `where` clause after the function.
114
192
  *
@@ -3,10 +3,10 @@ import { freeze } from '../util/object-utils.js';
3
3
  import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
4
4
  import { AliasNode } from '../operation-node/alias-node.js';
5
5
  import { IdentifierNode } from '../operation-node/identifier-node.js';
6
- import { preventAwait } from '../util/prevent-await.js';
7
6
  import { createOverBuilder } from '../parser/parse-utils.js';
8
7
  import { parseReferentialBinaryOperation, parseValueBinaryOperationOrExpression, } from '../parser/binary-operation-parser.js';
9
8
  import { parseOrderBy, } from '../parser/order-by-parser.js';
9
+ import { QueryNode } from '../operation-node/query-node.js';
10
10
  export class AggregateFunctionBuilder {
11
11
  #props;
12
12
  constructor(props) {
@@ -71,33 +71,22 @@ export class AggregateFunctionBuilder {
71
71
  aggregateFunctionNode: AggregateFunctionNode.cloneWithDistinct(this.#props.aggregateFunctionNode),
72
72
  });
73
73
  }
74
- /**
75
- * Adds an `order by` clause inside the aggregate function.
76
- *
77
- * ### Examples
78
- *
79
- * ```ts
80
- * const result = await db
81
- * .selectFrom('person')
82
- * .innerJoin('pet', 'pet.owner_id', 'person.id')
83
- * .select((eb) =>
84
- * eb.fn.jsonAgg('pet').orderBy('pet.name').as('person_pets')
85
- * )
86
- * .executeTakeFirstOrThrow()
87
- * ```
88
- *
89
- * The generated SQL (PostgreSQL):
90
- *
91
- * ```sql
92
- * select json_agg("pet" order by "pet"."name") as "person_pets"
93
- * from "person"
94
- * inner join "pet" ON "pet"."owner_id" = "person"."id"
95
- * ```
96
- */
97
- orderBy(orderBy, direction) {
74
+ orderBy(...args) {
75
+ return new AggregateFunctionBuilder({
76
+ ...this.#props,
77
+ aggregateFunctionNode: QueryNode.cloneWithOrderByItems(this.#props.aggregateFunctionNode, parseOrderBy(args)),
78
+ });
79
+ }
80
+ clearOrderBy() {
81
+ return new AggregateFunctionBuilder({
82
+ ...this.#props,
83
+ aggregateFunctionNode: QueryNode.cloneWithoutOrderBy(this.#props.aggregateFunctionNode),
84
+ });
85
+ }
86
+ withinGroupOrderBy(...args) {
98
87
  return new AggregateFunctionBuilder({
99
88
  ...this.#props,
100
- aggregateFunctionNode: AggregateFunctionNode.cloneWithOrderBy(this.#props.aggregateFunctionNode, parseOrderBy([orderBy, direction])),
89
+ aggregateFunctionNode: AggregateFunctionNode.cloneWithOrderBy(this.#props.aggregateFunctionNode, parseOrderBy(args), true),
101
90
  });
102
91
  }
103
92
  filterWhere(...args) {
@@ -225,7 +214,6 @@ export class AggregateFunctionBuilder {
225
214
  return this.#props.aggregateFunctionNode;
226
215
  }
227
216
  }
228
- preventAwait(AggregateFunctionBuilder, "don't await AggregateFunctionBuilder instances. They are never executed directly and are always just a part of a query.");
229
217
  /**
230
218
  * {@link AggregateFunctionBuilder} with an alias. The result of calling {@link AggregateFunctionBuilder.as}.
231
219
  */
@@ -1,6 +1,5 @@
1
1
  /// <reference types="./cte-builder.d.ts" />
2
2
  import { CommonTableExpressionNode } from '../operation-node/common-table-expression-node.js';
3
- import { preventAwait } from '../util/prevent-await.js';
4
3
  import { freeze } from '../util/object-utils.js';
5
4
  export class CTEBuilder {
6
5
  #props;
@@ -33,4 +32,3 @@ export class CTEBuilder {
33
32
  return this.#props.node;
34
33
  }
35
34
  }
36
- preventAwait(CTEBuilder, "don't await CTEBuilder instances. They are never executed directly and are always just a part of a query.");
@@ -12,11 +12,11 @@ import { QueryExecutor } from '../query-executor/query-executor.js';
12
12
  import { QueryId } from '../util/query-id.js';
13
13
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
14
14
  import { WhereInterface } from './where-interface.js';
15
- import { ReturningInterface } from './returning-interface.js';
15
+ import { MultiTableReturningInterface } from './returning-interface.js';
16
16
  import { NoResultErrorConstructor } from './no-result-error.js';
17
17
  import { DeleteResult } from './delete-result.js';
18
18
  import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
19
- import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js';
19
+ import { OrderByExpression, OrderByModifiers, DirectedOrderByStringReference } from '../parser/order-by-parser.js';
20
20
  import { Explainable, ExplainFormat } from '../util/explainable.js';
21
21
  import { AliasedExpression, Expression } from '../expression/expression.js';
22
22
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
@@ -25,7 +25,8 @@ import { Streamable } from '../util/streamable.js';
25
25
  import { ExpressionOrFactory } from '../parser/expression-parser.js';
26
26
  import { ValueExpression } from '../parser/value-parser.js';
27
27
  import { OutputCallback, OutputExpression, OutputInterface, SelectExpressionFromOutputCallback, SelectExpressionFromOutputExpression } from './output-interface.js';
28
- export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OutputInterface<DB, TB, O, 'deleted'>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
28
+ import { OrderByInterface } from './order-by-interface.js';
29
+ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, MultiTableReturningInterface<DB, TB, O>, OutputInterface<DB, TB, O, 'deleted'>, OrderByInterface<DB, TB, {}>, OperationNodeSource, Compilable<O>, Explainable, Streamable<O> {
29
30
  #private;
30
31
  constructor(props: DeleteQueryBuilderProps);
31
32
  /**
@@ -650,7 +651,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
650
651
  * Allows you to return data from modified rows.
651
652
  *
652
653
  * On supported databases like PostgreSQL, this method can be chained to
653
- * `insert`, `update` and `delete` queries to return data.
654
+ * `insert`, `update`, `delete` and `merge` queries to return data.
654
655
  *
655
656
  * Note that on SQLite you need to give aliases for the expressions to avoid
656
657
  * [this bug](https://sqlite.org/forum/forumpost/033daf0b32) in SQLite.
@@ -802,8 +803,8 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
802
803
  */
803
804
  returningAll<T extends TB>(tables: ReadonlyArray<T>): DeleteQueryBuilder<DB, TB, ReturningAllRow<DB, T, O>>;
804
805
  /**
805
- * Adds a `returning *` to an insert/update/delete query on databases
806
- * that support `returning` such as PostgreSQL.
806
+ * Adds a `returning *` or `returning table.*` to an insert/update/delete/merge
807
+ * query on databases that support `returning` such as PostgreSQL.
807
808
  *
808
809
  * Also see the {@link returning} method.
809
810
  */
@@ -975,61 +976,49 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
975
976
  */
976
977
  clearLimit(): DeleteQueryBuilder<DB, TB, O>;
977
978
  /**
978
- * Clears the `order by` clause from the query.
979
- *
980
- * ### Examples
981
- *
982
- * ```ts
983
- * await db.deleteFrom('pet')
984
- * .returningAll()
985
- * .where('name', '=', 'Max')
986
- * .orderBy('id')
987
- * .clearOrderBy()
988
- * .execute()
989
- * ```
990
- *
991
- * The generated SQL(PostgreSQL):
992
- *
993
- * ```sql
994
- * delete from "pet" where "name" = "Max" returning *
995
- * ```
979
+ * @description This is only supported by some dialects like MySQL or SQLite with `SQLITE_ENABLE_UPDATE_DELETE_LIMIT`.
996
980
  */
997
- clearOrderBy(): DeleteQueryBuilder<DB, TB, O>;
981
+ orderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers?: OrderByModifiers): DeleteQueryBuilder<DB, TB, O>;
998
982
  /**
999
- * Adds an `order by` clause to the query.
1000
- *
1001
- * `orderBy` calls are additive. To order by multiple columns, call `orderBy`
1002
- * multiple times.
1003
- *
1004
- * The first argument is the expression to order by and the second is the
1005
- * order (`asc` or `desc`).
1006
- *
1007
- * An `order by` clause in a delete query is only supported by some dialects
1008
- * like MySQL.
983
+ * @description This is only supported by some dialects like MySQL or SQLite with `SQLITE_ENABLE_UPDATE_DELETE_LIMIT`.
984
+ * @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.
985
+ */
986
+ orderBy<OE extends OrderByExpression<DB, TB, {}> | DirectedOrderByStringReference<DB, TB, {}>>(exprs: ReadonlyArray<OE>): DeleteQueryBuilder<DB, TB, O>;
987
+ /**
988
+ * @description This is only supported by some dialects like MySQL or SQLite with `SQLITE_ENABLE_UPDATE_DELETE_LIMIT`.
989
+ * @deprecated It does ~2.9x more compile-time instantiations compared to a `orderBy(expr, direction)` call.
990
+ */
991
+ orderBy<OE extends DirectedOrderByStringReference<DB, TB, {}>>(expr: OE): DeleteQueryBuilder<DB, TB, O>;
992
+ /**
993
+ * @description This is only supported by some dialects like MySQL or SQLite with `SQLITE_ENABLE_UPDATE_DELETE_LIMIT`.
994
+ * @deprecated Use `orderBy(expr, (ob) => ...)` instead.
995
+ */
996
+ orderBy<OE extends OrderByExpression<DB, TB, {}>>(expr: OE, modifiers: Expression<any>): DeleteQueryBuilder<DB, TB, O>;
997
+ /**
998
+ * Clears the `order by` clause from the query.
1009
999
  *
1010
- * See {@link SelectQueryBuilder.orderBy} for more examples.
1000
+ * See {@link orderBy} for adding an `order by` clause or item to a query.
1011
1001
  *
1012
1002
  * ### Examples
1013
1003
  *
1014
- * Delete 5 oldest items in a table:
1015
- *
1016
1004
  * ```ts
1017
- * await db
1018
- * .deleteFrom('pet')
1019
- * .orderBy('created_at')
1020
- * .limit(5)
1005
+ * const query = db
1006
+ * .selectFrom('person')
1007
+ * .selectAll()
1008
+ * .orderBy('id', 'desc')
1009
+ *
1010
+ * const results = await query
1011
+ * .clearOrderBy()
1021
1012
  * .execute()
1022
1013
  * ```
1023
1014
  *
1024
- * The generated SQL (MySQL):
1015
+ * The generated SQL (PostgreSQL):
1025
1016
  *
1026
1017
  * ```sql
1027
- * delete from `pet`
1028
- * order by `created_at`
1029
- * limit ?
1018
+ * select * from "person"
1030
1019
  * ```
1031
1020
  */
1032
- orderBy(orderBy: OrderByExpression<DB, TB, O>, direction?: OrderByDirectionExpression): DeleteQueryBuilder<DB, TB, O>;
1021
+ clearOrderBy(): DeleteQueryBuilder<DB, TB, O>;
1033
1022
  /**
1034
1023
  * Adds a limit clause to the query.
1035
1024
  *