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
@@ -2,25 +2,28 @@ import { AliasNode } from '../operation-node/alias-node.js';
2
2
  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
- import { SelectExpression, QueryBuilderWithSelection, SelectAllQueryBuilder } from '../parser/select-parser.js';
5
+ import { SelectExpression, Selection, SelectArg, AllSelection } from '../parser/select-parser.js';
6
6
  import { ReferenceExpression } from '../parser/reference-parser.js';
7
7
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
8
- import { MergePartial, Nullable, SingleResultType } from '../util/type-utils.js';
8
+ import { QueryNode } from '../operation-node/query-node.js';
9
+ import { MergePartial, Nullable, Simplify, SimplifySingleResult } from '../util/type-utils.js';
9
10
  import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js';
10
11
  import { Compilable } from '../util/compilable.js';
11
12
  import { QueryExecutor } from '../query-executor/query-executor.js';
12
13
  import { QueryId } from '../util/query-id.js';
13
- import { GroupByExpression } from '../parser/group-by-parser.js';
14
+ import { GroupByArg } from '../parser/group-by-parser.js';
14
15
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
15
- import { WhereInterface } from './where-interface.js';
16
+ import { WhereExpressionFactory, WhereInterface } from './where-interface.js';
16
17
  import { NoResultErrorConstructor } from './no-result-error.js';
17
- import { HavingInterface } from './having-interface.js';
18
+ import { HavingExpressionFactory, HavingInterface } from './having-interface.js';
18
19
  import { Explainable, ExplainFormat } from '../util/explainable.js';
19
20
  import { AliasedExpression, Expression } from '../expression/expression.js';
20
- import { ComparisonOperatorExpression, HavingGrouper, OperandValueExpressionOrList, WhereGrouper } from '../parser/binary-operation-parser.js';
21
+ import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
21
22
  import { ExistsExpression } from '../parser/unary-operation-parser.js';
22
23
  import { KyselyTypeError } from '../util/type-error.js';
