kysely 0.23.5 → 0.24.1

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 (300) hide show
  1. package/README.md +46 -24
  2. package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
  3. package/dist/cjs/dialect/mysql/mysql-driver.d.ts +1 -1
  4. package/dist/cjs/dialect/mysql/mysql-driver.js +1 -1
  5. package/dist/cjs/dialect/postgres/postgres-adapter.js +1 -1
  6. package/dist/cjs/dialect/sqlite/sqlite-dialect.d.ts +1 -0
  7. package/dist/cjs/dialect/sqlite/sqlite-dialect.js +1 -0
  8. package/dist/cjs/driver/runtime-driver.js +4 -2
  9. package/dist/cjs/expression/expression-builder.d.ts +386 -0
  10. package/dist/cjs/expression/expression-builder.js +92 -0
  11. package/dist/cjs/expression/expression-wrapper.d.ts +92 -0
  12. package/dist/cjs/expression/expression-wrapper.js +54 -0
  13. package/dist/cjs/expression/expression.d.ts +1 -1
  14. package/dist/cjs/helpers/mysql.d.ts +140 -0
  15. package/dist/cjs/helpers/mysql.js +170 -0
  16. package/dist/cjs/helpers/postgres.d.ts +133 -0
  17. package/dist/cjs/helpers/postgres.js +141 -0
  18. package/dist/cjs/index.d.ts +4 -3
  19. package/dist/cjs/index.js +4 -2
  20. package/dist/cjs/kysely.d.ts +10 -0
  21. package/dist/cjs/kysely.js +12 -1
  22. package/dist/cjs/migration/file-migration-provider.d.ts +5 -2
  23. package/dist/cjs/migration/migrator.d.ts +5 -2
  24. package/dist/cjs/operation-node/aggregate-function-node.d.ts +3 -3
  25. package/dist/cjs/operation-node/create-index-node.d.ts +2 -0
  26. package/dist/cjs/operation-node/delete-query-node.d.ts +0 -1
  27. package/dist/cjs/operation-node/delete-query-node.js +0 -6
  28. package/dist/cjs/operation-node/function-node.d.ts +13 -0
  29. package/dist/cjs/operation-node/function-node.js +19 -0
  30. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  31. package/dist/cjs/operation-node/operation-node-transformer.js +9 -0
  32. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  33. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  34. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  35. package/dist/cjs/operation-node/operator-node.d.ts +13 -2
  36. package/dist/cjs/operation-node/operator-node.js +38 -3
  37. package/dist/cjs/operation-node/query-node.d.ts +25 -8
  38. package/dist/cjs/operation-node/query-node.js +9 -2
  39. package/dist/cjs/operation-node/select-query-node.d.ts +0 -1
  40. package/dist/cjs/operation-node/select-query-node.js +0 -6
  41. package/dist/cjs/operation-node/update-query-node.d.ts +0 -1
  42. package/dist/cjs/operation-node/update-query-node.js +0 -6
  43. package/dist/cjs/parser/binary-operation-parser.d.ts +9 -10
  44. package/dist/cjs/parser/binary-operation-parser.js +89 -39
  45. package/dist/cjs/parser/coalesce-parser.d.ts +0 -2
  46. package/dist/cjs/parser/coalesce-parser.js +0 -9
  47. package/dist/cjs/parser/expression-parser.d.ts +7 -3
  48. package/dist/cjs/parser/expression-parser.js +3 -3
  49. package/dist/cjs/parser/group-by-parser.d.ts +3 -2
  50. package/dist/cjs/parser/group-by-parser.js +3 -0
  51. package/dist/cjs/parser/insert-values-parser.d.ts +4 -1
  52. package/dist/cjs/parser/insert-values-parser.js +19 -13
  53. package/dist/cjs/parser/join-parser.js +1 -1
  54. package/dist/cjs/parser/parse-utils.d.ts +0 -2
  55. package/dist/cjs/parser/parse-utils.js +1 -8
  56. package/dist/cjs/parser/returning-parser.d.ts +2 -1
  57. package/dist/cjs/parser/select-parser.d.ts +5 -13
  58. package/dist/cjs/parser/select-parser.js +8 -4
  59. package/dist/cjs/parser/table-parser.d.ts +5 -3
  60. package/dist/cjs/parser/unary-operation-parser.d.ts +5 -2
  61. package/dist/cjs/parser/unary-operation-parser.js +9 -8
  62. package/dist/cjs/parser/update-set-parser.d.ts +4 -1
  63. package/dist/cjs/parser/update-set-parser.js +9 -4
  64. package/dist/cjs/parser/value-parser.d.ts +5 -0
  65. package/dist/cjs/parser/value-parser.js +1 -3
  66. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +1 -1
  67. package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  68. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +40 -113
  69. package/dist/cjs/query-builder/aggregate-function-builder.js +23 -63
  70. package/dist/cjs/query-builder/delete-query-builder.d.ts +220 -201
  71. package/dist/cjs/query-builder/delete-query-builder.js +21 -27
  72. package/dist/cjs/query-builder/delete-result.js +3 -0
  73. package/dist/cjs/query-builder/deprecated-having-expression-builder.d.ts +62 -0
  74. package/dist/cjs/query-builder/deprecated-having-expression-builder.js +2 -0
  75. package/dist/cjs/query-builder/deprecated-on-expression-builder.d.ts +62 -0
  76. package/dist/cjs/query-builder/deprecated-on-expression-builder.js +2 -0
  77. package/dist/cjs/query-builder/deprecated-where-expression-builder.d.ts +62 -0
  78. package/dist/cjs/query-builder/deprecated-where-expression-builder.js +2 -0
  79. package/dist/cjs/query-builder/function-module.d.ts +40 -12
  80. package/dist/cjs/query-builder/function-module.js +43 -329
  81. package/dist/cjs/query-builder/having-interface.d.ts +19 -16
  82. package/dist/cjs/query-builder/insert-query-builder.d.ts +75 -26
  83. package/dist/cjs/query-builder/insert-query-builder.js +21 -29
  84. package/dist/cjs/query-builder/insert-result.js +3 -0
  85. package/dist/cjs/query-builder/join-builder.d.ts +23 -26
  86. package/dist/cjs/query-builder/join-builder.js +17 -22
  87. package/dist/cjs/query-builder/no-result-error.d.ts +1 -0
  88. package/dist/cjs/query-builder/no-result-error.js +5 -1
  89. package/dist/cjs/query-builder/on-conflict-builder.d.ts +158 -276
  90. package/dist/cjs/query-builder/on-conflict-builder.js +52 -36
  91. package/dist/cjs/query-builder/over-builder.d.ts +5 -0
  92. package/dist/cjs/query-builder/over-builder.js +7 -0
  93. package/dist/cjs/query-builder/returning-interface.d.ts +2 -2
  94. package/dist/cjs/query-builder/select-query-builder.d.ts +148 -237
  95. package/dist/cjs/query-builder/select-query-builder.js +333 -78
  96. package/dist/cjs/query-builder/update-query-builder.d.ts +145 -213
  97. package/dist/cjs/query-builder/update-query-builder.js +21 -115
  98. package/dist/cjs/query-builder/update-result.js +3 -0
  99. package/dist/cjs/query-builder/where-interface.d.ts +71 -184
  100. package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
  101. package/dist/cjs/query-compiler/default-query-compiler.js +17 -1
  102. package/dist/cjs/query-creator.d.ts +9 -2
  103. package/dist/cjs/query-creator.js +1 -24
  104. package/dist/cjs/query-executor/query-executor.d.ts +3 -3
  105. package/dist/cjs/raw-builder/raw-builder.d.ts +5 -3
  106. package/dist/cjs/raw-builder/raw-builder.js +13 -7
  107. package/dist/cjs/raw-builder/sql.d.ts +17 -9
  108. package/dist/cjs/raw-builder/sql.js +8 -2
  109. package/dist/cjs/schema/alter-column-builder.d.ts +5 -0
  110. package/dist/cjs/schema/alter-column-builder.js +7 -0
  111. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.d.ts +5 -0
  112. package/dist/cjs/schema/alter-table-add-foreign-key-constraint-builder.js +7 -0
  113. package/dist/cjs/schema/alter-table-drop-constraint-builder.d.ts +5 -0
  114. package/dist/cjs/schema/alter-table-drop-constraint-builder.js +7 -0
  115. package/dist/cjs/schema/column-definition-builder.d.ts +6 -1
  116. package/dist/cjs/schema/column-definition-builder.js +8 -1
  117. package/dist/cjs/schema/create-index-builder.d.ts +51 -9
  118. package/dist/cjs/schema/create-index-builder.js +17 -0
  119. package/dist/cjs/schema/create-schema-builder.d.ts +5 -0
  120. package/dist/cjs/schema/create-schema-builder.js +7 -0
  121. package/dist/cjs/schema/create-table-builder.d.ts +3 -1
  122. package/dist/cjs/schema/create-table-builder.js +3 -1
  123. package/dist/cjs/schema/create-type-builder.d.ts +5 -0
  124. package/dist/cjs/schema/create-type-builder.js +7 -0
  125. package/dist/cjs/schema/create-view-builder.d.ts +5 -0
  126. package/dist/cjs/schema/create-view-builder.js +7 -0
  127. package/dist/cjs/schema/drop-index-builder.d.ts +5 -0
  128. package/dist/cjs/schema/drop-index-builder.js +7 -0
  129. package/dist/cjs/schema/drop-schema-builder.d.ts +5 -0
  130. package/dist/cjs/schema/drop-schema-builder.js +7 -0
  131. package/dist/cjs/schema/drop-table-builder.d.ts +5 -0
  132. package/dist/cjs/schema/drop-table-builder.js +7 -0
  133. package/dist/cjs/schema/drop-type-builder.d.ts +5 -0
  134. package/dist/cjs/schema/drop-type-builder.js +7 -0
  135. package/dist/cjs/schema/drop-view-builder.d.ts +5 -0
  136. package/dist/cjs/schema/drop-view-builder.js +7 -0
  137. package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +5 -0
  138. package/dist/cjs/schema/foreign-key-constraint-builder.js +7 -0
  139. package/dist/cjs/util/compilable.d.ts +1 -0
  140. package/dist/cjs/util/compilable.js +6 -0
  141. package/dist/cjs/util/explainable.d.ts +35 -0
  142. package/dist/cjs/util/log.d.ts +2 -0
  143. package/dist/cjs/util/object-utils.js +1 -1
  144. package/dist/cjs/util/streamable.d.ts +29 -0
  145. package/dist/cjs/util/streamable.js +2 -0
  146. package/dist/cjs/util/type-utils.d.ts +1 -0
  147. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
  148. package/dist/esm/dialect/mysql/mysql-driver.d.ts +1 -1
  149. package/dist/esm/dialect/mysql/mysql-driver.js +1 -1
  150. package/dist/esm/dialect/postgres/postgres-adapter.js +1 -1
  151. package/dist/esm/dialect/sqlite/sqlite-dialect.d.ts +1 -0
  152. package/dist/esm/dialect/sqlite/sqlite-dialect.js +1 -0
  153. package/dist/esm/driver/runtime-driver.js +4 -2
  154. package/dist/esm/expression/expression-builder.d.ts +386 -0
  155. package/dist/esm/expression/expression-builder.js +88 -0
  156. package/dist/esm/expression/expression-wrapper.d.ts +92 -0
  157. package/dist/esm/expression/expression-wrapper.js +50 -0
  158. package/dist/esm/expression/expression.d.ts +1 -1
  159. package/dist/esm/helpers/mysql.d.ts +140 -0
  160. package/dist/esm/helpers/mysql.js +165 -0
  161. package/dist/esm/helpers/postgres.d.ts +133 -0
  162. package/dist/esm/helpers/postgres.js +136 -0
  163. package/dist/esm/index.d.ts +4 -3
  164. package/dist/esm/index.js +2 -1
  165. package/dist/esm/kysely.d.ts +10 -0
  166. package/dist/esm/kysely.js +13 -2
  167. package/dist/esm/migration/file-migration-provider.d.ts +5 -2
  168. package/dist/esm/migration/migrator.d.ts +5 -2
  169. package/dist/esm/operation-node/aggregate-function-node.d.ts +3 -3
  170. package/dist/esm/operation-node/create-index-node.d.ts +2 -0
  171. package/dist/esm/operation-node/delete-query-node.d.ts +0 -1
  172. package/dist/esm/operation-node/delete-query-node.js +0 -6
  173. package/dist/esm/operation-node/function-node.d.ts +13 -0
  174. package/dist/esm/operation-node/function-node.js +17 -0
  175. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  176. package/dist/esm/operation-node/operation-node-transformer.js +9 -0
  177. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  178. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  179. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  180. package/dist/esm/operation-node/operator-node.d.ts +13 -2
  181. package/dist/esm/operation-node/operator-node.js +34 -3
  182. package/dist/esm/operation-node/query-node.d.ts +25 -8
  183. package/dist/esm/operation-node/query-node.js +9 -2
  184. package/dist/esm/operation-node/select-query-node.d.ts +0 -1
  185. package/dist/esm/operation-node/select-query-node.js +0 -6
  186. package/dist/esm/operation-node/update-query-node.d.ts +0 -1
  187. package/dist/esm/operation-node/update-query-node.js +0 -6
  188. package/dist/esm/parser/binary-operation-parser.d.ts +9 -10
  189. package/dist/esm/parser/binary-operation-parser.js +85 -37
  190. package/dist/esm/parser/coalesce-parser.d.ts +0 -2
  191. package/dist/esm/parser/coalesce-parser.js +1 -7
  192. package/dist/esm/parser/expression-parser.d.ts +7 -3
  193. package/dist/esm/parser/expression-parser.js +3 -3
  194. package/dist/esm/parser/group-by-parser.d.ts +3 -2
  195. package/dist/esm/parser/group-by-parser.js +3 -0
  196. package/dist/esm/parser/insert-values-parser.d.ts +4 -1
  197. package/dist/esm/parser/insert-values-parser.js +18 -12
  198. package/dist/esm/parser/join-parser.js +2 -2
  199. package/dist/esm/parser/parse-utils.d.ts +0 -2
  200. package/dist/esm/parser/parse-utils.js +0 -6
  201. package/dist/esm/parser/returning-parser.d.ts +2 -1
  202. package/dist/esm/parser/select-parser.d.ts +5 -13
  203. package/dist/esm/parser/select-parser.js +7 -3
  204. package/dist/esm/parser/table-parser.d.ts +5 -3
  205. package/dist/esm/parser/unary-operation-parser.d.ts +5 -2
  206. package/dist/esm/parser/unary-operation-parser.js +8 -8
  207. package/dist/esm/parser/update-set-parser.d.ts +4 -1
  208. package/dist/esm/parser/update-set-parser.js +7 -2
  209. package/dist/esm/parser/value-parser.d.ts +5 -0
  210. package/dist/esm/parser/value-parser.js +1 -3
  211. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.d.ts +1 -1
  212. package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-plugin.js +1 -1
  213. package/dist/esm/query-builder/aggregate-function-builder.d.ts +40 -113
  214. package/dist/esm/query-builder/aggregate-function-builder.js +24 -64
  215. package/dist/esm/query-builder/delete-query-builder.d.ts +220 -201
  216. package/dist/esm/query-builder/delete-query-builder.js +24 -30
  217. package/dist/esm/query-builder/delete-result.js +3 -0
  218. package/dist/esm/query-builder/deprecated-having-expression-builder.d.ts +62 -0
  219. package/dist/esm/query-builder/deprecated-having-expression-builder.js +2 -0
  220. package/dist/esm/query-builder/deprecated-on-expression-builder.d.ts +62 -0
  221. package/dist/esm/query-builder/deprecated-on-expression-builder.js +2 -0
  222. package/dist/esm/query-builder/deprecated-where-expression-builder.d.ts +62 -0
  223. package/dist/esm/query-builder/deprecated-where-expression-builder.js +2 -0
  224. package/dist/esm/query-builder/function-module.d.ts +40 -12
  225. package/dist/esm/query-builder/function-module.js +42 -328
  226. package/dist/esm/query-builder/having-interface.d.ts +19 -16
  227. package/dist/esm/query-builder/insert-query-builder.d.ts +75 -26
  228. package/dist/esm/query-builder/insert-query-builder.js +25 -33
  229. package/dist/esm/query-builder/insert-result.js +3 -0
  230. package/dist/esm/query-builder/join-builder.d.ts +23 -26
  231. package/dist/esm/query-builder/join-builder.js +18 -23
  232. package/dist/esm/query-builder/no-result-error.d.ts +1 -0
  233. package/dist/esm/query-builder/no-result-error.js +3 -0
  234. package/dist/esm/query-builder/on-conflict-builder.d.ts +158 -276
  235. package/dist/esm/query-builder/on-conflict-builder.js +54 -38
  236. package/dist/esm/query-builder/over-builder.d.ts +5 -0
  237. package/dist/esm/query-builder/over-builder.js +7 -0
  238. package/dist/esm/query-builder/returning-interface.d.ts +2 -2
  239. package/dist/esm/query-builder/select-query-builder.d.ts +148 -237
  240. package/dist/esm/query-builder/select-query-builder.js +337 -82
  241. package/dist/esm/query-builder/update-query-builder.d.ts +145 -213
  242. package/dist/esm/query-builder/update-query-builder.js +25 -119
  243. package/dist/esm/query-builder/update-result.js +3 -0
  244. package/dist/esm/query-builder/where-interface.d.ts +71 -184
  245. package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
  246. package/dist/esm/query-compiler/default-query-compiler.js +17 -1
  247. package/dist/esm/query-creator.d.ts +9 -2
  248. package/dist/esm/query-creator.js +1 -24
  249. package/dist/esm/query-executor/query-executor.d.ts +3 -3
  250. package/dist/esm/raw-builder/raw-builder.d.ts +5 -3
  251. package/dist/esm/raw-builder/raw-builder.js +13 -7
  252. package/dist/esm/raw-builder/sql.d.ts +17 -9
  253. package/dist/esm/raw-builder/sql.js +8 -2
  254. package/dist/esm/schema/alter-column-builder.d.ts +5 -0
  255. package/dist/esm/schema/alter-column-builder.js +7 -0
  256. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.d.ts +5 -0
  257. package/dist/esm/schema/alter-table-add-foreign-key-constraint-builder.js +7 -0
  258. package/dist/esm/schema/alter-table-drop-constraint-builder.d.ts +5 -0
  259. package/dist/esm/schema/alter-table-drop-constraint-builder.js +7 -0
  260. package/dist/esm/schema/column-definition-builder.d.ts +6 -1
  261. package/dist/esm/schema/column-definition-builder.js +8 -1
  262. package/dist/esm/schema/create-index-builder.d.ts +51 -9
  263. package/dist/esm/schema/create-index-builder.js +17 -0
  264. package/dist/esm/schema/create-schema-builder.d.ts +5 -0
  265. package/dist/esm/schema/create-schema-builder.js +7 -0
  266. package/dist/esm/schema/create-table-builder.d.ts +3 -1
  267. package/dist/esm/schema/create-table-builder.js +3 -1
  268. package/dist/esm/schema/create-type-builder.d.ts +5 -0
  269. package/dist/esm/schema/create-type-builder.js +7 -0
  270. package/dist/esm/schema/create-view-builder.d.ts +5 -0
  271. package/dist/esm/schema/create-view-builder.js +7 -0
  272. package/dist/esm/schema/drop-index-builder.d.ts +5 -0
  273. package/dist/esm/schema/drop-index-builder.js +7 -0
  274. package/dist/esm/schema/drop-schema-builder.d.ts +5 -0
  275. package/dist/esm/schema/drop-schema-builder.js +7 -0
  276. package/dist/esm/schema/drop-table-builder.d.ts +5 -0
  277. package/dist/esm/schema/drop-table-builder.js +7 -0
  278. package/dist/esm/schema/drop-type-builder.d.ts +5 -0
  279. package/dist/esm/schema/drop-type-builder.js +7 -0
  280. package/dist/esm/schema/drop-view-builder.d.ts +5 -0
  281. package/dist/esm/schema/drop-view-builder.js +7 -0
  282. package/dist/esm/schema/foreign-key-constraint-builder.d.ts +5 -0
  283. package/dist/esm/schema/foreign-key-constraint-builder.js +7 -0
  284. package/dist/esm/util/compilable.d.ts +1 -0
  285. package/dist/esm/util/compilable.js +4 -1
  286. package/dist/esm/util/explainable.d.ts +35 -0
  287. package/dist/esm/util/log.d.ts +2 -0
  288. package/dist/esm/util/object-utils.js +1 -1
  289. package/dist/esm/util/streamable.d.ts +29 -0
  290. package/dist/esm/util/streamable.js +2 -0
  291. package/dist/esm/util/type-utils.d.ts +1 -0
  292. package/helpers/mysql.d.ts +1 -0
  293. package/helpers/mysql.js +1 -0
  294. package/helpers/postgres.d.ts +1 -0
  295. package/helpers/postgres.js +1 -0
  296. package/package.json +26 -9
  297. package/dist/cjs/query-builder/expression-builder.d.ts +0 -126
  298. package/dist/cjs/query-builder/expression-builder.js +0 -107
  299. package/dist/esm/query-builder/expression-builder.d.ts +0 -126
  300. 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 { QueryNode } from '../operation-node/query-node.js';
