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,214 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FunctionModule = void 0;
4
+ const aggregate_function_node_js_1 = require("../operation-node/aggregate-function-node.js");
5
+ const coalesce_parser_js_1 = require("../parser/coalesce-parser.js");
6
+ const reference_parser_js_1 = require("../parser/reference-parser.js");
7
+ const raw_builder_js_1 = require("../raw-builder/raw-builder.js");
8
+ const query_id_js_1 = require("../util/query-id.js");
9
+ const aggregate_function_builder_js_1 = require("./aggregate-function-builder.js");
10
+ /**
11
+ * Helpers for type safe SQL function calls.
12
+ *
13
+ * You can always use the {@link sql} tag to call functions and build arbitrary
14
+ * expressions. This module simply has shortcuts for most common function calls.
15
+ *
16
+ * ### Examples
17
+ *
18
+ * ```ts
19
+ * const { count } = db.fn
20
+ *
21
+ * await db.selectFrom('person')
22
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
23
+ * .select([
24
+ * 'person.id',
25
+ * count('pet.id').as('pet_count')
26
+ * ])
27
+ * .groupBy('person.id')
28
+ * .having(count('pet.id'), '>', 10)
29
+ * .execute()
30
+ * ```
31
+ *
32
+ * The generated SQL (PostgreSQL):
33
+ *
34
+ * ```sql
35
+ * select "person"."id", count("pet"."id") as "pet_count"
36
+ * from "person"
37
+ * inner join "pet" on "pet"."owner_id" = "person"."id"
38
+ * group by "person"."id"
39
+ * having count("pet"."id") > $1
40
+ * ```
41
+ */
42
+ class FunctionModule {
43
+ constructor() {
44
+ this.avg = this.avg.bind(this);
45
+ this.coalesce = this.coalesce.bind(this);
46
+ this.count = this.count.bind(this);
47
+ this.max = this.max.bind(this);
48
+ this.min = this.min.bind(this);
49
+ this.sum = this.sum.bind(this);
50
+ }
51
+ /**
52
+ * Calls the `avg` function for the column given as the argument.
53
+ *
54
+ * If this is used in a `select` statement the type of the selected expression
55
+ * will be `number | string` by default. This is because Kysely can't know the
56
+ * type the db driver outputs. Sometimes the output can be larger than the largest
57
+ * javascript number and a string is returned instead. Most drivers allow you
58
+ * to configure the output type of large numbers and Kysely can't know if you've
59
+ * done so.
60
+ *
61
+ * You can specify the output type of the expression by providing the type as
62
+ * the first type argument:
63
+ *
64
+ * ```ts
65
+ * const { avg } = db.fn
66
+ *
67
+ * db.selectFrom('toy')
68
+ * .select(avg<number>('price').as('avg_price'))
69
+ * .execute()
70
+ * ```
71
+ *
72
+ * Sometimes a null is returned, e.g. when row count is 0, and no `group by`
73
+ * was used. It is highly recommended to include null in the output type union
74
+ * and handle null values in post-execute code, or wrap the function with a `coalesce`
75
+ * function.
76
+ *
77
+ * ```ts
78
+ * const { avg } = db.fn
79
+ *
80
+ * db.selectFrom('toy')
81
+ * .select(avg<number | null>('price').as('avg_price'))
82
+ * .execute()
83
+ * ```
84
+ */
85
+ avg(column) {
86
+ return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
87
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('avg', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
88
+ });
89
+ }
90
+ /**
91
+ * Calls the `coalesce` function for given arguments.
92
+ *
93
+ * This function returns the first non-null value from left to right, commonly
94
+ * used to provide a default scalar for nullable columns or functions.
95
+ *
96
+ * ```ts
97
+ * const { coalesce, max } = db.fn
98
+ *
99
+ * db.selectFrom('person')
100
+ * .select(coalesce(max('age'), sql<number>`0`).as('max_age'))
101
+ * .where('first_name', '=', 'Jennifer')
102
+ * .execute()
103
+ * ```
104
+ *
105
+ * The generated SQL (postgres):
106
+ *
107
+ * ```sql
108
+ * select coalesce(max("age"), 0) as "max_age" from "person" where "first_name" = $1
109
+ * ```
110
+ *
111
+ * If this is used in a `select` statement the type of the selected expression
112
+ * is inferred in the same manner that the function computes. A union of arguments'
113
+ * types - if a non-nullable argument exists, it stops there (ignoring any further
114
+ * arguments' types) and exludes null from the final union type.
115
+ *
116
+ * Examples:
117
+ *
118
+ * `(string | null, number | null)` is inferred as `string | number | null`.
119
+ *
120
+ * `(string | null, number, Date | null)` is inferred as `string | number`.
121
+ *
122
+ * `(number, string | null)` is inferred as `number`.
123
+ */
124
+ coalesce(value, ...otherValues) {
125
+ return new raw_builder_js_1.RawBuilder({
126
+ queryId: (0, query_id_js_1.createQueryId)(),
127
+ rawNode: (0, coalesce_parser_js_1.parseCoalesce)([value, ...otherValues]),
128
+ });
129
+ }
130
+ /**
131
+ * Calls the `count` function for the column given as the argument.
132
+ *
133
+ * If this is used in a `select` statement the type of the selected expression
134
+ * will be `number | string | bigint` by default. This is because Kysely
135
+ * can't know the type the db driver outputs. Sometimes the output can be larger
136
+ * than the largest javascript number and a string is returned instead. Most
137
+ * drivers allow you to configure the output type of large numbers and Kysely
138
+ * can't know if you've done so.
139
+ *
140
+ * You can specify the output type of the expression by providing
141
+ * the type as the first type argument:
142
+ *
143
+ * ```ts
144
+ * const { count } = db.fn
145
+ *
146
+ * db.selectFrom('toy')
147
+ * .select(count<number>('id').as('num_toys'))
148
+ * .execute()
149
+ * ```
150
+ *
151
+ * You can limit column range:
152
+ *
153
+ * ```ts
154
+ * db.selectFrom('toy')
155
+ * .select(qb => qb.fn.count<number>('id').as('num_toys'))
156
+ * .execute()
157
+ * ```
158
+ */
159
+ count(column) {
160
+ return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
161
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('count', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
162
+ });
163
+ }
164
+ max(column) {
165
+ return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
166
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('max', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
167
+ });
168
+ }
169
+ min(column) {
170
+ return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
171
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('min', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
172
+ });
173
+ }
174
+ /**
175
+ * Calls the `sum` function for the column given as the argument.
176
+ *
177
+ * If this is used in a `select` statement the type of the selected expression
178
+ * will be `number | string | bigint` by default. This is because Kysely
179
+ * can't know the type the db driver outputs. Sometimes the output can be larger
180
+ * than the largest javascript number and a string is returned instead. Most
181
+ * drivers allow you to configure the output type of large numbers and Kysely
182
+ * can't know if you've done so.
183
+ *
184
+ * You can specify the output type of the expression by providing
185
+ * the type as the first type argument:
186
+ *
187
+ * ```ts
188
+ * const { sum } = db.fn
189
+ *
190
+ * db.selectFrom('toy')
191
+ * .select(sum<number>('price').as('total_price'))
192
+ * .execute()
193
+ * ```
194
+ *
195
+ * Sometimes a null is returned, e.g. when row count is 0, and no `group by`
196
+ * was used. It is highly recommended to include null in the output type union
197
+ * and handle null values in post-execute code, or wrap the function with a `coalesce`
198
+ * function.
199
+ *
200
+ * ```ts
201
+ * const { sum } = db.fn
202
+ *
203
+ * db.selectFrom('toy')
204
+ * .select(sum<number | null>('price').as('total_price'))
205
+ * .execute()
206
+ * ```
207
+ */
208
+ sum(column) {
209
+ return new aggregate_function_builder_js_1.AggregateFunctionBuilder({
210
+ aggregateFunctionNode: aggregate_function_node_js_1.AggregateFunctionNode.create('sum', (0, reference_parser_js_1.parseSimpleReferenceExpression)(column)),
211
+ });
212
+ }
213
+ }
214
+ exports.FunctionModule = FunctionModule;
@@ -1,31 +1,32 @@
1
- import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, HavingGrouper } from '../parser/filter-parser.js';
1
+ import { Expression } from '../expression/expression.js';
2
+ import { ComparisonOperatorExpression, HavingGrouper, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
2
3
  import { ReferenceExpression } from '../parser/reference-parser.js';
3
- import { AnyRawBuilder } from '../util/type-utils.js';
4
+ import { ExistsExpression } from '../parser/unary-operation-parser.js';
4
5
  export interface HavingInterface<DB, TB extends keyof DB> {
5
6
  /**
6
7
  * Just like {@link WhereInterface.where | where} but adds a `having` statement
7
8
  * instead of a `where` statement.
8
9
  */
9
- having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): HavingInterface<DB, TB>;
10
+ having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): HavingInterface<DB, TB>;
10
11
  having(grouper: HavingGrouper<DB, TB>): HavingInterface<DB, TB>;
