kysely 0.23.4 → 0.24.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 (314) hide show
  1. package/README.md +49 -25
  2. package/dist/cjs/dialect/database-introspector.d.ts +4 -2
  3. package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
  4. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +1 -1
  5. package/dist/cjs/dialect/mysql/mysql-driver.js +1 -1
  6. package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +1 -1
  7. package/dist/cjs/dialect/mysql/mysql-introspector.js +19 -13
  8. package/dist/cjs/dialect/postgres/postgres-adapter.js +1 -1
  9. package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +1 -1
  10. package/dist/cjs/dialect/postgres/postgres-introspector.js +3 -1
  11. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +1 -0
  12. package/dist/cjs/dialect/sqlite/sqlite-dialect.js +1 -0
  13. package/dist/cjs/dialect/sqlite/sqlite-introspector.d.ts +1 -1
  14. package/dist/cjs/dialect/sqlite/sqlite-introspector.js +6 -5
  15. package/dist/cjs/driver/runtime-driver.js +4 -2
  16. package/dist/cjs/expression/expression-builder.d.ts +386 -0
  17. package/dist/cjs/expression/expression-builder.js +92 -0
  18. package/dist/cjs/expression/expression-wrapper.d.ts +92 -0
  19. package/dist/cjs/expression/expression-wrapper.js +54 -0
  20. package/dist/cjs/expression/expression.d.ts +1 -1
  21. package/dist/cjs/helpers/postgres.d.ts +133 -0
  22. package/dist/cjs/helpers/postgres.js +141 -0
  23. package/dist/cjs/index.d.ts +4 -3
  24. package/dist/cjs/index.js +4 -2
  25. package/dist/cjs/kysely.d.ts +10 -0
  26. package/dist/cjs/kysely.js +12 -1
  27. package/dist/cjs/migration/file-migration-provider.d.ts +5 -2
  28. package/dist/cjs/migration/migrator.d.ts +5 -2
  29. package/dist/cjs/operation-node/aggregate-function-node.d.ts +3 -2
  30. package/dist/cjs/operation-node/aggregate-function-node.js +2 -2
  31. package/dist/cjs/operation-node/create-index-node.d.ts +2 -0
  32. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -2
  33. package/dist/cjs/operation-node/delete-query-node.js +2 -8
  34. package/dist/cjs/operation-node/function-node.d.ts +13 -0
  35. package/dist/cjs/operation-node/function-node.js +19 -0
  36. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  37. package/dist/cjs/operation-node/operation-node-transformer.js +11 -2
  38. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  39. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  40. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  41. package/dist/cjs/operation-node/operator-node.d.ts +13 -2
  42. package/dist/cjs/operation-node/operator-node.js +38 -3
  43. package/dist/cjs/operation-node/query-node.d.ts +25 -8
  44. package/dist/cjs/operation-node/query-node.js +9 -2
  45. package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
  46. package/dist/cjs/operation-node/select-query-node.js +0 -6
  47. package/dist/cjs/operation-node/update-query-node.d.ts +0 -1
  48. package/dist/cjs/operation-node/update-query-node.js +0 -6
  49. package/dist/cjs/parser/binary-operation-parser.d.ts +9 -10
  50. package/dist/cjs/parser/binary-operation-parser.js +89 -39
  51. package/dist/cjs/parser/coalesce-parser.d.ts +0 -2
  52. package/dist/cjs/parser/coalesce-parser.js +0 -9
  53. package/dist/cjs/parser/expression-parser.d.ts +7 -3
  54. package/dist/cjs/parser/expression-parser.js +4 -4
  55. package/dist/cjs/parser/group-by-parser.d.ts +3 -2
  56. package/dist/cjs/parser/group-by-parser.js +3 -0
  57. package/dist/cjs/parser/insert-values-parser.d.ts +4 -1
  58. package/dist/cjs/parser/insert-values-parser.js +19 -13
  59. package/dist/cjs/parser/join-parser.js +1 -1
  60. package/dist/cjs/parser/parse-utils.d.ts +0 -2
  61. package/dist/cjs/parser/parse-utils.js +1 -8
  62. package/dist/cjs/parser/returning-parser.d.ts +2 -1
  63. package/dist/cjs/parser/select-parser.d.ts +5 -13
  64. package/dist/cjs/parser/select-parser.js +8 -4
  65. package/dist/cjs/parser/table-parser.d.ts +6 -3
  66. package/dist/cjs/parser/unary-operation-parser.d.ts +5 -2
  67. package/dist/cjs/parser/unary-operation-parser.js +9 -8
  68. package/dist/cjs/parser/update-set-parser.d.ts +4 -1
  69. package/dist/cjs/parser/update-set-parser.js +9 -4
  70. package/dist/cjs/parser/value-parser.d.ts +5 -0
  71. package/dist/cjs/parser/value-parser.js +1 -3
  72. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +7 -0
  73. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +10 -4
  74. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +1 -1
  75. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  76. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +40 -113
  77. package/dist/cjs/query-builder/aggregate-function-builder.js +23 -63
  78. package/dist/cjs/query-builder/delete-query-builder.d.ts +224 -205
  79. package/dist/cjs/query-builder/delete-query-builder.js +21 -27
  80. package/dist/cjs/query-builder/delete-result.js +3 -0
  81. package/dist/cjs/query-builder/deprecated-having-expression-builder.d.ts +62 -0
  82. package/dist/cjs/query-builder/deprecated-having-expression-builder.js +2 -0
  83. package/dist/cjs/query-builder/deprecated-on-expression-builder.d.ts +62 -0
  84. package/dist/cjs/query-builder/deprecated-on-expression-builder.js +2 -0
  85. package/dist/cjs/query-builder/deprecated-where-expression-builder.d.ts +62 -0
  86. package/dist/cjs/query-builder/deprecated-where-expression-builder.js +2 -0
  87. package/dist/cjs/query-builder/function-module.d.ts +304 -42
  88. package/dist/cjs/query-builder/function-module.js +44 -208
  89. package/dist/cjs/query-builder/having-interface.d.ts +19 -16
  90. package/dist/cjs/query-builder/insert-query-builder.d.ts +78 -30
  91. package/dist/cjs/query-builder/insert-query-builder.js +21 -30
  92. package/dist/cjs/query-builder/insert-result.js +3 -0
  93. package/dist/cjs/query-builder/join-builder.d.ts +23 -26
  94. package/dist/cjs/query-builder/join-builder.js +17 -22
  95. package/dist/cjs/query-builder/no-result-error.d.ts +1 -0
  96. package/dist/cjs/query-builder/no-result-error.js +5 -1
  97. package/dist/cjs/query-builder/on-conflict-builder.d.ts +158 -276
  98. package/dist/cjs/query-builder/on-conflict-builder.js +52 -36
  99. package/dist/cjs/query-builder/over-builder.d.ts +5 -0
  100. package/dist/cjs/query-builder/over-builder.js +7 -0
  101. package/dist/cjs/query-builder/returning-interface.d.ts +2 -2
  102. package/dist/cjs/query-builder/select-query-builder.d.ts +155 -243
  103. package/dist/cjs/query-builder/select-query-builder.js +333 -78
  104. package/dist/cjs/query-builder/update-query-builder.d.ts +149 -217
  105. package/dist/cjs/query-builder/update-query-builder.js +21 -115
  106. package/dist/cjs/query-builder/update-result.js +3 -0
  107. package/dist/cjs/query-builder/where-interface.d.ts +71 -184
  108. package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
  109. package/dist/cjs/query-compiler/default-query-compiler.js +18 -2
  110. package/dist/cjs/query-creator.d.ts +38 -2
  111. package/dist/cjs/query-creator.js +3 -45
  112. package/dist/cjs/query-executor/query-executor.d.ts +3 -3
  113. package/dist/cjs/raw-builder/raw-builder.d.ts +5 -3
  114. package/dist/cjs/raw-builder/raw-builder.js +13 -7
  115. package/dist/cjs/raw-builder/sql.d.ts +17 -9
  116. package/dist/cjs/raw-builder/sql.js +8 -2
  117. package/dist/cjs/schema/alter-column-builder.d.ts +5 -0
  118. package/dist/cjs/schema/alter-column-builder.js +7 -0
  119. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +5 -0
  120. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +7 -0
  121. package/dist/cjs/schema/alter-table-drop-constraint-builder.d.ts +5 -0
  122. package/dist/cjs/schema/alter-table-drop-constraint-builder.js +7 -0
  123. package/dist/cjs/schema/column-definition-builder.d.ts +6 -1
  124. package/dist/cjs/schema/column-definition-builder.js +8 -1
  125. package/dist/cjs/schema/create-index-builder.d.ts +51 -9
  126. package/dist/cjs/schema/create-index-builder.js +17 -0
  127. package/dist/cjs/schema/create-schema-builder.d.ts +5 -0
  128. package/dist/cjs/schema/create-schema-builder.js +7 -0
  129. package/dist/cjs/schema/create-table-builder.d.ts +3 -1
  130. package/dist/cjs/schema/create-table-builder.js +3 -1
  131. package/dist/cjs/schema/create-type-builder.d.ts +5 -0
  132. package/dist/cjs/schema/create-type-builder.js +7 -0
  133. package/dist/cjs/schema/create-view-builder.d.ts +5 -0
  134. package/dist/cjs/schema/create-view-builder.js +7 -0
  135. package/dist/cjs/schema/drop-index-builder.d.ts +5 -0
  136. package/dist/cjs/schema/drop-index-builder.js +7 -0
  137. package/dist/cjs/schema/drop-schema-builder.d.ts +5 -0
  138. package/dist/cjs/schema/drop-schema-builder.js +7 -0
  139. package/dist/cjs/schema/drop-table-builder.d.ts +5 -0
  140. package/dist/cjs/schema/drop-table-builder.js +7 -0
  141. package/dist/cjs/schema/drop-type-builder.d.ts +5 -0
  142. package/dist/cjs/schema/drop-type-builder.js +7 -0
  143. package/dist/cjs/schema/drop-view-builder.d.ts +5 -0
  144. package/dist/cjs/schema/drop-view-builder.js +7 -0
  145. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +5 -0
  146. package/dist/cjs/schema/foreign-key-constraint-builder.js +7 -0
  147. package/dist/cjs/util/compilable.d.ts +1 -0
  148. package/dist/cjs/util/compilable.js +6 -0
  149. package/dist/cjs/util/explainable.d.ts +35 -0
  150. package/dist/cjs/util/log.d.ts +2 -0
  151. package/dist/cjs/util/object-utils.js +1 -1
  152. package/dist/cjs/util/streamable.d.ts +29 -0
  153. package/dist/cjs/util/streamable.js +2 -0
  154. package/dist/cjs/util/type-utils.d.ts +6 -4
  155. package/dist/esm/dialect/database-introspector.d.ts +4 -2
  156. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
  157. package/dist/esm/dialect/mysql/mysql-driver.d.ts +1 -1
  158. package/dist/esm/dialect/mysql/mysql-driver.js +1 -1
  159. package/dist/esm/dialect/mysql/mysql-introspector.d.ts +1 -1
  160. package/dist/esm/dialect/mysql/mysql-introspector.js +19 -13
  161. package/dist/esm/dialect/postgres/postgres-adapter.js +1 -1
  162. package/dist/esm/dialect/postgres/postgres-introspector.d.ts +1 -1
  163. package/dist/esm/dialect/postgres/postgres-introspector.js +3 -1
  164. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +1 -0
  165. package/dist/esm/dialect/sqlite/sqlite-dialect.js +1 -0
  166. package/dist/esm/dialect/sqlite/sqlite-introspector.d.ts +1 -1
  167. package/dist/esm/dialect/sqlite/sqlite-introspector.js +6 -5
  168. package/dist/esm/driver/runtime-driver.js +4 -2
  169. package/dist/esm/expression/expression-builder.d.ts +386 -0
  170. package/dist/esm/expression/expression-builder.js +88 -0
  171. package/dist/esm/expression/expression-wrapper.d.ts +92 -0
  172. package/dist/esm/expression/expression-wrapper.js +50 -0
  173. package/dist/esm/expression/expression.d.ts +1 -1
  174. package/dist/esm/helpers/postgres.d.ts +133 -0
  175. package/dist/esm/helpers/postgres.js +136 -0
  176. package/dist/esm/index.d.ts +4 -3
  177. package/dist/esm/index.js +2 -1
  178. package/dist/esm/kysely.d.ts +10 -0
  179. package/dist/esm/kysely.js +13 -2
  180. package/dist/esm/migration/file-migration-provider.d.ts +5 -2
  181. package/dist/esm/migration/migrator.d.ts +5 -2
  182. package/dist/esm/operation-node/aggregate-function-node.d.ts +3 -2
  183. package/dist/esm/operation-node/aggregate-function-node.js +2 -2
  184. package/dist/esm/operation-node/create-index-node.d.ts +2 -0
  185. package/dist/esm/operation-node/delete-query-node.d.ts +1 -2
  186. package/dist/esm/operation-node/delete-query-node.js +2 -8
  187. package/dist/esm/operation-node/function-node.d.ts +13 -0
  188. package/dist/esm/operation-node/function-node.js +17 -0
  189. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  190. package/dist/esm/operation-node/operation-node-transformer.js +11 -2
  191. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  192. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  193. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  194. package/dist/esm/operation-node/operator-node.d.ts +13 -2
  195. package/dist/esm/operation-node/operator-node.js +34 -3
  196. package/dist/esm/operation-node/query-node.d.ts +25 -8
  197. package/dist/esm/operation-node/query-node.js +9 -2
  198. package/dist/esm/operation-node/select-query-node.d.ts +0 -1
  199. package/dist/esm/operation-node/select-query-node.js +0 -6
  200. package/dist/esm/operation-node/update-query-node.d.ts +0 -1
  201. package/dist/esm/operation-node/update-query-node.js +0 -6
  202. package/dist/esm/parser/binary-operation-parser.d.ts +9 -10
  203. package/dist/esm/parser/binary-operation-parser.js +85 -37
  204. package/dist/esm/parser/coalesce-parser.d.ts +0 -2
  205. package/dist/esm/parser/coalesce-parser.js +1 -7
  206. package/dist/esm/parser/expression-parser.d.ts +7 -3
  207. package/dist/esm/parser/expression-parser.js +5 -5
  208. package/dist/esm/parser/group-by-parser.d.ts +3 -2
  209. package/dist/esm/parser/group-by-parser.js +3 -0
  210. package/dist/esm/parser/insert-values-parser.d.ts +4 -1
  211. package/dist/esm/parser/insert-values-parser.js +18 -12
  212. package/dist/esm/parser/join-parser.js +2 -2
  213. package/dist/esm/parser/parse-utils.d.ts +0 -2
  214. package/dist/esm/parser/parse-utils.js +0 -6
  215. package/dist/esm/parser/returning-parser.d.ts +2 -1
  216. package/dist/esm/parser/select-parser.d.ts +5 -13
  217. package/dist/esm/parser/select-parser.js +7 -3
  218. package/dist/esm/parser/table-parser.d.ts +6 -3
  219. package/dist/esm/parser/unary-operation-parser.d.ts +5 -2
  220. package/dist/esm/parser/unary-operation-parser.js +8 -8
  221. package/dist/esm/parser/update-set-parser.d.ts +4 -1
  222. package/dist/esm/parser/update-set-parser.js +7 -2
  223. package/dist/esm/parser/value-parser.d.ts +5 -0
  224. package/dist/esm/parser/value-parser.js +1 -3
  225. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +7 -0
  226. package/dist/esm/plugin/camel-case/camel-case-plugin.js +10 -4
  227. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +1 -1
  228. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  229. package/dist/esm/query-builder/aggregate-function-builder.d.ts +40 -113
  230. package/dist/esm/query-builder/aggregate-function-builder.js +24 -64
  231. package/dist/esm/query-builder/delete-query-builder.d.ts +224 -205
  232. package/dist/esm/query-builder/delete-query-builder.js +24 -30
  233. package/dist/esm/query-builder/delete-result.js +3 -0
  234. package/dist/esm/query-builder/deprecated-having-expression-builder.d.ts +62 -0
  235. package/dist/esm/query-builder/deprecated-having-expression-builder.js +2 -0
  236. package/dist/esm/query-builder/deprecated-on-expression-builder.d.ts +62 -0
  237. package/dist/esm/query-builder/deprecated-on-expression-builder.js +2 -0
  238. package/dist/esm/query-builder/deprecated-where-expression-builder.d.ts +62 -0
  239. package/dist/esm/query-builder/deprecated-where-expression-builder.js +2 -0
  240. package/dist/esm/query-builder/function-module.d.ts +304 -42
  241. package/dist/esm/query-builder/function-module.js +43 -207
  242. package/dist/esm/query-builder/having-interface.d.ts +19 -16
  243. package/dist/esm/query-builder/insert-query-builder.d.ts +78 -30
  244. package/dist/esm/query-builder/insert-query-builder.js +25 -34
  245. package/dist/esm/query-builder/insert-result.js +3 -0
  246. package/dist/esm/query-builder/join-builder.d.ts +23 -26
  247. package/dist/esm/query-builder/join-builder.js +18 -23
  248. package/dist/esm/query-builder/no-result-error.d.ts +1 -0
  249. package/dist/esm/query-builder/no-result-error.js +3 -0
  250. package/dist/esm/query-builder/on-conflict-builder.d.ts +158 -276
  251. package/dist/esm/query-builder/on-conflict-builder.js +54 -38
  252. package/dist/esm/query-builder/over-builder.d.ts +5 -0
  253. package/dist/esm/query-builder/over-builder.js +7 -0
  254. package/dist/esm/query-builder/returning-interface.d.ts +2 -2
  255. package/dist/esm/query-builder/select-query-builder.d.ts +155 -243
  256. package/dist/esm/query-builder/select-query-builder.js +337 -82
  257. package/dist/esm/query-builder/update-query-builder.d.ts +149 -217
  258. package/dist/esm/query-builder/update-query-builder.js +25 -119
  259. package/dist/esm/query-builder/update-result.js +3 -0
  260. package/dist/esm/query-builder/where-interface.d.ts +71 -184
  261. package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
  262. package/dist/esm/query-compiler/default-query-compiler.js +18 -2
  263. package/dist/esm/query-creator.d.ts +38 -2
  264. package/dist/esm/query-creator.js +3 -45
  265. package/dist/esm/query-executor/query-executor.d.ts +3 -3
  266. package/dist/esm/raw-builder/raw-builder.d.ts +5 -3
  267. package/dist/esm/raw-builder/raw-builder.js +13 -7
  268. package/dist/esm/raw-builder/sql.d.ts +17 -9
  269. package/dist/esm/raw-builder/sql.js +8 -2
  270. package/dist/esm/schema/alter-column-builder.d.ts +5 -0
  271. package/dist/esm/schema/alter-column-builder.js +7 -0
  272. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +5 -0
  273. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +7 -0
  274. package/dist/esm/schema/alter-table-drop-constraint-builder.d.ts +5 -0
  275. package/dist/esm/schema/alter-table-drop-constraint-builder.js +7 -0
  276. package/dist/esm/schema/column-definition-builder.d.ts +6 -1
  277. package/dist/esm/schema/column-definition-builder.js +8 -1
  278. package/dist/esm/schema/create-index-builder.d.ts +51 -9
  279. package/dist/esm/schema/create-index-builder.js +17 -0
  280. package/dist/esm/schema/create-schema-builder.d.ts +5 -0
  281. package/dist/esm/schema/create-schema-builder.js +7 -0
  282. package/dist/esm/schema/create-table-builder.d.ts +3 -1
  283. package/dist/esm/schema/create-table-builder.js +3 -1
  284. package/dist/esm/schema/create-type-builder.d.ts +5 -0
  285. package/dist/esm/schema/create-type-builder.js +7 -0
  286. package/dist/esm/schema/create-view-builder.d.ts +5 -0
  287. package/dist/esm/schema/create-view-builder.js +7 -0
  288. package/dist/esm/schema/drop-index-builder.d.ts +5 -0
  289. package/dist/esm/schema/drop-index-builder.js +7 -0
  290. package/dist/esm/schema/drop-schema-builder.d.ts +5 -0
  291. package/dist/esm/schema/drop-schema-builder.js +7 -0
  292. package/dist/esm/schema/drop-table-builder.d.ts +5 -0
  293. package/dist/esm/schema/drop-table-builder.js +7 -0
  294. package/dist/esm/schema/drop-type-builder.d.ts +5 -0
  295. package/dist/esm/schema/drop-type-builder.js +7 -0
  296. package/dist/esm/schema/drop-view-builder.d.ts +5 -0
  297. package/dist/esm/schema/drop-view-builder.js +7 -0
  298. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +5 -0
  299. package/dist/esm/schema/foreign-key-constraint-builder.js +7 -0
  300. package/dist/esm/util/compilable.d.ts +1 -0
  301. package/dist/esm/util/compilable.js +4 -1
  302. package/dist/esm/util/explainable.d.ts +35 -0
  303. package/dist/esm/util/log.d.ts +2 -0
  304. package/dist/esm/util/object-utils.js +1 -1
  305. package/dist/esm/util/streamable.d.ts +29 -0
  306. package/dist/esm/util/streamable.js +2 -0
  307. package/dist/esm/util/type-utils.d.ts +6 -4
  308. package/helpers/postgres.d.ts +1 -0
  309. package/helpers/postgres.js +1 -0
  310. package/package.json +20 -9
  311. package/dist/cjs/query-builder/expression-builder.d.ts +0 -126
  312. package/dist/cjs/query-builder/expression-builder.js +0 -107
  313. package/dist/esm/query-builder/expression-builder.d.ts +0 -126
  314. package/dist/esm/query-builder/expression-builder.js +0 -104
