kysely 0.3.4 → 0.3.9

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 (80) hide show
  1. package/.prettierignore +1 -0
  2. package/README.md +9 -0
  3. package/dist/cjs/dialect/postgres/postgres-driver.js +2 -1
  4. package/dist/cjs/driver/driver-config.d.ts +6 -0
  5. package/dist/cjs/index.d.ts +11 -0
  6. package/dist/cjs/index.js +1 -0
  7. package/dist/cjs/kysely.d.ts +25 -0
  8. package/dist/cjs/kysely.js +27 -0
  9. package/dist/cjs/operation-node/operation-node-transformer.js +2 -1
  10. package/dist/cjs/operation-node/select-query-node.d.ts +4 -2
  11. package/dist/cjs/operation-node/select-query-node.js +9 -1
  12. package/dist/cjs/parser/filter-parser.d.ts +6 -7
  13. package/dist/cjs/parser/filter-parser.js +10 -19
  14. package/dist/cjs/parser/insert-values-parser.d.ts +9 -1
  15. package/dist/cjs/parser/insert-values-parser.js +9 -5
  16. package/dist/cjs/parser/join-parser.d.ts +2 -2
  17. package/dist/cjs/parser/join-parser.js +1 -1
  18. package/dist/cjs/parser/mutation-parser.d.ts +2 -3
  19. package/dist/cjs/parser/reference-parser.d.ts +8 -3
  20. package/dist/cjs/parser/returning-parser.d.ts +2 -2
  21. package/dist/cjs/parser/select-parser.d.ts +6 -5
  22. package/dist/cjs/parser/select-parser.js +1 -1
  23. package/dist/cjs/parser/table-parser.d.ts +2 -2
  24. package/dist/cjs/parser/value-parser.d.ts +6 -7
  25. package/dist/cjs/parser/value-parser.js +3 -1
  26. package/dist/cjs/parser/with-parser.d.ts +2 -1
  27. package/dist/cjs/query-builder/join-builder.d.ts +9 -9
  28. package/dist/cjs/query-builder/join-builder.js +8 -8
  29. package/dist/cjs/query-builder/query-builder.d.ts +202 -106
  30. package/dist/cjs/query-builder/query-builder.js +44 -25
  31. package/dist/cjs/query-builder/type-utils.d.ts +23 -6
  32. package/dist/cjs/query-compiler/default-query-compiler.js +7 -6
  33. package/dist/cjs/query-creator.d.ts +2 -0
  34. package/dist/cjs/query-creator.js +2 -0
  35. package/dist/cjs/schema/alter-table-builder.d.ts +3 -2
  36. package/dist/cjs/schema/column-definition-builder.d.ts +3 -3
  37. package/dist/cjs/util/generated-placeholder.d.ts +3 -0
  38. package/dist/cjs/util/generated-placeholder.js +11 -0
  39. package/dist/cjs/util/object-utils.d.ts +1 -0
  40. package/dist/cjs/util/object-utils.js +2 -1
  41. package/dist/esm/dialect/postgres/postgres-driver.js +2 -1
  42. package/dist/esm/driver/driver-config.d.ts +6 -0
  43. package/dist/esm/index.d.ts +11 -0
  44. package/dist/esm/index.js +1 -0
  45. package/dist/esm/kysely.d.ts +25 -0
  46. package/dist/esm/kysely.js +27 -0
  47. package/dist/esm/operation-node/operation-node-transformer.js +2 -1
  48. package/dist/esm/operation-node/select-query-node.d.ts +4 -2
  49. package/dist/esm/operation-node/select-query-node.js +9 -1
  50. package/dist/esm/parser/filter-parser.d.ts +6 -7
  51. package/dist/esm/parser/filter-parser.js +5 -14
  52. package/dist/esm/parser/insert-values-parser.d.ts +9 -1
  53. package/dist/esm/parser/insert-values-parser.js +7 -3
  54. package/dist/esm/parser/join-parser.d.ts +2 -2
  55. package/dist/esm/parser/join-parser.js +2 -2
  56. package/dist/esm/parser/mutation-parser.d.ts +2 -3
  57. package/dist/esm/parser/reference-parser.d.ts +8 -3
  58. package/dist/esm/parser/reference-parser.js +1 -1
  59. package/dist/esm/parser/returning-parser.d.ts +2 -2
  60. package/dist/esm/parser/select-parser.d.ts +6 -5
  61. package/dist/esm/parser/select-parser.js +2 -2
  62. package/dist/esm/parser/table-parser.d.ts +2 -2
  63. package/dist/esm/parser/value-parser.d.ts +6 -7
  64. package/dist/esm/parser/value-parser.js +4 -2
  65. package/dist/esm/parser/with-parser.d.ts +2 -1
  66. package/dist/esm/query-builder/join-builder.d.ts +9 -9
  67. package/dist/esm/query-builder/join-builder.js +9 -9
  68. package/dist/esm/query-builder/query-builder.d.ts +202 -106
  69. package/dist/esm/query-builder/query-builder.js +46 -27
  70. package/dist/esm/query-builder/type-utils.d.ts +23 -6
  71. package/dist/esm/query-compiler/default-query-compiler.js +7 -6
  72. package/dist/esm/query-creator.d.ts +2 -0
  73. package/dist/esm/query-creator.js +2 -0
  74. package/dist/esm/schema/alter-table-builder.d.ts +3 -2
  75. package/dist/esm/schema/column-definition-builder.d.ts +3 -3
  76. package/dist/esm/util/generated-placeholder.d.ts +3 -0
  77. package/dist/esm/util/generated-placeholder.js +7 -0
  78. package/dist/esm/util/object-utils.d.ts +1 -0
  79. package/dist/esm/util/object-utils.js +1 -1
  80. package/package.json +2 -2