11
- having(raw: AnyRawBuilder): HavingInterface<DB, TB>;
12
+ having(expression: Expression<any>): HavingInterface<DB, TB>;
12
13
  /**
13
14
  * Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
14
15
  * instead of a `where` statement.
15
16
  */
16
- havingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): HavingInterface<DB, TB>;
17
+ havingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): HavingInterface<DB, TB>;
17
18
  /**
18
19
  * Just like {@link WhereInterface.orWhere | orWhere} but adds a `having` statement
19
20
  * instead of a `where` statement.
20
21
  */
21
- orHaving<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): HavingInterface<DB, TB>;
22
+ orHaving<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): HavingInterface<DB, TB>;
22
23
  orHaving(grouper: HavingGrouper<DB, TB>): HavingInterface<DB, TB>;
23
- orHaving(raw: AnyRawBuilder): HavingInterface<DB, TB>;
24
+ orHaving(expression: Expression<any>): HavingInterface<DB, TB>;
24
25
  /**
25
26
  * Just like {@link WhereInterface.orWhereRef | orWhereRef} but adds a `having` statement
26
27
  * instead of a `where` statement.
27
28
  */
28
- orHavingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): HavingInterface<DB, TB>;
29
+ orHavingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): HavingInterface<DB, TB>;
29
30
  /**
30
31
  * Just like {@link WhereInterface.whereExists | whereExists} but adds a `having` statement
31
32
  * instead of a `where` statement.
@@ -3,7 +3,7 @@ import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
3
  import { SelectExpression } from '../parser/select-parser.js';
4
4
  import { InsertObject } from '../parser/insert-values-parser.js';
5
5
  import { InsertQueryNode } from '../operation-node/insert-query-node.js';
6
- import { AnyRawBuilder, MergePartial, SingleResultType } from '../util/type-utils.js';
6
+ import { MergePartial, SingleResultType } from '../util/type-utils.js';
7
7
  import { MutationObject } from '../parser/update-set-parser.js';
8
8
  import { Compilable } from '../util/compilable.js';
9
9
  import { QueryExecutor } from '../query-executor/query-executor.js';
@@ -12,12 +12,13 @@ import { InsertResult } from './insert-result.js';
12
12
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
13
13
  import { ReturningRow } from '../parser/returning-parser.js';
14
14
  import { NoResultErrorConstructor } from './no-result-error.js';
15
- import { ComplexExpression } from '../parser/complex-expression-parser.js';
15
+ import { ExpressionOrFactory } from '../parser/expression-parser.js';
16
16
  import { ReturningInterface } from './returning-interface.js';
17
17
  import { OnConflictBuilder, OnConflictDoNothingBuilder, OnConflictUpdateBuilder } from './on-conflict-builder.js';
18
18
  import { Selectable } from '../util/column-type.js';
19
19
  import { Explainable, ExplainFormat } from '../util/explainable.js';
20
- export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable, Explainable {
20
+ import { Expression } from '../expression/expression.js';
21
+ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable<O>, Explainable {
21
22
  #private;
22
23
  constructor(props: InsertQueryBuilderProps);
23
24
  /**
@@ -189,7 +190,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
189
190
  * select "pet"."name" from "pet"
190
191
  * ```
191
192
  */