@@ -16,7 +16,6 @@ const object_utils_js_1 = require("../util/object-utils.js");
16
16
  const group_by_parser_js_1 = require("../parser/group-by-parser.js");
17
17
  const no_result_error_js_1 = require("./no-result-error.js");
18
18
  const identifier_node_js_1 = require("../operation-node/identifier-node.js");
19
- const explain_node_js_1 = require("../operation-node/explain-node.js");
20
19
  const set_operation_parser_js_1 = require("../parser/set-operation-parser.js");
21
20
  const binary_operation_parser_js_1 = require("../parser/binary-operation-parser.js");
22
21
  const unary_operation_parser_js_1 = require("../parser/unary-operation-parser.js");
@@ -38,7 +37,7 @@ class SelectQueryBuilder {
38
37
  whereRef(lhs, op, rhs) {
39
38
  return new SelectQueryBuilder({
40
39
  ...this.#props,
41
- queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialFilter)(lhs, op, rhs)),
40
+ queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
42
41
  });
43
42
  }
44
43
  orWhere(...args) {
@@ -50,7 +49,7 @@ class SelectQueryBuilder {
50
49
  orWhereRef(lhs, op, rhs) {
51
50
  return new SelectQueryBuilder({
52
51
  ...this.#props,
53
- queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialFilter)(lhs, op, rhs)),
52
+ queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
54
53
  });
55
54
  }
