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 { 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,13 @@ 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
|
|
50
|
+
*
|
|
51
|
+
* ```ts
|
|
52
|
+
* sql`your operator`
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* The next example uses the `>` operator:
|
|
51
56
|
*
|
|
52
57
|
* ```ts
|
|
53
58
|
* const persons = await db
|
|
@@ -63,8 +68,8 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
63
68
|
* select * from "person" where "id" > $1
|
|
64
69
|
* ```
|
|
65
70
|
*
|
|
66
|
-
*
|
|
67
|
-
* conditional
|
|
71
|
+
* `where` methods don't change the type of the query. You can add
|
|
72
|
+
* conditional statements easily by doing something like this:
|
|
68
73
|
*
|
|
69
74
|
* ```ts
|
|
70
75
|
* let query = db
|
|
@@ -72,6 +77,8 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
72
77
|
* .selectAll()
|
|
73
78
|
*
|
|
74
79
|
* if (firstName) {
|
|
80
|
+
* // The query builder is immutable. Remember to reassign
|
|
81
|
+
* // the result back to the query variable.
|
|
75
82
|
* query = query.where('first_name', '=', firstName)
|
|
76
83
|
* }
|
|
77
84
|
*
|
|
@@ -79,8 +86,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
79
86
|
* ```
|
|
80
87
|
*
|
|
81
88
|
* This is true for basically all methods execpt the `select` and
|
|
82
|
-
* `returning
|
|
83
|
-
* query.
|
|
89
|
+
* `returning`, that __do__ change the return type of the query.
|
|
84
90
|
*
|
|
85
91
|
* Both the first and third argument can also be subqueries.
|
|
86
92
|
* A subquery is defined by passing a function and calling
|
|
@@ -117,7 +123,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
117
123
|
*
|
|
118
124
|
* A `where in` query can be built by using the `in` operator and an array
|
|
119
125
|
* of values. The values in the array can also be subqueries or raw
|
|
120
|
-
*
|
|
126
|
+
* {@link sql} expressions.
|
|
121
127
|
*
|
|
122
128
|
* ```ts
|
|
123
129
|
* const persons = await db
|
|
@@ -133,15 +139,17 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
133
139
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
134
140
|
* ```
|
|
135
141
|
*
|
|
136
|
-
* If everything else fails, you can always
|
|
142
|
+
* If everything else fails, you can always use the {@link sql} tag
|
|
137
143
|
* as any of the arguments, including the operator:
|
|
138
144
|
*
|
|
139
145
|
* ```ts
|
|
146
|
+
* import { sql } from 'kysely'
|
|
147
|
+
*
|
|
140
148
|
* const persons = await db
|
|
141
149
|
* .selectFrom('person')
|
|
142
150
|
* .selectAll()
|
|
143
151
|
* .where(
|
|
144
|
-
*
|
|
152
|
+
* sql`coalesce(first_name, last_name)`,
|
|
145
153
|
* 'like',
|
|
146
154
|
* '%' + name + '%',
|
|
147
155
|
* )
|
|
@@ -176,24 +184,25 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
176
184
|
* ```
|
|
177
185
|
*
|
|
178
186
|
* 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.
|
|
187
|
+
* (except for the raw {@link sql} expressions). By default kysely only
|
|
188
|
+
* allows you to refer to columns that exist in the database **and**
|
|
189
|
+
* can be referred to in the current query and context.
|
|
182
190
|
*
|
|
183
191
|
* Sometimes you may want to refer to columns that come from the user
|
|
184
192
|
* input and thus are not available at compile time.
|
|
185
193
|
*
|
|
186
|
-
* You have two options,
|
|
194
|
+
* You have two options, the {@link sql} tag or `db.dynamic`. The example below
|
|
187
195
|
* uses both:
|
|
188
196
|
*
|
|
189
197
|
* ```ts
|
|
198
|
+
* import { sql } from 'kysely'
|
|
190
199
|
* const { ref } = db.dynamic
|
|
191
200
|
*
|
|
192
201
|
* const persons = await db
|
|
193
202
|
* .selectFrom('person')
|
|
194
203
|
* .selectAll()
|
|
195
204
|
* .where(ref(columnFromUserInput), '=', 1)
|
|
196
|
-
* .orWhere(
|
|
205
|
+
* .orWhere(sql.id(columnFromUserInput), '=', 2)
|
|
197
206
|
* .execute()
|
|
198
207
|
* ```
|
|
199
208
|
*/
|
|
@@ -327,13 +336,14 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
327
336
|
/**
|
|
328
337
|
* Adds a `where exists` clause to the query.
|
|
329
338
|
*
|
|
330
|
-
* You can either use a subquery or a raw
|
|
339
|
+
* You can either use a subquery or a raw {@link sql} snippet.
|
|
331
340
|
*
|
|
332
341
|
* ### Examples
|
|
333
342
|
*
|
|
334
343
|
* The query below selets all persons that own a pet named Catto:
|
|
335
344
|
*
|
|
336
345
|
* ```ts
|
|
346
|
+
* const petName = 'Catto'
|
|
337
347
|
* const persons = await db
|
|
338
348
|
* .selectFrom('person')
|
|
339
349
|
* .selectAll()
|
|
@@ -341,7 +351,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
341
351
|
* .selectFrom('pet')
|
|
342
352
|
* .select('pet.id')
|
|
343
353
|
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
344
|
-
* .where('pet.name', '=',
|
|
354
|
+
* .where('pet.name', '=', petName)
|
|
345
355
|
* )
|
|
346
356
|
* .execute()
|
|
347
357
|
* ```
|
|
@@ -358,16 +368,16 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
358
368
|
* )
|
|
359
369
|
* ```
|
|
360
370
|
*
|
|
361
|
-
* The same query as in the previous example but with using raw:
|
|
371
|
+
* The same query as in the previous example but with using raw {@link sql}:
|
|
362
372
|
*
|
|
363
373
|
* ```ts
|
|
374
|
+
* import { sql } from 'kysely'
|
|
375
|
+
*
|
|
376
|
+
* const petName = 'Catto'
|
|
364
377
|
* db.selectFrom('person')
|
|
365
378
|
* .selectAll()
|
|
366
379
|
* .whereExists(
|
|
367
|
-
*
|
|
368
|
-
* '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
|
|
369
|
-
* ['Catto']
|
|
370
|
-
* )
|
|
380
|
+
* sql`(select pet.id from pet where person.id = pet.owner_id and pet.name = ${petName})`
|
|
371
381
|
* )
|
|
372
382
|
* ```
|
|
373
383
|
*
|
|
@@ -526,8 +536,8 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
526
536
|
* Sets the values to update for an {@link Kysely.updateTable | update} query.
|
|
527
537
|
*
|
|
528
538
|
* 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
|
-
*
|
|
539
|
+
* values to update. In addition to the column's type, the values can be
|
|
540
|
+
* raw {@link sql} snippets or select queries.
|
|
531
541
|
*
|
|
532
542
|
* The return value of an update query is an instance of {@link UpdateResult}.
|
|
533
543
|
* You can use the {@link returning} method on supported databases to get out
|
|
@@ -580,16 +590,18 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
580
590
|
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
|
|
581
591
|
* ```
|
|
582
592
|
*
|
|
583
|
-
* In addition to primitives, the values can also be
|
|
593
|
+
* In addition to primitives, the values can also be raw sql expressions or
|
|
584
594
|
* select queries:
|
|
585
595
|
*
|
|
586
596
|
* ```ts
|
|
597
|
+
* import { sql } from 'kysely'
|
|
598
|
+
*
|
|
587
599
|
* const result = await db
|
|
588
600
|
* .updateTable('person')
|
|
589
601
|
* .set({
|
|
590
602
|
* first_name: 'Jennifer',
|
|
591
|
-
* last_name:
|
|
592
|
-
* age: db.selectFrom('person').select(
|
|
603
|
+
* last_name: sql`${'Ani'} || ${'ston'}`,
|
|
604
|
+
* age: db.selectFrom('person').select(sql`avg(age)`),
|
|
593
605
|
* })
|
|
594
606
|
* .where('id', '=', 1)
|
|
595
607
|
* .executeTakeFirst()
|
|
@@ -651,6 +663,8 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
651
663
|
* Return arbitrary expressions:
|
|
652
664
|
*
|
|
653
665
|
* ```ts
|
|
666
|
+
* import { sql } from 'kysely'
|
|
667
|
+
*
|
|
654
668
|
* const { id, full_name, first_pet_id } = await db
|
|
655
669
|
* .insertInto('person')
|
|
656
670
|
* .values({
|
|
@@ -659,7 +673,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
659
673
|
* })
|
|
660
674
|
* .returning([
|
|
661
675
|
* 'id as id',
|
|
662
|
-
*
|
|
676
|
+
* sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
|
|
663
677
|
* (qb) => qb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
|
|
664
678
|
* ])
|
|
665
679
|
* .executeTakeFirst()
|
|
@@ -770,5 +784,4 @@ export interface UpdateQueryBuilderProps {
|
|
|
770
784
|
readonly queryId: QueryId;
|
|
771
785
|
readonly queryNode: UpdateQueryNode;
|
|
772
786
|
readonly executor: QueryExecutor;
|
|
773
|
-
readonly parseContext: ParseContext;
|
|
774
787
|
}
|
|
@@ -19,81 +19,81 @@ class UpdateQueryBuilder {
|
|
|
19
19
|
where(...args) {
|
|
20
20
|
return new UpdateQueryBuilder({
|
|
21
21
|
...this.#props,
|
|
22
|
-
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(
|
|
22
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(args)),
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
25
|
whereRef(lhs, op, rhs) {
|
|
26
26
|
return new UpdateQueryBuilder({
|
|
27
27
|
...this.#props,
|
|
28
|
-
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(
|
|
28
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(lhs, op, rhs)),
|
|
29
29
|
});
|
|
30
30
|
}
|
|
31
31
|
orWhere(...args) {
|
|
32
32
|
return new UpdateQueryBuilder({
|
|
33
33
|
...this.#props,
|
|
34
|
-
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(
|
|
34
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(args)),
|
|
35
35
|
});
|
|
36
36
|
}
|
|
37
37
|
orWhereRef(lhs, op, rhs) {
|
|
38
38
|
return new UpdateQueryBuilder({
|
|
39
39
|
...this.#props,
|
|
40
|
-
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(
|
|
40
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(lhs, op, rhs)),
|
|
41
41
|
});
|
|
42
42
|
}
|
|
43
43
|
whereExists(arg) {
|
|
44
44
|
return new UpdateQueryBuilder({
|
|
45
45
|
...this.#props,
|
|
46
|
-
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(
|
|
46
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(arg)),
|
|
47
47
|
});
|
|
48
48
|
}
|
|
49
49
|
whereNotExists(arg) {
|
|
50
50
|
return new UpdateQueryBuilder({
|
|
51
51
|
...this.#props,
|
|
52
|
-
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(
|
|
52
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(arg)),
|
|
53
53
|
});
|
|
54
54
|
}
|
|
55
55
|
orWhereExists(arg) {
|
|
56
56
|
return new UpdateQueryBuilder({
|
|
57
57
|
...this.#props,
|
|
58
|
-
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(
|
|
58
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(arg)),
|
|
59
59
|
});
|
|
60
60
|
}
|
|
61
61
|
orWhereNotExists(arg) {
|
|
62
62
|
return new UpdateQueryBuilder({
|
|
63
63
|
...this.#props,
|
|
64
|
-
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(
|
|
64
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(arg)),
|
|
65
65
|
});
|
|
66
66
|
}
|
|
67
67
|
innerJoin(...args) {
|
|
68
68
|
return new UpdateQueryBuilder({
|
|
69
69
|
...this.#props,
|
|
70
|
-
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(
|
|
70
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)('InnerJoin', args)),
|
|
71
71
|
});
|
|
72
72
|
}
|
|
73
73
|
leftJoin(...args) {
|
|
74
74
|
return new UpdateQueryBuilder({
|
|
75
75
|
...this.#props,
|
|
76
|
-
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(
|
|
76
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)('LeftJoin', args)),
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
79
|
rightJoin(...args) {
|
|
80
80
|
return new UpdateQueryBuilder({
|
|
81
81
|
...this.#props,
|
|
82
|
-
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(
|
|
82
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)('RightJoin', args)),
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
85
|
fullJoin(...args) {
|
|
86
86
|
return new UpdateQueryBuilder({
|
|
87
87
|
...this.#props,
|
|
88
|
-
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(
|
|
88
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)('FullJoin', args)),
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
91
|
/**
|
|
92
92
|
* Sets the values to update for an {@link Kysely.updateTable | update} query.
|
|
93
93
|
*
|
|
94
94
|
* This method takes an object whose keys are column names and values are
|
|
95
|
-
* values to update. In addition to the column's type, the values can be
|
|
96
|
-
*
|
|
95
|
+
* values to update. In addition to the column's type, the values can be
|
|
96
|
+
* raw {@link sql} snippets or select queries.
|
|
97
97
|
*
|
|
98
98
|
* The return value of an update query is an instance of {@link UpdateResult}.
|
|
99
99
|
* You can use the {@link returning} method on supported databases to get out
|
|
@@ -146,16 +146,18 @@ class UpdateQueryBuilder {
|
|
|
146
146
|
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
|
|
147
147
|
* ```
|
|
148
148
|
*
|
|
149
|
-
* In addition to primitives, the values can also be
|
|
149
|
+
* In addition to primitives, the values can also be raw sql expressions or
|
|
150
150
|
* select queries:
|
|
151
151
|
*
|
|
152
152
|
* ```ts
|
|
153
|
+
* import { sql } from 'kysely'
|
|
154
|
+
*
|
|
153
155
|
* const result = await db
|
|
154
156
|
* .updateTable('person')
|
|
155
157
|
* .set({
|
|
156
158
|
* first_name: 'Jennifer',
|
|
157
|
-
* last_name:
|
|
158
|
-
* age: db.selectFrom('person').select(
|
|
159
|
+
* last_name: sql`${'Ani'} || ${'ston'}`,
|
|
160
|
+
* age: db.selectFrom('person').select(sql`avg(age)`),
|
|
159
161
|
* })
|
|
160
162
|
* .where('id', '=', 1)
|
|
161
163
|
* .executeTakeFirst()
|
|
@@ -176,13 +178,13 @@ class UpdateQueryBuilder {
|
|
|
176
178
|
set(row) {
|
|
177
179
|
return new UpdateQueryBuilder({
|
|
178
180
|
...this.#props,
|
|
179
|
-
queryNode: update_query_node_js_1.UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, (0, update_set_parser_js_1.parseUpdateObject)(
|
|
181
|
+
queryNode: update_query_node_js_1.UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, (0, update_set_parser_js_1.parseUpdateObject)(row)),
|
|
180
182
|
});
|
|
181
183
|
}
|
|
182
184
|
returning(selection) {
|
|
183
185
|
return new UpdateQueryBuilder({
|
|
184
186
|
...this.#props,
|
|
185
|
-
queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(
|
|
187
|
+
queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(selection)),
|
|
186
188
|
});
|
|
187
189
|
}
|
|
188
190
|
returningAll() {
|
|
@@ -293,7 +295,7 @@ class UpdateQueryBuilder {
|
|
|
293
295
|
const compildQuery = this.compile();
|
|
294
296
|
const query = compildQuery.query;
|
|
295
297
|
const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
|
|
296
|
-
if (this.#props.
|
|
298
|
+
if (this.#props.executor.adapter.supportsReturning && query.returning) {
|
|
297
299
|
return result.rows;
|
|
298
300
|
}
|
|
299
301
|
else {
|
|
@@ -26,7 +26,13 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
26
26
|
* ```
|
|
27
27
|
*
|
|
28
28
|
* Operator can be any supported operator or if the typings don't support it
|
|
29
|
-
* you can always use
|
|
29
|
+
* you can always use
|
|
30
|
+
*
|
|
31
|
+
* ```ts
|
|
32
|
+
* sql`your operator`
|
|
33
|
+
* ```
|
|
34
|
+
*
|
|
35
|
+
* The next example uses the `>` operator:
|
|
30
36
|
*
|
|
31
37
|
* ```ts
|
|
32
38
|
* const persons = await db
|
|
@@ -42,8 +48,8 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
42
48
|
* select * from "person" where "id" > $1
|
|
43
49
|
* ```
|
|
44
50
|
*
|
|
45
|
-
*
|
|
46
|
-
* conditional
|
|
51
|
+
* `where` methods don't change the type of the query. You can add
|
|
52
|
+
* conditional statements easily by doing something like this:
|
|
47
53
|
*
|
|
48
54
|
* ```ts
|
|
49
55
|
* let query = db
|
|
@@ -51,6 +57,8 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
51
57
|
* .selectAll()
|
|
52
58
|
*
|
|
53
59
|
* if (firstName) {
|
|
60
|
+
* // The query builder is immutable. Remember to reassign
|
|
61
|
+
* // the result back to the query variable.
|
|
54
62
|
* query = query.where('first_name', '=', firstName)
|
|
55
63
|
* }
|
|
56
64
|
*
|
|
@@ -58,8 +66,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
58
66
|
* ```
|
|
59
67
|
*
|
|
60
68
|
* This is true for basically all methods execpt the `select` and
|
|
61
|
-
* `returning
|
|
62
|
-
* query.
|
|
69
|
+
* `returning`, that __do__ change the return type of the query.
|
|
63
70
|
*
|
|
64
71
|
* Both the first and third argument can also be subqueries.
|
|
65
72
|
* A subquery is defined by passing a function and calling
|
|
@@ -96,7 +103,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
96
103
|
*
|
|
97
104
|
* A `where in` query can be built by using the `in` operator and an array
|
|
98
105
|
* of values. The values in the array can also be subqueries or raw
|
|
99
|
-
*
|
|
106
|
+
* {@link sql} expressions.
|
|
100
107
|
*
|
|
101
108
|
* ```ts
|
|
102
109
|
* const persons = await db
|
|
@@ -112,15 +119,17 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
112
119
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
113
120
|
* ```
|
|
114
121
|
*
|
|
115
|
-
* If everything else fails, you can always
|
|
122
|
+
* If everything else fails, you can always use the {@link sql} tag
|
|
116
123
|
* as any of the arguments, including the operator:
|
|
117
124
|
*
|
|
118
125
|
* ```ts
|
|
126
|
+
* import { sql } from 'kysely'
|
|
127
|
+
*
|
|
119
128
|
* const persons = await db
|
|
120
129
|
* .selectFrom('person')
|
|
121
130
|
* .selectAll()
|
|
122
131
|
* .where(
|
|
123
|
-
*
|
|
132
|
+
* sql`coalesce(first_name, last_name)`,
|
|
124
133
|
* 'like',
|
|
125
134
|
* '%' + name + '%',
|
|
126
135
|
* )
|
|
@@ -155,24 +164,25 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
155
164
|
* ```
|
|
156
165
|
*
|
|
157
166
|
* In all examples above the columns were known at compile time
|
|
158
|
-
* (except for the
|
|
159
|
-
* you to refer to columns that exist in the database **and**
|
|
160
|
-
* referred to in the current query and context.
|
|
167
|
+
* (except for the raw {@link sql} expressions). By default kysely only
|
|
168
|
+
* allows you to refer to columns that exist in the database **and**
|
|
169
|
+
* can be referred to in the current query and context.
|
|
161
170
|
*
|
|
162
171
|
* Sometimes you may want to refer to columns that come from the user
|
|
163
172
|
* input and thus are not available at compile time.
|
|
164
173
|
*
|
|
165
|
-
* You have two options,
|
|
174
|
+
* You have two options, the {@link sql} tag or `db.dynamic`. The example below
|
|
166
175
|
* uses both:
|
|
167
176
|
*
|
|
168
177
|
* ```ts
|
|
178
|
+
* import { sql } from 'kysely'
|
|
169
179
|
* const { ref } = db.dynamic
|
|
170
180
|
*
|
|
171
181
|
* const persons = await db
|
|
172
182
|
* .selectFrom('person')
|
|
173
183
|
* .selectAll()
|
|
174
184
|
* .where(ref(columnFromUserInput), '=', 1)
|
|
175
|
-
* .orWhere(
|
|
185
|
+
* .orWhere(sql.id(columnFromUserInput), '=', 2)
|
|
176
186
|
* .execute()
|
|
177
187
|
* ```
|
|
178
188
|
*/
|
|
@@ -306,13 +316,14 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
306
316
|
/**
|
|
307
317
|
* Adds a `where exists` clause to the query.
|
|
308
318
|
*
|
|
309
|
-
* You can either use a subquery or a raw
|
|
319
|
+
* You can either use a subquery or a raw {@link sql} snippet.
|
|
310
320
|
*
|
|
311
321
|
* ### Examples
|
|
312
322
|
*
|
|
313
323
|
* The query below selets all persons that own a pet named Catto:
|
|
314
324
|
*
|
|
315
325
|
* ```ts
|
|
326
|
+
* const petName = 'Catto'
|
|
316
327
|
* const persons = await db
|
|
317
328
|
* .selectFrom('person')
|
|
318
329
|
* .selectAll()
|
|
@@ -320,7 +331,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
320
331
|
* .selectFrom('pet')
|
|
321
332
|
* .select('pet.id')
|
|
322
333
|
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
323
|
-
* .where('pet.name', '=',
|
|
334
|
+
* .where('pet.name', '=', petName)
|
|
324
335
|
* )
|
|
325
336
|
* .execute()
|
|
326
337
|
* ```
|
|
@@ -337,16 +348,16 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
337
348
|
* )
|
|
338
349
|
* ```
|
|
339
350
|
*
|
|
340
|
-
* The same query as in the previous example but with using raw:
|
|
351
|
+
* The same query as in the previous example but with using raw {@link sql}:
|
|
341
352
|
*
|
|
342
353
|
* ```ts
|
|
354
|
+
* import { sql } from 'kysely'
|
|
355
|
+
*
|
|
356
|
+
* const petName = 'Catto'
|
|
343
357
|
* db.selectFrom('person')
|
|
344
358
|
* .selectAll()
|
|
345
359
|
* .whereExists(
|
|
346
|
-
*
|
|
347
|
-
* '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
|
|
348
|
-
* ['Catto']
|
|
349
|
-
* )
|
|
360
|
+
* sql`(select pet.id from pet where person.id = pet.owner_id and pet.name = ${petName})`
|
|
350
361
|
* )
|
|
351
362
|
* ```
|
|
352
363
|
*
|
|
@@ -293,7 +293,7 @@ class DefaultQueryCompiler extends operation_node_visitor_js_1.OperationNodeVisi
|
|
|
293
293
|
this.visitNode(node.on);
|
|
294
294
|
}
|
|
295
295
|
visitRaw(node) {
|
|
296
|
-
const { sqlFragments, params } = node;
|
|
296
|
+
const { sqlFragments, parameters: params } = node;
|
|
297
297
|
for (let i = 0; i < sqlFragments.length; ++i) {
|
|
298
298
|
this.append(sqlFragments[i]);
|
|
299
299
|
if (params.length > i) {
|