kysely 0.11.1 → 0.12.0
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 +1 -1
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -2
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -6
- package/dist/cjs/dialect/postgres/postgres-query-compiler.d.ts +3 -0
- package/dist/cjs/dialect/postgres/postgres-query-compiler.js +9 -1
- package/dist/cjs/dialect/sqlite/sqlite-adapter.js +6 -2
- package/dist/cjs/dialect/sqlite/sqlite-driver.js +7 -7
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.d.ts +2 -2
- package/dist/cjs/dialect/sqlite/sqlite-query-compiler.js +6 -6
- package/dist/cjs/driver/runtime-driver.js +1 -1
- package/dist/cjs/dynamic/dynamic-reference-builder.d.ts +1 -0
- package/dist/cjs/dynamic/dynamic-reference-builder.js +9 -1
- package/dist/cjs/dynamic/dynamic.d.ts +6 -7
- package/dist/cjs/dynamic/dynamic.js +6 -7
- package/dist/cjs/index.d.ts +51 -33
- package/dist/cjs/index.js +48 -30
- package/dist/cjs/kysely.d.ts +39 -15
- package/dist/cjs/kysely.js +32 -9
- package/dist/cjs/migration/migration.d.ts +2 -2
- package/dist/cjs/operation-node/alias-node.d.ts +1 -1
- package/dist/cjs/operation-node/create-table-node.d.ts +6 -2
- package/dist/cjs/operation-node/create-table-node.js +6 -6
- package/dist/cjs/operation-node/create-view-node.d.ts +1 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +4 -4
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +11 -1
- package/dist/cjs/operation-node/operation-node-utils.d.ts +1 -1
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/query-node.d.ts +0 -2
- package/dist/cjs/operation-node/query-node.js +0 -10
- package/dist/cjs/operation-node/values-node.d.ts +15 -0
- package/dist/cjs/operation-node/values-node.js +18 -0
- package/dist/cjs/parser/complex-expression-parser.d.ts +9 -0
- package/dist/cjs/parser/complex-expression-parser.js +25 -0
- package/dist/cjs/parser/filter-parser.d.ts +13 -3
- package/dist/cjs/parser/filter-parser.js +56 -62
- package/dist/cjs/parser/insert-values-parser.d.ts +7 -10
- package/dist/cjs/parser/insert-values-parser.js +31 -39
- package/dist/cjs/parser/order-by-parser.d.ts +1 -1
- package/dist/cjs/parser/parse-context.d.ts +8 -8
- package/dist/cjs/parser/parse-context.js +10 -10
- package/dist/cjs/parser/reference-parser.d.ts +8 -7
- package/dist/cjs/parser/reference-parser.js +8 -17
- package/dist/cjs/parser/returning-parser.d.ts +1 -5
- package/dist/cjs/parser/select-parser.d.ts +12 -14
- package/dist/cjs/parser/select-parser.js +5 -9
- package/dist/cjs/parser/table-parser.d.ts +9 -11
- package/dist/cjs/parser/table-parser.js +2 -8
- package/dist/cjs/parser/union-parser.d.ts +2 -2
- package/dist/cjs/parser/union-parser.js +1 -6
- package/dist/cjs/parser/update-set-parser.d.ts +2 -8
- package/dist/cjs/parser/update-set-parser.js +6 -26
- package/dist/cjs/parser/value-parser.d.ts +9 -6
- package/dist/cjs/parser/value-parser.js +7 -30
- package/dist/cjs/parser/with-parser.d.ts +6 -3
- package/dist/cjs/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
- package/dist/cjs/query-builder/delete-query-builder.d.ts +102 -0
- package/dist/cjs/query-builder/delete-query-builder.js +185 -0
- package/dist/cjs/query-builder/expression-builder.d.ts +8 -6
- package/dist/cjs/query-builder/expression-builder.js +3 -3
- package/dist/cjs/query-builder/function-builder.d.ts +2 -1
- package/dist/cjs/query-builder/function-builder.js +2 -1
- package/dist/cjs/query-builder/having-interface.d.ts +49 -0
- package/dist/cjs/query-builder/having-interface.js +2 -0
- package/dist/cjs/query-builder/insert-query-builder.d.ts +439 -0
- package/dist/cjs/query-builder/insert-query-builder.js +256 -0
- package/dist/cjs/query-builder/insert-result.d.ts +3 -2
- package/dist/cjs/query-builder/insert-result.js +3 -2
- package/dist/cjs/query-builder/join-builder.d.ts +22 -20
- package/dist/cjs/query-builder/join-builder.js +12 -12
- package/dist/cjs/query-builder/join-interface.d.ts +133 -0
- package/dist/cjs/query-builder/join-interface.js +2 -0
- package/dist/cjs/query-builder/no-result-error.d.ts +9 -0
- package/dist/cjs/query-builder/no-result-error.js +14 -0
- package/dist/cjs/query-builder/returning-interface.d.ts +73 -0
- package/dist/cjs/query-builder/returning-interface.js +2 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +711 -0
- package/dist/cjs/query-builder/select-query-builder.js +571 -0
- package/dist/cjs/query-builder/update-query-builder.d.ts +190 -0
- package/dist/cjs/query-builder/update-query-builder.js +279 -0
- package/dist/cjs/query-builder/where-interface.d.ts +381 -0
- package/dist/cjs/query-builder/where-interface.js +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/cjs/query-compiler/default-query-compiler.js +22 -5
- package/dist/cjs/query-creator.d.ts +42 -40
- package/dist/cjs/query-creator.js +33 -28
- package/dist/cjs/query-executor/query-executor.d.ts +1 -1
- package/dist/cjs/query-executor/query-executor.js +1 -1
- package/dist/cjs/raw-builder/raw-builder.d.ts +2 -0
- package/dist/cjs/raw-builder/raw-builder.js +6 -0
- package/dist/cjs/schema/alter-table-builder.d.ts +2 -2
- package/dist/cjs/schema/column-definition-builder.d.ts +27 -20
- package/dist/cjs/schema/create-index-builder.d.ts +2 -1
- package/dist/cjs/schema/create-index-builder.js +2 -1
- package/dist/cjs/schema/create-table-builder.d.ts +26 -9
- package/dist/cjs/schema/create-table-builder.js +42 -9
- package/dist/cjs/schema/create-view-builder.d.ts +17 -3
- package/dist/cjs/schema/create-view-builder.js +25 -16
- package/dist/cjs/schema/schema.d.ts +18 -11
- package/dist/cjs/schema/schema.js +18 -11
- package/dist/cjs/util/dynamic-import.js +1 -1
- package/dist/cjs/util/log.d.ts +11 -8
- package/dist/cjs/util/log.js +25 -12
- package/dist/cjs/util/type-utils.d.ts +7 -7
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -2
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -6
- package/dist/esm/dialect/postgres/postgres-query-compiler.d.ts +3 -0
- package/dist/esm/dialect/postgres/postgres-query-compiler.js +9 -1
- package/dist/esm/dialect/sqlite/sqlite-adapter.js +6 -2
- package/dist/esm/dialect/sqlite/sqlite-driver.js +7 -7
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.d.ts +2 -2
- package/dist/esm/dialect/sqlite/sqlite-query-compiler.js +6 -6
- package/dist/esm/driver/runtime-driver.js +1 -1
- package/dist/esm/dynamic/dynamic-reference-builder.d.ts +1 -0
- package/dist/esm/dynamic/dynamic-reference-builder.js +7 -0
- package/dist/esm/dynamic/dynamic.d.ts +6 -7
- package/dist/esm/dynamic/dynamic.js +6 -7
- package/dist/esm/index.d.ts +51 -33
- package/dist/esm/index.js +48 -30
- package/dist/esm/kysely.d.ts +39 -15
- package/dist/esm/kysely.js +32 -9
- package/dist/esm/migration/migration.d.ts +2 -2
- package/dist/esm/operation-node/alias-node.d.ts +1 -1
- package/dist/esm/operation-node/create-table-node.d.ts +6 -2
- package/dist/esm/operation-node/create-table-node.js +6 -6
- package/dist/esm/operation-node/create-view-node.d.ts +1 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +4 -4
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +11 -1
- package/dist/esm/operation-node/operation-node-utils.d.ts +1 -1
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +1 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/query-node.d.ts +0 -2
- package/dist/esm/operation-node/query-node.js +0 -10
- package/dist/esm/operation-node/values-node.d.ts +15 -0
- package/dist/esm/operation-node/values-node.js +15 -0
- package/dist/esm/parser/complex-expression-parser.d.ts +9 -0
- package/dist/esm/parser/complex-expression-parser.js +20 -0
- package/dist/esm/parser/filter-parser.d.ts +13 -3
- package/dist/esm/parser/filter-parser.js +55 -62
- package/dist/esm/parser/insert-values-parser.d.ts +7 -10
- package/dist/esm/parser/insert-values-parser.js +31 -38
- package/dist/esm/parser/order-by-parser.d.ts +1 -1
- package/dist/esm/parser/parse-context.d.ts +8 -8
- package/dist/esm/parser/parse-context.js +10 -10
- package/dist/esm/parser/reference-parser.d.ts +8 -7
- package/dist/esm/parser/reference-parser.js +9 -18
- package/dist/esm/parser/returning-parser.d.ts +1 -5
- package/dist/esm/parser/select-parser.d.ts +12 -14
- package/dist/esm/parser/select-parser.js +6 -10
- package/dist/esm/parser/table-parser.d.ts +9 -11
- package/dist/esm/parser/table-parser.js +3 -9
- package/dist/esm/parser/union-parser.d.ts +2 -2
- package/dist/esm/parser/union-parser.js +1 -6
- package/dist/esm/parser/update-set-parser.d.ts +2 -8
- package/dist/esm/parser/update-set-parser.js +5 -24
- package/dist/esm/parser/value-parser.d.ts +9 -6
- package/dist/esm/parser/value-parser.js +8 -31
- package/dist/esm/parser/with-parser.d.ts +6 -3
- package/dist/esm/plugin/immediate-value.ts/immediate-value-plugin.js +2 -2
- package/dist/esm/query-builder/delete-query-builder.d.ts +102 -0
- package/dist/esm/query-builder/delete-query-builder.js +181 -0
- package/dist/esm/query-builder/expression-builder.d.ts +8 -6
- package/dist/esm/query-builder/expression-builder.js +3 -3
- package/dist/esm/query-builder/function-builder.d.ts +2 -1
- package/dist/esm/query-builder/function-builder.js +2 -1
- package/dist/esm/query-builder/having-interface.d.ts +49 -0
- package/dist/esm/query-builder/having-interface.js +1 -0
- package/dist/esm/query-builder/insert-query-builder.d.ts +439 -0
- package/dist/esm/query-builder/insert-query-builder.js +252 -0
- package/dist/esm/query-builder/insert-result.d.ts +3 -2
- package/dist/esm/query-builder/insert-result.js +3 -2
- package/dist/esm/query-builder/join-builder.d.ts +22 -20
- package/dist/esm/query-builder/join-builder.js +12 -12
- package/dist/esm/query-builder/join-interface.d.ts +133 -0
- package/dist/esm/query-builder/join-interface.js +1 -0
- package/dist/esm/query-builder/no-result-error.d.ts +9 -0
- package/dist/esm/query-builder/no-result-error.js +10 -0
- package/dist/esm/query-builder/returning-interface.d.ts +73 -0
- package/dist/esm/query-builder/returning-interface.js +1 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +711 -0
- package/dist/esm/query-builder/select-query-builder.js +566 -0
- package/dist/esm/query-builder/update-query-builder.d.ts +190 -0
- package/dist/esm/query-builder/update-query-builder.js +275 -0
- package/dist/esm/query-builder/where-interface.d.ts +381 -0
- package/dist/esm/query-builder/where-interface.js +1 -0
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -0
- package/dist/esm/query-compiler/default-query-compiler.js +22 -5
- package/dist/esm/query-creator.d.ts +42 -40
- package/dist/esm/query-creator.js +33 -28
- package/dist/esm/query-executor/query-executor.d.ts +1 -1
- package/dist/esm/query-executor/query-executor.js +1 -1
- package/dist/esm/raw-builder/raw-builder.d.ts +2 -0
- package/dist/esm/raw-builder/raw-builder.js +6 -0
- package/dist/esm/schema/alter-table-builder.d.ts +2 -2
- package/dist/esm/schema/column-definition-builder.d.ts +27 -20
- package/dist/esm/schema/create-index-builder.d.ts +2 -1
- package/dist/esm/schema/create-index-builder.js +2 -1
- package/dist/esm/schema/create-table-builder.d.ts +26 -9
- package/dist/esm/schema/create-table-builder.js +43 -10
- package/dist/esm/schema/create-view-builder.d.ts +17 -3
- package/dist/esm/schema/create-view-builder.js +25 -16
- package/dist/esm/schema/schema.d.ts +18 -11
- package/dist/esm/schema/schema.js +18 -11
- package/dist/esm/util/dynamic-import.js +1 -1
- package/dist/esm/util/log.d.ts +11 -8
- package/dist/esm/util/log.js +25 -12
- package/dist/esm/util/type-utils.d.ts +7 -7
- package/package.json +3 -3
- package/dist/cjs/query-builder/query-builder.d.ts +0 -1707
- package/dist/cjs/query-builder/query-builder.js +0 -1067
- package/dist/esm/query-builder/query-builder.d.ts +0 -1707
- package/dist/esm/query-builder/query-builder.js +0 -1061
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
2
|
+
import { CompiledQuery } from '../query-compiler/compiled-query.js';
|
|
3
|
+
import { JoinCallbackExpression, JoinReferenceExpression } from '../parser/join-parser.js';
|
|
4
|
+
import { TableExpression, TableExpressionDatabase, TableExpressionTables, LeftJoinTableExpressionDatabase, RightJoinTableExpressionDatabase, FullJoinTableExpressionDatabase } from '../parser/table-parser.js';
|
|
5
|
+
import { SelectExpression } from '../parser/select-parser.js';
|
|
6
|
+
import { ExistsExpression, FilterOperator, FilterValueExpressionOrList, WhereGrouper } from '../parser/filter-parser.js';
|
|
7
|
+
import { ReturningRow } from '../parser/returning-parser.js';
|
|
8
|
+
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
9
|
+
import { AnyRawBuilder, SingleResultType } from '../util/type-utils.js';
|
|
10
|
+
import { UpdateQueryNode } from '../operation-node/update-query-node.js';
|
|
11
|
+
import { MutationObject } from '../parser/update-set-parser.js';
|
|
12
|
+
import { Compilable } from '../util/compilable.js';
|
|
13
|
+
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
14
|
+
import { QueryId } from '../util/query-id.js';
|
|
15
|
+
import { ParseContext } from '../parser/parse-context.js';
|
|
16
|
+
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
17
|
+
import { WhereInterface } from './where-interface.js';
|
|
18
|
+
import { JoinInterface } from './join-interface.js';
|
|
19
|
+
import { ReturningInterface } from './returning-interface.js';
|
|
20
|
+
import { NoResultErrorConstructor } from './no-result-error.js';
|
|
21
|
+
export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements WhereInterface<DB, TB>, JoinInterface<DB, TB>, ReturningInterface<DB, TB, O>, OperationNodeSource, Compilable {
|
|
22
|
+
#private;
|
|
23
|
+
constructor(props: UpdateQueryBuilderProps);
|
|
24
|
+
where<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): UpdateQueryBuilder<DB, TB, O>;
|
|
25
|
+
where(grouper: WhereGrouper<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
|
|
26
|
+
where(raw: AnyRawBuilder): UpdateQueryBuilder<DB, TB, O>;
|
|
27
|
+
whereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
|
|
28
|
+
orWhere<RE extends ReferenceExpression<DB, TB>>(lhs: RE, op: FilterOperator, rhs: FilterValueExpressionOrList<DB, TB, RE>): UpdateQueryBuilder<DB, TB, O>;
|
|
29
|
+
orWhere(grouper: WhereGrouper<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
|
|
30
|
+
orWhere(raw: AnyRawBuilder): UpdateQueryBuilder<DB, TB, O>;
|
|
31
|
+
orWhereRef(lhs: ReferenceExpression<DB, TB>, op: FilterOperator, rhs: ReferenceExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
|
|
32
|
+
whereExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
|
|
33
|
+
whereNotExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
|
|
34
|
+
orWhereExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
|
|
35
|
+
orWhereNotExists(arg: ExistsExpression<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
|
|
36
|
+
innerJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
37
|
+
innerJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<TableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
38
|
+
leftJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
39
|
+
leftJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
40
|
+
rightJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
41
|
+
rightJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
42
|
+
fullJoin<TE extends TableExpression<DB, TB>, K1 extends JoinReferenceExpression<DB, TB, TE>, K2 extends JoinReferenceExpression<DB, TB, TE>>(table: TE, k1: K1, k2: K2): UpdateQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
43
|
+
fullJoin<TE extends TableExpression<DB, TB>, FN extends JoinCallbackExpression<DB, TB, TE>>(table: TE, callback: FN): UpdateQueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TableExpressionTables<DB, TB, TE>, O>;
|
|
44
|
+
/**
|
|
45
|
+
* Sets the values to update for an {@link Kysely.updateTable | update} query.
|
|
46
|
+
*
|
|
47
|
+
* This method takes an object whose keys are column names and values are
|
|
48
|
+
* values to update. In addition to the column's type, the values can be `raw`
|
|
49
|
+
* instances or select queries.
|
|
50
|
+
*
|
|
51
|
+
* The return value of an update query is an instance of {@link UpdateResult}.
|
|
52
|
+
* You can use the {@link ReturningInterface.returning | returning} method on
|
|
53
|
+
* supported databases to get out the updated rows.
|
|
54
|
+
*
|
|
55
|
+
* ### Examples
|
|
56
|
+
*
|
|
57
|
+
* Update a row in `person` table:
|
|
58
|
+
*
|
|
59
|
+
* ```ts
|
|
60
|
+
* const result = await db
|
|
61
|
+
* .updateTable('person')
|
|
62
|
+
* .set({
|
|
63
|
+
* first_name: 'Jennifer',
|
|
64
|
+
* last_name: 'Aniston'
|
|
65
|
+
* })
|
|
66
|
+
* .where('id', '=', 1)
|
|
67
|
+
* .executeTakeFirst()
|
|
68
|
+
*
|
|
69
|
+
* console.log(result.numUpdatedRows)
|
|
70
|
+
* ```
|
|
71
|
+
*
|
|
72
|
+
* The generated SQL (PostgreSQL):
|
|
73
|
+
*
|
|
74
|
+
* ```sql
|
|
75
|
+
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3
|
|
76
|
+
* ```
|
|
77
|
+
*
|
|
78
|
+
* On PostgreSQL you ca chain `returning` to the query to get
|
|
79
|
+
* the updated rows' columns (or any other expression) as the
|
|
80
|
+
* return value:
|
|
81
|
+
*
|
|
82
|
+
* ```ts
|
|
83
|
+
* const row = await db
|
|
84
|
+
* .updateTable('person')
|
|
85
|
+
* .set({
|
|
86
|
+
* first_name: 'Jennifer',
|
|
87
|
+
* last_name: 'Aniston'
|
|
88
|
+
* })
|
|
89
|
+
* .where('id', '=', 1)
|
|
90
|
+
* .returning('id')
|
|
91
|
+
* .executeTakeFirstOrThrow()
|
|
92
|
+
*
|
|
93
|
+
* row.id
|
|
94
|
+
* ```
|
|
95
|
+
*
|
|
96
|
+
* The generated SQL (PostgreSQL):
|
|
97
|
+
*
|
|
98
|
+
* ```sql
|
|
99
|
+
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
|
|
100
|
+
* ```
|
|
101
|
+
*
|
|
102
|
+
* In addition to primitives, the values can also be `raw` expressions or
|
|
103
|
+
* select queries:
|
|
104
|
+
*
|
|
105
|
+
* ```ts
|
|
106
|
+
* const result = await db
|
|
107
|
+
* .updateTable('person')
|
|
108
|
+
* .set({
|
|
109
|
+
* first_name: 'Jennifer',
|
|
110
|
+
* last_name: db.raw('? || ?', ['Ani', 'ston']),
|
|
111
|
+
* age: db.selectFrom('person').select(raw('avg(age)')),
|
|
112
|
+
* })
|
|
113
|
+
* .where('id', '=', 1)
|
|
114
|
+
* .executeTakeFirst()
|
|
115
|
+
*
|
|
116
|
+
* console.log(result.numUpdatedRows)
|
|
117
|
+
* ```
|
|
118
|
+
*
|
|
119
|
+
* The generated SQL (PostgreSQL):
|
|
120
|
+
*
|
|
121
|
+
* ```sql
|
|
122
|
+
* update "person" set
|
|
123
|
+
* "first_name" = $1,
|
|
124
|
+
* "last_name" = $2 || $3,
|
|
125
|
+
* "age" = (select avg(age) from "person")
|
|
126
|
+
* where "id" = $4
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
set(row: MutationObject<DB, TB>): UpdateQueryBuilder<DB, TB, O>;
|
|
130
|
+
returning<SE extends SelectExpression<DB, TB>>(selections: ReadonlyArray<SE>): UpdateQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
|
|
131
|
+
returning<SE extends SelectExpression<DB, TB>>(selection: SE): UpdateQueryBuilder<DB, TB, ReturningRow<DB, TB, O, SE>>;
|
|
132
|
+
returningAll(): UpdateQueryBuilder<DB, TB, DB[TB]>;
|
|
133
|
+
/**
|
|
134
|
+
* Simply calls the given function passing `this` as the only argument.
|
|
135
|
+
*
|
|
136
|
+
* This method can be useful when adding optional method calls:
|
|
137
|
+
*
|
|
138
|
+
* ### Examples
|
|
139
|
+
*
|
|
140
|
+
* ```ts
|
|
141
|
+
* db.updateTable('person')
|
|
142
|
+
* .set(values)
|
|
143
|
+
* .call((qb) => {
|
|
144
|
+
* if (something) {
|
|
145
|
+
* return qb.where('something', '=', something)
|
|
146
|
+
* } else {
|
|
147
|
+
* return qb.where('somethingElse', '=', somethingElse)
|
|
148
|
+
* }
|
|
149
|
+
* })
|
|
150
|
+
* .execute()
|
|
151
|
+
* ```
|
|
152
|
+
*/
|
|
153
|
+
call<T>(func: (qb: this) => T): T;
|
|
154
|
+
/**
|
|
155
|
+
* Change the output type of the query.
|
|
156
|
+
*
|
|
157
|
+
* You should only use this method as the last resort if the types
|
|
158
|
+
* don't support your use case.
|
|
159
|
+
*/
|
|
160
|
+
castTo<T>(): UpdateQueryBuilder<DB, TB, T>;
|
|
161
|
+
withPlugin(plugin: KyselyPlugin): UpdateQueryBuilder<DB, TB, O>;
|
|
162
|
+
toOperationNode(): UpdateQueryNode;
|
|
163
|
+
compile(): CompiledQuery;
|
|
164
|
+
/**
|
|
165
|
+
* Executes the query and returns an array of rows.
|
|
166
|
+
*
|
|
167
|
+
* Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
|
|
168
|
+
*/
|
|
169
|
+
execute(): Promise<O[]>;
|
|
170
|
+
/**
|
|
171
|
+
* Executes the query and returns the first result or undefined if
|
|
172
|
+
* the query returned no result.
|
|
173
|
+
*/
|
|
174
|
+
executeTakeFirst(): Promise<SingleResultType<O>>;
|
|
175
|
+
/**
|
|
176
|
+
* Executes the query and returns the first result or throws if
|
|
177
|
+
* the query returned no result.
|
|
178
|
+
*
|
|
179
|
+
* By default an instance of {@link NoResultError} is thrown, but you can
|
|
180
|
+
* provide a custom error class as the only argument to throw a different
|
|
181
|
+
* error.
|
|
182
|
+
*/
|
|
183
|
+
executeTakeFirstOrThrow(errorConstructor?: NoResultErrorConstructor): Promise<O>;
|
|
184
|
+
}
|
|
185
|
+
export interface UpdateQueryBuilderProps {
|
|
186
|
+
readonly queryId: QueryId;
|
|
187
|
+
readonly queryNode: UpdateQueryNode;
|
|
188
|
+
readonly executor: QueryExecutor;
|
|
189
|
+
readonly parseContext: ParseContext;
|
|
190
|
+
}
|
|
@@ -0,0 +1,279 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UpdateQueryBuilder = void 0;
|
|
4
|
+
const join_parser_js_1 = require("../parser/join-parser.js");
|
|
5
|
+
const select_parser_js_1 = require("../parser/select-parser.js");
|
|
6
|
+
const filter_parser_js_1 = require("../parser/filter-parser.js");
|
|
7
|
+
const query_node_js_1 = require("../operation-node/query-node.js");
|
|
8
|
+
const update_query_node_js_1 = require("../operation-node/update-query-node.js");
|
|
9
|
+
const update_set_parser_js_1 = require("../parser/update-set-parser.js");
|
|
10
|
+
const prevent_await_js_1 = require("../util/prevent-await.js");
|
|
11
|
+
const object_utils_js_1 = require("../util/object-utils.js");
|
|
12
|
+
const update_result_js_1 = require("./update-result.js");
|
|
13
|
+
const no_result_error_js_1 = require("./no-result-error.js");
|
|
14
|
+
class UpdateQueryBuilder {
|
|
15
|
+
#props;
|
|
16
|
+
constructor(props) {
|
|
17
|
+
this.#props = (0, object_utils_js_1.freeze)(props);
|
|
18
|
+
}
|
|
19
|
+
where(...args) {
|
|
20
|
+
return new UpdateQueryBuilder({
|
|
21
|
+
...this.#props,
|
|
22
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
whereRef(lhs, op, rhs) {
|
|
26
|
+
return new UpdateQueryBuilder({
|
|
27
|
+
...this.#props,
|
|
28
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
orWhere(...args) {
|
|
32
|
+
return new UpdateQueryBuilder({
|
|
33
|
+
...this.#props,
|
|
34
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseWhereFilter)(this.#props.parseContext, args)),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
orWhereRef(lhs, op, rhs) {
|
|
38
|
+
return new UpdateQueryBuilder({
|
|
39
|
+
...this.#props,
|
|
40
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseReferenceFilter)(this.#props.parseContext, lhs, op, rhs)),
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
whereExists(arg) {
|
|
44
|
+
return new UpdateQueryBuilder({
|
|
45
|
+
...this.#props,
|
|
46
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
whereNotExists(arg) {
|
|
50
|
+
return new UpdateQueryBuilder({
|
|
51
|
+
...this.#props,
|
|
52
|
+
queryNode: query_node_js_1.QueryNode.cloneWithWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
orWhereExists(arg) {
|
|
56
|
+
return new UpdateQueryBuilder({
|
|
57
|
+
...this.#props,
|
|
58
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseExistFilter)(this.#props.parseContext, arg)),
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
orWhereNotExists(arg) {
|
|
62
|
+
return new UpdateQueryBuilder({
|
|
63
|
+
...this.#props,
|
|
64
|
+
queryNode: query_node_js_1.QueryNode.cloneWithOrWhere(this.#props.queryNode, (0, filter_parser_js_1.parseNotExistFilter)(this.#props.parseContext, arg)),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
innerJoin(...args) {
|
|
68
|
+
return new UpdateQueryBuilder({
|
|
69
|
+
...this.#props,
|
|
70
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'InnerJoin', args)),
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
leftJoin(...args) {
|
|
74
|
+
return new UpdateQueryBuilder({
|
|
75
|
+
...this.#props,
|
|
76
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'LeftJoin', args)),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
rightJoin(...args) {
|
|
80
|
+
return new UpdateQueryBuilder({
|
|
81
|
+
...this.#props,
|
|
82
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'RightJoin', args)),
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
fullJoin(...args) {
|
|
86
|
+
return new UpdateQueryBuilder({
|
|
87
|
+
...this.#props,
|
|
88
|
+
queryNode: query_node_js_1.QueryNode.cloneWithJoin(this.#props.queryNode, (0, join_parser_js_1.parseJoin)(this.#props.parseContext, 'FullJoin', args)),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Sets the values to update for an {@link Kysely.updateTable | update} query.
|
|
93
|
+
*
|
|
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 `raw`
|
|
96
|
+
* instances or select queries.
|
|
97
|
+
*
|
|
98
|
+
* The return value of an update query is an instance of {@link UpdateResult}.
|
|
99
|
+
* You can use the {@link ReturningInterface.returning | returning} method on
|
|
100
|
+
* supported databases to get out the updated rows.
|
|
101
|
+
*
|
|
102
|
+
* ### Examples
|
|
103
|
+
*
|
|
104
|
+
* Update a row in `person` table:
|
|
105
|
+
*
|
|
106
|
+
* ```ts
|
|
107
|
+
* const result = await db
|
|
108
|
+
* .updateTable('person')
|
|
109
|
+
* .set({
|
|
110
|
+
* first_name: 'Jennifer',
|
|
111
|
+
* last_name: 'Aniston'
|
|
112
|
+
* })
|
|
113
|
+
* .where('id', '=', 1)
|
|
114
|
+
* .executeTakeFirst()
|
|
115
|
+
*
|
|
116
|
+
* console.log(result.numUpdatedRows)
|
|
117
|
+
* ```
|
|
118
|
+
*
|
|
119
|
+
* The generated SQL (PostgreSQL):
|
|
120
|
+
*
|
|
121
|
+
* ```sql
|
|
122
|
+
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3
|
|
123
|
+
* ```
|
|
124
|
+
*
|
|
125
|
+
* On PostgreSQL you ca chain `returning` to the query to get
|
|
126
|
+
* the updated rows' columns (or any other expression) as the
|
|
127
|
+
* return value:
|
|
128
|
+
*
|
|
129
|
+
* ```ts
|
|
130
|
+
* const row = await db
|
|
131
|
+
* .updateTable('person')
|
|
132
|
+
* .set({
|
|
133
|
+
* first_name: 'Jennifer',
|
|
134
|
+
* last_name: 'Aniston'
|
|
135
|
+
* })
|
|
136
|
+
* .where('id', '=', 1)
|
|
137
|
+
* .returning('id')
|
|
138
|
+
* .executeTakeFirstOrThrow()
|
|
139
|
+
*
|
|
140
|
+
* row.id
|
|
141
|
+
* ```
|
|
142
|
+
*
|
|
143
|
+
* The generated SQL (PostgreSQL):
|
|
144
|
+
*
|
|
145
|
+
* ```sql
|
|
146
|
+
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
|
|
147
|
+
* ```
|
|
148
|
+
*
|
|
149
|
+
* In addition to primitives, the values can also be `raw` expressions or
|
|
150
|
+
* select queries:
|
|
151
|
+
*
|
|
152
|
+
* ```ts
|
|
153
|
+
* const result = await db
|
|
154
|
+
* .updateTable('person')
|
|
155
|
+
* .set({
|
|
156
|
+
* first_name: 'Jennifer',
|
|
157
|
+
* last_name: db.raw('? || ?', ['Ani', 'ston']),
|
|
158
|
+
* age: db.selectFrom('person').select(raw('avg(age)')),
|
|
159
|
+
* })
|
|
160
|
+
* .where('id', '=', 1)
|
|
161
|
+
* .executeTakeFirst()
|
|
162
|
+
*
|
|
163
|
+
* console.log(result.numUpdatedRows)
|
|
164
|
+
* ```
|
|
165
|
+
*
|
|
166
|
+
* The generated SQL (PostgreSQL):
|
|
167
|
+
*
|
|
168
|
+
* ```sql
|
|
169
|
+
* update "person" set
|
|
170
|
+
* "first_name" = $1,
|
|
171
|
+
* "last_name" = $2 || $3,
|
|
172
|
+
* "age" = (select avg(age) from "person")
|
|
173
|
+
* where "id" = $4
|
|
174
|
+
* ```
|
|
175
|
+
*/
|
|
176
|
+
set(row) {
|
|
177
|
+
return new UpdateQueryBuilder({
|
|
178
|
+
...this.#props,
|
|
179
|
+
queryNode: update_query_node_js_1.UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, (0, update_set_parser_js_1.parseUpdateObject)(this.#props.parseContext, row)),
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
returning(selection) {
|
|
183
|
+
return new UpdateQueryBuilder({
|
|
184
|
+
...this.#props,
|
|
185
|
+
queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectExpressionOrList)(this.#props.parseContext, selection)),
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
returningAll() {
|
|
189
|
+
return new UpdateQueryBuilder({
|
|
190
|
+
...this.#props,
|
|
191
|
+
queryNode: query_node_js_1.QueryNode.cloneWithReturning(this.#props.queryNode, (0, select_parser_js_1.parseSelectAll)()),
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Simply calls the given function passing `this` as the only argument.
|
|
196
|
+
*
|
|
197
|
+
* This method can be useful when adding optional method calls:
|
|
198
|
+
*
|
|
199
|
+
* ### Examples
|
|
200
|
+
*
|
|
201
|
+
* ```ts
|
|
202
|
+
* db.updateTable('person')
|
|
203
|
+
* .set(values)
|
|
204
|
+
* .call((qb) => {
|
|
205
|
+
* if (something) {
|
|
206
|
+
* return qb.where('something', '=', something)
|
|
207
|
+
* } else {
|
|
208
|
+
* return qb.where('somethingElse', '=', somethingElse)
|
|
209
|
+
* }
|
|
210
|
+
* })
|
|
211
|
+
* .execute()
|
|
212
|
+
* ```
|
|
213
|
+
*/
|
|
214
|
+
call(func) {
|
|
215
|
+
return func(this);
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Change the output type of the query.
|
|
219
|
+
*
|
|
220
|
+
* You should only use this method as the last resort if the types
|
|
221
|
+
* don't support your use case.
|
|
222
|
+
*/
|
|
223
|
+
castTo() {
|
|
224
|
+
return new UpdateQueryBuilder(this.#props);
|
|
225
|
+
}
|
|
226
|
+
withPlugin(plugin) {
|
|
227
|
+
return new UpdateQueryBuilder({
|
|
228
|
+
...this.#props,
|
|
229
|
+
executor: this.#props.executor.withPlugin(plugin),
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
toOperationNode() {
|
|
233
|
+
return this.#props.executor.transformQuery(this.#props.queryNode, this.#props.queryId);
|
|
234
|
+
}
|
|
235
|
+
compile() {
|
|
236
|
+
return this.#props.executor.compileQuery(this.toOperationNode(), this.#props.queryId);
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Executes the query and returns an array of rows.
|
|
240
|
+
*
|
|
241
|
+
* Also see the {@link executeTakeFirst} and {@link executeTakeFirstOrThrow} methods.
|
|
242
|
+
*/
|
|
243
|
+
async execute() {
|
|
244
|
+
const compildQuery = this.compile();
|
|
245
|
+
const query = compildQuery.query;
|
|
246
|
+
const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
|
|
247
|
+
if (this.#props.parseContext.adapter.supportsReturning && query.returning) {
|
|
248
|
+
return result.rows;
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
return [new update_result_js_1.UpdateResult(result.numUpdatedOrDeletedRows)];
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Executes the query and returns the first result or undefined if
|
|
256
|
+
* the query returned no result.
|
|
257
|
+
*/
|
|
258
|
+
async executeTakeFirst() {
|
|
259
|
+
const [result] = await this.execute();
|
|
260
|
+
return result;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Executes the query and returns the first result or throws if
|
|
264
|
+
* the query returned no result.
|
|
265
|
+
*
|
|
266
|
+
* By default an instance of {@link NoResultError} is thrown, but you can
|
|
267
|
+
* provide a custom error class as the only argument to throw a different
|
|
268
|
+
* error.
|
|
269
|
+
*/
|
|
270
|
+
async executeTakeFirstOrThrow(errorConstructor = no_result_error_js_1.NoResultError) {
|
|
271
|
+
const result = await this.executeTakeFirst();
|
|
272
|
+
if (result === undefined) {
|
|
273
|
+
throw new errorConstructor(this.toOperationNode());
|
|
274
|
+
}
|
|
275
|
+
return result;
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
exports.UpdateQueryBuilder = UpdateQueryBuilder;
|
|
279
|
+
(0, prevent_await_js_1.preventAwait)(UpdateQueryBuilder, "don't await UpdateQueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");
|