kysely 0.26.1 → 0.26.2

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 (210) 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 +298 -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 +11 -8
  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 +3 -1
  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 +9 -4
  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.js +1 -1
  54. package/dist/cjs/parser/select-parser.d.ts +5 -5
  55. package/dist/cjs/parser/set-operation-parser.d.ts +3 -1
  56. package/dist/cjs/parser/set-operation-parser.js +13 -4
  57. package/dist/cjs/parser/tuple-parser.d.ts +47 -0
  58. package/dist/cjs/parser/tuple-parser.js +2 -0
  59. package/dist/cjs/parser/value-parser.d.ts +4 -2
  60. package/dist/cjs/parser/value-parser.js +12 -1
  61. package/dist/cjs/parser/with-parser.d.ts +3 -2
  62. package/dist/cjs/parser/with-parser.js +16 -4
  63. package/dist/cjs/plugin/camel-case/camel-case-plugin.d.ts +3 -3
  64. package/dist/cjs/plugin/camel-case/camel-case-plugin.js +4 -8
  65. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
  66. package/dist/cjs/plugin/parse-json-results/parse-json-results-plugin.js +50 -14
  67. package/dist/cjs/query-builder/aggregate-function-builder.d.ts +5 -5
  68. package/dist/cjs/query-builder/aggregate-function-builder.js +2 -2
  69. package/dist/cjs/query-builder/case-builder.js +8 -4
  70. package/dist/cjs/query-builder/cte-builder.d.ts +20 -0
  71. package/dist/cjs/query-builder/cte-builder.js +39 -0
  72. package/dist/cjs/query-builder/delete-query-builder.d.ts +34 -7
  73. package/dist/cjs/query-builder/delete-query-builder.js +3 -3
  74. package/dist/cjs/query-builder/function-module.d.ts +41 -6
  75. package/dist/cjs/query-builder/function-module.js +3 -0
  76. package/dist/cjs/query-builder/having-interface.d.ts +2 -5
  77. package/dist/cjs/query-builder/join-builder.d.ts +2 -6
  78. package/dist/cjs/query-builder/join-builder.js +2 -2
  79. package/dist/cjs/query-builder/json-path-builder.d.ts +59 -3
  80. package/dist/cjs/query-builder/on-conflict-builder.d.ts +65 -12
  81. package/dist/cjs/query-builder/on-conflict-builder.js +4 -4
  82. package/dist/cjs/query-builder/over-builder.js +1 -1
  83. package/dist/cjs/query-builder/select-query-builder.d.ts +201 -65
  84. package/dist/cjs/query-builder/select-query-builder.js +72 -924
  85. package/dist/cjs/query-builder/update-query-builder.d.ts +34 -7
  86. package/dist/cjs/query-builder/update-query-builder.js +2 -2
  87. package/dist/cjs/query-builder/where-interface.d.ts +32 -8
  88. package/dist/cjs/query-compiler/default-query-compiler.d.ts +3 -0
  89. package/dist/cjs/query-compiler/default-query-compiler.js +39 -7
  90. package/dist/cjs/query-creator.d.ts +74 -2
  91. package/dist/cjs/query-creator.js +83 -6
  92. package/dist/cjs/raw-builder/raw-builder.d.ts +88 -49
  93. package/dist/cjs/raw-builder/raw-builder.js +18 -45
  94. package/dist/cjs/raw-builder/sql.js +8 -8
  95. package/dist/cjs/schema/alter-table-builder.d.ts +4 -0
  96. package/dist/cjs/schema/alter-table-builder.js +12 -0
  97. package/dist/cjs/schema/create-index-builder.d.ts +1 -1
  98. package/dist/cjs/schema/create-index-builder.js +1 -1
  99. package/dist/cjs/util/column-type.d.ts +7 -6
  100. package/dist/cjs/util/json-object-args.d.ts +3 -0
  101. package/dist/cjs/util/json-object-args.js +35 -0
  102. package/dist/cjs/util/object-utils.d.ts +1 -0
  103. package/dist/cjs/util/object-utils.js +9 -1
  104. package/dist/cjs/util/type-utils.d.ts +10 -10
  105. package/dist/esm/dialect/dialect-adapter-base.d.ts +3 -3
  106. package/dist/esm/dialect/mysql/mysql-adapter.d.ts +3 -2
  107. package/dist/esm/dialect/mysql/mysql-adapter.js +2 -2
  108. package/dist/esm/dialect/postgres/postgres-adapter.d.ts +3 -2
  109. package/dist/esm/dialect/postgres/postgres-adapter.js +2 -2
  110. package/dist/esm/dialect/postgres/postgres-dialect-config.d.ts +2 -2
  111. package/dist/esm/dialect/sqlite/sqlite-adapter.d.ts +4 -2
  112. package/dist/esm/dialect/sqlite/sqlite-adapter.js +2 -2
  113. package/dist/esm/driver/runtime-driver.js +17 -2
  114. package/dist/esm/expression/expression-builder.d.ts +298 -27
  115. package/dist/esm/expression/expression-builder.js +40 -30
  116. package/dist/esm/expression/expression-wrapper.d.ts +177 -8
  117. package/dist/esm/expression/expression-wrapper.js +5 -5
  118. package/dist/esm/expression/expression.d.ts +64 -1
  119. package/dist/esm/helpers/mysql.d.ts +11 -8
  120. package/dist/esm/helpers/mysql.js +21 -32
  121. package/dist/esm/helpers/postgres.d.ts +8 -5
  122. package/dist/esm/helpers/postgres.js +8 -5
  123. package/dist/esm/helpers/sqlite.d.ts +164 -0
  124. package/dist/esm/helpers/sqlite.js +175 -0
  125. package/dist/esm/index.d.ts +3 -1
  126. package/dist/esm/index.js +1 -0
  127. package/dist/esm/kysely.d.ts +4 -3
  128. package/dist/esm/kysely.js +1 -1
  129. package/dist/esm/operation-node/common-table-expression-node.d.ts +4 -0
  130. package/dist/esm/operation-node/common-table-expression-node.js +6 -0
  131. package/dist/esm/operation-node/delete-query-node.d.ts +1 -1
  132. package/dist/esm/operation-node/delete-query-node.js +3 -3
  133. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  134. package/dist/esm/operation-node/operation-node-transformer.js +8 -0
  135. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  136. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  137. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  138. package/dist/esm/operation-node/operator-node.d.ts +3 -3
  139. package/dist/esm/operation-node/operator-node.js +3 -0
  140. package/dist/esm/operation-node/order-by-node.d.ts +2 -2
  141. package/dist/esm/operation-node/order-by-node.js +4 -4
  142. package/dist/esm/operation-node/over-node.d.ts +1 -1
  143. package/dist/esm/operation-node/over-node.js +3 -3
  144. package/dist/esm/operation-node/select-query-node.d.ts +5 -4
  145. package/dist/esm/operation-node/select-query-node.js +13 -7
  146. package/dist/esm/operation-node/tuple-node.d.ts +12 -0
  147. package/dist/esm/operation-node/tuple-node.js +16 -0
  148. package/dist/esm/parser/binary-operation-parser.d.ts +11 -7
  149. package/dist/esm/parser/binary-operation-parser.js +36 -47
  150. package/dist/esm/parser/expression-parser.d.ts +9 -4
  151. package/dist/esm/parser/join-parser.d.ts +2 -2
  152. package/dist/esm/parser/join-parser.js +3 -4
  153. package/dist/esm/parser/order-by-parser.d.ts +6 -2
  154. package/dist/esm/parser/order-by-parser.js +40 -7
  155. package/dist/esm/parser/parse-utils.js +3 -3
  156. package/dist/esm/parser/reference-parser.js +1 -1
  157. package/dist/esm/parser/select-parser.d.ts +5 -5
  158. package/dist/esm/parser/set-operation-parser.d.ts +3 -1
  159. package/dist/esm/parser/set-operation-parser.js +11 -2
  160. package/dist/esm/parser/tuple-parser.d.ts +47 -0
  161. package/dist/esm/parser/tuple-parser.js +2 -0
  162. package/dist/esm/parser/value-parser.d.ts +4 -2
  163. package/dist/esm/parser/value-parser.js +10 -1
  164. package/dist/esm/parser/with-parser.d.ts +3 -2
  165. package/dist/esm/parser/with-parser.js +16 -4
  166. package/dist/esm/plugin/camel-case/camel-case-plugin.d.ts +3 -3
  167. package/dist/esm/plugin/camel-case/camel-case-plugin.js +5 -9
  168. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.d.ts +13 -0
  169. package/dist/esm/plugin/parse-json-results/parse-json-results-plugin.js +51 -15
  170. package/dist/esm/query-builder/aggregate-function-builder.d.ts +5 -5
  171. package/dist/esm/query-builder/aggregate-function-builder.js +3 -3
  172. package/dist/esm/query-builder/case-builder.js +10 -6
  173. package/dist/esm/query-builder/cte-builder.d.ts +20 -0
  174. package/dist/esm/query-builder/cte-builder.js +36 -0
  175. package/dist/esm/query-builder/delete-query-builder.d.ts +34 -7
  176. package/dist/esm/query-builder/delete-query-builder.js +4 -4
  177. package/dist/esm/query-builder/function-module.d.ts +41 -6
  178. package/dist/esm/query-builder/function-module.js +3 -0
  179. package/dist/esm/query-builder/having-interface.d.ts +2 -5
  180. package/dist/esm/query-builder/join-builder.d.ts +2 -6
  181. package/dist/esm/query-builder/join-builder.js +3 -3
  182. package/dist/esm/query-builder/json-path-builder.d.ts +59 -3
  183. package/dist/esm/query-builder/on-conflict-builder.d.ts +65 -12
  184. package/dist/esm/query-builder/on-conflict-builder.js +5 -5
  185. package/dist/esm/query-builder/over-builder.js +1 -1
  186. package/dist/esm/query-builder/select-query-builder.d.ts +201 -65
  187. package/dist/esm/query-builder/select-query-builder.js +72 -923
  188. package/dist/esm/query-builder/update-query-builder.d.ts +34 -7
  189. package/dist/esm/query-builder/update-query-builder.js +3 -3
  190. package/dist/esm/query-builder/where-interface.d.ts +32 -8
  191. package/dist/esm/query-compiler/default-query-compiler.d.ts +3 -0
  192. package/dist/esm/query-compiler/default-query-compiler.js +39 -7
  193. package/dist/esm/query-creator.d.ts +74 -2
  194. package/dist/esm/query-creator.js +84 -7
  195. package/dist/esm/raw-builder/raw-builder.d.ts +88 -49
  196. package/dist/esm/raw-builder/raw-builder.js +17 -42
  197. package/dist/esm/raw-builder/sql.js +9 -9
  198. package/dist/esm/schema/alter-table-builder.d.ts +4 -0
  199. package/dist/esm/schema/alter-table-builder.js +12 -0
  200. package/dist/esm/schema/create-index-builder.d.ts +1 -1
  201. package/dist/esm/schema/create-index-builder.js +2 -2
  202. package/dist/esm/util/column-type.d.ts +7 -6
  203. package/dist/esm/util/json-object-args.d.ts +3 -0
  204. package/dist/esm/util/json-object-args.js +32 -0
  205. package/dist/esm/util/object-utils.d.ts +1 -0
  206. package/dist/esm/util/object-utils.js +7 -0
  207. package/dist/esm/util/type-utils.d.ts +10 -10
  208. package/helpers/sqlite.d.ts +1 -0
  209. package/helpers/sqlite.js +1 -0
  210. package/package.json +7 -4