23
- export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, HavingInterface<DB, TB>, Expression<O>, Compilable<O>, Explainable {
24
+ import { Selectable } from '../util/column-type.js';
25
+ import { Streamable } from '../util/streamable.js';
26
+ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, HavingInterface<DB, TB>, Expression<O>, Compilable<O>, Explainable, Streamable<O> {
24
27
  #private;
25
28
  constructor(props: SelectQueryBuilderProps);
26
29
  /** @private */
@@ -42,53 +45,37 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
42
45
  */
43
46
  get expressionType(): O | undefined;
44
47
  /**
45
- * Adds a `where` clause to the query.
48
+ * Adds a `where` expression to the query.
46
49
  *
47
- * Also see {@link orWhere}, {@link whereExists} and {@link whereRef}.
50
+ * Calling this method multiple times will combine the expressions using `and`.
48
51
  *
49
- * ### Examples
52
+ * Also see {@link whereRef}
50
53
  *
51
- * Find a row by column value:
54
+ * ### Examples
52
55
  *
53
56
  * ```ts
54
57
  * const person = await db
55
58
  * .selectFrom('person')
56
59
  * .selectAll()
57
- * .where('id', '=', 100)
60
+ * .where('first_name', '=', 'Jennifer')
61
+ * .where('age', '>', 40)
58
62
  * .executeTakeFirst()
59
63
  * ```
60
64
  *
61
65
  * The generated SQL (PostgreSQL):
62
66
  *
63
67
  * ```sql
64
- * select * from "person" where "id" = $1
68
+ * select * from "person" where "first_name" = $1 and "age" > $2
65
69
  * ```
66
70
  *
67
71
  * Operator can be any supported operator or if the typings don't support it
68
- * you can always use
72
+ * you can always use:
69
73
  *
70
74
  * ```ts
71
75
  * sql`your operator`
72
76
  * ```
73
77
  *
74
- * The next example uses the `>` operator:
75
- *
76
- * ```ts
77
- * const persons = await db
78
- * .selectFrom('person')
79
- * .selectAll()
80
- * .where('id', '>', 100)
81
- * .execute()
82
- * ```
83
- *
84
- * The generated SQL (PostgreSQL):
85
- *
86
- * ```sql
87
- * select * from "person" where "id" > $1
88
- * ```
89
- *
90
- * `where` methods don't change the type of the query. You can add
91
- * conditional statements easily by doing something like this:
78
+ * You can add expressions conditionally like this:
92
79
  *
93
80
  * ```ts
94
81
  * let query = db
@@ -101,16 +88,16 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
101
88
  * query = query.where('first_name', '=', firstName)
102
89
  * }
103
90
  *
91
+ * if (lastName) {
92
+ * query = query.where('last_name', '=', lastName)
93
+ * }
94
+ *
104
95
  * const persons = await query.execute()
105
96
  * ```
106
97
  *
107
- * This is true for basically all methods execpt the `select` and
108
- * `returning`, that __do__ change the return type of the query.
109
- *
110
- * Both the first and third argument can also be subqueries.
111
- * A subquery is defined by passing a function and calling
112
- * the `selectFrom` method of the object passed into the
113
- * function:
98
+ * Both the first and third argument can also be arbitrary expressions like
99
+ * subqueries. An expression can defined by passing a function and calling
100
+ * the methods of the {@link ExpressionBuilder} passed to the callback:
114
101
  *
115
102
  * ```ts
116
103
  * const persons = await db
@@ -141,8 +128,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
141
128
  * ```
142
129
  *
143
130
  * A `where in` query can be built by using the `in` operator and an array
144
- * of values. The values in the array can also be subqueries or raw
145
- * {@link sql} expressions.
131
+ * of values. The values in the array can also be expressions:
146
132
  *
147
133
  * ```ts
148
134
  * const persons = await db
@@ -158,40 +144,53 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
158
144
  * select * from "person" where "id" in ($1, $2, $3)
159
145
  * ```
160
146
  *
161
- * If everything else fails, you can always use the {@link sql} tag
162
- * as any of the arguments, including the operator:
147
+ * For complex `where` expressions you can pass in a single callback and
148
+ * use the {@link ExpressionBuilder} to build your expression:
163
149
  *
164
150
  * ```ts
165
- * import { sql } from 'kysely'
166
- *
167
151
  * const persons = await db
168
152
  * .selectFrom('person')
169
- * .selectAll()
170
- * .where(
171
- * sql`coalesce(first_name, last_name)`,
172
- * 'like',
173
- * '%' + name + '%',
174
- * )
175
- * .execute()
153
+ * .selectAll('person')
154
+ * .where(({ cmpr, or, and, not, exists, selectFrom, val }) => and([
155
+ * or([
156
+ * cmpr('first_name', '=', firstName),
157
+ * cmpr('age', '<', maxAge)
158
+ * ]),
159
+ * not(exists(
160
+ * selectFrom('pet').select('pet.id').whereRef('pet.owner_id', '=', 'person.id')
161
+ * ))
162
+ * ]))
176
163
  * ```
177
164
  *
178
165
  * The generated SQL (PostgreSQL):
179
166
  *
180
167
  * ```sql
181
- * select * from "person"
182
- * where coalesce(first_name, last_name) like $1
168
+ * select "person".*
169
+ * from "person"
170
+ * where (
171
+ * (
172
+ * "first_name" = $1
173
+ * or "age" < $2
174
+ * )
175
+ * and not exists (
176
+ * select "pet"."id" from "pet" where "pet"."owner_id" = "person"."id"
177
+ * )
178
+ * )
183
179
  * ```
184
180
  *
185
- * If you only pass one function argument to this method, it can be
186
- * used to create parentheses around other where statements:
181
+ * If everything else fails, you can always use the {@link sql} tag
182
+ * as any of the arguments, including the operator:
187
183
  *
188
184
  * ```ts
185
+ * import { sql } from 'kysely'
186
+ *
189
187
  * const persons = await db
190
188
  * .selectFrom('person')
191
189
  * .selectAll()
192
- * .where((qb) => qb
193
- * .where('id', '=', 1)
194
- * .orWhere('id', '=', 2)
190
+ * .where(
191
+ * sql`coalesce(first_name, last_name)`,
192
+ * 'like',
193
+ * '%' + name + '%',
195
194
  * )
196
195
  * .execute()
197
196
  * ```
@@ -199,7 +198,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
199
198
  * The generated SQL (PostgreSQL):
200
199
  *
201
200
  * ```sql
202
- * select * from "person" (where "id" = 1 or "id" = 2)
201
+ * select * from "person"
202
+ * where coalesce(first_name, last_name) like $1
203
203
  * ```
204
204
  *
205
205
  * In all examples above the columns were known at compile time
@@ -221,12 +221,12 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
221
221
  * .selectFrom('person')
222
222
  * .selectAll()
223
223
  * .where(ref(columnFromUserInput), '=', 1)
224
- * .orWhere(sql.id(columnFromUserInput), '=', 2)
224
+ * .where(sql.id(columnFromUserInput), '=', 2)
225
225
  * .execute()
226
226
  * ```
227
227
  */
228
228
  where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
229
- where(grouper: WhereGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
229
+ where(factory: WhereExpressionFactory<DB, TB>): SelectQueryBuilder<DB, TB, O>;
230
230
  where(expression: Expression<any>): SelectQueryBuilder<DB, TB, O>;
231
231
  /**
232
232
  * Adds a `where` clause where both sides of the operator are references
@@ -258,7 +258,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
258
258
  * const persons = await db
259
259
  * .selectFrom('person')
260
260
  * .selectAll('person')
261
- * .select((qb) => qb
261
+ * .select((eb) => eb
262
262
  * .selectFrom('pet')
263
263
  * .select('name')
264
264
  * .whereRef('pet.owner_id', '=', 'person.id')
@@ -281,148 +281,29 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
281
281
  */
282
282
  whereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
283
283
  /**
284
- * Adds an `or where` clause to the query. Otherwise works just like {@link where}.
285
- *
286
- * It's often necessary to wrap `or where` clauses in parentheses to control
287
- * precendence. You can use the one argument version of the `where` method
288
- * for that. See the examples.
289
- *
290
- * ### Examples
291
- *
292
- * ```ts
293
- * const persons = await db
294
- * .selectFrom('person')
295
- * .selectAll()
296
- * .where('id', '=', 1)
297
- * .orWhere('id', '=', 2)
298
- * .execute()
299
- * ```
300
- *
301
- * The generated SQL (PostgreSQL):
302
- *
303
- * ```sql
304
- * select * from "person" where "id" = 1 or "id" = 2
305
- * ```
306
- *
307
- * Grouping with parentheses:
308
- *
309
- * ```ts
310
- * const persons = await db
311
- * .selectFrom('person')
312
- * .selectAll()
313
- * .where((qb) => qb
314
- * .where('id', '=', 1)
315
- * .orWhere('id', '=', 2)
316
- * )
317
- * .execute()
318
- * ```
319
- *
320
- * The generated SQL (PostgreSQL):
321
- *
322
- * ```sql
323
- * select * from "person" (where "id" = 1 or "id" = 2)
324
- * ```
325
- *
326
- * Even the first `where` can be an `orWhere`. This is useful
327
- * if you are looping through a set of conditions:
328
- *
329
- * ```ts
330
- * const persons = await db
331
- * .selectFrom('person')
332
- * .selectAll()
333
- * .where((qb) => qb
334
- * .orWhere('id', '=', 1)
335
- * .orWhere('id', '=', 2)
336
- * )
337
- * .execute()
338
- * ```
339
- *
340
- * The generated SQL (PostgreSQL):
341
- *
342
- * ```sql
343
- * select * from "person" (where "id" = 1 or "id" = 2)
344
- * ```
284
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
345
285
  */
346
286
  orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
347
- orWhere(grouper: WhereGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
287
+ orWhere(factory: WhereExpressionFactory<DB, TB>): SelectQueryBuilder<DB, TB, O>;
348
288
  orWhere(expression: Expression<any>): SelectQueryBuilder<DB, TB, O>;
349
289
  /**
350
- * Adds an `or where` clause to the query. Otherwise works just like {@link whereRef}.
351
- *
352
- * Also see {@link orWhere} and {@link where}.
290
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
353
291
  */
354
292
  orWhereRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
355
293
  /**
356
- * Adds a `where exists` clause to the query.
357
- *
358
- * You can either use a subquery or a raw {@link sql} snippet.
359
- *
360
- * ### Examples
361
- *
362
- * The query below selets all persons that own a pet named Catto:
363
- *
364
- * ```ts
365
- * const petName = 'Catto'
366
- * const persons = await db
367
- * .selectFrom('person')
368
- * .selectAll()
369
- * .whereExists((qb) => qb
370
- * .selectFrom('pet')
371
- * .select('pet.id')
372
- * .whereRef('person.id', '=', 'pet.owner_id')
373
- * .where('pet.name', '=', petName)
374
- * )
375
- * .execute()
376
- * ```
377
- *
378
- * The generated SQL (PostgreSQL):
379
- *
380
- * ```sql
381
- * select * from "person"
382
- * where exists (
383
- * select "pet"."id"
384
- * from "pet"
385
- * where "person"."id" = "pet"."owner_id"
386
- * and "pet"."name" = $1
387
- * )
388
- * ```
389
- *
390
- * The same query as in the previous example but with using raw {@link sql}:
391
- *
392
- * ```ts
393
- * import { sql } from 'kysely'
394
- *
395
- * const petName = 'Catto'
396
- * db.selectFrom('person')
397
- * .selectAll()
398
- * .whereExists(
399
- * sql`(select pet.id from pet where person.id = pet.owner_id and pet.name = ${petName})`
400
- * )
401
- * ```
402
- *
403
- * The generated SQL (PostgreSQL):
404
- *
405
- * ```sql
406
- * select * from "person"
407
- * where exists (
408
- * select pet.id
409
- * from pet
410
- * where person.id = pet.owner_id
411
- * and pet.name = $1
412
- * )
413
- * ```
294
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
414
295
  */
415
296
  whereExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
416
297
  /**
417
- * Just like {@link whereExists} but creates a `not exists` clause.
298
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
418
299
  */
419
300
  whereNotExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
420
301
  /**
421
- * Just like {@link whereExists} but creates an `or exists` clause.
302
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
422
303
  */
423
304
  orWhereExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
424
305
  /**
425
- * Just like {@link whereExists} but creates an `or not exists` clause.
306
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
426
307
  */
427
308
  orWhereNotExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
428
309
  /**
@@ -430,7 +311,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
430
311
  * instead of a `where` statement.
431
312
  */
432
313
  having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
433
- having(grouper: HavingGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
314
+ having(factory: HavingExpressionFactory<DB, TB>): SelectQueryBuilder<DB, TB, O>;
434
315
  having(expression: Expression<any>): SelectQueryBuilder<DB, TB, O>;
435
316
  /**
436
317
  * Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
@@ -438,42 +319,40 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
438
319
  */
439
320
  havingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
440
321
  /**
441
- * Just like {@link WhereInterface.orWhere | orWhere} but adds a `having` statement
442
- * instead of a `where` statement.
322
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
443
323
  */
444
324
  orHaving<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
445
- orHaving(grouper: HavingGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
325
+ orHaving(factory: HavingExpressionFactory<DB, TB>): SelectQueryBuilder<DB, TB, O>;
446
326
  orHaving(expression: Expression<any>): SelectQueryBuilder<DB, TB, O>;
447
327
  /**
448
- * Just like {@link WhereInterface.orWhereRef | orWhereRef} but adds a `having` statement
449
- * instead of a `where` statement.
328
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
450
329
  */
451
330
  orHavingRef(lhs: ReferenceExpression<DB, TB>, op: ComparisonOperatorExpression, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
452
331
  /**
453
- * Just like {@link WhereInterface.whereExists | whereExists} but adds a `having` statement
454
- * instead of a `where` statement.
332
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
455
333
  */
456
334
  havingExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
457
335
  /**
458
- * Just like {@link WhereInterface.whereNotExists | whereNotExists} but adds a `having` statement
459
- * instead of a `where` statement.
336
+ * @deprecated Use {@link havingNotExists} instead.
460
337
  */
461
338
  havingNotExist(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
462
339
  /**
463
- * Just like {@link WhereInterface.orWhereExists | orWhereExists} but adds a `having` statement
464
- * instead of a `where` statement.
340
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
341
+ */
342
+ havingNotExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
343
+ /**
344
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
465
345
  */
466
346
  orHavingExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
467
347
  /**
468
- * Just like {@link WhereInterface.orWhereNotExists | orWhereNotExists} but adds a `having` statement
469
- * instead of a `where` statement.
348
+ * @deprecated Follow [these](https://github.com/koskimas/kysely/releases/tag/0.24.0) instructions to migrate
470
349
  */
471
350
  orHavingNotExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
472
351
  /**
473
- * Adds a select clause to the query.
352
+ * Adds a select statement to the query.
474
353
  *
475
354
  * When a column (or any expression) is selected, Kysely adds its type to the return
476
- * type of the query. Kysely is smart enough to parse the column names and types even
355
+ * type of the query. Kysely is smart enough to parse the selection names and types
477
356
  * from aliased columns, subqueries, raw expressions etc.
478
357
  *
479
358
  * Kysely only allows you to select columns and expressions that exist and would
@@ -483,7 +362,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
483
362
  * to override the types.
484
363
  *
485
364
  * Select calls are additive. Calling `select('id').select('first_name')` is the
486
- * same as calling `select(['id', 'first_name']).
365
+ * same as calling `select(['id', 'first_name'])`.
487
366
  *
488
367
  * To select all columns of the query or specific tables see the
489
368
  * {@link selectAll} method.
@@ -496,7 +375,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
496
375
  * Select a single column:
497
376
  *
498
377
  * ```ts
499
- * const persons = await db.selectFrom('person')
378
+ * const persons = await db
379
+ * .selectFrom('person')
500
380
  * .select('id')
501
381
  * .where('first_name', '=', 'Arnold')
502
382
  * .execute()
@@ -513,7 +393,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
513
393
  * Select a single column and specify a table:
514
394
  *
515
395
  * ```ts
516
- * const persons = await db.selectFrom(['person', 'pet'])
396
+ * const persons = await db
397
+ * .selectFrom(['person', 'pet'])
517
398
  * .select('person.id')
518
399
  * .execute()
519
400
  *
@@ -529,7 +410,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
529
410
  * Select multiple columns:
530
411
  *
531
412
  * ```ts
532
- * const persons = await db.selectFrom('person')
413
+ * const persons = await db
414
+ * .selectFrom('person')
533
415
  * .select(['person.id', 'first_name'])
534
416
  * .execute()
535
417
  *
@@ -546,7 +428,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
546
428
  * Aliased selections:
547
429
  *
548
430
  * ```ts
549
- * const persons = await db.selectFrom('person')
431
+ * const persons = await db
432
+ * .selectFrom('person')
550
433
  * .select([
551
434
  * 'person.first_name as fn',
552
435
  * 'person.last_name as ln'
@@ -566,26 +449,35 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
566
449
  * from "person"
567
450
  * ```
568
451
  *
569
- * You can also select subqueries and raw sql expressions. Note that you
570
- * always need to give a name for the selections using the `as`
571
- * method:
452
+ * You can also select arbitrary expression including subqueries and raw sql snippets.
453
+ * When you do that, you need to give a name for the selections using the {@link as} method:
572
454
  *
573
455
  * ```ts
574
456
  * import { sql } from 'kysely'
575
457
  *
576
458
  * const persons = await db.selectFrom('person')
577
- * .select([
578
- * (qb) => qb
579
- * .selectFrom('pet')
459
+ * .select(({ selectFrom, or, cmpr }) => [
460
+ * // Select a correlated subquery
461
+ * selectFrom('pet')
580
462
  * .whereRef('person.id', '=', 'pet.owner_id')
581
463
  * .select('pet.name')
464
+ * .orderBy('pet.name')
582
465
  * .limit(1)
583
- * .as('pet_name')
466
+ * .as('first_pet_name'),
467
+ *
468
+ * // Build and select an expression using the expression builder
469
+ * or([
470
+ * cmpr('first_name', '=', 'Jennifer'),
471
+ * cmpr('first_name', '=', 'Arnold')
472
+ * ]).as('is_jennifer_or_arnold'),
473
+ *
474
+ * // Select a raw sql expression
584
475
  * sql<string>`concat(first_name, ' ', last_name)`.as('full_name')
585
476
  * ])
586
477
  * .execute()
587
478
  *
588
- * persons[0].pet_name
479
+ * persons[0].first_pet_name
480
+ * persons[0].is_jennifer_or_arnold
589
481
  * persons[0].full_name
590
482
  * ```
591
483
  *
@@ -597,9 +489,11 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
597
489
  * select "pet"."name"
598
490
  * from "pet"
599
491
  * where "person"."id" = "pet"."owner_id"
492
+ * order by "pet"."name"
600
493
  * limit $1
601
494
  * ) as "pet_name",
602
- * concat(first_name, ' ', last_name) as full_name
495
+ * ("first_name" = $2 or "first_name" = $3) as "jennifer_or_arnold",
496
+ * concat(first_name, ' ', last_name) as "full_name"
603
497
  * from "person"
604
498
  * ```
605
499
  *
@@ -624,7 +518,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
624
518
  * // You can use `keyof Person` if any column of an interface is allowed.
625
519
  * type PossibleColumns = 'last_name' | 'first_name' | 'birth_date'
626
520
  *
627
- * const spersons = await db.selectFrom('person')
521
+ * const spersons = await db
522
+ * .selectFrom('person')
628
523
  * .select([
629
524
  * ref<PossibleColumns>(columnFromUserInput)
630
525
  * 'id'
@@ -642,8 +537,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
642
537
  * persons[0].id
643
538
  * ```
644
539
  */
645
- select<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): QueryBuilderWithSelection<DB, TB, O, SE>;
646
- select<SE extends SelectExpression<DB, TB>>(selection: SE): QueryBuilderWithSelection<DB, TB, O, SE>;
540
+ select<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
647
541
  /**
648
542
  * Adds `distinct on` expressions to the select clause.
649
543
  *
@@ -804,9 +698,9 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
804
698
  * select "person".*, "pet".* from "person", "pet"
805
699
  * ```
806
700
  */
807
- selectAll<T extends TB>(table: ReadonlyArray<T>): SelectAllQueryBuilder<DB, TB, O, T>;
808
- selectAll<T extends TB>(table: T): SelectAllQueryBuilder<DB, TB, O, T>;
809
- selectAll(): SelectAllQueryBuilder<DB, TB, O, TB>;
701
+ selectAll<T extends TB>(table: ReadonlyArray<T>): SelectQueryBuilder<DB, TB, O & AllSelection<DB, T>>;
702
+ selectAll<T extends TB>(table: T): SelectQueryBuilder<DB, TB, Selectable<DB[T]>>;
703
+ selectAll(): SelectQueryBuilder<DB, TB, O & AllSelection<DB, TB>>;
810
704
  /**
811
705
  * Joins another table to the query using an inner join.
812
706
  *
@@ -892,7 +786,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
892
786
  * ```ts
893
787
  * await db.selectFrom('person')
894
788
  * .innerJoin(
895
- * qb.selectFrom('pet')
789
+ * db.selectFrom('pet')
896
790
  * .select(['owner_id', 'name'])
897
791
  * .where('name', '=', 'Doggo')
898
792
  * .as('doggos'),
@@ -950,6 +844,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
950
844
  * )
951
845
  * .select(['first_name', 'p.name'])
952
846
  * .orderBy('first_name')
847
+ * ```
953
848
  */
954
849
  innerJoinLateral<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilderWithInnerJoin<DB, TB, O, TE>;
955
850
  innerJoinLateral<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilderWithInnerJoin<DB, TB, O, TE>;
@@ -1010,7 +905,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1010
905
  * await db
1011
906
  * .selectFrom('person')
1012
907
  * .selectAll()
1013
- * .orderBy((qb) => qb.selectFrom('pet')
908
+ * .orderBy((eb) => eb.selectFrom('pet')
1014
909
  * .select('pet.name')
1015
910
  * .whereRef('pet.owner_id', '=', 'person.id')
1016
911
  * .limit(1)
@@ -1159,8 +1054,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1159
1054
  * group by "first_name"
1160
1055
  * ```
1161
1056
  */
1162
- groupBy(groupBy: ReadonlyArray<GroupByExpression<DB, TB, O>>): SelectQueryBuilder<DB, TB, O>;
1163
- groupBy(groupBy: GroupByExpression<DB, TB, O>): SelectQueryBuilder<DB, TB, O>;
1057
+ groupBy(groupBy: GroupByArg<DB, TB, O>): SelectQueryBuilder<DB, TB, O>;
1164
1058
  /**
1165
1059
  * Adds a limit clause to the query.
1166
1060
  *
@@ -1321,7 +1215,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1321
1215
  * db.selectFrom('person')
1322
1216
  * .select(['id', 'first_name'])
1323
1217
  * .clearSelect()
1324
- * .select(['id','gender'])
1218
+ * .select(['id', 'gender'])
1325
1219
  * ```
1326
1220
  *
1327
1221
  * The generated SQL(PostgreSQL):
@@ -1332,7 +1226,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1332
1226
  */
1333
1227
  clearSelect(): SelectQueryBuilder<DB, TB, {}>;
1334
1228
  /**
1335
- * Clears all where clauses from the query.
1229
+ * Clears all where expressions from the query.
1336
1230
  *
1337
1231
  * ### Examples
1338
1232
  *
@@ -1409,7 +1303,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1409
1303
  */
1410
1304
  clearOrderBy(): SelectQueryBuilder<DB, TB, O>;
1411
1305
  /**
1412
- * Simply calls the given function passing `this` as the only argument.
1306
+ * Simply calls the provided function passing `this` as the only argument. `$call` returns
1307
+ * what the provided function returns.
1413
1308
  *
1414
1309
  * If you want to conditionally call a method on `this`, see
1415
1310
  * the {@link $if} method.
@@ -1438,12 +1333,29 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1438
1333
  /**
1439
1334
  * Call `func(this)` if `condition` is true.
1440
1335
  *
1441
- * This method is especially handy with optional selects. Any `select` or `selectAll`
1442
- * method calls add columns as optional fields to the output type when called inside
1443
- * the `func` callback. This is because we can't know if those selections were actually
1444
- * made before running the code.
1336
+ * NOTE: This method has an impact on typescript performance and it should only be used
1337
+ * when necessary. Remember that you can call most methods like `where` conditionally
1338
+ * like this:
1339
+ *
1340
+ * ```ts
1341
+ * let query = db.selectFrom('person').selectAll()
1342
+ *
1343
+ * if (firstName) {
1344
+ * query = query.where('first_name', '=', firstName)
1345
+ * }
1346
+ *
1347
+ * if (lastName) {
1348
+ * query = query.where('last_name', '=', lastName)
1349
+ * }
1350
+ *
1351
+ * const result = await query.execute()
1352
+ * ```
1353
+ *
1354
+ * This method is mainly useful with optional selects. Any `select` or `selectAll`
1355
+ * method called inside the callback add optional fields to the result type. This is
1356
+ * because we can't know if those selections were actually made before running the code.
1445
1357
  *
1446
- * Also see [this recipe](https://github.com/koskimas/kysely/tree/master/recipes/conditional-selects.md)
1358
+ * Also see [this recipe](https://github.com/koskimas/kysely/tree/master/site/docs/recipes/conditional-selects.md)
1447
1359
  *
1448
1360
  * ### Examples
1449
1361
  *
@@ -1564,27 +1476,27 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1564
1476
  * ```
1565
1477
  */
1566
1478
  toOperationNode(): SelectQueryNode;
1567
- compile(): CompiledQuery<O>;
1479
+ compile(): CompiledQuery<Simplify<O>>;
1568
1480
  /**
1569
1481
  * Executes the query and returns an array of rows.
1570
1482
  *
1571
1483
  * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
1572
1484
  */
1573
- execute(): Promise<O[]>;
1485
+ execute(): Promise<Simplify<O>[]>;
1574
1486
  /**
1575
1487
  * Executes the query and returns the first result or undefined if
1576
1488
  * the query returned no result.
1577
1489
  */
1578
- executeTakeFirst(): Promise<SingleResultType<O>>;
1490
+ executeTakeFirst(): Promise<SimplifySingleResult<O>>;
1579
1491
  /**
1580
1492
  * Executes the query and returns the first result or throws if
1581
1493
  * the query returned no result.
1582
1494
  *
1583
1495
  * By default an instance of {@link NoResultError} is thrown, but you can
1584
- * provide a custom error class as the only argument to throw a different
1496
+ * provide a custom error class, or callback to throw a different
1585
1497
  * error.
1586
1498
  */
1587
- executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor): Promise<O>;
1499
+ executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor | ((node: QueryNode) => Error)): Promise<Simplify<O>>;
1588
1500
  /**
1589
1501
  * Executes the query and streams the rows.
1590
1502
  *
@@ -1613,7 +1525,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1613
1525
  */
1614
1526
  stream(chunkSize?: number): AsyncIterableIterator<O>;
1615
1527
  /**
1616
- * Executes query with `explain` statement before `select` keyword.
1528
+ * Executes query with `explain` statement before the main query.
1617
1529
  *
1618
1530
  * ```ts
1619
1531
  * const explained = await db