kysely 0.26.1 → 0.26.3

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 (226) hide show
  1. package/README.md +6 -6
  2. package/dist/cjs/dialect/dialect-adapter-base.d.ts +3 -3
  3. package/dist/cjs/dialect/mysql/mysql-adapter.d.ts +3 -2
  4. package/dist/cjs/dialect/mysql/mysql-adapter.js +2 -2
  5. package/dist/cjs/dialect/postgres/postgres-adapter.d.ts +3 -2
  6. package/dist/cjs/dialect/postgres/postgres-adapter.js +2 -2
  7. package/dist/cjs/dialect/postgres/postgres-dialect-config.d.ts +2 -2
  8. package/dist/cjs/dialect/sqlite/sqlite-adapter.d.ts +4 -2
  9. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +2 -2
  10. package/dist/cjs/driver/runtime-driver.js +17 -2
  11. package/dist/cjs/expression/expression-builder.d.ts +300 -27
  12. package/dist/cjs/expression/expression-builder.js +36 -26
  13. package/dist/cjs/expression/expression-wrapper.d.ts +177 -8
  14. package/dist/cjs/expression/expression-wrapper.js +4 -4
  15. package/dist/cjs/expression/expression.d.ts +64 -1
  16. package/dist/cjs/helpers/mysql.d.ts +14 -11
  17. package/dist/cjs/helpers/mysql.js +21 -32
  18. package/dist/cjs/helpers/postgres.d.ts +8 -5
  19. package/dist/cjs/helpers/postgres.js +8 -5
  20. package/dist/cjs/helpers/sqlite.d.ts +164 -0
  21. package/dist/cjs/helpers/sqlite.js +180 -0
  22. package/dist/cjs/index.d.ts +5 -3
  23. package/dist/cjs/index.js +1 -0
  24. package/dist/cjs/kysely.d.ts +4 -3
  25. package/dist/cjs/kysely.js +1 -1
  26. package/dist/cjs/operation-node/common-table-expression-node.d.ts +4 -0
  27. package/dist/cjs/operation-node/common-table-expression-node.js +6 -0
  28. package/dist/cjs/operation-node/delete-query-node.d.ts +1 -1
  29. package/dist/cjs/operation-node/delete-query-node.js +3 -3
  30. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  31. package/dist/cjs/operation-node/operation-node-transformer.js +8 -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 +3 -3
  36. package/dist/cjs/operation-node/operator-node.js +3 -0
  37. package/dist/cjs/operation-node/order-by-node.d.ts +2 -2
  38. package/dist/cjs/operation-node/order-by-node.js +4 -4
  39. package/dist/cjs/operation-node/over-node.d.ts +1 -1
  40. package/dist/cjs/operation-node/over-node.js +3 -3
  41. package/dist/cjs/operation-node/select-query-node.d.ts +5 -4
  42. package/dist/cjs/operation-node/select-query-node.js +13 -7
  43. package/dist/cjs/operation-node/tuple-node.d.ts +12 -0
  44. package/dist/cjs/operation-node/tuple-node.js +18 -0
  45. package/dist/cjs/parser/binary-operation-parser.d.ts +11 -7
  46. package/dist/cjs/parser/binary-operation-parser.js +35 -46
  47. package/dist/cjs/parser/expression-parser.d.ts +10 -5
  48. package/dist/cjs/parser/join-parser.d.ts +2 -2
  49. package/dist/cjs/parser/join-parser.js +2 -3
  50. package/dist/cjs/parser/order-by-parser.d.ts +6 -2
  51. package/dist/cjs/parser/order-by-parser.js +41 -7
  52. package/dist/cjs/parser/parse-utils.js +2 -2
  53. package/dist/cjs/parser/reference-parser.d.ts +2 -2
  54. package/dist/cjs/parser/reference-parser.js +1 -1
  55. package/dist/cjs/parser/returning-parser.d.ts +2 -1
  56. package/dist/cjs/parser/select-parser.d.ts +20 -9
  57. package/dist/cjs/parser/set-operation-parser.d.ts +3 -1
  58. package/dist/cjs/parser/set-operation-parser.js +13 -4
  59. package/dist/cjs/parser/tuple-parser.d.ts +47 -0
  60. package/dist/cjs/parser/tuple-parser.js +2 -0
  61. package/dist/cjs/parser/value-parser.d.ts +5 -3
  62. package/dist/cjs/parser/value-parser.js +12 -1
  63. package/dist/cjs/parser/with-parser.d.ts +3 -2
  64. package/dist/cjs/parser/with-parser.js +16 -4
  65. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +3 -3
  66. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +4 -8
  67. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
  68. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +50 -14
  69. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -5
  70. package/dist/cjs/query-builder/aggregate-function-builder.js +2 -2
  71. package/dist/cjs/query-builder/case-builder.js +8 -4
  72. package/dist/cjs/query-builder/cte-builder.d.ts +20 -0
  73. package/dist/cjs/query-builder/cte-builder.js +39 -0
  74. package/dist/cjs/query-builder/delete-query-builder.d.ts +39 -10
  75. package/dist/cjs/query-builder/delete-query-builder.js +3 -3
  76. package/dist/cjs/query-builder/function-module.d.ts +41 -6
  77. package/dist/cjs/query-builder/function-module.js +3 -0
  78. package/dist/cjs/query-builder/having-interface.d.ts +2 -5
  79. package/dist/cjs/query-builder/insert-query-builder.d.ts +5 -3
  80. package/dist/cjs/query-builder/join-builder.d.ts +2 -6
  81. package/dist/cjs/query-builder/join-builder.js +2 -2
  82. package/dist/cjs/query-builder/json-path-builder.d.ts +59 -3
  83. package/dist/cjs/query-builder/on-conflict-builder.d.ts +65 -12
  84. package/dist/cjs/query-builder/on-conflict-builder.js +4 -4
  85. package/dist/cjs/query-builder/over-builder.js +1 -1
  86. package/dist/cjs/query-builder/returning-interface.d.ts +3 -2
  87. package/dist/cjs/query-builder/select-query-builder-expression.d.ts +20 -0
  88. package/dist/cjs/query-builder/select-query-builder-expression.js +2 -0
  89. package/dist/cjs/query-builder/select-query-builder.d.ts +206 -67
  90. package/dist/cjs/query-builder/select-query-builder.js +75 -924
  91. package/dist/cjs/query-builder/update-query-builder.d.ts +39 -10
  92. package/dist/cjs/query-builder/update-query-builder.js +2 -2
  93. package/dist/cjs/query-builder/where-interface.d.ts +32 -8
  94. package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
  95. package/dist/cjs/query-compiler/default-query-compiler.js +39 -7
  96. package/dist/cjs/query-creator.d.ts +76 -2
  97. package/dist/cjs/query-creator.js +36 -6
  98. package/dist/cjs/raw-builder/raw-builder.d.ts +87 -51
  99. package/dist/cjs/raw-builder/raw-builder.js +18 -45
  100. package/dist/cjs/raw-builder/sql.js +8 -8
  101. package/dist/cjs/schema/alter-table-builder.d.ts +4 -0
  102. package/dist/cjs/schema/alter-table-builder.js +12 -0
  103. package/dist/cjs/schema/create-index-builder.d.ts +1 -1
  104. package/dist/cjs/schema/create-index-builder.js +1 -1
  105. package/dist/cjs/schema/create-view-builder.d.ts +2 -2
  106. package/dist/cjs/util/column-type.d.ts +7 -6
  107. package/dist/cjs/util/infer-result.d.ts +2 -1
  108. package/dist/cjs/util/json-object-args.d.ts +3 -0
  109. package/dist/cjs/util/json-object-args.js +35 -0
  110. package/dist/cjs/util/object-utils.d.ts +1 -0
  111. package/dist/cjs/util/object-utils.js +9 -1
  112. package/dist/cjs/util/type-utils.d.ts +16 -17
  113. package/dist/esm/dialect/dialect-adapter-base.d.ts +3 -3
  114. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +3 -2
  115. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
  116. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +3 -2
  117. package/dist/esm/dialect/postgres/postgres-adapter.js +2 -2
  118. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +2 -2
  119. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +4 -2
  120. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -2
  121. package/dist/esm/driver/runtime-driver.js +17 -2
  122. package/dist/esm/expression/expression-builder.d.ts +300 -27
  123. package/dist/esm/expression/expression-builder.js +40 -30
  124. package/dist/esm/expression/expression-wrapper.d.ts +177 -8
  125. package/dist/esm/expression/expression-wrapper.js +5 -5
  126. package/dist/esm/expression/expression.d.ts +64 -1
  127. package/dist/esm/helpers/mysql.d.ts +14 -11
  128. package/dist/esm/helpers/mysql.js +21 -32
  129. package/dist/esm/helpers/postgres.d.ts +8 -5
  130. package/dist/esm/helpers/postgres.js +8 -5
  131. package/dist/esm/helpers/sqlite.d.ts +164 -0
  132. package/dist/esm/helpers/sqlite.js +175 -0
  133. package/dist/esm/index.d.ts +5 -3
  134. package/dist/esm/index.js +1 -0
  135. package/dist/esm/kysely.d.ts +4 -3
  136. package/dist/esm/kysely.js +1 -1
  137. package/dist/esm/operation-node/common-table-expression-node.d.ts +4 -0
  138. package/dist/esm/operation-node/common-table-expression-node.js +6 -0
  139. package/dist/esm/operation-node/delete-query-node.d.ts +1 -1
  140. package/dist/esm/operation-node/delete-query-node.js +3 -3
  141. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  142. package/dist/esm/operation-node/operation-node-transformer.js +8 -0
  143. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  144. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  145. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  146. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  147. package/dist/esm/operation-node/operator-node.js +3 -0
  148. package/dist/esm/operation-node/order-by-node.d.ts +2 -2
  149. package/dist/esm/operation-node/order-by-node.js +4 -4
  150. package/dist/esm/operation-node/over-node.d.ts +1 -1
  151. package/dist/esm/operation-node/over-node.js +3 -3
  152. package/dist/esm/operation-node/select-query-node.d.ts +5 -4
  153. package/dist/esm/operation-node/select-query-node.js +13 -7
  154. package/dist/esm/operation-node/tuple-node.d.ts +12 -0
  155. package/dist/esm/operation-node/tuple-node.js +16 -0
  156. package/dist/esm/parser/binary-operation-parser.d.ts +11 -7
  157. package/dist/esm/parser/binary-operation-parser.js +36 -47
  158. package/dist/esm/parser/expression-parser.d.ts +10 -5
  159. package/dist/esm/parser/join-parser.d.ts +2 -2
  160. package/dist/esm/parser/join-parser.js +3 -4
  161. package/dist/esm/parser/order-by-parser.d.ts +6 -2
  162. package/dist/esm/parser/order-by-parser.js +40 -7
  163. package/dist/esm/parser/parse-utils.js +3 -3
  164. package/dist/esm/parser/reference-parser.d.ts +2 -2
  165. package/dist/esm/parser/reference-parser.js +1 -1
  166. package/dist/esm/parser/returning-parser.d.ts +2 -1
  167. package/dist/esm/parser/select-parser.d.ts +20 -9
  168. package/dist/esm/parser/set-operation-parser.d.ts +3 -1
  169. package/dist/esm/parser/set-operation-parser.js +11 -2
  170. package/dist/esm/parser/tuple-parser.d.ts +47 -0
  171. package/dist/esm/parser/tuple-parser.js +2 -0
  172. package/dist/esm/parser/value-parser.d.ts +5 -3
  173. package/dist/esm/parser/value-parser.js +10 -1
  174. package/dist/esm/parser/with-parser.d.ts +3 -2
  175. package/dist/esm/parser/with-parser.js +16 -4
  176. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +3 -3
  177. package/dist/esm/plugin/camel-case/camel-case-plugin.js +5 -9
  178. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
  179. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +51 -15
  180. package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -5
  181. package/dist/esm/query-builder/aggregate-function-builder.js +3 -3
  182. package/dist/esm/query-builder/case-builder.js +10 -6
  183. package/dist/esm/query-builder/cte-builder.d.ts +20 -0
  184. package/dist/esm/query-builder/cte-builder.js +36 -0
  185. package/dist/esm/query-builder/delete-query-builder.d.ts +39 -10
  186. package/dist/esm/query-builder/delete-query-builder.js +4 -4
  187. package/dist/esm/query-builder/function-module.d.ts +41 -6
  188. package/dist/esm/query-builder/function-module.js +3 -0
  189. package/dist/esm/query-builder/having-interface.d.ts +2 -5
  190. package/dist/esm/query-builder/insert-query-builder.d.ts +5 -3
  191. package/dist/esm/query-builder/join-builder.d.ts +2 -6
  192. package/dist/esm/query-builder/join-builder.js +3 -3
  193. package/dist/esm/query-builder/json-path-builder.d.ts +59 -3
  194. package/dist/esm/query-builder/on-conflict-builder.d.ts +65 -12
  195. package/dist/esm/query-builder/on-conflict-builder.js +5 -5
  196. package/dist/esm/query-builder/over-builder.js +1 -1
  197. package/dist/esm/query-builder/returning-interface.d.ts +3 -2
  198. package/dist/esm/query-builder/select-query-builder-expression.d.ts +20 -0
  199. package/dist/esm/query-builder/select-query-builder-expression.js +2 -0
  200. package/dist/esm/query-builder/select-query-builder.d.ts +206 -67
  201. package/dist/esm/query-builder/select-query-builder.js +75 -923
  202. package/dist/esm/query-builder/update-query-builder.d.ts +39 -10
  203. package/dist/esm/query-builder/update-query-builder.js +3 -3
  204. package/dist/esm/query-builder/where-interface.d.ts +32 -8
  205. package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
  206. package/dist/esm/query-compiler/default-query-compiler.js +39 -7
  207. package/dist/esm/query-creator.d.ts +76 -2
  208. package/dist/esm/query-creator.js +37 -7
  209. package/dist/esm/raw-builder/raw-builder.d.ts +87 -51
  210. package/dist/esm/raw-builder/raw-builder.js +17 -42
  211. package/dist/esm/raw-builder/sql.js +9 -9
  212. package/dist/esm/schema/alter-table-builder.d.ts +4 -0
  213. package/dist/esm/schema/alter-table-builder.js +12 -0
  214. package/dist/esm/schema/create-index-builder.d.ts +1 -1
  215. package/dist/esm/schema/create-index-builder.js +2 -2
  216. package/dist/esm/schema/create-view-builder.d.ts +2 -2
  217. package/dist/esm/util/column-type.d.ts +7 -6
  218. package/dist/esm/util/infer-result.d.ts +2 -1
  219. package/dist/esm/util/json-object-args.d.ts +3 -0
  220. package/dist/esm/util/json-object-args.js +32 -0
  221. package/dist/esm/util/object-utils.d.ts +1 -0
  222. package/dist/esm/util/object-utils.js +7 -0
  223. package/dist/esm/util/type-utils.d.ts +16 -17
  224. package/helpers/sqlite.d.ts +1 -0
  225. package/helpers/sqlite.js +1 -0
  226. package/package.json +7 -4
