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,294 @@
1
+ /// <reference types="./aggregate-function-builder.d.ts" />
2
+ import { freeze } from '../util/object-utils.js';
3
+ import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
4
+ import { AliasNode } from '../operation-node/alias-node.js';
5
+ import { IdentifierNode } from '../operation-node/identifier-node.js';
6
+ import { preventAwait } from '../util/prevent-await.js';
7
+ import { createOverBuilder } from '../parser/parse-utils.js';
8
+ import { parseReferentialFilter, parseWhere, } from '../parser/binary-operation-parser.js';
9
+ import { parseExists, parseNotExists, } from '../parser/unary-operation-parser.js';
10
+ export class AggregateFunctionBuilder {
11
+ #props;
12
+ constructor(props) {
13
+ this.#props = freeze(props);
14
+ }
15
+ /** @private */
16
+ get expressionType() {
17
+ return undefined;
18
+ }
19
+ /**
20
+ * Returns an aliased version of the function.
21
+ *
22
+ * In addition to slapping `as "the_alias"` to the end of the SQL,
23
+ * this method also provides strict typing:
24
+ *
25
+ * ```ts
26
+ * const result = await db
27
+ * .selectFrom('person')
28
+ * .select(
29
+ * eb => eb.fn.count<number>('id').as('person_count')
30
+ * )
31
+ * .executeTakeFirstOrThrow()
32
+ *
33
+ * // `person_count: number` field exists in the result type.
34
+ * console.log(result.person_count)
35
+ * ```
36
+ *
37
+ * The generated SQL (PostgreSQL):
38
+ *
39
+ * ```sql
40
+ * select count("id") as "person_count"
41
+ * from "person"
42
+ * ```
43
+ */
44
+ as(alias) {
45
+ return new AliasedAggregateFunctionBuilder(this, alias);
46
+ }
47
+ /**
48
+ * Adds a `distinct` clause inside the function.
49
+ *
50
+ * ### Examples
51
+ *
52
+ * ```ts
53
+ * const result = await db
54
+ * .selectFrom('person')
55
+ * .select((eb) =>
56
+ * eb.fn.count<number>('first_name').distinct().as('first_name_count')
57
+ * )
58
+ * .executeTakeFirstOrThrow()
59
+ * ```
60
+ *
61
+ * The generated SQL (PostgreSQL):
62
+ *
63
+ * ```sql
64
+ * select count(distinct "first_name") as "first_name_count"
65
+ * from "person"
66
+ * ```
67
+ */
68
+ distinct() {
69
+ return new AggregateFunctionBuilder({
70
+ ...this.#props,
71
+ aggregateFunctionNode: AggregateFunctionNode.cloneWithDistinct(this.#props.aggregateFunctionNode),
72
+ });
73
+ }
74
+ filterWhere(...args) {
75
+ return new AggregateFunctionBuilder({
76
+ ...this.#props,
77
+ aggregateFunctionNode: AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, parseWhere(args)),
78
+ });
79
+ }
80
+ /**
81
+ * Adds a `filter` clause with a nested `where exists` clause after the function.
82
+ *
83
+ * Similar to {@link WhereInterface}'s `whereExists` method.
84
+ *
85
+ * ### Examples
86
+ *
87
+ * Count pet owners versus general public:
88
+ *
89
+ * ```ts
90
+ * const result = await db
91
+ * .selectFrom('person')
92
+ * .select([
93
+ * (eb) =>
94
+ * eb.fn
95
+ * .count<number>('person.id')
96
+ * .filterWhereExists((qb) =>
97
+ * qb
98
+ * .selectFrom('pet')
99
+ * .select('pet.id')
100
+ * .whereRef('pet.owner_id', '=', 'person.id')
101
+ * )
102
+ * .as('pet_owner_count'),
103
+ * (eb) => eb.fn.count<number>('person.id').as('total_count'),
104
+ * ])
105
+ * .executeTakeFirstOrThrow()
106
+ * ```
107
+ *
108
+ * The generated SQL (PostgreSQL):
109
+ *
110
+ * ```sql
111
+ * select count("person"."id") filter(where exists (
112
+ * select "pet"."id"
113
+ * from "pet"
114
+ * where "pet"."owner_id" = "person"."id"
115
+ * )) as "pet_ower_count",
116
+ * count("person"."id") as "total_count"
117
+ * from "person"
118
+ * ```
119
+ */
120
+ filterWhereExists(arg) {
121
+ return new AggregateFunctionBuilder({
122
+ ...this.#props,
123
+ aggregateFunctionNode: AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, parseExists(arg)),
124
+ });
125
+ }
126
+ /**
127
+ * Just like {@link filterWhereExists} but creates a `not exists` clause inside
128
+ * the `filter` clause.
129
+ */
130
+ filterWhereNotExists(arg) {
131
+ return new AggregateFunctionBuilder({
132
+ ...this.#props,
133
+ aggregateFunctionNode: AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, parseNotExists(arg)),
134
+ });
135
+ }
136
+ /**
137
+ * Adds a `filter` clause with a nested `where` clause after the function, where
138
+ * both sides of the operator are references to columns.
139
+ *
140
+ * Similar to {@link WhereInterface}'s `whereRef` method.
141
+ *
142
+ * ### Examples
143
+ *
144
+ * Count people with same first and last names versus general public:
145
+ *
146
+ * ```ts
147
+ * const result = await db
148
+ * .selectFrom('person')
149
+ * .select([
150
+ * (eb) =>
151
+ * eb.fn
152
+ * .count<number>('id')
153
+ * .filterWhereRef('first_name', '=', 'last_name')
154
+ * .as('repeat_name_count'),
155
+ * (eb) => eb.fn.count<number>('id').as('total_count'),
156
+ * ])
157
+ * .executeTakeFirstOrThrow()
158
+ * ```
159
+ *
160
+ * The generated SQL (PostgreSQL):
161
+ *
162
+ * ```sql
163
+ * select
164
+ * count("id") filter(where "first_name" = "last_name") as "repeat_name_count",
165
+ * count("id") as "total_count"
166
+ * from "person"
167
+ * ```
168
+ */
169
+ filterWhereRef(lhs, op, rhs) {
170
+ return new AggregateFunctionBuilder({
171
+ ...this.#props,
172
+ aggregateFunctionNode: AggregateFunctionNode.cloneWithFilter(this.#props.aggregateFunctionNode, parseReferentialFilter(lhs, op, rhs)),
173
+ });
174
+ }
175
+ orFilterWhere(...args) {
176
+ return new AggregateFunctionBuilder({
177
+ ...this.#props,
178
+ aggregateFunctionNode: AggregateFunctionNode.cloneWithOrFilter(this.#props.aggregateFunctionNode, parseWhere(args)),
179
+ });
180
+ }
181
+ /**
182
+ * Just like {@link filterWhereExists} but creates an `or exists` clause inside
183
+ * the `filter` clause.
184
+ *
185
+ * Similar to {@link WhereInterface}'s `orWhereExists` method.
186
+ */
187
+ orFilterWhereExists(arg) {
188
+ return new AggregateFunctionBuilder({
189
+ ...this.#props,
190
+ aggregateFunctionNode: AggregateFunctionNode.cloneWithOrFilter(this.#props.aggregateFunctionNode, parseExists(arg)),
191
+ });
192
+ }
193
+ /**
194
+ * Just like {@link filterWhereExists} but creates an `or not exists` clause inside
195
+ * the `filter` clause.
196
+ *
197
+ * Similar to {@link WhereInterface}'s `orWhereNotExists` method.
198
+ */
199
+ orFilterWhereNotExists(arg) {
200
+ return new AggregateFunctionBuilder({
201
+ ...this.#props,
202
+ aggregateFunctionNode: AggregateFunctionNode.cloneWithOrFilter(this.#props.aggregateFunctionNode, parseNotExists(arg)),
203
+ });
204
+ }
205
+ /**
206
+ * Adds an `or where` clause inside the `filter` clause. Otherwise works just
207
+ * like {@link filterWhereRef}.
208
+ *
209
+ * Also see {@link orFilterWhere} and {@link filterWhere}.
210
+ *
211
+ * Similar to {@link WhereInterface}'s `orWhereRef` method.
212
+ */
213
+ orFilterWhereRef(lhs, op, rhs) {
214
+ return new AggregateFunctionBuilder({
215
+ ...this.#props,
216
+ aggregateFunctionNode: AggregateFunctionNode.cloneWithOrFilter(this.#props.aggregateFunctionNode, parseReferentialFilter(lhs, op, rhs)),
217
+ });
218
+ }
219
+ /**
220
+ * Adds an `over` clause (window functions) after the function.
221
+ *
222
+ * ### Examples
223
+ *
224
+ * ```ts
225
+ * const result = await db
226
+ * .selectFrom('person')
227
+ * .select(
228
+ * eb => eb.fn.avg<number>('age').over().as('average_age')
229
+ * )
230
+ * .execute()
231
+ * ```
232
+ *
233
+ * The generated SQL (PostgreSQL):
234
+ *
235
+ * ```sql
236
+ * select avg("age") over() as "average_age"
237
+ * from "person"
238
+ * ```
239
+ *
240
+ * Also supports passing a callback that returns an over builder,
241
+ * allowing to add partition by and sort by clauses inside over.
242
+ *
243
+ * ```ts
244
+ * const result = await db
245
+ * .selectFrom('person')
246
+ * .select(
247
+ * eb => eb.fn.avg<number>('age').over(
248
+ * ob => ob.partitionBy('last_name').orderBy('first_name', 'asc')
249
+ * ).as('average_age')
250
+ * )
251
+ * .execute()
252
+ * ```
253
+ *
254
+ * The generated SQL (PostgreSQL):
255
+ *
256
+ * ```sql
257
+ * select avg("age") over(partition by "last_name" order by "first_name" asc) as "average_age"
258
+ * from "person"
259
+ * ```
260
+ */
261
+ over(over) {
262
+ const builder = createOverBuilder();
263
+ return new AggregateFunctionBuilder({
264
+ ...this.#props,
265
+ aggregateFunctionNode: AggregateFunctionNode.cloneWithOver(this.#props.aggregateFunctionNode, (over ? over(builder) : builder).toOperationNode()),
266
+ });
267
+ }
268
+ toOperationNode() {
269
+ return this.#props.aggregateFunctionNode;
270
+ }
271
+ }
272
+ preventAwait(AggregateFunctionBuilder, "don't await AggregateFunctionBuilder instances. They are never executed directly and are always just a part of a query.");
273
+ /**
274
+ * {@link AggregateFunctionBuilder} with an alias. The result of calling {@link AggregateFunctionBuilder.as}.
275
+ */
276
+ export class AliasedAggregateFunctionBuilder {
277
+ #aggregateFunctionBuilder;
278
+ #alias;
279
+ constructor(aggregateFunctionBuilder, alias) {
280
+ this.#aggregateFunctionBuilder = aggregateFunctionBuilder;
281
+ this.#alias = alias;
282
+ }
283
+ /** @private */
284
+ get expression() {
285
+ return this.#aggregateFunctionBuilder;
286
+ }
287
+ /** @private */
288
+ get alias() {
289
+ return this.#alias;
290
+ }
291
+ toOperationNode() {
292
+ return AliasNode.create(this.#aggregateFunctionBuilder.toOperationNode(), IdentifierNode.create(this.#alias));
293
+ }
294
+ }
@@ -3,10 +3,9 @@ import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
3
  import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
4
4
  import { TableExpression } from '../parser/table-parser.js';
5
5
  import { SelectExpression } from '../parser/select-parser.js';
6
- import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper } from '../parser/filter-parser.js';
7
6
  import { ReturningRow } from '../parser/returning-parser.js';
8
7
  import { ReferenceExpression } from '../parser/reference-parser.js';
9
- import { AnyRawBuilder, MergePartial, Nullable, SingleResultType } from '../util/type-utils.js';
8
+ import { MergePartial, Nullable, SingleResultType } from '../util/type-utils.js';
10
9
  import { Compilable } from '../util/compilable.js';
11
10
  import { QueryExecutor } from '../query-executor/query-executor.js';
12
11
  import { QueryId } from '../util/query-id.js';
@@ -18,10 +17,11 @@ import { DeleteResult } from './delete-result.js';
18
17
  import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
19
18
  import { Selectable } from '../util/column-type.js';
20
19
  import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js';
21
- import { AliasedQueryBuilder } from './select-query-builder.js';
22
- import { AliasedRawBuilder } from '../raw-builder/raw-builder.js';
23
20
  import { Explainable, ExplainFormat } from '../util/explainable.js';
24
- export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable, Explainable {
21
+ import { AliasedExpression, Expression } from '../expression/expression.js';
22
+ import { ComparisonOperatorExpression, OperandValueExpressionOrList, WhereGrouper } from '../parser/binary-operation-parser.js';
23
+ import { ExistsExpression } from '../parser/unary-operation-parser.js';
24
+ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable {
25
25
  #private;
26
26
  constructor(props: DeleteQueryBuilderProps);
27
27
  /**
@@ -208,16 +208,16 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
208
208
  * .execute()
209
209
  * ```
210
210
  */
211
- where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): DeleteQueryBuilder<DB, TB, O>;
211
+ where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): DeleteQueryBuilder<DB, TB, O>;
212
212
  where(grouper: WhereGrouper<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
213
- where(raw: AnyRawBuilder): DeleteQueryBuilder<DB, TB, O>;
213
+ where(expression: Expression<any>): DeleteQueryBuilder<DB, TB, O>;
214
214
  /**
215
215
  * Adds a `where` clause where both sides of the operator are references
216
216
  * to columns.
217
217
  *
218
218
  * The normal `where` method treats the right hand side argument as a
219
219
  * value by default. `whereRef` treats it as a column reference. This method is
220
- * expecially useful with joins and correclated subqueries.
220
+ * expecially useful with joins and correlated subqueries.
221
221
  *
222
222
  * ### Examples
223
223
  *
@@ -262,7 +262,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
262
262
  * ) as "pet_name"
263
263
  * from "person"
264
264
  */
265
- whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
265
+ whereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
266
266
  /**
267
267
  * Adds an `or where` clause to the query. Otherwise works just like {@link where}.
268
268
  *
@@ -326,15 +326,15 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
326
326
  * select * from "person" (where "id" = 1 or "id" = 2)
327
327
  * ```
328
328
  */
329
- orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): DeleteQueryBuilder<DB, TB, O>;
329
+ orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): DeleteQueryBuilder<DB, TB, O>;
330
330
  orWhere(grouper: WhereGrouper<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
331
- orWhere(raw: AnyRawBuilder): DeleteQueryBuilder<DB, TB, O>;
331
+ orWhere(expression: Expression<any>): DeleteQueryBuilder<DB, TB, O>;
332
332
  /**
333
333
  * Adds an `or where` clause to the query. Otherwise works just like {@link whereRef}.
334
334
  *
335
335
  * Also see {@link orWhere} and {@link where}.
336
336
  */
337
- orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
337
+ orWhereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
338
338
  /**
339
339
  * Adds a `where exists` clause to the query.
340
340
  *
@@ -401,11 +401,11 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
401
401
  */
402
402
  whereNotExists(arg: ExistsExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
403
403
  /**
404
- * Just like {@link whereExists} but creates a `or exists` clause.
404
+ * Just like {@link whereExists} but creates an `or exists` clause.
405
405
  */
406
406
  orWhereExists(arg: ExistsExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
407
407
  /**
408
- * Just like {@link whereExists} but creates a `or not exists` clause.
408
+ * Just like {@link whereExists} but creates an `or not exists` clause.
409
409
  */
410
410
  orWhereNotExists(arg: ExistsExpression<DB, TB>): DeleteQueryBuilder<DB, TB, O>;
411
411
  /**
@@ -724,7 +724,7 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
724
724
  */
725
725
  withPlugin(plugin: KyselyPlugin): DeleteQueryBuilder<DB, TB, O>;
726
726
  toOperationNode(): DeleteQueryNode;
727
- compile(): CompiledQuery;
727
+ compile(): CompiledQuery<O>;
728
728
  /**
729
729
  * Executes the query and returns an array of rows.
730
730
  *
@@ -761,29 +761,29 @@ export declare class DeleteQueryBuilder<DB, TB extends keyof DB, O> implements W
761
761
  * explain format=json delete from `person` where `id` = ?
762
762
  * ```
763
763
  */
764
- explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: AnyRawBuilder): Promise<ER[]>;
764
+ explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: Expression<any>): Promise<ER[]>;
765
765
  }
766
766
  export interface DeleteQueryBuilderProps {
767
767
  readonly queryId: QueryId;
768
768
  readonly queryNode: DeleteQueryNode;
769
769
  readonly executor: QueryExecutor;
770
770
  }
771
- export declare type DeleteQueryBuilderWithInnerJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? InnerJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? DeleteQueryBuilder<DB, TB | TE, O> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? InnerJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? InnerJoinedBuilder<DB, TB, O, RA, RO> : never;
771
+ export declare type DeleteQueryBuilderWithInnerJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? InnerJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? DeleteQueryBuilder<DB, TB | TE, O> : TE extends AliasedExpression<infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : never;
772
772
  declare type InnerJoinedBuilder<DB, TB extends keyof DB, O, A extends string, R> = A extends keyof DB ? DeleteQueryBuilder<InnerJoinedDB<DB, A, R>, TB | A, O> : DeleteQueryBuilder<DB & Record<A, R>, TB | A, O>;
773
773
  declare type InnerJoinedDB<DB, A extends string, R> = {
774
774
  [C in keyof DB | A]: C extends A ? R : C extends keyof DB ? DB[C] : never;
775
775
  };
776
- export declare type DeleteQueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? LeftJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? LeftJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? LeftJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? LeftJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? LeftJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? LeftJoinedBuilder<DB, TB, O, RA, RO> : never;
776
+ export declare type DeleteQueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? LeftJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? LeftJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedExpression<infer QO, infer QA> ? LeftJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? LeftJoinedBuilder<DB, TB, O, QA, QO> : never;
777
777
  declare type LeftJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = A extends keyof DB ? DeleteQueryBuilder<LeftJoinedDB<DB, A, R>, TB | A, O> : DeleteQueryBuilder<DB & Record<A, Nullable<R>>, TB | A, O>;
778
778
  declare type LeftJoinedDB<DB, A extends keyof any, R> = {
779
779
  [C in keyof DB | A]: C extends A ? Nullable<R> : C extends keyof DB ? DB[C] : never;
780
780
  };
781
- export declare type DeleteQueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? RightJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? RightJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? RightJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? RightJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? RightJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? RightJoinedBuilder<DB, TB, O, RA, RO> : never;
781
+ export declare type DeleteQueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? RightJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? RightJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedExpression<infer QO, infer QA> ? RightJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? RightJoinedBuilder<DB, TB, O, QA, QO> : never;
782
782
  declare type RightJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = DeleteQueryBuilder<RightJoinedDB<DB, TB, A, R>, TB | A, O>;
783
783
  declare type RightJoinedDB<DB, TB extends keyof DB, A extends keyof any, R> = {
784
784
  [C in keyof DB | A]: C extends A ? R : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
785
785
  };
786
- export declare type DeleteQueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? OuterJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? OuterJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedQueryBuilder<any, any, infer QO, infer QA> ? OuterJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedQueryBuilder<any, any, infer QO, infer QA> ? OuterJoinedBuilder<DB, TB, O, QA, QO> : TE extends AliasedRawBuilder<infer RO, infer RA> ? OuterJoinedBuilder<DB, TB, O, RA, RO> : TE extends (qb: any) => AliasedRawBuilder<infer RO, infer RA> ? OuterJoinedBuilder<DB, TB, O, RA, RO> : never;
786
+ export declare type DeleteQueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? OuterJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? OuterJoinedBuilder<DB, TB, O, TE, DB[TE]> : TE extends AliasedExpression<infer QO, infer QA> ? OuterJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? OuterJoinedBuilder<DB, TB, O, QA, QO> : never;
787
787
  declare type OuterJoinedBuilder<DB, TB extends keyof DB, O, A extends keyof any, R> = DeleteQueryBuilder<OuterJoinedBuilderDB<DB, TB, A, R>, TB | A, O>;
788
788
  declare type OuterJoinedBuilderDB<DB, TB extends keyof DB, A extends keyof any, R> = {
789
789
  [C in keyof DB | A]: C extends A ? Nullable<R> : C extends TB ? Nullable<DB[C]> : C extends keyof DB ? DB[C] : never;
@@ -1,7 +1,6 @@
1
1
  /// <reference types="./delete-query-builder.d.ts" />
2
2
  import { parseJoin, } from '../parser/join-parser.js';
3
3
  import { parseSelectExpressionOrList, parseSelectAll, } from '../parser/select-parser.js';
4
- import { parseExistFilter, parseReferenceFilter, parseWhereFilter, parseNotExistFilter, } from '../parser/filter-parser.js';
5
4
  import { QueryNode } from '../operation-node/query-node.js';
6
5
  import { preventAwait } from '../util/prevent-await.js';
7
6
  import { freeze } from '../util/object-utils.js';
@@ -11,6 +10,8 @@ import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
11
10
  import { LimitNode } from '../operation-node/limit-node.js';
12
11
  import { parseOrderBy, } from '../parser/order-by-parser.js';
13
12
  import { ExplainNode } from '../operation-node/explain-node.js';
13
+ import { parseReferentialFilter, parseWhere, } from '../parser/binary-operation-parser.js';
14
+ import { parseExists, parseNotExists, } from '../parser/unary-operation-parser.js';
14
15
  export class DeleteQueryBuilder {
15
16
  #props;
16
17
  constructor(props) {
@@ -19,49 +20,49 @@ export class DeleteQueryBuilder {
19
20
  where(...args) {
20
21
  return new DeleteQueryBuilder({
21
22
  ...this.#props,
22
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(args)),
23
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhere(args)),
23
24
  });
24
25
  }
25
26
  whereRef(lhs, op, rhs) {
26
27
  return new DeleteQueryBuilder({
27
28
  ...this.#props,
28
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
29
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferentialFilter(lhs, op, rhs)),
29
30
  });
30
31
  }
31
32
  orWhere(...args) {
32
33
  return new DeleteQueryBuilder({
33
34
  ...this.#props,
34
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(args)),
35
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhere(args)),
35
36
  });
36
37
  }
37
38
  orWhereRef(lhs, op, rhs) {
38
39
  return new DeleteQueryBuilder({
39
40
  ...this.#props,
40
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
41
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferentialFilter(lhs, op, rhs)),
41
42
  });
42
43
  }
43
44
  whereExists(arg) {
44
45
  return new DeleteQueryBuilder({
45
46
  ...this.#props,
46
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(arg)),
47
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExists(arg)),
47
48
  });
48
49
  }
