kysely 0.7.1 → 0.7.5
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 +24 -19
- package/dist/cjs/dialect/dialect-adapter.d.ts +11 -9
- package/dist/cjs/dialect/mysql/mysql-dialect.d.ts +1 -1
- package/dist/cjs/dialect/mysql/mysql-driver.js +1 -0
- package/dist/cjs/dialect/mysql/mysql-introspector.d.ts +0 -1
- package/dist/cjs/dialect/mysql/mysql-introspector.js +2 -2
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -4
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -18
- package/dist/cjs/dialect/postgres/postgres-introspector.d.ts +0 -1
- package/dist/cjs/dialect/postgres/postgres-introspector.js +2 -2
- package/dist/cjs/driver/database-connection.d.ts +2 -1
- package/dist/cjs/driver/driver.d.ts +1 -1
- package/dist/cjs/driver/single-connection-provider.d.ts +0 -1
- package/dist/cjs/driver/single-connection-provider.js +2 -2
- package/dist/cjs/index.d.ts +2 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/kysely.d.ts +7 -6
- package/dist/cjs/kysely.js +8 -6
- package/dist/cjs/migration/migration.js +11 -10
- package/dist/cjs/operation-node/alter-column-node.d.ts +2 -2
- package/dist/cjs/operation-node/alter-column-node.js +2 -2
- package/dist/cjs/operation-node/alter-table-node.d.ts +2 -2
- package/dist/cjs/operation-node/alter-table-node.js +2 -2
- package/dist/cjs/operation-node/column-definition-node.d.ts +2 -2
- package/dist/cjs/operation-node/column-definition-node.js +2 -2
- package/dist/cjs/operation-node/create-index-node.d.ts +2 -2
- package/dist/cjs/operation-node/create-index-node.js +2 -2
- package/dist/cjs/operation-node/create-table-node.d.ts +2 -1
- package/dist/cjs/operation-node/create-table-node.js +1 -5
- package/dist/cjs/operation-node/drop-index-node.d.ts +3 -3
- package/dist/cjs/operation-node/drop-index-node.js +2 -2
- package/dist/cjs/operation-node/foreign-key-constraint-node.d.ts +12 -1
- package/dist/cjs/operation-node/foreign-key-constraint-node.js +6 -0
- package/dist/cjs/operation-node/insert-query-node.d.ts +5 -2
- package/dist/cjs/operation-node/insert-query-node.js +2 -9
- package/dist/cjs/operation-node/join-node.d.ts +1 -0
- package/dist/cjs/operation-node/join-node.js +8 -0
- package/dist/cjs/operation-node/on-conflict-node.d.ts +2 -2
- package/dist/cjs/operation-node/on-conflict-node.js +2 -2
- package/dist/cjs/operation-node/on-duplicate-key-node.d.ts +14 -0
- package/dist/cjs/operation-node/on-duplicate-key-node.js +18 -0
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +12 -0
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-visitor.js +4 -0
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/references-node.d.ts +5 -3
- package/dist/cjs/operation-node/references-node.js +6 -0
- package/dist/cjs/operation-node/table-node.js +2 -2
- package/dist/cjs/parser/data-type-parser.d.ts +5 -0
- package/dist/cjs/parser/data-type-parser.js +11 -0
- package/dist/cjs/parser/default-value-parser.d.ts +6 -0
- package/dist/cjs/parser/default-value-parser.js +11 -0
- package/dist/cjs/parser/filter-parser.d.ts +2 -2
- package/dist/cjs/parser/filter-parser.js +34 -36
- package/dist/cjs/parser/join-parser.d.ts +1 -1
- package/dist/cjs/parser/join-parser.js +9 -11
- package/dist/cjs/parser/parse-context.d.ts +34 -7
- package/dist/cjs/parser/parse-context.js +42 -34
- package/dist/cjs/parser/reference-parser.d.ts +2 -2
- package/dist/cjs/parser/reference-parser.js +16 -12
- package/dist/cjs/parser/select-parser.d.ts +1 -2
- package/dist/cjs/parser/select-parser.js +4 -5
- package/dist/cjs/parser/table-parser.js +11 -6
- package/dist/cjs/parser/update-set-parser.js +1 -1
- package/dist/cjs/parser/value-parser.js +1 -1
- package/dist/cjs/query-builder/{sub-query-builder.d.ts → expression-builder.d.ts} +7 -7
- package/dist/cjs/query-builder/{sub-query-builder.js → expression-builder.js} +6 -10
- package/dist/cjs/query-builder/join-builder.d.ts +2 -2
- package/dist/cjs/query-builder/join-builder.js +8 -12
- package/dist/cjs/query-builder/query-builder.d.ts +47 -8
- package/dist/cjs/query-builder/query-builder.js +163 -91
- package/dist/cjs/query-builder/type-utils.d.ts +5 -5
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +2 -1
- package/dist/cjs/query-compiler/default-query-compiler.js +26 -6
- package/dist/cjs/query-creator.d.ts +2 -2
- package/dist/cjs/query-creator.js +8 -12
- package/dist/cjs/schema/alter-table-builder.d.ts +31 -8
- package/dist/cjs/schema/alter-table-builder.js +80 -7
- package/dist/cjs/schema/column-definition-builder.d.ts +10 -4
- package/dist/cjs/schema/column-definition-builder.js +11 -6
- package/dist/cjs/schema/create-index-builder.d.ts +5 -5
- package/dist/cjs/schema/create-index-builder.js +19 -28
- package/dist/cjs/schema/create-schema-builder.d.ts +5 -5
- package/dist/cjs/schema/create-schema-builder.js +9 -13
- package/dist/cjs/schema/create-table-builder.d.ts +22 -10
- package/dist/cjs/schema/create-table-builder.js +41 -34
- package/dist/cjs/schema/drop-index-builder.d.ts +5 -5
- package/dist/cjs/schema/drop-index-builder.js +11 -16
- package/dist/cjs/schema/drop-schema-builder.d.ts +5 -5
- package/dist/cjs/schema/drop-schema-builder.js +9 -13
- package/dist/cjs/schema/drop-table-builder.d.ts +5 -5
- package/dist/cjs/schema/drop-table-builder.js +9 -13
- package/dist/cjs/schema/foreign-key-constraint-builder.d.ts +14 -0
- package/dist/cjs/schema/foreign-key-constraint-builder.js +26 -0
- package/dist/cjs/transformers/with-schema-transformer.d.ts +0 -5
- package/dist/cjs/transformers/with-schema-transformer.js +21 -21
- package/dist/esm/dialect/dialect-adapter.d.ts +11 -9
- package/dist/esm/dialect/mysql/mysql-dialect.d.ts +1 -1
- package/dist/esm/dialect/mysql/mysql-driver.js +1 -0
- package/dist/esm/dialect/mysql/mysql-introspector.d.ts +0 -1
- package/dist/esm/dialect/mysql/mysql-introspector.js +2 -2
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -4
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -18
- package/dist/esm/dialect/postgres/postgres-introspector.d.ts +0 -1
- package/dist/esm/dialect/postgres/postgres-introspector.js +2 -2
- package/dist/esm/driver/database-connection.d.ts +2 -1
- package/dist/esm/driver/driver.d.ts +1 -1
- package/dist/esm/driver/single-connection-provider.d.ts +0 -1
- package/dist/esm/driver/single-connection-provider.js +2 -2
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/kysely.d.ts +7 -6
- package/dist/esm/kysely.js +8 -6
- package/dist/esm/migration/migration.js +12 -11
- package/dist/esm/operation-node/alter-column-node.d.ts +2 -2
- package/dist/esm/operation-node/alter-column-node.js +2 -2
- package/dist/esm/operation-node/alter-table-node.d.ts +2 -2
- package/dist/esm/operation-node/alter-table-node.js +2 -2
- package/dist/esm/operation-node/column-definition-node.d.ts +2 -2
- package/dist/esm/operation-node/column-definition-node.js +2 -2
- package/dist/esm/operation-node/create-index-node.d.ts +2 -2
- package/dist/esm/operation-node/create-index-node.js +2 -2
- package/dist/esm/operation-node/create-table-node.d.ts +2 -1
- package/dist/esm/operation-node/create-table-node.js +1 -5
- package/dist/esm/operation-node/drop-index-node.d.ts +3 -3
- package/dist/esm/operation-node/drop-index-node.js +2 -2
- package/dist/esm/operation-node/foreign-key-constraint-node.d.ts +12 -1
- package/dist/esm/operation-node/foreign-key-constraint-node.js +6 -0
- package/dist/esm/operation-node/insert-query-node.d.ts +5 -2
- package/dist/esm/operation-node/insert-query-node.js +2 -9
- package/dist/esm/operation-node/join-node.d.ts +1 -0
- package/dist/esm/operation-node/join-node.js +8 -0
- package/dist/esm/operation-node/on-conflict-node.d.ts +2 -2
- package/dist/esm/operation-node/on-conflict-node.js +2 -2
- package/dist/esm/operation-node/on-duplicate-key-node.d.ts +14 -0
- package/dist/esm/operation-node/on-duplicate-key-node.js +15 -0
- package/dist/esm/operation-node/operation-node-transformer.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +12 -0
- package/dist/esm/operation-node/operation-node-visitor.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-visitor.js +4 -0
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/references-node.d.ts +5 -3
- package/dist/esm/operation-node/references-node.js +6 -0
- package/dist/esm/operation-node/table-node.js +2 -2
- package/dist/esm/parser/data-type-parser.d.ts +5 -0
- package/dist/esm/parser/data-type-parser.js +7 -0
- package/dist/esm/parser/default-value-parser.d.ts +6 -0
- package/dist/esm/parser/default-value-parser.js +7 -0
- package/dist/esm/parser/filter-parser.d.ts +2 -2
- package/dist/esm/parser/filter-parser.js +31 -33
- package/dist/esm/parser/join-parser.d.ts +1 -1
- package/dist/esm/parser/join-parser.js +7 -9
- package/dist/esm/parser/parse-context.d.ts +34 -7
- package/dist/esm/parser/parse-context.js +40 -32
- package/dist/esm/parser/reference-parser.d.ts +2 -2
- package/dist/esm/parser/reference-parser.js +16 -12
- package/dist/esm/parser/select-parser.d.ts +1 -2
- package/dist/esm/parser/select-parser.js +3 -3
- package/dist/esm/parser/table-parser.js +11 -6
- package/dist/esm/parser/update-set-parser.js +1 -1
- package/dist/esm/parser/value-parser.js +1 -1
- package/dist/esm/query-builder/{sub-query-builder.d.ts → expression-builder.d.ts} +7 -7
- package/dist/esm/query-builder/{sub-query-builder.js → expression-builder.js} +4 -8
- package/dist/esm/query-builder/join-builder.d.ts +2 -2
- package/dist/esm/query-builder/join-builder.js +9 -13
- package/dist/esm/query-builder/query-builder.d.ts +47 -8
- package/dist/esm/query-builder/query-builder.js +165 -93
- package/dist/esm/query-builder/type-utils.d.ts +5 -5
- package/dist/esm/query-compiler/default-query-compiler.d.ts +2 -1
- package/dist/esm/query-compiler/default-query-compiler.js +27 -7
- package/dist/esm/query-creator.d.ts +2 -2
- package/dist/esm/query-creator.js +8 -12
- package/dist/esm/schema/alter-table-builder.d.ts +31 -8
- package/dist/esm/schema/alter-table-builder.js +78 -6
- package/dist/esm/schema/column-definition-builder.d.ts +10 -4
- package/dist/esm/schema/column-definition-builder.js +12 -7
- package/dist/esm/schema/create-index-builder.d.ts +5 -5
- package/dist/esm/schema/create-index-builder.js +19 -28
- package/dist/esm/schema/create-schema-builder.d.ts +5 -5
- package/dist/esm/schema/create-schema-builder.js +9 -13
- package/dist/esm/schema/create-table-builder.d.ts +22 -10
- package/dist/esm/schema/create-table-builder.js +41 -34
- package/dist/esm/schema/drop-index-builder.d.ts +5 -5
- package/dist/esm/schema/drop-index-builder.js +11 -16
- package/dist/esm/schema/drop-schema-builder.d.ts +5 -5
- package/dist/esm/schema/drop-schema-builder.js +9 -13
- package/dist/esm/schema/drop-table-builder.d.ts +5 -5
- package/dist/esm/schema/drop-table-builder.js +9 -13
- package/dist/esm/schema/foreign-key-constraint-builder.d.ts +14 -0
- package/dist/esm/schema/foreign-key-constraint-builder.js +22 -0
- package/dist/esm/transformers/with-schema-transformer.d.ts +0 -5
- package/dist/esm/transformers/with-schema-transformer.js +21 -21
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
2
|
-
import {
|
|
3
|
-
import { parseSelectExpressionOrList,
|
|
4
|
-
import {
|
|
2
|
+
import { parseJoin, } from '../parser/join-parser.js';
|
|
3
|
+
import { parseSelectExpressionOrList, parseSelectAll, } from '../parser/select-parser.js';
|
|
4
|
+
import { parseExistFilter, parseReferenceFilter, parseWhereFilter, parseHavingFilter, parseNotExistFilter, } from '../parser/filter-parser.js';
|
|
5
5
|
import { parseInsertObjectOrList, } from '../parser/insert-values-parser.js';
|
|
6
6
|
import { parseReferenceExpression, parseReferenceExpressionOrList, } from '../parser/reference-parser.js';
|
|
7
7
|
import { OrderByItemNode, } from '../operation-node/order-by-item-node.js';
|
|
@@ -15,9 +15,9 @@ import { preventAwait } from '../util/prevent-await.js';
|
|
|
15
15
|
import { LimitNode } from '../operation-node/limit-node.js';
|
|
16
16
|
import { OffsetNode } from '../operation-node/offset-node.js';
|
|
17
17
|
import { parseOnConflictDoNothing, parseOnConflictUpdate, } from '../parser/on-conflict-parser.js';
|
|
18
|
-
import { DeleteQueryNode } from '../index.js';
|
|
19
18
|
import { freeze } from '../util/object-utils.js';
|
|
20
|
-
import {
|
|
19
|
+
import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
|
|
20
|
+
import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
|
|
21
21
|
/**
|
|
22
22
|
* The main query builder class.
|
|
23
23
|
*
|
|
@@ -39,10 +39,10 @@ export class QueryBuilder {
|
|
|
39
39
|
this.#props = freeze(props);
|
|
40
40
|
}
|
|
41
41
|
where(...args) {
|
|
42
|
-
|
|
42
|
+
assertCanHaveWhereClause(this.#props.queryNode);
|
|
43
43
|
return new QueryBuilder({
|
|
44
44
|
...this.#props,
|
|
45
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseWhereFilter(this.#parseContext, args)),
|
|
45
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseWhereFilter(this.#props.parseContext, args)),
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
/**
|
|
@@ -97,17 +97,17 @@ export class QueryBuilder {
|
|
|
97
97
|
* from "person"
|
|
98
98
|
*/
|
|
99
99
|
whereRef(lhs, op, rhs) {
|
|
100
|
-
|
|
100
|
+
assertCanHaveWhereClause(this.#props.queryNode);
|
|
101
101
|
return new QueryBuilder({
|
|
102
102
|
...this.#props,
|
|
103
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseReferenceFilter(this.#parseContext, lhs, op, rhs)),
|
|
103
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
|
|
104
104
|
});
|
|
105
105
|
}
|
|
106
106
|
orWhere(...args) {
|
|
107
|
-
|
|
107
|
+
assertCanHaveWhereClause(this.#props.queryNode);
|
|
108
108
|
return new QueryBuilder({
|
|
109
109
|
...this.#props,
|
|
110
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseWhereFilter(this.#parseContext, args)),
|
|
110
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseWhereFilter(this.#props.parseContext, args)),
|
|
111
111
|
});
|
|
112
112
|
}
|
|
113
113
|
/**
|
|
@@ -117,10 +117,10 @@ export class QueryBuilder {
|
|
|
117
117
|
* Also see {@link QueryBuilder.orWhere | orWhere} and {@link QueryBuilder.where | where}.
|
|
118
118
|
*/
|
|
119
119
|
orWhereRef(lhs, op, rhs) {
|
|
120
|
-
|
|
120
|
+
assertCanHaveWhereClause(this.#props.queryNode);
|
|
121
121
|
return new QueryBuilder({
|
|
122
122
|
...this.#props,
|
|
123
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseReferenceFilter(this.#parseContext, lhs, op, rhs)),
|
|
123
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
|
|
124
124
|
});
|
|
125
125
|
}
|
|
126
126
|
/**
|
|
@@ -183,47 +183,47 @@ export class QueryBuilder {
|
|
|
183
183
|
* ```
|
|
184
184
|
*/
|
|
185
185
|
whereExists(arg) {
|
|
186
|
-
|
|
186
|
+
assertCanHaveWhereClause(this.#props.queryNode);
|
|
187
187
|
return new QueryBuilder({
|
|
188
188
|
...this.#props,
|
|
189
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And',
|
|
189
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseExistFilter(this.#props.parseContext, arg)),
|
|
190
190
|
});
|
|
191
191
|
}
|
|
192
192
|
/**
|
|
193
193
|
* Just like {@link QueryBuilder.whereExists | whereExists} but creates a `not exists` clause.
|
|
194
194
|
*/
|
|
195
195
|
whereNotExists(arg) {
|
|
196
|
-
|
|
196
|
+
assertCanHaveWhereClause(this.#props.queryNode);
|
|
197
197
|
return new QueryBuilder({
|
|
198
198
|
...this.#props,
|
|
199
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And',
|
|
199
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'And', parseNotExistFilter(this.#props.parseContext, arg)),
|
|
200
200
|
});
|
|
201
201
|
}
|
|
202
202
|
/**
|
|
203
203
|
* Just like {@link QueryBuilder.whereExists | whereExists} but creates a `or exists` clause.
|
|
204
204
|
*/
|
|
205
205
|
orWhereExists(arg) {
|
|
206
|
-
|
|
206
|
+
assertCanHaveWhereClause(this.#props.queryNode);
|
|
207
207
|
return new QueryBuilder({
|
|
208
208
|
...this.#props,
|
|
209
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or',
|
|
209
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseExistFilter(this.#props.parseContext, arg)),
|
|
210
210
|
});
|
|
211
211
|
}
|
|
212
212
|
/**
|
|
213
213
|
* Just like {@link QueryBuilder.whereExists | whereExists} but creates a `or not exists` clause.
|
|
214
214
|
*/
|
|
215
215
|
orWhereNotExists(arg) {
|
|
216
|
-
|
|
216
|
+
assertCanHaveWhereClause(this.#props.queryNode);
|
|
217
217
|
return new QueryBuilder({
|
|
218
218
|
...this.#props,
|
|
219
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or',
|
|
219
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, 'Or', parseNotExistFilter(this.#props.parseContext, arg)),
|
|
220
220
|
});
|
|
221
221
|
}
|
|
222
222
|
having(...args) {
|
|
223
|
-
|
|
223
|
+
assertCanHaveHavingClause(this.#props.queryNode);
|
|
224
224
|
return new QueryBuilder({
|
|
225
225
|
...this.#props,
|
|
226
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseHavingFilter(this.#parseContext, args)),
|
|
226
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseHavingFilter(this.#props.parseContext, args)),
|
|
227
227
|
});
|
|
228
228
|
}
|
|
229
229
|
/**
|
|
@@ -231,17 +231,17 @@ export class QueryBuilder {
|
|
|
231
231
|
* instead of a `where` statement.
|
|
232
232
|
*/
|
|
233
233
|
havingRef(lhs, op, rhs) {
|
|
234
|
-
|
|
234
|
+
assertCanHaveHavingClause(this.#props.queryNode);
|
|
235
235
|
return new QueryBuilder({
|
|
236
236
|
...this.#props,
|
|
237
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseReferenceFilter(this.#parseContext, lhs, op, rhs)),
|
|
237
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
|
|
238
238
|
});
|
|
239
239
|
}
|
|
240
240
|
orHaving(...args) {
|
|
241
|
-
|
|
241
|
+
assertCanHaveHavingClause(this.#props.queryNode);
|
|
242
242
|
return new QueryBuilder({
|
|
243
243
|
...this.#props,
|
|
244
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseHavingFilter(this.#parseContext, args)),
|
|
244
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseHavingFilter(this.#props.parseContext, args)),
|
|
245
245
|
});
|
|
246
246
|
}
|
|
247
247
|
/**
|
|
@@ -249,10 +249,10 @@ export class QueryBuilder {
|
|
|
249
249
|
* instead of a `where` statement.
|
|
250
250
|
*/
|
|
251
251
|
orHavingRef(lhs, op, rhs) {
|
|
252
|
-
|
|
252
|
+
assertCanHaveHavingClause(this.#props.queryNode);
|
|
253
253
|
return new QueryBuilder({
|
|
254
254
|
...this.#props,
|
|
255
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseReferenceFilter(this.#parseContext, lhs, op, rhs)),
|
|
255
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
|
|
256
256
|
});
|
|
257
257
|
}
|
|
258
258
|
/**
|
|
@@ -260,10 +260,10 @@ export class QueryBuilder {
|
|
|
260
260
|
* instead of a `where` statement.
|
|
261
261
|
*/
|
|
262
262
|
havingExists(arg) {
|
|
263
|
-
|
|
263
|
+
assertCanHaveHavingClause(this.#props.queryNode);
|
|
264
264
|
return new QueryBuilder({
|
|
265
265
|
...this.#props,
|
|
266
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And',
|
|
266
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseExistFilter(this.#props.parseContext, arg)),
|
|
267
267
|
});
|
|
268
268
|
}
|
|
269
269
|
/**
|
|
@@ -271,10 +271,10 @@ export class QueryBuilder {
|
|
|
271
271
|
* instead of a `where` statement.
|
|
272
272
|
*/
|
|
273
273
|
havingNotExist(arg) {
|
|
274
|
-
|
|
274
|
+
assertCanHaveHavingClause(this.#props.queryNode);
|
|
275
275
|
return new QueryBuilder({
|
|
276
276
|
...this.#props,
|
|
277
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And',
|
|
277
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'And', parseNotExistFilter(this.#props.parseContext, arg)),
|
|
278
278
|
});
|
|
279
279
|
}
|
|
280
280
|
/**
|
|
@@ -282,10 +282,10 @@ export class QueryBuilder {
|
|
|
282
282
|
* instead of a `where` statement.
|
|
283
283
|
*/
|
|
284
284
|
orHavingExists(arg) {
|
|
285
|
-
|
|
285
|
+
assertCanHaveHavingClause(this.#props.queryNode);
|
|
286
286
|
return new QueryBuilder({
|
|
287
287
|
...this.#props,
|
|
288
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or',
|
|
288
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseExistFilter(this.#props.parseContext, arg)),
|
|
289
289
|
});
|
|
290
290
|
}
|
|
291
291
|
/**
|
|
@@ -293,24 +293,24 @@ export class QueryBuilder {
|
|
|
293
293
|
* instead of a `where` statement.
|
|
294
294
|
*/
|
|
295
295
|
orHavingNotExists(arg) {
|
|
296
|
-
|
|
296
|
+
assertCanHaveHavingClause(this.#props.queryNode);
|
|
297
297
|
return new QueryBuilder({
|
|
298
298
|
...this.#props,
|
|
299
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or',
|
|
299
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, 'Or', parseNotExistFilter(this.#props.parseContext, arg)),
|
|
300
300
|
});
|
|
301
301
|
}
|
|
302
302
|
select(selection) {
|
|
303
|
-
|
|
303
|
+
assertCanHaveSelectClause(this.#props.queryNode);
|
|
304
304
|
return new QueryBuilder({
|
|
305
305
|
...this.#props,
|
|
306
|
-
queryNode: SelectQueryNode.cloneWithSelections(this.#props.queryNode, parseSelectExpressionOrList(this.#parseContext, selection)),
|
|
306
|
+
queryNode: SelectQueryNode.cloneWithSelections(this.#props.queryNode, parseSelectExpressionOrList(this.#props.parseContext, selection)),
|
|
307
307
|
});
|
|
308
308
|
}
|
|
309
309
|
distinctOn(selection) {
|
|
310
|
-
|
|
310
|
+
assertCanHaveSelectClause(this.#props.queryNode);
|
|
311
311
|
return new QueryBuilder({
|
|
312
312
|
...this.#props,
|
|
313
|
-
queryNode: SelectQueryNode.cloneWithDistinctOnSelections(this.#props.queryNode, parseSelectExpressionOrList(this.#parseContext, selection)),
|
|
313
|
+
queryNode: SelectQueryNode.cloneWithDistinctOnSelections(this.#props.queryNode, parseSelectExpressionOrList(this.#props.parseContext, selection)),
|
|
314
314
|
});
|
|
315
315
|
}
|
|
316
316
|
/**
|
|
@@ -331,7 +331,7 @@ export class QueryBuilder {
|
|
|
331
331
|
* ```
|
|
332
332
|
*/
|
|
333
333
|
distinct() {
|
|
334
|
-
|
|
334
|
+
assertCanHaveSelectClause(this.#props.queryNode);
|
|
335
335
|
return new QueryBuilder({
|
|
336
336
|
...this.#props,
|
|
337
337
|
queryNode: SelectQueryNode.cloneWithDistinct(this.#props.queryNode),
|
|
@@ -341,7 +341,7 @@ export class QueryBuilder {
|
|
|
341
341
|
* Adds the `for update` option to a select query on supported databases.
|
|
342
342
|
*/
|
|
343
343
|
forUpdate() {
|
|
344
|
-
|
|
344
|
+
assertCanHaveSelectClause(this.#props.queryNode);
|
|
345
345
|
return new QueryBuilder({
|
|
346
346
|
...this.#props,
|
|
347
347
|
queryNode: SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'ForUpdate'),
|
|
@@ -351,7 +351,7 @@ export class QueryBuilder {
|
|
|
351
351
|
* Adds the `for share` option to a select query on supported databases.
|
|
352
352
|
*/
|
|
353
353
|
forShare() {
|
|
354
|
-
|
|
354
|
+
assertCanHaveSelectClause(this.#props.queryNode);
|
|
355
355
|
return new QueryBuilder({
|
|
356
356
|
...this.#props,
|
|
357
357
|
queryNode: SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'ForShare'),
|
|
@@ -361,7 +361,7 @@ export class QueryBuilder {
|
|
|
361
361
|
* Adds the `for key share` option to a select query on supported databases.
|
|
362
362
|
*/
|
|
363
363
|
forKeyShare() {
|
|
364
|
-
|
|
364
|
+
assertCanHaveSelectClause(this.#props.queryNode);
|
|
365
365
|
return new QueryBuilder({
|
|
366
366
|
...this.#props,
|
|
367
367
|
queryNode: SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'ForKeyShare'),
|
|
@@ -371,7 +371,7 @@ export class QueryBuilder {
|
|
|
371
371
|
* Adds the `for no key update` option to a select query on supported databases.
|
|
372
372
|
*/
|
|
373
373
|
forNoKeyUpdate() {
|
|
374
|
-
|
|
374
|
+
assertCanHaveSelectClause(this.#props.queryNode);
|
|
375
375
|
return new QueryBuilder({
|
|
376
376
|
...this.#props,
|
|
377
377
|
queryNode: SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'ForNoKeyUpdate'),
|
|
@@ -381,7 +381,7 @@ export class QueryBuilder {
|
|
|
381
381
|
* Adds the `skip locked` option to a select query on supported databases.
|
|
382
382
|
*/
|
|
383
383
|
skipLocked() {
|
|
384
|
-
|
|
384
|
+
assertCanHaveSelectClause(this.#props.queryNode);
|
|
385
385
|
return new QueryBuilder({
|
|
386
386
|
...this.#props,
|
|
387
387
|
queryNode: SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'SkipLocked'),
|
|
@@ -391,66 +391,129 @@ export class QueryBuilder {
|
|
|
391
391
|
* Adds the `nowait` option to a select query on supported databases.
|
|
392
392
|
*/
|
|
393
393
|
noWait() {
|
|
394
|
-
|
|
394
|
+
assertCanHaveSelectClause(this.#props.queryNode);
|
|
395
395
|
return new QueryBuilder({
|
|
396
396
|
...this.#props,
|
|
397
397
|
queryNode: SelectQueryNode.cloneWithModifier(this.#props.queryNode, 'NoWait'),
|
|
398
398
|
});
|
|
399
399
|
}
|
|
400
400
|
selectAll(table) {
|
|
401
|
-
|
|
401
|
+
assertCanHaveSelectClause(this.#props.queryNode);
|
|
402
402
|
return new QueryBuilder({
|
|
403
403
|
...this.#props,
|
|
404
|
-
queryNode: SelectQueryNode.cloneWithSelections(this.#props.queryNode,
|
|
404
|
+
queryNode: SelectQueryNode.cloneWithSelections(this.#props.queryNode, parseSelectAll(table)),
|
|
405
405
|
});
|
|
406
406
|
}
|
|
407
407
|
innerJoin(...args) {
|
|
408
|
-
|
|
408
|
+
assertCanHaveJoins(this.#props.queryNode);
|
|
409
409
|
return new QueryBuilder({
|
|
410
410
|
...this.#props,
|
|
411
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode,
|
|
411
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'InnerJoin', args)),
|
|
412
412
|
});
|
|
413
413
|
}
|
|
414
414
|
leftJoin(...args) {
|
|
415
|
-
|
|
415
|
+
assertCanHaveJoins(this.#props.queryNode);
|
|
416
416
|
return new QueryBuilder({
|
|
417
417
|
...this.#props,
|
|
418
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode,
|
|
418
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'LeftJoin', args)),
|
|
419
419
|
});
|
|
420
420
|
}
|
|
421
421
|
rightJoin(...args) {
|
|
422
|
-
|
|
422
|
+
assertCanHaveJoins(this.#props.queryNode);
|
|
423
423
|
return new QueryBuilder({
|
|
424
424
|
...this.#props,
|
|
425
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode,
|
|
425
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'RightJoin', args)),
|
|
426
426
|
});
|
|
427
427
|
}
|
|
428
428
|
fullJoin(...args) {
|
|
429
|
-
|
|
429
|
+
assertCanHaveJoins(this.#props.queryNode);
|
|
430
430
|
return new QueryBuilder({
|
|
431
431
|
...this.#props,
|
|
432
|
-
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode,
|
|
432
|
+
queryNode: QueryNode.cloneWithJoin(this.#props.queryNode, parseJoin(this.#props.parseContext, 'FullJoin', args)),
|
|
433
433
|
});
|
|
434
434
|
}
|
|
435
435
|
values(args) {
|
|
436
|
-
|
|
436
|
+
assertCanHaveInsertValues(this.#props.queryNode);
|
|
437
|
+
const [columns, values] = parseInsertObjectOrList(args);
|
|
437
438
|
return new QueryBuilder({
|
|
438
439
|
...this.#props,
|
|
439
|
-
queryNode: InsertQueryNode.
|
|
440
|
+
queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
|
|
441
|
+
columns,
|
|
442
|
+
values,
|
|
443
|
+
}),
|
|
440
444
|
});
|
|
441
445
|
}
|
|
442
446
|
onConflictDoNothing(target) {
|
|
443
|
-
|
|
447
|
+
assertCanHaveOnConflict(this.#props.queryNode);
|
|
444
448
|
return new QueryBuilder({
|
|
445
449
|
...this.#props,
|
|
446
|
-
queryNode: InsertQueryNode.
|
|
450
|
+
queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
|
|
451
|
+
onConflict: parseOnConflictDoNothing(target),
|
|
452
|
+
}),
|
|
453
|
+
});
|
|
454
|
+
}
|
|
455
|
+
/**
|
|
456
|
+
* Changes an `insert into` query to an `insert ignore into` query.
|
|
457
|
+
*
|
|
458
|
+
* If you use the ignore modifier, ignorable errors that occur while executing the
|
|
459
|
+
* insert statement are ignored. For example, without ignore, a row that duplicates
|
|
460
|
+
* an existing unique index or primary key value in the table causes a duplicate-key
|
|
461
|
+
* error and the statement is aborted. With ignore, the row is discarded and no error
|
|
462
|
+
* occurs.
|
|
463
|
+
*
|
|
464
|
+
* This is only supported on some dialects like MySQL. On most dialects you should
|
|
465
|
+
* use the {@link onConflictDoNothing} method.
|
|
466
|
+
*
|
|
467
|
+
* @example
|
|
468
|
+
* ```ts
|
|
469
|
+
* await db.insertInto('person')
|
|
470
|
+
* .ignore()
|
|
471
|
+
* .values(values)
|
|
472
|
+
* .execute()
|
|
473
|
+
* ```
|
|
474
|
+
*/
|
|
475
|
+
ignore() {
|
|
476
|
+
assertCanHaveInsertIgnore(this.#props.queryNode);
|
|
477
|
+
return new QueryBuilder({
|
|
478
|
+
...this.#props,
|
|
479
|
+
queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
|
|
480
|
+
ignore: true,
|
|
481
|
+
}),
|
|
447
482
|
});
|
|
448
483
|
}
|
|
449
484
|
onConflictUpdate(target, updates) {
|
|
450
|
-
|
|
485
|
+
assertCanHaveOnConflict(this.#props.queryNode);
|
|
451
486
|
return new QueryBuilder({
|
|
452
487
|
...this.#props,
|
|
453
|
-
queryNode: InsertQueryNode.
|
|
488
|
+
queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
|
|
489
|
+
onConflict: parseOnConflictUpdate(this.#props.parseContext, target, updates),
|
|
490
|
+
}),
|
|
491
|
+
});
|
|
492
|
+
}
|
|
493
|
+
/**
|
|
494
|
+
* Adds `on duplicate key update` to an insert query.
|
|
495
|
+
*
|
|
496
|
+
* If you specify `on duplicate key update`, and a row is inserted that would cause
|
|
497
|
+
* a duplicate value in a unique index or primary key, an update of the old row occurs.
|
|
498
|
+
*
|
|
499
|
+
* This is only implemented by some dialects like MySQL. On most dialects you should
|
|
500
|
+
* use {@link onConflictUpdate} instead.
|
|
501
|
+
*
|
|
502
|
+
* @example
|
|
503
|
+
* ```ts
|
|
504
|
+
* await db
|
|
505
|
+
* .insertInto('person')
|
|
506
|
+
* .values(values)
|
|
507
|
+
* .onDuplicateKeyUpdate({ species: 'hamster' })
|
|
508
|
+
* ```
|
|
509
|
+
*/
|
|
510
|
+
onDuplicateKeyUpdate(updates) {
|
|
511
|
+
assertCanHaveOnDuplicateKey(this.#props.queryNode);
|
|
512
|
+
return new QueryBuilder({
|
|
513
|
+
...this.#props,
|
|
514
|
+
queryNode: InsertQueryNode.cloneWith(this.#props.queryNode, {
|
|
515
|
+
onDuplicateKey: OnDuplicateKeyNode.create(parseUpdateObject(this.#props.parseContext, updates)),
|
|
516
|
+
}),
|
|
454
517
|
});
|
|
455
518
|
}
|
|
456
519
|
/**
|
|
@@ -536,17 +599,17 @@ export class QueryBuilder {
|
|
|
536
599
|
* ```
|
|
537
600
|
*/
|
|
538
601
|
set(row) {
|
|
539
|
-
|
|
602
|
+
assertCanHaveUpdates(this.#props.queryNode);
|
|
540
603
|
return new QueryBuilder({
|
|
541
604
|
...this.#props,
|
|
542
|
-
queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdateObject(this.#parseContext, row)),
|
|
605
|
+
queryNode: UpdateQueryNode.cloneWithUpdates(this.#props.queryNode, parseUpdateObject(this.#props.parseContext, row)),
|
|
543
606
|
});
|
|
544
607
|
}
|
|
545
608
|
returning(selection) {
|
|
546
|
-
|
|
609
|
+
assertCanHaveReturningClause(this.#props.queryNode);
|
|
547
610
|
return new QueryBuilder({
|
|
548
611
|
...this.#props,
|
|
549
|
-
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(this.#parseContext, selection)),
|
|
612
|
+
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectExpressionOrList(this.#props.parseContext, selection)),
|
|
550
613
|
});
|
|
551
614
|
}
|
|
552
615
|
/**
|
|
@@ -554,10 +617,10 @@ export class QueryBuilder {
|
|
|
554
617
|
* that support `returning` such as postgres.
|
|
555
618
|
*/
|
|
556
619
|
returningAll() {
|
|
557
|
-
|
|
620
|
+
assertCanHaveReturningClause(this.#props.queryNode);
|
|
558
621
|
return new QueryBuilder({
|
|
559
622
|
...this.#props,
|
|
560
|
-
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode,
|
|
623
|
+
queryNode: QueryNode.cloneWithReturning(this.#props.queryNode, parseSelectAll()),
|
|
561
624
|
});
|
|
562
625
|
}
|
|
563
626
|
/**
|
|
@@ -647,17 +710,17 @@ export class QueryBuilder {
|
|
|
647
710
|
* ```
|
|
648
711
|
*/
|
|
649
712
|
orderBy(orderBy, direction = 'asc') {
|
|
650
|
-
|
|
713
|
+
assertCanHaveOrderByClause(this.#props.queryNode);
|
|
651
714
|
return new QueryBuilder({
|
|
652
715
|
...this.#props,
|
|
653
|
-
queryNode: SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, OrderByItemNode.create(parseReferenceExpression(this.#parseContext, orderBy), direction)),
|
|
716
|
+
queryNode: SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, OrderByItemNode.create(parseReferenceExpression(this.#props.parseContext, orderBy), direction)),
|
|
654
717
|
});
|
|
655
718
|
}
|
|
656
719
|
groupBy(orderBy) {
|
|
657
|
-
|
|
720
|
+
assertCanHaveGroupByClause(this.#props.queryNode);
|
|
658
721
|
return new QueryBuilder({
|
|
659
722
|
...this.#props,
|
|
660
|
-
queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, parseReferenceExpressionOrList(this.#parseContext, orderBy).map(GroupByItemNode.create)),
|
|
723
|
+
queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, parseReferenceExpressionOrList(this.#props.parseContext, orderBy).map(GroupByItemNode.create)),
|
|
661
724
|
});
|
|
662
725
|
}
|
|
663
726
|
/**
|
|
@@ -685,7 +748,7 @@ export class QueryBuilder {
|
|
|
685
748
|
* ```
|
|
686
749
|
*/
|
|
687
750
|
limit(limit) {
|
|
688
|
-
|
|
751
|
+
assertCanHaveLimit(this.#props.queryNode);
|
|
689
752
|
return new QueryBuilder({
|
|
690
753
|
...this.#props,
|
|
691
754
|
queryNode: SelectQueryNode.cloneWithLimit(this.#props.queryNode, LimitNode.create(limit)),
|
|
@@ -706,7 +769,7 @@ export class QueryBuilder {
|
|
|
706
769
|
* ```
|
|
707
770
|
*/
|
|
708
771
|
offset(offset) {
|
|
709
|
-
|
|
772
|
+
assertCanHaveOffset(this.#props.queryNode);
|
|
710
773
|
return new QueryBuilder({
|
|
711
774
|
...this.#props,
|
|
712
775
|
queryNode: SelectQueryNode.cloneWithOffset(this.#props.queryNode, OffsetNode.create(offset)),
|
|
@@ -756,7 +819,8 @@ export class QueryBuilder {
|
|
|
756
819
|
const compildQuery = this.#props.executor.compileQuery(node, this.#props.queryId);
|
|
757
820
|
const result = await this.#props.executor.executeQuery(compildQuery, this.#props.queryId);
|
|
758
821
|
if (InsertQueryNode.is(node)) {
|
|
759
|
-
if (this.#props.adapter.supportsReturning &&
|
|
822
|
+
if (this.#props.parseContext.adapter.supportsReturning &&
|
|
823
|
+
node.returning) {
|
|
760
824
|
return result.rows;
|
|
761
825
|
}
|
|
762
826
|
else if (result.insertedPrimaryKey != null) {
|
|
@@ -767,7 +831,8 @@ export class QueryBuilder {
|
|
|
767
831
|
}
|
|
768
832
|
}
|
|
769
833
|
else if (UpdateQueryNode.is(node) || DeleteQueryNode.is(node)) {
|
|
770
|
-
if (this.#props.adapter.supportsReturning &&
|
|
834
|
+
if (this.#props.parseContext.adapter.supportsReturning &&
|
|
835
|
+
node.returning) {
|
|
771
836
|
return result.rows;
|
|
772
837
|
}
|
|
773
838
|
else if (result.numUpdatedOrDeletedRows != null) {
|
|
@@ -804,9 +869,6 @@ export class QueryBuilder {
|
|
|
804
869
|
}
|
|
805
870
|
return result;
|
|
806
871
|
}
|
|
807
|
-
get #parseContext() {
|
|
808
|
-
return createParseContext(this.#props.adapter);
|
|
809
|
-
}
|
|
810
872
|
}
|
|
811
873
|
preventAwait(QueryBuilder, "don't await QueryBuilder instances directly. To execute the query you need to call `execute` or `executeTakeFirst`.");
|
|
812
874
|
/**
|
|
@@ -848,62 +910,72 @@ export class NoResultError extends Error {
|
|
|
848
910
|
this.node = node;
|
|
849
911
|
}
|
|
850
912
|
}
|
|
851
|
-
function
|
|
913
|
+
function assertCanHaveWhereClause(node) {
|
|
852
914
|
if (!QueryNode.isFilterable(node)) {
|
|
853
915
|
throw new Error('only select, delete and update queries can have a where clause');
|
|
854
916
|
}
|
|
855
917
|
}
|
|
856
|
-
function
|
|
918
|
+
function assertCanHaveHavingClause(node) {
|
|
857
919
|
if (!SelectQueryNode.is(node)) {
|
|
858
920
|
throw new Error('only select queries can have a having clause');
|
|
859
921
|
}
|
|
860
922
|
}
|
|
861
|
-
function
|
|
923
|
+
function assertCanHaveSelectClause(node) {
|
|
862
924
|
if (!SelectQueryNode.is(node)) {
|
|
863
925
|
throw new Error('only a select query can have selections');
|
|
864
926
|
}
|
|
865
927
|
}
|
|
866
|
-
function
|
|
928
|
+
function assertCanHaveJoins(node) {
|
|
867
929
|
if (!QueryNode.isFilterable(node)) {
|
|
868
930
|
throw new Error('only select, delete and update queries can have joins');
|
|
869
931
|
}
|
|
870
932
|
}
|
|
871
|
-
function
|
|
933
|
+
function assertCanHaveInsertValues(node) {
|
|
872
934
|
if (!InsertQueryNode.is(node)) {
|
|
873
935
|
throw new Error('only an insert query can have insert values');
|
|
874
936
|
}
|
|
875
937
|
}
|
|
876
|
-
function
|
|
938
|
+
function assertCanHaveInsertIgnore(node) {
|
|
939
|
+
if (!InsertQueryNode.is(node)) {
|
|
940
|
+
throw new Error('only an insert query can have the ignore clause');
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
function assertCanHaveOnConflict(node) {
|
|
877
944
|
if (!InsertQueryNode.is(node)) {
|
|
878
945
|
throw new Error('only an insert query can have an on conflict clause');
|
|
879
946
|
}
|
|
880
947
|
}
|
|
881
|
-
function
|
|
948
|
+
function assertCanHaveOnDuplicateKey(node) {
|
|
949
|
+
if (!InsertQueryNode.is(node)) {
|
|
950
|
+
throw new Error('only an insert query can have an on duplicate key clause');
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
function assertCanHaveUpdates(node) {
|
|
882
954
|
if (!UpdateQueryNode.is(node)) {
|
|
883
955
|
throw new Error('only an update query can set values');
|
|
884
956
|
}
|
|
885
957
|
}
|
|
886
|
-
function
|
|
958
|
+
function assertCanHaveReturningClause(node) {
|
|
887
959
|
if (!QueryNode.isMutating(node)) {
|
|
888
960
|
throw new Error('only an insert, delete and update queries can have a returning clause');
|
|
889
961
|
}
|
|
890
962
|
}
|
|
891
|
-
function
|
|
963
|
+
function assertCanHaveOrderByClause(node) {
|
|
892
964
|
if (!SelectQueryNode.is(node)) {
|
|
893
965
|
throw new Error('only a select query can have an order by clause');
|
|
894
966
|
}
|
|
895
967
|
}
|
|
896
|
-
function
|
|
968
|
+
function assertCanHaveGroupByClause(node) {
|
|
897
969
|
if (!SelectQueryNode.is(node)) {
|
|
898
970
|
throw new Error('only a select query can have a group by clause');
|
|
899
971
|
}
|
|
900
972
|
}
|
|
901
|
-
function
|
|
973
|
+
function assertCanHaveLimit(node) {
|
|
902
974
|
if (!SelectQueryNode.is(node)) {
|
|
903
975
|
throw new Error('only a select query can have a limit');
|
|
904
976
|
}
|
|
905
977
|
}
|
|
906
|
-
function
|
|
978
|
+
function assertCanHaveOffset(node) {
|
|
907
979
|
if (!SelectQueryNode.is(node)) {
|
|
908
980
|
throw new Error('only a select query can have an offset');
|
|
909
981
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AliasedRawBuilder, RawBuilder } from '../raw-builder/raw-builder.js';
|
|
2
2
|
import { AliasedQueryBuilder, QueryBuilder } from './query-builder.js';
|
|
3
|
-
import {
|
|
3
|
+
import { ExpressionBuilder } from './expression-builder.js';
|
|
4
4
|
export declare type ValueType<T> = T[keyof T];
|
|
5
5
|
/**
|
|
6
6
|
* Given a database type and a union of table names returns the row type
|
|
@@ -127,10 +127,10 @@ export declare type AnyQueryBuilder = QueryBuilder<any, any, any>;
|
|
|
127
127
|
export declare type AnyAliasedQueryBuilder = AliasedQueryBuilder<any, any, any, any>;
|
|
128
128
|
export declare type AnyRawBuilder = RawBuilder<any>;
|
|
129
129
|
export declare type AnyAliasedRawBuilder = AliasedRawBuilder<any, any>;
|
|
130
|
-
export declare type QueryBuilderFactory<DB, TB extends keyof DB> = (qb:
|
|
131
|
-
export declare type AliasedQueryBuilderFactory<DB, TB extends keyof DB> = (qb:
|
|
132
|
-
export declare type RawBuilderFactory<DB, TB extends keyof DB> = (qb:
|
|
133
|
-
export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb:
|
|
130
|
+
export declare type QueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => QueryBuilder<any, any, any>;
|
|
131
|
+
export declare type AliasedQueryBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedQueryBuilder;
|
|
132
|
+
export declare type RawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyRawBuilder;
|
|
133
|
+
export declare type AliasedRawBuilderFactory<DB, TB extends keyof DB> = (qb: ExpressionBuilder<DB, TB>) => AnyAliasedRawBuilder;
|
|
134
134
|
export interface InsertResultTypeTag {
|
|
135
135
|
/** @internal */
|
|
136
136
|
__isInsertResultTypeTag__: true;
|
|
@@ -59,6 +59,7 @@ import { DropConstraintNode } from '../operation-node/drop-constraint-node.js';
|
|
|
59
59
|
import { ForeignKeyConstraintNode } from '../operation-node/foreign-key-constraint-node.js';
|
|
60
60
|
import { ColumnDefinitionNode } from '../operation-node/column-definition-node.js';
|
|
61
61
|
import { ModifyColumnNode } from '../operation-node/modify-column-node.js';
|
|
62
|
+
import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
|
|
62
63
|
export declare class DefaultQueryCompiler extends OperationNodeVisitor implements QueryCompiler {
|
|
63
64
|
#private;
|
|
64
65
|
protected get numBindings(): number;
|
|
@@ -71,7 +72,6 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
71
72
|
protected visitWhere(node: WhereNode): void;
|
|
72
73
|
protected visitHaving(node: HavingNode): void;
|
|
73
74
|
protected visitInsertQuery(node: InsertQueryNode): void;
|
|
74
|
-
protected getInsertInto(node: InsertQueryNode): string;
|
|
75
75
|
protected visitDeleteQuery(node: DeleteQueryNode): void;
|
|
76
76
|
protected visitReturning(node: ReturningNode): void;
|
|
77
77
|
protected visitAlias(node: AliasNode): void;
|
|
@@ -104,6 +104,7 @@ export declare class DefaultQueryCompiler extends OperationNodeVisitor implement
|
|
|
104
104
|
protected visitLimit(node: LimitNode): void;
|
|
105
105
|
protected visitOffset(node: OffsetNode): void;
|
|
106
106
|
protected visitOnConflict(node: OnConflictNode): void;
|
|
107
|
+
protected visitOnDuplicateKey(node: OnDuplicateKeyNode): void;
|
|
107
108
|
protected visitCreateIndex(node: CreateIndexNode): void;
|
|
108
109
|
protected visitDropIndex(node: DropIndexNode): void;
|
|
109
110
|
protected visitCreateSchema(node: CreateSchemaNode): void;
|