56
55
  whereExists(arg) {
@@ -86,7 +85,7 @@ class SelectQueryBuilder {
86
85
  havingRef(lhs, op, rhs) {
87
86
  return new SelectQueryBuilder({
88
87
  ...this.#props,
89
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialFilter)(lhs, op, rhs)),
88
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
90
89
  });
91
90
  }
92
91
  orHaving(...args) {
@@ -98,7 +97,7 @@ class SelectQueryBuilder {
98
97
  orHavingRef(lhs, op, rhs) {
99
98
  return new SelectQueryBuilder({
100
99
  ...this.#props,
101
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialFilter)(lhs, op, rhs)),
100
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, binary_operation_parser_js_1.parseReferentialComparison)(lhs, op, rhs)),
102
101
  });
103
102
  }
104
103
  havingExists(arg) {
@@ -107,12 +106,21 @@ class SelectQueryBuilder {
107
106
  queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, unary_operation_parser_js_1.parseExists)(arg)),
108
107
  });
109
108
  }
109
+ /**
110
+ * @deprecated Use {@link havingNotExists} instead.
111
+ */
110
112
  havingNotExist(arg) {
111
113
  return new SelectQueryBuilder({
112
114
  ...this.#props,
113
115
  queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, unary_operation_parser_js_1.parseNotExists)(arg)),
114
116
  });
