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
|
@@ -45,6 +45,8 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
|
|
|
45
45
|
* Return arbitrary expressions:
|
|
46
46
|
*
|
|
47
47
|
* ```ts
|
|
48
|
+
* import { sql } from 'kysely'
|
|
49
|
+
*
|
|
48
50
|
* const { id, full_name, first_pet_id } = await db
|
|
49
51
|
* .insertInto('person')
|
|
50
52
|
* .values({
|
|
@@ -53,7 +55,7 @@ export interface ReturningInterface<DB, TB extends keyof DB, O> {
|
|
|
53
55
|
* })
|
|
54
56
|
* .returning([
|
|
55
57
|
* 'id as id',
|
|
56
|
-
*
|
|
58
|
+
* sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
|
|
57
59
|
* (qb) => qb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
|
|
58
60
|
* ])
|
|
59
61
|
* .executeTakeFirst()
|
|
@@ -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}.
|
|
@@ -21,109 +21,109 @@ export class SelectQueryBuilder {
|
|
|
21
21
|
where(...args) {
|
|
22
22
|
return new SelectQueryBuilder({
|
|
23
23
|
...this.#props,
|
|
24
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(
|
|
24
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(args)),
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
27
|
whereRef(lhs, op, rhs) {
|
|
28
28
|
return new SelectQueryBuilder({
|
|
29
29
|
...this.#props,
|
|
30
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(
|
|
30
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
|
|
31
31
|
});
|
|
32
32
|
}
|
|
33
33
|
orWhere(...args) {
|
|
34
34
|
return new SelectQueryBuilder({
|
|
35
35
|
...this.#props,
|
|
36
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(
|
|
36
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(args)),
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
39
|
orWhereRef(lhs, op, rhs) {
|
|
40
40
|
return new SelectQueryBuilder({
|
|
41
41
|
...this.#props,
|
|
42
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(
|
|
42
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
45
|
whereExists(arg) {
|
|
46
46
|
return new SelectQueryBuilder({
|
|
47
47
|
...this.#props,
|
|
48
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(
|
|
48
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(arg)),
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
whereNotExists(arg) {
|
|
52
52
|
return new SelectQueryBuilder({
|
|
53
53
|
...this.#props,
|
|
54
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(
|
|
54
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(arg)),
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
orWhereExists(arg) {
|
|
58
58
|
return new SelectQueryBuilder({
|
|
59
59
|
...this.#props,
|
|
60
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(
|
|
60
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(arg)),
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
63
|
orWhereNotExists(arg) {
|
|
64
64
|
return new SelectQueryBuilder({
|
|
65
65
|
...this.#props,
|
|
66
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(
|
|
66
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(arg)),
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
having(...args) {
|
|
70
70
|
return new SelectQueryBuilder({
|
|
71
71
|
...this.#props,
|
|
72
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseHavingFilter(
|
|
72
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseHavingFilter(args)),
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
75
|
havingRef(lhs, op, rhs) {
|
|
76
76
|
return new SelectQueryBuilder({
|
|
77
77
|
...this.#props,
|
|
78
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseReferenceFilter(
|
|
78
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
81
|
orHaving(...args) {
|
|
82
82
|
return new SelectQueryBuilder({
|
|
83
83
|
...this.#props,
|
|
84
|
-
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseHavingFilter(
|
|
84
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseHavingFilter(args)),
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
87
|
orHavingRef(lhs, op, rhs) {
|
|
88
88
|
return new SelectQueryBuilder({
|
|
89
89
|
...this.#props,
|
|
90
|
-
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseReferenceFilter(
|
|
90
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
93
|
havingExists(arg) {
|
|
94
94
|
return new SelectQueryBuilder({
|
|
95
95
|
...this.#props,
|
|
96
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseExistFilter(
|
|
96
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseExistFilter(arg)),
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
99
|
havingNotExist(arg) {
|
|
100
100
|
return new SelectQueryBuilder({
|
|
101
101
|
...this.#props,
|
|
102
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseNotExistFilter(
|
|
102
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseNotExistFilter(arg)),
|
|
103
103
|
});
|
|
104
104
|
}
|
|
105
105
|
orHavingExists(arg) {
|
|
106
106
|
return new SelectQueryBuilder({
|
|
107
107
|
...this.#props,
|
|
108
|
-
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseExistFilter(
|
|
108
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseExistFilter(arg)),
|
|
109
109
|
});
|
|
110
110
|
}
|
|
111
111
|
orHavingNotExists(arg) {
|
|
112
112
|
return new SelectQueryBuilder({
|
|
113
113
|
...this.#props,
|
|
114
|
-
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseNotExistFilter(
|
|
114
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseNotExistFilter(arg)),
|
|
115
115
|
});
|
|
116
116
|
}
|
|
117
117
|
select(selection) {
|
|
118
118
|
return new SelectQueryBuilder({
|
|
119
119
|
...this.#props,
|
|
120
|
-
queryNode: SelectQueryNode.cloneWithSelections(this.#props.queryNode, parseSelectExpressionOrList(
|
|
120
|
+
queryNode: SelectQueryNode.cloneWithSelections(this.#props.queryNode, parseSelectExpressionOrList(selection)),
|
|
121
121
|
});
|
|
122
122
|
}
|
|
123
123
|
distinctOn(selection) {
|
|
124
124
|
return new SelectQueryBuilder({
|
|
125
125
|
...this.#props,
|
|
126
|
-
queryNode: SelectQueryNode.cloneWithDistinctOnSelections(this.#props.queryNode, parseSelectExpressionOrList(
|
|
126
|
+
queryNode: SelectQueryNode.cloneWithDistinctOnSelections(this.#props.queryNode, parseSelectExpressionOrList(selection)),
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
129
|
/**
|
|
@@ -213,25 +213,25 @@ export class SelectQueryBuilder {
|
|
|
213
213
|
innerJoin(...args) {
|
|
214
214
|
return new SelectQueryBuilder({
|
|
215
215
|
...this.#props,
|
|
216
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
216
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('InnerJoin', args)),
|
|
217
217
|
});
|
|
218
218
|
}
|
|
219
219
|
leftJoin(...args) {
|
|
220
220
|
return new SelectQueryBuilder({
|
|
221
221
|
...this.#props,
|
|
222
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
222
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LeftJoin', args)),
|
|
223
223
|
});
|
|
224
224
|
}
|
|
225
225
|
rightJoin(...args) {
|
|
226
226
|
return new SelectQueryBuilder({
|
|
227
227
|
...this.#props,
|
|
228
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
228
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('RightJoin', args)),
|
|
229
229
|
});
|
|
230
230
|
}
|
|
231
231
|
fullJoin(...args) {
|
|
232
232
|
return new SelectQueryBuilder({
|
|
233
233
|
...this.#props,
|
|
234
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
234
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
|
|
235
235
|
});
|
|
236
236
|
}
|
|
237
237
|
/**
|
|
@@ -262,10 +262,12 @@ export class SelectQueryBuilder {
|
|
|
262
262
|
* order by "id" asc, "fn" desc
|
|
263
263
|
* ```
|
|
264
264
|
*
|
|
265
|
-
* The order by expression can also be a
|
|
265
|
+
* The order by expression can also be a raw sql expression or a subquery
|
|
266
266
|
* in addition to column references:
|
|
267
267
|
*
|
|
268
268
|
* ```ts
|
|
269
|
+
* import { sql } from 'kysely'
|
|
270
|
+
*
|
|
269
271
|
* await db
|
|
270
272
|
* .selectFrom('person')
|
|
271
273
|
* .selectAll()
|
|
@@ -275,7 +277,7 @@ export class SelectQueryBuilder {
|
|
|
275
277
|
* .limit(1)
|
|
276
278
|
* )
|
|
277
279
|
* .orderBy(
|
|
278
|
-
*
|
|
280
|
+
* sql`concat(first_name, last_name)`
|
|
279
281
|
* )
|
|
280
282
|
* .execute()
|
|
281
283
|
* ```
|
|
@@ -322,13 +324,13 @@ export class SelectQueryBuilder {
|
|
|
322
324
|
orderBy(orderBy, direction) {
|
|
323
325
|
return new SelectQueryBuilder({
|
|
324
326
|
...this.#props,
|
|
325
|
-
queryNode: SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, parseOrderBy(
|
|
327
|
+
queryNode: SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, parseOrderBy(orderBy, direction)),
|
|
326
328
|
});
|
|
327
329
|
}
|
|
328
330
|
groupBy(groupBy) {
|
|
329
331
|
return new SelectQueryBuilder({
|
|
330
332
|
...this.#props,
|
|
331
|
-
queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, parseGroupBy(
|
|
333
|
+
queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, parseGroupBy(groupBy)),
|
|
332
334
|
});
|
|
333
335
|
}
|
|
334
336
|
/**
|