kysely 0.21.6 → 0.23.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 (380) hide show
  1. package/CONTRIBUTING.md +70 -0
  2. package/README.md +27 -4
  3. package/dist/cjs/dialect/database-introspector.d.ts +4 -0
  4. package/dist/cjs/dialect/mysql/mysql-driver.js +6 -3
  5. package/dist/cjs/dialect/postgres/postgres-adapter.js +1 -1
  6. package/dist/cjs/dialect/postgres/postgres-driver.js +7 -2
  7. package/dist/cjs/dialect/postgres/postgres-introspector.js +8 -0
  8. package/dist/cjs/dialect/sqlite/sqlite-driver.js +4 -3
  9. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +1 -0
  10. package/dist/cjs/driver/database-connection.d.ts +6 -2
  11. package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +2 -3
  12. package/dist/cjs/dynamic/dynamic-reference-builder.js +1 -1
  13. package/dist/cjs/expression/expression.d.ts +100 -0
  14. package/dist/cjs/expression/expression.js +16 -0
  15. package/dist/cjs/index.d.ts +17 -8
  16. package/dist/cjs/index.js +15 -4
  17. package/dist/cjs/kysely.d.ts +3 -3
  18. package/dist/cjs/kysely.js +3 -3
  19. package/dist/cjs/migration/file-migration-provider.js +11 -4
  20. package/dist/cjs/operation-node/aggregate-function-node.d.ts +25 -0
  21. package/dist/cjs/operation-node/aggregate-function-node.js +48 -0
  22. package/dist/cjs/operation-node/alias-node.d.ts +3 -10
  23. package/dist/cjs/operation-node/alter-column-node.d.ts +1 -2
  24. package/dist/cjs/operation-node/alter-table-node.d.ts +5 -7
  25. package/dist/cjs/operation-node/alter-table-node.js +9 -1
  26. package/dist/cjs/operation-node/and-node.d.ts +3 -4
  27. package/dist/cjs/operation-node/binary-operation-node.d.ts +14 -0
  28. package/dist/cjs/operation-node/binary-operation-node.js +20 -0
  29. package/dist/cjs/operation-node/check-constraint-node.d.ts +2 -3
  30. package/dist/cjs/operation-node/column-definition-node.d.ts +6 -5
  31. package/dist/cjs/operation-node/column-definition-node.js +16 -0
  32. package/dist/cjs/operation-node/column-update-node.d.ts +2 -3
  33. package/dist/cjs/operation-node/common-table-expression-node.d.ts +2 -4
  34. package/dist/cjs/operation-node/create-index-node.d.ts +1 -3
  35. package/dist/cjs/operation-node/create-table-node.d.ts +4 -5
  36. package/dist/cjs/operation-node/create-type-node.d.ts +1 -1
  37. package/dist/cjs/operation-node/create-type-node.js +1 -2
  38. package/dist/cjs/operation-node/default-value-node.d.ts +2 -4
  39. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -2
  40. package/dist/cjs/operation-node/drop-type-node.d.ts +1 -1
  41. package/dist/cjs/operation-node/drop-type-node.js +1 -2
  42. package/dist/cjs/operation-node/explain-node.d.ts +2 -4
  43. package/dist/cjs/operation-node/explain-node.js +1 -1
  44. package/dist/cjs/operation-node/from-node.d.ts +3 -4
  45. package/dist/cjs/operation-node/generated-node.d.ts +2 -3
  46. package/dist/cjs/operation-node/group-by-item-node.d.ts +2 -3
  47. package/dist/cjs/operation-node/group-by-node.d.ts +1 -1
  48. package/dist/cjs/operation-node/group-by-node.js +3 -3
  49. package/dist/cjs/operation-node/having-node.d.ts +3 -4
  50. package/dist/cjs/operation-node/having-node.js +4 -4
  51. package/dist/cjs/operation-node/insert-query-node.d.ts +1 -4
  52. package/dist/cjs/operation-node/join-node.d.ts +5 -9
  53. package/dist/cjs/operation-node/join-node.js +6 -6
  54. package/dist/cjs/operation-node/on-conflict-node.d.ts +5 -7
  55. package/dist/cjs/operation-node/on-conflict-node.js +12 -12
  56. package/dist/cjs/operation-node/on-node.d.ts +3 -4
  57. package/dist/cjs/operation-node/on-node.js +4 -4
  58. package/dist/cjs/operation-node/operation-node-transformer.d.ts +14 -4
  59. package/dist/cjs/operation-node/operation-node-transformer.js +60 -20
  60. package/dist/cjs/operation-node/operation-node-visitor.d.ts +14 -4
  61. package/dist/cjs/operation-node/operation-node-visitor.js +7 -2
  62. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  63. package/dist/cjs/operation-node/operator-node.d.ts +5 -3
  64. package/dist/cjs/operation-node/operator-node.js +3 -5
  65. package/dist/cjs/operation-node/or-node.d.ts +3 -4
  66. package/dist/cjs/operation-node/order-by-item-node.d.ts +3 -5
  67. package/dist/cjs/operation-node/over-node.d.ts +19 -0
  68. package/dist/cjs/operation-node/over-node.js +35 -0
  69. package/dist/cjs/operation-node/parens-node.d.ts +2 -3
  70. package/dist/cjs/operation-node/partition-by-item-node.d.ts +13 -0
  71. package/dist/cjs/operation-node/{filter-node.js → partition-by-item-node.js} +6 -8
  72. package/dist/cjs/operation-node/partition-by-node.d.ts +14 -0
  73. package/dist/cjs/operation-node/partition-by-node.js +24 -0
  74. package/dist/cjs/operation-node/query-node.d.ts +2 -3
  75. package/dist/cjs/operation-node/query-node.js +6 -6
  76. package/dist/cjs/operation-node/select-modifier-node.d.ts +2 -3
  77. package/dist/cjs/operation-node/select-modifier-node.js +1 -1
  78. package/dist/cjs/operation-node/select-query-node.d.ts +8 -9
  79. package/dist/cjs/operation-node/select-query-node.js +14 -14
  80. package/dist/cjs/operation-node/selection-node.d.ts +2 -3
  81. package/dist/cjs/operation-node/set-operation-node.d.ts +15 -0
  82. package/dist/cjs/operation-node/{union-node.js → set-operation-node.js} +7 -6
  83. package/dist/cjs/operation-node/simple-reference-expression-node.d.ts +3 -0
  84. package/dist/cjs/operation-node/{operation-node-utils.js → simple-reference-expression-node.js} +0 -0
  85. package/dist/cjs/operation-node/unary-operation-node.d.ts +13 -0
  86. package/dist/cjs/operation-node/unary-operation-node.js +19 -0
  87. package/dist/cjs/operation-node/update-query-node.d.ts +3 -4
  88. package/dist/cjs/operation-node/value-list-node.d.ts +2 -8
  89. package/dist/cjs/operation-node/where-node.d.ts +3 -4
  90. package/dist/cjs/operation-node/where-node.js +4 -4
  91. package/dist/cjs/parser/binary-operation-parser.d.ts +20 -0
  92. package/dist/cjs/parser/binary-operation-parser.js +99 -0
  93. package/dist/cjs/parser/coalesce-parser.d.ts +4 -0
  94. package/dist/cjs/parser/coalesce-parser.js +11 -0
  95. package/dist/cjs/parser/data-type-parser.d.ts +5 -5
  96. package/dist/cjs/parser/default-value-parser.d.ts +4 -5
  97. package/dist/cjs/parser/default-value-parser.js +2 -2
  98. package/dist/cjs/parser/expression-parser.d.ts +10 -0
  99. package/dist/cjs/parser/{complex-expression-parser.js → expression-parser.js} +9 -8
  100. package/dist/cjs/parser/group-by-parser.d.ts +1 -1
  101. package/dist/cjs/parser/group-by-parser.js +2 -2
  102. package/dist/cjs/parser/identifier-parser.d.ts +2 -0
  103. package/dist/cjs/parser/identifier-parser.js +23 -0
  104. package/dist/cjs/parser/insert-values-parser.d.ts +1 -1
  105. package/dist/cjs/parser/insert-values-parser.js +2 -2
  106. package/dist/cjs/parser/join-parser.js +2 -2
  107. package/dist/cjs/parser/order-by-parser.d.ts +2 -2
  108. package/dist/cjs/parser/parse-utils.d.ts +2 -0
  109. package/dist/cjs/parser/parse-utils.js +9 -1
  110. package/dist/cjs/parser/partition-by-parser.d.ts +6 -0
  111. package/dist/cjs/parser/partition-by-parser.js +9 -0
  112. package/dist/cjs/parser/reference-parser.d.ts +14 -13
  113. package/dist/cjs/parser/reference-parser.js +12 -9
  114. package/dist/cjs/parser/select-parser.d.ts +6 -6
  115. package/dist/cjs/parser/select-parser.js +2 -2
  116. package/dist/cjs/parser/set-operation-parser.d.ts +3 -0
  117. package/dist/cjs/parser/set-operation-parser.js +8 -0
  118. package/dist/cjs/parser/table-parser.d.ts +11 -12
  119. package/dist/cjs/parser/table-parser.js +2 -2
  120. package/dist/cjs/parser/unary-operation-parser.d.ts +5 -0
  121. package/dist/cjs/parser/unary-operation-parser.js +17 -0
  122. package/dist/cjs/parser/update-set-parser.d.ts +1 -1
  123. package/dist/cjs/parser/value-parser.d.ts +5 -8
  124. package/dist/cjs/parser/value-parser.js +4 -4
  125. package/dist/cjs/parser/with-parser.d.ts +3 -4
  126. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +1 -1
  127. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +348 -0
  128. package/dist/cjs/query-builder/aggregate-function-builder.js +298 -0
  129. package/dist/cjs/query-builder/delete-query-builder.d.ts +20 -20
  130. package/dist/cjs/query-builder/delete-query-builder.js +19 -16
  131. package/dist/cjs/query-builder/expression-builder.d.ts +3 -3
  132. package/dist/cjs/query-builder/expression-builder.js +3 -3
  133. package/dist/cjs/query-builder/function-module.d.ts +241 -0
  134. package/dist/cjs/query-builder/function-module.js +214 -0
  135. package/dist/cjs/query-builder/having-interface.d.ts +9 -8
  136. package/dist/cjs/query-builder/insert-query-builder.d.ts +7 -6
  137. package/dist/cjs/query-builder/insert-query-builder.js +11 -9
  138. package/dist/cjs/query-builder/insert-result.d.ts +8 -1
  139. package/dist/cjs/query-builder/insert-result.js +12 -1
  140. package/dist/cjs/query-builder/join-builder.d.ts +9 -8
  141. package/dist/cjs/query-builder/join-builder.js +10 -9
  142. package/dist/cjs/query-builder/on-conflict-builder.d.ts +25 -24
  143. package/dist/cjs/query-builder/on-conflict-builder.js +18 -17
  144. package/dist/cjs/query-builder/over-builder.d.ts +59 -0
  145. package/dist/cjs/query-builder/over-builder.js +50 -0
  146. package/dist/cjs/query-builder/select-query-builder.d.ts +138 -47
  147. package/dist/cjs/query-builder/select-query-builder.js +122 -40
  148. package/dist/cjs/query-builder/update-query-builder.d.ts +20 -20
  149. package/dist/cjs/query-builder/update-query-builder.js +19 -16
  150. package/dist/cjs/query-builder/where-interface.d.ts +12 -11
  151. package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
  152. package/dist/cjs/query-compiler/default-query-compiler.d.ts +15 -5
  153. package/dist/cjs/query-compiler/default-query-compiler.js +78 -47
  154. package/dist/cjs/query-executor/query-executor-base.js +16 -1
  155. package/dist/cjs/raw-builder/raw-builder.d.ts +49 -13
  156. package/dist/cjs/raw-builder/raw-builder.js +24 -14
  157. package/dist/cjs/raw-builder/sql.d.ts +15 -7
  158. package/dist/cjs/raw-builder/sql.js +6 -0
  159. package/dist/cjs/schema/alter-column-builder.d.ts +28 -0
  160. package/dist/cjs/schema/alter-column-builder.js +55 -0
  161. package/dist/cjs/schema/alter-table-builder.d.ts +39 -341
  162. package/dist/cjs/schema/alter-table-builder.js +65 -280
  163. package/dist/cjs/schema/column-definition-builder.d.ts +43 -155
  164. package/dist/cjs/schema/column-definition-builder.js +189 -0
  165. package/dist/cjs/schema/create-index-builder.d.ts +2 -2
  166. package/dist/cjs/schema/create-table-builder.d.ts +38 -5
  167. package/dist/cjs/schema/create-table-builder.js +36 -1
  168. package/dist/cjs/schema/create-view-builder.d.ts +3 -2
  169. package/dist/cjs/schema/schema.d.ts +2 -2
  170. package/dist/cjs/schema/schema.js +6 -5
  171. package/dist/cjs/util/compilable.d.ts +2 -2
  172. package/dist/cjs/util/explainable.d.ts +2 -2
  173. package/dist/cjs/util/infer-result.d.ts +46 -0
  174. package/dist/cjs/util/infer-result.js +2 -0
  175. package/dist/cjs/util/log-once.d.ts +5 -0
  176. package/dist/cjs/util/log-once.js +16 -0
  177. package/dist/cjs/util/object-utils.d.ts +1 -0
  178. package/dist/cjs/util/object-utils.js +5 -1
  179. package/dist/cjs/util/type-utils.d.ts +3 -13
  180. package/dist/esm/dialect/database-introspector.d.ts +4 -0
  181. package/dist/esm/dialect/mysql/mysql-driver.js +6 -3
  182. package/dist/esm/dialect/postgres/postgres-adapter.js +1 -1
  183. package/dist/esm/dialect/postgres/postgres-driver.js +7 -2
  184. package/dist/esm/dialect/postgres/postgres-introspector.js +8 -0
  185. package/dist/esm/dialect/sqlite/sqlite-driver.js +4 -3
  186. package/dist/esm/dialect/sqlite/sqlite-introspector.js +1 -0
  187. package/dist/esm/driver/database-connection.d.ts +6 -2
  188. package/dist/esm/dynamic/dynamic-reference-builder.d.ts +2 -3
  189. package/dist/esm/dynamic/dynamic-reference-builder.js +2 -2
  190. package/dist/esm/expression/expression.d.ts +100 -0
  191. package/dist/esm/expression/expression.js +12 -0
  192. package/dist/esm/index.d.ts +17 -8
  193. package/dist/esm/index.js +13 -4
  194. package/dist/esm/kysely.d.ts +3 -3
  195. package/dist/esm/kysely.js +3 -3
  196. package/dist/esm/migration/file-migration-provider.js +11 -4
  197. package/dist/esm/operation-node/aggregate-function-node.d.ts +25 -0
  198. package/dist/esm/operation-node/aggregate-function-node.js +46 -0
  199. package/dist/esm/operation-node/alias-node.d.ts +3 -10
  200. package/dist/esm/operation-node/alter-column-node.d.ts +1 -2
  201. package/dist/esm/operation-node/alter-table-node.d.ts +5 -7
  202. package/dist/esm/operation-node/alter-table-node.js +9 -1
  203. package/dist/esm/operation-node/and-node.d.ts +3 -4
  204. package/dist/esm/operation-node/binary-operation-node.d.ts +14 -0
  205. package/dist/esm/operation-node/binary-operation-node.js +18 -0
  206. package/dist/esm/operation-node/check-constraint-node.d.ts +2 -3
  207. package/dist/esm/operation-node/column-definition-node.d.ts +6 -5
  208. package/dist/esm/operation-node/column-definition-node.js +16 -0
  209. package/dist/esm/operation-node/column-update-node.d.ts +2 -3
  210. package/dist/esm/operation-node/common-table-expression-node.d.ts +2 -4
  211. package/dist/esm/operation-node/create-index-node.d.ts +1 -3
  212. package/dist/esm/operation-node/create-table-node.d.ts +4 -5
  213. package/dist/esm/operation-node/create-type-node.d.ts +1 -1
  214. package/dist/esm/operation-node/create-type-node.js +1 -2
  215. package/dist/esm/operation-node/default-value-node.d.ts +2 -4
  216. package/dist/esm/operation-node/delete-query-node.d.ts +1 -2
  217. package/dist/esm/operation-node/drop-type-node.d.ts +1 -1
  218. package/dist/esm/operation-node/drop-type-node.js +1 -2
  219. package/dist/esm/operation-node/explain-node.d.ts +2 -4
  220. package/dist/esm/operation-node/explain-node.js +1 -1
  221. package/dist/esm/operation-node/from-node.d.ts +3 -4
  222. package/dist/esm/operation-node/generated-node.d.ts +2 -3
  223. package/dist/esm/operation-node/group-by-item-node.d.ts +2 -3
  224. package/dist/esm/operation-node/group-by-node.d.ts +1 -1
  225. package/dist/esm/operation-node/group-by-node.js +3 -3
  226. package/dist/esm/operation-node/having-node.d.ts +3 -4
  227. package/dist/esm/operation-node/having-node.js +4 -4
  228. package/dist/esm/operation-node/insert-query-node.d.ts +1 -4
  229. package/dist/esm/operation-node/join-node.d.ts +5 -9
  230. package/dist/esm/operation-node/join-node.js +6 -6
  231. package/dist/esm/operation-node/on-conflict-node.d.ts +5 -7
  232. package/dist/esm/operation-node/on-conflict-node.js +12 -12
  233. package/dist/esm/operation-node/on-node.d.ts +3 -4
  234. package/dist/esm/operation-node/on-node.js +4 -4
  235. package/dist/esm/operation-node/operation-node-transformer.d.ts +14 -4
  236. package/dist/esm/operation-node/operation-node-transformer.js +60 -20
  237. package/dist/esm/operation-node/operation-node-visitor.d.ts +14 -4
  238. package/dist/esm/operation-node/operation-node-visitor.js +7 -2
  239. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  240. package/dist/esm/operation-node/operator-node.d.ts +5 -3
  241. package/dist/esm/operation-node/operator-node.js +2 -4
  242. package/dist/esm/operation-node/or-node.d.ts +3 -4
  243. package/dist/esm/operation-node/order-by-item-node.d.ts +3 -5
  244. package/dist/esm/operation-node/over-node.d.ts +19 -0
  245. package/dist/esm/operation-node/over-node.js +33 -0
  246. package/dist/esm/operation-node/parens-node.d.ts +2 -3
  247. package/dist/esm/operation-node/partition-by-item-node.d.ts +13 -0
  248. package/dist/esm/operation-node/partition-by-item-node.js +16 -0
  249. package/dist/esm/operation-node/partition-by-node.d.ts +14 -0
  250. package/dist/esm/operation-node/partition-by-node.js +22 -0
  251. package/dist/esm/operation-node/query-node.d.ts +2 -3
  252. package/dist/esm/operation-node/query-node.js +6 -6
  253. package/dist/esm/operation-node/select-modifier-node.d.ts +2 -3
  254. package/dist/esm/operation-node/select-modifier-node.js +1 -1
  255. package/dist/esm/operation-node/select-query-node.d.ts +8 -9
  256. package/dist/esm/operation-node/select-query-node.js +14 -14
  257. package/dist/esm/operation-node/selection-node.d.ts +2 -3
  258. package/dist/esm/operation-node/set-operation-node.d.ts +15 -0
  259. package/dist/esm/operation-node/set-operation-node.js +18 -0
  260. package/dist/esm/operation-node/simple-reference-expression-node.d.ts +3 -0
  261. package/dist/esm/operation-node/simple-reference-expression-node.js +2 -0
  262. package/dist/esm/operation-node/unary-operation-node.d.ts +13 -0
  263. package/dist/esm/operation-node/unary-operation-node.js +17 -0
  264. package/dist/esm/operation-node/update-query-node.d.ts +3 -4
  265. package/dist/esm/operation-node/value-list-node.d.ts +2 -8
  266. package/dist/esm/operation-node/where-node.d.ts +3 -4
  267. package/dist/esm/operation-node/where-node.js +4 -4
  268. package/dist/esm/parser/binary-operation-parser.d.ts +20 -0
  269. package/dist/esm/parser/binary-operation-parser.js +92 -0
  270. package/dist/esm/parser/coalesce-parser.d.ts +4 -0
  271. package/dist/esm/parser/coalesce-parser.js +8 -0
  272. package/dist/esm/parser/data-type-parser.d.ts +5 -5
  273. package/dist/esm/parser/default-value-parser.d.ts +4 -5
  274. package/dist/esm/parser/default-value-parser.js +2 -2
  275. package/dist/esm/parser/expression-parser.d.ts +10 -0
  276. package/dist/esm/parser/{complex-expression-parser.js → expression-parser.js} +6 -5
  277. package/dist/esm/parser/group-by-parser.d.ts +1 -1
  278. package/dist/esm/parser/group-by-parser.js +2 -2
  279. package/dist/esm/parser/identifier-parser.d.ts +2 -0
  280. package/dist/esm/parser/identifier-parser.js +20 -0
  281. package/dist/esm/parser/insert-values-parser.d.ts +1 -1
  282. package/dist/esm/parser/insert-values-parser.js +2 -2
  283. package/dist/esm/parser/join-parser.js +2 -2
  284. package/dist/esm/parser/order-by-parser.d.ts +2 -2
  285. package/dist/esm/parser/parse-utils.d.ts +2 -0
  286. package/dist/esm/parser/parse-utils.js +7 -0
  287. package/dist/esm/parser/partition-by-parser.d.ts +6 -0
  288. package/dist/esm/parser/partition-by-parser.js +6 -0
  289. package/dist/esm/parser/reference-parser.d.ts +14 -13
  290. package/dist/esm/parser/reference-parser.js +10 -8
  291. package/dist/esm/parser/select-parser.d.ts +6 -6
  292. package/dist/esm/parser/select-parser.js +2 -2
  293. package/dist/esm/parser/set-operation-parser.d.ts +3 -0
  294. package/dist/esm/parser/set-operation-parser.js +5 -0
  295. package/dist/esm/parser/table-parser.d.ts +11 -12
  296. package/dist/esm/parser/table-parser.js +2 -2
  297. package/dist/esm/parser/unary-operation-parser.d.ts +5 -0
  298. package/dist/esm/parser/unary-operation-parser.js +13 -0
  299. package/dist/esm/parser/update-set-parser.d.ts +1 -1
  300. package/dist/esm/parser/value-parser.d.ts +5 -8
  301. package/dist/esm/parser/value-parser.js +4 -4
  302. package/dist/esm/parser/with-parser.d.ts +3 -4
  303. package/dist/esm/plugin/camel-case/camel-case-plugin.js +2 -2
  304. package/dist/esm/query-builder/aggregate-function-builder.d.ts +348 -0
  305. package/dist/esm/query-builder/aggregate-function-builder.js +294 -0
  306. package/dist/esm/query-builder/delete-query-builder.d.ts +20 -20
  307. package/dist/esm/query-builder/delete-query-builder.js +19 -16
  308. package/dist/esm/query-builder/expression-builder.d.ts +3 -3
  309. package/dist/esm/query-builder/expression-builder.js +3 -3
  310. package/dist/esm/query-builder/function-module.d.ts +241 -0
  311. package/dist/esm/query-builder/function-module.js +211 -0
  312. package/dist/esm/query-builder/having-interface.d.ts +9 -8
  313. package/dist/esm/query-builder/insert-query-builder.d.ts +7 -6
  314. package/dist/esm/query-builder/insert-query-builder.js +11 -9
  315. package/dist/esm/query-builder/insert-result.d.ts +8 -1
  316. package/dist/esm/query-builder/insert-result.js +12 -1
  317. package/dist/esm/query-builder/join-builder.d.ts +9 -8
  318. package/dist/esm/query-builder/join-builder.js +10 -9
  319. package/dist/esm/query-builder/on-conflict-builder.d.ts +25 -24
  320. package/dist/esm/query-builder/on-conflict-builder.js +18 -17
  321. package/dist/esm/query-builder/over-builder.d.ts +59 -0
  322. package/dist/esm/query-builder/over-builder.js +47 -0
  323. package/dist/esm/query-builder/select-query-builder.d.ts +138 -47
  324. package/dist/esm/query-builder/select-query-builder.js +120 -38
  325. package/dist/esm/query-builder/update-query-builder.d.ts +20 -20
  326. package/dist/esm/query-builder/update-query-builder.js +19 -16
  327. package/dist/esm/query-builder/where-interface.d.ts +12 -11
  328. package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
  329. package/dist/esm/query-compiler/default-query-compiler.d.ts +15 -5
  330. package/dist/esm/query-compiler/default-query-compiler.js +79 -48
  331. package/dist/esm/query-executor/query-executor-base.js +16 -1
  332. package/dist/esm/raw-builder/raw-builder.d.ts +49 -13
  333. package/dist/esm/raw-builder/raw-builder.js +23 -14
  334. package/dist/esm/raw-builder/sql.d.ts +15 -7
  335. package/dist/esm/raw-builder/sql.js +6 -0
  336. package/dist/esm/schema/alter-column-builder.d.ts +28 -0
  337. package/dist/esm/schema/alter-column-builder.js +51 -0
  338. package/dist/esm/schema/alter-table-builder.d.ts +39 -341
  339. package/dist/esm/schema/alter-table-builder.js +61 -274
  340. package/dist/esm/schema/column-definition-builder.d.ts +43 -155
  341. package/dist/esm/schema/column-definition-builder.js +189 -0
  342. package/dist/esm/schema/create-index-builder.d.ts +2 -2
  343. package/dist/esm/schema/create-table-builder.d.ts +38 -5
  344. package/dist/esm/schema/create-table-builder.js +36 -1
  345. package/dist/esm/schema/create-view-builder.d.ts +3 -2
  346. package/dist/esm/schema/schema.d.ts +2 -2
  347. package/dist/esm/schema/schema.js +6 -5
  348. package/dist/esm/util/compilable.d.ts +2 -2
  349. package/dist/esm/util/explainable.d.ts +2 -2
  350. package/dist/esm/util/infer-result.d.ts +46 -0
  351. package/dist/esm/util/infer-result.js +2 -0
  352. package/dist/esm/util/log-once.d.ts +5 -0
  353. package/dist/esm/util/log-once.js +13 -0
  354. package/dist/esm/util/object-utils.d.ts +1 -0
  355. package/dist/esm/util/object-utils.js +3 -0
  356. package/dist/esm/util/type-utils.d.ts +3 -13
  357. package/package.json +4 -1
  358. package/dist/cjs/operation-node/filter-node.d.ts +0 -18
  359. package/dist/cjs/operation-node/operation-node-utils.d.ts +0 -17
  360. package/dist/cjs/operation-node/union-node.d.ts +0 -16
  361. package/dist/cjs/parser/complex-expression-parser.d.ts +0 -10
  362. package/dist/cjs/parser/filter-parser.d.ts +0 -24
  363. package/dist/cjs/parser/filter-parser.js +0 -109
  364. package/dist/cjs/parser/union-parser.d.ts +0 -5
  365. package/dist/cjs/parser/union-parser.js +0 -8
  366. package/dist/cjs/query-builder/function-builder.d.ts +0 -133
  367. package/dist/cjs/query-builder/function-builder.js +0 -160
  368. package/dist/esm/operation-node/filter-node.d.ts +0 -18
  369. package/dist/esm/operation-node/filter-node.js +0 -18
  370. package/dist/esm/operation-node/operation-node-utils.d.ts +0 -17
  371. package/dist/esm/operation-node/operation-node-utils.js +0 -2
  372. package/dist/esm/operation-node/union-node.d.ts +0 -16
  373. package/dist/esm/operation-node/union-node.js +0 -17
  374. package/dist/esm/parser/complex-expression-parser.d.ts +0 -10
  375. package/dist/esm/parser/filter-parser.d.ts +0 -24
  376. package/dist/esm/parser/filter-parser.js +0 -100
  377. package/dist/esm/parser/union-parser.d.ts +0 -5
  378. package/dist/esm/parser/union-parser.js +0 -5
  379. package/dist/esm/query-builder/function-builder.d.ts +0 -133
  380. package/dist/esm/query-builder/function-builder.js +0 -157