192
- expression(expression: ComplexExpression<DB, TB>): InsertQueryBuilder<DB, TB, O>;
193
+ expression(expression: ExpressionOrFactory<DB, TB, any>): InsertQueryBuilder<DB, TB, O>;
193
194
  /**
194
195
  * Changes an `insert into` query to an `insert ignore into` query.
195
196
  *
@@ -521,7 +522,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
521
522
  */
522
523
  withPlugin(plugin: KyselyPlugin): InsertQueryBuilder<DB, TB, O>;
523
524
  toOperationNode(): InsertQueryNode;
524
- compile(): CompiledQuery;
525
+ compile(): CompiledQuery<O>;
525
526
  /**
526
527
  * Executes the query and returns an array of rows.
527
528
  *
@@ -558,7 +559,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
558
559
  * explain format=json insert into `person` (`id`, `first_name`, `last_name`) values (?, ?, ?) (?, ?, ?)
559
560
  * ```
560
561
  */
561
- explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: AnyRawBuilder): Promise<ER[]>;
562
+ explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: Expression<any>): Promise<ER[]>;
562
563
  }
563
564
  export interface InsertQueryBuilderProps {
564
565
  readonly queryId: QueryId;
@@ -11,7 +11,7 @@ const object_utils_js_1 = require("../util/object-utils.js");
11
11
  const on_duplicate_key_node_js_1 = require("../operation-node/on-duplicate-key-node.js");
12
12
  const insert_result_js_1 = require("./insert-result.js");
13
13
  const no_result_error_js_1 = require("./no-result-error.js");
14
- const complex_expression_parser_js_1 = require("../parser/complex-expression-parser.js");
14
+ const expression_parser_js_1 = require("../parser/expression-parser.js");
15
15
  const column_node_js_1 = require("../operation-node/column-node.js");
16
16
  const on_conflict_builder_js_1 = require("./on-conflict-builder.js");
17
17
  const on_conflict_node_js_1 = require("../operation-node/on-conflict-node.js");
@@ -83,7 +83,7 @@ class InsertQueryBuilder {
83
83
  return new InsertQueryBuilder({
84
84
  ...this.#props,
85
85
  queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
86
- values: (0, complex_expression_parser_js_1.parseComplexExpression)(expression),
86
+ values: (0, expression_parser_js_1.parseExpression)(expression),
87
87
  }),
88
88
  });
