kysely 0.11.1 → 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 (216) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -2
  3. package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -6
  4. package/dist/cjs/dialect/postgres/postgres-query-compiler.d.ts +3 -0
  5. package/dist/cjs/dialect/postgres/postgres-query-compiler.js +9 -1
  6. package/dist/cjs/dialect/sqlite/sqlite-adapter.js +6 -2
  7. package/dist/cjs/dialect/sqlite/sqlite-driver.js +7 -7
  8. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -2
  9. package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +6 -6
  10. package/dist/cjs/driver/runtime-driver.js +1 -1
  11. package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +1 -0
  12. package/dist/cjs/dynamic/dynamic-reference-builder.js +9 -1
  13. package/dist/cjs/dynamic/dynamic.d.ts +6 -7
  14. package/dist/cjs/dynamic/dynamic.js +6 -7
  15. package/dist/cjs/index.d.ts +51 -33
  16. package/dist/cjs/index.js +48 -30
  17. package/dist/cjs/kysely.d.ts +39 -15
  18. package/dist/cjs/kysely.js +32 -9
  19. package/dist/cjs/migration/migration.d.ts +2 -2
  20. package/dist/cjs/operation-node/alias-node.d.ts +1 -1
  21. package/dist/cjs/operation-node/create-table-node.d.ts +6 -2
  22. package/dist/cjs/operation-node/create-table-node.js +6 -6
  23. package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
  24. package/dist/cjs/operation-node/insert-query-node.d.ts +4 -4
  25. package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
  26. package/dist/cjs/operation-node/operation-node-transformer.js +11 -1
  27. package/dist/cjs/operation-node/operation-node-utils.d.ts +1 -1
  28. package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
  29. package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
  30. package/dist/cjs/operation-node/operation-node.d.ts +1 -1
  31. package/dist/cjs/operation-node/query-node.d.ts +0 -2
  32. package/dist/cjs/operation-node/query-node.js +0 -10
  33. package/dist/cjs/operation-node/values-node.d.ts +15 -0
  34. package/dist/cjs/operation-node/values-node.js +18 -0
  35. package/dist/cjs/parser/complex-expression-parser.d.ts +9 -0
  36. package/dist/cjs/parser/complex-expression-parser.js +25 -0
  37. package/dist/cjs/parser/filter-parser.d.ts +13 -3
  38. package/dist/cjs/parser/filter-parser.js +56 -62
  39. package/dist/cjs/parser/insert-values-parser.d.ts +7 -10
  40. package/dist/cjs/parser/insert-values-parser.js +31 -39
  41. package/dist/cjs/parser/order-by-parser.d.ts +1 -1
  42. package/dist/cjs/parser/parse-context.d.ts +8 -8
  43. package/dist/cjs/parser/parse-context.js +10 -10
  44. package/dist/cjs/parser/reference-parser.d.ts +8 -7
  45. package/dist/cjs/parser/reference-parser.js +8 -17
  46. package/dist/cjs/parser/returning-parser.d.ts +1 -5
  47. package/dist/cjs/parser/select-parser.d.ts +12 -14
  48. package/dist/cjs/parser/select-parser.js +5 -9
  49. package/dist/cjs/parser/table-parser.d.ts +9 -11
  50. package/dist/cjs/parser/table-parser.js +2 -8
  51. package/dist/cjs/parser/union-parser.d.ts +2 -2
  52. package/dist/cjs/parser/union-parser.js +1 -6
  53. package/dist/cjs/parser/update-set-parser.d.ts +2 -8
  54. package/dist/cjs/parser/update-set-parser.js +6 -26
  55. package/dist/cjs/parser/value-parser.d.ts +9 -6
  56. package/dist/cjs/parser/value-parser.js +7 -30
  57. package/dist/cjs/parser/with-parser.d.ts +6 -3
  58. package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  59. package/dist/cjs/query-builder/delete-query-builder.d.ts +102 -0
  60. package/dist/cjs/query-builder/delete-query-builder.js +185 -0
  61. package/dist/cjs/query-builder/expression-builder.d.ts +8 -6
  62. package/dist/cjs/query-builder/expression-builder.js +3 -3
  63. package/dist/cjs/query-builder/function-builder.d.ts +2 -1
  64. package/dist/cjs/query-builder/function-builder.js +2 -1
  65. package/dist/cjs/query-builder/having-interface.d.ts +49 -0
  66. package/dist/cjs/query-builder/having-interface.js +2 -0
  67. package/dist/cjs/query-builder/insert-query-builder.d.ts +439 -0
  68. package/dist/cjs/query-builder/insert-query-builder.js +256 -0
  69. package/dist/cjs/query-builder/insert-result.d.ts +3 -2
  70. package/dist/cjs/query-builder/insert-result.js +3 -2
  71. package/dist/cjs/query-builder/join-builder.d.ts +22 -20
  72. package/dist/cjs/query-builder/join-builder.js +12 -12
  73. package/dist/cjs/query-builder/join-interface.d.ts +133 -0
  74. package/dist/cjs/query-builder/join-interface.js +2 -0
  75. package/dist/cjs/query-builder/no-result-error.d.ts +9 -0
  76. package/dist/cjs/query-builder/no-result-error.js +14 -0
  77. package/dist/cjs/query-builder/returning-interface.d.ts +73 -0
  78. package/dist/cjs/query-builder/returning-interface.js +2 -0
  79. package/dist/cjs/query-builder/select-query-builder.d.ts +711 -0
  80. package/dist/cjs/query-builder/select-query-builder.js +571 -0
  81. package/dist/cjs/query-builder/update-query-builder.d.ts +190 -0
  82. package/dist/cjs/query-builder/update-query-builder.js +279 -0
  83. package/dist/cjs/query-builder/where-interface.d.ts +381 -0
  84. package/dist/cjs/query-builder/where-interface.js +2 -0
  85. package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
  86. package/dist/cjs/query-compiler/default-query-compiler.js +22 -5
  87. package/dist/cjs/query-creator.d.ts +42 -40
  88. package/dist/cjs/query-creator.js +33 -28
  89. package/dist/cjs/query-executor/query-executor.d.ts +1 -1
  90. package/dist/cjs/query-executor/query-executor.js +1 -1
  91. package/dist/cjs/raw-builder/raw-builder.d.ts +2 -0
  92. package/dist/cjs/raw-builder/raw-builder.js +6 -0
  93. package/dist/cjs/schema/alter-table-builder.d.ts +2 -2
  94. package/dist/cjs/schema/column-definition-builder.d.ts +27 -20
  95. package/dist/cjs/schema/create-index-builder.d.ts +2 -1
  96. package/dist/cjs/schema/create-index-builder.js +2 -1
  97. package/dist/cjs/schema/create-table-builder.d.ts +26 -9
  98. package/dist/cjs/schema/create-table-builder.js +42 -9
  99. package/dist/cjs/schema/create-view-builder.d.ts +17 -3
  100. package/dist/cjs/schema/create-view-builder.js +25 -16
  101. package/dist/cjs/schema/schema.d.ts +18 -11
  102. package/dist/cjs/schema/schema.js +18 -11
  103. package/dist/cjs/util/dynamic-import.js +1 -1
  104. package/dist/cjs/util/log.d.ts +11 -8
  105. package/dist/cjs/util/log.js +25 -12
  106. package/dist/cjs/util/type-utils.d.ts +7 -7
  107. package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -2
  108. package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -6
  109. package/dist/esm/dialect/postgres/postgres-query-compiler.d.ts +3 -0
  110. package/dist/esm/dialect/postgres/postgres-query-compiler.js +9 -1
  111. package/dist/esm/dialect/sqlite/sqlite-adapter.js +6 -2
  112. package/dist/esm/dialect/sqlite/sqlite-driver.js +7 -7
  113. package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -2
  114. package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +6 -6
  115. package/dist/esm/driver/runtime-driver.js +1 -1
  116. package/dist/esm/dynamic/dynamic-reference-builder.d.ts +1 -0
  117. package/dist/esm/dynamic/dynamic-reference-builder.js +7 -0
  118. package/dist/esm/dynamic/dynamic.d.ts +6 -7
  119. package/dist/esm/dynamic/dynamic.js +6 -7
  120. package/dist/esm/index.d.ts +51 -33
  121. package/dist/esm/index.js +48 -30
  122. package/dist/esm/kysely.d.ts +39 -15
  123. package/dist/esm/kysely.js +32 -9
  124. package/dist/esm/migration/migration.d.ts +2 -2
  125. package/dist/esm/operation-node/alias-node.d.ts +1 -1
  126. package/dist/esm/operation-node/create-table-node.d.ts +6 -2
  127. package/dist/esm/operation-node/create-table-node.js +6 -6
  128. package/dist/esm/operation-node/create-view-node.d.ts +1 -0
  129. package/dist/esm/operation-node/insert-query-node.d.ts +4 -4
  130. package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
  131. package/dist/esm/operation-node/operation-node-transformer.js +11 -1
  132. package/dist/esm/operation-node/operation-node-utils.d.ts +1 -1
  133. package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
  134. package/dist/esm/operation-node/operation-node-visitor.js +1 -0
  135. package/dist/esm/operation-node/operation-node.d.ts +1 -1
  136. package/dist/esm/operation-node/query-node.d.ts +0 -2
  137. package/dist/esm/operation-node/query-node.js +0 -10
  138. package/dist/esm/operation-node/values-node.d.ts +15 -0
  139. package/dist/esm/operation-node/values-node.js +15 -0
  140. package/dist/esm/parser/complex-expression-parser.d.ts +9 -0
  141. package/dist/esm/parser/complex-expression-parser.js +20 -0
  142. package/dist/esm/parser/filter-parser.d.ts +13 -3
  143. package/dist/esm/parser/filter-parser.js +55 -62
  144. package/dist/esm/parser/insert-values-parser.d.ts +7 -10
  145. package/dist/esm/parser/insert-values-parser.js +31 -38
  146. package/dist/esm/parser/order-by-parser.d.ts +1 -1
  147. package/dist/esm/parser/parse-context.d.ts +8 -8
  148. package/dist/esm/parser/parse-context.js +10 -10
  149. package/dist/esm/parser/reference-parser.d.ts +8 -7
  150. package/dist/esm/parser/reference-parser.js +9 -18
  151. package/dist/esm/parser/returning-parser.d.ts +1 -5
  152. package/dist/esm/parser/select-parser.d.ts +12 -14
  153. package/dist/esm/parser/select-parser.js +6 -10
  154. package/dist/esm/parser/table-parser.d.ts +9 -11
  155. package/dist/esm/parser/table-parser.js +3 -9
  156. package/dist/esm/parser/union-parser.d.ts +2 -2
  157. package/dist/esm/parser/union-parser.js +1 -6
  158. package/dist/esm/parser/update-set-parser.d.ts +2 -8
  159. package/dist/esm/parser/update-set-parser.js +5 -24
  160. package/dist/esm/parser/value-parser.d.ts +9 -6
  161. package/dist/esm/parser/value-parser.js +8 -31
  162. package/dist/esm/parser/with-parser.d.ts +6 -3
  163. package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
  164. package/dist/esm/query-builder/delete-query-builder.d.ts +102 -0
  165. package/dist/esm/query-builder/delete-query-builder.js +181 -0
  166. package/dist/esm/query-builder/expression-builder.d.ts +8 -6
  167. package/dist/esm/query-builder/expression-builder.js +3 -3
  168. package/dist/esm/query-builder/function-builder.d.ts +2 -1
  169. package/dist/esm/query-builder/function-builder.js +2 -1
  170. package/dist/esm/query-builder/having-interface.d.ts +49 -0
  171. package/dist/esm/query-builder/having-interface.js +1 -0
  172. package/dist/esm/query-builder/insert-query-builder.d.ts +439 -0
  173. package/dist/esm/query-builder/insert-query-builder.js +252 -0
  174. package/dist/esm/query-builder/insert-result.d.ts +3 -2
  175. package/dist/esm/query-builder/insert-result.js +3 -2
  176. package/dist/esm/query-builder/join-builder.d.ts +22 -20
  177. package/dist/esm/query-builder/join-builder.js +12 -12
  178. package/dist/esm/query-builder/join-interface.d.ts +133 -0
  179. package/dist/esm/query-builder/join-interface.js +1 -0
  180. package/dist/esm/query-builder/no-result-error.d.ts +9 -0
  181. package/dist/esm/query-builder/no-result-error.js +10 -0
  182. package/dist/esm/query-builder/returning-interface.d.ts +73 -0
  183. package/dist/esm/query-builder/returning-interface.js +1 -0
  184. package/dist/esm/query-builder/select-query-builder.d.ts +711 -0
  185. package/dist/esm/query-builder/select-query-builder.js +566 -0
  186. package/dist/esm/query-builder/update-query-builder.d.ts +190 -0
  187. package/dist/esm/query-builder/update-query-builder.js +275 -0
  188. package/dist/esm/query-builder/where-interface.d.ts +381 -0
  189. package/dist/esm/query-builder/where-interface.js +1 -0
  190. package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
  191. package/dist/esm/query-compiler/default-query-compiler.js +22 -5
  192. package/dist/esm/query-creator.d.ts +42 -40
  193. package/dist/esm/query-creator.js +33 -28
  194. package/dist/esm/query-executor/query-executor.d.ts +1 -1
  195. package/dist/esm/query-executor/query-executor.js +1 -1
  196. package/dist/esm/raw-builder/raw-builder.d.ts +2 -0
  197. package/dist/esm/raw-builder/raw-builder.js +6 -0
  198. package/dist/esm/schema/alter-table-builder.d.ts +2 -2
  199. package/dist/esm/schema/column-definition-builder.d.ts +27 -20
  200. package/dist/esm/schema/create-index-builder.d.ts +2 -1
  201. package/dist/esm/schema/create-index-builder.js +2 -1
  202. package/dist/esm/schema/create-table-builder.d.ts +26 -9
  203. package/dist/esm/schema/create-table-builder.js +43 -10
  204. package/dist/esm/schema/create-view-builder.d.ts +17 -3
  205. package/dist/esm/schema/create-view-builder.js +25 -16
  206. package/dist/esm/schema/schema.d.ts +18 -11
  207. package/dist/esm/schema/schema.js +18 -11
  208. package/dist/esm/util/dynamic-import.js +1 -1
  209. package/dist/esm/util/log.d.ts +11 -8
  210. package/dist/esm/util/log.js +25 -12
  211. package/dist/esm/util/type-utils.d.ts +7 -7
  212. package/package.json +3 -3
  213. package/dist/cjs/query-builder/query-builder.d.ts +0 -1707
  214. package/dist/cjs/query-builder/query-builder.js +0 -1067
  215. package/dist/esm/query-builder/query-builder.d.ts +0 -1707
  216. package/dist/esm/query-builder/query-builder.js +0 -1061
