kysely 0.16.11 → 0.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/cjs/dialect/mysql/mysql-adapter.js +3 -4
- package/dist/cjs/dialect/mysql/mysql-dialect-config.d.ts +19 -0
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -1
- package/dist/cjs/dialect/postgres/postgres-adapter.js +3 -2
- package/dist/cjs/dialect/sqlite/sqlite-introspector.js +2 -1
- package/dist/cjs/driver/connection-provider.d.ts +1 -1
- package/dist/cjs/driver/default-connection-provider.d.ts +1 -1
- package/dist/cjs/driver/default-connection-provider.js +2 -2
- package/dist/cjs/driver/dummy-driver.d.ts +8 -0
- package/dist/cjs/driver/dummy-driver.js +8 -0
- package/dist/cjs/driver/single-connection-provider.d.ts +1 -1
- package/dist/cjs/driver/single-connection-provider.js +2 -2
- package/dist/cjs/index-nodeless.d.ts +2 -0
- package/dist/cjs/index-nodeless.js +2 -0
- package/dist/cjs/kysely.d.ts +3 -6
- package/dist/cjs/kysely.js +30 -41
- package/dist/cjs/migration/migrator.js +4 -4
- package/dist/cjs/operation-node/operation-node-transformer.js +1 -1
- package/dist/cjs/operation-node/raw-node.d.ts +4 -2
- package/dist/cjs/operation-node/raw-node.js +8 -2
- package/dist/cjs/parser/complex-expression-parser.d.ts +5 -5
- package/dist/cjs/parser/complex-expression-parser.js +5 -4
- package/dist/cjs/parser/filter-parser.d.ts +9 -9
- package/dist/cjs/parser/filter-parser.js +31 -30
- package/dist/cjs/parser/group-by-parser.d.ts +1 -2
- package/dist/cjs/parser/group-by-parser.js +2 -2
- package/dist/cjs/parser/insert-values-parser.d.ts +1 -2
- package/dist/cjs/parser/insert-values-parser.js +6 -6
- package/dist/cjs/parser/join-parser.d.ts +1 -2
- package/dist/cjs/parser/join-parser.js +8 -7
- package/dist/cjs/parser/order-by-parser.d.ts +1 -2
- package/dist/cjs/parser/order-by-parser.js +4 -4
- package/dist/cjs/parser/parse-utils.d.ts +10 -0
- package/dist/cjs/parser/parse-utils.js +38 -0
- package/dist/cjs/parser/reference-parser.d.ts +2 -3
- package/dist/cjs/parser/reference-parser.js +5 -5
- package/dist/cjs/parser/select-parser.d.ts +1 -2
- package/dist/cjs/parser/select-parser.js +5 -5
- package/dist/cjs/parser/table-parser.d.ts +2 -3
- package/dist/cjs/parser/table-parser.js +5 -5
- package/dist/cjs/parser/update-set-parser.d.ts +1 -2
- package/dist/cjs/parser/update-set-parser.js +2 -2
- package/dist/cjs/parser/value-parser.d.ts +3 -4
- package/dist/cjs/parser/value-parser.js +7 -7
- package/dist/cjs/parser/with-parser.d.ts +1 -2
- package/dist/cjs/parser/with-parser.js +3 -2
- package/dist/cjs/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +2 -1
- package/dist/cjs/query-builder/delete-query-builder.d.ts +34 -23
- package/dist/cjs/query-builder/delete-query-builder.js +15 -15
- package/dist/cjs/query-builder/expression-builder.d.ts +4 -13
- package/dist/cjs/query-builder/expression-builder.js +12 -21
- package/dist/cjs/query-builder/function-builder.d.ts +2 -6
- package/dist/cjs/query-builder/function-builder.js +5 -8
- package/dist/cjs/query-builder/insert-query-builder.d.ts +12 -8
- package/dist/cjs/query-builder/insert-query-builder.js +8 -7
- package/dist/cjs/query-builder/join-builder.d.ts +0 -2
- package/dist/cjs/query-builder/join-builder.js +8 -8
- package/dist/cjs/query-builder/on-conflict-builder.d.ts +46 -28
- package/dist/cjs/query-builder/on-conflict-builder.js +17 -17
- package/dist/cjs/query-builder/returning-interface.d.ts +3 -1
- package/dist/cjs/query-builder/select-query-builder.d.ts +52 -33
- package/dist/cjs/query-builder/select-query-builder.js +28 -26
- package/dist/cjs/query-builder/update-query-builder.d.ts +41 -28
- package/dist/cjs/query-builder/update-query-builder.js +22 -20
- package/dist/cjs/query-builder/where-interface.d.ts +31 -20
- package/dist/cjs/query-compiler/default-query-compiler.js +1 -1
- package/dist/cjs/query-creator.d.ts +10 -129
- package/dist/cjs/query-creator.js +5 -136
- package/dist/cjs/query-executor/default-query-executor.d.ts +21 -7
- package/dist/cjs/query-executor/default-query-executor.js +17 -19
- package/dist/cjs/query-executor/noop-query-executor.d.ts +20 -6
- package/dist/cjs/query-executor/noop-query-executor.js +11 -4
- package/dist/cjs/query-executor/query-executor-base.d.ts +62 -0
- package/dist/cjs/query-executor/query-executor-base.js +46 -0
- package/dist/cjs/query-executor/query-executor-provider.d.ts +8 -0
- package/dist/cjs/query-executor/query-executor-provider.js +2 -0
- package/dist/cjs/query-executor/query-executor.d.ts +20 -13
- package/dist/cjs/query-executor/query-executor.js +0 -57
- package/dist/cjs/raw-builder/raw-builder.d.ts +42 -11
- package/dist/cjs/raw-builder/raw-builder.js +55 -56
- package/dist/cjs/raw-builder/sql.d.ts +331 -0
- package/dist/cjs/raw-builder/sql.js +161 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +42 -8
- package/dist/cjs/schema/alter-table-builder.js +20 -0
- package/dist/cjs/schema/column-definition-builder.d.ts +22 -8
- package/dist/cjs/schema/create-index-builder.d.ts +3 -1
- package/dist/cjs/schema/create-index-builder.js +3 -1
- package/dist/cjs/schema/create-table-builder.d.ts +7 -3
- package/dist/cjs/schema/create-table-builder.js +7 -3
- package/dist/cjs/schema/create-view-builder.d.ts +3 -3
- package/dist/cjs/schema/create-view-builder.js +3 -3
- package/dist/cjs/util/query-id.js +10 -4
- package/dist/cjs/util/random-string.js +65 -2
- package/dist/cjs/util/type-utils.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-adapter.js +3 -4
- package/dist/esm/dialect/mysql/mysql-dialect-config.d.ts +19 -0
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -1
- package/dist/esm/dialect/postgres/postgres-adapter.js +3 -2
- package/dist/esm/dialect/sqlite/sqlite-introspector.js +2 -1
- package/dist/esm/driver/connection-provider.d.ts +1 -1
- package/dist/esm/driver/default-connection-provider.d.ts +1 -1
- package/dist/esm/driver/default-connection-provider.js +2 -2
- package/dist/esm/driver/dummy-driver.d.ts +8 -0
- package/dist/esm/driver/dummy-driver.js +8 -0
- package/dist/esm/driver/single-connection-provider.d.ts +1 -1
- package/dist/esm/driver/single-connection-provider.js +2 -2
- package/dist/esm/index-nodeless.d.ts +2 -0
- package/dist/esm/index-nodeless.js +2 -0
- package/dist/esm/kysely.d.ts +3 -6
- package/dist/esm/kysely.js +30 -41
- package/dist/esm/migration/migrator.js +4 -4
- package/dist/esm/operation-node/operation-node-transformer.js +1 -1
- package/dist/esm/operation-node/raw-node.d.ts +4 -2
- package/dist/esm/operation-node/raw-node.js +8 -2
- package/dist/esm/parser/complex-expression-parser.d.ts +5 -5
- package/dist/esm/parser/complex-expression-parser.js +5 -4
- package/dist/esm/parser/filter-parser.d.ts +9 -9
- package/dist/esm/parser/filter-parser.js +31 -30
- package/dist/esm/parser/group-by-parser.d.ts +1 -2
- package/dist/esm/parser/group-by-parser.js +2 -2
- package/dist/esm/parser/insert-values-parser.d.ts +1 -2
- package/dist/esm/parser/insert-values-parser.js +6 -6
- package/dist/esm/parser/join-parser.d.ts +1 -2
- package/dist/esm/parser/join-parser.js +8 -7
- package/dist/esm/parser/order-by-parser.d.ts +1 -2
- package/dist/esm/parser/order-by-parser.js +4 -4
- package/dist/esm/parser/parse-utils.d.ts +10 -0
- package/dist/esm/parser/parse-utils.js +32 -0
- package/dist/esm/parser/reference-parser.d.ts +2 -3
- package/dist/esm/parser/reference-parser.js +5 -5
- package/dist/esm/parser/select-parser.d.ts +1 -2
- package/dist/esm/parser/select-parser.js +5 -5
- package/dist/esm/parser/table-parser.d.ts +2 -3
- package/dist/esm/parser/table-parser.js +5 -5
- package/dist/esm/parser/update-set-parser.d.ts +1 -2
- package/dist/esm/parser/update-set-parser.js +2 -2
- package/dist/esm/parser/value-parser.d.ts +3 -4
- package/dist/esm/parser/value-parser.js +7 -7
- package/dist/esm/parser/with-parser.d.ts +1 -2
- package/dist/esm/parser/with-parser.js +3 -2
- package/dist/esm/plugin/deduplicate-joins/deduplicate-joins-transformer.d.ts +2 -1
- package/dist/esm/query-builder/delete-query-builder.d.ts +34 -23
- package/dist/esm/query-builder/delete-query-builder.js +15 -15
- package/dist/esm/query-builder/expression-builder.d.ts +4 -13
- package/dist/esm/query-builder/expression-builder.js +12 -21
- package/dist/esm/query-builder/function-builder.d.ts +2 -6
- package/dist/esm/query-builder/function-builder.js +5 -8
- package/dist/esm/query-builder/insert-query-builder.d.ts +12 -8
- package/dist/esm/query-builder/insert-query-builder.js +8 -7
- package/dist/esm/query-builder/join-builder.d.ts +0 -2
- package/dist/esm/query-builder/join-builder.js +8 -8
- package/dist/esm/query-builder/on-conflict-builder.d.ts +46 -28
- package/dist/esm/query-builder/on-conflict-builder.js +17 -17
- package/dist/esm/query-builder/returning-interface.d.ts +3 -1
- package/dist/esm/query-builder/select-query-builder.d.ts +52 -33
- package/dist/esm/query-builder/select-query-builder.js +28 -26
- package/dist/esm/query-builder/update-query-builder.d.ts +41 -28
- package/dist/esm/query-builder/update-query-builder.js +22 -20
- package/dist/esm/query-builder/where-interface.d.ts +31 -20
- package/dist/esm/query-compiler/default-query-compiler.js +1 -1
- package/dist/esm/query-creator.d.ts +10 -129
- package/dist/esm/query-creator.js +5 -136
- package/dist/esm/query-executor/default-query-executor.d.ts +21 -7
- package/dist/esm/query-executor/default-query-executor.js +17 -19
- package/dist/esm/query-executor/noop-query-executor.d.ts +20 -6
- package/dist/esm/query-executor/noop-query-executor.js +10 -3
- package/dist/esm/query-executor/query-executor-base.d.ts +62 -0
- package/dist/esm/query-executor/query-executor-base.js +43 -0
- package/dist/esm/query-executor/query-executor-provider.d.ts +8 -0
- package/dist/esm/query-executor/query-executor-provider.js +2 -0
- package/dist/esm/query-executor/query-executor.d.ts +20 -13
- package/dist/esm/query-executor/query-executor.js +1 -55
- package/dist/esm/raw-builder/raw-builder.d.ts +42 -11
- package/dist/esm/raw-builder/raw-builder.js +56 -57
- package/dist/esm/raw-builder/sql.d.ts +331 -0
- package/dist/esm/raw-builder/sql.js +159 -0
- package/dist/esm/schema/alter-table-builder.d.ts +42 -8
- package/dist/esm/schema/alter-table-builder.js +20 -0
- package/dist/esm/schema/column-definition-builder.d.ts +22 -8
- package/dist/esm/schema/create-index-builder.d.ts +3 -1
- package/dist/esm/schema/create-index-builder.js +3 -1
- package/dist/esm/schema/create-table-builder.d.ts +7 -3
- package/dist/esm/schema/create-table-builder.js +7 -3
- package/dist/esm/schema/create-view-builder.d.ts +3 -3
- package/dist/esm/schema/create-view-builder.js +3 -3
- package/dist/esm/util/query-id.js +10 -4
- package/dist/esm/util/random-string.js +65 -2
- package/dist/esm/util/type-utils.d.ts +1 -1
- package/package.json +14 -14
- package/dist/cjs/parser/parse-context.d.ts +0 -55
- package/dist/cjs/parser/parse-context.js +0 -50
- package/dist/cjs/util/private-symbols.d.ts +0 -5
- package/dist/cjs/util/private-symbols.js +0 -8
- package/dist/esm/parser/parse-context.d.ts +0 -55
- package/dist/esm/parser/parse-context.js +0 -47
- package/dist/esm/util/private-symbols.d.ts +0 -5
- package/dist/esm/util/private-symbols.js +0 -6
|
@@ -12,7 +12,6 @@ import { OrderByDirectionExpression, OrderByExpression } from '../parser/order-b
|
|
|
12
12
|
import { Compilable } from '../util/compilable.js';
|
|
13
13
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
14
14
|
import { QueryId } from '../util/query-id.js';
|
|
15
|
-
import { ParseContext } from '../parser/parse-context.js';
|
|
16
15
|
import { UnionExpression } from '../parser/union-parser.js';
|
|
17
16
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
18
17
|
import { WhereInterface } from './where-interface.js';
|
|
@@ -46,7 +45,13 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
46
45
|
* ```
|
|
47
46
|
*
|
|
48
47
|
* Operator can be any supported operator or if the typings don't support it
|
|
49
|
-
* you can always use
|
|
48
|
+
* you can always use
|
|
49
|
+
*
|
|
50
|
+
* ```ts
|
|
51
|
+
* sql`your operator`
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* The next example uses the `>` operator:
|
|
50
55
|
*
|
|
51
56
|
* ```ts
|
|
52
57
|
* const persons = await db
|
|
@@ -62,8 +67,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
62
67
|
* select * from "person" where "id" > $1
|
|
63
68
|
* ```
|
|
64
69
|
*
|
|
65
|
-
*
|
|
66
|
-
* conditional
|
|
70
|
+
* `where` methods don't change the type of the query. You can add
|
|
71
|
+
* conditional statements easily by doing something like this:
|
|
67
72
|
*
|
|
68
73
|
* ```ts
|
|
69
74
|
* let query = db
|
|
@@ -71,6 +76,8 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
71
76
|
* .selectAll()
|
|
72
77
|
*
|
|
73
78
|
* if (firstName) {
|
|
79
|
+
* // The query builder is immutable. Remember to reassign
|
|
80
|
+
* // the result back to the query variable.
|
|
74
81
|
* query = query.where('first_name', '=', firstName)
|
|
75
82
|
* }
|
|
76
83
|
*
|
|
@@ -78,8 +85,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
78
85
|
* ```
|
|
79
86
|
*
|
|
80
87
|
* This is true for basically all methods execpt the `select` and
|
|
81
|
-
* `returning
|
|
82
|
-
* query.
|
|
88
|
+
* `returning`, that __do__ change the return type of the query.
|
|
83
89
|
*
|
|
84
90
|
* Both the first and third argument can also be subqueries.
|
|
85
91
|
* A subquery is defined by passing a function and calling
|
|
@@ -116,7 +122,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
116
122
|
*
|
|
117
123
|
* A `where in` query can be built by using the `in` operator and an array
|
|
118
124
|
* of values. The values in the array can also be subqueries or raw
|
|
119
|
-
*
|
|
125
|
+
* {@link sql} expressions.
|
|
120
126
|
*
|
|
121
127
|
* ```ts
|
|
122
128
|
* const persons = await db
|
|
@@ -132,15 +138,17 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
132
138
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
133
139
|
* ```
|
|
134
140
|
*
|
|
135
|
-
* If everything else fails, you can always
|
|
141
|
+
* If everything else fails, you can always use the {@link sql} tag
|
|
136
142
|
* as any of the arguments, including the operator:
|
|
137
143
|
*
|
|
138
144
|
* ```ts
|
|
145
|
+
* import { sql } from 'kysely'
|
|
146
|
+
*
|
|
139
147
|
* const persons = await db
|
|
140
148
|
* .selectFrom('person')
|
|
141
149
|
* .selectAll()
|
|
142
150
|
* .where(
|
|
143
|
-
*
|
|
151
|
+
* sql`coalesce(first_name, last_name)`,
|
|
144
152
|
* 'like',
|
|
145
153
|
* '%' + name + '%',
|
|
146
154
|
* )
|
|
@@ -175,24 +183,25 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
175
183
|
* ```
|
|
176
184
|
*
|
|
177
185
|
* In all examples above the columns were known at compile time
|
|
178
|
-
* (except for the
|
|
179
|
-
* you to refer to columns that exist in the database **and**
|
|
180
|
-
* referred to in the current query and context.
|
|
186
|
+
* (except for the raw {@link sql} expressions). By default kysely only
|
|
187
|
+
* allows you to refer to columns that exist in the database **and**
|
|
188
|
+
* can be referred to in the current query and context.
|
|
181
189
|
*
|
|
182
190
|
* Sometimes you may want to refer to columns that come from the user
|
|
183
191
|
* input and thus are not available at compile time.
|
|
184
192
|
*
|
|
185
|
-
* You have two options,
|
|
193
|
+
* You have two options, the {@link sql} tag or `db.dynamic`. The example below
|
|
186
194
|
* uses both:
|
|
187
195
|
*
|
|
188
196
|
* ```ts
|
|
197
|
+
* import { sql } from 'kysely'
|
|
189
198
|
* const { ref } = db.dynamic
|
|
190
199
|
*
|
|
191
200
|
* const persons = await db
|
|
192
201
|
* .selectFrom('person')
|
|
193
202
|
* .selectAll()
|
|
194
203
|
* .where(ref(columnFromUserInput), '=', 1)
|
|
195
|
-
* .orWhere(
|
|
204
|
+
* .orWhere(sql.id(columnFromUserInput), '=', 2)
|
|
196
205
|
* .execute()
|
|
197
206
|
* ```
|
|
198
207
|
*/
|
|
@@ -326,13 +335,14 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
326
335
|
/**
|
|
327
336
|
* Adds a `where exists` clause to the query.
|
|
328
337
|
*
|
|
329
|
-
* You can either use a subquery or a raw
|
|
338
|
+
* You can either use a subquery or a raw {@link sql} snippet.
|
|
330
339
|
*
|
|
331
340
|
* ### Examples
|
|
332
341
|
*
|
|
333
342
|
* The query below selets all persons that own a pet named Catto:
|
|
334
343
|
*
|
|
335
344
|
* ```ts
|
|
345
|
+
* const petName = 'Catto'
|
|
336
346
|
* const persons = await db
|
|
337
347
|
* .selectFrom('person')
|
|
338
348
|
* .selectAll()
|
|
@@ -340,7 +350,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
340
350
|
* .selectFrom('pet')
|
|
341
351
|
* .select('pet.id')
|
|
342
352
|
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
343
|
-
* .where('pet.name', '=',
|
|
353
|
+
* .where('pet.name', '=', petName)
|
|
344
354
|
* )
|
|
345
355
|
* .execute()
|
|
346
356
|
* ```
|
|
@@ -357,16 +367,16 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
357
367
|
* )
|
|
358
368
|
* ```
|
|
359
369
|
*
|
|
360
|
-
* The same query as in the previous example but with using raw:
|
|
370
|
+
* The same query as in the previous example but with using raw {@link sql}:
|
|
361
371
|
*
|
|
362
372
|
* ```ts
|
|
373
|
+
* import { sql } from 'kysely'
|
|
374
|
+
*
|
|
375
|
+
* const petName = 'Catto'
|
|
363
376
|
* db.selectFrom('person')
|
|
364
377
|
* .selectAll()
|
|
365
378
|
* .whereExists(
|
|
366
|
-
*
|
|
367
|
-
* '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
|
|
368
|
-
* ['Catto']
|
|
369
|
-
* )
|
|
379
|
+
* sql`(select pet.id from pet where person.id = pet.owner_id and pet.name = ${petName})`
|
|
370
380
|
* )
|
|
371
381
|
* ```
|
|
372
382
|
*
|
|
@@ -449,7 +459,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
449
459
|
* Kysely only allows you to select columns and expressions that exist and would
|
|
450
460
|
* produce valid SQL. However, Kysely is not perfect and there may be cases where
|
|
451
461
|
* the type inference doesn't work and you need to override it. You can always
|
|
452
|
-
* use the {@link Kysely.dynamic | dynamic} module and {@link
|
|
462
|
+
* use the {@link Kysely.dynamic | dynamic} module and the {@link sql} tag
|
|
453
463
|
* to override the types.
|
|
454
464
|
*
|
|
455
465
|
* Select calls are additive. Calling `select('id').select('first_name')` is the
|
|
@@ -536,11 +546,13 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
536
546
|
* from "person"
|
|
537
547
|
* ```
|
|
538
548
|
*
|
|
539
|
-
* You can also select subqueries and raw expressions. Note that you
|
|
549
|
+
* You can also select subqueries and raw sql expressions. Note that you
|
|
540
550
|
* always need to give a name for the selections using the `as`
|
|
541
551
|
* method:
|
|
542
552
|
*
|
|
543
553
|
* ```ts
|
|
554
|
+
* import { sql } from 'kysely'
|
|
555
|
+
*
|
|
544
556
|
* const persons = await db.selectFrom('person')
|
|
545
557
|
* .select([
|
|
546
558
|
* (qb) => qb
|
|
@@ -549,7 +561,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
549
561
|
* .select('pet.name')
|
|
550
562
|
* .limit(1)
|
|
551
563
|
* .as('pet_name')
|
|
552
|
-
*
|
|
564
|
+
* sql<string>`concat(first_name, ' ', last_name)`.as('full_name')
|
|
553
565
|
* ])
|
|
554
566
|
* .execute()
|
|
555
567
|
*
|
|
@@ -571,7 +583,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
571
583
|
* from "person"
|
|
572
584
|
* ```
|
|
573
585
|
*
|
|
574
|
-
* In case you use
|
|
586
|
+
* In case you use the {@link sql} tag you need to specify the type of the expression
|
|
575
587
|
* (in this example `string`).
|
|
576
588
|
*
|
|
577
589
|
* All the examples above assume you know the column names at compile time.
|
|
@@ -889,10 +901,12 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
889
901
|
* order by "id" asc, "fn" desc
|
|
890
902
|
* ```
|
|
891
903
|
*
|
|
892
|
-
* The order by expression can also be a
|
|
904
|
+
* The order by expression can also be a raw sql expression or a subquery
|
|
893
905
|
* in addition to column references:
|
|
894
906
|
*
|
|
895
907
|
* ```ts
|
|
908
|
+
* import { sql } from 'kysely'
|
|
909
|
+
*
|
|
896
910
|
* await db
|
|
897
911
|
* .selectFrom('person')
|
|
898
912
|
* .selectAll()
|
|
@@ -902,7 +916,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
902
916
|
* .limit(1)
|
|
903
917
|
* )
|
|
904
918
|
* .orderBy(
|
|
905
|
-
*
|
|
919
|
+
* sql`concat(first_name, last_name)`
|
|
906
920
|
* )
|
|
907
921
|
* .execute()
|
|
908
922
|
* ```
|
|
@@ -953,11 +967,13 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
953
967
|
* ### Examples
|
|
954
968
|
*
|
|
955
969
|
* ```ts
|
|
970
|
+
* import { sql } from 'kysely'
|
|
971
|
+
*
|
|
956
972
|
* await db
|
|
957
973
|
* .selectFrom('person')
|
|
958
974
|
* .select([
|
|
959
975
|
* 'first_name',
|
|
960
|
-
*
|
|
976
|
+
* sql`max(id)`.as('max_id')
|
|
961
977
|
* ])
|
|
962
978
|
* .groupBy('first_name')
|
|
963
979
|
* .execute()
|
|
@@ -974,12 +990,14 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
974
990
|
* `groupBy` also accepts an array:
|
|
975
991
|
*
|
|
976
992
|
* ```ts
|
|
993
|
+
* import { sql } from 'kysely'
|
|
994
|
+
*
|
|
977
995
|
* await db
|
|
978
996
|
* .selectFrom('person')
|
|
979
997
|
* .select([
|
|
980
998
|
* 'first_name',
|
|
981
999
|
* 'last_name',
|
|
982
|
-
*
|
|
1000
|
+
* sql`max(id)`.as('max_id')
|
|
983
1001
|
* ])
|
|
984
1002
|
* .groupBy([
|
|
985
1003
|
* 'first_name',
|
|
@@ -997,18 +1015,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
997
1015
|
* ```
|
|
998
1016
|
*
|
|
999
1017
|
* The group by expressions can also be subqueries or
|
|
1000
|
-
* raw expressions:
|
|
1018
|
+
* raw sql expressions:
|
|
1001
1019
|
*
|
|
1002
1020
|
* ```ts
|
|
1021
|
+
* import { sql } from 'kysely'
|
|
1022
|
+
*
|
|
1003
1023
|
* await db
|
|
1004
1024
|
* .selectFrom('person')
|
|
1005
1025
|
* .select([
|
|
1006
1026
|
* 'first_name',
|
|
1007
1027
|
* 'last_name',
|
|
1008
|
-
*
|
|
1028
|
+
* sql`max(id)`.as('max_id')
|
|
1009
1029
|
* ])
|
|
1010
1030
|
* .groupBy([
|
|
1011
|
-
*
|
|
1031
|
+
* sql`concat(first_name, last_name)`,
|
|
1012
1032
|
* (qb) => qb.selectFrom('pet').select('id').limit(1)
|
|
1013
1033
|
* ])
|
|
1014
1034
|
* .execute()
|
|
@@ -1242,7 +1262,6 @@ export interface SelectQueryBuilderProps {
|
|
|
1242
1262
|
readonly queryId: QueryId;
|
|
1243
1263
|
readonly queryNode: SelectQueryNode;
|
|
1244
1264
|
readonly executor: QueryExecutor;
|
|
1245
|
-
readonly parseContext: ParseContext;
|
|
1246
1265
|
}
|
|
1247
1266
|
/**
|
|
1248
1267
|
* {@link SelectQueryBuilder} with an alias. The result of calling {@link SelectQueryBuilder.as}.
|
|
@@ -23,109 +23,109 @@ class SelectQueryBuilder {
|
|
|
23
23
|
where(...args) {
|
|
24
24
|
return new SelectQueryBuilder({
|
|
25
25
|
...this.#props,
|
|
26
|
-
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(
|
|
26
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(args)),
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
whereRef(lhs, op, rhs) {
|
|
30
30
|
return new SelectQueryBuilder({
|
|
31
31
|
...this.#props,
|
|
32
|
-
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(
|
|
32
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(lhs, op, rhs)),
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
orWhere(...args) {
|
|
36
36
|
return new SelectQueryBuilder({
|
|
37
37
|
...this.#props,
|
|
38
|
-
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(
|
|
38
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(args)),
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
41
|
orWhereRef(lhs, op, rhs) {
|
|
42
42
|
return new SelectQueryBuilder({
|
|
43
43
|
...this.#props,
|
|
44
|
-
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(
|
|
44
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(lhs, op, rhs)),
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
whereExists(arg) {
|
|
48
48
|
return new SelectQueryBuilder({
|
|
49
49
|
...this.#props,
|
|
50
|
-
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(
|
|
50
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(arg)),
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
whereNotExists(arg) {
|
|
54
54
|
return new SelectQueryBuilder({
|
|
55
55
|
...this.#props,
|
|
56
|
-
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(
|
|
56
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(arg)),
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
59
|
orWhereExists(arg) {
|
|
60
60
|
return new SelectQueryBuilder({
|
|
61
61
|
...this.#props,
|
|
62
|
-
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(
|
|
62
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(arg)),
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
65
|
orWhereNotExists(arg) {
|
|
66
66
|
return new SelectQueryBuilder({
|
|
67
67
|
...this.#props,
|
|
68
|
-
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(
|
|
68
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(arg)),
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
71
|
having(...args) {
|
|
72
72
|
return new SelectQueryBuilder({
|
|
73
73
|
...this.#props,
|
|
74
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseHavingFilter)(
|
|
74
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseHavingFilter)(args)),
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
77
|
havingRef(lhs, op, rhs) {
|
|
78
78
|
return new SelectQueryBuilder({
|
|
79
79
|
...this.#props,
|
|
80
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(
|
|
80
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(lhs, op, rhs)),
|
|
81
81
|
});
|
|
82
82
|
}
|
|
83
83
|
orHaving(...args) {
|
|
84
84
|
return new SelectQueryBuilder({
|
|
85
85
|
...this.#props,
|
|
86
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseHavingFilter)(
|
|
86
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseHavingFilter)(args)),
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
89
|
orHavingRef(lhs, op, rhs) {
|
|
90
90
|
return new SelectQueryBuilder({
|
|
91
91
|
...this.#props,
|
|
92
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(
|
|
92
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(lhs, op, rhs)),
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
95
|
havingExists(arg) {
|
|
96
96
|
return new SelectQueryBuilder({
|
|
97
97
|
...this.#props,
|
|
98
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(
|
|
98
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(arg)),
|
|
99
99
|
});
|
|
100
100
|
}
|
|
101
101
|
havingNotExist(arg) {
|
|
102
102
|
return new SelectQueryBuilder({
|
|
103
103
|
...this.#props,
|
|
104
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(
|
|
104
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithHaving(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(arg)),
|
|
105
105
|
});
|
|
106
106
|
}
|
|
107
107
|
orHavingExists(arg) {
|
|
108
108
|
return new SelectQueryBuilder({
|
|
109
109
|
...this.#props,
|
|
110
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(
|
|
110
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(arg)),
|
|
111
111
|
});
|
|
112
112
|
}
|
|
113
113
|
orHavingNotExists(arg) {
|
|
114
114
|
return new SelectQueryBuilder({
|
|
115
115
|
...this.#props,
|
|
116
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(
|
|
116
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(arg)),
|
|
117
117
|
});
|
|
118
118
|
}
|
|
119
119
|
select(selection) {
|
|
120
120
|
return new SelectQueryBuilder({
|
|
121
121
|
...this.#props,
|
|
122
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSelections(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(
|
|
122
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithSelections(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(selection)),
|
|
123
123
|
});
|
|
124
124
|
}
|
|
125
125
|
distinctOn(selection) {
|
|
126
126
|
return new SelectQueryBuilder({
|
|
127
127
|
...this.#props,
|
|
128
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithDistinctOnSelections(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(
|
|
128
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithDistinctOnSelections(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(selection)),
|
|
129
129
|
});
|
|
130
130
|
}
|
|
131
131
|
/**
|
|
@@ -215,25 +215,25 @@ class SelectQueryBuilder {
|
|
|
215
215
|
innerJoin(...args) {
|
|
216
216
|
return new SelectQueryBuilder({
|
|
217
217
|
...this.#props,
|
|
218
|
-
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(
|
|
218
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)('InnerJoin', args)),
|
|
219
219
|
});
|
|
220
220
|
}
|
|
221
221
|
leftJoin(...args) {
|
|
222
222
|
return new SelectQueryBuilder({
|
|
223
223
|
...this.#props,
|
|
224
|
-
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(
|
|
224
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)('LeftJoin', args)),
|
|
225
225
|
});
|
|
226
226
|
}
|
|
227
227
|
rightJoin(...args) {
|
|
228
228
|
return new SelectQueryBuilder({
|
|
229
229
|
...this.#props,
|
|
230
|
-
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(
|
|
230
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)('RightJoin', args)),
|
|
231
231
|
});
|
|
232
232
|
}
|
|
233
233
|
fullJoin(...args) {
|
|
234
234
|
return new SelectQueryBuilder({
|
|
235
235
|
...this.#props,
|
|
236
|
-
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(
|
|
236
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)('FullJoin', args)),
|
|
237
237
|
});
|
|
238
238
|
}
|
|
239
239
|
/**
|
|
@@ -264,10 +264,12 @@ class SelectQueryBuilder {
|
|
|
264
264
|
* order by "id" asc, "fn" desc
|
|
265
265
|
* ```
|
|
266
266
|
*
|
|
267
|
-
* The order by expression can also be a
|
|
267
|
+
* The order by expression can also be a raw sql expression or a subquery
|
|
268
268
|
* in addition to column references:
|
|
269
269
|
*
|
|
270
270
|
* ```ts
|
|
271
|
+
* import { sql } from 'kysely'
|
|
272
|
+
*
|
|
271
273
|
* await db
|
|
272
274
|
* .selectFrom('person')
|
|
273
275
|
* .selectAll()
|
|
@@ -277,7 +279,7 @@ class SelectQueryBuilder {
|
|
|
277
279
|
* .limit(1)
|
|
278
280
|
* )
|
|
279
281
|
* .orderBy(
|
|
280
|
-
*
|
|
282
|
+
* sql`concat(first_name, last_name)`
|
|
281
283
|
* )
|
|
282
284
|
* .execute()
|
|
283
285
|
* ```
|
|
@@ -324,13 +326,13 @@ class SelectQueryBuilder {
|
|
|
324
326
|
orderBy(orderBy, direction) {
|
|
325
327
|
return new SelectQueryBuilder({
|
|
326
328
|
...this.#props,
|
|
327
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, (0, order_by_parser_js_1.parseOrderBy)(
|
|
329
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, (0, order_by_parser_js_1.parseOrderBy)(orderBy, direction)),
|
|
328
330
|
});
|
|
329
331
|
}
|
|
330
332
|
groupBy(groupBy) {
|
|
331
333
|
return new SelectQueryBuilder({
|
|
332
334
|
...this.#props,
|
|
333
|
-
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, (0, group_by_parser_js_1.parseGroupBy)(
|
|
335
|
+
queryNode: select_query_node_js_1.SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, (0, group_by_parser_js_1.parseGroupBy)(groupBy)),
|
|
334
336
|
});
|
|
335
337
|
}
|
|
336
338
|
/**
|