@@ -1,10 +1,11 @@
1
1
  import { AliasNode } from '../operation-node/alias-node.js';
2
2
  import { OperationNodeSource } from '../operation-node/operation-node-source.js';
3
3
  import { CompiledQuery } from '../query-compiler/compiled-query.js';
4
- import { JoinCallbackArg, JoinReferenceArg } from '../parser/join-parser.js';
4
+ import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
5
5
  import { TableExpression, QueryBuilderWithTable } from '../parser/table-parser.js';
6
6
  import { SelectExpression, QueryBuilderWithSelection, SelectAllQueryBuilder } from '../parser/select-parser.js';
7
- import { ExistsFilterArg, FilterOperatorArg } from '../parser/filter-parser.js';
7
+ import { ExistsExpression, FilterOperator } from '../parser/filter-parser.js';
8
+ import { InsertObject } from '../parser/insert-values-parser.js';
8
9
  import { QueryBuilderWithReturning } from '../parser/returning-parser.js';
9
10
  import { ReferenceExpression } from '../parser/reference-parser.js';
10
11
  import { ValueExpressionOrList } from '../parser/value-parser.js';
@@ -43,9 +44,11 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
43
44
  * Find a row by column value:
44
45
  *
45
46
  * ```ts
46
- * db.selectFrom('person')
47
- * .where('id', '=', 100)
47
+ * const person = await db
48
+ * .selectFrom('person')
48
49
  * .selectAll()
50
+ * .where('id', '=', 100)
51
+ * .executeTakeFirst()
49
52
  * ```
50
53
  *
51
54
  * The generated SQL (postgresql):
@@ -59,9 +62,11 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
59
62
  * you can always use `db.raw('your operator')`.
60
63
  *
61
64
  * ```ts
62
- * db.selectFrom('person')
63
- * .where('id', '>', 100)
65
+ * const persons = await db
66
+ * .selectFrom('person')
64
67
  * .selectAll()
68
+ * .where('id', '>', 100)
69
+ * .execute()
65
70
  * ```
66
71
  *
67
72
  * The generated SQL (postgresql):
@@ -71,22 +76,25 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
71
76
  * ```
72
77
  *
73
78
  * @example
74
- * A `where in` query an be built by using the `in` operator and an array
75
- * of values. The values in the array can also be subqueries or raw
76
- * instances.
79
+ * The `where` methods don't change the type of the query. You can add
80
+ * conditional `where`s easily by doing something like this:
77
81
  *
78
82
  * ```ts
79
- * db.selectFrom('person')
80
- * .where('person.id', 'in', [100, 200, 300])
83
+ * let query = db
84
+ * .selectFrom('person')
81
85
  * .selectAll()
82
- * ```
83
86
  *
84
- * The generated SQL (postgresql):
87
+ * if (firstName) {
88
+ * query = query.where('first_name', '=', firstName)
89
+ * }
85
90
  *
86
- * ```sql
87
- * select * from "person" where "id" in ($1, $2, $3)
91
+ * const persons = await query.execute()
88
92
  * ```
89
93
  *
94
+ * This is true for basically all methods execpt the `select` and
95
+ * `returning` methods, which DO change the return type of the
96
+ * query.
97
+ *
90
98
  * @example
91
99
  * Both the first and third argument can also be subqueries.
92
100
  * A subquery is defined by passing a function and calling
@@ -94,15 +102,18 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
94
102
  * function:
95
103
  *
96
104
  * ```ts
97
- * db.selectFrom('person')
105
+ * const persons = await db
106
+ * .selectFrom('person')
107
+ * .selectAll()
98
108
  * .where(
99
109
  * (qb) => qb.subQuery('pet')
100
- * .select('pet.id')
101
- * .whereRef('pet.owner_id', '=', 'person.id'),
102
- * 'in',
103
- * [100, 200, 300]
110
+ * .select('pet.name')
111
+ * .whereRef('pet.owner_id', '=', 'person.id')
112
+ * .limit(1),
113
+ * '=',
114
+ * 'Fluffy'
104
115
  * )