@@ -1,48 +1,31 @@
1
- import { AliasNode } from '../operation-node/alias-node.js';
2
1
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
3
2
  import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
4
3
  import { TableExpression } from '../parser/table-parser.js';
5
- import { SelectExpression, Selection, SelectArg, AllSelection } from '../parser/select-parser.js';
4
+ import { SelectExpression, Selection, AllSelection, SelectCallback, CallbackSelection } from '../parser/select-parser.js';
6
5
  import { ReferenceExpression } from '../parser/reference-parser.js';
7
6
  import { SelectQueryNode } from '../operation-node/select-query-node.js';
8
7
  import { QueryNode } from '../operation-node/query-node.js';
9
- import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, Simplify, SimplifySingleResult } from '../util/type-utils.js';
10
- import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js';
8
+ import { DrainOuterGeneric, NarrowPartial, Nullable, ShallowRecord, Simplify, SimplifySingleResult, SqlBool } from '../util/type-utils.js';
9
+ import { OrderByDirectionExpression, OrderByExpression, DirectedOrderByStringReference, UndirectedOrderByExpression } from '../parser/order-by-parser.js';
11
10
  import { Compilable } from '../util/compilable.js';
12
11
  import { QueryExecutor } from '../query-executor/query-executor.js';
13
12
  import { QueryId } from '../util/query-id.js';
