kysely 0.27.6 → 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 (363) hide show
  1. package/README.md +169 -1
  2. package/deno.check.d.ts +7 -0
  3. package/dist/cjs/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  4. package/dist/cjs/dialect/mssql/mssql-driver.d.ts +6 -3
  5. package/dist/cjs/dialect/mssql/mssql-driver.js +33 -19
  6. package/dist/cjs/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  7. package/dist/cjs/dialect/mssql/mssql-query-compiler.js +11 -0
  8. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +4 -0
  9. package/dist/cjs/dialect/mysql/mysql-driver.js +27 -12
  10. package/dist/cjs/dialect/postgres/postgres-driver.d.ts +4 -0
  11. package/dist/cjs/dialect/postgres/postgres-driver.js +28 -18
  12. package/dist/cjs/dialect/postgres/postgres-introspector.js +7 -17
  13. package/dist/cjs/dialect/sqlite/sqlite-driver.d.ts +4 -0
  14. package/dist/cjs/dialect/sqlite/sqlite-driver.js +19 -13
  15. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  16. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +4 -0
  17. package/dist/cjs/driver/database-connection.d.ts +0 -4
  18. package/dist/cjs/driver/driver.d.ts +17 -0
  19. package/dist/cjs/driver/driver.js +13 -1
  20. package/dist/cjs/driver/dummy-driver.d.ts +3 -0
  21. package/dist/cjs/driver/dummy-driver.js +9 -0
  22. package/dist/cjs/driver/runtime-driver.d.ts +4 -0
  23. package/dist/cjs/driver/runtime-driver.js +43 -3
  24. package/dist/cjs/expression/expression-builder.d.ts +7 -10
  25. package/dist/cjs/helpers/postgres.d.ts +48 -0
  26. package/dist/cjs/helpers/postgres.js +50 -0
  27. package/dist/cjs/index.d.ts +13 -2
  28. package/dist/cjs/index.js +13 -2
  29. package/dist/cjs/kysely.d.ts +339 -2
  30. package/dist/cjs/kysely.js +465 -11
  31. package/dist/cjs/migration/migrator.d.ts +8 -0
  32. package/dist/cjs/migration/migrator.js +1 -1
  33. package/dist/cjs/operation-node/aggregate-function-node.d.ts +2 -1
  34. package/dist/cjs/operation-node/aggregate-function-node.js +4 -3
  35. package/dist/cjs/operation-node/alter-table-node.d.ts +3 -1
  36. package/dist/cjs/operation-node/collate-node.d.ts +13 -0
  37. package/dist/cjs/operation-node/collate-node.js +19 -0
  38. package/dist/cjs/operation-node/constraint-node.d.ts +1 -1
  39. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/create-type-node.js +1 -1
  41. package/dist/cjs/operation-node/delete-query-node.d.ts +8 -2
  42. package/dist/cjs/operation-node/delete-query-node.js +11 -15
  43. package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +4 -0
  44. package/dist/cjs/operation-node/insert-query-node.d.ts +3 -0
  45. package/dist/cjs/operation-node/join-node.d.ts +1 -1
  46. package/dist/cjs/operation-node/merge-query-node.d.ts +2 -0
  47. package/dist/cjs/operation-node/operation-node-transformer.d.ts +106 -97
  48. package/dist/cjs/operation-node/operation-node-transformer.js +352 -312
  49. package/dist/cjs/operation-node/operation-node-visitor.d.ts +9 -1
  50. package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
  51. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  52. package/dist/cjs/operation-node/or-action-node.d.ts +12 -0
  53. package/dist/cjs/operation-node/or-action-node.js +18 -0
  54. package/dist/cjs/operation-node/order-by-item-node.d.ts +5 -0
  55. package/dist/cjs/operation-node/order-by-item-node.js +6 -0
  56. package/dist/cjs/operation-node/primary-key-constraint-node.d.ts +29 -0
  57. package/dist/cjs/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  58. package/dist/cjs/operation-node/query-node.d.ts +7 -0
  59. package/dist/cjs/operation-node/query-node.js +15 -0
  60. package/dist/cjs/operation-node/refresh-materialized-view-node.d.ts +17 -0
  61. package/dist/cjs/operation-node/refresh-materialized-view-node.js +25 -0
  62. package/dist/cjs/operation-node/rename-constraint-node.d.ts +14 -0
  63. package/dist/cjs/operation-node/rename-constraint-node.js +20 -0
  64. package/dist/cjs/operation-node/select-query-node.d.ts +8 -2
  65. package/dist/cjs/operation-node/select-query-node.js +11 -15
  66. package/dist/cjs/operation-node/unique-constraint-node.d.ts +2 -0
  67. package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
  68. package/dist/cjs/operation-node/update-query-node.js +5 -2
  69. package/dist/cjs/parser/collate-parser.d.ts +1 -0
  70. package/dist/cjs/parser/collate-parser.js +2 -0
  71. package/dist/cjs/parser/delete-from-parser.d.ts +5 -0
  72. package/dist/cjs/parser/delete-from-parser.js +2 -0
  73. package/dist/cjs/parser/join-parser.d.ts +1 -1
  74. package/dist/cjs/parser/join-parser.js +7 -1
  75. package/dist/cjs/parser/merge-into-parser.d.ts +5 -0
  76. package/dist/cjs/parser/merge-into-parser.js +2 -0
  77. package/dist/cjs/parser/order-by-parser.d.ts +18 -5
  78. package/dist/cjs/parser/order-by-parser.js +24 -14
  79. package/dist/cjs/parser/savepoint-parser.d.ts +4 -0
  80. package/dist/cjs/parser/savepoint-parser.js +11 -0
  81. package/dist/cjs/parser/select-from-parser.d.ts +4 -0
  82. package/dist/cjs/parser/select-from-parser.js +2 -0
  83. package/dist/cjs/parser/table-parser.d.ts +2 -5
  84. package/dist/cjs/parser/update-parser.d.ts +5 -0
  85. package/dist/cjs/parser/update-parser.js +2 -0
  86. package/dist/cjs/parser/update-set-parser.d.ts +7 -4
  87. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
  88. package/dist/cjs/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  89. package/dist/cjs/plugin/camel-case/camel-case-transformer.js +2 -2
  90. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  91. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  92. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  93. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  94. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +162 -0
  95. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  96. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +29 -0
  97. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  98. package/dist/cjs/plugin/handle-empty-in-lists/handle-empty-in-lists.js +66 -0
  99. package/dist/cjs/plugin/immediate-value/immediate-value-plugin.js +1 -1
  100. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  101. package/dist/cjs/plugin/immediate-value/immediate-value-transformer.js +6 -4
  102. package/dist/cjs/plugin/with-schema/with-schema-plugin.js +1 -1
  103. package/dist/cjs/plugin/with-schema/with-schema-transformer.d.ts +6 -5
  104. package/dist/cjs/plugin/with-schema/with-schema-transformer.js +29 -24
  105. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +83 -5
  106. package/dist/cjs/query-builder/aggregate-function-builder.js +15 -27
  107. package/dist/cjs/query-builder/cte-builder.js +0 -2
  108. package/dist/cjs/query-builder/delete-query-builder.d.ts +36 -47
  109. package/dist/cjs/query-builder/delete-query-builder.js +12 -78
  110. package/dist/cjs/query-builder/function-module.d.ts +31 -4
  111. package/dist/cjs/query-builder/insert-query-builder.d.ts +161 -6
  112. package/dist/cjs/query-builder/insert-query-builder.js +197 -10
  113. package/dist/cjs/query-builder/join-builder.js +0 -2
  114. package/dist/cjs/query-builder/merge-query-builder.d.ts +145 -3
  115. package/dist/cjs/query-builder/merge-query-builder.js +28 -7
  116. package/dist/cjs/query-builder/on-conflict-builder.js +0 -4
  117. package/dist/cjs/query-builder/order-by-interface.d.ts +176 -0
  118. package/dist/cjs/query-builder/order-by-interface.js +2 -0
  119. package/dist/cjs/query-builder/order-by-item-builder.d.ts +43 -0
  120. package/dist/cjs/query-builder/order-by-item-builder.js +75 -0
  121. package/dist/cjs/query-builder/over-builder.d.ts +43 -6
  122. package/dist/cjs/query-builder/over-builder.js +8 -25
  123. package/dist/cjs/query-builder/returning-interface.d.ts +20 -3
  124. package/dist/cjs/query-builder/select-query-builder.d.ts +279 -98
  125. package/dist/cjs/query-builder/select-query-builder.js +26 -26
  126. package/dist/cjs/query-builder/update-query-builder.d.ts +88 -9
  127. package/dist/cjs/query-builder/update-query-builder.js +17 -15
  128. package/dist/cjs/query-compiler/compiled-query.d.ts +2 -0
  129. package/dist/cjs/query-compiler/compiled-query.js +2 -0
  130. package/dist/cjs/query-compiler/default-query-compiler.d.ts +17 -2
  131. package/dist/cjs/query-compiler/default-query-compiler.js +97 -2
  132. package/dist/cjs/query-compiler/query-compiler.d.ts +4 -2
  133. package/dist/cjs/query-creator.d.ts +23 -25
  134. package/dist/cjs/query-creator.js +280 -8
  135. package/dist/cjs/query-executor/default-query-executor.d.ts +2 -1
  136. package/dist/cjs/query-executor/default-query-executor.js +2 -2
  137. package/dist/cjs/query-executor/query-executor-base.js +7 -25
  138. package/dist/cjs/raw-builder/raw-builder.js +0 -3
  139. package/dist/cjs/raw-builder/sql.d.ts +3 -3
  140. package/dist/cjs/raw-builder/sql.js +1 -1
  141. package/dist/cjs/schema/alter-column-builder.js +0 -3
  142. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  143. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  144. package/dist/cjs/schema/alter-table-add-index-builder.js +0 -2
  145. package/dist/cjs/schema/alter-table-builder.d.ts +7 -3
  146. package/dist/cjs/schema/alter-table-builder.js +21 -10
  147. package/dist/cjs/schema/alter-table-drop-constraint-builder.js +0 -2
  148. package/dist/cjs/schema/alter-table-executor.js +0 -2
  149. package/dist/cjs/schema/check-constraint-builder.d.ts +13 -0
  150. package/dist/cjs/schema/check-constraint-builder.js +20 -0
  151. package/dist/cjs/schema/column-definition-builder.js +0 -2
  152. package/dist/cjs/schema/create-index-builder.js +1 -3
  153. package/dist/cjs/schema/create-schema-builder.js +0 -2
  154. package/dist/cjs/schema/create-table-builder.d.ts +5 -4
  155. package/dist/cjs/schema/create-table-builder.js +9 -7
  156. package/dist/cjs/schema/create-type-builder.d.ts +1 -1
  157. package/dist/cjs/schema/create-type-builder.js +0 -2
  158. package/dist/cjs/schema/create-view-builder.js +0 -2
  159. package/dist/cjs/schema/drop-index-builder.js +0 -2
  160. package/dist/cjs/schema/drop-schema-builder.js +0 -2
  161. package/dist/cjs/schema/drop-table-builder.js +0 -2
  162. package/dist/cjs/schema/drop-type-builder.js +0 -2
  163. package/dist/cjs/schema/drop-view-builder.js +0 -2
  164. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +9 -0
  165. package/dist/cjs/schema/foreign-key-constraint-builder.js +16 -2
  166. package/dist/cjs/schema/primary-key-constraint-builder.d.ts +17 -0
  167. package/dist/cjs/schema/primary-key-constraint-builder.js +37 -0
  168. package/dist/cjs/schema/refresh-materialized-view-builder.d.ts +47 -0
  169. package/dist/cjs/schema/refresh-materialized-view-builder.js +75 -0
  170. package/dist/cjs/schema/schema.d.ts +14 -0
  171. package/dist/cjs/schema/schema.js +21 -0
  172. package/dist/cjs/schema/unique-constraint-builder.d.ts +10 -1
  173. package/dist/cjs/schema/unique-constraint-builder.js +26 -5
  174. package/dist/cjs/util/infer-result.d.ts +1 -1
  175. package/dist/cjs/util/log.d.ts +1 -0
  176. package/dist/cjs/util/log.js +3 -2
  177. package/dist/cjs/util/provide-controlled-connection.d.ts +7 -0
  178. package/dist/cjs/util/provide-controlled-connection.js +24 -0
  179. package/dist/esm/dialect/mssql/mssql-dialect-config.d.ts +26 -16
  180. package/dist/esm/dialect/mssql/mssql-driver.d.ts +6 -3
  181. package/dist/esm/dialect/mssql/mssql-driver.js +33 -19
  182. package/dist/esm/dialect/mssql/mssql-query-compiler.d.ts +2 -0
  183. package/dist/esm/dialect/mssql/mssql-query-compiler.js +11 -0
  184. package/dist/esm/dialect/mysql/mysql-driver.d.ts +4 -0
  185. package/dist/esm/dialect/mysql/mysql-driver.js +27 -12
  186. package/dist/esm/dialect/postgres/postgres-driver.d.ts +4 -0
  187. package/dist/esm/dialect/postgres/postgres-driver.js +28 -18
  188. package/dist/esm/dialect/postgres/postgres-introspector.js +7 -17
  189. package/dist/esm/dialect/sqlite/sqlite-driver.d.ts +4 -0
  190. package/dist/esm/dialect/sqlite/sqlite-driver.js +19 -13
  191. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -0
  192. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +4 -0
  193. package/dist/esm/driver/database-connection.d.ts +0 -4
  194. package/dist/esm/driver/driver.d.ts +17 -0
  195. package/dist/esm/driver/driver.js +11 -0
  196. package/dist/esm/driver/dummy-driver.d.ts +3 -0
  197. package/dist/esm/driver/dummy-driver.js +9 -0
  198. package/dist/esm/driver/runtime-driver.d.ts +4 -0
  199. package/dist/esm/driver/runtime-driver.js +43 -3
  200. package/dist/esm/expression/expression-builder.d.ts +7 -10
  201. package/dist/esm/helpers/postgres.d.ts +48 -0
  202. package/dist/esm/helpers/postgres.js +49 -0
  203. package/dist/esm/index.d.ts +13 -2
  204. package/dist/esm/index.js +11 -1
  205. package/dist/esm/kysely.d.ts +339 -2
  206. package/dist/esm/kysely.js +461 -10
  207. package/dist/esm/migration/migrator.d.ts +8 -0
  208. package/dist/esm/migration/migrator.js +1 -1
  209. package/dist/esm/operation-node/aggregate-function-node.d.ts +2 -1
  210. package/dist/esm/operation-node/aggregate-function-node.js +4 -3
  211. package/dist/esm/operation-node/alter-table-node.d.ts +3 -1
  212. package/dist/esm/operation-node/collate-node.d.ts +13 -0
  213. package/dist/esm/operation-node/collate-node.js +17 -0
  214. package/dist/esm/operation-node/constraint-node.d.ts +1 -1
  215. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  216. package/dist/esm/operation-node/create-type-node.js +1 -1
  217. package/dist/esm/operation-node/delete-query-node.d.ts +8 -2
  218. package/dist/esm/operation-node/delete-query-node.js +11 -15
  219. package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +4 -0
  220. package/dist/esm/operation-node/insert-query-node.d.ts +3 -0
  221. package/dist/esm/operation-node/join-node.d.ts +1 -1
  222. package/dist/esm/operation-node/merge-query-node.d.ts +2 -0
  223. package/dist/esm/operation-node/operation-node-transformer.d.ts +106 -97
  224. package/dist/esm/operation-node/operation-node-transformer.js +352 -312
  225. package/dist/esm/operation-node/operation-node-visitor.d.ts +9 -1
  226. package/dist/esm/operation-node/operation-node-visitor.js +4 -0
  227. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  228. package/dist/esm/operation-node/or-action-node.d.ts +12 -0
  229. package/dist/esm/operation-node/or-action-node.js +16 -0
  230. package/dist/esm/operation-node/order-by-item-node.d.ts +5 -0
  231. package/dist/esm/operation-node/order-by-item-node.js +6 -0
  232. package/dist/esm/operation-node/primary-key-constraint-node.d.ts +29 -0
  233. package/dist/esm/operation-node/{primary-constraint-node.js → primary-key-constraint-node.js} +11 -2
  234. package/dist/esm/operation-node/query-node.d.ts +7 -0
  235. package/dist/esm/operation-node/query-node.js +15 -0
  236. package/dist/esm/operation-node/refresh-materialized-view-node.d.ts +17 -0
  237. package/dist/esm/operation-node/refresh-materialized-view-node.js +23 -0
  238. package/dist/esm/operation-node/rename-constraint-node.d.ts +14 -0
  239. package/dist/esm/operation-node/rename-constraint-node.js +18 -0
  240. package/dist/esm/operation-node/select-query-node.d.ts +8 -2
  241. package/dist/esm/operation-node/select-query-node.js +11 -15
  242. package/dist/esm/operation-node/unique-constraint-node.d.ts +2 -0
  243. package/dist/esm/operation-node/update-query-node.d.ts +3 -4
  244. package/dist/esm/operation-node/update-query-node.js +5 -2
  245. package/dist/esm/parser/collate-parser.d.ts +1 -0
  246. package/dist/esm/parser/collate-parser.js +2 -0
  247. package/dist/esm/parser/delete-from-parser.d.ts +5 -0
  248. package/dist/esm/parser/delete-from-parser.js +2 -0
  249. package/dist/esm/parser/join-parser.d.ts +1 -1
  250. package/dist/esm/parser/join-parser.js +7 -1
  251. package/dist/esm/parser/merge-into-parser.d.ts +5 -0
  252. package/dist/esm/parser/merge-into-parser.js +2 -0
  253. package/dist/esm/parser/order-by-parser.d.ts +18 -5
  254. package/dist/esm/parser/order-by-parser.js +27 -17
  255. package/dist/esm/parser/savepoint-parser.d.ts +4 -0
  256. package/dist/esm/parser/savepoint-parser.js +9 -0
  257. package/dist/esm/parser/select-from-parser.d.ts +4 -0
  258. package/dist/esm/parser/select-from-parser.js +2 -0
  259. package/dist/esm/parser/table-parser.d.ts +2 -5
  260. package/dist/esm/parser/update-parser.d.ts +5 -0
  261. package/dist/esm/parser/update-parser.js +2 -0
  262. package/dist/esm/parser/update-set-parser.d.ts +7 -4
  263. package/dist/esm/plugin/camel-case/camel-case-plugin.js +1 -1
  264. package/dist/esm/plugin/camel-case/camel-case-transformer.d.ts +2 -1
  265. package/dist/esm/plugin/camel-case/camel-case-transformer.js +2 -2
  266. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  267. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +4 -3
  268. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.js +6 -6
  269. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.d.ts +211 -0
  270. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-plugin.js +159 -0
  271. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.d.ts +8 -0
  272. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists-transformer.js +26 -0
  273. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.d.ts +44 -0
  274. package/dist/esm/plugin/handle-empty-in-lists/handle-empty-in-lists.js +63 -0
  275. package/dist/esm/plugin/immediate-value/immediate-value-plugin.js +1 -1
  276. package/dist/esm/plugin/immediate-value/immediate-value-transformer.d.ts +2 -0
  277. package/dist/esm/plugin/immediate-value/immediate-value-transformer.js +6 -4
  278. package/dist/esm/plugin/with-schema/with-schema-plugin.js +1 -1
  279. package/dist/esm/plugin/with-schema/with-schema-transformer.d.ts +6 -5
  280. package/dist/esm/plugin/with-schema/with-schema-transformer.js +29 -24
  281. package/dist/esm/query-builder/aggregate-function-builder.d.ts +83 -5
  282. package/dist/esm/query-builder/aggregate-function-builder.js +15 -27
  283. package/dist/esm/query-builder/cte-builder.js +0 -2
  284. package/dist/esm/query-builder/delete-query-builder.d.ts +36 -47
  285. package/dist/esm/query-builder/delete-query-builder.js +12 -78
  286. package/dist/esm/query-builder/function-module.d.ts +31 -4
  287. package/dist/esm/query-builder/insert-query-builder.d.ts +161 -6
  288. package/dist/esm/query-builder/insert-query-builder.js +197 -10
  289. package/dist/esm/query-builder/join-builder.js +0 -2
  290. package/dist/esm/query-builder/merge-query-builder.d.ts +145 -3
  291. package/dist/esm/query-builder/merge-query-builder.js +29 -8
  292. package/dist/esm/query-builder/on-conflict-builder.js +0 -4
  293. package/dist/esm/query-builder/order-by-interface.d.ts +176 -0
  294. package/dist/esm/query-builder/order-by-interface.js +2 -0
  295. package/dist/esm/query-builder/order-by-item-builder.d.ts +43 -0
  296. package/dist/esm/query-builder/order-by-item-builder.js +72 -0
  297. package/dist/esm/query-builder/over-builder.d.ts +43 -6
  298. package/dist/esm/query-builder/over-builder.js +8 -25
  299. package/dist/esm/query-builder/returning-interface.d.ts +20 -3
  300. package/dist/esm/query-builder/select-query-builder.d.ts +279 -98
  301. package/dist/esm/query-builder/select-query-builder.js +26 -26
  302. package/dist/esm/query-builder/update-query-builder.d.ts +88 -9
  303. package/dist/esm/query-builder/update-query-builder.js +17 -15
  304. package/dist/esm/query-compiler/compiled-query.d.ts +2 -0
  305. package/dist/esm/query-compiler/compiled-query.js +2 -0
  306. package/dist/esm/query-compiler/default-query-compiler.d.ts +17 -2
  307. package/dist/esm/query-compiler/default-query-compiler.js +97 -2
  308. package/dist/esm/query-compiler/query-compiler.d.ts +4 -2
  309. package/dist/esm/query-creator.d.ts +23 -25
  310. package/dist/esm/query-creator.js +281 -9
  311. package/dist/esm/query-executor/default-query-executor.d.ts +2 -1
  312. package/dist/esm/query-executor/default-query-executor.js +2 -2
  313. package/dist/esm/query-executor/query-executor-base.js +7 -25
  314. package/dist/esm/raw-builder/raw-builder.js +0 -3
  315. package/dist/esm/raw-builder/sql.d.ts +3 -3
  316. package/dist/esm/raw-builder/sql.js +1 -1
  317. package/dist/esm/schema/alter-column-builder.js +0 -3
  318. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +4 -0
  319. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +24 -2
  320. package/dist/esm/schema/alter-table-add-index-builder.js +0 -2
  321. package/dist/esm/schema/alter-table-builder.d.ts +7 -3
  322. package/dist/esm/schema/alter-table-builder.js +22 -11
  323. package/dist/esm/schema/alter-table-drop-constraint-builder.js +0 -2
  324. package/dist/esm/schema/alter-table-executor.js +0 -2
  325. package/dist/esm/schema/check-constraint-builder.d.ts +13 -0
  326. package/dist/esm/schema/check-constraint-builder.js +17 -0
  327. package/dist/esm/schema/column-definition-builder.js +0 -2
  328. package/dist/esm/schema/create-index-builder.js +1 -3
  329. package/dist/esm/schema/create-schema-builder.js +0 -2
  330. package/dist/esm/schema/create-table-builder.d.ts +5 -4
  331. package/dist/esm/schema/create-table-builder.js +10 -8
  332. package/dist/esm/schema/create-type-builder.d.ts +1 -1
  333. package/dist/esm/schema/create-type-builder.js +0 -2
  334. package/dist/esm/schema/create-view-builder.js +0 -2
  335. package/dist/esm/schema/drop-index-builder.js +0 -2
  336. package/dist/esm/schema/drop-schema-builder.js +0 -2
  337. package/dist/esm/schema/drop-table-builder.js +0 -2
  338. package/dist/esm/schema/drop-type-builder.js +0 -2
  339. package/dist/esm/schema/drop-view-builder.js +0 -2
  340. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +9 -0
  341. package/dist/esm/schema/foreign-key-constraint-builder.js +16 -2
  342. package/dist/esm/schema/primary-key-constraint-builder.d.ts +17 -0
  343. package/dist/esm/schema/primary-key-constraint-builder.js +34 -0
  344. package/dist/esm/schema/refresh-materialized-view-builder.d.ts +47 -0
  345. package/dist/esm/schema/refresh-materialized-view-builder.js +72 -0
  346. package/dist/esm/schema/schema.d.ts +14 -0
  347. package/dist/esm/schema/schema.js +21 -0
  348. package/dist/esm/schema/unique-constraint-builder.d.ts +10 -1
  349. package/dist/esm/schema/unique-constraint-builder.js +26 -5
  350. package/dist/esm/util/infer-result.d.ts +1 -1
  351. package/dist/esm/util/log.d.ts +1 -0
  352. package/dist/esm/util/log.js +3 -2
  353. package/dist/esm/util/provide-controlled-connection.d.ts +7 -0
  354. package/dist/esm/util/provide-controlled-connection.js +22 -0
  355. package/outdated-typescript.d.ts +5 -0
  356. package/package.json +16 -2
  357. package/CONTRIBUTING.md +0 -168
  358. package/dist/cjs/operation-node/primary-constraint-node.d.ts +0 -15
  359. package/dist/cjs/util/prevent-await.d.ts +0 -1
  360. package/dist/cjs/util/prevent-await.js +0 -13
  361. package/dist/esm/operation-node/primary-constraint-node.d.ts +0 -15
  362. package/dist/esm/util/prevent-await.d.ts +0 -1
  363. package/dist/esm/util/prevent-await.js +0 -11
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HandleEmptyInListsTransformer = void 0;
4
+ const operation_node_transformer_js_1 = require("../../operation-node/operation-node-transformer.js");
5
+ const primitive_value_list_node_js_1 = require("../../operation-node/primitive-value-list-node.js");
6
+ const operator_node_js_1 = require("../../operation-node/operator-node.js");
7
+ const value_list_node_js_1 = require("../../operation-node/value-list-node.js");
8
+ class HandleEmptyInListsTransformer extends operation_node_transformer_js_1.OperationNodeTransformer {
9
+ #strategy;
10
+ constructor(strategy) {
11
+ super();
12
+ this.#strategy = strategy;
13
+ }
14
+ transformBinaryOperation(node) {
15
+ if (this.#isEmptyInListNode(node)) {
16
+ return this.#strategy(node);
17
+ }
18
+ return node;
19
+ }
20
+ #isEmptyInListNode(node) {
21
+ const { operator, rightOperand } = node;
22
+ return ((primitive_value_list_node_js_1.PrimitiveValueListNode.is(rightOperand) ||
23
+ value_list_node_js_1.ValueListNode.is(rightOperand)) &&
24
+ rightOperand.values.length === 0 &&
25
+ operator_node_js_1.OperatorNode.is(operator) &&
26
+ (operator.operator === 'in' || operator.operator === 'not in'));
27
+ }
28
+ }
29
+ exports.HandleEmptyInListsTransformer = HandleEmptyInListsTransformer;
@@ -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,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.replaceWithNoncontingentExpression = replaceWithNoncontingentExpression;
4
+ exports.pushValueIntoList = pushValueIntoList;
5
+ const binary_operation_node_js_1 = require("../../operation-node/binary-operation-node.js");
6
+ const cast_node_js_1 = require("../../operation-node/cast-node.js");
7
+ const data_type_node_js_1 = require("../../operation-node/data-type-node.js");
8
+ const operator_node_js_1 = require("../../operation-node/operator-node.js");
9
+ const value_list_node_js_1 = require("../../operation-node/value-list-node.js");
10
+ const value_node_js_1 = require("../../operation-node/value-node.js");
11
+ const object_utils_js_1 = require("../../util/object-utils.js");
12
+ let contradiction;
13
+ let eq;
14
+ let one;
15
+ let tautology;
16
+ /**
17
+ * Replaces the `in`/`not in` expression with a noncontingent expression (always true or always
18
+ * false) depending on the original operator.
19
+ *
20
+ * This is how Knex.js, PrismaORM, Laravel, and SQLAlchemy handle `in ()` and `not in ()`.
21
+ *
22
+ * See {@link pushValueIntoList} for an alternative strategy.
23
+ */
24
+ function replaceWithNoncontingentExpression(node) {
25
+ const _one = (one ||= value_node_js_1.ValueNode.createImmediate(1));
26
+ const _eq = (eq ||= operator_node_js_1.OperatorNode.create('='));
27
+ if (node.operator.operator === 'in') {
28
+ return (contradiction ||= binary_operation_node_js_1.BinaryOperationNode.create(_one, _eq, value_node_js_1.ValueNode.createImmediate(0)));
29
+ }
30
+ return (tautology ||= binary_operation_node_js_1.BinaryOperationNode.create(_one, _eq, _one));
31
+ }
32
+ let char;
33
+ let listNull;
34
+ let listVal;
35
+ /**
36
+ * When `in`, pushes a `null` value into the list resulting in `in (null)`. This
37
+ * is how TypeORM and Sequelize handle `in ()`. `in (null)` is logically the equivalent
38
+ * of `= null`, which returns `null`, which is a falsy expression in most SQL databases.
39
+ * We recommend NOT using this strategy if you plan to use `in` in `select`, `returning`,
40
+ * or `output` clauses, as the return type differs from the `SqlBool` default type.
41
+ *
42
+ * When `not in`, casts the left operand as `char` and pushes a literal value into
43
+ * the list resulting in `cast({{lhs}} as char) not in ({{VALUE}})`. Casting
44
+ * is required to avoid database errors with non-string columns.
45
+ *
46
+ * See {@link replaceWithNoncontingentExpression} for an alternative strategy.
47
+ */
48
+ function pushValueIntoList(uniqueNotInLiteral) {
49
+ return function pushValueIntoList(node) {
50
+ if (node.operator.operator === 'in') {
51
+ return (0, object_utils_js_1.freeze)({
52
+ ...node,
53
+ rightOperand: (listNull ||= value_list_node_js_1.ValueListNode.create([
54
+ value_node_js_1.ValueNode.createImmediate(null),
55
+ ])),
56
+ });
57
+ }
58
+ return (0, object_utils_js_1.freeze)({
59
+ ...node,
60
+ leftOperand: cast_node_js_1.CastNode.create(node.leftOperand, (char ||= data_type_node_js_1.DataTypeNode.create('char'))),
61
+ rightOperand: (listVal ||= value_list_node_js_1.ValueListNode.create([
62
+ value_node_js_1.ValueNode.createImmediate(uniqueNotInLiteral),
63
+ ])),
64
+ });
65
+ };
66
+ }
@@ -13,7 +13,7 @@ const immediate_value_transformer_js_1 = require("./immediate-value-transformer.
13
13
  class ImmediateValuePlugin {
14
14
  #transformer = new immediate_value_transformer_js_1.ImmediateValueTransformer();
15
15
  transformQuery(args) {
16
- return this.#transformer.transformNode(args.node);
16
+ return this.#transformer.transformNode(args.node, args.queryId);
17
17
  }
18
18
  transformResult(args) {
19
19
  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
  }
@@ -2,6 +2,8 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ImmediateValueTransformer = void 0;
4
4
  const operation_node_transformer_js_1 = require("../../operation-node/operation-node-transformer.js");
5
+ const value_list_node_js_1 = require("../../operation-node/value-list-node.js");
6
+ const value_node_js_1 = require("../../operation-node/value-node.js");
5
7
  /**
6
8
  * Transforms all ValueNodes to immediate.
7
9
  *
@@ -11,11 +13,11 @@ const operation_node_transformer_js_1 = require("../../operation-node/operation-
11
13
  * @internal
12
14
  */
13
15
  class ImmediateValueTransformer extends operation_node_transformer_js_1.OperationNodeTransformer {
16
+ transformPrimitiveValueList(node) {
17
+ return value_list_node_js_1.ValueListNode.create(node.values.map(value_node_js_1.ValueNode.createImmediate));
18
+ }
14
19
  transformValue(node) {
15
- return {
16
- ...super.transformValue(node),
17
- immediate: true,
18
- };
20
+ return value_node_js_1.ValueNode.createImmediate(node.value);
19
21
  }
20
22
  }
21
23
  exports.ImmediateValueTransformer = ImmediateValueTransformer;
@@ -8,7 +8,7 @@ class WithSchemaPlugin {
8
8
  this.#transformer = new with_schema_transformer_js_1.WithSchemaTransformer(schema);
9
9
  }
10
10
  transformQuery(args) {
11
- return this.#transformer.transformNode(args.node);
11
+ return this.#transformer.transformNode(args.node, args.queryId);
12
12
  }
13
13
  async transformResult(args) {
14
14
  return args.result;
@@ -4,12 +4,13 @@ import { OperationNodeTransformer } from '../../operation-node/operation-node-tr
4
4
  import { OperationNode } from '../../operation-node/operation-node.js';
5
5
  import { ReferencesNode } from '../../operation-node/references-node.js';
6
6
  import { SchemableIdentifierNode } from '../../operation-node/schemable-identifier-node.js';
7
+ import { QueryId } from '../../util/query-id.js';
7
8
  export declare class WithSchemaTransformer extends OperationNodeTransformer {
8
9
  #private;
9
10
  constructor(schema: string);
10
- protected transformNodeImpl<T extends OperationNode>(node: T): T;
11
- protected transformSchemableIdentifier(node: SchemableIdentifierNode): SchemableIdentifierNode;
12
- protected transformReferences(node: ReferencesNode): ReferencesNode;
13
- protected transformAggregateFunction(node: AggregateFunctionNode): AggregateFunctionNode;
14
- protected transformFunction(node: FunctionNode): FunctionNode;
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;
15
16
  }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.WithSchemaTransformer = void 0;
4
4
  const alias_node_js_1 = require("../../operation-node/alias-node.js");
5
5
  const identifier_node_js_1 = require("../../operation-node/identifier-node.js");
6
+ const list_node_js_1 = require("../../operation-node/list-node.js");
6
7
  const operation_node_transformer_js_1 = require("../../operation-node/operation-node-transformer.js");
7
8
  const schemable_identifier_node_js_1 = require("../../operation-node/schemable-identifier-node.js");
8
9
  const table_node_js_1 = require("../../operation-node/table-node.js");
@@ -19,6 +20,7 @@ const ROOT_OPERATION_NODES = (0, object_utils_js_1.freeze)({
19
20
  CreateTableNode: true,
20
21
  CreateTypeNode: true,
21
22
  CreateViewNode: true,
23
+ RefreshMaterializedViewNode: true,
22
24
  DeleteQueryNode: true,
23
25
  DropIndexNode: true,
24
26
  DropSchemaNode: true,
@@ -43,9 +45,9 @@ class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNod
43
45
  super();
44
46
  this.#schema = schema;
45
47
  }
46
- transformNodeImpl(node) {
48
+ transformNodeImpl(node, queryId) {
47
49
  if (!this.#isRootOperationNode(node)) {
48
- return super.transformNodeImpl(node);
50
+ return super.transformNodeImpl(node, queryId);
49
51
  }
50
52
  const ctes = this.#collectCTEs(node);
51
53
  for (const cte of ctes) {
@@ -55,7 +57,7 @@ class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNod
55
57
  for (const table of tables) {
56
58
  this.#schemableIds.add(table);
57
59
  }
58
- const transformed = super.transformNodeImpl(node);
60
+ const transformed = super.transformNodeImpl(node, queryId);
59
61
  for (const table of tables) {
60
62
  this.#schemableIds.delete(table);
61
63
  }
@@ -64,8 +66,8 @@ class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNod
64
66
  }
65
67
  return transformed;
66
68
  }
67
- transformSchemableIdentifier(node) {
68
- const transformed = super.transformSchemableIdentifier(node);
69
+ transformSchemableIdentifier(node, queryId) {
70
+ const transformed = super.transformSchemableIdentifier(node, queryId);
69
71
  if (transformed.schema || !this.#schemableIds.has(node.identifier.name)) {
70
72
  return transformed;
71
73
  }
@@ -74,8 +76,8 @@ class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNod
74
76
  schema: identifier_node_js_1.IdentifierNode.create(this.#schema),
75
77
  };
76
78
  }
77
- transformReferences(node) {
78
- const transformed = super.transformReferences(node);
79
+ transformReferences(node, queryId) {
80
+ const transformed = super.transformReferences(node, queryId);
79
81
  if (transformed.table.table.schema) {
80
82
  return transformed;
81
83
  }
@@ -84,27 +86,27 @@ class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNod
84
86
  table: table_node_js_1.TableNode.createWithSchema(this.#schema, transformed.table.table.identifier.name),
85
87
  };
86
88
  }
87
- transformAggregateFunction(node) {
89
+ transformAggregateFunction(node, queryId) {
88
90
  return {
89
- ...super.transformAggregateFunction({ ...node, aggregated: [] }),
90
- aggregated: this.#transformTableArgsWithoutSchemas(node, 'aggregated'),
91
+ ...super.transformAggregateFunction({ ...node, aggregated: [] }, queryId),
92
+ aggregated: this.#transformTableArgsWithoutSchemas(node, queryId, 'aggregated'),
91
93
  };
92
94
  }
93
- transformFunction(node) {
95
+ transformFunction(node, queryId) {
94
96
  return {
95
- ...super.transformFunction({ ...node, arguments: [] }),
96
- arguments: this.#transformTableArgsWithoutSchemas(node, 'arguments'),
97
+ ...super.transformFunction({ ...node, arguments: [] }, queryId),
98
+ arguments: this.#transformTableArgsWithoutSchemas(node, queryId, 'arguments'),
97
99
  };
98
100
  }
99
- #transformTableArgsWithoutSchemas(node, argsKey) {
101
+ #transformTableArgsWithoutSchemas(node, queryId, argsKey) {
100
102
  return SCHEMALESS_FUNCTIONS[node.func]
101
103
  ? node[argsKey].map((arg) => !table_node_js_1.TableNode.is(arg) || arg.table.schema
102
- ? this.transformNode(arg)
104
+ ? this.transformNode(arg, queryId)
103
105
  : {
104
106
  ...arg,
105
- table: this.transformIdentifier(arg.table.identifier),
107
+ table: this.transformIdentifier(arg.table.identifier, queryId),
106
108
  })
107
- : this.transformNodeList(node[argsKey]);
109
+ : this.transformNodeList(node[argsKey], queryId);
108
110
  }
109
111
  #isRootOperationNode(node) {
110
112
  return node.kind in ROOT_OPERATION_NODES;
@@ -143,13 +145,16 @@ class WithSchemaTransformer extends operation_node_transformer_js_1.OperationNod
143
145
  return ctes;
144
146
  }
145
147
  #collectSchemableIdsFromTableExpr(node, schemableIds) {
146
- const table = table_node_js_1.TableNode.is(node)
147
- ? node
148
- : alias_node_js_1.AliasNode.is(node) && table_node_js_1.TableNode.is(node.node)
149
- ? node.node
150
- : null;
151
- if (table) {
152
- this.#collectSchemableId(table.table, schemableIds);
148
+ if (table_node_js_1.TableNode.is(node)) {
149
+ this.#collectSchemableId(node.table, schemableIds);
150
+ }
151
+ else if (alias_node_js_1.AliasNode.is(node) && table_node_js_1.TableNode.is(node.node)) {
152
+ this.#collectSchemableId(node.node.table, schemableIds);
153
+ }
154
+ else if (list_node_js_1.ListNode.is(node)) {
155
+ for (const table of node.items) {
156
+ this.#collectSchemableIdsFromTableExpr(table, schemableIds);
157
+ }
153
158
  }
154
159
  }
155
160
  #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
  *
@@ -5,10 +5,10 @@ const object_utils_js_1 = require("../util/object-utils.js");
5
5
  const aggregate_function_node_js_1 = require("../operation-node/aggregate-function-node.js");
6
6
  const alias_node_js_1 = require("../operation-node/alias-node.js");
7
7
  const identifier_node_js_1 = require("../operation-node/identifier-node.js");
8
- const prevent_await_js_1 = require("../util/prevent-await.js");
9
8
  const parse_utils_js_1 = require("../parser/parse-utils.js");
10
9
  const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
11
10
  const order_by_parser_js_1 = require("../parser/order-by-parser.js");
11
+ const query_node_js_1 = require("../operation-node/query-node.js");
12
12
  class AggregateFunctionBuilder {
13
13
  #props;
14
14
  constructor(props) {
@@ -73,33 +73,22 @@ class AggregateFunctionBuilder {
73
73
  aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithDistinct(this.#props.aggregateFunctionNode),
74
74
  });
75
75
  }
76
- /**
77
- * Adds an `order by` clause inside the aggregate function.
78
- *
79
- * ### Examples
80
- *
81
- * ```ts
82
- * const result = await db
83
- * .selectFrom('person')
84
- * .innerJoin('pet', 'pet.owner_id', 'person.id')
85
- * .select((eb) =>
86
- * eb.fn.jsonAgg('pet').orderBy('pet.name').as('person_pets')
87
- * )
88
- * .executeTakeFirstOrThrow()
89
- * ```
90
- *
91
- * The generated SQL (PostgreSQL):
92
- *
93
- * ```sql
94
- * select json_agg("pet" order by "pet"."name") as "person_pets"
95
- * from "person"
96
- * inner join "pet" ON "pet"."owner_id" = "person"."id"
97
- * ```
98
- */
99
- orderBy(orderBy, direction) {
76
+ orderBy(...args) {
77
+ return new AggregateFunctionBuilder({
78
+ ...this.#props,
79
+ aggregateFunctionNode: query_node_js_1.QueryNode.cloneWithOrderByItems(this.#props.aggregateFunctionNode, (0, order_by_parser_js_1.parseOrderBy)(args)),
80
+ });
81
+ }
82
+ clearOrderBy() {
83
+ return new AggregateFunctionBuilder({
84
+ ...this.#props,
85
+ aggregateFunctionNode: query_node_js_1.QueryNode.cloneWithoutOrderBy(this.#props.aggregateFunctionNode),
86
+ });
87
+ }
88
+ withinGroupOrderBy(...args) {
100
89
  return new AggregateFunctionBuilder({
101
90
  ...this.#props,
102
- aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithOrderBy(this.#props.aggregateFunctionNode, (0, order_by_parser_js_1.parseOrderBy)([orderBy, direction])),
91
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithOrderBy(this.#props.aggregateFunctionNode, (0, order_by_parser_js_1.parseOrderBy)(args), true),
103
92
  });
104
93
  }
105
94
  filterWhere(...args) {
@@ -228,7 +217,6 @@ class AggregateFunctionBuilder {
228
217
  }
229
218
  }
230
219
  exports.AggregateFunctionBuilder = AggregateFunctionBuilder;
231
- (0, prevent_await_js_1.preventAwait)(AggregateFunctionBuilder, "don't await AggregateFunctionBuilder instances. They are never executed directly and are always just a part of a query.");
232
220
  /**
233
221
  * {@link AggregateFunctionBuilder} with an alias. The result of calling {@link AggregateFunctionBuilder.as}.
234
222
  */
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CTEBuilder = void 0;
4
4
  const common_table_expression_node_js_1 = require("../operation-node/common-table-expression-node.js");
5
- const prevent_await_js_1 = require("../util/prevent-await.js");
6
5
  const object_utils_js_1 = require("../util/object-utils.js");
7
6
  class CTEBuilder {
8
7
  #props;
@@ -36,4 +35,3 @@ class CTEBuilder {
36
35
  }
37
36
  }
38
37
  exports.CTEBuilder = CTEBuilder;
39
- (0, prevent_await_js_1.preventAwait)(CTEBuilder, "don't await CTEBuilder instances. They are never executed directly and are always just a part of a query.");