49
50
  whereNotExists(arg) {
50
51
  return new DeleteQueryBuilder({
51
52
  ...this.#props,
52
- queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(arg)),
53
+ queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExists(arg)),
53
54
  });
54
55
  }
55
56
  orWhereExists(arg) {
56
57
  return new DeleteQueryBuilder({
57
58
  ...this.#props,
58
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(arg)),
59
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExists(arg)),
59
60
  });
60
61
  }
61
62
  orWhereNotExists(arg) {
62
63
  return new DeleteQueryBuilder({
63
64
  ...this.#props,
64
- queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(arg)),
65
+ queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExists(arg)),
65
66
  });
66
67
  }
67
68
  innerJoin(...args) {
@@ -261,15 +262,17 @@ export class DeleteQueryBuilder {
261
262
  * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
262
263
  */
263
264
  async execute() {
264
- const compildQuery = this.compile();
265
- const query = compildQuery.query;
266
- const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
265
+ const compiledQuery = this.compile();
266
+ const query = compiledQuery.query;
267
+ const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
267
268
  if (this.#props.executor.adapter.supportsReturning && query.returning) {
268
269
  return result.rows;
269
270
  }
270
- else {
271
- return [new DeleteResult(result.numUpdatedOrDeletedRows)];
272
- }
271
+ return [
272
+ new DeleteResult(
273
+ // TODO: remove numUpdatedOrDeletedRows.
274
+ (result.numAffectedRows ?? result.numUpdatedOrDeletedRows)),
275
+ ];
273
276
  }
274
277
  /**
275
278
  * Executes the query and returns the first result or undefined if
@@ -313,7 +316,7 @@ export class DeleteQueryBuilder {
313
316
  async explain(format, options) {
314
317
  const builder = new DeleteQueryBuilder({
315
318
  ...this.#props,
316
- queryNode: DeleteQueryNode.cloneWithExplain(this.#props.queryNode, ExplainNode.create(format, options)),
319
+ queryNode: DeleteQueryNode.cloneWithExplain(this.#props.queryNode, ExplainNode.create(format, options?.toOperationNode())),
317
320
  });
318
321
  return await builder.execute();
319
322
  }
@@ -1,6 +1,6 @@
1
1
  import { SelectQueryBuilder } from './select-query-builder.js';
2
2
  import { TableExpression, From, FromTables } from '../parser/table-parser.js';
3
- import { FunctionBuilder } from './function-builder.js';
3
+ import { FunctionModule } from './function-module.js';
4
4
  import { ExtractTypeFromReferenceExpression, StringReference } from '../parser/reference-parser.js';
5
5
  import { RawBuilder } from '../raw-builder/raw-builder.js';
6
6
  import { QueryExecutor } from '../query-executor/query-executor.js';
@@ -8,7 +8,7 @@ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
8
8
  #private;
9
9
  constructor(props: ExpressionBuilderProps);
10
10
  /**
11
- * Returns a {@link FunctionBuilder} that can be used to write type safe function
11
+ * Returns a {@link FunctionModule} that can be used to write type safe function
12
12
  * calls.
13
13
  *
14
14
  * The difference between this and {@link Kysely.fn} is that this one is more
@@ -38,7 +38,7 @@ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
38
38
  * having count("pet"."id") > $1
39
39
  * ```
40
40
  */
41
- get fn(): FunctionBuilder<DB, TB>;
41
+ get fn(): FunctionModule<DB, TB>;
42
42
  /**
43
43
  * Creates a subquery.
44
44
  *
@@ -4,7 +4,7 @@ import { SelectQueryNode } from '../operation-node/select-query-node.js';
4
4
  import { parseTableExpressionOrList, } from '../parser/table-parser.js';
5
5
  import { WithSchemaPlugin } from '../plugin/with-schema/with-schema-plugin.js';
6
6
  import { createQueryId } from '../util/query-id.js';
7
- import { FunctionBuilder } from './function-builder.js';
7
+ import { FunctionModule } from './function-module.js';
8
8
  import { parseStringReference, } from '../parser/reference-parser.js';
9
9
  import { RawBuilder } from '../raw-builder/raw-builder.js';
10
10
  import { freeze } from '../util/object-utils.js';
@@ -15,7 +15,7 @@ export class ExpressionBuilder {
15
15
  this.#props = freeze(props);
16
16
  }
17
17
  /**
18
- * Returns a {@link FunctionBuilder} that can be used to write type safe function
18
+ * Returns a {@link FunctionModule} that can be used to write type safe function
19
19
  * calls.
20
20
  *
21
21
  * The difference between this and {@link Kysely.fn} is that this one is more
@@ -46,7 +46,7 @@ export class ExpressionBuilder {
46
46
  * ```
47
47
  */
48
48
  get fn() {
49
- return new FunctionBuilder();
49
+ return new FunctionModule();
50
50
  }
51
51
  selectFrom(table) {
52
52
  return new SelectQueryBuilder({