kysely 0.11.4 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +1 -0
  3. package/dist/cjs/dynamic/dynamic-reference-builder.js +9 -1
  4. package/dist/cjs/dynamic/dynamic.d.ts +6 -7
  5. package/dist/cjs/dynamic/dynamic.js +6 -7
  6. package/dist/cjs/index.d.ts +13 -3
  7. package/dist/cjs/index.js +11 -1
  8. package/dist/cjs/kysely.d.ts +19 -11
  9. package/dist/cjs/kysely.js +32 -9
  10. package/dist/cjs/migration/migration.d.ts +2 -2
  11. package/dist/cjs/operation-node/create-table-node.d.ts +6 -2
  12. package/dist/cjs/operation-node/create-table-node.js +6 -6
  13. package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
  14. package/dist/cjs/operation-node/insert-query-node.d.ts +4 -4
  15. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  16. package/dist/cjs/operation-node/operation-node-transformer.js +11 -1
  17. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  18. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  19. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  20. package/dist/cjs/operation-node/query-node.d.ts +0 -2
  21. package/dist/cjs/operation-node/query-node.js +0 -10
  22. package/dist/cjs/operation-node/values-node.d.ts +15 -0
  23. package/dist/cjs/operation-node/values-node.js +18 -0
  24. package/dist/cjs/parser/complex-expression-parser.d.ts +9 -0
  25. package/dist/cjs/parser/complex-expression-parser.js +25 -0
  26. package/dist/cjs/parser/filter-parser.d.ts +13 -4
  27. package/dist/cjs/parser/filter-parser.js +21 -24
  28. package/dist/cjs/parser/insert-values-parser.d.ts +5 -9
  29. package/dist/cjs/parser/insert-values-parser.js +27 -41
  30. package/dist/cjs/parser/order-by-parser.d.ts +1 -1
  31. package/dist/cjs/parser/parse-context.d.ts +8 -8
  32. package/dist/cjs/parser/parse-context.js +10 -10
  33. package/dist/cjs/parser/reference-parser.d.ts +8 -7
  34. package/dist/cjs/parser/reference-parser.js +8 -17
  35. package/dist/cjs/parser/returning-parser.d.ts +1 -5
  36. package/dist/cjs/parser/select-parser.d.ts +12 -14
  37. package/dist/cjs/parser/select-parser.js +5 -9
  38. package/dist/cjs/parser/table-parser.d.ts +9 -11
  39. package/dist/cjs/parser/table-parser.js +2 -8
  40. package/dist/cjs/parser/union-parser.d.ts +2 -2
  41. package/dist/cjs/parser/union-parser.js +1 -6
  42. package/dist/cjs/parser/update-set-parser.d.ts +2 -8
  43. package/dist/cjs/parser/update-set-parser.js +6 -26
  44. package/dist/cjs/parser/value-parser.d.ts +9 -6
  45. package/dist/cjs/parser/value-parser.js +7 -30
  46. package/dist/cjs/parser/with-parser.d.ts +6 -3
  47. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  48. package/dist/cjs/query-builder/delete-query-builder.d.ts +102 -0
  49. package/dist/cjs/query-builder/delete-query-builder.js +185 -0
  50. package/dist/cjs/query-builder/expression-builder.d.ts +8 -6
  51. package/dist/cjs/query-builder/expression-builder.js +3 -3
  52. package/dist/cjs/query-builder/function-builder.d.ts +2 -1
  53. package/dist/cjs/query-builder/function-builder.js +2 -1
  54. package/dist/cjs/query-builder/having-interface.d.ts +49 -0
  55. package/dist/cjs/query-builder/having-interface.js +2 -0
  56. package/dist/cjs/query-builder/insert-query-builder.d.ts +439 -0
  57. package/dist/cjs/query-builder/insert-query-builder.js +256 -0
  58. package/dist/cjs/query-builder/insert-result.d.ts +3 -2
  59. package/dist/cjs/query-builder/insert-result.js +3 -2
  60. package/dist/cjs/query-builder/join-builder.d.ts +19 -20
  61. package/dist/cjs/query-builder/join-builder.js +12 -12
  62. package/dist/cjs/query-builder/join-interface.d.ts +133 -0
  63. package/dist/cjs/query-builder/join-interface.js +2 -0
  64. package/dist/cjs/query-builder/no-result-error.d.ts +9 -0
  65. package/dist/cjs/query-builder/no-result-error.js +14 -0
  66. package/dist/cjs/query-builder/returning-interface.d.ts +73 -0
  67. package/dist/cjs/query-builder/returning-interface.js +2 -0
  68. package/dist/cjs/query-builder/select-query-builder.d.ts +711 -0
  69. package/dist/cjs/query-builder/select-query-builder.js +571 -0
  70. package/dist/cjs/query-builder/update-query-builder.d.ts +190 -0
  71. package/dist/cjs/query-builder/update-query-builder.js +279 -0
  72. package/dist/cjs/query-builder/where-interface.d.ts +381 -0
  73. package/dist/cjs/query-builder/where-interface.js +2 -0
  74. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
  75. package/dist/cjs/query-compiler/default-query-compiler.js +22 -5
  76. package/dist/cjs/query-creator.d.ts +42 -40
  77. package/dist/cjs/query-creator.js +33 -28
  78. package/dist/cjs/query-executor/query-executor.d.ts +1 -1
  79. package/dist/cjs/query-executor/query-executor.js +1 -1
  80. package/dist/cjs/raw-builder/raw-builder.d.ts +2 -0
  81. package/dist/cjs/raw-builder/raw-builder.js +6 -0
  82. package/dist/cjs/schema/alter-table-builder.d.ts +2 -2
  83. package/dist/cjs/schema/column-definition-builder.d.ts +27 -20
  84. package/dist/cjs/schema/create-index-builder.d.ts +2 -1
  85. package/dist/cjs/schema/create-index-builder.js +2 -1
  86. package/dist/cjs/schema/create-table-builder.d.ts +26 -9
  87. package/dist/cjs/schema/create-table-builder.js +42 -9
  88. package/dist/cjs/schema/create-view-builder.d.ts +17 -3
  89. package/dist/cjs/schema/create-view-builder.js +25 -16
  90. package/dist/cjs/schema/schema.d.ts +18 -11
  91. package/dist/cjs/schema/schema.js +18 -11
  92. package/dist/cjs/util/log.d.ts +3 -2
  93. package/dist/cjs/util/log.js +8 -15
  94. package/dist/cjs/util/type-utils.d.ts +7 -7
  95. package/dist/esm/dynamic/dynamic-reference-builder.d.ts +1 -0
  96. package/dist/esm/dynamic/dynamic-reference-builder.js +7 -0
  97. package/dist/esm/dynamic/dynamic.d.ts +6 -7
  98. package/dist/esm/dynamic/dynamic.js +6 -7
  99. package/dist/esm/index.d.ts +13 -3
  100. package/dist/esm/index.js +11 -1
  101. package/dist/esm/kysely.d.ts +19 -11
  102. package/dist/esm/kysely.js +32 -9
  103. package/dist/esm/migration/migration.d.ts +2 -2
  104. package/dist/esm/operation-node/create-table-node.d.ts +6 -2
  105. package/dist/esm/operation-node/create-table-node.js +6 -6
  106. package/dist/esm/operation-node/create-view-node.d.ts +1 -0
  107. package/dist/esm/operation-node/insert-query-node.d.ts +4 -4
  108. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  109. package/dist/esm/operation-node/operation-node-transformer.js +11 -1
  110. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  111. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  112. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  113. package/dist/esm/operation-node/query-node.d.ts +0 -2
  114. package/dist/esm/operation-node/query-node.js +0 -10
  115. package/dist/esm/operation-node/values-node.d.ts +15 -0
  116. package/dist/esm/operation-node/values-node.js +15 -0
  117. package/dist/esm/parser/complex-expression-parser.d.ts +9 -0
  118. package/dist/esm/parser/complex-expression-parser.js +20 -0
  119. package/dist/esm/parser/filter-parser.d.ts +13 -4
  120. package/dist/esm/parser/filter-parser.js +21 -24
  121. package/dist/esm/parser/insert-values-parser.d.ts +5 -9
  122. package/dist/esm/parser/insert-values-parser.js +27 -40
  123. package/dist/esm/parser/order-by-parser.d.ts +1 -1
  124. package/dist/esm/parser/parse-context.d.ts +8 -8
  125. package/dist/esm/parser/parse-context.js +10 -10
  126. package/dist/esm/parser/reference-parser.d.ts +8 -7
  127. package/dist/esm/parser/reference-parser.js +9 -18
  128. package/dist/esm/parser/returning-parser.d.ts +1 -5
  129. package/dist/esm/parser/select-parser.d.ts +12 -14
  130. package/dist/esm/parser/select-parser.js +6 -10
  131. package/dist/esm/parser/table-parser.d.ts +9 -11
  132. package/dist/esm/parser/table-parser.js +3 -9
  133. package/dist/esm/parser/union-parser.d.ts +2 -2
  134. package/dist/esm/parser/union-parser.js +1 -6
  135. package/dist/esm/parser/update-set-parser.d.ts +2 -8
  136. package/dist/esm/parser/update-set-parser.js +5 -24
  137. package/dist/esm/parser/value-parser.d.ts +9 -6
  138. package/dist/esm/parser/value-parser.js +8 -31
  139. package/dist/esm/parser/with-parser.d.ts +6 -3
  140. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  141. package/dist/esm/query-builder/delete-query-builder.d.ts +102 -0
  142. package/dist/esm/query-builder/delete-query-builder.js +181 -0
  143. package/dist/esm/query-builder/expression-builder.d.ts +8 -6
  144. package/dist/esm/query-builder/expression-builder.js +3 -3
  145. package/dist/esm/query-builder/function-builder.d.ts +2 -1
  146. package/dist/esm/query-builder/function-builder.js +2 -1
  147. package/dist/esm/query-builder/having-interface.d.ts +49 -0
  148. package/dist/esm/query-builder/having-interface.js +1 -0
  149. package/dist/esm/query-builder/insert-query-builder.d.ts +439 -0
  150. package/dist/esm/query-builder/insert-query-builder.js +252 -0
  151. package/dist/esm/query-builder/insert-result.d.ts +3 -2
  152. package/dist/esm/query-builder/insert-result.js +3 -2
  153. package/dist/esm/query-builder/join-builder.d.ts +19 -20
  154. package/dist/esm/query-builder/join-builder.js +12 -12
  155. package/dist/esm/query-builder/join-interface.d.ts +133 -0
  156. package/dist/esm/query-builder/join-interface.js +1 -0
  157. package/dist/esm/query-builder/no-result-error.d.ts +9 -0
  158. package/dist/esm/query-builder/no-result-error.js +10 -0
  159. package/dist/esm/query-builder/returning-interface.d.ts +73 -0
  160. package/dist/esm/query-builder/returning-interface.js +1 -0
  161. package/dist/esm/query-builder/select-query-builder.d.ts +711 -0
  162. package/dist/esm/query-builder/select-query-builder.js +566 -0
  163. package/dist/esm/query-builder/update-query-builder.d.ts +190 -0
  164. package/dist/esm/query-builder/update-query-builder.js +275 -0
  165. package/dist/esm/query-builder/where-interface.d.ts +381 -0
  166. package/dist/esm/query-builder/where-interface.js +1 -0
  167. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
  168. package/dist/esm/query-compiler/default-query-compiler.js +22 -5
  169. package/dist/esm/query-creator.d.ts +42 -40
  170. package/dist/esm/query-creator.js +33 -28
  171. package/dist/esm/query-executor/query-executor.d.ts +1 -1
  172. package/dist/esm/query-executor/query-executor.js +1 -1
  173. package/dist/esm/raw-builder/raw-builder.d.ts +2 -0
  174. package/dist/esm/raw-builder/raw-builder.js +6 -0
  175. package/dist/esm/schema/alter-table-builder.d.ts +2 -2
  176. package/dist/esm/schema/column-definition-builder.d.ts +27 -20
  177. package/dist/esm/schema/create-index-builder.d.ts +2 -1
  178. package/dist/esm/schema/create-index-builder.js +2 -1
  179. package/dist/esm/schema/create-table-builder.d.ts +26 -9
  180. package/dist/esm/schema/create-table-builder.js +43 -10
  181. package/dist/esm/schema/create-view-builder.d.ts +17 -3
  182. package/dist/esm/schema/create-view-builder.js +25 -16
  183. package/dist/esm/schema/schema.d.ts +18 -11
  184. package/dist/esm/schema/schema.js +18 -11
  185. package/dist/esm/util/log.d.ts +3 -2
  186. package/dist/esm/util/log.js +7 -14
  187. package/dist/esm/util/type-utils.d.ts +7 -7
  188. package/package.json +3 -3
  189. package/dist/cjs/query-builder/query-builder.d.ts +0 -1728
  190. package/dist/cjs/query-builder/query-builder.js +0 -1067
  191. package/dist/esm/query-builder/query-builder.d.ts +0 -1728
  192. package/dist/esm/query-builder/query-builder.js +0 -1061