115
117
  }
118
+ havingNotExists(arg) {
119
+ return new SelectQueryBuilder({
120
+ ...this.#props,
121
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, unary_operation_parser_js_1.parseNotExists)(arg)),
122
+ });
123
+ }
116
124
  orHavingExists(arg) {
117
125
  return new SelectQueryBuilder({
118
126
  ...this.#props,
@@ -125,10 +133,199 @@ class SelectQueryBuilder {
125
133
  queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, unary_operation_parser_js_1.parseNotExists)(arg)),
126
134
  });
127
135
  }
136
+ /**
137
+ * Adds a select statement to the query.
138
+ *
139
+ * When a column (or any expression) is selected, Kysely adds its type to the return
140
+ * type of the query. Kysely is smart enough to parse the selection names and types
141
+ * from aliased columns, subqueries, raw expressions etc.
142
+ *
143
+ * Kysely only allows you to select columns and expressions that exist and would
144
+ * produce valid SQL. However, Kysely is not perfect and there may be cases where
145
+ * the type inference doesn't work and you need to override it. You can always
146
+ * use the {@link Kysely.dynamic | dynamic} module and the {@link sql} tag
147
+ * to override the types.
148
+ *
149
+ * Select calls are additive. Calling `select('id').select('first_name')` is the
150
+ * same as calling `select(['id', 'first_name'])`.
151
+ *
152
+ * To select all columns of the query or specific tables see the
153
+ * {@link selectAll} method.
154
+ *
155
+ * See the {@link $if} method if you are looking for a way to add selections
156
+ * based on a runtime condition.
157
+ *
158
+ * ### Examples
159
+ *
160
+ * Select a single column:
161
+ *
162
+ * ```ts
163
+ * const persons = await db
164
+ * .selectFrom('person')
165
+ * .select('id')
166
+ * .where('first_name', '=', 'Arnold')
167
+ * .execute()
168
+ *
169
+ * persons[0].id
170
+ * ```
171
+ *
172
+ * The generated SQL (PostgreSQL):
173
+ *
174
+ * ```sql
175
+ * select "id" from "person" where "first_name" = $1
176
+ * ```
177
+ *
178
+ * Select a single column and specify a table:
179
+ *
180
+ * ```ts
181
+ * const persons = await db
182
+ * .selectFrom(['person', 'pet'])
183
+ * .select('person.id')
184
+ * .execute()
185
+ *
186
+ * persons[0].id
187
+ * ```
188
+ *
189
+ * The generated SQL (PostgreSQL):
190
+ *
191
+ * ```sql
192
+ * select "person"."id" from "person", "pet"
193
+ * ```
194
+ *
195
+ * Select multiple columns:
196
+ *
197
+ * ```ts
198
+ * const persons = await db
199
+ * .selectFrom('person')
200
+ * .select(['person.id', 'first_name'])
201
+ * .execute()
202
+ *
203
+ * persons[0].id
204
+ * persons[0].first_name
205
+ * ```
206
+ *
207
+ * The generated SQL (PostgreSQL):
208
+ *
209
+ * ```sql
210
+ * select "person"."id", "first_name" from "person"
211
+ * ```
212
+ *
213
+ * Aliased selections:
214
+ *
215
+ * ```ts
216
+ * const persons = await db
217
+ * .selectFrom('person')
218
+ * .select([
219
+ * 'person.first_name as fn',
220
+ * 'person.last_name as ln'
221
+ * ])
222
+ * .execute()
223
+ *
224
+ * persons[0].fn
225
+ * persons[0].ln
226
+ * ```
227
+ *
228
+ * The generated SQL (PostgreSQL):
229
+ *
230
+ * ```sql
231
+ * select
232
+ * "person"."first_name" as "fn",
233
+ * "person"."last_name" as "ln"
234
+ * from "person"
235
+ * ```
236
+ *
237
+ * You can also select arbitrary expression including subqueries and raw sql snippets.
238
+ * When you do that, you need to give a name for the selections using the {@link as} method:
239
+ *
240
+ * ```ts
241
+ * import { sql } from 'kysely'
242
+ *
243
+ * const persons = await db.selectFrom('person')
244
+ * .select(({ selectFrom, or, cmpr }) => [
245
+ * // Select a correlated subquery
246
+ * selectFrom('pet')
247
+ * .whereRef('person.id', '=', 'pet.owner_id')
248
+ * .select('pet.name')
249
+ * .orderBy('pet.name')
250
+ * .limit(1)
251
+ * .as('first_pet_name'),
252
+ *
253
+ * // Build and select an expression using the expression builder
254
+ * or([
255
+ * cmpr('first_name', '=', 'Jennifer'),
256
+ * cmpr('first_name', '=', 'Arnold')
257
+ * ]).as('is_jennifer_or_arnold'),
258
+ *
259
+ * // Select a raw sql expression
260
+ * sql<string>`concat(first_name, ' ', last_name)`.as('full_name')
261
+ * ])
262
+ * .execute()
263
+ *
264
+ * persons[0].first_pet_name
265
+ * persons[0].is_jennifer_or_arnold
266
+ * persons[0].full_name
267
+ * ```
268
+ *
269
+ * The generated SQL (PostgreSQL):
270
+ *
271
+ * ```sql
272
+ * select
273
+ * (
274
+ * select "pet"."name"
275
+ * from "pet"
276
+ * where "person"."id" = "pet"."owner_id"
277
+ * order by "pet"."name"
278
+ * limit $1
279
+ * ) as "pet_name",
280
+ * ("first_name" = $2 or "first_name" = $3) as "jennifer_or_arnold",
281
+ * concat(first_name, ' ', last_name) as "full_name"
282
+ * from "person"
283
+ * ```
284
+ *
285
+ * In case you use the {@link sql} tag you need to specify the type of the expression
286
+ * (in this example `string`).
287
+ *
288
+ * All the examples above assume you know the column names at compile time.
289
+ * While it's better to build your code like that (that way you also know
290
+ * the types) sometimes it's not possible or you just prefer to write more
291
+ * dynamic code.
292
+ * <br><br>
293
+ * In this example, we use the `dynamic` module's methods to add selections
294
+ * dynamically:
295
+ *
296
+ * ```ts
297
+ * const { ref } = db.dynamic
298
+ *
299
+ * // Some column name provided by the user. Value not known at compile time.
300
+ * const columnFromUserInput = req.query.select;
301
+ *
302
+ * // A type that lists all possible values `columnFromUserInput` can have.
303
+ * // You can use `keyof Person` if any column of an interface is allowed.
304
+ * type PossibleColumns = 'last_name' | 'first_name' | 'birth_date'
305
+ *
306
+ * const spersons = await db
307
+ * .selectFrom('person')
308
+ * .select([
309
+ * ref<PossibleColumns>(columnFromUserInput)
310
+ * 'id'
311
+ * ])
312
+ * .execute()
313
+ *
314
+ * // The resulting type contains all `PossibleColumns` as optional fields
315
+ * // because we cannot know which field was actually selected before
316
+ * // running the code.
317
+ * const lastName: string | undefined = persons[0].last_name
318
+ * const firstName: string | undefined = persons[0].first_name
319
+ * const birthDate: string | undefined = persons[0].birth_date
320
+ *
321
+ * // The result type also contains the compile time selection `id`.
322
+ * persons[0].id
323
+ * ```
324
+ */
128
325
  select(selection) {
129
326
  return new SelectQueryBuilder({
130
327
  ...this.#props,
131
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSelections(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(selection)),
328
+ queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSelections(this.#props.queryNode, (0, select_parser_js_1.parseSelectArg)(selection)),
132
329
  });
133
330
  }
134
331
  distinctOn(selection) {
@@ -348,7 +545,7 @@ class SelectQueryBuilder {
348
545
  * await db
349
546
  * .selectFrom('person')
350
547
  * .selectAll()
351
- * .orderBy((qb) => qb.selectFrom('pet')
548
+ * .orderBy((eb) => eb.selectFrom('pet')
352
549
  * .select('pet.name')
353
550
  * .whereRef('pet.owner_id', '=', 'person.id')
354
551
  * .limit(1)
@@ -404,6 +601,104 @@ class SelectQueryBuilder {
404
601
  queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, (0, order_by_parser_js_1.parseOrderBy)(orderBy, direction)),
405
602
  });
406
603
  }
604
+ /**
605
+ * Adds a `group by` clause to the query.
606
+ *
607
+ * ### Examples
608
+ *
609
+ * ```ts
610
+ * import { sql } from 'kysely'
611
+ *
612
+ * await db
613
+ * .selectFrom('person')
614
+ * .select([
615
+ * 'first_name',
616
+ * sql`max(id)`.as('max_id')
617
+ * ])
618
+ * .groupBy('first_name')
619
+ * .execute()
620
+ * ```
621
+ *
622
+ * The generated SQL (PostgreSQL):
623
+ *
624
+ * ```sql
625
+ * select "first_name", max(id)
626
+ * from "person"
627
+ * group by "first_name"
628
+ * ```
629
+ *
630
+ * `groupBy` also accepts an array:
631
+ *
632
+ * ```ts
633
+ * import { sql } from 'kysely'
634
+ *
635
+ * await db
636
+ * .selectFrom('person')
637
+ * .select([
638
+ * 'first_name',
639
+ * 'last_name',
640
+ * sql`max(id)`.as('max_id')
641
+ * ])
642
+ * .groupBy([
643
+ * 'first_name',
644
+ * 'last_name'
645
+ * ])
646
+ * .execute()
647
+ * ```
648
+ *
649
+ * The generated SQL (PostgreSQL):
650
+ *
651
+ * ```sql
652
+ * select "first_name", "last_name", max(id)
653
+ * from "person"
654
+ * group by "first_name", "last_name"
655
+ * ```
656
+ *
657
+ * The group by expressions can also be subqueries or
658
+ * raw sql expressions:
659
+ *
660
+ * ```ts
661
+ * import { sql } from 'kysely'
662
+ *
663
+ * await db
664
+ * .selectFrom('person')
665
+ * .select([
666
+ * 'first_name',
667
+ * 'last_name',
668
+ * sql`max(id)`.as('max_id')
669
+ * ])
670
+ * .groupBy([
671
+ * sql`concat(first_name, last_name)`,
672
+ * (qb) => qb.selectFrom('pet').select('id').limit(1)
673
+ * ])
674
+ * .execute()
675
+ * ```
676
+ *
677
+ * `dynamic.ref` can be used to refer to columns not known at
678
+ * compile time:
679
+ *
680
+ * ```ts
681
+ * async function someQuery(groupBy: string) {
682
+ * const { ref } = db.dynamic
683
+ *
684
+ * return await db
685
+ * .selectFrom('person')
686
+ * .select('first_name')
687
+ * .groupBy(ref(groupBy))
688
+ * .execute()
689
+ * }
690
+ *
691
+ * someQuery('first_name')
692
+ * ```
693
+ *
694
+ * The generated SQL (PostgreSQL):
695
+ *
696
+ * ```sql
697
+ * select "first_name"
698
+ * from "person"
699
+ * group by "first_name"
700
+ * ```
701
+ */
407
702
  groupBy(groupBy) {
408
703
  return new SelectQueryBuilder({
409
704
  ...this.#props,
@@ -612,7 +907,7 @@ class SelectQueryBuilder {
612
907
  * db.selectFrom('person')
613
908
  * .select(['id', 'first_name'])
614
909
  * .clearSelect()
615
- * .select(['id','gender'])
910
+ * .select(['id', 'gender'])
616
911
  * ```
617
912
  *
618
913
  * The generated SQL(PostgreSQL):
@@ -707,7 +1002,8 @@ class SelectQueryBuilder {
707
1002
  });
708
1003
  }
709
1004
  /**
710
- * Simply calls the given function passing `this` as the only argument.
1005
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
1006
+ * what the provided function returns.
711
1007
  *
712
1008
  * If you want to conditionally call a method on `this`, see
713
1009
  * the {@link $if} method.
@@ -740,12 +1036,29 @@ class SelectQueryBuilder {
740
1036
  /**
741
1037
  * Call `func(this)` if `condition` is true.
742
1038
  *
743
- * This method is especially handy with optional selects. Any `select` or `selectAll`
744
- * method calls add columns as optional fields to the output type when called inside
745
- * the `func` callback. This is because we can't know if those selections were actually
746
- * made before running the code.
1039
+ * NOTE: This method has an impact on typescript performance and it should only be used
1040
+ * when necessary. Remember that you can call most methods like `where` conditionally
1041
+ * like this:
1042
+ *
1043
+ * ```ts
1044
+ * let query = db.selectFrom('person').selectAll()
1045
+ *
1046
+ * if (firstName) {
1047
+ * query = query.where('first_name', '=', firstName)
1048
+ * }
1049
+ *
1050
+ * if (lastName) {
1051
+ * query = query.where('last_name', '=', lastName)
1052
+ * }
1053
+ *
1054
+ * const result = await query.execute()
1055
+ * ```
1056
+ *
1057
+ * This method is mainly useful with optional selects. Any `select` or `selectAll`
1058
+ * method called inside the callback add optional fields to the result type. This is
1059
+ * because we can't know if those selections were actually made before running the code.
747
1060
  *
748
- * Also see [this recipe](https://github.com/koskimas/kysely/tree/master/recipes/conditional-selects.md)
1061
+ * Also see [this recipe](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/conditional-selects.md)
749
1062
  *
750
1063
  * ### Examples
751
1064
  *
@@ -902,42 +1215,19 @@ class SelectQueryBuilder {
902
1215
  * the query returned no result.
903
1216
  *
904
1217
  * By default an instance of {@link NoResultError} is thrown, but you can
905
- * provide a custom error class as the only argument to throw a different
1218
+ * provide a custom error class, or callback to throw a different
906
1219
  * error.
907
1220
  */
908
1221
  async executeTakeFirstOrThrow(errorConstructor = no_result_error_js_1.NoResultError) {
909
1222
  const result = await this.executeTakeFirst();
910
1223
  if (result === undefined) {
911
- throw new errorConstructor(this.toOperationNode());
1224
+ const error = (0, no_result_error_js_1.isNoResultErrorConstructor)(errorConstructor)
1225
+ ? new errorConstructor(this.toOperationNode())
1226
+ : errorConstructor(this.toOperationNode());
1227
+ throw error;
912
1228
  }
913
1229
  return result;
914
1230
  }
915
- /**
916
- * Executes the query and streams the rows.
917
- *
918
- * The optional argument `chunkSize` defines how many rows to fetch from the database
919
- * at a time. It only affects some dialects like PostgreSQL that support it.
920
- *
921
- * ### Examples
922
- *
923
- * ```ts
924
- * const stream = db.
925
- * .selectFrom('person')
926
- * .select(['first_name', 'last_name'])
927
- * .where('gender', '=', 'other')
928
- * .stream()
929
- *
930
- * for await (const person of stream) {
931
- * console.log(person.first_name)
932
- *
933
- * if (person.last_name === 'Something') {
934
- * // Breaking or returning before the stream has ended will release
935
- * // the database connection and invalidate the stream.
936
- * break
937
- * }
938
- * }
939
- * ```
940
- */
941
1231
  async *stream(chunkSize = 100) {
942
1232
  const compiledQuery = this.compile();
943
1233
  const stream = this.#props.executor.stream(compiledQuery, chunkSize, this.#props.queryId);
@@ -945,45 +1235,10 @@ class SelectQueryBuilder {
945
1235
  yield* item.rows;
946
1236
  }
947
1237
  }
948
- /**
949
- * Executes query with `explain` statement before `select` keyword.
950
- *
951
- * ```ts
952
- * const explained = await db
953
- * .selectFrom('person')
954
- * .where('gender', '=', 'female')
955
- * .selectAll()
956
- * .explain('json')
957
- * ```
958
- *
959
- * The generated SQL (MySQL):
960
- *
961
- * ```sql
962
- * explain format=json select * from `person` where `gender` = ?
963
- * ```
964
- *
965
- * You can also execute `explain analyze` statements.
966
- *
967
- * ```ts
968
- * import { sql } from 'kysely'
969
- *
970
- * const explained = await db
971
- * .selectFrom('person')
972
- * .where('gender', '=', 'female')
973
- * .selectAll()
974
- * .explain('json', sql`analyze`)
975
- * ```
976
- *
977
- * The generated SQL (PostgreSQL):
978
- *
979
- * ```sql
980
- * explain (analyze, format json) select * from "person" where "gender" = $1
981
- * ```
982
- */
983
1238
  async explain(format, options) {
984
1239
  const builder = new SelectQueryBuilder({
985
1240
  ...this.#props,
986
- queryNode: select_query_node_js_1.SelectQueryNode.cloneWithExplain(this.#props.queryNode, explain_node_js_1.ExplainNode.create(format, options?.toOperationNode())),
1241
+ queryNode: query_node_js_1.QueryNode.cloneWithExplain(this.#props.queryNode, format, options),
987
1242
  });
988
1243
  return await builder.execute();
989
1244
  }