@@ -1,4 +1,3 @@
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';
@@ -6,43 +5,26 @@ import { SelectExpression, Selection, SelectArg, AllSelection } from '../parser/
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';
20
- import { AliasedExpression, Expression } from '../expression/expression.js';
19
+ import { SetOperandExpression } from '../parser/set-operation-parser.js';
20
+ import { AliasableExpression, 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
+ export interface SelectQueryBuilder<DB, TB extends keyof DB, O> extends WhereInterface<DB, TB>, HavingInterface<DB, TB>, AliasableExpression<O>, Compilable<O>, Explainable, Streamable<O> {
46
28
  /**
47
29
  * Adds a `where` expression to the query.
48
30
  *
@@ -96,7 +78,34 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
96
78
  * select * from "person" where "id" in ($1, $2, $3)
97
79
  * ```
98
80
  *
99
- * <!-- siteExample("where", "OR where", 30) -->
81
+ * <!-- siteExample("where", "Object filter", 30) -->
82
+ *
83
+ * You can use the `and` function to create a simple equality
84
+ * filter using an object
85
+ *
86
+ * ```ts
87
+ * const persons = await db
88
+ * .selectFrom('person')
89
+ * .selectAll()
90
+ * .where((eb) => eb.and({
91
+ * first_name: 'Jennifer',
92
+ * last_name: eb.ref('first_name')
93
+ * }))
94
+ * .execute()
95
+ * ```
96
+ *
97
+ * The generated SQL (PostgreSQL):
98
+ *
99
+ * ```sql
100
+ * select *
101
+ * from "person"
102
+ * where (
103
+ * "first_name" = $1
104
+ * and "last_name" = "first_name"
105
+ * )
106
+ * ```
107
+ *
108
+ * <!-- siteExample("where", "OR where", 40) -->
100
109
  *
101
110
  * To combine conditions using `OR`, you can use the expression builder.
102
111
  * There are two ways to create `OR` expressions. Both are shown in this
@@ -131,7 +140,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
131
140
  * )
132
141
  * ```
133
142
  *
134
- * <!-- siteExample("where", "Conditional where calls", 40) -->
143
+ * <!-- siteExample("where", "Conditional where calls", 50) -->
135
144
  *
136
145
  * You can add expressions conditionally like this:
137
146
  *
@@ -226,7 +235,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
226
235
  * select * from "person" where "id" in ($1, $2, $3)
227
236
  * ```
228
237
  *
229
- * <!-- siteExample("where", "Complex where clause", 50) -->
238
+ * <!-- siteExample("where", "Complex where clause", 60) -->
230
239
  *
231
240
  * For complex `where` expressions you can pass in a single callback and
232
241
  * use the `ExpressionBuilder` to build your expression:
@@ -316,8 +325,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
316
325
  * ```
317
326
  */
318
327
  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>;
328
+ where(expression: ExpressionOrFactory<DB, TB, SqlBool>): SelectQueryBuilder<DB, TB, O>;
321
329
  /**
322
330
  * Adds a `where` clause where both sides of the operator are references
323
331
  * to columns.
@@ -375,8 +383,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
375
383
  * instead of a `where` statement.
376
384
  */
377
385
  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>;
386
+ having(expression: ExpressionOrFactory<DB, TB, SqlBool>): SelectQueryBuilder<DB, TB, O>;
380
387
  /**
381
388
  * Just like {@link WhereInterface.whereRef | whereRef} but adds a `having` statement
382
389
  * instead of a `where` statement.
@@ -917,14 +924,28 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
917
924
  /**
918
925
  * Adds an `order by` clause to the query.
919
926
  *
920
- * `orderBy` calls are additive. To order by multiple columns, call `orderBy`
921
- * multiple times.
927
+ * `orderBy` calls are additive. Meaning, additional `orderBy` calls append to
928
+ * the existing order by clause.
929
+ *
930
+ * In a single call you can add a single column/expression or multiple columns/expressions.
922
931
  *
923
- * The first argument is the expression to order by and the second is the
924
- * order (`asc` or `desc`).
932
+ * Single column/expression calls can have 1-2 arguments. The first argument is
933
+ * the expression to order by (optionally including the direction) while the second
934
+ * optional argument is the direction (`asc` or `desc`).
925
935
  *
926
936
  * ### Examples
927
937
  *
938
+ * Single column/expression per call:
939
+ *
940
+ * ```ts
941
+ * await db
942
+ * .selectFrom('person')
943
+ * .select('person.first_name as fn')
944
+ * .orderBy('id')
945
+ * .orderBy('fn desc')
946
+ * .execute()
947
+ * ```
948
+ *
928
949
  * ```ts
929
950
  * await db
930
951
  * .selectFrom('person')
@@ -942,6 +963,16 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
942
963
  * order by "id" asc, "fn" desc
943
964
  * ```
944
965
  *
966
+ * Multiple columns/expressions per call:
967
+ *
968
+ * ```ts
969
+ * await db
970
+ * .selectFrom('person')
971
+ * .select('person.first_name as fn')
972
+ * .orderBy(['id', 'fn desc'])
973
+ * .execute()
974
+ * ```
975
+ *
945
976
  * The order by expression can also be a raw sql expression or a subquery
946
977
  * in addition to column references:
947
978
  *
@@ -1001,7 +1032,9 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1001
1032
  * order by "fn" asc
1002
1033
  * ```
1003
1034
  */
1004
- orderBy(orderBy: OrderByExpression<DB, TB, O>, direction?: OrderByDirectionExpression): SelectQueryBuilder<DB, TB, O>;
1035
+ orderBy(orderBy: UndirectedOrderByExpression<DB, TB, O>, direction?: OrderByDirectionExpression): SelectQueryBuilder<DB, TB, O>;
1036
+ orderBy(ref: DirectedOrderByStringReference<DB, TB, O>): SelectQueryBuilder<DB, TB, O>;
1037
+ orderBy(refs: ReadonlyArray<OrderByExpression<DB, TB, O>>): SelectQueryBuilder<DB, TB, O>;
1005
1038
  /**
1006
1039
  * Adds a `group by` clause to the query.
1007
1040
  *
@@ -1155,8 +1188,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1155
1188
  * .union(db.selectFrom('pet').select(['id', 'name']))
1156
1189
  * .orderBy('name')
1157
1190
  * ```
1191
+ *
1192
+ * You can provide a callback to get an expression builder.
1193
+ * In the following example, this allows us to wrap the query in parentheses:
1194
+ *
1195
+ * ```ts
1196
+ * db.selectFrom('person')
1197
+ * .select(['id', 'first_name as name'])
1198
+ * .union((eb) => eb.parens(
1199
+ * eb.selectFrom('pet').select(['id', 'name'])
1200
+ * ))
1201
+ * .orderBy('name')
1202
+ * ```
1158
1203
  */
1159
- union(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1204
+ union(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1160
1205
  /**
1161
1206
  * Combines another select query or raw expression to this query using `union all`.
1162
1207
  *
@@ -1170,8 +1215,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1170
1215
  * .unionAll(db.selectFrom('pet').select(['id', 'name']))
1171
1216
  * .orderBy('name')
1172
1217
  * ```
1218
+ *
1219
+ * You can provide a callback to get an expression builder.
1220
+ * In the following example, this allows us to wrap the query in parentheses:
1221
+ *
1222
+ * ```ts
1223
+ * db.selectFrom('person')
1224
+ * .select(['id', 'first_name as name'])
1225
+ * .unionAll((eb) => eb.parens(
1226
+ * eb.selectFrom('pet').select(['id', 'name'])
1227
+ * ))
1228
+ * .orderBy('name')
1229
+ * ```
1173
1230
  */
1174
- unionAll(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1231
+ unionAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1175
1232
  /**
1176
1233
  * Combines another select query or raw expression to this query using `intersect`.
1177
1234
  *
@@ -1185,8 +1242,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1185
1242
  * .intersect(db.selectFrom('pet').select(['id', 'name']))
1186
1243
  * .orderBy('name')
1187
1244
  * ```
1245
+ *
1246
+ * You can provide a callback to get an expression builder.
1247
+ * In the following example, this allows us to wrap the query in parentheses:
1248
+ *
1249
+ * ```ts
1250
+ * db.selectFrom('person')
1251
+ * .select(['id', 'first_name as name'])
1252
+ * .intersect((eb) => eb.parens(
1253
+ * eb.selectFrom('pet').select(['id', 'name'])
1254
+ * ))
1255
+ * .orderBy('name')
1256
+ * ```
1188
1257
  */
1189
- intersect(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1258
+ intersect(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1190
1259
  /**
1191
1260
  * Combines another select query or raw expression to this query using `intersect all`.
1192
1261
  *
@@ -1200,8 +1269,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1200
1269
  * .intersectAll(db.selectFrom('pet').select(['id', 'name']))
1201
1270
  * .orderBy('name')
1202
1271
  * ```
1272
+ *
1273
+ * You can provide a callback to get an expression builder.
1274
+ * In the following example, this allows us to wrap the query in parentheses:
1275
+ *
1276
+ * ```ts
1277
+ * db.selectFrom('person')
1278
+ * .select(['id', 'first_name as name'])
1279
+ * .intersectAll((eb) => eb.parens(
1280
+ * eb.selectFrom('pet').select(['id', 'name'])
1281
+ * ))
1282
+ * .orderBy('name')
1283
+ * ```
1203
1284
  */
1204
- intersectAll(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1285
+ intersectAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1205
1286
  /**
1206
1287
  * Combines another select query or raw expression to this query using `except`.
1207
1288
  *
@@ -1215,8 +1296,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1215
1296
  * .except(db.selectFrom('pet').select(['id', 'name']))
1216
1297
  * .orderBy('name')
1217
1298
  * ```
1299
+ *
1300
+ * You can provide a callback to get an expression builder.
1301
+ * In the following example, this allows us to wrap the query in parentheses:
1302
+ *
1303
+ * ```ts
1304
+ * db.selectFrom('person')
1305
+ * .select(['id', 'first_name as name'])
1306
+ * .except((eb) => eb.parens(
1307
+ * eb.selectFrom('pet').select(['id', 'name'])
1308
+ * ))
1309
+ * .orderBy('name')
1310
+ * ```
1218
1311
  */
1219
- except(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1312
+ except(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1220
1313
  /**
1221
1314
  * Combines another select query or raw expression to this query using `except all`.
1222
1315
  *
@@ -1230,8 +1323,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1230
1323
  * .exceptAll(db.selectFrom('pet').select(['id', 'name']))
1231
1324
  * .orderBy('name')
1232
1325
  * ```
1326
+ *
1327
+ * You can provide a callback to get an expression builder.
1328
+ * In the following example, this allows us to wrap the query in parentheses:
1329
+ *
1330
+ * ```ts
1331
+ * db.selectFrom('person')
1332
+ * .select(['id', 'first_name as name'])
1333
+ * .exceptAll((eb) => eb.parens(
1334
+ * eb.selectFrom('pet').select(['id', 'name'])
1335
+ * ))
1336
+ * .orderBy('name')
1337
+ * ```
1233
1338
  */
1234
- exceptAll(expression: Expression<O>): SelectQueryBuilder<DB, TB, O>;
1339
+ exceptAll(expression: SetOperandExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
1235
1340
  /**
1236
1341
  * Gives an alias for the query. This method is only useful for sub queries.
1237
1342
  *
@@ -1445,6 +1550,54 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1445
1550
  * don't support your use case.
1446
1551
  */
1447
1552
  $castTo<T>(): SelectQueryBuilder<DB, TB, T>;
1553
+ /**
1554
+ * Changes the output type from an object to a tuple.
1555
+ *
1556
+ * This doesn't affect the generated SQL in any way. This function is
1557
+ * just a necessary evil when you need to convert a query's output
1558
+ * record type to a tuple type. Typescript doesn't currently offer
1559
+ * tools to do this automatically (without insane hackery).
1560
+ *
1561
+ * The returned object can no longer be executed. It can only be used
1562
+ * as a subquery.
1563
+ *
1564
+ * ### Examples
1565
+ *
1566
+ * ```ts
1567
+ * const result = await db
1568
+ * .selectFrom('person')
1569
+ * .selectAll('person')
1570
+ * .where(({ eb, refTuple, selectFrom }) => eb(
1571
+ * refTuple('first_name', 'last_name'),
1572
+ * 'in',
1573
+ * selectFrom('pet')
1574
+ * .select(['name', 'species'])
1575
+ * .where('pet.species', '!=', 'cat')
1576
+ * .$asTuple('name', 'species')
1577
+ * ))
1578
+ * ```
1579
+ *
1580
+ * The generated SQL(PostgreSQL):
1581
+ *
1582
+ * ```sql
1583
+ * select
1584
+ * "person".*
1585
+ * from
1586
+ * "person"
1587
+ * where
1588
+ * ("first_name", "last_name")
1589
+ * in
1590
+ * (
1591
+ * select "name", "species"
1592
+ * from "pet"
1593
+ * where "pet"."species" != $1
1594
+ * )
1595
+ * ```
1596
+ */
1597
+ $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'>;
1598
+ $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'>;
1599
+ $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'>;
1600
+ $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
1601
  /**
1449
1602
  * Narrows (parts of) the output type of the query.
1450
1603
  *
@@ -1630,31 +1783,14 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
1630
1783
  */
1631
1784
  explain<ER extends Record<string, any> = Record<string, any>>(format?: ExplainFormat, options?: Expression<any>): Promise<ER[]>;
1632
1785
  }
1786
+ export declare function createSelectQueryBuilder<DB, TB extends keyof DB, O>(props: SelectQueryBuilderProps): SelectQueryBuilder<DB, TB, O>;
1633
1787
  export interface SelectQueryBuilderProps {
1634
1788
  readonly queryId: QueryId;
1635
1789
  readonly queryNode: SelectQueryNode;
1636
1790
  readonly executor: QueryExecutor;
1637
1791
  }
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;
1792
+ export interface AliasedSelectQueryBuilder<DB, TB extends keyof DB, O = undefined, A extends string = never> extends AliasedExpression<O, A> {
1793
+ get selectQueryBuilder(): SelectQueryBuilder<DB, TB, O>;
1658
1794
  }
1659
1795
  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
1796
  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>;