14
13
  import { GroupByArg } from '../parser/group-by-parser.js';
15
14
  import { KyselyPlugin } from '../plugin/kysely-plugin.js';
16
- import { WhereExpressionFactory, WhereInterface } from './where-interface.js';
15
+ import { WhereInterface } from './where-interface.js';
17
16
  import { NoResultErrorConstructor } from './no-result-error.js';
18
- import { HavingExpressionFactory, HavingInterface } from './having-interface.js';
17
+ import { HavingInterface } from './having-interface.js';
19
18
  import { Explainable, ExplainFormat } from '../util/explainable.js';
19
+ import { SetOperandExpression } from '../parser/set-operation-parser.js';
20
20
  import { AliasedExpression, Expression } from '../expression/expression.js';
21
21
  import { ComparisonOperatorExpression, OperandValueExpressionOrList } from '../parser/binary-operation-parser.js';
22
22
  import { KyselyTypeError } from '../util/type-error.js';
23
23
  import { Selectable } from '../util/column-type.js';
24
24
  import { Streamable } from '../util/streamable.js';
25
- export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, HavingInterface<DB, TB>, Expression<O>, Compilable<O>, Explainable, Streamable<O> {
26
- #private;
27
- constructor(props: SelectQueryBuilderProps);
28
- /** @private */
29
- /**
30
- * All expressions need to have this getter for complicated type-related reasons.
31
- * Simply add this getter for your expression and always return `undefined` from it:
32
- *
33
- * ```ts
34
- * class SomeExpression<T> implements Expression<T> {
35
- * get expressionType(): T | undefined {
36
- * return undefined
37
- * }
38
- * }
39
- * ```
40
- *
41
- * The getter is needed to make the expression assignable to another expression only
42
- * if the types `T` are assignable. Without this property (or some other property
43
- * that references `T`), you could assing `Expression<string>` to `Expression<number>`.
44
- */
45
- get expressionType(): O | undefined;
25
+ import { ExpressionOrFactory } from '../parser/expression-parser.js';
26
+ import { ExpressionWrapper } from '../expression/expression-wrapper.js';
27
+ import { SelectQueryBuilderExpression } from './select-query-builder-expression.js';
28
+ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInterface<DB, TB>, HavingInterface<DB, TB>, SelectQueryBuilderExpression<O>, Compilable<O>, Explainable, Streamable<O> {
46
29
  /**
47
30
  * Adds a `where` expression to the query.
48
31
  *
@@ -96,7 +79,34 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
96
79
  * select * from "person" where "id" in ($1, $2, $3)
97
80
  * ```
98
81
  *
99
- * <!-- siteExample("where", "OR where", 30) -->
82
+ * <!-- siteExample("where", "Object filter", 30) -->
83
+ *
84
+ * You can use the `and` function to create a simple equality
85
+ * filter using an object
86
+ *
87
+ * ```ts
88
+ * const persons = await db
89
+ * .selectFrom('person')
90
+ * .selectAll()
91
+ * .where((eb) => eb.and({
92
+ * first_name: 'Jennifer',
93
+ * last_name: eb.ref('first_name')
94
+ * }))
95
+ * .execute()
96
+ * ```
97
+ *
98
+ * The generated SQL (PostgreSQL):
99
+ *
100
+ * ```sql
101
+ * select *
102
+ * from "person"
103
+ * where (
104
+ * "first_name" = $1
105
+ * and "last_name" = "first_name"
106
+ * )
107
+ * ```
108
+ *
109
+ * <!-- siteExample("where", "OR where", 40) -->
100
110
  *
101
111
  * To combine conditions using `OR`, you can use the expression builder.
102
112
  * There are two ways to create `OR` expressions. Both are shown in this
@@ -131,7 +141,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
131
141
  * )
132
142
  * ```
133
143
  *
134
- * <!-- siteExample("where", "Conditional where calls", 40) -->
144
+ * <!-- siteExample("where", "Conditional where calls", 50) -->
135
145
  *
136
146
  * You can add expressions conditionally like this:
137
147
  *
@@ -226,7 +236,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
226
236
  * select * from "person" where "id" in ($1, $2, $3)
227
237
  * ```
228
238
  *
229
- * <!-- siteExample("where", "Complex where clause", 50) -->
239
+ * <!-- siteExample("where", "Complex where clause", 60) -->
230
240
  *
231
241
  * For complex `where` expressions you can pass in a single callback and
232
242
  * use the `ExpressionBuilder` to build your expression:
@@ -316,8 +326,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
316
326
  * ```
317
327
  */
318
328
  where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
319
- where(factory: WhereExpressionFactory<DB, TB>): SelectQueryBuilder<DB, TB, O>;
320
- where(expression: Expression<any>): SelectQueryBuilder<DB, TB, O>;
329
+ where(expression: ExpressionOrFactory<DB, TB, SqlBool>): SelectQueryBuilder<DB, TB, O>;
321
330
  /**
322
331
  * Adds a `where` clause where both sides of the operator are references
323
332
  * to columns.
@@ -375,8 +384,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
375
384
  * instead of a `where` statement.
376
385
  */
377
386
  having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: ComparisonOperatorExpression, rhs: OperandValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
378
- having(factory: HavingExpressionFactory<DB, TB>): SelectQueryBuilder<DB, TB, O>;
379
- having(expression: Expression<any>): SelectQueryBuilder<DB, TB, O>;
387
+ having(expression: ExpressionOrFactory<DB, TB, SqlBool>): SelectQueryBuilder<DB, TB, O>;
380
388
  /**
381
389
  * Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
382
390
  * instead of a `where` statement.
@@ -568,7 +576,9 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
568
576
  * persons[0].id
569
577
  * ```
570
578
  */
571
- select<SE extends SelectExpression<DB, TB>>(selection: SelectArg<DB, TB, SE>): SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
579
+ select<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
580
+ select<CB extends SelectCallback<DB, TB>>(callback: CB): SelectQueryBuilder<DB, TB, O & CallbackSelection<DB, TB, CB>>;
581
+ select<SE extends SelectExpression<DB, TB>>(selection: SE): SelectQueryBuilder<DB, TB, O & Selection<DB, TB, SE>>;
572
582
  /**
573
583
  * Adds `distinct on` expressions to the select clause.
574
584
  *
@@ -917,14 +927,28 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
917
927
  /**
918
928
  * Adds an `order by` clause to the query.
919
929
  *
920
- * `orderBy` calls are additive. To order by multiple columns, call `orderBy`
921
- * multiple times.
930
+ * `orderBy` calls are additive. Meaning, additional `orderBy` calls append to
931
+ * the existing order by clause.
932
+ *
933
+ * In a single call you can add a single column/expression or multiple columns/expressions.
922
934
  *
923
- * The first argument is the expression to order by and the second is the
924
- * order (`asc` or `desc`).
935
+ * Single column/expression calls can have 1-2 arguments. The first argument is
936
+ * the expression to order by (optionally including the direction) while the second
937
+ * optional argument is the direction (`asc` or `desc`).
925
938
  *
926
939
  * ### Examples
927
940
  *
941
+ * Single column/expression per call:
942
+ *
943
+ * ```ts
944
+ * await db
945
+ * .selectFrom('person')
946
+ * .select('person.first_name as fn')
947
+ * .orderBy('id')
948
+ * .orderBy('fn desc')
949
+ * .execute()
950
+ * ```
951
+ *
928
952
  * ```ts
929
953
  * await db
930
954
  * .selectFrom('person')
@@ -942,6 +966,16 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
942
966
  * order by "id" asc, "fn" desc
943
967
  * ```
944
968
  *
969
+ * Multiple columns/expressions per call:
970
+ *
971
+ * ```ts
972
+ * await db
973
+ * .selectFrom('person')
974
+ * .select('person.first_name as fn')
975
+ * .orderBy(['id', 'fn desc'])
976
+ * .execute()
977
+ * ```
978
+ *
945
979
  * The order by expression can also be a raw sql expression or a subquery
946
980
  * in addition to column references:
947
981
  *
@@ -1001,7 +1035,9 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1001
1035
  * order by "fn" asc
1002
1036
  * ```
1003
1037
  */
1004
- orderBy(orderBy: OrderByExpression<DB, TB, O>, direction?: OrderByDirectionExpression): SelectQueryBuilder<DB, TB, O>;
1038
+ orderBy(orderBy: UndirectedOrderByExpression<DB, TB, O>, direction?: OrderByDirectionExpression): SelectQueryBuilder<DB, TB, O>;
1039
+ orderBy(ref: DirectedOrderByStringReference<DB, TB, O>): SelectQueryBuilder<DB, TB, O>;
1040
+ orderBy(refs: ReadonlyArray<OrderByExpression<DB, TB, O>>): SelectQueryBuilder<DB, TB, O>;
1005
1041
  /**
1006
1042
  * Adds a `group by` clause to the query.
1007
1043
  *
@@ -1155,8 +1191,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1155
1191
  * .union(db.selectFrom('pet').select(['id', 'name']))
1156
1192
  * .orderBy('name')
1157
1193
  * ```
1194
+ *
1195
+ * You can provide a callback to get an expression builder.
1196
+ * In the following example, this allows us to wrap the query in parentheses:
1197
+ *
1198
+ * ```ts
1199
+ * db.selectFrom('person')
1200
+ * .select(['id', 'first_name as name'])
1201
+ * .union((eb) => eb.parens(
1202
+ * eb.selectFrom('pet').select(['id', 'name'])
1203
+ * ))
1204
+ * .orderBy('name')
1205
+ * ```
1158
1206
  */
1159
- union(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1207
+ union(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1160
1208
  /**
1161
1209
  * Combines another select query or raw expression to this query using `union all`.
1162
1210
  *
@@ -1170,8 +1218,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1170
1218
  * .unionAll(db.selectFrom('pet').select(['id', 'name']))
1171
1219
  * .orderBy('name')
1172
1220
  * ```
1221
+ *
1222
+ * You can provide a callback to get an expression builder.
1223
+ * In the following example, this allows us to wrap the query in parentheses:
1224
+ *
1225
+ * ```ts
1226
+ * db.selectFrom('person')
1227
+ * .select(['id', 'first_name as name'])
1228
+ * .unionAll((eb) => eb.parens(
1229
+ * eb.selectFrom('pet').select(['id', 'name'])
1230
+ * ))
1231
+ * .orderBy('name')
1232
+ * ```
1173
1233
  */
1174
- unionAll(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1234
+ unionAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1175
1235
  /**
1176
1236
  * Combines another select query or raw expression to this query using `intersect`.
1177
1237
  *
@@ -1185,8 +1245,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1185
1245
  * .intersect(db.selectFrom('pet').select(['id', 'name']))
1186
1246
  * .orderBy('name')
1187
1247
  * ```
1248
+ *
1249
+ * You can provide a callback to get an expression builder.
1250
+ * In the following example, this allows us to wrap the query in parentheses:
1251
+ *
1252
+ * ```ts
1253
+ * db.selectFrom('person')
1254
+ * .select(['id', 'first_name as name'])
1255
+ * .intersect((eb) => eb.parens(
1256
+ * eb.selectFrom('pet').select(['id', 'name'])
1257
+ * ))
1258
+ * .orderBy('name')
1259
+ * ```
1188
1260
  */
1189
- intersect(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1261
+ intersect(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1190
1262
  /**
1191
1263
  * Combines another select query or raw expression to this query using `intersect all`.
1192
1264
  *
@@ -1200,8 +1272,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1200
1272
  * .intersectAll(db.selectFrom('pet').select(['id', 'name']))
1201
1273
  * .orderBy('name')
1202
1274
  * ```
1275
+ *
1276
+ * You can provide a callback to get an expression builder.
1277
+ * In the following example, this allows us to wrap the query in parentheses:
1278
+ *
1279
+ * ```ts
1280
+ * db.selectFrom('person')
1281
+ * .select(['id', 'first_name as name'])
1282
+ * .intersectAll((eb) => eb.parens(
1283
+ * eb.selectFrom('pet').select(['id', 'name'])
1284
+ * ))
1285
+ * .orderBy('name')
1286
+ * ```
1203
1287
  */
1204
- intersectAll(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1288
+ intersectAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1205
1289
  /**
1206
1290
  * Combines another select query or raw expression to this query using `except`.
1207
1291
  *
@@ -1215,8 +1299,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1215
1299
  * .except(db.selectFrom('pet').select(['id', 'name']))
1216
1300
  * .orderBy('name')
1217
1301
  * ```
1302
+ *
1303
+ * You can provide a callback to get an expression builder.
1304
+ * In the following example, this allows us to wrap the query in parentheses:
1305
+ *
1306
+ * ```ts
1307
+ * db.selectFrom('person')
1308
+ * .select(['id', 'first_name as name'])
1309
+ * .except((eb) => eb.parens(
1310
+ * eb.selectFrom('pet').select(['id', 'name'])
1311
+ * ))
1312
+ * .orderBy('name')
1313
+ * ```
1218
1314
  */
1219
- except(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1315
+ except(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1220
1316
  /**
1221
1317
  * Combines another select query or raw expression to this query using `except all`.
1222
1318
  *
@@ -1230,8 +1326,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1230
1326
  * .exceptAll(db.selectFrom('pet').select(['id', 'name']))
1231
1327
  * .orderBy('name')
1232
1328
  * ```
1329
+ *
1330
+ * You can provide a callback to get an expression builder.
1331
+ * In the following example, this allows us to wrap the query in parentheses:
1332
+ *
1333
+ * ```ts
1334
+ * db.selectFrom('person')
1335
+ * .select(['id', 'first_name as name'])
1336
+ * .exceptAll((eb) => eb.parens(
1337
+ * eb.selectFrom('pet').select(['id', 'name'])
1338
+ * ))
1339
+ * .orderBy('name')
1340
+ * ```
1233
1341
  */
1234
- exceptAll(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1342
+ exceptAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1235
1343
  /**
1236
1344
  * Gives an alias for the query. This method is only useful for sub queries.
1237
1345
  *
@@ -1251,7 +1359,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1251
1359
  * pets[0].owner_first_name
1252
1360
  * ```
1253
1361
  */
1254
- as<A extends string>(alias: A): AliasedSelectQueryBuilder<DB, TB, O, A>;
1362
+ as<A extends string>(alias: A): AliasedSelectQueryBuilder<O, A>;
1255
1363
  /**
1256
1364
  * Clears all select clauses from the query.
1257
1365
  *
@@ -1445,6 +1553,54 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1445
1553
  * don't support your use case.
1446
1554
  */
1447
1555
  $castTo<T>(): SelectQueryBuilder<DB, TB, T>;
1556
+ /**
1557
+ * Changes the output type from an object to a tuple.
1558
+ *
1559
+ * This doesn't affect the generated SQL in any way. This function is
1560
+ * just a necessary evil when you need to convert a query's output
1561
+ * record type to a tuple type. Typescript doesn't currently offer
1562
+ * tools to do this automatically (without insane hackery).
1563
+ *
1564
+ * The returned object can no longer be executed. It can only be used
1565
+ * as a subquery.
1566
+ *
1567
+ * ### Examples
1568
+ *
1569
+ * ```ts
1570
+ * const result = await db
1571
+ * .selectFrom('person')
1572
+ * .selectAll('person')
1573
+ * .where(({ eb, refTuple, selectFrom }) => eb(
1574
+ * refTuple('first_name', 'last_name'),
1575
+ * 'in',
1576
+ * selectFrom('pet')
1577
+ * .select(['name', 'species'])
1578
+ * .where('pet.species', '!=', 'cat')
1579
+ * .$asTuple('name', 'species')
1580
+ * ))
1581
+ * ```
1582
+ *
1583
+ * The generated SQL(PostgreSQL):
1584
+ *
1585
+ * ```sql
1586
+ * select
1587
+ * "person".*
1588
+ * from
1589
+ * "person"
1590
+ * where
1591
+ * ("first_name", "last_name")
1592
+ * in
1593
+ * (
1594
+ * select "name", "species"
1595
+ * from "pet"
1596
+ * where "pet"."species" != $1
1597
+ * )
1598
+ * ```
1599
+ */
1600
+ $asTuple<K1 extends keyof O, K2 extends Exclude<keyof O, K1>>(key1: K1, key2: K2): keyof O extends K1 | K2 ? ExpressionWrapper<DB, TB, [O[K1], O[K2]]> : KyselyTypeError<'$asTuple() call failed: All selected columns must be provided as arguments'>;
1601
+ $asTuple<K1 extends keyof O, K2 extends Exclude<keyof O, K1>, K3 extends Exclude<keyof O, K1 | K2>>(key1: K1, key2: K2, key3: K3): keyof O extends K1 | K2 | K3 ? ExpressionWrapper<DB, TB, [O[K1], O[K2], O[K3]]> : KyselyTypeError<'$asTuple() call failed: All selected columns must be provided as arguments'>;
1602
+ $asTuple<K1 extends keyof O, K2 extends Exclude<keyof O, K1>, K3 extends Exclude<keyof O, K1 | K2>, K4 extends Exclude<keyof O, K1 | K2 | K3>>(key1: K1, key2: K2, key3: K3, key4: K4): keyof O extends K1 | K2 | K3 | K4 ? ExpressionWrapper<DB, TB, [O[K1], O[K2], O[K3], O[K4]]> : KyselyTypeError<'$asTuple() call failed: All selected columns must be provided as arguments'>;
1603
+ $asTuple<K1 extends keyof O, K2 extends Exclude<keyof O, K1>, K3 extends Exclude<keyof O, K1 | K2>, K4 extends Exclude<keyof O, K1 | K2 | K3>, K5 extends Exclude<keyof O, K1 | K2 | K3 | K4>>(key1: K1, key2: K2, key3: K3, key4: K4, key5: K5): keyof O extends K1 | K2 | K3 | K4 | K5 ? ExpressionWrapper<DB, TB, [O[K1], O[K2], O[K3], O[K4], O[K5]]> : KyselyTypeError<'$asTuple() call failed: All selected columns must be provided as arguments'>;
1448
1604
  /**
1449
1605
  * Narrows (parts of) the output type of the query.
1450
1606
  *
@@ -1630,31 +1786,14 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1630
1786
  */
1631
1787
  explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: Expression<any>): Promise<ER[]>;
1632
1788
  }
1789
+ export declare function createSelectQueryBuilder<DB, TB extends keyof DB, O>(props: SelectQueryBuilderProps): SelectQueryBuilder<DB, TB, O>;
1633
1790
  export interface SelectQueryBuilderProps {
1634
1791
  readonly queryId: QueryId;
1635
1792
  readonly queryNode: SelectQueryNode;
1636
1793
  readonly executor: QueryExecutor;
1637
1794
  }
1638
- /**
1639
- * {@link SelectQueryBuilder} with an alias. The result of calling {@link SelectQueryBuilder.as}.
1640
- */
1641
- export declare class AliasedSelectQueryBuilder<DB, TB extends keyof DB, O = undefined, A extends string = never> implements AliasedExpression<O, A> {
1642
- #private;
1643
- constructor(queryBuilder: SelectQueryBuilder<DB, TB, O>, alias: A);
1644
- /** @private */
1645
- /**
1646
- * Returns the aliased expression.
1647
- */
1648
- get expression(): Expression<O>;
1649
- /** @private */
1650
- /**
1651
- * Returns the alias.
1652
- */
1653
- get alias(): A;
1654
- /**
1655
- * Creates the OperationNode that describes how to compile this expression into SQL.
1656
- */
1657
- toOperationNode(): AliasNode;
1795
+ export interface AliasedSelectQueryBuilder<O = undefined, A extends string = never> extends AliasedExpression<O, A> {
1796
+ get isAliasedSelectQueryBuilder(): true;
1658
1797
  }
1659
1798
  export type SelectQueryBuilderWithInnerJoin<DB, TB extends keyof DB, O, TE extends TableExpression<DB, TB>> = TE extends `${infer T} as ${infer A}` ? T extends keyof DB ? InnerJoinedBuilder<DB, TB, O, A, DB[T]> : never : TE extends keyof DB ? SelectQueryBuilder<DB, TB | TE, O> : TE extends AliasedExpression<infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : TE extends (qb: any) => AliasedExpression<infer QO, infer QA> ? InnerJoinedBuilder<DB, TB, O, QA, QO> : never;
1660
1799
  type InnerJoinedBuilder<DB, TB extends keyof DB, O, A extends string, R> = A extends keyof DB ? SelectQueryBuilder<InnerJoinedDB<DB, A, R>, TB | A, O> : SelectQueryBuilder<DB & ShallowRecord<A, R>, TB | A, O>;