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
|
@@ -7,6 +7,9 @@ import { preventAwait } from '../util/prevent-await.js';
|
|
|
7
7
|
import { freeze } from '../util/object-utils.js';
|
|
8
8
|
import { NoResultError } from './no-result-error.js';
|
|
9
9
|
import { DeleteResult } from './delete-result.js';
|
|
10
|
+
import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
|
|
11
|
+
import { LimitNode } from '../operation-node/limit-node.js';
|
|
12
|
+
import { parseOrderBy, } from '../parser/order-by-parser.js';
|
|
10
13
|
export class DeleteQueryBuilder {
|
|
11
14
|
#props;
|
|
12
15
|
constructor(props) {
|
|
@@ -15,79 +18,79 @@ export class DeleteQueryBuilder {
|
|
|
15
18
|
where(...args) {
|
|
16
19
|
return new DeleteQueryBuilder({
|
|
17
20
|
...this.#props,
|
|
18
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(
|
|
21
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(args)),
|
|
19
22
|
});
|
|
20
23
|
}
|
|
21
24
|
whereRef(lhs, op, rhs) {
|
|
22
25
|
return new DeleteQueryBuilder({
|
|
23
26
|
...this.#props,
|
|
24
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(
|
|
27
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
|
|
25
28
|
});
|
|
26
29
|
}
|
|
27
30
|
orWhere(...args) {
|
|
28
31
|
return new DeleteQueryBuilder({
|
|
29
32
|
...this.#props,
|
|
30
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(
|
|
33
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(args)),
|
|
31
34
|
});
|
|
32
35
|
}
|
|
33
36
|
orWhereRef(lhs, op, rhs) {
|
|
34
37
|
return new DeleteQueryBuilder({
|
|
35
38
|
...this.#props,
|
|
36
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(
|
|
39
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
|
|
37
40
|
});
|
|
38
41
|
}
|
|
39
42
|
whereExists(arg) {
|
|
40
43
|
return new DeleteQueryBuilder({
|
|
41
44
|
...this.#props,
|
|
42
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(
|
|
45
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(arg)),
|
|
43
46
|
});
|
|
44
47
|
}
|
|
45
48
|
whereNotExists(arg) {
|
|
46
49
|
return new DeleteQueryBuilder({
|
|
47
50
|
...this.#props,
|
|
48
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(
|
|
51
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(arg)),
|
|
49
52
|
});
|
|
50
53
|
}
|
|
51
54
|
orWhereExists(arg) {
|
|
52
55
|
return new DeleteQueryBuilder({
|
|
53
56
|
...this.#props,
|
|
54
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(
|
|
57
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(arg)),
|
|
55
58
|
});
|
|
56
59
|
}
|
|
57
60
|
orWhereNotExists(arg) {
|
|
58
61
|
return new DeleteQueryBuilder({
|
|
59
62
|
...this.#props,
|
|
60
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(
|
|
63
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(arg)),
|
|
61
64
|
});
|
|
62
65
|
}
|
|
63
66
|
innerJoin(...args) {
|
|
64
67
|
return new DeleteQueryBuilder({
|
|
65
68
|
...this.#props,
|
|
66
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
69
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('InnerJoin', args)),
|
|
67
70
|
});
|
|
68
71
|
}
|
|
69
72
|
leftJoin(...args) {
|
|
70
73
|
return new DeleteQueryBuilder({
|
|
71
74
|
...this.#props,
|
|
72
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
75
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LeftJoin', args)),
|
|
73
76
|
});
|
|
74
77
|
}
|
|
75
78
|
rightJoin(...args) {
|
|
76
79
|
return new DeleteQueryBuilder({
|
|
77
80
|
...this.#props,
|
|
78
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
81
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('RightJoin', args)),
|
|
79
82
|
});
|
|
80
83
|
}
|
|
81
84
|
fullJoin(...args) {
|
|
82
85
|
return new DeleteQueryBuilder({
|
|
83
86
|
...this.#props,
|
|
84
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
87
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
|
|
85
88
|
});
|
|
86
89
|
}
|
|
87
90
|
returning(selection) {
|
|
88
91
|
return new DeleteQueryBuilder({
|
|
89
92
|
...this.#props,
|
|
90
|
-
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(
|
|
93
|
+
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(selection)),
|
|
91
94
|
});
|
|
92
95
|
}
|
|
93
96
|
returningAll() {
|
|
@@ -96,6 +99,70 @@ export class DeleteQueryBuilder {
|
|
|
96
99
|
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll()),
|
|
97
100
|
});
|
|
98
101
|
}
|
|
102
|
+
/**
|
|
103
|
+
* Adds an `order by` clause to the query.
|
|
104
|
+
*
|
|
105
|
+
* `orderBy` calls are additive. To order by multiple columns, call `orderBy`
|
|
106
|
+
* multiple times.
|
|
107
|
+
*
|
|
108
|
+
* The first argument is the expression to order by and the second is the
|
|
109
|
+
* order (`asc` or `desc`).
|
|
110
|
+
*
|
|
111
|
+
* An `order by` clause in a delete query is only supported by some dialects
|
|
112
|
+
* like MySQL.
|
|
113
|
+
*
|
|
114
|
+
* See {@link SelectQueryBuilder.orderBy} for more examples.
|
|
115
|
+
*
|
|
116
|
+
* ### Examples
|
|
117
|
+
*
|
|
118
|
+
* Delete 5 oldest items in a table:
|
|
119
|
+
*
|
|
120
|
+
* ```ts
|
|
121
|
+
* await db
|
|
122
|
+
* .deleteFrom('pet')
|
|
123
|
+
* .orderBy('created_at')
|
|
124
|
+
* .limit(5)
|
|
125
|
+
* .execute()
|
|
126
|
+
* ```
|
|
127
|
+
*
|
|
128
|
+
* The generated SQL (MySQL):
|
|
129
|
+
*
|
|
130
|
+
* ```sql
|
|
131
|
+
* delete from `pet`
|
|
132
|
+
* order by `created_at`
|
|
133
|
+
* limit ?
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
orderBy(orderBy, direction) {
|
|
137
|
+
return new DeleteQueryBuilder({
|
|
138
|
+
...this.#props,
|
|
139
|
+
queryNode: DeleteQueryNode.cloneWithOrderByItem(this.#props.queryNode, parseOrderBy(orderBy, direction)),
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Adds a limit clause to the query.
|
|
144
|
+
*
|
|
145
|
+
* A limit clause in a delete query is only supported by some dialects
|
|
146
|
+
* like MySQL.
|
|
147
|
+
*
|
|
148
|
+
* ### Examples
|
|
149
|
+
*
|
|
150
|
+
* Delete 5 oldest items in a table:
|
|
151
|
+
*
|
|
152
|
+
* ```ts
|
|
153
|
+
* await db
|
|
154
|
+
* .deleteFrom('pet')
|
|
155
|
+
* .orderBy('created_at')
|
|
156
|
+
* .limit(5)
|
|
157
|
+
* .execute()
|
|
158
|
+
* ```
|
|
159
|
+
*/
|
|
160
|
+
limit(limit) {
|
|
161
|
+
return new DeleteQueryBuilder({
|
|
162
|
+
...this.#props,
|
|
163
|
+
queryNode: DeleteQueryNode.cloneWithLimit(this.#props.queryNode, LimitNode.create(limit)),
|
|
164
|
+
});
|
|
165
|
+
}
|
|
99
166
|
/**
|
|
100
167
|
* Simply calls the given function passing `this` as the only argument.
|
|
101
168
|
*
|
|
@@ -196,7 +263,7 @@ export class DeleteQueryBuilder {
|
|
|
196
263
|
const compildQuery = this.compile();
|
|
197
264
|
const query = compildQuery.query;
|
|
198
265
|
const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
|
|
199
|
-
if (this.#props.
|
|
266
|
+
if (this.#props.executor.adapter.supportsReturning && query.returning) {
|
|
200
267
|
return result.rows;
|
|
201
268
|
}
|
|
202
269
|
else {
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { SelectQueryBuilder } from './select-query-builder.js';
|
|
2
2
|
import { TableExpression, TableExpressionDatabase, TableExpressionTables } from '../parser/table-parser.js';
|
|
3
|
-
import { NoopQueryExecutor } from '../query-executor/noop-query-executor.js';
|
|
4
|
-
import { ParseContext } from '../parser/parse-context.js';
|
|
5
3
|
import { FunctionBuilder } from './function-builder.js';
|
|
6
4
|
import { ExtractTypeFromReferenceExpression, StringReference } from '../parser/reference-parser.js';
|
|
7
5
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
6
|
+
import { QueryExecutor } from '../index-nodeless.js';
|
|
8
7
|
export declare class ExpressionBuilder<DB, TB extends keyof DB> {
|
|
9
8
|
#private;
|
|
10
9
|
constructor(props: ExpressionBuilderProps);
|
|
@@ -90,10 +89,6 @@ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
90
89
|
* See {@link QueryCreator.withSchema}
|
|
91
90
|
*/
|
|
92
91
|
withSchema(schema: string): ExpressionBuilder<DB, TB>;
|
|
93
|
-
/**
|
|
94
|
-
* See {@link QueryCreator.raw}.
|
|
95
|
-
*/
|
|
96
|
-
raw<T = unknown>(sql: string, parameters?: unknown[]): RawBuilder<T>;
|
|
97
92
|
/**
|
|
98
93
|
* This can be used to reference columns.
|
|
99
94
|
*
|
|
@@ -115,21 +110,17 @@ export declare class ExpressionBuilder<DB, TB extends keyof DB> {
|
|
|
115
110
|
* )
|
|
116
111
|
* ```
|
|
117
112
|
*
|
|
118
|
-
* In the next example we use `ref` in a raw expression. Unless you
|
|
113
|
+
* In the next example we use `ref` in a raw sql expression. Unless you
|
|
119
114
|
* want to be as type-safe as possible, this is probably overkill:
|
|
120
115
|
*
|
|
121
116
|
* ```ts
|
|
122
117
|
* db.update('pet').set({
|
|
123
|
-
* name: (eb) => eb.
|
|
124
|
-
* eb.ref('pet.name'),
|
|
125
|
-
* suffix,
|
|
126
|
-
* ])
|
|
118
|
+
* name: (eb) => sql`concat(${eb.ref('pet.name')}, ${suffix})`
|
|
127
119
|
* })
|
|
128
120
|
* ```
|
|
129
121
|
*/
|
|
130
122
|
ref<RE extends StringReference<DB, TB>>(reference: RE): RawBuilder<ExtractTypeFromReferenceExpression<DB, TB, RE>>;
|
|
131
123
|
}
|
|
132
124
|
export interface ExpressionBuilderProps {
|
|
133
|
-
readonly executor:
|
|
134
|
-
readonly parseContext: ParseContext;
|
|
125
|
+
readonly executor: QueryExecutor;
|
|
135
126
|
}
|
|
@@ -4,9 +4,11 @@ import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
|
4
4
|
import { parseTableExpressionOrList, } from '../parser/table-parser.js';
|
|
5
5
|
import { WithSchemaPlugin } from '../plugin/with-schema/with-schema-plugin.js';
|
|
6
6
|
import { createQueryId } from '../util/query-id.js';
|
|
7
|
-
import { freeze } from '../util/object-utils.js';
|
|
8
7
|
import { FunctionBuilder } from './function-builder.js';
|
|
8
|
+
import { parseStringReference, } from '../parser/reference-parser.js';
|
|
9
9
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
10
|
+
import { RawNode } from '../index-nodeless.js';
|
|
11
|
+
import { freeze } from '../util/object-utils.js';
|
|
10
12
|
export class ExpressionBuilder {
|
|
11
13
|
#props;
|
|
12
14
|
constructor(props) {
|
|
@@ -44,14 +46,13 @@ export class ExpressionBuilder {
|
|
|
44
46
|
* ```
|
|
45
47
|
*/
|
|
46
48
|
get fn() {
|
|
47
|
-
return new FunctionBuilder(
|
|
49
|
+
return new FunctionBuilder();
|
|
48
50
|
}
|
|
49
51
|
selectFrom(table) {
|
|
50
52
|
return new SelectQueryBuilder({
|
|
51
53
|
queryId: createQueryId(),
|
|
52
54
|
executor: this.#props.executor,
|
|
53
|
-
|
|
54
|
-
queryNode: SelectQueryNode.create(parseTableExpressionOrList(this.#props.parseContext, table)),
|
|
55
|
+
queryNode: SelectQueryNode.create(parseTableExpressionOrList(table)),
|
|
55
56
|
});
|
|
56
57
|
}
|
|
57
58
|
/**
|
|
@@ -63,17 +64,6 @@ export class ExpressionBuilder {
|
|
|
63
64
|
executor: this.#props.executor.withPluginAtFront(new WithSchemaPlugin(schema)),
|
|
64
65
|
});
|
|
65
66
|
}
|
|
66
|
-
/**
|
|
67
|
-
* See {@link QueryCreator.raw}.
|
|
68
|
-
*/
|
|
69
|
-
raw(sql, parameters) {
|
|
70
|
-
return new RawBuilder({
|
|
71
|
-
queryId: createQueryId(),
|
|
72
|
-
executor: this.#props.executor,
|
|
73
|
-
sql,
|
|
74
|
-
parameters,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
67
|
/**
|
|
78
68
|
* This can be used to reference columns.
|
|
79
69
|
*
|
|
@@ -95,19 +85,20 @@ export class ExpressionBuilder {
|
|
|
95
85
|
* )
|
|
96
86
|
* ```
|
|
97
87
|
*
|
|
98
|
-
* In the next example we use `ref` in a raw expression. Unless you
|
|
88
|
+
* In the next example we use `ref` in a raw sql expression. Unless you
|
|
99
89
|
* want to be as type-safe as possible, this is probably overkill:
|
|
100
90
|
*
|
|
101
91
|
* ```ts
|
|
102
92
|
* db.update('pet').set({
|
|
103
|
-
* name: (eb) => eb.
|
|
104
|
-
* eb.ref('pet.name'),
|
|
105
|
-
* suffix,
|
|
106
|
-
* ])
|
|
93
|
+
* name: (eb) => sql`concat(${eb.ref('pet.name')}, ${suffix})`
|
|
107
94
|
* })
|
|
108
95
|
* ```
|
|
109
96
|
*/
|
|
110
97
|
ref(reference) {
|
|
111
|
-
return
|
|
98
|
+
return new RawBuilder({
|
|
99
|
+
queryId: createQueryId(),
|
|
100
|
+
plugins: this.#props.executor.plugins,
|
|
101
|
+
rawNode: RawNode.createWithChild(parseStringReference(reference)),
|
|
102
|
+
});
|
|
112
103
|
}
|
|
113
104
|
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { StringReference, ExtractTypeFromReferenceExpression } from '../parser/reference-parser.js';
|
|
2
|
-
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
3
2
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
4
3
|
/**
|
|
5
4
|
* Helpers for type safe SQL function calls.
|
|
6
5
|
*
|
|
7
|
-
* You can always use {@link
|
|
6
|
+
* You can always use the {@link sql} tag to call functions and build arbitrary
|
|
8
7
|
* expressions. This module simply has shortcuts for most common function calls.
|
|
9
8
|
*
|
|
10
9
|
* ### Examples
|
|
@@ -35,7 +34,7 @@ import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
|
35
34
|
*/
|
|
36
35
|
export declare class FunctionBuilder<DB, TB extends keyof DB> {
|
|
37
36
|
#private;
|
|
38
|
-
constructor(
|
|
37
|
+
constructor();
|
|
39
38
|
/**
|
|
40
39
|
* Calls the `max` function for the column given as the argument.
|
|
41
40
|
*
|
|
@@ -132,6 +131,3 @@ export declare class FunctionBuilder<DB, TB extends keyof DB> {
|
|
|
132
131
|
*/
|
|
133
132
|
count<O extends number | string | bigint, C extends StringReference<DB, TB> = any>(column: C): RawBuilder<O>;
|
|
134
133
|
}
|
|
135
|
-
export interface FunctionBuilderProps {
|
|
136
|
-
readonly executor: QueryExecutor;
|
|
137
|
-
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/// <reference types="./function-builder.d.ts" />
|
|
2
|
+
import { RawNode } from '../index-nodeless.js';
|
|
3
|
+
import { parseStringReference, } from '../parser/reference-parser.js';
|
|
2
4
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
3
|
-
import { freeze } from '../util/object-utils.js';
|
|
4
5
|
import { createQueryId } from '../util/query-id.js';
|
|
5
6
|
/**
|
|
6
7
|
* Helpers for type safe SQL function calls.
|
|
7
8
|
*
|
|
8
|
-
* You can always use {@link
|
|
9
|
+
* You can always use the {@link sql} tag to call functions and build arbitrary
|
|
9
10
|
* expressions. This module simply has shortcuts for most common function calls.
|
|
10
11
|
*
|
|
11
12
|
* ### Examples
|
|
@@ -35,9 +36,7 @@ import { createQueryId } from '../util/query-id.js';
|
|
|
35
36
|
* ```
|
|
36
37
|
*/
|
|
37
38
|
export class FunctionBuilder {
|
|
38
|
-
|
|
39
|
-
constructor(props) {
|
|
40
|
-
this.#props = freeze(props);
|
|
39
|
+
constructor() {
|
|
41
40
|
this.min = this.min.bind(this);
|
|
42
41
|
this.max = this.max.bind(this);
|
|
43
42
|
this.avg = this.avg.bind(this);
|
|
@@ -152,9 +151,7 @@ export class FunctionBuilder {
|
|
|
152
151
|
#oneArgFunction(fn, column) {
|
|
153
152
|
return new RawBuilder({
|
|
154
153
|
queryId: createQueryId(),
|
|
155
|
-
|
|
156
|
-
sql: `${fn}(??)`,
|
|
157
|
-
parameters: [column],
|
|
154
|
+
rawNode: RawNode.create([`${fn}(`, ')'], [parseStringReference(column)]),
|
|
158
155
|
});
|
|
159
156
|
}
|
|
160
157
|
}
|
|
@@ -8,7 +8,6 @@ import { MutationObject } from '../parser/update-set-parser.js';
|
|
|
8
8
|
import { Compilable } from '../util/compilable.js';
|
|
9
9
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
10
10
|
import { QueryId } from '../util/query-id.js';
|
|
11
|
-
import { ParseContext } from '../parser/parse-context.js';
|
|
12
11
|
import { InsertResult } from './insert-result.js';
|
|
13
12
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
14
13
|
import { ReturningRow } from '../parser/returning-parser.js';
|
|
@@ -25,7 +24,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
25
24
|
*
|
|
26
25
|
* This method takes an object whose keys are column names and values are
|
|
27
26
|
* values to insert. In addition to the column's type, the values can be
|
|
28
|
-
* {@link
|
|
27
|
+
* raw {@link sql} snippets or select queries.
|
|
29
28
|
*
|
|
30
29
|
* You must provide all fields you haven't explicitly marked as nullable
|
|
31
30
|
* or optional using {@link Generated} or {@link ColumnType}.
|
|
@@ -106,16 +105,18 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
106
105
|
* insert into "person" ("first_name", "last_name") values ($1, $2) returning "id"
|
|
107
106
|
* ```
|
|
108
107
|
*
|
|
109
|
-
* In addition to primitives, the values can also be
|
|
108
|
+
* In addition to primitives, the values can also be raw sql expressions or
|
|
110
109
|
* select queries:
|
|
111
110
|
*
|
|
112
111
|
* ```ts
|
|
112
|
+
* import { sql } from 'kysely'
|
|
113
|
+
*
|
|
113
114
|
* const result = await db
|
|
114
115
|
* .insertInto('person')
|
|
115
116
|
* .values({
|
|
116
117
|
* first_name: 'Jennifer',
|
|
117
|
-
* last_name:
|
|
118
|
-
* age: db.selectFrom('person').select(
|
|
118
|
+
* last_name: sql`${'Ani'} || ${'ston'}`,
|
|
119
|
+
* age: db.selectFrom('person').select(sql`avg(age)`),
|
|
119
120
|
* })
|
|
120
121
|
* .executeTakeFirst()
|
|
121
122
|
*
|
|
@@ -271,6 +272,8 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
271
272
|
* the unique index is an expression index:
|
|
272
273
|
*
|
|
273
274
|
* ```ts
|
|
275
|
+
* import { sql } from 'kysely'
|
|
276
|
+
*
|
|
274
277
|
* await db
|
|
275
278
|
* .insertInto('pet')
|
|
276
279
|
* .values({
|
|
@@ -278,7 +281,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
278
281
|
* species: 'cat',
|
|
279
282
|
* })
|
|
280
283
|
* .onConflict((oc) => oc
|
|
281
|
-
* .expression(
|
|
284
|
+
* .expression(sql`lower(name)`)
|
|
282
285
|
* .doUpdateSet({ species: 'hamster' })
|
|
283
286
|
* )
|
|
284
287
|
* .execute()
|
|
@@ -423,7 +426,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
423
426
|
* Return arbitrary expressions:
|
|
424
427
|
*
|
|
425
428
|
* ```ts
|
|
426
|
-
*
|
|
429
|
+
* import { sql } from 'kysely'
|
|
427
430
|
*
|
|
428
431
|
* const { id, full_name, first_pet_id } = await db
|
|
429
432
|
* .insertInto('person')
|
|
@@ -433,7 +436,7 @@ export declare class InsertQueryBuilder<DB, TB extends keyof DB, O> implements R
|
|
|
433
436
|
* })
|
|
434
437
|
* .returning([
|
|
435
438
|
* 'id as id',
|
|
436
|
-
*
|
|
439
|
+
* sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
|
|
437
440
|
* (qb) => qb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
|
|
438
441
|
* ])
|
|
439
442
|
* .executeTakeFirst()
|
|
@@ -543,5 +546,4 @@ export interface InsertQueryBuilderProps {
|
|
|
543
546
|
readonly queryId: QueryId;
|
|
544
547
|
readonly queryNode: InsertQueryNode;
|
|
545
548
|
readonly executor: QueryExecutor;
|
|
546
|
-
readonly parseContext: ParseContext;
|
|
547
549
|
}
|
|
@@ -19,7 +19,7 @@ export class InsertQueryBuilder {
|
|
|
19
19
|
this.#props = freeze(props);
|
|
20
20
|
}
|
|
21
21
|
values(args) {
|
|
22
|
-
const [columns, values] = parseInsertObjectOrList(
|
|
22
|
+
const [columns, values] = parseInsertObjectOrList(args);
|
|
23
23
|
return new InsertQueryBuilder({
|
|
24
24
|
...this.#props,
|
|
25
25
|
queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
|
|
@@ -80,7 +80,7 @@ export class InsertQueryBuilder {
|
|
|
80
80
|
return new InsertQueryBuilder({
|
|
81
81
|
...this.#props,
|
|
82
82
|
queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
|
|
83
|
-
values: parseComplexExpression(
|
|
83
|
+
values: parseComplexExpression(expression),
|
|
84
84
|
}),
|
|
85
85
|
});
|
|
86
86
|
}
|
|
@@ -174,6 +174,8 @@ export class InsertQueryBuilder {
|
|
|
174
174
|
* the unique index is an expression index:
|
|
175
175
|
*
|
|
176
176
|
* ```ts
|
|
177
|
+
* import { sql } from 'kysely'
|
|
178
|
+
*
|
|
177
179
|
* await db
|
|
178
180
|
* .insertInto('pet')
|
|
179
181
|
* .values({
|
|
@@ -181,7 +183,7 @@ export class InsertQueryBuilder {
|
|
|
181
183
|
* species: 'cat',
|
|
182
184
|
* })
|
|
183
185
|
* .onConflict((oc) => oc
|
|
184
|
-
* .expression(
|
|
186
|
+
* .expression(sql`lower(name)`)
|
|
185
187
|
* .doUpdateSet({ species: 'hamster' })
|
|
186
188
|
* )
|
|
187
189
|
* .execute()
|
|
@@ -269,7 +271,6 @@ export class InsertQueryBuilder {
|
|
|
269
271
|
queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
|
|
270
272
|
onConflict: callback(new OnConflictBuilder({
|
|
271
273
|
onConflictNode: OnConflictNode.create(),
|
|
272
|
-
parseContext: this.#props.parseContext,
|
|
273
274
|
})).toOperationNode(),
|
|
274
275
|
}),
|
|
275
276
|
});
|
|
@@ -296,14 +297,14 @@ export class InsertQueryBuilder {
|
|
|
296
297
|
return new InsertQueryBuilder({
|
|
297
298
|
...this.#props,
|
|
298
299
|
queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
|
|
299
|
-
onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateObject(
|
|
300
|
+
onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateObject(updates)),
|
|
300
301
|
}),
|
|
301
302
|
});
|
|
302
303
|
}
|
|
303
304
|
returning(selection) {
|
|
304
305
|
return new InsertQueryBuilder({
|
|
305
306
|
...this.#props,
|
|
306
|
-
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(
|
|
307
|
+
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(selection)),
|
|
307
308
|
});
|
|
308
309
|
}
|
|
309
310
|
returningAll() {
|
|
@@ -413,7 +414,7 @@ export class InsertQueryBuilder {
|
|
|
413
414
|
const compildQuery = this.compile();
|
|
414
415
|
const query = compildQuery.query;
|
|
415
416
|
const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
|
|
416
|
-
if (this.#props.
|
|
417
|
+
if (this.#props.executor.adapter.supportsReturning && query.returning) {
|
|
417
418
|
return result.rows;
|
|
418
419
|
}
|
|
419
420
|
else {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { JoinNode } from '../operation-node/join-node.js';
|
|
2
2
|
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
3
3
|
import { ExistsExpression, FilterOperator, FilterValueExpressionOrList } from '../parser/filter-parser.js';
|
|
4
|
-
import { ParseContext } from '../parser/parse-context.js';
|
|
5
4
|
import { ReferenceExpression } from '../parser/reference-parser.js';
|
|
6
5
|
import { AnyRawBuilder } from '../util/type-utils.js';
|
|
7
6
|
export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNodeSource {
|
|
@@ -71,5 +70,4 @@ export declare class JoinBuilder<DB, TB extends keyof DB> implements OperationNo
|
|
|
71
70
|
}
|
|
72
71
|
export interface JoinBuilderProps {
|
|
73
72
|
readonly joinNode: JoinNode;
|
|
74
|
-
readonly parseContext: ParseContext;
|
|
75
73
|
}
|
|
@@ -11,13 +11,13 @@ export class JoinBuilder {
|
|
|
11
11
|
on(...args) {
|
|
12
12
|
return new JoinBuilder({
|
|
13
13
|
...this.#props,
|
|
14
|
-
joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseOnFilter(
|
|
14
|
+
joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseOnFilter(args)),
|
|
15
15
|
});
|
|
16
16
|
}
|
|
17
17
|
orOn(...args) {
|
|
18
18
|
return new JoinBuilder({
|
|
19
19
|
...this.#props,
|
|
20
|
-
joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseOnFilter(
|
|
20
|
+
joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseOnFilter(args)),
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
@@ -29,7 +29,7 @@ export class JoinBuilder {
|
|
|
29
29
|
onRef(lhs, op, rhs) {
|
|
30
30
|
return new JoinBuilder({
|
|
31
31
|
...this.#props,
|
|
32
|
-
joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseReferenceFilter(
|
|
32
|
+
joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseReferenceFilter(lhs, op, rhs)),
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
/**
|
|
@@ -41,7 +41,7 @@ export class JoinBuilder {
|
|
|
41
41
|
orOnRef(lhs, op, rhs) {
|
|
42
42
|
return new JoinBuilder({
|
|
43
43
|
...this.#props,
|
|
44
|
-
joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseReferenceFilter(
|
|
44
|
+
joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseReferenceFilter(lhs, op, rhs)),
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
/**
|
|
@@ -53,7 +53,7 @@ export class JoinBuilder {
|
|
|
53
53
|
onExists(arg) {
|
|
54
54
|
return new JoinBuilder({
|
|
55
55
|
...this.#props,
|
|
56
|
-
joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseExistFilter(
|
|
56
|
+
joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseExistFilter(arg)),
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
59
|
/**
|
|
@@ -65,7 +65,7 @@ export class JoinBuilder {
|
|
|
65
65
|
onNotExists(arg) {
|
|
66
66
|
return new JoinBuilder({
|
|
67
67
|
...this.#props,
|
|
68
|
-
joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseNotExistFilter(
|
|
68
|
+
joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseNotExistFilter(arg)),
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
71
|
/**
|
|
@@ -77,7 +77,7 @@ export class JoinBuilder {
|
|
|
77
77
|
orOnExists(arg) {
|
|
78
78
|
return new JoinBuilder({
|
|
79
79
|
...this.#props,
|
|
80
|
-
joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseExistFilter(
|
|
80
|
+
joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseExistFilter(arg)),
|
|
81
81
|
});
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
@@ -89,7 +89,7 @@ export class JoinBuilder {
|
|
|
89
89
|
orOnNotExists(arg) {
|
|
90
90
|
return new JoinBuilder({
|
|
91
91
|
...this.#props,
|
|
92
|
-
joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseNotExistFilter(
|
|
92
|
+
joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseNotExistFilter(arg)),
|
|
93
93
|
});
|
|
94
94
|
}
|
|
95
95
|
toOperationNode() {
|