kysely 0.16.9 → 0.17.1
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/LICENSE +21 -0
- package/README.md +2 -2
- package/dist/cjs/dialect/mysql/mysql-adapter.js +3 -4
- 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 +1 -1
- package/dist/cjs/driver/single-connection-provider.d.ts +1 -1
- package/dist/cjs/driver/single-connection-provider.js +1 -1
- 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/delete-query-node.d.ts +7 -0
- package/dist/cjs/operation-node/delete-query-node.js +15 -0
- 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/query-builder/delete-query-builder.d.ts +77 -20
- package/dist/cjs/query-builder/delete-query-builder.js +81 -14
- 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 +11 -9
- 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 +24 -20
- package/dist/cjs/query-builder/on-conflict-builder.js +17 -17
- package/dist/cjs/query-builder/returning-interface.d.ts +2 -2
- package/dist/cjs/query-builder/select-query-builder.d.ts +43 -32
- package/dist/cjs/query-builder/select-query-builder.js +28 -26
- package/dist/cjs/query-builder/update-query-builder.d.ts +29 -25
- package/dist/cjs/query-builder/update-query-builder.js +22 -20
- package/dist/cjs/query-builder/where-interface.d.ts +20 -16
- package/dist/cjs/query-compiler/default-query-compiler.js +16 -7
- package/dist/cjs/query-creator.d.ts +24 -138
- package/dist/cjs/query-creator.js +19 -145
- package/dist/cjs/query-executor/default-query-executor.d.ts +14 -3
- package/dist/cjs/query-executor/default-query-executor.js +15 -17
- package/dist/cjs/query-executor/noop-query-executor.d.ts +13 -2
- package/dist/cjs/query-executor/noop-query-executor.js +9 -2
- 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 +14 -6
- package/dist/cjs/query-executor/query-executor.js +4 -2
- 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 +323 -0
- package/dist/cjs/raw-builder/sql.js +153 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +20 -8
- package/dist/cjs/schema/alter-table-builder.js +3 -3
- package/dist/cjs/schema/column-definition-builder.d.ts +20 -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 +6 -2
- package/dist/cjs/schema/create-table-builder.js +8 -4
- 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/esm/dialect/mysql/mysql-adapter.js +3 -4
- 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 +1 -1
- package/dist/esm/driver/single-connection-provider.d.ts +1 -1
- package/dist/esm/driver/single-connection-provider.js +1 -1
- 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/delete-query-node.d.ts +7 -0
- package/dist/esm/operation-node/delete-query-node.js +15 -0
- 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/query-builder/delete-query-builder.d.ts +77 -20
- package/dist/esm/query-builder/delete-query-builder.js +81 -14
- 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 +11 -9
- 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 +24 -20
- package/dist/esm/query-builder/on-conflict-builder.js +17 -17
- package/dist/esm/query-builder/returning-interface.d.ts +2 -2
- package/dist/esm/query-builder/select-query-builder.d.ts +43 -32
- package/dist/esm/query-builder/select-query-builder.js +28 -26
- package/dist/esm/query-builder/update-query-builder.d.ts +29 -25
- package/dist/esm/query-builder/update-query-builder.js +22 -20
- package/dist/esm/query-builder/where-interface.d.ts +20 -16
- package/dist/esm/query-compiler/default-query-compiler.js +16 -7
- package/dist/esm/query-creator.d.ts +24 -138
- package/dist/esm/query-creator.js +19 -145
- package/dist/esm/query-executor/default-query-executor.d.ts +14 -3
- package/dist/esm/query-executor/default-query-executor.js +15 -17
- package/dist/esm/query-executor/noop-query-executor.d.ts +13 -2
- package/dist/esm/query-executor/noop-query-executor.js +8 -1
- 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 +14 -6
- package/dist/esm/query-executor/query-executor.js +4 -2
- 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 +323 -0
- package/dist/esm/raw-builder/sql.js +151 -0
- package/dist/esm/schema/alter-table-builder.d.ts +20 -8
- package/dist/esm/schema/alter-table-builder.js +3 -3
- package/dist/esm/schema/column-definition-builder.d.ts +20 -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 +6 -2
- package/dist/esm/schema/create-table-builder.js +8 -4
- 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/package.json +13 -13
- 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,7 @@ 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 `sql\`your operator\``.
|
|
50
49
|
*
|
|
51
50
|
* ```ts
|
|
52
51
|
* const persons = await db
|
|
@@ -116,7 +115,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
116
115
|
*
|
|
117
116
|
* A `where in` query can be built by using the `in` operator and an array
|
|
118
117
|
* of values. The values in the array can also be subqueries or raw
|
|
119
|
-
*
|
|
118
|
+
* {@link sql} expressions.
|
|
120
119
|
*
|
|
121
120
|
* ```ts
|
|
122
121
|
* const persons = await db
|
|
@@ -132,15 +131,17 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
132
131
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
133
132
|
* ```
|
|
134
133
|
*
|
|
135
|
-
* If everything else fails, you can always
|
|
134
|
+
* If everything else fails, you can always use the {@link sql} tag
|
|
136
135
|
* as any of the arguments, including the operator:
|
|
137
136
|
*
|
|
138
137
|
* ```ts
|
|
138
|
+
* import { sql } from 'kysely'
|
|
139
|
+
*
|
|
139
140
|
* const persons = await db
|
|
140
141
|
* .selectFrom('person')
|
|
141
142
|
* .selectAll()
|
|
142
143
|
* .where(
|
|
143
|
-
*
|
|
144
|
+
* sql`coalesce(first_name, last_name)`,
|
|
144
145
|
* 'like',
|
|
145
146
|
* '%' + name + '%',
|
|
146
147
|
* )
|
|
@@ -175,24 +176,25 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
175
176
|
* ```
|
|
176
177
|
*
|
|
177
178
|
* 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.
|
|
179
|
+
* (except for the raw {@link sql} expressions). By default kysely only
|
|
180
|
+
* allows you to refer to columns that exist in the database **and**
|
|
181
|
+
* can be referred to in the current query and context.
|
|
181
182
|
*
|
|
182
183
|
* Sometimes you may want to refer to columns that come from the user
|
|
183
184
|
* input and thus are not available at compile time.
|
|
184
185
|
*
|
|
185
|
-
* You have two options,
|
|
186
|
+
* You have two options, the {@link sql} tag or `db.dynamic`. The example below
|
|
186
187
|
* uses both:
|
|
187
188
|
*
|
|
188
189
|
* ```ts
|
|
190
|
+
* import { sql } from 'kysely'
|
|
189
191
|
* const { ref } = db.dynamic
|
|
190
192
|
*
|
|
191
193
|
* const persons = await db
|
|
192
194
|
* .selectFrom('person')
|
|
193
195
|
* .selectAll()
|
|
194
196
|
* .where(ref(columnFromUserInput), '=', 1)
|
|
195
|
-
* .orWhere(
|
|
197
|
+
* .orWhere(sql.id(columnFromUserInput), '=', 2)
|
|
196
198
|
* .execute()
|
|
197
199
|
* ```
|
|
198
200
|
*/
|
|
@@ -326,13 +328,14 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
326
328
|
/**
|
|
327
329
|
* Adds a `where exists` clause to the query.
|
|
328
330
|
*
|
|
329
|
-
* You can either use a subquery or a raw
|
|
331
|
+
* You can either use a subquery or a raw {@link sql} snippet.
|
|
330
332
|
*
|
|
331
333
|
* ### Examples
|
|
332
334
|
*
|
|
333
335
|
* The query below selets all persons that own a pet named Catto:
|
|
334
336
|
*
|
|
335
337
|
* ```ts
|
|
338
|
+
* const petName = 'Catto'
|
|
336
339
|
* const persons = await db
|
|
337
340
|
* .selectFrom('person')
|
|
338
341
|
* .selectAll()
|
|
@@ -340,7 +343,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
340
343
|
* .selectFrom('pet')
|
|
341
344
|
* .select('pet.id')
|
|
342
345
|
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
343
|
-
* .where('pet.name', '=',
|
|
346
|
+
* .where('pet.name', '=', petName)
|
|
344
347
|
* )
|
|
345
348
|
* .execute()
|
|
346
349
|
* ```
|
|
@@ -357,16 +360,16 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
357
360
|
* )
|
|
358
361
|
* ```
|
|
359
362
|
*
|
|
360
|
-
* The same query as in the previous example but with using raw:
|
|
363
|
+
* The same query as in the previous example but with using raw {@link sql}:
|
|
361
364
|
*
|
|
362
365
|
* ```ts
|
|
366
|
+
* import { sql } from 'kysely'
|
|
367
|
+
*
|
|
368
|
+
* const petName = 'Catto'
|
|
363
369
|
* db.selectFrom('person')
|
|
364
370
|
* .selectAll()
|
|
365
371
|
* .whereExists(
|
|
366
|
-
*
|
|
367
|
-
* '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
|
|
368
|
-
* ['Catto']
|
|
369
|
-
* )
|
|
372
|
+
* sql`(select pet.id from pet where person.id = pet.owner_id and pet.name = ${petName})`
|
|
370
373
|
* )
|
|
371
374
|
* ```
|
|
372
375
|
*
|
|
@@ -449,14 +452,17 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
449
452
|
* Kysely only allows you to select columns and expressions that exist and would
|
|
450
453
|
* produce valid SQL. However, Kysely is not perfect and there may be cases where
|
|
451
454
|
* 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
|
|
455
|
+
* use the {@link Kysely.dynamic | dynamic} module and the {@link sql} tag
|
|
453
456
|
* to override the types.
|
|
454
457
|
*
|
|
455
458
|
* Select calls are additive. Calling `select('id').select('first_name')` is the
|
|
456
459
|
* same as calling `select(['id', 'first_name']).
|
|
457
460
|
*
|
|
458
461
|
* To select all columns of the query or specific tables see the
|
|
459
|
-
* {@link
|
|
462
|
+
* {@link selectAll} method.
|
|
463
|
+
*
|
|
464
|
+
* See the {@link if} method if you are looking for a way to add selections
|
|
465
|
+
* based on a runtime condition.
|
|
460
466
|
*
|
|
461
467
|
* ### Examples
|
|
462
468
|
*
|
|
@@ -533,11 +539,13 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
533
539
|
* from "person"
|
|
534
540
|
* ```
|
|
535
541
|
*
|
|
536
|
-
* You can also select subqueries and raw expressions. Note that you
|
|
542
|
+
* You can also select subqueries and raw sql expressions. Note that you
|
|
537
543
|
* always need to give a name for the selections using the `as`
|
|
538
544
|
* method:
|
|
539
545
|
*
|
|
540
546
|
* ```ts
|
|
547
|
+
* import { sql } from 'kysely'
|
|
548
|
+
*
|
|
541
549
|
* const persons = await db.selectFrom('person')
|
|
542
550
|
* .select([
|
|
543
551
|
* (qb) => qb
|
|
@@ -546,7 +554,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
546
554
|
* .select('pet.name')
|
|
547
555
|
* .limit(1)
|
|
548
556
|
* .as('pet_name')
|
|
549
|
-
*
|
|
557
|
+
* sql<string>`concat(first_name, ' ', last_name)`.as('full_name')
|
|
550
558
|
* ])
|
|
551
559
|
* .execute()
|
|
552
560
|
*
|
|
@@ -568,7 +576,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
568
576
|
* from "person"
|
|
569
577
|
* ```
|
|
570
578
|
*
|
|
571
|
-
* In case you use
|
|
579
|
+
* In case you use the {@link sql} tag you need to specify the type of the expression
|
|
572
580
|
* (in this example `string`).
|
|
573
581
|
*
|
|
574
582
|
* All the examples above assume you know the column names at compile time.
|
|
@@ -886,10 +894,12 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
886
894
|
* order by "id" asc, "fn" desc
|
|
887
895
|
* ```
|
|
888
896
|
*
|
|
889
|
-
* The order by expression can also be a
|
|
897
|
+
* The order by expression can also be a raw sql expression or a subquery
|
|
890
898
|
* in addition to column references:
|
|
891
899
|
*
|
|
892
900
|
* ```ts
|
|
901
|
+
* import { sql } from 'kysely'
|
|
902
|
+
*
|
|
893
903
|
* await db
|
|
894
904
|
* .selectFrom('person')
|
|
895
905
|
* .selectAll()
|
|
@@ -899,7 +909,7 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
899
909
|
* .limit(1)
|
|
900
910
|
* )
|
|
901
911
|
* .orderBy(
|
|
902
|
-
*
|
|
912
|
+
* sql`concat(first_name, last_name)`
|
|
903
913
|
* )
|
|
904
914
|
* .execute()
|
|
905
915
|
* ```
|
|
@@ -950,11 +960,13 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
950
960
|
* ### Examples
|
|
951
961
|
*
|
|
952
962
|
* ```ts
|
|
963
|
+
* import { sql } from 'kysely'
|
|
964
|
+
*
|
|
953
965
|
* await db
|
|
954
966
|
* .selectFrom('person')
|
|
955
967
|
* .select([
|
|
956
968
|
* 'first_name',
|
|
957
|
-
*
|
|
969
|
+
* sql`max(id)`.as('max_id')
|
|
958
970
|
* ])
|
|
959
971
|
* .groupBy('first_name')
|
|
960
972
|
* .execute()
|
|
@@ -971,14 +983,14 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
971
983
|
* `groupBy` also accepts an array:
|
|
972
984
|
*
|
|
973
985
|
* ```ts
|
|
974
|
-
*
|
|
986
|
+
* import { sql } from 'kysely'
|
|
975
987
|
*
|
|
976
988
|
* await db
|
|
977
989
|
* .selectFrom('person')
|
|
978
990
|
* .select([
|
|
979
991
|
* 'first_name',
|
|
980
992
|
* 'last_name',
|
|
981
|
-
*
|
|
993
|
+
* sql`max(id)`.as('max_id')
|
|
982
994
|
* ])
|
|
983
995
|
* .groupBy([
|
|
984
996
|
* 'first_name',
|
|
@@ -996,20 +1008,20 @@ export declare class SelectQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
996
1008
|
* ```
|
|
997
1009
|
*
|
|
998
1010
|
* The group by expressions can also be subqueries or
|
|
999
|
-
* raw expressions:
|
|
1011
|
+
* raw sql expressions:
|
|
1000
1012
|
*
|
|
1001
1013
|
* ```ts
|
|
1002
|
-
*
|
|
1014
|
+
* import { sql } from 'kysely'
|
|
1003
1015
|
*
|
|
1004
1016
|
* await db
|
|
1005
1017
|
* .selectFrom('person')
|
|
1006
1018
|
* .select([
|
|
1007
1019
|
* 'first_name',
|
|
1008
1020
|
* 'last_name',
|
|
1009
|
-
*
|
|
1021
|
+
* sql`max(id)`.as('max_id')
|
|
1010
1022
|
* ])
|
|
1011
1023
|
* .groupBy([
|
|
1012
|
-
*
|
|
1024
|
+
* sql`concat(first_name, last_name)`,
|
|
1013
1025
|
* (qb) => qb.selectFrom('pet').select('id').limit(1)
|
|
1014
1026
|
* ])
|
|
1015
1027
|
* .execute()
|
|
@@ -1243,7 +1255,6 @@ export interface SelectQueryBuilderProps {
|
|
|
1243
1255
|
readonly queryId: QueryId;
|
|
1244
1256
|
readonly queryNode: SelectQueryNode;
|
|
1245
1257
|
readonly executor: QueryExecutor;
|
|
1246
|
-
readonly parseContext: ParseContext;
|
|
1247
1258
|
}
|
|
1248
1259
|
/**
|
|
1249
1260
|
* {@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
|
/**
|
|
@@ -12,7 +12,6 @@ import { MutationObject } from '../parser/update-set-parser.js';
|
|
|
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 { UpdateResult } from './update-result.js';
|
|
17
16
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
18
17
|
import { WhereInterface } from './where-interface.js';
|
|
@@ -47,7 +46,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
47
46
|
* ```
|
|
48
47
|
*
|
|
49
48
|
* Operator can be any supported operator or if the typings don't support it
|
|
50
|
-
* you can always use `
|
|
49
|
+
* you can always use `sql\`your operator\``.
|
|
51
50
|
*
|
|
52
51
|
* ```ts
|
|
53
52
|
* const persons = await db
|
|
@@ -117,7 +116,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
117
116
|
*
|
|
118
117
|
* A `where in` query can be built by using the `in` operator and an array
|
|
119
118
|
* of values. The values in the array can also be subqueries or raw
|
|
120
|
-
*
|
|
119
|
+
* {@link sql} expressions.
|
|
121
120
|
*
|
|
122
121
|
* ```ts
|
|
123
122
|
* const persons = await db
|
|
@@ -133,15 +132,17 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
133
132
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
134
133
|
* ```
|
|
135
134
|
*
|
|
136
|
-
* If everything else fails, you can always
|
|
135
|
+
* If everything else fails, you can always use the {@link sql} tag
|
|
137
136
|
* as any of the arguments, including the operator:
|
|
138
137
|
*
|
|
139
138
|
* ```ts
|
|
139
|
+
* import { sql } from 'kysely'
|
|
140
|
+
*
|
|
140
141
|
* const persons = await db
|
|
141
142
|
* .selectFrom('person')
|
|
142
143
|
* .selectAll()
|
|
143
144
|
* .where(
|
|
144
|
-
*
|
|
145
|
+
* sql`coalesce(first_name, last_name)`,
|
|
145
146
|
* 'like',
|
|
146
147
|
* '%' + name + '%',
|
|
147
148
|
* )
|
|
@@ -176,24 +177,25 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
176
177
|
* ```
|
|
177
178
|
*
|
|
178
179
|
* In all examples above the columns were known at compile time
|
|
179
|
-
* (except for the
|
|
180
|
-
* you to refer to columns that exist in the database **and**
|
|
181
|
-
* referred to in the current query and context.
|
|
180
|
+
* (except for the raw {@link sql} expressions). By default kysely only
|
|
181
|
+
* allows you to refer to columns that exist in the database **and**
|
|
182
|
+
* can be referred to in the current query and context.
|
|
182
183
|
*
|
|
183
184
|
* Sometimes you may want to refer to columns that come from the user
|
|
184
185
|
* input and thus are not available at compile time.
|
|
185
186
|
*
|
|
186
|
-
* You have two options,
|
|
187
|
+
* You have two options, the {@link sql} tag or `db.dynamic`. The example below
|
|
187
188
|
* uses both:
|
|
188
189
|
*
|
|
189
190
|
* ```ts
|
|
191
|
+
* import { sql } from 'kysely'
|
|
190
192
|
* const { ref } = db.dynamic
|
|
191
193
|
*
|
|
192
194
|
* const persons = await db
|
|
193
195
|
* .selectFrom('person')
|
|
194
196
|
* .selectAll()
|
|
195
197
|
* .where(ref(columnFromUserInput), '=', 1)
|
|
196
|
-
* .orWhere(
|
|
198
|
+
* .orWhere(sql.id(columnFromUserInput), '=', 2)
|
|
197
199
|
* .execute()
|
|
198
200
|
* ```
|
|
199
201
|
*/
|
|
@@ -327,13 +329,14 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
327
329
|
/**
|
|
328
330
|
* Adds a `where exists` clause to the query.
|
|
329
331
|
*
|
|
330
|
-
* You can either use a subquery or a raw
|
|
332
|
+
* You can either use a subquery or a raw {@link sql} snippet.
|
|
331
333
|
*
|
|
332
334
|
* ### Examples
|
|
333
335
|
*
|
|
334
336
|
* The query below selets all persons that own a pet named Catto:
|
|
335
337
|
*
|
|
336
338
|
* ```ts
|
|
339
|
+
* const petName = 'Catto'
|
|
337
340
|
* const persons = await db
|
|
338
341
|
* .selectFrom('person')
|
|
339
342
|
* .selectAll()
|
|
@@ -341,7 +344,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
341
344
|
* .selectFrom('pet')
|
|
342
345
|
* .select('pet.id')
|
|
343
346
|
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
344
|
-
* .where('pet.name', '=',
|
|
347
|
+
* .where('pet.name', '=', petName)
|
|
345
348
|
* )
|
|
346
349
|
* .execute()
|
|
347
350
|
* ```
|
|
@@ -358,16 +361,16 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
358
361
|
* )
|
|
359
362
|
* ```
|
|
360
363
|
*
|
|
361
|
-
* The same query as in the previous example but with using raw:
|
|
364
|
+
* The same query as in the previous example but with using raw {@link sql}:
|
|
362
365
|
*
|
|
363
366
|
* ```ts
|
|
367
|
+
* import { sql } from 'kysely'
|
|
368
|
+
*
|
|
369
|
+
* const petName = 'Catto'
|
|
364
370
|
* db.selectFrom('person')
|
|
365
371
|
* .selectAll()
|
|
366
372
|
* .whereExists(
|
|
367
|
-
*
|
|
368
|
-
* '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
|
|
369
|
-
* ['Catto']
|
|
370
|
-
* )
|
|
373
|
+
* sql`(select pet.id from pet where person.id = pet.owner_id and pet.name = ${petName})`
|
|
371
374
|
* )
|
|
372
375
|
* ```
|
|
373
376
|
*
|
|
@@ -526,8 +529,8 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
526
529
|
* Sets the values to update for an {@link Kysely.updateTable | update} query.
|
|
527
530
|
*
|
|
528
531
|
* This method takes an object whose keys are column names and values are
|
|
529
|
-
* values to update. In addition to the column's type, the values can be
|
|
530
|
-
*
|
|
532
|
+
* values to update. In addition to the column's type, the values can be
|
|
533
|
+
* raw {@link sql} snippets or select queries.
|
|
531
534
|
*
|
|
532
535
|
* The return value of an update query is an instance of {@link UpdateResult}.
|
|
533
536
|
* You can use the {@link returning} method on supported databases to get out
|
|
@@ -580,16 +583,18 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
580
583
|
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
|
|
581
584
|
* ```
|
|
582
585
|
*
|
|
583
|
-
* In addition to primitives, the values can also be
|
|
586
|
+
* In addition to primitives, the values can also be raw sql expressions or
|
|
584
587
|
* select queries:
|
|
585
588
|
*
|
|
586
589
|
* ```ts
|
|
590
|
+
* import { sql } from 'kysely'
|
|
591
|
+
*
|
|
587
592
|
* const result = await db
|
|
588
593
|
* .updateTable('person')
|
|
589
594
|
* .set({
|
|
590
595
|
* first_name: 'Jennifer',
|
|
591
|
-
* last_name:
|
|
592
|
-
* age: db.selectFrom('person').select(
|
|
596
|
+
* last_name: sql`${'Ani'} || ${'ston'}`,
|
|
597
|
+
* age: db.selectFrom('person').select(sql`avg(age)`),
|
|
593
598
|
* })
|
|
594
599
|
* .where('id', '=', 1)
|
|
595
600
|
* .executeTakeFirst()
|
|
@@ -651,7 +656,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
651
656
|
* Return arbitrary expressions:
|
|
652
657
|
*
|
|
653
658
|
* ```ts
|
|
654
|
-
*
|
|
659
|
+
* import { sql } from 'kysely'
|
|
655
660
|
*
|
|
656
661
|
* const { id, full_name, first_pet_id } = await db
|
|
657
662
|
* .insertInto('person')
|
|
@@ -661,7 +666,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
661
666
|
* })
|
|
662
667
|
* .returning([
|
|
663
668
|
* 'id as id',
|
|
664
|
-
*
|
|
669
|
+
* sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
|
|
665
670
|
* (qb) => qb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
|
|
666
671
|
* ])
|
|
667
672
|
* .executeTakeFirst()
|
|
@@ -772,5 +777,4 @@ export interface UpdateQueryBuilderProps {
|
|
|
772
777
|
readonly queryId: QueryId;
|
|
773
778
|
readonly queryNode: UpdateQueryNode;
|
|
774
779
|
readonly executor: QueryExecutor;
|
|
775
|
-
readonly parseContext: ParseContext;
|
|
776
780
|
}
|