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
|
@@ -21,109 +21,109 @@ export class SelectQueryBuilder {
|
|
|
21
21
|
where(...args) {
|
|
22
22
|
return new SelectQueryBuilder({
|
|
23
23
|
...this.#props,
|
|
24
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(
|
|
24
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(args)),
|
|
25
25
|
});
|
|
26
26
|
}
|
|
27
27
|
whereRef(lhs, op, rhs) {
|
|
28
28
|
return new SelectQueryBuilder({
|
|
29
29
|
...this.#props,
|
|
30
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(
|
|
30
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
|
|
31
31
|
});
|
|
32
32
|
}
|
|
33
33
|
orWhere(...args) {
|
|
34
34
|
return new SelectQueryBuilder({
|
|
35
35
|
...this.#props,
|
|
36
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(
|
|
36
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(args)),
|
|
37
37
|
});
|
|
38
38
|
}
|
|
39
39
|
orWhereRef(lhs, op, rhs) {
|
|
40
40
|
return new SelectQueryBuilder({
|
|
41
41
|
...this.#props,
|
|
42
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(
|
|
42
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
|
|
43
43
|
});
|
|
44
44
|
}
|
|
45
45
|
whereExists(arg) {
|
|
46
46
|
return new SelectQueryBuilder({
|
|
47
47
|
...this.#props,
|
|
48
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(
|
|
48
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(arg)),
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
whereNotExists(arg) {
|
|
52
52
|
return new SelectQueryBuilder({
|
|
53
53
|
...this.#props,
|
|
54
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(
|
|
54
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(arg)),
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
orWhereExists(arg) {
|
|
58
58
|
return new SelectQueryBuilder({
|
|
59
59
|
...this.#props,
|
|
60
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(
|
|
60
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(arg)),
|
|
61
61
|
});
|
|
62
62
|
}
|
|
63
63
|
orWhereNotExists(arg) {
|
|
64
64
|
return new SelectQueryBuilder({
|
|
65
65
|
...this.#props,
|
|
66
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(
|
|
66
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(arg)),
|
|
67
67
|
});
|
|
68
68
|
}
|
|
69
69
|
having(...args) {
|
|
70
70
|
return new SelectQueryBuilder({
|
|
71
71
|
...this.#props,
|
|
72
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseHavingFilter(
|
|
72
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseHavingFilter(args)),
|
|
73
73
|
});
|
|
74
74
|
}
|
|
75
75
|
havingRef(lhs, op, rhs) {
|
|
76
76
|
return new SelectQueryBuilder({
|
|
77
77
|
...this.#props,
|
|
78
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseReferenceFilter(
|
|
78
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
81
|
orHaving(...args) {
|
|
82
82
|
return new SelectQueryBuilder({
|
|
83
83
|
...this.#props,
|
|
84
|
-
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseHavingFilter(
|
|
84
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseHavingFilter(args)),
|
|
85
85
|
});
|
|
86
86
|
}
|
|
87
87
|
orHavingRef(lhs, op, rhs) {
|
|
88
88
|
return new SelectQueryBuilder({
|
|
89
89
|
...this.#props,
|
|
90
|
-
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseReferenceFilter(
|
|
90
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
93
|
havingExists(arg) {
|
|
94
94
|
return new SelectQueryBuilder({
|
|
95
95
|
...this.#props,
|
|
96
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseExistFilter(
|
|
96
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseExistFilter(arg)),
|
|
97
97
|
});
|
|
98
98
|
}
|
|
99
99
|
havingNotExist(arg) {
|
|
100
100
|
return new SelectQueryBuilder({
|
|
101
101
|
...this.#props,
|
|
102
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseNotExistFilter(
|
|
102
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseNotExistFilter(arg)),
|
|
103
103
|
});
|
|
104
104
|
}
|
|
105
105
|
orHavingExists(arg) {
|
|
106
106
|
return new SelectQueryBuilder({
|
|
107
107
|
...this.#props,
|
|
108
|
-
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseExistFilter(
|
|
108
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseExistFilter(arg)),
|
|
109
109
|
});
|
|
110
110
|
}
|
|
111
111
|
orHavingNotExists(arg) {
|
|
112
112
|
return new SelectQueryBuilder({
|
|
113
113
|
...this.#props,
|
|
114
|
-
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseNotExistFilter(
|
|
114
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseNotExistFilter(arg)),
|
|
115
115
|
});
|
|
116
116
|
}
|
|
117
117
|
select(selection) {
|
|
118
118
|
return new SelectQueryBuilder({
|
|
119
119
|
...this.#props,
|
|
120
|
-
queryNode: SelectQueryNode.cloneWithSelections(this.#props.queryNode, parseSelectExpressionOrList(
|
|
120
|
+
queryNode: SelectQueryNode.cloneWithSelections(this.#props.queryNode, parseSelectExpressionOrList(selection)),
|
|
121
121
|
});
|
|
122
122
|
}
|
|
123
123
|
distinctOn(selection) {
|
|
124
124
|
return new SelectQueryBuilder({
|
|
125
125
|
...this.#props,
|
|
126
|
-
queryNode: SelectQueryNode.cloneWithDistinctOnSelections(this.#props.queryNode, parseSelectExpressionOrList(
|
|
126
|
+
queryNode: SelectQueryNode.cloneWithDistinctOnSelections(this.#props.queryNode, parseSelectExpressionOrList(selection)),
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
129
|
/**
|
|
@@ -213,25 +213,25 @@ export class SelectQueryBuilder {
|
|
|
213
213
|
innerJoin(...args) {
|
|
214
214
|
return new SelectQueryBuilder({
|
|
215
215
|
...this.#props,
|
|
216
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
216
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('InnerJoin', args)),
|
|
217
217
|
});
|
|
218
218
|
}
|
|
219
219
|
leftJoin(...args) {
|
|
220
220
|
return new SelectQueryBuilder({
|
|
221
221
|
...this.#props,
|
|
222
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
222
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LeftJoin', args)),
|
|
223
223
|
});
|
|
224
224
|
}
|
|
225
225
|
rightJoin(...args) {
|
|
226
226
|
return new SelectQueryBuilder({
|
|
227
227
|
...this.#props,
|
|
228
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
228
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('RightJoin', args)),
|
|
229
229
|
});
|
|
230
230
|
}
|
|
231
231
|
fullJoin(...args) {
|
|
232
232
|
return new SelectQueryBuilder({
|
|
233
233
|
...this.#props,
|
|
234
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
234
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
|
|
235
235
|
});
|
|
236
236
|
}
|
|
237
237
|
/**
|
|
@@ -262,10 +262,12 @@ export class SelectQueryBuilder {
|
|
|
262
262
|
* order by "id" asc, "fn" desc
|
|
263
263
|
* ```
|
|
264
264
|
*
|
|
265
|
-
* The order by expression can also be a
|
|
265
|
+
* The order by expression can also be a raw sql expression or a subquery
|
|
266
266
|
* in addition to column references:
|
|
267
267
|
*
|
|
268
268
|
* ```ts
|
|
269
|
+
* import { sql } from 'kysely'
|
|
270
|
+
*
|
|
269
271
|
* await db
|
|
270
272
|
* .selectFrom('person')
|
|
271
273
|
* .selectAll()
|
|
@@ -275,7 +277,7 @@ export class SelectQueryBuilder {
|
|
|
275
277
|
* .limit(1)
|
|
276
278
|
* )
|
|
277
279
|
* .orderBy(
|
|
278
|
-
*
|
|
280
|
+
* sql`concat(first_name, last_name)`
|
|
279
281
|
* )
|
|
280
282
|
* .execute()
|
|
281
283
|
* ```
|
|
@@ -322,13 +324,13 @@ export class SelectQueryBuilder {
|
|
|
322
324
|
orderBy(orderBy, direction) {
|
|
323
325
|
return new SelectQueryBuilder({
|
|
324
326
|
...this.#props,
|
|
325
|
-
queryNode: SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, parseOrderBy(
|
|
327
|
+
queryNode: SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, parseOrderBy(orderBy, direction)),
|
|
326
328
|
});
|
|
327
329
|
}
|
|
328
330
|
groupBy(groupBy) {
|
|
329
331
|
return new SelectQueryBuilder({
|
|
330
332
|
...this.#props,
|
|
331
|
-
queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, parseGroupBy(
|
|
333
|
+
queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, parseGroupBy(groupBy)),
|
|
332
334
|
});
|
|
333
335
|
}
|
|
334
336
|
/**
|
|
@@ -12,7 +12,6 @@ import { MutationObject } from '../parser/update-set-parser.js';
|
|
|
12
12
|
import { Compilable } from '../util/compilable.js';
|
|
13
13
|
import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
14
14
|
import { QueryId } from '../util/query-id.js';
|
|
15
|
-
import { ParseContext } from '../parser/parse-context.js';
|
|
16
15
|
import { UpdateResult } from './update-result.js';
|
|
17
16
|
import { KyselyPlugin } from '../plugin/kysely-plugin.js';
|
|
18
17
|
import { WhereInterface } from './where-interface.js';
|
|
@@ -47,7 +46,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
47
46
|
* ```
|
|
48
47
|
*
|
|
49
48
|
* Operator can be any supported operator or if the typings don't support it
|
|
50
|
-
* you can always use `
|
|
49
|
+
* you can always use `sql\`your operator\``.
|
|
51
50
|
*
|
|
52
51
|
* ```ts
|
|
53
52
|
* const persons = await db
|
|
@@ -117,7 +116,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
117
116
|
*
|
|
118
117
|
* A `where in` query can be built by using the `in` operator and an array
|
|
119
118
|
* of values. The values in the array can also be subqueries or raw
|
|
120
|
-
*
|
|
119
|
+
* {@link sql} expressions.
|
|
121
120
|
*
|
|
122
121
|
* ```ts
|
|
123
122
|
* const persons = await db
|
|
@@ -133,15 +132,17 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
133
132
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
134
133
|
* ```
|
|
135
134
|
*
|
|
136
|
-
* If everything else fails, you can always
|
|
135
|
+
* If everything else fails, you can always use the {@link sql} tag
|
|
137
136
|
* as any of the arguments, including the operator:
|
|
138
137
|
*
|
|
139
138
|
* ```ts
|
|
139
|
+
* import { sql } from 'kysely'
|
|
140
|
+
*
|
|
140
141
|
* const persons = await db
|
|
141
142
|
* .selectFrom('person')
|
|
142
143
|
* .selectAll()
|
|
143
144
|
* .where(
|
|
144
|
-
*
|
|
145
|
+
* sql`coalesce(first_name, last_name)`,
|
|
145
146
|
* 'like',
|
|
146
147
|
* '%' + name + '%',
|
|
147
148
|
* )
|
|
@@ -176,24 +177,25 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
176
177
|
* ```
|
|
177
178
|
*
|
|
178
179
|
* In all examples above the columns were known at compile time
|
|
179
|
-
* (except for the
|
|
180
|
-
* you to refer to columns that exist in the database **and**
|
|
181
|
-
* referred to in the current query and context.
|
|
180
|
+
* (except for the raw {@link sql} expressions). By default kysely only
|
|
181
|
+
* allows you to refer to columns that exist in the database **and**
|
|
182
|
+
* can be referred to in the current query and context.
|
|
182
183
|
*
|
|
183
184
|
* Sometimes you may want to refer to columns that come from the user
|
|
184
185
|
* input and thus are not available at compile time.
|
|
185
186
|
*
|
|
186
|
-
* You have two options,
|
|
187
|
+
* You have two options, the {@link sql} tag or `db.dynamic`. The example below
|
|
187
188
|
* uses both:
|
|
188
189
|
*
|
|
189
190
|
* ```ts
|
|
191
|
+
* import { sql } from 'kysely'
|
|
190
192
|
* const { ref } = db.dynamic
|
|
191
193
|
*
|
|
192
194
|
* const persons = await db
|
|
193
195
|
* .selectFrom('person')
|
|
194
196
|
* .selectAll()
|
|
195
197
|
* .where(ref(columnFromUserInput), '=', 1)
|
|
196
|
-
* .orWhere(
|
|
198
|
+
* .orWhere(sql.id(columnFromUserInput), '=', 2)
|
|
197
199
|
* .execute()
|
|
198
200
|
* ```
|
|
199
201
|
*/
|
|
@@ -327,13 +329,14 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
327
329
|
/**
|
|
328
330
|
* Adds a `where exists` clause to the query.
|
|
329
331
|
*
|
|
330
|
-
* You can either use a subquery or a raw
|
|
332
|
+
* You can either use a subquery or a raw {@link sql} snippet.
|
|
331
333
|
*
|
|
332
334
|
* ### Examples
|
|
333
335
|
*
|
|
334
336
|
* The query below selets all persons that own a pet named Catto:
|
|
335
337
|
*
|
|
336
338
|
* ```ts
|
|
339
|
+
* const petName = 'Catto'
|
|
337
340
|
* const persons = await db
|
|
338
341
|
* .selectFrom('person')
|
|
339
342
|
* .selectAll()
|
|
@@ -341,7 +344,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
341
344
|
* .selectFrom('pet')
|
|
342
345
|
* .select('pet.id')
|
|
343
346
|
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
344
|
-
* .where('pet.name', '=',
|
|
347
|
+
* .where('pet.name', '=', petName)
|
|
345
348
|
* )
|
|
346
349
|
* .execute()
|
|
347
350
|
* ```
|
|
@@ -358,16 +361,16 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
358
361
|
* )
|
|
359
362
|
* ```
|
|
360
363
|
*
|
|
361
|
-
* The same query as in the previous example but with using raw:
|
|
364
|
+
* The same query as in the previous example but with using raw {@link sql}:
|
|
362
365
|
*
|
|
363
366
|
* ```ts
|
|
367
|
+
* import { sql } from 'kysely'
|
|
368
|
+
*
|
|
369
|
+
* const petName = 'Catto'
|
|
364
370
|
* db.selectFrom('person')
|
|
365
371
|
* .selectAll()
|
|
366
372
|
* .whereExists(
|
|
367
|
-
*
|
|
368
|
-
* '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
|
|
369
|
-
* ['Catto']
|
|
370
|
-
* )
|
|
373
|
+
* sql`(select pet.id from pet where person.id = pet.owner_id and pet.name = ${petName})`
|
|
371
374
|
* )
|
|
372
375
|
* ```
|
|
373
376
|
*
|
|
@@ -526,8 +529,8 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
526
529
|
* Sets the values to update for an {@link Kysely.updateTable | update} query.
|
|
527
530
|
*
|
|
528
531
|
* This method takes an object whose keys are column names and values are
|
|
529
|
-
* values to update. In addition to the column's type, the values can be
|
|
530
|
-
*
|
|
532
|
+
* values to update. In addition to the column's type, the values can be
|
|
533
|
+
* raw {@link sql} snippets or select queries.
|
|
531
534
|
*
|
|
532
535
|
* The return value of an update query is an instance of {@link UpdateResult}.
|
|
533
536
|
* You can use the {@link returning} method on supported databases to get out
|
|
@@ -580,16 +583,18 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
580
583
|
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
|
|
581
584
|
* ```
|
|
582
585
|
*
|
|
583
|
-
* In addition to primitives, the values can also be
|
|
586
|
+
* In addition to primitives, the values can also be raw sql expressions or
|
|
584
587
|
* select queries:
|
|
585
588
|
*
|
|
586
589
|
* ```ts
|
|
590
|
+
* import { sql } from 'kysely'
|
|
591
|
+
*
|
|
587
592
|
* const result = await db
|
|
588
593
|
* .updateTable('person')
|
|
589
594
|
* .set({
|
|
590
595
|
* first_name: 'Jennifer',
|
|
591
|
-
* last_name:
|
|
592
|
-
* age: db.selectFrom('person').select(
|
|
596
|
+
* last_name: sql`${'Ani'} || ${'ston'}`,
|
|
597
|
+
* age: db.selectFrom('person').select(sql`avg(age)`),
|
|
593
598
|
* })
|
|
594
599
|
* .where('id', '=', 1)
|
|
595
600
|
* .executeTakeFirst()
|
|
@@ -651,7 +656,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
651
656
|
* Return arbitrary expressions:
|
|
652
657
|
*
|
|
653
658
|
* ```ts
|
|
654
|
-
*
|
|
659
|
+
* import { sql } from 'kysely'
|
|
655
660
|
*
|
|
656
661
|
* const { id, full_name, first_pet_id } = await db
|
|
657
662
|
* .insertInto('person')
|
|
@@ -661,7 +666,7 @@ export declare class UpdateQueryBuilder<DB, TB extends keyof DB, O> implements W
|
|
|
661
666
|
* })
|
|
662
667
|
* .returning([
|
|
663
668
|
* 'id as id',
|
|
664
|
-
*
|
|
669
|
+
* sql<string>`concat(first_name, ' ', last_name)`.as('full_name'),
|
|
665
670
|
* (qb) => qb.selectFrom('pets').select('pet.id').limit(1).as('first_pet_id')
|
|
666
671
|
* ])
|
|
667
672
|
* .executeTakeFirst()
|
|
@@ -772,5 +777,4 @@ export interface UpdateQueryBuilderProps {
|
|
|
772
777
|
readonly queryId: QueryId;
|
|
773
778
|
readonly queryNode: UpdateQueryNode;
|
|
774
779
|
readonly executor: QueryExecutor;
|
|
775
|
-
readonly parseContext: ParseContext;
|
|
776
780
|
}
|
|
@@ -17,81 +17,81 @@ export class UpdateQueryBuilder {
|
|
|
17
17
|
where(...args) {
|
|
18
18
|
return new UpdateQueryBuilder({
|
|
19
19
|
...this.#props,
|
|
20
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(
|
|
20
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(args)),
|
|
21
21
|
});
|
|
22
22
|
}
|
|
23
23
|
whereRef(lhs, op, rhs) {
|
|
24
24
|
return new UpdateQueryBuilder({
|
|
25
25
|
...this.#props,
|
|
26
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(
|
|
26
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
orWhere(...args) {
|
|
30
30
|
return new UpdateQueryBuilder({
|
|
31
31
|
...this.#props,
|
|
32
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(
|
|
32
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(args)),
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
orWhereRef(lhs, op, rhs) {
|
|
36
36
|
return new UpdateQueryBuilder({
|
|
37
37
|
...this.#props,
|
|
38
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(
|
|
38
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(lhs, op, rhs)),
|
|
39
39
|
});
|
|
40
40
|
}
|
|
41
41
|
whereExists(arg) {
|
|
42
42
|
return new UpdateQueryBuilder({
|
|
43
43
|
...this.#props,
|
|
44
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(
|
|
44
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(arg)),
|
|
45
45
|
});
|
|
46
46
|
}
|
|
47
47
|
whereNotExists(arg) {
|
|
48
48
|
return new UpdateQueryBuilder({
|
|
49
49
|
...this.#props,
|
|
50
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(
|
|
50
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(arg)),
|
|
51
51
|
});
|
|
52
52
|
}
|
|
53
53
|
orWhereExists(arg) {
|
|
54
54
|
return new UpdateQueryBuilder({
|
|
55
55
|
...this.#props,
|
|
56
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(
|
|
56
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(arg)),
|
|
57
57
|
});
|
|
58
58
|
}
|
|
59
59
|
orWhereNotExists(arg) {
|
|
60
60
|
return new UpdateQueryBuilder({
|
|
61
61
|
...this.#props,
|
|
62
|
-
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(
|
|
62
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(arg)),
|
|
63
63
|
});
|
|
64
64
|
}
|
|
65
65
|
innerJoin(...args) {
|
|
66
66
|
return new UpdateQueryBuilder({
|
|
67
67
|
...this.#props,
|
|
68
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
68
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('InnerJoin', args)),
|
|
69
69
|
});
|
|
70
70
|
}
|
|
71
71
|
leftJoin(...args) {
|
|
72
72
|
return new UpdateQueryBuilder({
|
|
73
73
|
...this.#props,
|
|
74
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
74
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('LeftJoin', args)),
|
|
75
75
|
});
|
|
76
76
|
}
|
|
77
77
|
rightJoin(...args) {
|
|
78
78
|
return new UpdateQueryBuilder({
|
|
79
79
|
...this.#props,
|
|
80
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
80
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('RightJoin', args)),
|
|
81
81
|
});
|
|
82
82
|
}
|
|
83
83
|
fullJoin(...args) {
|
|
84
84
|
return new UpdateQueryBuilder({
|
|
85
85
|
...this.#props,
|
|
86
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(
|
|
86
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin('FullJoin', args)),
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
90
90
|
* Sets the values to update for an {@link Kysely.updateTable | update} query.
|
|
91
91
|
*
|
|
92
92
|
* This method takes an object whose keys are column names and values are
|
|
93
|
-
* values to update. In addition to the column's type, the values can be
|
|
94
|
-
*
|
|
93
|
+
* values to update. In addition to the column's type, the values can be
|
|
94
|
+
* raw {@link sql} snippets or select queries.
|
|
95
95
|
*
|
|
96
96
|
* The return value of an update query is an instance of {@link UpdateResult}.
|
|
97
97
|
* You can use the {@link returning} method on supported databases to get out
|
|
@@ -144,16 +144,18 @@ export class UpdateQueryBuilder {
|
|
|
144
144
|
* update "person" set "first_name" = $1, "last_name" = $2 where "id" = $3 returning "id"
|
|
145
145
|
* ```
|
|
146
146
|
*
|
|
147
|
-
* In addition to primitives, the values can also be
|
|
147
|
+
* In addition to primitives, the values can also be raw sql expressions or
|
|
148
148
|
* select queries:
|
|
149
149
|
*
|
|
150
150
|
* ```ts
|
|
151
|
+
* import { sql } from 'kysely'
|
|
152
|
+
*
|
|
151
153
|
* const result = await db
|
|
152
154
|
* .updateTable('person')
|
|
153
155
|
* .set({
|
|
154
156
|
* first_name: 'Jennifer',
|
|
155
|
-
* last_name:
|
|
156
|
-
* age: db.selectFrom('person').select(
|
|
157
|
+
* last_name: sql`${'Ani'} || ${'ston'}`,
|
|
158
|
+
* age: db.selectFrom('person').select(sql`avg(age)`),
|
|
157
159
|
* })
|
|
158
160
|
* .where('id', '=', 1)
|
|
159
161
|
* .executeTakeFirst()
|
|
@@ -174,13 +176,13 @@ export class UpdateQueryBuilder {
|
|
|
174
176
|
set(row) {
|
|
175
177
|
return new UpdateQueryBuilder({
|
|
176
178
|
...this.#props,
|
|
177
|
-
queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdateObject(
|
|
179
|
+
queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdateObject(row)),
|
|
178
180
|
});
|
|
179
181
|
}
|
|
180
182
|
returning(selection) {
|
|
181
183
|
return new UpdateQueryBuilder({
|
|
182
184
|
...this.#props,
|
|
183
|
-
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(
|
|
185
|
+
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(selection)),
|
|
184
186
|
});
|
|
185
187
|
}
|
|
186
188
|
returningAll() {
|
|
@@ -291,7 +293,7 @@ export class UpdateQueryBuilder {
|
|
|
291
293
|
const compildQuery = this.compile();
|
|
292
294
|
const query = compildQuery.query;
|
|
293
295
|
const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
|
|
294
|
-
if (this.#props.
|
|
296
|
+
if (this.#props.executor.adapter.supportsReturning && query.returning) {
|
|
295
297
|
return result.rows;
|
|
296
298
|
}
|
|
297
299
|
else {
|
|
@@ -26,7 +26,7 @@ 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 `sql\`your operator\``.
|
|
30
30
|
*
|
|
31
31
|
* ```ts
|
|
32
32
|
* const persons = await db
|
|
@@ -96,7 +96,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
96
96
|
*
|
|
97
97
|
* A `where in` query can be built by using the `in` operator and an array
|
|
98
98
|
* of values. The values in the array can also be subqueries or raw
|
|
99
|
-
*
|
|
99
|
+
* {@link sql} expressions.
|
|
100
100
|
*
|
|
101
101
|
* ```ts
|
|
102
102
|
* const persons = await db
|
|
@@ -112,15 +112,17 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
112
112
|
* select * from "person" where "id" in ($1, $2, $3)
|
|
113
113
|
* ```
|
|
114
114
|
*
|
|
115
|
-
* If everything else fails, you can always
|
|
115
|
+
* If everything else fails, you can always use the {@link sql} tag
|
|
116
116
|
* as any of the arguments, including the operator:
|
|
117
117
|
*
|
|
118
118
|
* ```ts
|
|
119
|
+
* import { sql } from 'kysely'
|
|
120
|
+
*
|
|
119
121
|
* const persons = await db
|
|
120
122
|
* .selectFrom('person')
|
|
121
123
|
* .selectAll()
|
|
122
124
|
* .where(
|
|
123
|
-
*
|
|
125
|
+
* sql`coalesce(first_name, last_name)`,
|
|
124
126
|
* 'like',
|
|
125
127
|
* '%' + name + '%',
|
|
126
128
|
* )
|
|
@@ -155,24 +157,25 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
155
157
|
* ```
|
|
156
158
|
*
|
|
157
159
|
* 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.
|
|
160
|
+
* (except for the raw {@link sql} expressions). By default kysely only
|
|
161
|
+
* allows you to refer to columns that exist in the database **and**
|
|
162
|
+
* can be referred to in the current query and context.
|
|
161
163
|
*
|
|
162
164
|
* Sometimes you may want to refer to columns that come from the user
|
|
163
165
|
* input and thus are not available at compile time.
|
|
164
166
|
*
|
|
165
|
-
* You have two options,
|
|
167
|
+
* You have two options, the {@link sql} tag or `db.dynamic`. The example below
|
|
166
168
|
* uses both:
|
|
167
169
|
*
|
|
168
170
|
* ```ts
|
|
171
|
+
* import { sql } from 'kysely'
|
|
169
172
|
* const { ref } = db.dynamic
|
|
170
173
|
*
|
|
171
174
|
* const persons = await db
|
|
172
175
|
* .selectFrom('person')
|
|
173
176
|
* .selectAll()
|
|
174
177
|
* .where(ref(columnFromUserInput), '=', 1)
|
|
175
|
-
* .orWhere(
|
|
178
|
+
* .orWhere(sql.id(columnFromUserInput), '=', 2)
|
|
176
179
|
* .execute()
|
|
177
180
|
* ```
|
|
178
181
|
*/
|
|
@@ -306,13 +309,14 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
306
309
|
/**
|
|
307
310
|
* Adds a `where exists` clause to the query.
|
|
308
311
|
*
|
|
309
|
-
* You can either use a subquery or a raw
|
|
312
|
+
* You can either use a subquery or a raw {@link sql} snippet.
|
|
310
313
|
*
|
|
311
314
|
* ### Examples
|
|
312
315
|
*
|
|
313
316
|
* The query below selets all persons that own a pet named Catto:
|
|
314
317
|
*
|
|
315
318
|
* ```ts
|
|
319
|
+
* const petName = 'Catto'
|
|
316
320
|
* const persons = await db
|
|
317
321
|
* .selectFrom('person')
|
|
318
322
|
* .selectAll()
|
|
@@ -320,7 +324,7 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
320
324
|
* .selectFrom('pet')
|
|
321
325
|
* .select('pet.id')
|
|
322
326
|
* .whereRef('person.id', '=', 'pet.owner_id')
|
|
323
|
-
* .where('pet.name', '=',
|
|
327
|
+
* .where('pet.name', '=', petName)
|
|
324
328
|
* )
|
|
325
329
|
* .execute()
|
|
326
330
|
* ```
|
|
@@ -337,16 +341,16 @@ export interface WhereInterface<DB, TB extends keyof DB> {
|
|
|
337
341
|
* )
|
|
338
342
|
* ```
|
|
339
343
|
*
|
|
340
|
-
* The same query as in the previous example but with using raw:
|
|
344
|
+
* The same query as in the previous example but with using raw {@link sql}:
|
|
341
345
|
*
|
|
342
346
|
* ```ts
|
|
347
|
+
* import { sql } from 'kysely'
|
|
348
|
+
*
|
|
349
|
+
* const petName = 'Catto'
|
|
343
350
|
* db.selectFrom('person')
|
|
344
351
|
* .selectAll()
|
|
345
352
|
* .whereExists(
|
|
346
|
-
*
|
|
347
|
-
* '(select pet.id from pet where person.id = pet.owner_id and pet.name = ?)',
|
|
348
|
-
* ['Catto']
|
|
349
|
-
* )
|
|
353
|
+
* sql`(select pet.id from pet where person.id = pet.owner_id and pet.name = ${petName})`
|
|
350
354
|
* )
|
|
351
355
|
* ```
|
|
352
356
|
*
|