105
- * .selectAll()
116
+ * .execute()
106
117
  * ```
107
118
  *
108
119
  * The generated SQL (postgresql):
@@ -111,10 +122,30 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
111
122
  * select *
112
123
  * from "person"
113
124
  * where (
114
- * select "pet"."id"
125
+ * select "pet"."name"
115
126
  * from "pet"
116
127
  * where "pet"."owner_id" = "person"."id"
117
- * ) in ($1, $2, $3)
128
+ * limit $1
129
+ * ) = $2
130
+ * ```
131
+ *
132
+ * @example
133
+ * A `where in` query can be built by using the `in` operator and an array
134
+ * of values. The values in the array can also be subqueries or raw
135
+ * instances.
136
+ *
137
+ * ```ts
138
+ * const persons = await db
139
+ * .selectFrom('person')
140
+ * .selectAll()
141
+ * .where('person.id', 'in', [100, 200, 300])
142
+ * .execute()
143
+ * ```
144
+ *
145
+ * The generated SQL (postgresql):
146
+ *
147
+ * ```sql
148
+ * select * from "person" where "id" in ($1, $2, $3)
118
149
  * ```
119
150
  *
120
151
  * @example
@@ -122,20 +153,21 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
122
153
  * as any of the arguments, including the operator:
123
154
  *
124
155
  * ```ts
125
- * db.selectFrom('person')
156
+ * const persons = await db
157
+ * .selectFrom('person')
158
+ * .selectAll()
126
159
  * .where(
127
160
  * db.raw('coalesce(first_name, last_name)'),
128
161
  * 'like',
129
162
  * '%' + name + '%',
130
163
  * )
131
- * .selectAll()
164
+ * .execute()
132
165
  * ```
133
166
  *
134
167
  * The generated SQL (postgresql):
135
168
  *
136
169
  * ```sql
137
- * select *
138
- * from "person"
170
+ * select * from "person"
139
171
  * where coalesce(first_name, last_name) like $1
140
172
  * ```
141
173
  *
@@ -144,12 +176,14 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
144
176
  * used to create parentheses around other where clauses:
145
177
  *
146
178
  * ```ts
147
- * db.selectFrom('person')
179
+ * const persons = await db
180
+ * .selectFrom('person')
148
181
  * .selectAll()
149
182
  * .where((qb) => qb
150
183
  * .where('id', '=', 1)
151
184
  * .orWhere('id', '=', 2)
152
185
  * )
186
+ * .execute()
153
187
  * ```
154
188
  *
155
189
  * The generated SQL (postgresql):
@@ -173,13 +207,15 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
173
207
  * ```ts
174
208
  * const { ref } = db.dynamic
175
209
  *
176
- * db.selectFrom('person')
210
+ * const persons = await db
211
+ * .selectFrom('person')
177
212
  * .selectAll()
178
213
  * .where(ref(columnFromUserInput), '=', 1)
179
214
  * .orWhere(db.raw('??', [columnFromUserInput]), '=', 2)
215
+ * .execute()
180
216
  * ```
181
217
  */
182
- where(lhs: ReferenceExpression<DB, TB>, op: FilterOperatorArg, rhs: ValueExpressionOrList<DB, TB>): QueryBuilder<DB, TB, O>;
218
+ where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: ValueExpressionOrList<DB, TB, RE>): QueryBuilder<DB, TB, O>;
183
219
  where(grouper: (qb: QueryBuilder<DB, TB, O>) => QueryBuilder<DB, TB, O>): QueryBuilder<DB, TB, O>;
184
220
  /**
185
221
  * Adds a `where` clause where both sides of the operator are references
@@ -208,7 +244,8 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
208
244
  * Usage in a subquery:
209
245
  *
210
246
  * ```ts
211
- * db.selectFrom('person)
247
+ * const persons = await db
248
+ * .selectFrom('person')
212
249
  * .selectAll('person')
213
250
  * .select((qb) => qb
214
251
  * .subQuery('pet')
@@ -217,6 +254,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
217
254
  * .limit(1)
218
255
  * .as('pet_name')
219
256
  * )
257
+ * .execute()
220
258
  * ```
221
259
  *
222
260
  * The generated SQL (postgresql):
@@ -226,10 +264,11 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
226
264
  * select "name"
227
265
  * from "pet"
228
266
  * where "pet"."owner_id" = "person"."id"
229
- * ) as pet_name
230
- * from "person"`
267
+ * limit $1
268
+ * ) as "pet_name"
269
+ * from "person"
231
270
  */
232
- whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperatorArg, rhs: ReferenceExpression<DB, TB>): QueryBuilder<DB, TB, O>;
271
+ whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): QueryBuilder<DB, TB, O>;
233
272
  /**
234
273
  * Adds an `or where` clause to the query. Otherwise works just like
235
274
  * {@link QueryBuilder.where | where}.
@@ -240,10 +279,12 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
240
279
  *
241
280
  * @example
242
281
  * ```ts
243
- * db.selectFrom('person')
282
+ * const persons = await db
283
+ * .selectFrom('person')
244
284
  * .selectAll()
245
285
  * .where('id', '=', 1)
246
286
  * .orWhere('id', '=', 2)
287
+ * .execute()
247
288
  * ```
248
289
  *
249
290
  * The generated SQL (postgresql):
@@ -256,12 +297,14 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
256
297
  * Grouping with parentheses:
257
298
  *
258
299
  * ```ts
259
- * db.selectFrom('person')
300
+ * const persons = await db
301
+ * .selectFrom('person')
260
302
  * .selectAll()
261
303
  * .where((qb) => qb
262
304
  * .where('id', '=', 1)
263
305
  * .orWhere('id', '=', 2)
264
306
  * )
307
+ * .execute()
265
308
  * ```
266
309
  *
267
310
  * The generated SQL (postgresql):
@@ -275,12 +318,14 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
275
318
  * if you are looping through a set of conditions:
276
319
  *
277
320
  * ```ts
278
- * db.selectFrom('person')
321
+ * const persons = await db
322
+ * .selectFrom('person')
279
323
  * .selectAll()
280
324
  * .where((qb) => qb
281
325
  * .orWhere('id', '=', 1)
282
326
  * .orWhere('id', '=', 2)
283
327
  * )
328
+ * .execute()
284
329
  * ```
285
330
  *
286
331
  * The generated SQL (postgresql):
@@ -289,7 +334,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
289
334
  * select * from "person" (where "id" = 1 or "id" = 2)
290
335
  * ```
291
336
  */