@@ -0,0 +1,348 @@
1
+ import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
2
+ import { AliasNode } from '../operation-node/alias-node.js';
3
+ import { OverBuilder } from './over-builder.js';
4
+ import { AliasedExpression, Expression } from '../expression/expression.js';
5
+ import { ReferenceExpression } from '../parser/reference-parser.js';
6
+ import { ComparisonOperatorExpression, OperandValueExpressionOrList, WhereGrouper } from '../parser/binary-operation-parser.js';
7
+ import { ExistsExpression } from '../parser/unary-operation-parser.js';
8
+ export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown> implements Expression<O> {
9
+ #private;
10
+ constructor(props: AggregateFunctionBuilderProps);
11
+ /** @private */
12
+ /**
13
+ * All expressions need to have this getter for complicated type-related reasons.
14
+ * Simply add this getter for your expression and always return `undefined` from it:
15
+ *
16
+ * ```ts
17
+ * class SomeExpression<T> implements Expression<T> {
18
+ * get expressionType(): T | undefined {
19
+ * return undefined
20
+ * }
21
+ * }
22
+ * ```
23
+ *
24
+ * The getter is needed to make the expression assignable to another expression only
25
+ * if the types `T` are assignable. Without this property (or some other property
26
+ * that references `T`), you could assing `Expression<string>` to `Expression<number>`.
27
+ */
28
+ get expressionType(): O | undefined;
29
+ /**
30
+ * Returns an aliased version of the function.
31
+ *
32
+ * In addition to slapping `as "the_alias"` to the end of the SQL,
33
+ * this method also provides strict typing:
34
+ *
35
+ * ```ts
36
+ * const result = await db
37
+ * .selectFrom('person')
38
+ * .select(
39
+ * eb => eb.fn.count<number>('id').as('person_count')
40
+ * )
41
+ * .executeTakeFirstOrThrow()
42
+ *
43
+ * // `person_count: number` field exists in the result type.
44
+ * console.log(result.person_count)
45
+ * ```
46
+ *
47
+ * The generated SQL (PostgreSQL):
48
+ *
49
+ * ```sql
50
+ * select count("id") as "person_count"
51
+ * from "person"
52
+ * ```
53
+ */
54
+ as<A extends string>(alias: A): AliasedAggregateFunctionBuilder<DB, TB, O, A>;
55
+ /**
56
+ * Adds a `distinct` clause inside the function.
57
+ *
58
+ * ### Examples
59
+ *
60
+ * ```ts
61
+ * const result = await db
62
+ * .selectFrom('person')
63
+ * .select((eb) =>
64
+ * eb.fn.count<number>('first_name').distinct().as('first_name_count')
65
+ * )
66
+ * .executeTakeFirstOrThrow()
67
+ * ```
68
+ *
69
+ * The generated SQL (PostgreSQL):
70
+ *
71
+ * ```sql
72
+ * select count(distinct "first_name") as "first_name_count"
73
+ * from "person"
74
+ * ```
75
+ */
76
+ distinct(): AggregateFunctionBuilder<DB, TB, O>;
77
+ /**
78
+ * Adds a `filter` clause with a nested `where` clause after the function.
79
+ *
80
+ * Similar to {@link WhereInterface}'s `where` method.
81
+ *
82
+ * Also see {@link orFilterWhere}, {@link filterWhereExists} and {@link filterWhereRef}.
83
+ *
84
+ * ### Examples
85
+ *
86
+ * Count by gender:
87
+ *
88
+ * ```ts
89
+ * const result = await db
90
+ * .selectFrom('person')
91
+ * .select([
92
+ * (eb) =>
93
+ * eb.fn
94
+ * .count<number>('id')
95
+ * .filterWhere('gender', '=', 'female')
96
+ * .as('female_count'),
97
+ * (eb) =>
98
+ * eb.fn
99
+ * .count<number>('id')
100
+ * .filterWhere('gender', '=', 'male')
101
+ * .as('male_count'),
102
+ * (eb) =>
103
+ * eb.fn
104
+ * .count<number>('id')
105
+ * .filterWhere('gender', '=', 'other')
106
+ * .as('other_count'),
107
+ * ])
108
+ * .executeTakeFirstOrThrow()
109
+ * ```
110
+ *
111
+ * The generated SQL (PostgreSQL):
112
+ *
113
+ * ```sql
114
+ * select
115
+ * count("id") filter(where "gender" = $1) as "female_count",
116
+ * count("id") filter(where "gender" = $2) as "male_count",
117
+ * count("id") filter(where "gender" = $3) as "other_count"
118
+ * from "person"
119
+ * ```
120
+ */
121
+ filterWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): AggregateFunctionBuilder<DB, TB, O>;
122
+ filterWhere(grouper: WhereGrouper<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
123
+ filterWhere(expression: Expression<any>): AggregateFunctionBuilder<DB, TB, O>;
124
+ /**
125
+ * Adds a `filter` clause with a nested `where exists` clause after the function.
126
+ *
127
+ * Similar to {@link WhereInterface}'s `whereExists` method.
128
+ *
129
+ * ### Examples
130
+ *
131
+ * Count pet owners versus general public:
132
+ *
133
+ * ```ts
134
+ * const result = await db
135
+ * .selectFrom('person')
136
+ * .select([
137
+ * (eb) =>
138
+ * eb.fn
139
+ * .count<number>('person.id')
140
+ * .filterWhereExists((qb) =>
141
+ * qb
142
+ * .selectFrom('pet')
143
+ * .select('pet.id')
144
+ * .whereRef('pet.owner_id', '=', 'person.id')
145
+ * )
146
+ * .as('pet_owner_count'),
147
+ * (eb) => eb.fn.count<number>('person.id').as('total_count'),
148
+ * ])
149
+ * .executeTakeFirstOrThrow()
150
+ * ```
151
+ *
152
+ * The generated SQL (PostgreSQL):
153
+ *
154
+ * ```sql
155
+ * select count("person"."id") filter(where exists (
156
+ * select "pet"."id"
157
+ * from "pet"
158
+ * where "pet"."owner_id" = "person"."id"
159
+ * )) as "pet_ower_count",
160
+ * count("person"."id") as "total_count"
161
+ * from "person"
162
+ * ```
163
+ */
164
+ filterWhereExists(arg: ExistsExpression<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
165
+ /**
166
+ * Just like {@link filterWhereExists} but creates a `not exists` clause inside
167
+ * the `filter` clause.
168
+ */
169
+ filterWhereNotExists(arg: ExistsExpression<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
170
+ /**
171
+ * Adds a `filter` clause with a nested `where` clause after the function, where
172
+ * both sides of the operator are references to columns.
173
+ *
174
+ * Similar to {@link WhereInterface}'s `whereRef` method.
175
+ *
176
+ * ### Examples
177
+ *
178
+ * Count people with same first and last names versus general public:
179
+ *
180
+ * ```ts
181
+ * const result = await db
182
+ * .selectFrom('person')
183
+ * .select([
184
+ * (eb) =>
185
+ * eb.fn
186
+ * .count<number>('id')
187
+ * .filterWhereRef('first_name', '=', 'last_name')
188
+ * .as('repeat_name_count'),
189
+ * (eb) => eb.fn.count<number>('id').as('total_count'),
190
+ * ])
191
+ * .executeTakeFirstOrThrow()
192
+ * ```
193
+ *
194
+ * The generated SQL (PostgreSQL):
195
+ *
196
+ * ```sql
197
+ * select
198
+ * count("id") filter(where "first_name" = "last_name") as "repeat_name_count",
199
+ * count("id") as "total_count"
200
+ * from "person"
201
+ * ```
202
+ */
203
+ filterWhereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
204
+ /**
205
+ * Adds a `filter` clause with a nested `or where` clause after the function.
206
+ * Otherwise works just like {@link filterWhere}.
207
+ *
208
+ * Similar to {@link WhereInterface}'s `orWhere` method.
209
+ *
210
+ * ### Examples
211
+ *
212
+ * For some reason you're tasked with counting adults (18+) or people called
213
+ * "Bob" versus general public:
214
+ *
215
+ * ```ts
216
+ * const result = await db
217
+ * .selectFrom('person')
218
+ * .select([
219
+ * (eb) =>
220
+ * eb.fn
221
+ * .count<number>('id')
222
+ * .filterWhere('age', '>=', '18')
223
+ * .orFilterWhere('first_name', '=', 'Bob')
224
+ * .as('adult_or_bob_count'),
225
+ * (eb) => eb.fn.count<number>('id').as('total_count'),
226
+ * ])
227
+ * .executeTakeFirstOrThrow()
228
+ * ```
229
+ *
230
+ * The generated SQL (PostgreSQL):
231
+ *
232
+ * ```sql
233
+ * select
234
+ * count("id") filter(where "age" >= $1 or "first_name" = $2) as "adult_or_bob_count",
235
+ * count("id") as "total_count"
236
+ * from "person"
237
+ * ```
238
+ */
239
+ orFilterWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): AggregateFunctionBuilder<DB, TB, O>;
240
+ orFilterWhere(grouper: WhereGrouper<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
241
+ orFilterWhere(expression: Expression<any>): AggregateFunctionBuilder<DB, TB, O>;
242
+ /**
243
+ * Just like {@link filterWhereExists} but creates an `or exists` clause inside
244
+ * the `filter` clause.
245
+ *
246
+ * Similar to {@link WhereInterface}'s `orWhereExists` method.
247
+ */
248
+ orFilterWhereExists(arg: ExistsExpression<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
249
+ /**
250
+ * Just like {@link filterWhereExists} but creates an `or not exists` clause inside
251
+ * the `filter` clause.
252
+ *
253
+ * Similar to {@link WhereInterface}'s `orWhereNotExists` method.
254
+ */
255
+ orFilterWhereNotExists(arg: ExistsExpression<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
256
+ /**
257
+ * Adds an `or where` clause inside the `filter` clause. Otherwise works just
258
+ * like {@link filterWhereRef}.
259
+ *
260
+ * Also see {@link orFilterWhere} and {@link filterWhere}.
261
+ *
262
+ * Similar to {@link WhereInterface}'s `orWhereRef` method.
263
+ */
264
+ orFilterWhereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
265
+ /**
266
+ * Adds an `over` clause (window functions) after the function.
267
+ *
268
+ * ### Examples
269
+ *
270
+ * ```ts
271
+ * const result = await db
272
+ * .selectFrom('person')
273
+ * .select(
274
+ * eb => eb.fn.avg<number>('age').over().as('average_age')
275
+ * )
276
+ * .execute()
277
+ * ```
278
+ *
279
+ * The generated SQL (PostgreSQL):
280
+ *
281
+ * ```sql
282
+ * select avg("age") over() as "average_age"
283
+ * from "person"
284
+ * ```
285
+ *
286
+ * Also supports passing a callback that returns an over builder,
287
+ * allowing to add partition by and sort by clauses inside over.
288
+ *
289
+ * ```ts
290
+ * const result = await db
291
+ * .selectFrom('person')
292
+ * .select(
293
+ * eb => eb.fn.avg<number>('age').over(
294
+ * ob => ob.partitionBy('last_name').orderBy('first_name', 'asc')
295
+ * ).as('average_age')
296
+ * )
297
+ * .execute()
298
+ * ```
299
+ *
300
+ * The generated SQL (PostgreSQL):
301
+ *
302
+ * ```sql
303
+ * select avg("age") over(partition by "last_name" order by "first_name" asc) as "average_age"
304
+ * from "person"
305
+ * ```
306
+ */
307
+ over(over?: OverBuilderCallback<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
308
+ /**
309
+ * Creates the OperationNode that describes how to compile this expression into SQL.
310
+ *
311
+ * If you are creating a custom expression, it's often easiest to use the {@link sql}
312
+ * template tag to build the node:
313
+ *
314
+ * ```ts
315
+ * class SomeExpression<T> implements Expression<T> {
316
+ * toOperationNode(): OperationNode {
317
+ * return sql`some sql here`.toOperationNode()
318
+ * }
319
+ * }
320
+ * ```
321
+ */
322
+ toOperationNode(): AggregateFunctionNode;
323
+ }
324
+ /**
325
+ * {@link AggregateFunctionBuilder} with an alias. The result of calling {@link AggregateFunctionBuilder.as}.
326
+ */
327
+ export declare class AliasedAggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown, A extends string = never> implements AliasedExpression<O, A> {
328
+ #private;
329
+ constructor(aggregateFunctionBuilder: AggregateFunctionBuilder<DB, TB, O>, alias: A);
330
+ /** @private */
331
+ /**
332
+ * Returns the aliased expression.
333
+ */
334
+ get expression(): Expression<O>;
335
+ /** @private */
336
+ /**
337
+ * Returns the alias.
338
+ */
339
+ get alias(): A;
340
+ /**
341
+ * Creates the OperationNode that describes how to compile this expression into SQL.
342
+ */
343
+ toOperationNode(): AliasNode;
344
+ }
345
+ export interface AggregateFunctionBuilderProps {
346
+ aggregateFunctionNode: AggregateFunctionNode;
347
+ }
348
+ export declare type OverBuilderCallback<DB, TB extends keyof DB> = (builder: OverBuilder<DB, TB>) => OverBuilder<DB, TB>;
@@ -0,0 +1,298 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AliasedAggregateFunctionBuilder = exports.AggregateFunctionBuilder = void 0;
4
+ const object_utils_js_1 = require("../util/object-utils.js");
5
+ const aggregate_function_node_js_1 = require("../operation-node/aggregate-function-node.js");
6
+ const alias_node_js_1 = require("../operation-node/alias-node.js");
7
+ const identifier_node_js_1 = require("../operation-node/identifier-node.js");
8
+ const prevent_await_js_1 = require("../util/prevent-await.js");
9
+ const parse_utils_js_1 = require("../parser/parse-utils.js");
10
+ const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
11
+ const unary_operation_parser_js_1 = require("../parser/unary-operation-parser.js");
12
+ class AggregateFunctionBuilder {
13
+ #props;
14
+ constructor(props) {
15
+ this.#props = (0, object_utils_js_1.freeze)(props);
16
+ }
17
+ /** @private */
18
+ get expressionType() {
19
+ return undefined;
20
+ }
21
+ /**
22
+ * Returns an aliased version of the function.
23
+ *
24
+ * In addition to slapping `as "the_alias"` to the end of the SQL,
25
+ * this method also provides strict typing:
26
+ *
27
+ * ```ts
28
+ * const result = await db
29
+ * .selectFrom('person')
30
+ * .select(
31
+ * eb => eb.fn.count<number>('id').as('person_count')
32
+ * )
33
+ * .executeTakeFirstOrThrow()
34
+ *
35
+ * // `person_count: number` field exists in the result type.
36
+ * console.log(result.person_count)
37
+ * ```
38
+ *
39
+ * The generated SQL (PostgreSQL):
40
+ *
41
+ * ```sql
42
+ * select count("id") as "person_count"
43
+ * from "person"
44
+ * ```
45
+ */
46
+ as(alias) {
47
+ return new AliasedAggregateFunctionBuilder(this, alias);
48
+ }
49
+ /**
50
+ * Adds a `distinct` clause inside the function.
51
+ *
52
+ * ### Examples
53
+ *
54
+ * ```ts
55
+ * const result = await db
56
+ * .selectFrom('person')
57
+ * .select((eb) =>
58
+ * eb.fn.count<number>('first_name').distinct().as('first_name_count')
59
+ * )
60
+ * .executeTakeFirstOrThrow()
61
+ * ```
62
+ *
63
+ * The generated SQL (PostgreSQL):
64
+ *
65
+ * ```sql
66
+ * select count(distinct "first_name") as "first_name_count"
67
+ * from "person"
68
+ * ```
69
+ */
70
+ distinct() {
71
+ return new AggregateFunctionBuilder({
72
+ ...this.#props,
73
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithDistinct(this.#props.aggregateFunctionNode),
74
+ });
75
+ }
76
+ filterWhere(...args) {
77
+ return new AggregateFunctionBuilder({
78
+ ...this.#props,
79
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, (0, binary_operation_parser_js_1.parseWhere)(args)),
80
+ });
81
+ }
82
+ /**
83
+ * Adds a `filter` clause with a nested `where exists` clause after the function.
84
+ *
85
+ * Similar to {@link WhereInterface}'s `whereExists` method.
86
+ *
87
+ * ### Examples
88
+ *
89
+ * Count pet owners versus general public:
90
+ *
91
+ * ```ts
92
+ * const result = await db
93
+ * .selectFrom('person')
94
+ * .select([
95
+ * (eb) =>
96
+ * eb.fn
97
+ * .count<number>('person.id')
98
+ * .filterWhereExists((qb) =>
99
+ * qb
100
+ * .selectFrom('pet')
101
+ * .select('pet.id')
102
+ * .whereRef('pet.owner_id', '=', 'person.id')
103
+ * )
104
+ * .as('pet_owner_count'),
105
+ * (eb) => eb.fn.count<number>('person.id').as('total_count'),
106
+ * ])
107
+ * .executeTakeFirstOrThrow()
108
+ * ```
109
+ *
110
+ * The generated SQL (PostgreSQL):
111
+ *
112
+ * ```sql
113
+ * select count("person"."id") filter(where exists (
114
+ * select "pet"."id"
115
+ * from "pet"
116
+ * where "pet"."owner_id" = "person"."id"
117
+ * )) as "pet_ower_count",
118
+ * count("person"."id") as "total_count"
119
+ * from "person"
120
+ * ```
121
+ */
122
+ filterWhereExists(arg) {
123
+ return new AggregateFunctionBuilder({
124
+ ...this.#props,
125
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, (0, unary_operation_parser_js_1.parseExists)(arg)),
126
+ });
127
+ }
128
+ /**
129
+ * Just like {@link filterWhereExists} but creates a `not exists` clause inside
130
+ * the `filter` clause.
131
+ */
132
+ filterWhereNotExists(arg) {
133
+ return new AggregateFunctionBuilder({
134
+ ...this.#props,
135
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, (0, unary_operation_parser_js_1.parseNotExists)(arg)),
136
+ });
137
+ }
138
+ /**
139
+ * Adds a `filter` clause with a nested `where` clause after the function, where
140
+ * both sides of the operator are references to columns.
141
+ *
142
+ * Similar to {@link WhereInterface}'s `whereRef` method.
143
+ *
144
+ * ### Examples
145
+ *
146
+ * Count people with same first and last names versus general public:
147
+ *
148
+ * ```ts
149
+ * const result = await db
150
+ * .selectFrom('person')
151
+ * .select([
152
+ * (eb) =>
153
+ * eb.fn
154
+ * .count<number>('id')
155
+ * .filterWhereRef('first_name', '=', 'last_name')
156
+ * .as('repeat_name_count'),
157
+ * (eb) => eb.fn.count<number>('id').as('total_count'),
158
+ * ])
159
+ * .executeTakeFirstOrThrow()
160
+ * ```
161
+ *
162
+ * The generated SQL (PostgreSQL):
163
+ *
164
+ * ```sql
165
+ * select
166
+ * count("id") filter(where "first_name" = "last_name") as "repeat_name_count",
167
+ * count("id") as "total_count"
168
+ * from "person"
169
+ * ```
170
+ */
171
+ filterWhereRef(lhs, op, rhs) {
172
+ return new AggregateFunctionBuilder({
173
+ ...this.#props,
174
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, (0, binary_operation_parser_js_1.parseReferentialFilter)(lhs, op, rhs)),
175
+ });
176
+ }
177
+ orFilterWhere(...args) {
178
+ return new AggregateFunctionBuilder({
179
+ ...this.#props,
180
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithOrFilter(this.#props.aggregateFunctionNode, (0, binary_operation_parser_js_1.parseWhere)(args)),
181
+ });
182
+ }
183
+ /**
184
+ * Just like {@link filterWhereExists} but creates an `or exists` clause inside
185
+ * the `filter` clause.
186
+ *
187
+ * Similar to {@link WhereInterface}'s `orWhereExists` method.
188
+ */
189
+ orFilterWhereExists(arg) {
190
+ return new AggregateFunctionBuilder({
191
+ ...this.#props,
192
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithOrFilter(this.#props.aggregateFunctionNode, (0, unary_operation_parser_js_1.parseExists)(arg)),
193
+ });
194
+ }
195
+ /**
196
+ * Just like {@link filterWhereExists} but creates an `or not exists` clause inside
197
+ * the `filter` clause.
198
+ *
199
+ * Similar to {@link WhereInterface}'s `orWhereNotExists` method.
200
+ */
201
+ orFilterWhereNotExists(arg) {
202
+ return new AggregateFunctionBuilder({
203
+ ...this.#props,
204
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithOrFilter(this.#props.aggregateFunctionNode, (0, unary_operation_parser_js_1.parseNotExists)(arg)),
205
+ });
206
+ }
207
+ /**
208
+ * Adds an `or where` clause inside the `filter` clause. Otherwise works just
209
+ * like {@link filterWhereRef}.
210
+ *
211
+ * Also see {@link orFilterWhere} and {@link filterWhere}.
212
+ *
213
+ * Similar to {@link WhereInterface}'s `orWhereRef` method.
214
+ */
215
+ orFilterWhereRef(lhs, op, rhs) {
216
+ return new AggregateFunctionBuilder({
217
+ ...this.#props,
218
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithOrFilter(this.#props.aggregateFunctionNode, (0, binary_operation_parser_js_1.parseReferentialFilter)(lhs, op, rhs)),
219
+ });
220
+ }
221
+ /**
222
+ * Adds an `over` clause (window functions) after the function.
223
+ *
224
+ * ### Examples
225
+ *
226
+ * ```ts
227
+ * const result = await db
228
+ * .selectFrom('person')
229
+ * .select(
230
+ * eb => eb.fn.avg<number>('age').over().as('average_age')
231
+ * )
232
+ * .execute()
233
+ * ```
234
+ *
235
+ * The generated SQL (PostgreSQL):
236
+ *
237
+ * ```sql
238
+ * select avg("age") over() as "average_age"
239
+ * from "person"
240
+ * ```
241
+ *
242
+ * Also supports passing a callback that returns an over builder,
243
+ * allowing to add partition by and sort by clauses inside over.
244
+ *
245
+ * ```ts
246
+ * const result = await db
247
+ * .selectFrom('person')
248
+ * .select(
249
+ * eb => eb.fn.avg<number>('age').over(
250
+ * ob => ob.partitionBy('last_name').orderBy('first_name', 'asc')
251
+ * ).as('average_age')
252
+ * )
253
+ * .execute()
254
+ * ```
255
+ *
256
+ * The generated SQL (PostgreSQL):
257
+ *
258
+ * ```sql
259
+ * select avg("age") over(partition by "last_name" order by "first_name" asc) as "average_age"
260
+ * from "person"
261
+ * ```
262
+ */
263
+ over(over) {
264
+ const builder = (0, parse_utils_js_1.createOverBuilder)();
265
+ return new AggregateFunctionBuilder({
266
+ ...this.#props,
267
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.cloneWithOver(this.#props.aggregateFunctionNode, (over ? over(builder) : builder).toOperationNode()),
268
+ });
269
+ }
270
+ toOperationNode() {
271
+ return this.#props.aggregateFunctionNode;
272
+ }
273
+ }
274
+ exports.AggregateFunctionBuilder = AggregateFunctionBuilder;
275
+ (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.");
276
+ /**
277
+ * {@link AggregateFunctionBuilder} with an alias. The result of calling {@link AggregateFunctionBuilder.as}.
278
+ */
279
+ class AliasedAggregateFunctionBuilder {
280
+ #aggregateFunctionBuilder;
281
+ #alias;
282
+ constructor(aggregateFunctionBuilder, alias) {
283
+ this.#aggregateFunctionBuilder = aggregateFunctionBuilder;
284
+ this.#alias = alias;
285
+ }
286
+ /** @private */
287
+ get expression() {
288
+ return this.#aggregateFunctionBuilder;
289
+ }
290
+ /** @private */
291
+ get alias() {
292
+ return this.#alias;
293
+ }
294
+ toOperationNode() {
295
+ return alias_node_js_1.AliasNode.create(this.#aggregateFunctionBuilder.toOperationNode(), identifier_node_js_1.IdentifierNode.create(this.#alias));
296
+ }
297
+ }
298
+ exports.AliasedAggregateFunctionBuilder = AliasedAggregateFunctionBuilder;