@@ -1,1707 +0,0 @@
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, QueryBuilderWithTable, QueryBuilderWithLeftJoin, QueryBuilderWithRightJoin, QueryBuilderWithFullJoin } from '../parser/table-parser.js';
6
- import { SelectExpression, QueryBuilderWithSelection, SelectAllQueryBuilder } from '../parser/select-parser.js';
7
- import { ExistsExpression, FilterOperator } from '../parser/filter-parser.js';
8
- import { InsertObject } from '../parser/insert-values-parser.js';
9
- import { QueryBuilderWithReturning } from '../parser/returning-parser.js';
10
- import { ReferenceExpression } from '../parser/reference-parser.js';
11
- import { ValueExpressionOrList } from '../parser/value-parser.js';
12
- import { QueryNode } from '../operation-node/query-node.js';
13
- import { AnyColumn, SingleResultType } from '../util/type-utils.js';
14
- import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-by-parser.js';
15
- import { MutationObject } from '../parser/update-set-parser.js';
16
- import { Compilable } from '../util/compilable.js';
17
- import { QueryExecutor } from '../query-executor/query-executor.js';
18
- import { QueryId } from '../util/query-id.js';
19
- import { OnConflictConstraintTarget } from '../parser/on-conflict-parser.js';
20
- import { ParseContext } from '../parser/parse-context.js';
21
- import { UnionExpression } from '../parser/union-parser.js';
22
- /**
23
- * The main query builder class.
24
- *
25
- * @typeParam DB - A type whose keys are table names/aliases and values are interfaces that
26
- * define the table's columns and their types. This type defines the tables, subqueries
27
- * etc. that are available to the query. This type contains all tables, even the ones
28
- * that have not actually been joined to the query. the `TB` parameter defines the
29
- * table names/aliases that have been joined to the query.
30
- *
31
- * @typeParam TB - The names/aliases of the tables that have been joined to the query
32
- * using `from`, `with` any join method and so on. This type is a union of `DB`
33
- * type's keys. For example `'person' | 'pet'`.
34
- *
35
- * @typePAram O - The query output row type.
36
- */
37
- export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements OperationNodeSource, Compilable {
38
- #private;
39
- constructor(props: QueryBuilderProps);
40
- /**
41
- * Adds a `where` clause to the query.
42
- *
43
- * Also see {@link QueryBuilder.whereExists | whereExists}, {@link QueryBuilder.whereRef | whereRef}
44
- * and {@link QueryBuilder.whereRef | orWhere}.
45
- *
46
- * @example
47
- * Find a row by column value:
48
- *
49
- * ```ts
50
- * const person = await db
51
- * .selectFrom('person')
52
- * .selectAll()
53
- * .where('id', '=', 100)
54
- * .executeTakeFirst()
55
- * ```
56
- *
57
- * The generated SQL (PostgreSQL):
58
- *
59
- * ```sql
60
- * select * from "person" where "id" = $1
61
- * ```
62
- *
63
- * @example
64
- * Operator can be any supported operator or if the typings don't support it
65
- * you can always use `db.raw('your operator')`.
66
- *
67
- * ```ts
68
- * const persons = await db
69
- * .selectFrom('person')
70
- * .selectAll()
71
- * .where('id', '>', 100)
72
- * .execute()
73
- * ```
74
- *
75
- * The generated SQL (PostgreSQL):
76
- *
77
- * ```sql
78
- * select * from "person" where "id" > $1
79
- * ```
80
- *
81
- * @example
82
- * The `where` methods don't change the type of the query. You can add
83
- * conditional `where`s easily by doing something like this:
84
- *
85
- * ```ts
86
- * let query = db
87
- * .selectFrom('person')
88
- * .selectAll()
89
- *
90
- * if (firstName) {
91
- * query = query.where('first_name', '=', firstName)
92
- * }
93
- *
94
- * const persons = await query.execute()
95
- * ```
96
- *
97
- * This is true for basically all methods execpt the `select` and
98
- * `returning` methods, which DO change the return type of the
99
- * query.
100
- *
101
- * @example
102
- * Both the first and third argument can also be subqueries.
103
- * A subquery is defined by passing a function and calling
104
- * the `subQuery` method of the object passed into the
105
- * function:
106
- *
107
- * ```ts
108
- * const persons = await db
109
- * .selectFrom('person')
110
- * .selectAll()
111
- * .where(
112
- * (qb) => qb.subQuery('pet')
113
- * .select('pet.name')
114
- * .whereRef('pet.owner_id', '=', 'person.id')
115
- * .limit(1),
116
- * '=',
117
- * 'Fluffy'
118
- * )
119
- * .execute()
120
- * ```
121
- *
122
- * The generated SQL (PostgreSQL):
123
- *
124
- * ```sql
125
- * select *
126
- * from "person"
127
- * where (
128
- * select "pet"."name"
129
- * from "pet"
130
- * where "pet"."owner_id" = "person"."id"
131
- * limit $1
132
- * ) = $2
133
- * ```
134
- *
135
- * @example
136
- * A `where in` query can be built by using the `in` operator and an array
137
- * of values. The values in the array can also be subqueries or raw
138
- * instances.
139
- *
140
- * ```ts
141
- * const persons = await db
142
- * .selectFrom('person')
143
- * .selectAll()
144
- * .where('person.id', 'in', [100, 200, 300])
145
- * .execute()
146
- * ```
147
- *
148
- * The generated SQL (PostgreSQL):
149
- *
150
- * ```sql
151
- * select * from "person" where "id" in ($1, $2, $3)
152
- * ```
153
- *
154
- * @example
155
- * If everything else fails, you can always pass {@link Kysely.raw | raw}
156
- * as any of the arguments, including the operator:
157
- *
158
- * ```ts
159
- * const persons = await db
160
- * .selectFrom('person')
161
- * .selectAll()
162
- * .where(
163
- * db.raw('coalesce(first_name, last_name)'),
164
- * 'like',
165
- * '%' + name + '%',
166
- * )
167
- * .execute()
168
- * ```
169
- *
170
- * The generated SQL (PostgreSQL):
171
- *
172
- * ```sql
173
- * select * from "person"
174
- * where coalesce(first_name, last_name) like $1
175
- * ```
176
- *
177
- * @example
178
- * If you only pass one function argument to this method, it can be
179
- * used to create parentheses around other where clauses:
180
- *
181
- * ```ts
182
- * const persons = await db
183
- * .selectFrom('person')
184
- * .selectAll()
185
- * .where((qb) => qb
186
- * .where('id', '=', 1)
187
- * .orWhere('id', '=', 2)
188
- * )
189
- * .execute()
190
- * ```
191
- *
192
- * The generated SQL (PostgreSQL):
193
- *
194
- * ```sql
195
- * select * from "person" (where "id" = 1 or "id" = 2)
196
- * ```
197
- *
198
- * @example
199
- * In all examples above the columns were known at compile time
200
- * (except for the `raw` expressions). By default kysely only allows
201
- * you to refer to columns that exist in the database **and** can be
202
- * referred to in the current query and context.
203
- *
204
- * Sometimes you may want to refer to columns that come from the user
205
- * input and thus are not available at compile time.
206
- *
207
- * You have two options, `db.raw` or `db.dynamic`. The example below
208
- * uses both:
209
- *
210
- * ```ts
211
- * const { ref } = db.dynamic
212
- *
213
- * const persons = await db
214
- * .selectFrom('person')
215
- * .selectAll()
216
- * .where(ref(columnFromUserInput), '=', 1)
217
- * .orWhere(db.raw('??', [columnFromUserInput]), '=', 2)
218
- * .execute()
219
- * ```
220
- */
221
- where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: ValueExpressionOrList<DB, TB, RE>): QueryBuilder<DB, TB, O>;
222
- where(grouper: (qb: QueryBuilder<DB, TB, O>) => QueryBuilder<DB, TB, O>): QueryBuilder<DB, TB, O>;
223
- /**
224
- * Adds a `where` clause where both sides of the operator are references
225
- * to columns.
226
- *
227
- * The normal `where` method treats the right hand side argument as a
228
- * value by default. `whereRef` treats it as a column reference. This method is
229
- * expecially useful with joins and correclated subqueries.
230
- *
231
- * @example
232
- * Usage with a join:
233
- *
234
- * ```ts
235
- * db.selectFrom(['person', 'pet'])
236
- * .selectAll()
237
- * .whereRef('person.first_name', '=', 'pet.name')
238
- * ```
239
- *
240
- * The generated SQL (PostgreSQL):
241
- *
242
- * ```sql
243
- * select * from "person", "pet" where "person"."first_name" = "pet"."name"
244
- * ```
245
- *
246
- * @example
247
- * Usage in a subquery:
248
- *
249
- * ```ts
250
- * const persons = await db
251
- * .selectFrom('person')
252
- * .selectAll('person')
253
- * .select((qb) => qb
254
- * .subQuery('pet')
255
- * .select('name')
256
- * .whereRef('pet.owner_id', '=', 'person.id')
257
- * .limit(1)
258
- * .as('pet_name')
259
- * )
260
- * .execute()
261
- * ```
262
- *
263
- * The generated SQL (PostgreSQL):
264
- *
265
- * ```sql
266
- * select "person".*, (
267
- * select "name"
268
- * from "pet"
269
- * where "pet"."owner_id" = "person"."id"
270
- * limit $1
271
- * ) as "pet_name"
272
- * from "person"
273
- */
274
- whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): QueryBuilder<DB, TB, O>;
275
- /**
276
- * Adds an `or where` clause to the query. Otherwise works just like
277
- * {@link QueryBuilder.where | where}.
278
- *
279
- * It's often necessary to wrap `or where` clauses in parentheses to control
280
- * precendence. You can use the one argument version of the `where` method
281
- * for that. See the examples.
282
- *
283
- * @example
284
- * ```ts
285
- * const persons = await db
286
- * .selectFrom('person')
287
- * .selectAll()
288
- * .where('id', '=', 1)
289
- * .orWhere('id', '=', 2)
290
- * .execute()
291
- * ```
292
- *
293
- * The generated SQL (PostgreSQL):
294
- *
295
- * ```sql
296
- * select * from "person" where "id" = 1 or "id" = 2
297
- * ```
298
- *
299
- * @example
300
- * Grouping with parentheses:
301
- *
302
- * ```ts
303
- * const persons = await db
304
- * .selectFrom('person')
305
- * .selectAll()
306
- * .where((qb) => qb
307
- * .where('id', '=', 1)
308
- * .orWhere('id', '=', 2)
309
- * )
310
- * .execute()
311
- * ```
312
- *
313
- * The generated SQL (PostgreSQL):
314
- *
315
- * ```sql
316
- * select * from "person" (where "id" = 1 or "id" = 2)
317
- * ```
318
- *
319
- * @example
320
- * Even the first `where` can be an `orWhere`. This is useful
321
- * if you are looping through a set of conditions:
322
- *
323
- * ```ts
324
- * const persons = await db
325
- * .selectFrom('person')
326
- * .selectAll()
327
- * .where((qb) => qb
328
- * .orWhere('id', '=', 1)
329
- * .orWhere('id', '=', 2)
330
- * )
331
- * .execute()
332
- * ```
333
- *
334
- * The generated SQL (PostgreSQL):
335
- *
336
- * ```sql
337
- * select * from "person" (where "id" = 1 or "id" = 2)
338
- * ```
339
- */
340
- orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: ValueExpressionOrList<DB, TB, RE>): QueryBuilder<DB, TB, O>;
341
- orWhere(grouper: (qb: QueryBuilder<DB, TB, O>) => QueryBuilder<DB, TB, O>): QueryBuilder<DB, TB, O>;
342
- /**
343
- * Adds an `or where` clause to the query. Otherwise works just like
344
- * {@link QueryBuilder.whereRef | whereRef}.
345
- *
346
- * Also see {@link QueryBuilder.orWhere | orWhere} and {@link QueryBuilder.where | where}.
347
- */
348
- orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): QueryBuilder<DB, TB, O>;
349
- /**
350
- * Adds a `where exists` clause to the query.
351
- *
352
- * You can either use a subquery or a raw instance.
353
- *
354
- * @example
355
- * The query below selets all persons that own a pet named Catto:
356
- *
357
- * ```ts
358
- * const persons = await db
359
- * .selectFrom('person')
360
- * .selectAll()
361
- * .whereExists((qb) => qb
362
- * .subQuery('pet')
363
- * .select('pet.id')
364
- * .whereRef('person.id', '=', 'pet.owner_id')
365
- * .where('pet.name', '=', 'Catto')
366
- * )
367
- * .execute()
368
- * ```
369
- *
370
- * The generated SQL (PostgreSQL):
371
- *
372
- * ```sql
373
- * select * from "person"
374
- * where exists (
375
- * select "pet"."id"
376
- * from "pet"
377
- * where "person"."id" = "pet"."owner_id"
378
- * and "pet"."name" = $1
379
- * )
380
- * ```
381
- *
382
- * @example
383
- * The same query as in the previous example but with using raw:
384
- *
385
- * ```ts
386
- * db.selectFrom('person')
387
- * .selectAll()
388
- * .whereExists(
389
- * db.raw(
390
- * '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
391
- * ['Catto']
392
- * )
393
- * )
394
- * ```
395
- *
396
- * The generated SQL (PostgreSQL):
397
- *
398
- * ```sql
399
- * select * from "person"
400
- * where exists (
401
- * select pet.id
402
- * from pet
403
- * where person.id = pet.owner_id
404
- * and pet.name = $1
405
- * )
406
- * ```
407
- */
408
- whereExists(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
409
- /**
410
- * Just like {@link QueryBuilder.whereExists | whereExists} but creates a `not exists` clause.
411
- */
412
- whereNotExists(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
413
- /**
414
- * Just like {@link QueryBuilder.whereExists | whereExists} but creates a `or exists` clause.
415
- */
416
- orWhereExists(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
417
- /**
418
- * Just like {@link QueryBuilder.whereExists | whereExists} but creates a `or not exists` clause.
419
- */
420
- orWhereNotExists(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
421
- /**
422
- * Just like {@link QueryBuilder.where | where} but adds a `having` statement
423
- * instead of a `where` statement.
424
- */
425
- having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: ValueExpressionOrList<DB, TB, RE>): QueryBuilder<DB, TB, O>;
426
- having(grouper: (qb: QueryBuilder<DB, TB, O>) => QueryBuilder<DB, TB, O>): QueryBuilder<DB, TB, O>;
427
- /**
428
- * Just like {@link QueryBuilder.whereRef | whereRef} but adds a `having` statement
429
- * instead of a `where` statement.
430
- */
431
- havingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): QueryBuilder<DB, TB, O>;
432
- /**
433
- * Just like {@link QueryBuilder.orWhere | orWhere} but adds a `having` statement
434
- * instead of a `where` statement.
435
- */
436
- orHaving<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: ValueExpressionOrList<DB, TB, RE>): QueryBuilder<DB, TB, O>;
437
- orHaving(grouper: (qb: QueryBuilder<DB, TB, O>) => QueryBuilder<DB, TB, O>): QueryBuilder<DB, TB, O>;
438
- /**
439
- * Just like {@link QueryBuilder.orWhereRef | orWhereRef} but adds a `having` statement
440
- * instead of a `where` statement.
441
- */
442
- orHavingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): QueryBuilder<DB, TB, O>;
443
- /**
444
- * Just like {@link QueryBuilder.whereExists | whereExists} but adds a `having` statement
445
- * instead of a `where` statement.
446
- */
447
- havingExists(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
448
- /**
449
- * Just like {@link QueryBuilder.whereNotExists | whereNotExists} but adds a `having` statement
450
- * instead of a `where` statement.
451
- */
452
- havingNotExist(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
453
- /**
454
- * Just like {@link QueryBuilder.orWhereExists | orWhereExists} but adds a `having` statement
455
- * instead of a `where` statement.
456
- */
457
- orHavingExists(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
458
- /**
459
- * Just like {@link QueryBuilder.orWhereNotExists | orWhereNotExists} but adds a `having` statement
460
- * instead of a `where` statement.
461
- */
462
- orHavingNotExists(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
463
- /**
464
- * Adds a select clause to the query.
465
- *
466
- * When a column (or any expression) is selected, Kysely adds its type to the return
467
- * type of the query. Kysely is smart enough to parse the column names and types even
468
- * from aliased columns, subqueries, raw expressions etc.
469
- *
470
- * Kysely only allows you to select columns and expressions that exist and would
471
- * produce valid SQL. However, Kysely is not perfect and there may be cases where
472
- * the type inference doesn't work and you need to override it. You can always
473
- * use the {@link Kysely.dynamic | dynamic} module and {@link Kysely.raw | raw}
474
- * to override the types.
475
- *
476
- * Select calls are additive. Calling `select('id').select('first_name')` is the
477
- * same as calling `select(['id', 'first_name']).
478
- *
479
- * To select all columns of the query or specific tables see the
480
- * {@link QueryBuilder.selectAll | selectAll} method.
481
- *
482
- * @example
483
- * Select a single column:
484
- *
485
- * ```ts
486
- * const persons = await db.selectFrom('person')
487
- * .select('id')
488
- * .where('first_name', '=', 'Arnold')
489
- * .execute()
490
- *
491
- * persons[0].id
492
- * ```
493
- *
494
- * The generated SQL (PostgreSQL):
495
- *
496
- * ```sql
497
- * select "id" from "person" where "first_name" = $1
498
- * ```
499
- *
500
- * @example
501
- * Select a single column and specify a table:
502
- *
503
- * ```ts
504
- * const persons = await db.selectFrom(['person', 'pet'])
505
- * .select('person.id')
506
- * .execute()
507
- *
508
- * persons[0].id
509
- * ```
510
- *
511
- * The generated SQL (PostgreSQL):
512
- *
513
- * ```sql
514
- * select "person"."id" from "person", "pet"
515
- * ```
516
- *
517
- * @example
518
- * Select multiple columns:
519
- *
520
- * ```ts
521
- * const persons = await db.selectFrom('person')
522
- * .select(['person.id', 'first_name'])
523
- * .execute()
524
- *
525
- * persons[0].id
526
- * persons[0].first_name
527
- * ```
528
- *
529
- * The generated SQL (PostgreSQL):
530
- *
531
- * ```sql
532
- * select "person"."id", "first_name" from "person"
533
- * ```
534
- *
535
- * @example
536
- * Aliased selections:
537
- *
538
- * ```ts
539
- * const persons = await db.selectFrom('person')
540
- * .select([
541
- * 'person.first_name as fn',
542
- * 'person.last_name as ln'
543
- * ])
544
- * .execute()
545
- *
546
- * persons[0].fn
547
- * persons[0].ln
548
- * ```
549
- *
550
- * The generated SQL (PostgreSQL):
551
- *
552
- * ```sql
553
- * select
554
- * "person"."first_name" as "fn",
555
- * "person"."last_name" as "ln"
556
- * from "person"
557
- * ```
558
- *
559
- * @example
560
- * You can also select subqueries and raw expressions. Note that you
561
- * always need to give a name for the selections using the `as`
562
- * method:
563
- *
564
- * ```ts
565
- * const persons = await db.selectFrom('person')
566
- * .select([
567
- * (qb) => qb
568
- * .subQuery('pet')
569
- * .whereRef('person.id', '=', 'pet.owner_id')
570
- * .select('pet.name')
571
- * .limit(1)
572
- * .as('pet_name')
573
- * db.raw<string>("concat(first_name, ' ', last_name)").as('full_name')
574
- * ])
575
- * .execute()
576
- *
577
- * persons[0].pet_name
578
- * persons[0].full_name
579
- * ```
580
- *
581
- * The generated SQL (PostgreSQL):
582
- *
583
- * ```sql
584
- * select
585
- * (
586
- * select "pet"."name"
587
- * from "pet"
588
- * where "person"."id" = "pet"."owner_id"
589
- * limit $1
590
- * ) as "pet_name",
591
- * concat(first_name, ' ', last_name) as full_name
592
- * from "person"
593
- * ```
594
- *
595
- * In case you use `raw` you need to specify the type of the expression
596
- * (in this example `string`).
597
- *
598
- * @example
599
- * All the examples above assume you know the column names at compile time.
600
- * While it's better to build your code like that (that way you also know
601
- * the types) sometimes it's not possible or you just prefer to write more
602
- * dynamic code.
603
- * <br><br>
604
- * In this example, we use the `dynamic` module's methods to add selections
605
- * dynamically:
606
- *
607
- * ```ts
608
- * const { ref } = db.dynamic
609
- *
610
- * // Some column name provided by the user. Value not known at compile time.
611
- * const columnFromUserInput = req.query.select;
612
- *
613
- * // A type that lists all possible values `columnFromUserInput` can have.
614
- * // You can use `keyof Person` if any column of an interface is allowed.
615
- * type PossibleColumns = 'last_name' | 'first_name' | 'birth_date'
616
- *
617
- * const spersons = await db.selectFrom('person')
618
- * .select([
619
- * ref<PossibleColumns>(columnFromUserInput)
620
- * 'id'
621
- * ])
622
- * .execute()
623
- *
624
- * // The resulting type contains all `PossibleColumns` as optional fields
625
- * // because we cannot know which field was actually selected before
626
- * // running the code.
627
- * const lastName: string | undefined = persons[0].last_name
628
- * const firstName: string | undefined = persons[0].first_name
629
- * const birthDate: string | undefined = persons[0].birth_date
630
- *
631
- * // The result type also contains the compile time selection `id`.
632
- * persons[0].id
633
- * ```
634
- */
635
- select<S extends SelectExpression<DB, TB>>(selections: ReadonlyArray<S>): QueryBuilderWithSelection<DB, TB, O, S>;
636
- select<S extends SelectExpression<DB, TB>>(selection: S): QueryBuilderWithSelection<DB, TB, O, S>;
637
- /**
638
- * Adds `distinct on` selections to the select clause.
639
- *
640
- * Takes the same inputs as the {@link QueryBuilder.select | select} method.
641
- * See the {@link QueryBuilder.select | select} method's documentation for
642
- * more examples.
643
- *
644
- * @example
645
- * ```ts
646
- * await db.selectFrom('person')
647
- * .innerJoin('pet', 'pet.owner_id', 'person.id')
648
- * .where('pet.name', '=', 'Doggo')
649
- * .distinctOn('person.id')
650
- * .selectAll('person')
651
- * .execute()
652
- * ```
653
- *
654
- * The generated SQL (PostgreSQL):
655
- *
656
- * ```sql
657
- * select distinct on ("person"."id") "person".*
658
- * from "person"
659
- * inner join "pet" on "pet"."owner_id" = "person"."id"
660
- * where "pet"."name" = $1
661
- * ```
662
- */
663
- distinctOn<S extends SelectExpression<DB, TB>>(selections: ReadonlyArray<S>): QueryBuilder<DB, TB, O>;
664
- distinctOn<S extends SelectExpression<DB, TB>>(selection: S): QueryBuilder<DB, TB, O>;
665
- /**
666
- * Makes the selection distinct.
667
- *
668
- * @example
669
- * ```ts
670
- * await db.selectFrom('person')
671
- * .select('first_name')
672
- * .distinct()
673
- * .execute()
674
- * ```
675
- *
676
- * The generated SQL (PostgreSQL):
677
- *
678
- * ```sql
679
- * select distinct "first_name" from "person"
680
- * ```
681
- */
682
- distinct(): QueryBuilder<DB, TB, O>;
683
- /**
684
- * Adds the `for update` option to a select query on supported databases.
685
- */
686
- forUpdate(): QueryBuilder<DB, TB, O>;
687
- /**
688
- * Adds the `for share` option to a select query on supported databases.
689
- */
690
- forShare(): QueryBuilder<DB, TB, O>;
691
- /**
692
- * Adds the `for key share` option to a select query on supported databases.
693
- */
694
- forKeyShare(): QueryBuilder<DB, TB, O>;
695
- /**
696
- * Adds the `for no key update` option to a select query on supported databases.
697
- */
698
- forNoKeyUpdate(): QueryBuilder<DB, TB, O>;
699
- /**
700
- * Adds the `skip locked` option to a select query on supported databases.
701
- */
702
- skipLocked(): QueryBuilder<DB, TB, O>;
703
- /**
704
- * Adds the `nowait` option to a select query on supported databases.
705
- */
706
- noWait(): QueryBuilder<DB, TB, O>;
707
- /**
708
- * Adds a `select *` or `select table.*` clause to the query.
709
- *
710
- * @example
711
- * ```ts
712
- * const persons = await db
713
- * .selectFrom('person')
714
- * .selectAll()
715
- * .execute()
716
- * ```
717
- *
718
- * The generated SQL (PostgreSQL):
719
- *
720
- * ```sql
721
- * select * from "person"
722
- * ```
723
- *
724
- * @example
725
- * ```ts
726
- * const persons = await db
727
- * .selectFrom('person')
728
- * .selectAll('person')
729
- * .execute()
730
- * ```
731
- *
732
- * The generated SQL (PostgreSQL):
733
- *
734
- * ```sql
735
- * select "person".* from "person"
736
- * ```
737
- *
738
- * @example
739
- * ```ts
740
- * const personsPets = await db
741
- * .selectFrom(['person', 'pet'])
742
- * .selectAll(['person', 'pet'])
743
- * .execute()
744
- * ```
745
- *
746
- * The generated SQL (PostgreSQL):
747
- *
748
- * ```sql
749
- * select "person".*, "pet".* from "person", "pet"
750
- * ```
751
- */
752
- selectAll<T extends TB>(table: ReadonlyArray<T>): SelectAllQueryBuilder<DB, TB, O, T>;
753
- selectAll<T extends TB>(table: T): SelectAllQueryBuilder<DB, TB, O, T>;
754
- selectAll<T extends TB>(): SelectAllQueryBuilder<DB, TB, O, T>;
755
- /**
756
- * Joins another table to the query using an inner join.
757
- *
758
- * @example
759
- * Simple usage by providing a table name and two columns to join:
760
- *
761
- * ```ts
762
- * const result = await db
763
- * .selectFrom('person')
764
- * .innerJoin('pet', 'pet.owner_id', 'person.id')
765
- * // `select` needs to come after the call to `innerJoin` so
766
- * // that you can select from the joined table.
767
- * .select('person.id', 'pet.name')
768
- * .execute()
769
- *
770
- * result[0].id
771
- * result[0].name
772
- * ```
773
- *
774
- * The generated SQL (PostgreSQL):
775
- *
776
- * ```sql
777
- * select "person"."id", "pet"."name"
778
- * from "person"
779
- * inner join "pet"
780
- * on "pet"."owner_id" = "person"."id"
781
- * ```
782
- *
783
- * @example
784
- * You can give an alias for the joined table like this:
785
- *
786
- * ```ts
787
- * await db.selectFrom('person')
788
- * .innerJoin('pet as p', 'p.owner_id', 'person.id')
789
- * .where('p.name', '=', 'Doggo')
790
- * .selectAll()
791
- * .execute()
792
- * ```
793
- *
794
- * The generated SQL (PostgreSQL):
795
- *
796
- * ```sql
797
- * select *
798
- * from "person"
799
- * inner join "pet" as "p"
800
- * on "p"."owner_id" = "person"."id"
801
- * where "p".name" = $1
802
- * ```
803
- *
804
- * @example
805
- * You can provide a function as the second argument to get a join
806
- * builder for creating more complex joins. The join builder has a
807
- * bunch of `on*` methods for building the `on` clause of the join.
808
- * There's basically an equivalent for every `where` method
809
- * (`on`, `onRef`, `onExists` etc.). You can do all the same things
810
- * with the `on` method that you can with the corresponding `where`
811
- * method. See the `where` method documentation for more examples.
812
- *
813
- * ```ts
814
- * await db.selectFrom('person')
815
- * .innerJoin(
816
- * 'pet',
817
- * (join) => join
818
- * .onRef('pet.owner_id', '=', 'person.id')
819
- * .on('pet.name', '=', 'Doggo')
820
- * )
821
- * .selectAll()
822
- * .execute()
823
- * ```
824
- *
825
- * The generated SQL (PostgreSQL):
826
- *
827
- * ```sql
828
- * select *
829
- * from "person"
830
- * inner join "pet"
831
- * on "pet"."owner_id" = "person"."id"
832
- * and "pet"."name" = $1
833
- * ```
834
- *
835
- * @example
836
- * You can join a subquery by providing a function as the first
837
- * argument:
838
- *
839
- * ```ts
840
- * await db.selectFrom('person')
841
- * .innerJoin(
842
- * (qb) => qb.subQuery('pet')
843
- * .select(['owner_id', 'name'])
844
- * .where('name', '=', 'Doggo')
845
- * .as('doggos'),
846
- * 'doggos.owner_id',
847
- * 'person.id',
848
- * )
849
- * .selectAll()
850
- * .execute()
851
- * ```
852
- *
853
- * The generated SQL (PostgreSQL):
854
- *
855
- * ```sql
856
- * select *
857
- * from "person"
858
- * inner join (
859
- * select "owner_id", "name"
860
- * from "pet"
861
- * where "name" = $1
862
- * ) as "doggos"
863
- * on "doggos"."owner_id" = "person"."id"
864
- * ```
865
- */
866
- innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): QueryBuilderWithTable<DB, TB, O, TE>;
867
- innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithTable<DB, TB, O, TE>;
868
- /**
869
- * Just like {@link QueryBuilder.innerJoin | innerJoin} but adds a left join
870
- * instead of an inner join.
871
- */
872
- leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): QueryBuilderWithLeftJoin<DB, TB, O, TE>;
873
- leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithLeftJoin<DB, TB, O, TE>;
874
- /**
875
- * Just like {@link QueryBuilder.innerJoin | innerJoin} but adds a right join
876
- * instead of an inner join.
877
- */
878
- rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): QueryBuilderWithRightJoin<DB, TB, O, TE>;
879
- rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithRightJoin<DB, TB, O, TE>;
880
- /**
881
- * Just like {@link QueryBuilder.innerJoin | innerJoin} but adds a full join
882
- * instead of an inner join.
883
- */
884
- fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): QueryBuilderWithFullJoin<DB, TB, O, TE>;
885
- fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithFullJoin<DB, TB, O, TE>;
886
- /**
887
- * Sets the values to insert for an {@link Kysely.insertInto | insert} query.
888
- *
889
- * This method takes an object whose keys are column names and values are
890
- * values to insert. In addition to the column's type, the values can be
891
- * {@link Kysely.raw | raw} instances, select queries or the
892
- * {@link Kysely.generated | generated} placeholder.
893
- *
894
- * You must provide all values defined by the interface of the table you
895
- * are inserting into. Values that are generated by the database like auto incrementing
896
- * identifiers can be marked with the {@link Kysely.generated} placeholder unless you
897
- * want to insert a specific value instead of the generated default.
898
- *
899
- * The return value of an `insert` query is an instance of {@link InsertResult}. The
900
- * {@link InsertResult.insertId | insertId} field holds the auto incremented primary
901
- * key if the database returned one.
902
- *
903
- * On PostgreSQL and some other dialects, you need to call `returning` to get
904
- * something out of the query.
905
- *
906
- * @example
907
- * Insert a row into `person`:
908
- * ```ts
909
- * const id = await db
910
- * .insertInto('person')
911
- * .values({
912
- * id: db.generated,
913
- * first_name: 'Jennifer',
914
- * last_name: 'Aniston'
915
- * })
916
- * .executeTakeFirstOrThrow()
917
- * ```
918
- *
919
- * The generated SQL (PostgreSQL):
920
- *
921
- * ```sql
922
- * insert into "person" ("first_name", "last_name") values ($1, $2)
923
- * ```
924
- *
925
- * @example
926
- * On dialects that support it (for example PostgreSQL) you can insert multiple
927
- * rows by providing an array. Note that the return value is once again very
928
- * dialect-specific. Some databases may only return the id of the *last* inserted
929
- * row and some return nothing at all unless you call `returning`.
930
- *
931
- * ```ts
932
- * await db
933
- * .insertInto('person')
934
- * .values([{
935
- * id: db.generated,
936
- * first_name: 'Jennifer',
937
- * last_name: 'Aniston'
938
- * }, {
939
- * id: db.generated,
940
- * first_name: 'Arnold',
941
- * last_name: 'Schwarzenegger',
942
- * }])
943
- * .execute()
944
- * ```
945
- *
946
- * The generated SQL (PostgreSQL):
947
- *
948
- * ```sql
949
- * insert into "person" ("first_name", "last_name") values (($1, $2), ($3, $4))
950
- * ```
951
- *
952
- * @example
953
- * On postgresql you need to chain `returning` to the query to get
954
- * the inserted row's columns (or any other expression) as the
955
- * return value:
956
- *
957
- * ```ts
958
- * const row = await db
959
- * .insertInto('person')
960
- * .values({
961
- * id: db.generated,
962
- * first_name: 'Jennifer',
963
- * last_name: 'Aniston'
964
- * })
965
- * .returning('id')
966
- * .executeTakeFirstOrThrow()
967
- *
968
- * row.id
969
- * ```
970
- *
971
- * The generated SQL (PostgreSQL):
972
- *
973
- * ```sql
974
- * insert into "person" ("first_name", "last_name") values ($1, $2) returning "id"
975
- * ```
976
- *
977
- * @example
978
- * In addition to primitives, the values can also be `raw` expressions or
979
- * select queries:
980
- *
981
- * ```ts
982
- * const result = await db
983
- * .insertInto('person')
984
- * .values({
985
- * id: db.generated,
986
- * first_name: 'Jennifer',
987
- * last_name: db.raw('? || ?', ['Ani', 'ston']),
988
- * age: db.selectFrom('person').select(raw('avg(age)')),
989
- * })
990
- * .executeTakeFirst()
991
- *
992
- * console.log(result.insertId)
993
- * ```
994
- *
995
- * The generated SQL (PostgreSQL):
996
- *
997
- * ```sql
998
- * insert into "person" ("first_name", "last_name", "age")
999
- * values ($1, $2 || $3, (select avg(age) from "person"))
1000
- * ```
1001
- */
1002
- values(row: InsertObject<DB, TB>): QueryBuilder<DB, TB, O>;
1003
- values(row: ReadonlyArray<InsertObject<DB, TB>>): QueryBuilder<DB, TB, O>;
1004
- /**
1005
- * Ignores the insert if the column or constraint given as the first
1006
- * argument conflicts with the current rows in the database. The
1007
- * default behavior without this method call is to throw an error.
1008
- *
1009
- * For example if a table has a field `name` that has a unique constraint
1010
- * and you try to insert a row with a `name` that already exists in the
1011
- * database, calling `onConflictDoNothing('name')` will ignore the conflict
1012
- * and do nothing. By default the query would throw.
1013
- *
1014
- * Only some dialects like PostgreSQL and SQLite implement the `on conflict`
1015
- * statement. On MySQL you should use the {@link ignore} method to achieve
1016
- * similar results.
1017
- *
1018
- * Also see the {@link QueryBuilder.onConflictUpdate | onConflictUpdate}
1019
- * method if you want to perform an update in case of a conflict (upsert).
1020
- *
1021
- * @example
1022
- * ```ts
1023
- * await db
1024
- * .insertInto('pet')
1025
- * .values({
1026
- * id: db.generated,
1027
- * name: 'Catto',
1028
- * species: 'cat',
1029
- * })
1030
- * .onConflictDoNothing('name')
1031
- * .execute()
1032
- * ```
1033
- *
1034
- * The generated SQL (PostgreSQL):
1035
- *
1036
- * ```sql
1037
- * insert into "pet" ("name", "species")
1038
- * values ($1, $2)
1039
- * on conflict ("name") do nothing
1040
- * ```
1041
- *
1042
- * @example
1043
- * You can provied the name of the constraint instead of a column name
1044
- *
1045
- * ```ts
1046
- * await db
1047
- * .insertInto('pet')
1048
- * .values({
1049
- * id: db.generated,
1050
- * name: 'Catto',
1051
- * species: 'cat',
1052
- * })
1053
- * .onConflictDoNothing({
1054
- * constraint: 'pet_name_key'
1055
- * })
1056
- * .execute()
1057
- * ```
1058
- *
1059
- * The generated SQL (PostgreSQL):
1060
- *
1061
- * ```sql
1062
- * insert into "pet" ("name", "species")
1063
- * values ($1, $2)
1064
- * on conflict on constraint "pet_name_key"
1065
- * do nothing
1066
- * ```
1067
- */
1068
- onConflictDoNothing(column: AnyColumn<DB, TB>): QueryBuilder<DB, TB, O>;
1069
- onConflictDoNothing(columns: ReadonlyArray<AnyColumn<DB, TB>>): QueryBuilder<DB, TB, O>;
1070
- onConflictDoNothing(constraint: OnConflictConstraintTarget): QueryBuilder<DB, TB, O>;
1071
- /**
1072
- * Changes an `insert into` query to an `insert ignore into` query.
1073
- *
1074
- * If you use the ignore modifier, ignorable errors that occur while executing the
1075
- * insert statement are ignored. For example, without ignore, a row that duplicates
1076
- * an existing unique index or primary key value in the table causes a duplicate-key
1077
- * error and the statement is aborted. With ignore, the row is discarded and no error
1078
- * occurs.
1079
- *
1080
- * This is only supported on some dialects like MySQL. On most dialects you should
1081
- * use the {@link onConflictDoNothing} method.
1082
- *
1083
- * @example
1084
- * ```ts
1085
- * await db.insertInto('person')
1086
- * .ignore()
1087
- * .values(values)
1088
- * .execute()
1089
- * ```
1090
- */
1091
- ignore(): QueryBuilder<DB, TB, O>;
1092
- /**
1093
- * Ignores an insert if the column or constraint given as the first
1094
- * argument conflicts with the current rows in the database and
1095
- * performs an update on the conflicting row instead. This method
1096
- * can be used to implement an upsert operation.
1097
- *
1098
- * For example if a table has a field `name` that has a unique constraint
1099
- * and you try to insert a row with a `name` that already exists in the
1100
- * database, calling `onConfictUpdate('name', { species: 'hamster' })`
1101
- * will set the conflicting row's `species` field to value `'hamster'`.
1102
- * By default the query would throw.
1103
- *
1104
- * The second argument (updates) can be anything the {@link QueryBuilder.set | set}
1105
- * method accepts.
1106
- *
1107
- * The `on conflict do update` statement is only implemented by some dialects
1108
- * like PostgreSQL and SQLite. On MySQL you should use the {@link onDuplicateKeyUpdate}
1109
- * method instead.
1110
- *
1111
- * Also see the {@link QueryBuilder.onConflictDoNothing | onConflictDoNothing}
1112
- * method.
1113
- *
1114
- * @example
1115
- * ```ts
1116
- * await db
1117
- * .insertInto('pet')
1118
- * .values({
1119
- * id: db.generated,
1120
- * name: 'Catto',
1121
- * species: 'cat',
1122
- * })
1123
- * .onConflictUpdate('name', { species: 'hamster' })
1124
- * .execute()
1125
- * ```
1126
- *
1127
- * The generated SQL (PostgreSQL):
1128
- *
1129
- * ```sql
1130
- * insert into "pet" ("name", "species")
1131
- * values ($1, $2)
1132
- * on conflict ("name") do update set "species" = $3
1133
- * ```
1134
- *
1135
- * @example
1136
- * You can provied the name of the constraint instead of a column name
1137
- *
1138
- * ```ts
1139
- * await db
1140
- * .insertInto('pet')
1141
- * .values({
1142
- * id: db.generated,
1143
- * name: 'Catto',
1144
- * species: 'cat',
1145
- * })
1146
- * .onConflictUpdate(
1147
- * { constraint: 'pet_name_key' },
1148
- * { species: 'hamster' }
1149
- * )
1150
- * .execute()
1151
- * ```
1152
- *
1153
- * The generated SQL (PostgreSQL):
1154
- *
1155
- * ```sql
1156
- * insert into "pet" ("name", "species")
1157
- * values ($1, $2)
1158
- * on conflict on constraint "pet_name_key"
1159
- * do update set "species" = $3
1160
- * ```
1161
- */
1162
- onConflictUpdate(column: AnyColumn<DB, TB>, updates: MutationObject<DB, TB>): QueryBuilder<DB, TB, O>;
1163
- onConflictUpdate(columns: ReadonlyArray<AnyColumn<DB, TB>>, updates: MutationObject<DB, TB>): QueryBuilder<DB, TB, O>;
1164
- onConflictUpdate(constraint: OnConflictConstraintTarget, updates: MutationObject<DB, TB>): QueryBuilder<DB, TB, O>;
1165
- /**
1166
- * Adds `on duplicate key update` to an insert query.
1167
- *
1168
- * If you specify `on duplicate key update`, and a row is inserted that would cause
1169
- * a duplicate value in a unique index or primary key, an update of the old row occurs.
1170
- *
1171
- * This is only implemented by some dialects like MySQL. On most dialects you should
1172
- * use {@link onConflictUpdate} instead.
1173
- *
1174
- * @example
1175
- * ```ts
1176
- * await db
1177
- * .insertInto('person')
1178
- * .values(values)
1179
- * .onDuplicateKeyUpdate({ species: 'hamster' })
1180
- * ```
1181
- */
1182
- onDuplicateKeyUpdate(updates: MutationObject<DB, TB>): QueryBuilder<DB, TB, O>;
1183
- /**
1184
- * Sets the values to update for an {@link Kysely.updateTable | update} query.
1185
- *
1186
- * This method takes an object whose keys are column names and values are
1187
- * values to update. In addition to the column's type, the values can be `raw`
1188
- * instances or select queries.
1189
- *
1190
- * The return value of an update query is an instance of {@link UpdateResult}.
1191
- * You can use the {@link QueryBuilder.returning | returning} method on
1192
- * supported databases to get out the updated rows.
1193
- *
1194
- * @example
1195
- * Update a row in `person` table:
1196
- *
1197
- * ```ts
1198
- * const result = await db
1199
- * .updateTable('person')
1200
- * .set({
1201
- * first_name: 'Jennifer',
1202
- * last_name: 'Aniston'
1203
- * })
1204
- * .where('id', '=', 1)
1205
- * .executeTakeFirst()
1206
- *
1207
- * console.log(result.numUpdatedRows)
1208
- * ```
1209
- *
1210
- * The generated SQL (PostgreSQL):
1211
- *
1212
- * ```sql
1213
- * update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3
1214
- * ```
1215
- *
1216
- * @example
1217
- * On postgresql you ca chain `returning` to the query to get
1218
- * the updated rows' columns (or any other expression) as the
1219
- * return value:
1220
- *
1221
- * ```ts
1222
- * const row = await db
1223
- * .updateTable('person')
1224
- * .set({
1225
- * first_name: 'Jennifer',
1226
- * last_name: 'Aniston'
1227
- * })
1228
- * .where('id', '=', 1)
1229
- * .returning('id')
1230
- * .executeTakeFirstOrThrow()
1231
- *
1232
- * row.id
1233
- * ```
1234
- *
1235
- * The generated SQL (PostgreSQL):
1236
- *
1237
- * ```sql
1238
- * update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
1239
- * ```
1240
- *
1241
- * @example
1242
- * In addition to primitives, the values can also be `raw` expressions or
1243
- * select queries:
1244
- *
1245
- * ```ts
1246
- * const result = await db
1247
- * .updateTable('person')
1248
- * .set({
1249
- * first_name: 'Jennifer',
1250
- * last_name: db.raw('? || ?', ['Ani', 'ston']),
1251
- * age: db.selectFrom('person').select(raw('avg(age)')),
1252
- * })
1253
- * .where('id', '=', 1)
1254
- * .executeTakeFirst()
1255
- *
1256
- * console.log(result.numUpdatedRows)
1257
- * ```
1258
- *
1259
- * The generated SQL (PostgreSQL):
1260
- *
1261
- * ```sql
1262
- * update "person" set
1263
- * "first_name" = $1,
1264
- * "last_name" = $2 || $3,
1265
- * "age" = (select avg(age) from "person")
1266
- * where "id" = $4
1267
- * ```
1268
- */
1269
- set(row: MutationObject<DB, TB>): QueryBuilder<DB, TB, O>;
1270
- /**
1271
- * Allows you to return data from modified rows.
1272
- *
1273
- * On supported databases like PostgreSQL, this method can be chained to
1274
- * `insert`, `update` and `delete` queries to return data.
1275
- *
1276
- * Note that on SQLite you need to give aliases for the expressions to avoid
1277
- * [this bug](https://sqlite.org/forum/forumpost/033daf0b32) in SQLite.
1278
- * For example `.returning('id as id')`.
1279
- *
1280
- * Also see the {@link QueryBuilder.returningAll | returningAll} method.
1281
- *
1282
- * @example
1283
- * Return one column:
1284
- *
1285
- * ```ts
1286
- * const { id } = await db
1287
- * .insertInto('person')
1288
- * .values({
1289
- * id: db.generated,
1290
- * first_name: 'Jennifer',
1291
- * last_name: 'Aniston'
1292
- * })
1293
- * .returning('id')
1294
- * .executeTakeFirst()
1295
- * ```
1296
- *
1297
- * @example
1298
- * Return multiple columns:
1299
- *
1300
- * ```ts
1301
- * const { id, first_name } = await db
1302
- * .insertInto('person')
1303
- * .values({
1304
- * id: db.generated,
1305
- * first_name: 'Jennifer',
1306
- * last_name: 'Aniston'
1307
- * })
1308
- * .returning(['id', 'last_name'])
1309
- * .executeTakeFirst()
1310
- * ```
1311
- *
1312
- * @example
1313
- * Return arbitrary expressions:
1314
- *
1315
- * ```ts
1316
- * const { raw } = db
1317
- *
1318
- * const { id, full_name, first_pet_id } = await db
1319
- * .insertInto('person')
1320
- * .values({
1321
- * id: db.generated,
1322
- * first_name: 'Jennifer',
1323
- * last_name: 'Aniston'
1324
- * })
1325
- * .returning([
1326
- * 'id as id',
1327
- * raw<string>(`concat(first_name, ' ', last_name)`).as('full_name'),
1328
- * (qb) => qb.subQuery('pets').select('pet.id').limit(1).as('first_pet_id')
1329
- * ])
1330
- * .executeTakeFirst()
1331
- * ```
1332
- */
1333
- returning<S extends SelectExpression<DB, TB>>(selections: ReadonlyArray<S>): QueryBuilderWithReturning<DB, TB, O, S>;
1334
- returning<S extends SelectExpression<DB, TB>>(selection: S): QueryBuilderWithReturning<DB, TB, O, S>;
1335
- /**
1336
- * Adds a `returning *` to an insert/update/delete query on databases
1337
- * that support `returning` such as PostgreSQL.
1338
- */
1339
- returningAll(): QueryBuilder<DB, TB, DB[TB]>;
1340
- /**
1341
- * Adds an `order by` clause to the query.
1342
- *
1343
- * `orderBy` calls are additive. To order by multiple columns, call `orderBy`
1344
- * multiple times.
1345
- *
1346
- * The first argument is the expression to order by and the second is the
1347
- * order (`asc` or `desc`).
1348
- *
1349
- * @example
1350
- * ```ts
1351
- * await db
1352
- * .selectFrom('person')
1353
- * .select('person.first_name as fn')
1354
- * .orderBy('id')
1355
- * .orderBy('fn', 'desc')
1356
- * .execute()
1357
- * ```
1358
- *
1359
- * The generated SQL (PostgreSQL):
1360
- *
1361
- * ```sql
1362
- * select "person"."first_name" as "fn"
1363
- * from "person"
1364
- * order by "id" asc, "fn" desc
1365
- * ```
1366
- *
1367
- * @example
1368
- * The order by expression can also be a `raw` expression or a subquery
1369
- * in addition to column references:
1370
- *
1371
- * ```ts
1372
- * await db
1373
- * .selectFrom('person')
1374
- * .selectAll()
1375
- * .orderBy((qb) => qb.subQuery('pet')
1376
- * .select('pet.name')
1377
- * .whereRef('pet.owner_id', '=', 'person.id')
1378
- * .limit(1)
1379
- * )
1380
- * .orderBy(
1381
- * db.raw('concat(first_name, last_name)')
1382
- * )
1383
- * .execute()
1384
- * ```
1385
- *
1386
- * The generated SQL (PostgreSQL):
1387
- *
1388
- * ```sql
1389
- * select *
1390
- * from "person"
1391
- * order by
1392
- * ( select "pet"."name"
1393
- * from "pet"
1394
- * where "pet"."owner_id" = "person"."id"
1395
- * limit 1
1396
- * ) asc,
1397
- * concat(first_name, last_name) asc
1398
- * ```
1399
- *
1400
- * @example
1401
- * `dynamic.ref` can be used to refer to columns not known at
1402
- * compile time:
1403
- *
1404
- * ```ts
1405
- * async function someQuery(orderBy: string) {
1406
- * const { ref } = db.dynamic
1407
- *
1408
- * return await db
1409
- * .selectFrom('person')
1410
- * .select('person.first_name as fn')
1411
- * .orderBy(ref(orderBy))
1412
- * .execute()
1413
- * }
1414
- *
1415
- * someQuery('fn')
1416
- * ```
1417
- *
1418
- * The generated SQL (PostgreSQL):
1419
- *
1420
- * ```sql
1421
- * select "person"."first_name" as "fn"
1422
- * from "person"
1423
- * order by "fn" asc
1424
- * ```
1425
- */
1426
- orderBy(orderBy: OrderByExpression<DB, TB, O>, direction?: OrderByDirectionExpression): QueryBuilder<DB, TB, O>;
1427
- /**
1428
- * Adds a `group by` clause to the query.
1429
- *
1430
- * @example
1431
- * ```ts
1432
- * await db
1433
- * .selectFrom('person')
1434
- * .select([
1435
- * 'first_name',
1436
- * db.raw('max(id)').as('max_id')
1437
- * ])
1438
- * .groupBy('first_name')
1439
- * .execute()
1440
- * ```
1441
- *
1442
- * The generated SQL (PostgreSQL):
1443
- *
1444
- * ```sql
1445
- * select "first_name", max(id)
1446
- * from "person"
1447
- * group by "first_name"
1448
- * ```
1449
- *
1450
- * @example
1451
- * `groupBy` also accepts an array:
1452
- *
1453
- * ```ts
1454
- * const { raw } = db
1455
- *
1456
- * await db
1457
- * .selectFrom('person')
1458
- * .select([
1459
- * 'first_name',
1460
- * 'last_name',
1461
- * raw('max(id)').as('max_id')
1462
- * ])
1463
- * .groupBy([
1464
- * 'first_name',
1465
- * 'last_name'
1466
- * ])
1467
- * .execute()
1468
- * ```
1469
- *
1470
- * The generated SQL (PostgreSQL):
1471
- *
1472
- * ```sql
1473
- * select "first_name", "last_name", max(id)
1474
- * from "person"
1475
- * group by "first_name", "last_name"
1476
- * ```
1477
- *
1478
- * @example
1479
- * The group by expressions can also be subqueries or
1480
- * raw expressions:
1481
- *
1482
- * ```ts
1483
- * const { raw } = db
1484
- *
1485
- * await db
1486
- * .selectFrom('person')
1487
- * .select([
1488
- * 'first_name',
1489
- * 'last_name',
1490
- * raw('max(id)').as('max_id')
1491
- * ])
1492
- * .groupBy([
1493
- * raw('concat(first_name, last_name)'),
1494
- * (qb) => qb.subQuery('pet').select('id').limit(1)
1495
- * ])
1496
- * .execute()
1497
- * ```
1498
- *
1499
- * @example
1500
- * `dynamic.ref` can be used to refer to columns not known at
1501
- * compile time:
1502
- *
1503
- * ```ts
1504
- * async function someQuery(groupBy: string) {
1505
- * const { ref } = db.dynamic
1506
- *
1507
- * return await db
1508
- * .selectFrom('person')
1509
- * .select('first_name')
1510
- * .groupBy(ref(groupBy))
1511
- * .execute()
1512
- * }
1513
- *
1514
- * someQuery('first_name')
1515
- * ```
1516
- *
1517
- * The generated SQL (PostgreSQL):
1518
- *
1519
- * ```sql
1520
- * select "first_name"
1521
- * from "person"
1522
- * group by "first_name"
1523
- * ```
1524
- */
1525
- groupBy(orderBy: ReadonlyArray<ReferenceExpression<DB, TB>>): QueryBuilder<DB, TB, O>;
1526
- groupBy(orderBy: ReferenceExpression<DB, TB>): QueryBuilder<DB, TB, O>;
1527
- /**
1528
- * Adds a limit clause to the query.
1529
- *
1530
- * @example
1531
- * Select the first 10 rows of the result:
1532
- *
1533
- * ```ts
1534
- * return await db
1535
- * .selectFrom('person')
1536
- * .select('first_name')
1537
- * .limit(10)
1538
- * ```
1539
- *
1540
- * @example
1541
- * Select rows from index 10 to index 19 of the result:
1542
- *
1543
- * ```ts
1544
- * return await db
1545
- * .selectFrom('person')
1546
- * .select('first_name')
1547
- * .offset(10)
1548
- * .limit(10)
1549
- * ```
1550
- */
1551
- limit(limit: number): QueryBuilder<DB, TB, O>;
1552
- /**
1553
- * Adds an offset clause to the query.
1554
- *
1555
- * @example
1556
- * Select rows from index 10 to index 19 of the result:
1557
- *
1558
- * ```ts
1559
- * return await db
1560
- * .selectFrom('person')
1561
- * .select('first_name')
1562
- * .offset(10)
1563
- * .limit(10)
1564
- * ```
1565
- */
1566
- offset(offset: number): QueryBuilder<DB, TB, O>;
1567
- /**
1568
- * Combines another select query or raw expression to this query using `union`.
1569
- *
1570
- * The output row type of the combined query must match `this` query.
1571
- *
1572
- * @xample
1573
- * ```ts
1574
- * db.selectFrom('person')
1575
- * .select(['id', 'first_name as name'])
1576
- * .union(db.selectFrom('pet').select(['id', 'name']))
1577
- * .orderBy('name')
1578
- * ```
1579
- */
1580
- union(expression: UnionExpression<DB, O>): QueryBuilder<DB, TB, O>;
1581
- /**
1582
- * Combines another select query or raw expression to this query using `union all`.
1583
- *
1584
- * The output row type of the combined query must match `this` query.
1585
- *
1586
- * @xample
1587
- * ```ts
1588
- * db.selectFrom('person')
1589
- * .select(['id', 'first_name as name'])
1590
- * .unionAll(db.selectFrom('pet').select(['id', 'name']))
1591
- * .orderBy('name')
1592
- * ```
1593
- */
1594
- unionAll(expression: UnionExpression<DB, O>): QueryBuilder<DB, TB, O>;
1595
- /**
1596
- * Simply calls the given function passing `this` as the only argument.
1597
- *
1598
- * This method can be useful when adding optional method calls:
1599
- *
1600
- * @example
1601
- * ```ts
1602
- * db.selectFrom('person')
1603
- * .selectAll()
1604
- * .call((qb) => {
1605
- * if (something) {
1606
- * return qb.where('something', '=', something)
1607
- * } else {
1608
- * return qb.where('somethingElse', '=', somethingElse)
1609
- * }
1610
- * })
1611
- * .execute()
1612
- * ```
1613
- *
1614
- * The next example uses a helper funtion `log` to log a query:
1615
- *
1616
- * @example
1617
- * ```ts
1618
- * function log<T extends AnyQueryBuilder>(qb: T): T {
1619
- * console.log(qb.compile())
1620
- * return qb
1621
- * }
1622
- *
1623
- * db.selectFrom('person')
1624
- * .selectAll()
1625
- * .call(log)
1626
- * .execute()
1627
- * ```
1628
- */
1629
- call<T>(func: (qb: this) => T): T;
1630
- /**
1631
- * Gives an alias for the query. This method is only useful for sub queries.
1632
- *
1633
- * @example
1634
- * ```ts
1635
- * await db.selectFrom('pet')
1636
- * .selectAll('pet')
1637
- * .select(
1638
- * (qb) => qb.subQuery('person')
1639
- * .select('first_name')
1640
- * .whereRef('pet.owner_id', '=', 'person.id')
1641
- * .as('owner_first_name')
1642
- * )
1643
- * .execute()
1644
- * ```
1645
- */
1646
- as<A extends string>(alias: A): AliasedQueryBuilder<DB, TB, O, A>;
1647
- /**
1648
- * Change the output type of the query.
1649
- *
1650
- * You should only use this method as the last resort if the types
1651
- * don't support your use case.
1652
- */
1653
- castTo<T>(): QueryBuilder<DB, TB, T>;
1654
- toOperationNode(): QueryNode;
1655
- compile(): CompiledQuery;
1656
- /**
1657
- * Executes the query and returns an array of rows.
1658
- *
1659
- * Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
1660
- */
1661
- execute(): Promise<O[]>;
1662
- /**
1663
- * Executes the query and returns the first result or undefined if
1664
- * the query returned no result.
1665
- */
1666
- executeTakeFirst(): Promise<SingleResultType<O>>;
1667
- /**
1668
- * Executes the query and returns the first result or throws if
1669
- * the query returned no result.
1670
- *
1671
- * By default an instance of {@link NoResultError} is thrown, but you can
1672
- * provide a custom error class as the only argument to throw a different
1673
- * error.
1674
- */
1675
- executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor): Promise<O>;
1676
- }
1677
- export interface QueryBuilderProps {
1678
- readonly queryId: QueryId;
1679
- readonly queryNode: QueryNode;
1680
- readonly executor: QueryExecutor;
1681
- readonly parseContext: ParseContext;
1682
- }
1683
- /**
1684
- * {@link QueryBuilder} with an alias. The result of calling {@link QueryBuilder.as}.
1685
- */
1686
- export declare class AliasedQueryBuilder<DB, TB extends keyof DB, O = undefined, A extends string = never> {
1687
- #private;
1688
- constructor(queryBuilder: QueryBuilder<DB, TB, O>, alias: A);
1689
- /**
1690
- * @private
1691
- *
1692
- * This needs to be here just so that the typings work. Without this
1693
- * the generated .d.ts file contains no reference to the type param A
1694
- * which causes this type to be equal to AliasedQueryBuilder with any A
1695
- * as long as D, TB and O are the same.
1696
- */
1697
- protected get alias(): A;
1698
- toOperationNode(): AliasNode;
1699
- }
1700
- export declare type NoResultErrorConstructor = new (node: QueryNode) => Error;
1701
- export declare class NoResultError extends Error {
1702
- /**
1703
- * The operation node tree of the query that was executed.
1704
- */
1705
- readonly node: QueryNode;
1706
- constructor(node: QueryNode);
1707
- }