292
- orWhere(lhs: ReferenceExpression<DB, TB>, op: FilterOperatorArg, rhs: ValueExpressionOrList<DB, TB>): QueryBuilder<DB, TB, O>;
337
+ orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: ValueExpressionOrList<DB, TB, RE>): QueryBuilder<DB, TB, O>;
293
338
  orWhere(grouper: (qb: QueryBuilder<DB, TB, O>) => QueryBuilder<DB, TB, O>): QueryBuilder<DB, TB, O>;
294
339
  /**
295
340
  * Adds an `or where` clause to the query. Otherwise works just like
@@ -297,7 +342,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
297
342
  *
298
343
  * Also see {@link QueryBuilder.orWhere | orWhere} and {@link QueryBuilder.where | where}.
299
344
  */
300
- orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperatorArg, rhs: ReferenceExpression<DB, TB>): QueryBuilder<DB, TB, O>;
345
+ orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): QueryBuilder<DB, TB, O>;
301
346
  /**
302
347
  * Adds a `where exists` clause to the query.
303
348
  *
@@ -307,7 +352,8 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
307
352
  * The query below selets all persons that own a pet named Catto:
308
353
  *
309
354
  * ```ts
310
- * db.selectFrom('person')
355
+ * const persons = await db
356
+ * .selectFrom('person')
311
357
  * .selectAll()
312
358
  * .whereExists((qb) => qb
313
359
  * .subQuery('pet')
@@ -315,6 +361,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
315
361
  * .whereRef('person.id', '=', 'pet.owner_id')
316
362
  * .where('pet.name', '=', 'Catto')
317
363
  * )
364
+ * .execute()
318
365
  * ```
319
366
  *
320
367
  * The generated SQL (postgresql):
@@ -355,72 +402,72 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
355
402
  * )
356
403
  * ```
357
404
  */
358
- whereExists(arg: ExistsFilterArg<DB, TB>): QueryBuilder<DB, TB, O>;
405
+ whereExists(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
359
406
  /**
360
407
  * Just like {@link QueryBuilder.whereExists | whereExists} but creates a `not exists` clause.
361
408
  */
362
- whereNotExists(arg: ExistsFilterArg<DB, TB>): QueryBuilder<DB, TB, O>;
409
+ whereNotExists(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
363
410
  /**
364
411
  * Just like {@link QueryBuilder.whereExists | whereExists} but creates a `or exists` clause.
365
412
  */
366
- orWhereExists(arg: ExistsFilterArg<DB, TB>): QueryBuilder<DB, TB, O>;
413
+ orWhereExists(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
367
414
  /**
368
415
  * Just like {@link QueryBuilder.whereExists | whereExists} but creates a `or not exists` clause.
369
416
  */
370
- orWhereNotExists(arg: ExistsFilterArg<DB, TB>): QueryBuilder<DB, TB, O>;
417
+ orWhereNotExists(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
371
418
  /**
372
419
  * Just like {@link QueryBuilder.where | where} but adds a `having` statement
373
420
  * instead of a `where` statement.
374
421
  */
375
- having(lhs: ReferenceExpression<DB, TB>, op: FilterOperatorArg, rhs: ValueExpressionOrList<DB, TB>): QueryBuilder<DB, TB, O>;
422
+ having<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: ValueExpressionOrList<DB, TB, RE>): QueryBuilder<DB, TB, O>;
376
423
  having(grouper: (qb: QueryBuilder<DB, TB, O>) => QueryBuilder<DB, TB, O>): QueryBuilder<DB, TB, O>;
377
424
  /**
378
425
  * Just like {@link QueryBuilder.whereRef | whereRef} but adds a `having` statement
379
426
  * instead of a `where` statement.
380
427
  */
381
- havingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperatorArg, rhs: ReferenceExpression<DB, TB>): QueryBuilder<DB, TB, O>;
428
+ havingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): QueryBuilder<DB, TB, O>;
382
429
  /**
383
430
  * Just like {@link QueryBuilder.orWhere | orWhere} but adds a `having` statement
384
431
  * instead of a `where` statement.
385
432
  */
386
- orHaving(lhs: ReferenceExpression<DB, TB>, op: FilterOperatorArg, rhs: ValueExpressionOrList<DB, TB>): QueryBuilder<DB, TB, O>;
433
+ orHaving<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: ValueExpressionOrList<DB, TB, RE>): QueryBuilder<DB, TB, O>;
387
434
  orHaving(grouper: (qb: QueryBuilder<DB, TB, O>) => QueryBuilder<DB, TB, O>): QueryBuilder<DB, TB, O>;