@@ -0,0 +1,711 @@
1
+ import { AliasNode } from '../operation-node/alias-node.js';
2
+ import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
+ import { CompiledQuery } from '../query-compiler/compiled-query.js';
4
+ import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
5
+ import { TableExpression, TableExpressionDatabase, TableExpressionTables, LeftJoinTableExpressionDatabase, RightJoinTableExpressionDatabase, FullJoinTableExpressionDatabase } from '../parser/table-parser.js';
6
+ import { SelectExpression, QueryBuilderWithSelection, SelectAllQueryBuilder } from '../parser/select-parser.js';
7
+ import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper, HavingGrouper } from '../parser/filter-parser.js';
8
+ import { ReferenceExpression } from '../parser/reference-parser.js';
9
+ import { SelectQueryNode } from '../operation-node/select-query-node.js';
10
+ import { AnyRawBuilder, SingleResultType } from '../util/type-utils.js';
11
+ import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js';
12
+ import { Compilable } from '../util/compilable.js';
13
+ import { QueryExecutor } from '../query-executor/query-executor.js';
14
+ import { QueryId } from '../util/query-id.js';
15
+ import { ParseContext } from '../parser/parse-context.js';
16
+ import { UnionExpression } from '../parser/union-parser.js';
17
+ import { KyselyPlugin } from '../plugin/kysely-plugin.js';
18
+ import { WhereInterface } from './where-interface.js';
19
+ import { JoinInterface } from './join-interface.js';
20
+ import { NoResultErrorConstructor } from './no-result-error.js';
21
+ import { HavingInterface } from './having-interface.js';
22
+ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, HavingInterface<DB, TB>, JoinInterface<DB, TB>, OperationNodeSource, Compilable {
23
+ #private;
24
+ constructor(props: SelectQueryBuilderProps);
25
+ where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
26
+ where(grouper: WhereGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
27
+ where(raw: AnyRawBuilder): SelectQueryBuilder<DB, TB, O>;
28
+ whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
29
+ orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
30
+ orWhere(grouper: WhereGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
31
+ orWhere(raw: AnyRawBuilder): SelectQueryBuilder<DB, TB, O>;
32
+ orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
33
+ whereExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
34
+ whereNotExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
35
+ orWhereExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
36
+ orWhereNotExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
37
+ having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
38
+ having(grouper: HavingGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
39
+ having(raw: AnyRawBuilder): SelectQueryBuilder<DB, TB, O>;
40
+ havingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
41
+ orHaving<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): SelectQueryBuilder<DB, TB, O>;
42
+ orHaving(grouper: HavingGrouper<DB, TB>): SelectQueryBuilder<DB, TB, O>;
43
+ orHaving(raw: AnyRawBuilder): SelectQueryBuilder<DB, TB, O>;
44
+ orHavingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
45
+ havingExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
46
+ havingNotExist(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
47
+ orHavingExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
48
+ orHavingNotExists(arg: ExistsExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
49
+ /**
50
+ * Adds a select clause to the query.
51
+ *
52
+ * When a column (or any expression) is selected, Kysely adds its type to the return
53
+ * type of the query. Kysely is smart enough to parse the column names and types even
54
+ * from aliased columns, subqueries, raw expressions etc.
55
+ *
56
+ * Kysely only allows you to select columns and expressions that exist and would
57
+ * produce valid SQL. However, Kysely is not perfect and there may be cases where
58
+ * the type inference doesn't work and you need to override it. You can always
59
+ * use the {@link Kysely.dynamic | dynamic} module and {@link Kysely.raw | raw}
60
+ * to override the types.
61
+ *
62
+ * Select calls are additive. Calling `select('id').select('first_name')` is the
63
+ * same as calling `select(['id', 'first_name']).
64
+ *
65
+ * To select all columns of the query or specific tables see the
66
+ * {@link SelectQueryBuilder.selectAll | selectAll} method.
67
+ *
68
+ * ### Examples
69
+ *
70
+ * Select a single column:
71
+ *
72
+ * ```ts
73
+ * const persons = await db.selectFrom('person')
74
+ * .select('id')
75
+ * .where('first_name', '=', 'Arnold')
76
+ * .execute()
77
+ *
78
+ * persons[0].id
79
+ * ```
80
+ *
81
+ * The generated SQL (PostgreSQL):
82
+ *
83
+ * ```sql
84
+ * select "id" from "person" where "first_name" = $1
85
+ * ```
86
+ *
87
+ * Select a single column and specify a table:
88
+ *
89
+ * ```ts
90
+ * const persons = await db.selectFrom(['person', 'pet'])
91
+ * .select('person.id')
92
+ * .execute()
93
+ *
94
+ * persons[0].id
95
+ * ```
96
+ *
97
+ * The generated SQL (PostgreSQL):
98
+ *
99
+ * ```sql
100
+ * select "person"."id" from "person", "pet"
101
+ * ```
102
+ *
103
+ * Select multiple columns:
104
+ *
105
+ * ```ts
106
+ * const persons = await db.selectFrom('person')
107
+ * .select(['person.id', 'first_name'])
108
+ * .execute()
109
+ *
110
+ * persons[0].id
111
+ * persons[0].first_name
112
+ * ```
113
+ *
114
+ * The generated SQL (PostgreSQL):
115
+ *
116
+ * ```sql
117
+ * select "person"."id", "first_name" from "person"
118
+ * ```
119
+ *
120
+ * Aliased selections:
121
+ *
122
+ * ```ts
123
+ * const persons = await db.selectFrom('person')
124
+ * .select([
125
+ * 'person.first_name as fn',
126
+ * 'person.last_name as ln'
127
+ * ])
128
+ * .execute()
129
+ *
130
+ * persons[0].fn
131
+ * persons[0].ln
132
+ * ```
133
+ *
134
+ * The generated SQL (PostgreSQL):
135
+ *
136
+ * ```sql
137
+ * select
138
+ * "person"."first_name" as "fn",
139
+ * "person"."last_name" as "ln"
140
+ * from "person"
141
+ * ```
142
+ *
143
+ * You can also select subqueries and raw expressions. Note that you
144
+ * always need to give a name for the selections using the `as`
145
+ * method:
146
+ *
147
+ * ```ts
148
+ * const persons = await db.selectFrom('person')
149
+ * .select([
150
+ * (qb) => qb
151
+ * .selectFrom('pet')
152
+ * .whereRef('person.id', '=', 'pet.owner_id')
153
+ * .select('pet.name')
154
+ * .limit(1)
155
+ * .as('pet_name')
156
+ * db.raw<string>("concat(first_name, ' ', last_name)").as('full_name')
157
+ * ])
158
+ * .execute()
159
+ *
160
+ * persons[0].pet_name
161
+ * persons[0].full_name
162
+ * ```
163
+ *
164
+ * The generated SQL (PostgreSQL):
165
+ *
166
+ * ```sql
167
+ * select
168
+ * (
169
+ * select "pet"."name"
170
+ * from "pet"
171
+ * where "person"."id" = "pet"."owner_id"
172
+ * limit $1
173
+ * ) as "pet_name",
174
+ * concat(first_name, ' ', last_name) as full_name
175
+ * from "person"
176
+ * ```
177
+ *
178
+ * In case you use `raw` you need to specify the type of the expression
179
+ * (in this example `string`).
180
+ *
181
+ * All the examples above assume you know the column names at compile time.
182
+ * While it's better to build your code like that (that way you also know
183
+ * the types) sometimes it's not possible or you just prefer to write more
184
+ * dynamic code.
185
+ * <br><br>
186
+ * In this example, we use the `dynamic` module's methods to add selections
187
+ * dynamically:
188
+ *
189
+ * ```ts
190
+ * const { ref } = db.dynamic
191
+ *
192
+ * // Some column name provided by the user. Value not known at compile time.
193
+ * const columnFromUserInput = req.query.select;
194
+ *
195
+ * // A type that lists all possible values `columnFromUserInput` can have.
196
+ * // You can use `keyof Person` if any column of an interface is allowed.
197
+ * type PossibleColumns = 'last_name' | 'first_name' | 'birth_date'
198
+ *
199
+ * const spersons = await db.selectFrom('person')
200
+ * .select([
201
+ * ref<PossibleColumns>(columnFromUserInput)
202
+ * 'id'
203
+ * ])
204
+ * .execute()
205
+ *
206
+ * // The resulting type contains all `PossibleColumns` as optional fields
207
+ * // because we cannot know which field was actually selected before
208
+ * // running the code.
209
+ * const lastName: string | undefined = persons[0].last_name
210
+ * const firstName: string | undefined = persons[0].first_name
211
+ * const birthDate: string | undefined = persons[0].birth_date
212
+ *
213
+ * // The result type also contains the compile time selection `id`.
214
+ * persons[0].id
215
+ * ```
216
+ */
217
+ select<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): QueryBuilderWithSelection<DB, TB, O, SE>;
218
+ select<SE extends SelectExpression<DB, TB>>(selection: SE): QueryBuilderWithSelection<DB, TB, O, SE>;
219
+ /**
220
+ * Adds `distinct on` selections to the select clause.
221
+ *
222
+ * Takes the same inputs as the {@link SelectQueryBuilder.select | select} method.
223
+ * See the {@link SelectQueryBuilder.select | select} method's documentation for
224
+ * more examples.
225
+ *
226
+ * ### Examples
227
+ *
228
+ * ```ts
229
+ * await db.selectFrom('person')
230
+ * .innerJoin('pet', 'pet.owner_id', 'person.id')
231
+ * .where('pet.name', '=', 'Doggo')
232
+ * .distinctOn('person.id')
233
+ * .selectAll('person')
234
+ * .execute()
235
+ * ```
236
+ *
237
+ * The generated SQL (PostgreSQL):
238
+ *
239
+ * ```sql
240
+ * select distinct on ("person"."id") "person".*
241
+ * from "person"
242
+ * inner join "pet" on "pet"."owner_id" = "person"."id"
243
+ * where "pet"."name" = $1
244
+ * ```
245
+ */
246
+ distinctOn<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): SelectQueryBuilder<DB, TB, O>;
247
+ distinctOn<SE extends SelectExpression<DB, TB>>(selection: SE): SelectQueryBuilder<DB, TB, O>;
248
+ /**
249
+ * Makes the selection distinct.
250
+ *
251
+ * ### Examples
252
+ *
253
+ * ```ts
254
+ * await db.selectFrom('person')
255
+ * .select('first_name')
256
+ * .distinct()
257
+ * .execute()
258
+ * ```
259
+ *
260
+ * The generated SQL (PostgreSQL):
261
+ *
262
+ * ```sql
263
+ * select distinct "first_name" from "person"
264
+ * ```
265
+ */
266
+ distinct(): SelectQueryBuilder<DB, TB, O>;
267
+ /**
268
+ * Adds the `for update` option to a select query on supported databases.
269
+ */
270
+ forUpdate(): SelectQueryBuilder<DB, TB, O>;
271
+ /**
272
+ * Adds the `for share` option to a select query on supported databases.
273
+ */
274
+ forShare(): SelectQueryBuilder<DB, TB, O>;
275
+ /**
276
+ * Adds the `for key share` option to a select query on supported databases.
277
+ */
278
+ forKeyShare(): SelectQueryBuilder<DB, TB, O>;
279
+ /**
280
+ * Adds the `for no key update` option to a select query on supported databases.
281
+ */
282
+ forNoKeyUpdate(): SelectQueryBuilder<DB, TB, O>;
283
+ /**
284
+ * Adds the `skip locked` option to a select query on supported databases.
285
+ */
286
+ skipLocked(): SelectQueryBuilder<DB, TB, O>;
287
+ /**
288
+ * Adds the `nowait` option to a select query on supported databases.
289
+ */
290
+ noWait(): SelectQueryBuilder<DB, TB, O>;
291
+ /**
292
+ * Adds a `select *` or `select table.*` clause to the query.
293
+ *
294
+ * ### Examples
295
+ *
296
+ * ```ts
297
+ * const persons = await db
298
+ * .selectFrom('person')
299
+ * .selectAll()
300
+ * .execute()
301
+ * ```
302
+ *
303
+ * The generated SQL (PostgreSQL):
304
+ *
305
+ * ```sql
306
+ * select * from "person"
307
+ * ```
308
+ *
309
+ * Select all columns of a table:
310
+ *
311
+ * ```ts
312
+ * const persons = await db
313
+ * .selectFrom('person')
314
+ * .selectAll('person')
315
+ * .execute()
316
+ * ```
317
+ *
318
+ * The generated SQL (PostgreSQL):
319
+ *
320
+ * ```sql
321
+ * select "person".* from "person"
322
+ * ```
323
+ *
324
+ * Select all columns of multiple tables:
325
+ *
326
+ * ```ts
327
+ * const personsPets = await db
328
+ * .selectFrom(['person', 'pet'])
329
+ * .selectAll(['person', 'pet'])
330
+ * .execute()
331
+ * ```
332
+ *
333
+ * The generated SQL (PostgreSQL):
334
+ *
335
+ * ```sql
336
+ * select "person".*, "pet".* from "person", "pet"
337
+ * ```
338
+ */
339
+ selectAll<T extends TB>(table: ReadonlyArray<T>): SelectAllQueryBuilder<DB, TB, O, T>;
340
+ selectAll<T extends TB>(table: T): SelectAllQueryBuilder<DB, TB, O, T>;
341
+ selectAll<T extends TB>(): SelectAllQueryBuilder<DB, TB, O, T>;
342
+ innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
343
+ innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
344
+ leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
345
+ leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
346
+ rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
347
+ rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
348
+ fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): SelectQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
349
+ fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): SelectQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
350
+ /**
351
+ * Adds an `order by` clause to the query.
352
+ *
353
+ * `orderBy` calls are additive. To order by multiple columns, call `orderBy`
354
+ * multiple times.
355
+ *
356
+ * The first argument is the expression to order by and the second is the
357
+ * order (`asc` or `desc`).
358
+ *
359
+ * ### Examples
360
+ *
361
+ * ```ts
362
+ * await db
363
+ * .selectFrom('person')
364
+ * .select('person.first_name as fn')
365
+ * .orderBy('id')
366
+ * .orderBy('fn', 'desc')
367
+ * .execute()
368
+ * ```
369
+ *
370
+ * The generated SQL (PostgreSQL):
371
+ *
372
+ * ```sql
373
+ * select "person"."first_name" as "fn"
374
+ * from "person"
375
+ * order by "id" asc, "fn" desc
376
+ * ```
377
+ *
378
+ * The order by expression can also be a `raw` expression or a subquery
379
+ * in addition to column references:
380
+ *
381
+ * ```ts
382
+ * await db
383
+ * .selectFrom('person')
384
+ * .selectAll()
385
+ * .orderBy((qb) => qb.selectFrom('pet')
386
+ * .select('pet.name')
387
+ * .whereRef('pet.owner_id', '=', 'person.id')
388
+ * .limit(1)
389
+ * )
390
+ * .orderBy(
391
+ * db.raw('concat(first_name, last_name)')
392
+ * )
393
+ * .execute()
394
+ * ```
395
+ *
396
+ * The generated SQL (PostgreSQL):
397
+ *
398
+ * ```sql
399
+ * select *
400
+ * from "person"
401
+ * order by
402
+ * ( select "pet"."name"
403
+ * from "pet"
404
+ * where "pet"."owner_id" = "person"."id"
405
+ * limit 1
406
+ * ) asc,
407
+ * concat(first_name, last_name) asc
408
+ * ```
409
+ *
410
+ * `dynamic.ref` can be used to refer to columns not known at
411
+ * compile time:
412
+ *
413
+ * ```ts
414
+ * async function someQuery(orderBy: string) {
415
+ * const { ref } = db.dynamic
416
+ *
417
+ * return await db
418
+ * .selectFrom('person')
419
+ * .select('person.first_name as fn')
420
+ * .orderBy(ref(orderBy))
421
+ * .execute()
422
+ * }
423
+ *
424
+ * someQuery('fn')
425
+ * ```
426
+ *
427
+ * The generated SQL (PostgreSQL):
428
+ *
429
+ * ```sql
430
+ * select "person"."first_name" as "fn"
431
+ * from "person"
432
+ * order by "fn" asc
433
+ * ```
434
+ */
435
+ orderBy(orderBy: OrderByExpression<DB, TB, O>, direction?: OrderByDirectionExpression): SelectQueryBuilder<DB, TB, O>;
436
+ /**
437
+ * Adds a `group by` clause to the query.
438
+ *
439
+ * ### Examples
440
+ *
441
+ * ```ts
442
+ * await db
443
+ * .selectFrom('person')
444
+ * .select([
445
+ * 'first_name',
446
+ * db.raw('max(id)').as('max_id')
447
+ * ])
448
+ * .groupBy('first_name')
449
+ * .execute()
450
+ * ```
451
+ *
452
+ * The generated SQL (PostgreSQL):
453
+ *
454
+ * ```sql
455
+ * select "first_name", max(id)
456
+ * from "person"
457
+ * group by "first_name"
458
+ * ```
459
+ *
460
+ * `groupBy` also accepts an array:
461
+ *
462
+ * ```ts
463
+ * const { raw } = db
464
+ *
465
+ * await db
466
+ * .selectFrom('person')
467
+ * .select([
468
+ * 'first_name',
469
+ * 'last_name',
470
+ * raw('max(id)').as('max_id')
471
+ * ])
472
+ * .groupBy([
473
+ * 'first_name',
474
+ * 'last_name'
475
+ * ])
476
+ * .execute()
477
+ * ```
478
+ *
479
+ * The generated SQL (PostgreSQL):
480
+ *
481
+ * ```sql
482
+ * select "first_name", "last_name", max(id)
483
+ * from "person"
484
+ * group by "first_name", "last_name"
485
+ * ```
486
+ *
487
+ * The group by expressions can also be subqueries or
488
+ * raw expressions:
489
+ *
490
+ * ```ts
491
+ * const { raw } = db
492
+ *
493
+ * await db
494
+ * .selectFrom('person')
495
+ * .select([
496
+ * 'first_name',
497
+ * 'last_name',
498
+ * raw('max(id)').as('max_id')
499
+ * ])
500
+ * .groupBy([
501
+ * raw('concat(first_name, last_name)'),
502
+ * (qb) => qb.selectFrom('pet').select('id').limit(1)
503
+ * ])
504
+ * .execute()
505
+ * ```
506
+ *
507
+ * `dynamic.ref` can be used to refer to columns not known at
508
+ * compile time:
509
+ *
510
+ * ```ts
511
+ * async function someQuery(groupBy: string) {
512
+ * const { ref } = db.dynamic
513
+ *
514
+ * return await db
515
+ * .selectFrom('person')
516
+ * .select('first_name')
517
+ * .groupBy(ref(groupBy))
518
+ * .execute()
519
+ * }
520
+ *
521
+ * someQuery('first_name')
522
+ * ```
523
+ *
524
+ * The generated SQL (PostgreSQL):
525
+ *
526
+ * ```sql
527
+ * select "first_name"
528
+ * from "person"
529
+ * group by "first_name"
530
+ * ```
531
+ */
532
+ groupBy(orderBy: ReadonlyArray<ReferenceExpression<DB, TB>>): SelectQueryBuilder<DB, TB, O>;
533
+ groupBy(orderBy: ReferenceExpression<DB, TB>): SelectQueryBuilder<DB, TB, O>;
534
+ /**
535
+ * Adds a limit clause to the query.
536
+ *
537
+ * ### Examples
538
+ *
539
+ * Select the first 10 rows of the result:
540
+ *
541
+ * ```ts
542
+ * return await db
543
+ * .selectFrom('person')
544
+ * .select('first_name')
545
+ * .limit(10)
546
+ * ```
547
+ *
548
+ * Select rows from index 10 to index 19 of the result:
549
+ *
550
+ * ```ts
551
+ * return await db
552
+ * .selectFrom('person')
553
+ * .select('first_name')
554
+ * .offset(10)
555
+ * .limit(10)
556
+ * ```
557
+ */
558
+ limit(limit: number): SelectQueryBuilder<DB, TB, O>;
559
+ /**
560
+ * Adds an offset clause to the query.
561
+ *
562
+ * ### Examples
563
+ *
564
+ * Select rows from index 10 to index 19 of the result:
565
+ *
566
+ * ```ts
567
+ * return await db
568
+ * .selectFrom('person')
569
+ * .select('first_name')
570
+ * .offset(10)
571
+ * .limit(10)
572
+ * ```
573
+ */
574
+ offset(offset: number): SelectQueryBuilder<DB, TB, O>;
575
+ /**
576
+ * Combines another select query or raw expression to this query using `union`.
577
+ *
578
+ * The output row type of the combined query must match `this` query.
579
+ *
580
+ * ### Examples
581
+ *
582
+ * ```ts
583
+ * db.selectFrom('person')
584
+ * .select(['id', 'first_name as name'])
585
+ * .union(db.selectFrom('pet').select(['id', 'name']))
586
+ * .orderBy('name')
587
+ * ```
588
+ */
589
+ union(expression: UnionExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
590
+ /**
591
+ * Combines another select query or raw expression to this query using `union all`.
592
+ *
593
+ * The output row type of the combined query must match `this` query.
594
+ *
595
+ * ### Examples
596
+ *
597
+ * ```ts
598
+ * db.selectFrom('person')
599
+ * .select(['id', 'first_name as name'])
600
+ * .unionAll(db.selectFrom('pet').select(['id', 'name']))
601
+ * .orderBy('name')
602
+ * ```
603
+ */
604
+ unionAll(expression: UnionExpression<DB, O>): SelectQueryBuilder<DB, TB, O>;
605
+ /**
606
+ * Simply calls the given function passing `this` as the only argument.
607
+ *
608
+ * This method can be useful when adding optional method calls:
609
+ *
610
+ * ### Examples
611
+ *
612
+ * ```ts
613
+ * db.selectFrom('person')
614
+ * .selectAll()
615
+ * .call((qb) => {
616
+ * if (something) {
617
+ * return qb.where('something', '=', something)
618
+ * } else {
619
+ * return qb.where('somethingElse', '=', somethingElse)
620
+ * }
621
+ * })
622
+ * .execute()
623
+ * ```
624
+ *
625
+ * The next example uses a helper funtion `log` to log a query:
626
+ *
627
+ * ```ts
628
+ * function log<T extends AnyQueryBuilder>(qb: T): T {
629
+ * console.log(qb.compile())
630
+ * return qb
631
+ * }
632
+ *
633
+ * db.selectFrom('person')
634
+ * .selectAll()
635
+ * .call(log)
636
+ * .execute()
637
+ * ```
638
+ */
639
+ call<T>(func: (qb: this) => T): T;
640
+ /**
641
+ * Gives an alias for the query. This method is only useful for sub queries.
642
+ *
643
+ * ### Examples
644
+ *
645
+ * ```ts
646
+ * await db.selectFrom('pet')
647
+ * .selectAll('pet')
648
+ * .select(
649
+ * (qb) => qb.selectFrom('person')
650
+ * .select('first_name')
651
+ * .whereRef('pet.owner_id', '=', 'person.id')
652
+ * .as('owner_first_name')
653
+ * )
654
+ * .execute()
655
+ * ```
656
+ */
657
+ as<A extends string>(alias: A): AliasedQueryBuilder<DB, TB, O, A>;
658
+ /**
659
+ * Change the output type of the query.
660
+ *
661
+ * You should only use this method as the last resort if the types
662
+ * don't support your use case.
663
+ */
664
+ castTo<T>(): SelectQueryBuilder<DB, TB, T>;
665
+ withPlugin(plugin: KyselyPlugin): SelectQueryBuilder<DB, TB, O>;
666
+ toOperationNode(): SelectQueryNode;
667
+ compile(): CompiledQuery;
668
+ /**
669
+ * Executes the query and returns an array of rows.
670
+ *
671
+ * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
672
+ */
673
+ execute(): Promise<O[]>;
674
+ /**
675
+ * Executes the query and returns the first result or undefined if
676
+ * the query returned no result.
677
+ */
678
+ executeTakeFirst(): Promise<SingleResultType<O>>;
679
+ /**
680
+ * Executes the query and returns the first result or throws if
681
+ * the query returned no result.
682
+ *
683
+ * By default an instance of {@link NoResultError} is thrown, but you can
684
+ * provide a custom error class as the only argument to throw a different
685
+ * error.
686
+ */
687
+ executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor): Promise<O>;
688
+ }
689
+ export interface SelectQueryBuilderProps {
690
+ readonly queryId: QueryId;
691
+ readonly queryNode: SelectQueryNode;
692
+ readonly executor: QueryExecutor;
693
+ readonly parseContext: ParseContext;
694
+ }
695
+ /**
696
+ * {@link SelectQueryBuilder} with an alias. The result of calling {@link SelectQueryBuilder.as}.
697
+ */
698
+ export declare class AliasedQueryBuilder<DB, TB extends keyof DB, O = undefined, A extends string = never> {
699
+ #private;
700
+ constructor(queryBuilder: SelectQueryBuilder<DB, TB, O>, alias: A);
701
+ /**
702
+ * @private
703
+ *
704
+ * This needs to be here just so that the typings work. Without this
705
+ * the generated .d.ts file contains no reference to the type param A
706
+ * which causes this type to be equal to AliasedQueryBuilder with any A
707
+ * as long as D, TB and O are the same.
708
+ */
709
+ protected get alias(): A;
710
+ toOperationNode(): AliasNode;
711
+ }