8
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
@@ -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
  *
@@ -1011,7 +905,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1011
905
  * await db
1012
906
  * .selectFrom('person')
1013
907
  * .selectAll()
1014
- * .orderBy((qb) => qb.selectFrom('pet')
908
+ * .orderBy((eb) => eb.selectFrom('pet')
1015
909
  * .select('pet.name')
1016
910
  * .whereRef('pet.owner_id', '=', 'person.id')
1017
911
  * .limit(1)
@@ -1160,8 +1054,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1160
1054
  * group by "first_name"
1161
1055
  * ```
1162
1056
  */
1163
- groupBy(groupBy: ReadonlyArray<GroupByExpression<DB, TB, O>>): SelectQueryBuilder<DB, TB, O>;
1164
- groupBy(groupBy: GroupByExpression<DB, TB, O>): SelectQueryBuilder<DB, TB, O>;
1057
+ groupBy(groupBy: GroupByArg<DB, TB, O>): SelectQueryBuilder<DB, TB, O>;
1165
1058
  /**
1166
1059
  * Adds a limit clause to the query.
1167
1060
  *
@@ -1322,7 +1215,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1322
1215
  * db.selectFrom('person')
1323
1216
  * .select(['id', 'first_name'])
1324
1217
  * .clearSelect()
1325
- * .select(['id','gender'])
1218
+ * .select(['id', 'gender'])
1326
1219
  * ```
1327
1220
  *
1328
1221
  * The generated SQL(PostgreSQL):
@@ -1333,7 +1226,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1333
1226
  */
1334
1227
  clearSelect(): SelectQueryBuilder<DB, TB, {}>;
1335
1228
  /**
1336
- * Clears all where clauses from the query.
1229
+ * Clears all where expressions from the query.
1337
1230
  *
1338
1231
  * ### Examples
1339
1232
  *
@@ -1410,7 +1303,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1410
1303
  */
1411
1304
  clearOrderBy(): SelectQueryBuilder<DB, TB, O>;
1412
1305
  /**
1413
- * 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.
1414
1308
  *
1415
1309
  * If you want to conditionally call a method on `this`, see
1416
1310
  * the {@link $if} method.
@@ -1439,12 +1333,29 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1439
1333
  /**
1440
1334
  * Call `func(this)` if `condition` is true.
1441
1335
  *
1442
- * This method is especially handy with optional selects. Any `select` or `selectAll`
1443
- * method calls add columns as optional fields to the output type when called inside
1444
- * the `func` callback. This is because we can't know if those selections were actually
1445
- * 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.
1446
1357
  *
1447
- * 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)
1448
1359
  *
1449
1360
  * ### Examples
1450
1361
  *
@@ -1582,10 +1493,10 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1582
1493
  * the query returned no result.
1583
1494
  *
1584
1495
  * By default an instance of {@link NoResultError} is thrown, but you can
1585
- * 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
1586
1497
  * error.
1587
1498
  */
1588
- executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor): Promise<Simplify<O>>;
1499
+ executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor | ((node: QueryNode) => Error)): Promise<Simplify<O>>;
1589
1500
  /**
1590
1501
  * Executes the query and streams the rows.
1591
1502
  *
@@ -1614,7 +1525,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1614
1525
  */
1615
1526
  stream(chunkSize?: number): AsyncIterableIterator<O>;
1616
1527
  /**
1617
- * Executes query with `explain` statement before `select` keyword.
1528
+ * Executes query with `explain` statement before the main query.
1618
1529
  *
1619
1530
  * ```ts
1620
1531
  * const explained = await db