89
89
  }
@@ -414,15 +414,17 @@ class InsertQueryBuilder {
414
414
  * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
415
415
  */
416
416
  async execute() {
417
- const compildQuery = this.compile();
418
- const query = compildQuery.query;
419
- const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
417
+ const compiledQuery = this.compile();
418
+ const query = compiledQuery.query;
419
+ const result = await this.#props.executor.executeQuery(compiledQuery, this.#props.queryId);
420
420
  if (this.#props.executor.adapter.supportsReturning && query.returning) {
421
421
  return result.rows;
422
422
  }
423
- else {
424
- return [new insert_result_js_1.InsertResult(result.insertId)];
425
- }
423
+ return [
424
+ new insert_result_js_1.InsertResult(result.insertId,
425
+ // TODO: remove numUpdatedOrDeletedRows.
426
+ result.numAffectedRows ?? result.numUpdatedOrDeletedRows),
427
+ ];
426
428
  }
427
429
  /**
428
430
  * Executes the query and returns the first result or undefined if
@@ -467,7 +469,7 @@ class InsertQueryBuilder {
467
469
  const builder = new InsertQueryBuilder({
468
470
  ...this.#props,
469
471
  queryNode: insert_query_node_js_1.InsertQueryNode.cloneWith(this.#props.queryNode, {
470
- explain: explain_node_js_1.ExplainNode.create(format, options),
472
+ explain: explain_node_js_1.ExplainNode.create(format, options?.toOperationNode()),
471
473
  }),
472
474
  });
473
475
  return await builder.execute();
@@ -7,6 +7,9 @@
7
7
  * need to use {@link ReturningInterface.returning} or {@link ReturningInterface.returningAll}
8
8
  * to get out the inserted id.
9
9
  *
10
+ * {@link numInsertedOrUpdatedRows} holds the number of (actually) inserted rows.
11
+ * On MySQL, updated rows are counted twice when using `on duplicate key update`.
12
+ *
10
13
  * ### Examples
11
14
  *
12
15
  * ```ts
@@ -20,9 +23,13 @@
20
23
  */
21
24
  export declare class InsertResult {
22
25
  #private;
23
- constructor(insertId: bigint | undefined);
26
+ constructor(insertId: bigint | undefined, numInsertedOrUpdatedRows: bigint | undefined);
24
27
  /**
25
28
  * The auto incrementing primary key
26
29
  */
27
30
  get insertId(): bigint | undefined;
31
+ /**
32
+ * Affected rows count.
33
+ */
34
+ get numInsertedOrUpdatedRows(): bigint | undefined;
28
35
  }
@@ -10,6 +10,9 @@ exports.InsertResult = void 0;
10
10
  * need to use {@link ReturningInterface.returning} or {@link ReturningInterface.returningAll}
11
11
  * to get out the inserted id.
12
12
  *
13
+ * {@link numInsertedOrUpdatedRows} holds the number of (actually) inserted rows.
14
+ * On MySQL, updated rows are counted twice when using `on duplicate key update`.
15
+ *
13
16
  * ### Examples
14
17
  *
15
18
  * ```ts
@@ -23,8 +26,10 @@ exports.InsertResult = void 0;
23
26
  */
24
27
  class InsertResult {
25
28
  #insertId;
26
- constructor(insertId) {
29
+ #numInsertedOrUpdatedRows;
30
+ constructor(insertId, numInsertedOrUpdatedRows) {
27
31
  this.#insertId = insertId;
32
+ this.#numInsertedOrUpdatedRows = numInsertedOrUpdatedRows;
28
33
  }
29
34
  /**
30
35
  * The auto incrementing primary key
@@ -32,5 +37,11 @@ class InsertResult {
32
37
  get insertId() {
33
38
  return this.#insertId;
34
39
  }
40
+ /**
41
+ * Affected rows count.
42
+ */
43
+ get numInsertedOrUpdatedRows() {
44
+ return this.#numInsertedOrUpdatedRows;
45
+ }
35
46
  }
36
47
  exports.InsertResult = InsertResult;
@@ -1,8 +1,9 @@
1
+ import { Expression } from '../expression/expression.js';
1
2
  import { JoinNode } from '../operation-node/join-node.js';
2
3
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
- import { ExistsExpression, FilterOperator, FilterValueExpressionOrList } from '../parser/filter-parser.js';
4
+ import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
4
5
  import { ReferenceExpression } from '../parser/reference-parser.js';
5
- import { AnyRawBuilder } from '../util/type-utils.js';
6
+ import { ExistsExpression } from '../parser/unary-operation-parser.js';
6
7
  export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNodeSource {
7
8
  #private;
8
9
  constructor(props: JoinBuilderProps);
@@ -12,32 +13,32 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
12
13
  *
13
14
  * See {@link WhereInterface.where} for documentation and examples.
14
15
  */
15
- on<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): JoinBuilder<DB, TB>;
16
+ on<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): JoinBuilder<DB, TB>;
16
17
  on(grouper: (qb: JoinBuilder<DB, TB>) => JoinBuilder<DB, TB>): JoinBuilder<DB, TB>;
17
- on(raw: AnyRawBuilder): JoinBuilder<DB, TB>;
18
+ on(expression: Expression<any>): JoinBuilder<DB, TB>;
18
19
  /**
19
20
  * Just like {@link WhereInterface.orWhere} but adds an item to the join's
20
21
  * `on` clause instead.
21
22
  *
22
23
  * See {@link WhereInterface.orWhere} for documentation and examples.
23
24
  */
24
- orOn<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): JoinBuilder<DB, TB>;
25
+ orOn<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): JoinBuilder<DB, TB>;
25
26
  orOn(grouper: (qb: JoinBuilder<DB, TB>) => JoinBuilder<DB, TB>): JoinBuilder<DB, TB>;
26
- orOn(raw: AnyRawBuilder): JoinBuilder<DB, TB>;
27
+ orOn(expression: Expression<any>): JoinBuilder<DB, TB>;
27
28
  /**
28
29
  * Just like {@link WhereInterface.whereRef} but adds an item to the join's
29
30
  * `on` clause instead.
30
31
  *
31
32
  * See {@link WhereInterface.whereRef} for documentation and examples.
32
33
  */
33
- onRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): JoinBuilder<DB, TB>;
34
+ onRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): JoinBuilder<DB, TB>;
34
35
  /**
35
36
  * Just like {@link WhereInterface.orWhereRef} but adds an item to the join's
36
37
  * `on` clause instead.
37
38
  *
38
39
  * See {@link WhereInterface.orWhereRef} for documentation and examples.
39
40
  */
40
- orOnRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): JoinBuilder<DB, TB>;
41
+ orOnRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): JoinBuilder<DB, TB>;
41
42
  /**
42
43
  * Just like {@link WhereInterface.whereExists} but adds an item to the join's
43
44
  * `on` clause instead.
@@ -3,7 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.JoinBuilder = void 0;
4
4
  const join_node_js_1 = require("../operation-node/join-node.js");
5
5
  const raw_node_js_1 = require("../operation-node/raw-node.js");
6
- const filter_parser_js_1 = require("../parser/filter-parser.js");
6
+ const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
7
+ const unary_operation_parser_js_1 = require("../parser/unary-operation-parser.js");
7
8
  const object_utils_js_1 = require("../util/object-utils.js");
8
9
  const prevent_await_js_1 = require("../util/prevent-await.js");
9
10
  class JoinBuilder {
@@ -14,13 +15,13 @@ class JoinBuilder {
14
15
  on(...args) {
15
16
  return new JoinBuilder({
16
17
  ...this.#props,
17
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, filter_parser_js_1.parseOnFilter)(args)),
18
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, binary_operation_parser_js_1.parseOn)(args)),
18
19
  });
19
20
  }
20
21
  orOn(...args) {
21
22
  return new JoinBuilder({
22
23
  ...this.#props,
23
- joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, filter_parser_js_1.parseOnFilter)(args)),
24
+ joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, binary_operation_parser_js_1.parseOn)(args)),
24
25
  });
25
26
  }
26
27
  /**
@@ -32,7 +33,7 @@ class JoinBuilder {
32
33
  onRef(lhs, op, rhs) {
33
34
  return new JoinBuilder({
34
35
  ...this.#props,
35
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, filter_parser_js_1.parseReferenceFilter)(lhs, op, rhs)),
36
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, binary_operation_parser_js_1.parseReferentialFilter)(lhs, op, rhs)),
36
37
  });
37
38
  }
38
39
  /**
@@ -44,7 +45,7 @@ class JoinBuilder {
44
45
  orOnRef(lhs, op, rhs) {
45
46
  return new JoinBuilder({
46
47
  ...this.#props,
47
- joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, filter_parser_js_1.parseReferenceFilter)(lhs, op, rhs)),
48
+ joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, binary_operation_parser_js_1.parseReferentialFilter)(lhs, op, rhs)),
48
49
  });
49
50
  }
50
51
  /**
@@ -56,7 +57,7 @@ class JoinBuilder {
56
57
  onExists(arg) {
57
58
  return new JoinBuilder({
58
59
  ...this.#props,
59
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, filter_parser_js_1.parseExistFilter)(arg)),
60
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, unary_operation_parser_js_1.parseExists)(arg)),
60
61
  });
61
62
  }
62
63
  /**
@@ -68,7 +69,7 @@ class JoinBuilder {
68
69
  onNotExists(arg) {
69
70
  return new JoinBuilder({
70
71
  ...this.#props,
71
- joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, filter_parser_js_1.parseNotExistFilter)(arg)),
72
+ joinNode: join_node_js_1.JoinNode.cloneWithOn(this.#props.joinNode, (0, unary_operation_parser_js_1.parseNotExists)(arg)),
72
73
  });
73
74
  }
74
75
  /**
@@ -80,7 +81,7 @@ class JoinBuilder {
80
81
  orOnExists(arg) {
81
82
  return new JoinBuilder({
82
83
  ...this.#props,
83
- joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, filter_parser_js_1.parseExistFilter)(arg)),
84
+ joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, unary_operation_parser_js_1.parseExists)(arg)),
84
85
  });
85
86
  }
86
87
  /**
@@ -92,7 +93,7 @@ class JoinBuilder {
92
93
  orOnNotExists(arg) {
93
94
  return new JoinBuilder({
94
95
  ...this.#props,
95
- joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, filter_parser_js_1.parseNotExistFilter)(arg)),
96
+ joinNode: join_node_js_1.JoinNode.cloneWithOrOn(this.#props.joinNode, (0, unary_operation_parser_js_1.parseNotExists)(arg)),
96
97
  });
97
98
  }
98
99
  /**