388
435
  /**
389
436
  * Just like {@link QueryBuilder.orWhereRef | orWhereRef} but adds a `having` statement
390
437
  * instead of a `where` statement.
391
438
  */
392
- orHavingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperatorArg, rhs: ReferenceExpression<DB, TB>): QueryBuilder<DB, TB, O>;
439
+ orHavingRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): QueryBuilder<DB, TB, O>;
393
440
  /**
394
441
  * Just like {@link QueryBuilder.whereExists | whereExists} but adds a `having` statement
395
442
  * instead of a `where` statement.
396
443
  */
397
- havingExists(arg: ExistsFilterArg<DB, TB>): QueryBuilder<DB, TB, O>;
444
+ havingExists(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
398
445
  /**
399
446
  * Just like {@link QueryBuilder.whereNotExists | whereNotExists} but adds a `having` statement
400
447
  * instead of a `where` statement.
401
448
  */
402
- havingNotExist(arg: ExistsFilterArg<DB, TB>): QueryBuilder<DB, TB, O>;
449
+ havingNotExist(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
403
450
  /**
404
451
  * Just like {@link QueryBuilder.orWhereExists | orWhereExists} but adds a `having` statement
405
452
  * instead of a `where` statement.
406
453
  */
407
- orHavingExists(arg: ExistsFilterArg<DB, TB>): QueryBuilder<DB, TB, O>;
454
+ orHavingExists(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
408
455
  /**
409
456
  * Just like {@link QueryBuilder.orWhereNotExists | orWhereNotExists} but adds a `having` statement
410
457
  * instead of a `where` statement.
411
458
  */
412
- orHavingNotExists(arg: ExistsFilterArg<DB, TB>): QueryBuilder<DB, TB, O>;
459
+ orHavingNotExists(arg: ExistsExpression<DB, TB>): QueryBuilder<DB, TB, O>;
413
460
  /**
414
461
  * Adds a select clause to the query.
415
462
  *
416
- * When a column (or any expression) is selected, Kysely also adds it to the return
417
- * type of the query. Kysely is smart enough to parse the field names and types even
463
+ * When a column (or any expression) is selected, Kysely adds its type to the return
464
+ * type of the query. Kysely is smart enough to parse the column names and types even
418
465
  * from aliased columns, subqueries, raw expressions etc.
419
466
  *
420
467
  * Kysely only allows you to select columns and expressions that exist and would
421
468
  * produce valid SQL. However, Kysely is not perfect and there may be cases where
422
469
  * the type inference doesn't work and you need to override it. You can always
423
- * use the {@link Kysely.dynamic | dynamic} object and {@link Kysely.raw | raw}
470
+ * use the {@link Kysely.dynamic | dynamic} module and {@link Kysely.raw | raw}
424
471
  * to override the types.
425
472
  *
426
473
  * Select calls are additive. Calling `select('id').select('first_name')` is the
@@ -433,28 +480,29 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
433
480
  * Select a single column:
434
481
  *
435
482
  * ```ts
436
- * const [person] = await db.selectFrom('person')
483
+ * const persons = await db.selectFrom('person')
437
484
  * .select('id')
485
+ * .where('first_name', '=', 'Arnold')
438
486
  * .execute()
439
487
  *
440
- * person.id
488
+ * persons[0].id
441
489
  * ```
442
490
  *
443
491
  * The generated SQL (postgresql):
444
492
  *
445
493
  * ```sql
446
- * select "id" from "person"
494
+ * select "id" from "person" where "first_name" = $1
447
495
  * ```
448
496
  *
449
497
  * @example
450
498
  * Select a single column and specify a table:
451
499
  *
452
500
  * ```ts
453
- * const [person] = await db.selectFrom(['person', 'pet'])
501
+ * const persons = await db.selectFrom(['person', 'pet'])
454
502
  * .select('person.id')
455
503
  * .execute()
456
504
  *
457
- * person.id
505
+ * persons[0].id
458
506
  * ```
459
507
  *
460
508
  * The generated SQL (postgresql):
@@ -467,12 +515,12 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
467
515
  * Select multiple columns:
468
516
  *
469
517
  * ```ts
470
- * const [person] = await db.selectFrom('person')
518
+ * const persons = await db.selectFrom('person')
471
519
  * .select(['person.id', 'first_name'])
472
520
  * .execute()
473
521
  *
474
- * person.id
475
- * person.first_name
522
+ * persons[0].id
523
+ * persons[0].first_name
476
524
  * ```
477
525
  *
478
526
  * The generated SQL (postgresql):
@@ -482,18 +530,18 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
482
530
  * ```
483
531
  *
484
532
  * @example
485
- * Giving an alias for a selection:
533
+ * Aliased selections:
486
534
  *
487
535
  * ```ts
488
- * const [person] = await db.selectFrom('person')
536
+ * const persons = await db.selectFrom('person')
489
537
  * .select([
490
538
  * 'person.first_name as fn',
491
539
  * 'person.last_name as ln'
492
540
  * ])
493
541
  * .execute()
494
542
  *
495
- * person.fn
496
- * person.ln
543
+ * persons[0].fn
544
+ * persons[0].ln
497
545
  * ```
498
546
  *
499
547
  * The generated SQL (postgresql):
@@ -511,19 +559,20 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
511
559
  * method:
512
560
  *
513
561
  * ```ts
514
- * const [person] = await db.selectFrom('person')
562
+ * const persons = await db.selectFrom('person')
515
563
  * .select([
516
564
  * (qb) => qb
517
565
  * .subQuery('pet')
518
566
  * .whereRef('person.id', '=', 'pet.owner_id')
519
567
  * .select('pet.name')
568
+ * .limit(1)
520
569
  * .as('pet_name')
521
570
  * db.raw<string>("concat(first_name, ' ', last_name)").as('full_name')
522
571
  * ])
523
572
  * .execute()
524
573
  *
525
- * person.pet_name
526
- * person.full_name
574
+ * persons[0].pet_name
575
+ * persons[0].full_name
527
576
  * ```
528
577
  *
529
578
  * The generated SQL (postgresql):
@@ -534,7 +583,8 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
534
583
  * select "pet"."name"
535
584
  * from "pet"
536
585
  * where "person"."id" = "pet"."owner_id"
537
- * ) as pet_name,
586
+ * limit $1
587
+ * ) as "pet_name",
538
588
  * concat(first_name, ' ', last_name) as full_name
539
589
  * from "person"
540
590
  * ```
@@ -548,7 +598,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
548
598
  * the types) sometimes it's not possible or you just prefer to write more
549
599
  * dynamic code.
550
600
  * <br><br>
551
- * In this example, we use the `dynamic` object's methods to add selections
601
+ * In this example, we use the `dynamic` module's methods to add selections
552
602
  * dynamically:
553
603
  *
554
604
  * ```ts
@@ -561,7 +611,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
561
611
  * // You can use `keyof Person` if any column of an interface is allowed.
562
612
  * type PossibleColumns = 'last_name' | 'first_name' | 'birth_date'
563
613
  *
564
- * const [person] = await db.selectFrom('person')
614
+ * const spersons = await db.selectFrom('person')
565
615
  * .select([
566
616
  * ref<PossibleColumns>(columnFromUserInput)
567
617
  * 'id'
@@ -571,12 +621,12 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
571
621
  * // The resulting type contains all `PossibleColumns` as optional fields
572
622
  * // because we cannot know which field was actually selected before
573
623
  * // running the code.
574
- * const lastName: string | undefined = person.last_name
575
- * const firstName: string | undefined = person.first_name
576
- * const birthDate: string | undefined = person.birth_date
624
+ * const lastName: string | undefined = persons[0].last_name
625
+ * const firstName: string | undefined = persons[0].first_name
626
+ * const birthDate: string | undefined = persons[0].birth_date
577
627
  *
578
628
  * // The result type also contains the compile time selection `id`.
579
- * person.id
629
+ * persons[0].id
580
630
  * ```
581
631
  */
582
632
  select<S extends SelectExpression<DB, TB>>(selections: ReadonlyArray<S>): QueryBuilderWithSelection<DB, TB, O, S>;
@@ -584,6 +634,10 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
584
634
  /**
585
635
  * Adds `distinct on` selections to the select clause.
586
636
  *
637
+ * Takes the same inputs as the {@link QueryBuilder.select | select} method.
638
+ * See the {@link QueryBuilder.select | select} method's documentation for
639
+ * more examples.
640
+ *
587
641
  * @example
588
642
  * ```ts
589
643
  * await db.selectFrom('person')
@@ -606,7 +660,21 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
606
660
  distinctOn<S extends SelectExpression<DB, TB>>(selections: ReadonlyArray<S>): QueryBuilder<DB, TB, O>;
607
661
  distinctOn<S extends SelectExpression<DB, TB>>(selection: S): QueryBuilder<DB, TB, O>;
608
662
  /**
663
+ * Makes the selection distinct.
609
664
  *
665
+ * @example
666
+ * ```ts
667
+ * await db.selectFrom('person')
668
+ * .select('first_name')
669
+ * .distinct()
670
+ * .execute()
671
+ * ```
672
+ *
673
+ * The generated SQL (postgresql):
674
+ *
675
+ * ```sql
676
+ * select distinct "first_name" from "person"
677
+ * ```
610
678
  */
611
679
  distinct(): QueryBuilder<DB, TB, O>;
612
680
  /**
@@ -638,7 +706,8 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
638
706
  *
639
707
  * @example
640
708
  * ```ts
641
- * await db.selectFrom('person')
709
+ * const persons = await db
710
+ * .selectFrom('person')
642
711
  * .selectAll()
643
712
  * .execute()
644
713
  * ```
@@ -651,7 +720,8 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
651
720
  *
652
721
  * @example
653
722
  * ```ts
654
- * await db.selectFrom('person')
723
+ * const persons = await db
724
+ * .selectFrom('person')
655
725
  * .selectAll('person')
656
726
  * .execute()
657
727
  * ```
@@ -664,7 +734,8 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
664
734
  *
665
735
  * @example
666
736
  * ```ts
667
- * await db.selectFrom(['person', 'pet'])
737
+ * const personsPets = await db
738
+ * .selectFrom(['person', 'pet'])
668
739
  * .selectAll(['person', 'pet'])
669
740
  * .execute()
670
741
  * ```
@@ -685,10 +756,17 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
685
756
  * Simple usage by providing a table name and two columns to join:
686
757
  *
687
758
  * ```ts
688
- * await db.selectFrom('person')
759
+ * const result = await db
760
+ * .selectFrom('person')
689
761
  * .selectAll()
690
762
  * .innerJoin('pet', 'pet.owner_id', 'person.id')
691
763
  * .execute()
764
+ *
765
+ * // The result has all `Person` columns
766
+ * result[0].first_name
767
+ *
768
+ * // The result has all `Pet` columns
769
+ * result[0].species
692
770
  * ```
693
771
  *
694
772
  * The generated SQL (postgresql):
@@ -779,52 +857,61 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
779
857
  * select "owner_id", "name"
780
858
  * from "pet"
781
859
  * where "name" = $1
782
- * ) as doggos
860
+ * ) as "doggos"
783
861
  * on "doggos"."owner_id" = "person"."id"
784
862
  * ```
785
863
  */
786
- innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceArg<DB, TB, TE>, K2 extends JoinReferenceArg<DB, TB, TE>>(table: TE, k1: K1, k2: K2): QueryBuilderWithTable<DB, TB, O, TE>;
787
- innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackArg<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithTable<DB, TB, O, TE>;
864
+ 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>;
865
+ innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithTable<DB, TB, O, TE>;
788
866
  /**
789
867
  * Just like {@link QueryBuilder.innerJoin | innerJoin} but adds a left join
790
868
  * instead of an inner join.
791
869
  */
792
- leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceArg<DB, TB, TE>, K2 extends JoinReferenceArg<DB, TB, TE>>(table: TE, k1: K1, k2: K2): QueryBuilderWithTable<DB, TB, O, TE>;
793
- leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackArg<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithTable<DB, TB, O, TE>;
870
+ leftJoin<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>;
871
+ leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithTable<DB, TB, O, TE>;
794
872
  /**
795
873
  * Just like {@link QueryBuilder.innerJoin | innerJoin} but adds a right join
796
874
  * instead of an inner join.
797
875
  */
798
- rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceArg<DB, TB, TE>, K2 extends JoinReferenceArg<DB, TB, TE>>(table: TE, k1: K1, k2: K2): QueryBuilderWithTable<DB, TB, O, TE>;
799
- rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackArg<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithTable<DB, TB, O, TE>;
876
+ rightJoin<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>;
877
+ rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithTable<DB, TB, O, TE>;
800
878
  /**
801
879
  * Just like {@link QueryBuilder.innerJoin | innerJoin} but adds a full join
802
880
  * instead of an inner join.
803
881
  */
804
- fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceArg<DB, TB, TE>, K2 extends JoinReferenceArg<DB, TB, TE>>(table: TE, k1: K1, k2: K2): QueryBuilderWithTable<DB, TB, O, TE>;
805
- fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackArg<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithTable<DB, TB, O, TE>;
882
+ fullJoin<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>;
883
+ fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): QueryBuilderWithTable<DB, TB, O, TE>;
806
884
  /**
807
- * Sets the values to insert for an `insertInto` query.
885
+ * Sets the values to insert for an {@link Kysely.insertInto | insert} query.
808
886
  *
809
887
  * This method takes an object whose keys are column names and values are
810
- * values to insert. In addition to the column's type, the values can be `raw`
811
- * instances or select queries.
888
+ * values to insert. In addition to the column's type, the values can be
889
+ * {@link Kysely.raw | raw} instances, select queries or the
890
+ * {@link Kysely.generated} placeholder.
891
+ *
892
+ * You must provide all values defined by the interface for the table you
893
+ * are inserting into. Values that are generated by the database like autoincrementing
894
+ * identifiers can be marked with the {@link Kysely.generated} placeholder unless you
895
+ * want to insert a specific value instead of the generated default.
812
896
  *
813
897
  * The return value is the primary key of the inserted row BUT on some databases
814
- * there is no return value by default. That's the reason for the `any` type of the
815
- * return value. On postgres you need to additionally call `returning` to get
816
- * something out of the query.
898
+ * there is no return value by default. That's the reason for the `number | undefined`
899
+ * type of the return value. On postgres you need to additionally call `returning` to get
900
+ * something out of the query. If you know your database engine always returns the primary
901
+ * key, you can use the {@link QueryBuilder.executeTakeFirstOrThrow | executeTakeFirstOrThrow}
902
+ * method to execute the query.
817
903
  *
818
904
  * @example
819
905
  * Insert a row into `person`:
820
906
  * ```ts
821
- * const maybeId = await db
907
+ * const id = await db
822
908
  * .insertInto('person')
823
909
  * .values({
910
+ * id: db.generated,
824
911
  * first_name: 'Jennifer',
825
912
  * last_name: 'Aniston'
826
913
  * })
827
- * .executeTakeFirst()
914
+ * .executeTakeFirstOrThrow()
828
915
  * ```
829
916
  *
830
917
  * The generated SQL (postgresql):
@@ -840,16 +927,18 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
840
927
  * row and some return nothing at all unless you call `returning`.
841
928
  *
842
929
  * ```ts
843
- * const maybeId = await db
930
+ * await db
844
931
  * .insertInto('person')
845
932
  * .values([{
933
+ * id: db.generated,
846
934
  * first_name: 'Jennifer',
847
935
  * last_name: 'Aniston'
848
936
  * }, {
937
+ * id: db.generated,
849
938
  * first_name: 'Arnold',
850
939
  * last_name: 'Schwarzenegger',
851
940
  * }])
852
- * .executeTakeFirst()
941
+ * .execute()
853
942
  * ```
854
943
  *
855
944
  * The generated SQL (postgresql):
@@ -867,11 +956,12 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
867
956
  * const row = await db
868
957
  * .insertInto('person')
869
958
  * .values({
959
+ * id: db.generated,
870
960
  * first_name: 'Jennifer',
871
961
  * last_name: 'Aniston'
872
962
  * })
873
963
  * .returning('id')
874
- * .executeTakeFirst()
964
+ * .executeTakeFirstOrThrow()
875
965
  *
876
966
  * row.id
877
967
  * ```
@@ -890,6 +980,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
890
980
  * const maybeId = await db
891
981
  * .insertInto('person')
892
982
  * .values({
983
+ * id: db.generated,
893
984
  * first_name: 'Jennifer',
894
985
  * last_name: db.raw('? || ?', ['Ani', 'ston']),
895
986
  * age: db.selectFrom('person').select(raw('avg(age)')),
@@ -904,8 +995,8 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
904
995
  * values ($1, $2 || $3, (select avg(age) from "person"))
905
996
  * ```
906
997
  */
907
- values(row: MutationObject<DB, TB>): QueryBuilder<DB, TB, O>;
908
- values(row: MutationObject<DB, TB>[]): QueryBuilder<DB, TB, O>;
998
+ values(row: InsertObject<DB, TB>): QueryBuilder<DB, TB, O>;
999
+ values(row: InsertObject<DB, TB>[]): QueryBuilder<DB, TB, O>;
909
1000
  /**
910
1001
  * Ignores the insert if the column (or columns) given as the first
911
1002
  * argument conflicts with the current rows in the database. The
@@ -928,6 +1019,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
928
1019
  * await db
929
1020
  * .insertInto('pet')
930
1021
  * .values({
1022
+ * id: db.generated,
931
1023
  * name: 'Catto',
932
1024
  * species: 'cat',
933
1025
  * })
@@ -972,6 +1064,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
972
1064
  * await db
973
1065
  * .insertInto('pet')
974
1066
  * .values({
1067
+ * id: db.generated,
975
1068
  * name: 'Catto',
976
1069
  * species: 'cat',
977
1070
  * })
@@ -990,7 +1083,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
990
1083
  onConflictUpdate(column: AnyColumn<DB, TB>, updates: MutationObject<DB, TB>): QueryBuilder<DB, TB, O>;
991
1084
  onConflictUpdate(columns: ReadonlyArray<AnyColumn<DB, TB>>, updates: MutationObject<DB, TB>): QueryBuilder<DB, TB, O>;
992
1085
  /**
993
- * Sets the values to update for an `updateTable` query.
1086
+ * Sets the values to update for an {@link Kysely.updateTable | update} query.
994
1087
  *
995
1088
  * This method takes an object whose keys are column names and values are
996
1089
  * values to update. In addition to the column's type, the values can be `raw`
@@ -1021,7 +1114,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
1021
1114
  * ```
1022
1115
  *
1023
1116
  * @example
1024
- * On postgresql you need to chain `returning` to the query to get
1117
+ * On postgresql you ca chain `returning` to the query to get
1025
1118
  * the updated rows' columns (or any other expression) as the
1026
1119
  * return value:
1027
1120
  *
@@ -1034,7 +1127,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
1034
1127
  * })
1035
1128
  * .where('id', '=', 1)
1036
1129
  * .returning('id')
1037
- * .executeTakeFirst()
1130
+ * .executeTakeFirstOrThrow()
1038
1131
  *
1039
1132
  * row.id
1040
1133
  * ```
@@ -1087,6 +1180,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
1087
1180
  * const { id } = await db
1088
1181
  * .insertInto('person')
1089
1182
  * .values({
1183
+ * id: db.generated,
1090
1184
  * first_name: 'Jennifer',
1091
1185
  * last_name: 'Aniston'
1092
1186
  * })
@@ -1101,6 +1195,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
1101
1195
  * const { id, first_name } = await db
1102
1196
  * .insertInto('person')
1103
1197
  * .values({
1198
+ * id: db.generated,
1104
1199
  * first_name: 'Jennifer',
1105
1200
  * last_name: 'Aniston'
1106
1201
  * })
@@ -1117,6 +1212,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
1117
1212
  * const { id, full_name, first_pet_id } = await db
1118
1213
  * .insertInto('person')
1119
1214
  * .values({
1215
+ * id: db.generated,
1120
1216
  * first_name: 'Jennifer',
1121
1217
  * last_name: 'Aniston'
1122
1218
  * })