kysely 0.8.0 → 0.9.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +47 -8
- package/dist/cjs/dialect/mysql/mysql-driver.js +7 -7
- package/dist/cjs/dialect/mysql/mysql-query-compiler.d.ts +0 -2
- package/dist/cjs/dialect/mysql/mysql-query-compiler.js +0 -29
- package/dist/cjs/dialect/postgres/postgres-driver.js +5 -5
- package/dist/cjs/operation-node/create-schema-node.d.ts +1 -1
- package/dist/cjs/operation-node/create-schema-node.js +2 -2
- package/dist/cjs/operation-node/create-table-node.d.ts +1 -5
- package/dist/cjs/operation-node/create-table-node.js +1 -31
- package/dist/cjs/operation-node/join-node.d.ts +2 -1
- package/dist/cjs/operation-node/join-node.js +8 -6
- package/dist/cjs/operation-node/operation-node-source.d.ts +1 -1
- package/dist/cjs/operation-node/operation-node-transformer.js +2 -1
- package/dist/cjs/operation-node/primitive-value-list-node.js +1 -1
- package/dist/cjs/operation-node/query-node.d.ts +4 -3
- package/dist/cjs/operation-node/query-node.js +10 -2
- package/dist/cjs/operation-node/select-query-node.d.ts +2 -1
- package/dist/cjs/operation-node/select-query-node.js +10 -2
- package/dist/cjs/parser/group-by-parser.d.ts +4 -0
- package/dist/cjs/parser/group-by-parser.js +9 -0
- package/dist/cjs/parser/join-parser.d.ts +6 -3
- package/dist/cjs/parser/order-by-parser.d.ts +2 -4
- package/dist/cjs/parser/order-by-parser.js +6 -3
- package/dist/cjs/parser/reference-parser.d.ts +1 -1
- package/dist/cjs/parser/reference-parser.js +1 -1
- package/dist/cjs/parser/table-parser.d.ts +8 -8
- package/dist/cjs/query-builder/function-builder.d.ts +6 -6
- package/dist/cjs/query-builder/function-builder.js +7 -7
- package/dist/cjs/query-builder/join-builder.js +8 -8
- package/dist/cjs/query-builder/query-builder.js +20 -22
- package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +4 -3
- package/dist/cjs/query-compiler/default-query-compiler.js +23 -29
- package/dist/cjs/query-creator.d.ts +14 -11
- package/dist/cjs/query-creator.js +14 -11
- package/dist/cjs/raw-builder/raw-builder.d.ts +1 -1
- package/dist/cjs/raw-builder/raw-builder.js +6 -6
- package/dist/cjs/schema/alter-table-builder.d.ts +3 -0
- package/dist/cjs/schema/alter-table-builder.js +3 -0
- package/dist/cjs/schema/column-definition-builder.d.ts +14 -5
- package/dist/cjs/schema/create-schema-builder.js +1 -1
- package/dist/cjs/schema/create-table-builder.d.ts +55 -10
- package/dist/cjs/schema/create-table-builder.js +59 -17
- package/dist/cjs/schema/schema.d.ts +37 -2
- package/dist/cjs/schema/schema.js +36 -1
- package/dist/cjs/util/object-utils.d.ts +12 -11
- package/dist/cjs/util/object-utils.js +6 -2
- package/dist/esm/dialect/mysql/mysql-driver.js +8 -8
- package/dist/esm/dialect/mysql/mysql-query-compiler.d.ts +0 -2
- package/dist/esm/dialect/mysql/mysql-query-compiler.js +0 -29
- package/dist/esm/dialect/postgres/postgres-driver.js +5 -5
- package/dist/esm/operation-node/create-schema-node.d.ts +1 -1
- package/dist/esm/operation-node/create-schema-node.js +2 -2
- package/dist/esm/operation-node/create-table-node.d.ts +1 -5
- package/dist/esm/operation-node/create-table-node.js +1 -31
- package/dist/esm/operation-node/join-node.d.ts +2 -1
- package/dist/esm/operation-node/join-node.js +8 -6
- package/dist/esm/operation-node/operation-node-source.d.ts +1 -1
- package/dist/esm/operation-node/operation-node-transformer.js +2 -1
- package/dist/esm/operation-node/primitive-value-list-node.js +1 -1
- package/dist/esm/operation-node/query-node.d.ts +4 -3
- package/dist/esm/operation-node/query-node.js +10 -2
- package/dist/esm/operation-node/select-query-node.d.ts +2 -1
- package/dist/esm/operation-node/select-query-node.js +10 -2
- package/dist/esm/parser/group-by-parser.d.ts +4 -0
- package/dist/esm/parser/group-by-parser.js +5 -0
- package/dist/esm/parser/join-parser.d.ts +6 -3
- package/dist/esm/parser/order-by-parser.d.ts +2 -4
- package/dist/esm/parser/order-by-parser.js +6 -2
- package/dist/esm/parser/reference-parser.d.ts +1 -1
- package/dist/esm/parser/reference-parser.js +2 -2
- package/dist/esm/parser/table-parser.d.ts +8 -8
- package/dist/esm/query-builder/function-builder.d.ts +6 -6
- package/dist/esm/query-builder/function-builder.js +7 -7
- package/dist/esm/query-builder/join-builder.js +8 -8
- package/dist/esm/query-builder/query-builder.js +21 -23
- package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
- package/dist/esm/query-compiler/default-query-compiler.d.ts +4 -3
- package/dist/esm/query-compiler/default-query-compiler.js +23 -29
- package/dist/esm/query-creator.d.ts +14 -11
- package/dist/esm/query-creator.js +14 -11
- package/dist/esm/raw-builder/raw-builder.d.ts +1 -1
- package/dist/esm/raw-builder/raw-builder.js +6 -6
- package/dist/esm/schema/alter-table-builder.d.ts +3 -0
- package/dist/esm/schema/alter-table-builder.js +3 -0
- package/dist/esm/schema/column-definition-builder.d.ts +14 -5
- package/dist/esm/schema/create-schema-builder.js +1 -1
- package/dist/esm/schema/create-table-builder.d.ts +55 -10
- package/dist/esm/schema/create-table-builder.js +60 -18
- package/dist/esm/schema/schema.d.ts +37 -2
- package/dist/esm/schema/schema.js +36 -1
- package/dist/esm/util/object-utils.d.ts +12 -11
- package/dist/esm/util/object-utils.js +4 -1
- package/package.json +1 -1
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { OperationNode } from './operation-node.js';
|
|
2
2
|
import { TableNode } from './table-node.js';
|
|
3
|
-
import { ForeignKeyConstraintNode } from './foreign-key-constraint-node.js';
|
|
4
3
|
import { ConstraintNode } from './constraint-node.js';
|
|
5
4
|
import { ColumnDefinitionNode } from './column-definition-node.js';
|
|
6
5
|
export declare type CreateTableNodeModifier = 'IfNotExists';
|
|
@@ -19,8 +18,5 @@ export declare const CreateTableNode: Readonly<{
|
|
|
19
18
|
create(table: TableNode): CreateTableNode;
|
|
20
19
|
cloneWithColumn(createTable: CreateTableNode, column: ColumnDefinitionNode): CreateTableNode;
|
|
21
20
|
cloneWithModifier(createTable: CreateTableNode, modifier: CreateTableNodeModifier): CreateTableNode;
|
|
22
|
-
|
|
23
|
-
cloneWithUniqueConstraint(createTable: CreateTableNode, constraintName: string, columns: string[]): CreateTableNode;
|
|
24
|
-
cloneWithCheckConstraint(createTable: CreateTableNode, constraintName: string, sql: string): CreateTableNode;
|
|
25
|
-
cloneWithForeignKeyConstraint(createTable: CreateTableNode, constraint: ForeignKeyConstraintNode): CreateTableNode;
|
|
21
|
+
cloneWithConstraint(createTable: CreateTableNode, constraint: ConstraintNode): CreateTableNode;
|
|
26
22
|
}>;
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
import { freeze } from '../util/object-utils.js';
|
|
2
|
-
import { CheckConstraintNode } from './check-constraint-node.js';
|
|
3
|
-
import { PrimaryConstraintNode } from './primary-constraint-node.js';
|
|
4
|
-
import { UniqueConstraintNode } from './unique-constraint-node.js';
|
|
5
2
|
/**
|
|
6
3
|
* @internal
|
|
7
4
|
*/
|
|
@@ -28,34 +25,7 @@ export const CreateTableNode = freeze({
|
|
|
28
25
|
modifier,
|
|
29
26
|
});
|
|
30
27
|
},
|
|
31
|
-
|
|
32
|
-
const constraint = PrimaryConstraintNode.create(columns, constraintName);
|
|
33
|
-
return freeze({
|
|
34
|
-
...createTable,
|
|
35
|
-
constraints: createTable.constraints
|
|
36
|
-
? freeze([...createTable.constraints, constraint])
|
|
37
|
-
: freeze([constraint]),
|
|
38
|
-
});
|
|
39
|
-
},
|
|
40
|
-
cloneWithUniqueConstraint(createTable, constraintName, columns) {
|
|
41
|
-
const constraint = UniqueConstraintNode.create(columns, constraintName);
|
|
42
|
-
return freeze({
|
|
43
|
-
...createTable,
|
|
44
|
-
constraints: createTable.constraints
|
|
45
|
-
? freeze([...createTable.constraints, constraint])
|
|
46
|
-
: freeze([constraint]),
|
|
47
|
-
});
|
|
48
|
-
},
|
|
49
|
-
cloneWithCheckConstraint(createTable, constraintName, sql) {
|
|
50
|
-
const constraint = CheckConstraintNode.create(sql, constraintName);
|
|
51
|
-
return freeze({
|
|
52
|
-
...createTable,
|
|
53
|
-
constraints: createTable.constraints
|
|
54
|
-
? freeze([...createTable.constraints, constraint])
|
|
55
|
-
: freeze([constraint]),
|
|
56
|
-
});
|
|
57
|
-
},
|
|
58
|
-
cloneWithForeignKeyConstraint(createTable, constraint) {
|
|
28
|
+
cloneWithConstraint(createTable, constraint) {
|
|
59
29
|
return freeze({
|
|
60
30
|
...createTable,
|
|
61
31
|
constraints: createTable.constraints
|
|
@@ -21,5 +21,6 @@ export declare const JoinNode: Readonly<{
|
|
|
21
21
|
is(node: OperationNode): node is JoinNode;
|
|
22
22
|
create(joinType: JoinType, table: JoinTableNode): JoinNode;
|
|
23
23
|
createWithOn(joinType: JoinType, table: JoinTableNode, on: JoinNodeOnNode): JoinNode;
|
|
24
|
-
cloneWithOn(joinNode: JoinNode,
|
|
24
|
+
cloneWithOn(joinNode: JoinNode, on: JoinNodeOnNode): JoinNode;
|
|
25
|
+
cloneWithOrOn(joinNode: JoinNode, on: JoinNodeOnNode): JoinNode;
|
|
25
26
|
}>;
|
|
@@ -24,14 +24,16 @@ export const JoinNode = freeze({
|
|
|
24
24
|
on,
|
|
25
25
|
});
|
|
26
26
|
},
|
|
27
|
-
cloneWithOn(joinNode,
|
|
27
|
+
cloneWithOn(joinNode, on) {
|
|
28
28
|
return freeze({
|
|
29
29
|
...joinNode,
|
|
30
|
-
on: joinNode.on
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
on: joinNode.on ? AndNode.create(joinNode.on, on) : on,
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
cloneWithOrOn(joinNode, on) {
|
|
34
|
+
return freeze({
|
|
35
|
+
...joinNode,
|
|
36
|
+
on: joinNode.on ? OrNode.create(joinNode.on, on) : on,
|
|
35
37
|
});
|
|
36
38
|
},
|
|
37
39
|
});
|
|
@@ -2,4 +2,4 @@ import { OperationNode } from './operation-node.js';
|
|
|
2
2
|
export interface OperationNodeSource {
|
|
3
3
|
toOperationNode(): OperationNode;
|
|
4
4
|
}
|
|
5
|
-
export declare function isOperationNodeSource(obj:
|
|
5
|
+
export declare function isOperationNodeSource(obj: unknown): obj is OperationNodeSource;
|
|
@@ -453,11 +453,12 @@ export class OperationNodeTransformer {
|
|
|
453
453
|
kind: 'AlterTableNode',
|
|
454
454
|
table: this.transformNode(node.table),
|
|
455
455
|
renameTo: this.transformNode(node.renameTo),
|
|
456
|
-
renameColumn: this.transformNode(node.renameColumn),
|
|
457
456
|
setSchema: this.transformNode(node.setSchema),
|
|
457
|
+
renameColumn: this.transformNode(node.renameColumn),
|
|
458
458
|
addColumn: this.transformNode(node.addColumn),
|
|
459
459
|
dropColumn: this.transformNode(node.dropColumn),
|
|
460
460
|
alterColumn: this.transformNode(node.alterColumn),
|
|
461
|
+
modifyColumn: this.transformNode(node.modifyColumn),
|
|
461
462
|
addConstraint: this.transformNode(node.addConstraint),
|
|
462
463
|
dropConstraint: this.transformNode(node.dropConstraint),
|
|
463
464
|
};
|
|
@@ -16,7 +16,8 @@ export declare const QueryNode: Readonly<{
|
|
|
16
16
|
is(node: OperationNode): node is QueryNode;
|
|
17
17
|
isMutating(node: OperationNode): node is MutatingQueryNode;
|
|
18
18
|
isFilterable(node: OperationNode): node is FilterableQueryNode;
|
|
19
|
-
cloneWithWhere<T extends FilterableQueryNode>(node: T,
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
cloneWithWhere<T extends FilterableQueryNode>(node: T, filter: WhereChildNode): T;
|
|
20
|
+
cloneWithOrWhere<T_1 extends FilterableQueryNode>(node: T_1, filter: WhereChildNode): T_1;
|
|
21
|
+
cloneWithJoin<T_2 extends FilterableQueryNode>(node: T_2, join: JoinNode): T_2;
|
|
22
|
+
cloneWithReturning<T_3 extends MutatingQueryNode>(node: T_3, selections: ReadonlyArray<SelectionNode>): T_3;
|
|
22
23
|
}>;
|
|
@@ -25,11 +25,19 @@ export const QueryNode = freeze({
|
|
|
25
25
|
DeleteQueryNode.is(node) ||
|
|
26
26
|
UpdateQueryNode.is(node));
|
|
27
27
|
},
|
|
28
|
-
cloneWithWhere(node,
|
|
28
|
+
cloneWithWhere(node, filter) {
|
|
29
29
|
return freeze({
|
|
30
30
|
...node,
|
|
31
31
|
where: node.where
|
|
32
|
-
? WhereNode.cloneWithFilter(node.where,
|
|
32
|
+
? WhereNode.cloneWithFilter(node.where, 'And', filter)
|
|
33
|
+
: WhereNode.create(filter),
|
|
34
|
+
});
|
|
35
|
+
},
|
|
36
|
+
cloneWithOrWhere(node, filter) {
|
|
37
|
+
return freeze({
|
|
38
|
+
...node,
|
|
39
|
+
where: node.where
|
|
40
|
+
? WhereNode.cloneWithFilter(node.where, 'Or', filter)
|
|
33
41
|
: WhereNode.create(filter),
|
|
34
42
|
});
|
|
35
43
|
},
|
|
@@ -42,6 +42,7 @@ export declare const SelectQueryNode: Readonly<{
|
|
|
42
42
|
cloneWithGroupByItems(selectNode: SelectQueryNode, items: ReadonlyArray<GroupByItemNode>): SelectQueryNode;
|
|
43
43
|
cloneWithLimit(selectNode: SelectQueryNode, limit: LimitNode): SelectQueryNode;
|
|
44
44
|
cloneWithOffset(selectNode: SelectQueryNode, offset: OffsetNode): SelectQueryNode;
|
|
45
|
-
cloneWithHaving(selectNode: SelectQueryNode,
|
|
45
|
+
cloneWithHaving(selectNode: SelectQueryNode, filter: HavingNodeChild): SelectQueryNode;
|
|
46
|
+
cloneWithOrHaving(selectNode: SelectQueryNode, filter: HavingNodeChild): SelectQueryNode;
|
|
46
47
|
cloneWithDistinct(selectNode: SelectQueryNode): SelectQueryNode;
|
|
47
48
|
}>;
|
|
@@ -69,11 +69,19 @@ export const SelectQueryNode = freeze({
|
|
|
69
69
|
offset,
|
|
70
70
|
});
|
|
71
71
|
},
|
|
72
|
-
cloneWithHaving(selectNode,
|
|
72
|
+
cloneWithHaving(selectNode, filter) {
|
|
73
73
|
return freeze({
|
|
74
74
|
...selectNode,
|
|
75
75
|
having: selectNode.having
|
|
76
|
-
? HavingNode.cloneWithFilter(selectNode.having,
|
|
76
|
+
? HavingNode.cloneWithFilter(selectNode.having, 'And', filter)
|
|
77
|
+
: HavingNode.create(filter),
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
cloneWithOrHaving(selectNode, filter) {
|
|
81
|
+
return freeze({
|
|
82
|
+
...selectNode,
|
|
83
|
+
having: selectNode.having
|
|
84
|
+
? HavingNode.cloneWithFilter(selectNode.having, 'Or', filter)
|
|
77
85
|
: HavingNode.create(filter),
|
|
78
86
|
});
|
|
79
87
|
},
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
|
|
2
|
+
import { ParseContext } from './parse-context.js';
|
|
3
|
+
import { ReferenceExpressionOrList } from './reference-parser.js';
|
|
4
|
+
export declare function parseGroupBy(ctx: ParseContext, orderBy: ReferenceExpressionOrList<any, any>): GroupByItemNode[];
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
|
|
2
|
+
import { parseReferenceExpressionOrList, } from './reference-parser.js';
|
|
3
|
+
export function parseGroupBy(ctx, orderBy) {
|
|
4
|
+
return parseReferenceExpressionOrList(ctx, orderBy).map(GroupByItemNode.create);
|
|
5
|
+
}
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { JoinNode, JoinType } from '../operation-node/join-node.js';
|
|
2
2
|
import { AnyColumn, AnyColumnWithTable } from '../util/type-utils.js';
|
|
3
|
-
import { ExtractAliasFromTableExpression,
|
|
3
|
+
import { ExtractAliasFromTableExpression, TableExpressionDatabase } from './table-parser.js';
|
|
4
4
|
import { JoinBuilder } from '../query-builder/join-builder.js';
|
|
5
5
|
import { ParseContext } from './parse-context.js';
|
|
6
|
-
export declare type JoinReferenceExpression<DB, TB extends keyof DB, F> =
|
|
7
|
-
export declare type JoinCallbackExpression<DB, TB extends keyof DB, F> = (join: JoinBuilder<
|
|
6
|
+
export declare type JoinReferenceExpression<DB, TB extends keyof DB, F> = AnyJoinColumn<DB, TB, F> | AnyJoinColumnWithTable<DB, TB, F>;
|
|
7
|
+
export declare type JoinCallbackExpression<DB, TB extends keyof DB, F> = (join: JoinBuilder<TableExpressionDatabase<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>) => JoinBuilder<any, any>;
|
|
8
|
+
declare type AnyJoinColumn<DB, TB extends keyof DB, F> = AnyColumn<TableExpressionDatabase<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>;
|
|
9
|
+
declare type AnyJoinColumnWithTable<DB, TB extends keyof DB, F> = AnyColumnWithTable<TableExpressionDatabase<DB, F>, TB | ExtractAliasFromTableExpression<DB, F>>;
|
|
8
10
|
export declare function parseJoin(ctx: ParseContext, joinType: JoinType, args: any[]): JoinNode;
|
|
11
|
+
export {};
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { RawNode } from '../operation-node/raw-node.js';
|
|
1
|
+
import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
|
|
3
2
|
import { AnyRawBuilder } from '../util/type-utils.js';
|
|
4
3
|
import { ParseContext } from './parse-context.js';
|
|
5
4
|
import { ReferenceExpression } from './reference-parser.js';
|
|
6
5
|
export declare type OrderByDirection = 'asc' | 'desc';
|
|
7
6
|
export declare type OrderByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | keyof O;
|
|
8
7
|
export declare type OrderByDirectionExpression = OrderByDirection | AnyRawBuilder;
|
|
9
|
-
export declare function
|
|
10
|
-
export declare function parseOrderByDirectionExpression(expr?: OrderByDirectionExpression): RawNode | undefined;
|
|
8
|
+
export declare function parseOrderBy(ctx: ParseContext, orderBy: OrderByExpression<any, any, any>, direction?: OrderByDirectionExpression): OrderByItemNode;
|
|
@@ -1,9 +1,13 @@
|
|
|
1
|
+
import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
|
|
1
2
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
2
3
|
import { parseReferenceExpression, } from './reference-parser.js';
|
|
3
|
-
export function
|
|
4
|
+
export function parseOrderBy(ctx, orderBy, direction) {
|
|
5
|
+
return OrderByItemNode.create(parseOrderByExpression(ctx, orderBy), parseOrderByDirectionExpression(direction));
|
|
6
|
+
}
|
|
7
|
+
function parseOrderByExpression(ctx, expr) {
|
|
4
8
|
return parseReferenceExpression(ctx, expr);
|
|
5
9
|
}
|
|
6
|
-
|
|
10
|
+
function parseOrderByDirectionExpression(expr) {
|
|
7
11
|
if (!expr) {
|
|
8
12
|
return undefined;
|
|
9
13
|
}
|
|
@@ -9,7 +9,7 @@ import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
|
9
9
|
import { QueryBuilder } from '../query-builder/query-builder.js';
|
|
10
10
|
import { ParseContext } from './parse-context.js';
|
|
11
11
|
export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB> | DynamicReferenceBuilder<any>;
|
|
12
|
-
export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReferenceExpression<DB, TB
|
|
12
|
+
export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
|
|
13
13
|
export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
|
|
14
14
|
export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? ExtractTypeFromStringReference<DB, TB, RE> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends QueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => QueryBuilder<any, any, infer O> ? ValueType<O> : PrimitiveValue;
|
|
15
15
|
declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, S extends string, R = RowType<DB, TB>> = S extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : S extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : S extends keyof R ? R[S] : PrimitiveValue;
|
|
@@ -3,10 +3,10 @@ import { ColumnNode } from '../operation-node/column-node.js';
|
|
|
3
3
|
import { isOperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
4
4
|
import { ReferenceNode } from '../operation-node/reference-node.js';
|
|
5
5
|
import { TableNode } from '../operation-node/table-node.js';
|
|
6
|
-
import { isFunction, isString } from '../util/object-utils.js';
|
|
6
|
+
import { isFunction, isReadonlyArray, isString, } from '../util/object-utils.js';
|
|
7
7
|
import { QueryNode } from '../operation-node/query-node.js';
|
|
8
8
|
export function parseReferenceExpressionOrList(ctx, arg) {
|
|
9
|
-
if (
|
|
9
|
+
if (isReadonlyArray(arg)) {
|
|
10
10
|
return arg.map((it) => parseReferenceExpression(ctx, it));
|
|
11
11
|
}
|
|
12
12
|
else {
|
|
@@ -7,20 +7,20 @@ import { ParseContext } from './parse-context.js';
|
|
|
7
7
|
export declare type TableExpression<DB, TB extends keyof DB> = TableReference<DB> | AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB>;
|
|
8
8
|
export declare type TableExpressionOrList<DB, TB extends keyof DB> = TableExpression<DB, TB> | ReadonlyArray<TableExpression<DB, TB>>;
|
|
9
9
|
export declare type TableReference<DB> = AnyAliasedTable<DB, any, any> | AnyTable<DB> | AnyAliasedRawBuilder;
|
|
10
|
-
export declare type QueryBuilderWithTable<DB, TB extends keyof DB, O, TE> = QueryBuilder<
|
|
11
|
-
export declare type
|
|
10
|
+
export declare type QueryBuilderWithTable<DB, TB extends keyof DB, O, TE> = QueryBuilder<TableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
11
|
+
export declare type TableExpressionDatabase<DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
12
12
|
[C in keyof DB | A]: C extends A ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? DB[C] : never;
|
|
13
13
|
};
|
|
14
|
-
export declare type QueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<
|
|
15
|
-
export declare type
|
|
14
|
+
export declare type QueryBuilderWithLeftJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<LeftJoinTableExpressionDatabase<DB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
15
|
+
export declare type LeftJoinTableExpressionDatabase<DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
16
16
|
[C in keyof DB | A]: C extends A ? Nullable<ExtractRowTypeFromTableExpression<DB, TE, C>> : C extends keyof DB ? DB[C] : never;
|
|
17
17
|
};
|
|
18
|
-
export declare type QueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<
|
|
19
|
-
export declare type
|
|
18
|
+
export declare type QueryBuilderWithRightJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<RightJoinTableExpressionDatabase<DB, TB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
19
|
+
export declare type RightJoinTableExpressionDatabase<DB, TB extends keyof DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
20
20
|
[C in keyof DB | A]: C extends A ? ExtractRowTypeFromTableExpression<DB, TE, C> : C extends keyof DB ? C extends TB ? Nullable<DB[C]> : DB[C] : never;
|
|
21
21
|
};
|
|
22
|
-
export declare type QueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<
|
|
23
|
-
export declare type
|
|
22
|
+
export declare type QueryBuilderWithFullJoin<DB, TB extends keyof DB, O, TE> = QueryBuilder<FullJoinTableExpressionDatabase<DB, TB, TE>, TB | ExtractAliasFromTableExpression<DB, TE>, O>;
|
|
23
|
+
export declare type FullJoinTableExpressionDatabase<DB, TB extends keyof DB, TE, A extends keyof any = ExtractAliasFromTableExpression<DB, TE>> = {
|
|
24
24
|
[C in keyof DB | A]: C extends A ? Nullable<ExtractRowTypeFromTableExpression<DB, TE, C>> : C extends keyof DB ? C extends TB ? Nullable<DB[C]> : DB[C] : never;
|
|
25
25
|
};
|
|
26
26
|
export declare type ExtractAliasFromTableExpression<DB, TE> = TE extends `${string} as ${infer TA}` ? TA : TE extends keyof DB ? TE : TE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : TE extends AliasedRawBuilder<any, infer RA> ? RA : TE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : never;
|
|
@@ -66,9 +66,9 @@ export declare class FunctionBuilder<DB, TB extends keyof DB> {
|
|
|
66
66
|
* Calls the `sum` function for the column given as the argument.
|
|
67
67
|
*
|
|
68
68
|
* If this is used in a `select` statement the type of the selected expression
|
|
69
|
-
* will be `number | string` by default. This is because Kysely can't
|
|
70
|
-
* type the db driver outputs. Sometimes the output can be larger than
|
|
71
|
-
* largest javascript number and a string is returned instead. Most drivers
|
|
69
|
+
* will be `number | string | BigInt` by default. This is because Kysely can't
|
|
70
|
+
* know the type the db driver outputs. Sometimes the output can be larger than
|
|
71
|
+
* the largest javascript number and a string is returned instead. Most drivers
|
|
72
72
|
* allow you to configure the output type of large numbers and Kysely can't
|
|
73
73
|
* know if you've done so.
|
|
74
74
|
*
|
|
@@ -88,9 +88,9 @@ export declare class FunctionBuilder<DB, TB extends keyof DB> {
|
|
|
88
88
|
* Calls the `count` function for the column given as the argument.
|
|
89
89
|
*
|
|
90
90
|
* If this is used in a `select` statement the type of the selected expression
|
|
91
|
-
* will be `number | string` by default. This is because Kysely can't
|
|
92
|
-
* type the db driver outputs. Sometimes the output can be larger than
|
|
93
|
-
* largest javascript number and a string is returned instead. Most drivers
|
|
91
|
+
* will be `number | string | BigInt` by default. This is because Kysely can't
|
|
92
|
+
* know the type the db driver outputs. Sometimes the output can be larger than
|
|
93
|
+
* the largest javascript number and a string is returned instead. Most drivers
|
|
94
94
|
* allow you to configure the output type of large numbers and Kysely can't
|
|
95
95
|
* know if you've done so.
|
|
96
96
|
*
|
|
@@ -79,9 +79,9 @@ export class FunctionBuilder {
|
|
|
79
79
|
* Calls the `sum` function for the column given as the argument.
|
|
80
80
|
*
|
|
81
81
|
* If this is used in a `select` statement the type of the selected expression
|
|
82
|
-
* will be `number | string` by default. This is because Kysely can't
|
|
83
|
-
* type the db driver outputs. Sometimes the output can be larger than
|
|
84
|
-
* largest javascript number and a string is returned instead. Most drivers
|
|
82
|
+
* will be `number | string | BigInt` by default. This is because Kysely can't
|
|
83
|
+
* know the type the db driver outputs. Sometimes the output can be larger than
|
|
84
|
+
* the largest javascript number and a string is returned instead. Most drivers
|
|
85
85
|
* allow you to configure the output type of large numbers and Kysely can't
|
|
86
86
|
* know if you've done so.
|
|
87
87
|
*
|
|
@@ -103,9 +103,9 @@ export class FunctionBuilder {
|
|
|
103
103
|
* Calls the `count` function for the column given as the argument.
|
|
104
104
|
*
|
|
105
105
|
* If this is used in a `select` statement the type of the selected expression
|
|
106
|
-
* will be `number | string` by default. This is because Kysely can't
|
|
107
|
-
* type the db driver outputs. Sometimes the output can be larger than
|
|
108
|
-
* largest javascript number and a string is returned instead. Most drivers
|
|
106
|
+
* will be `number | string | BigInt` by default. This is because Kysely can't
|
|
107
|
+
* know the type the db driver outputs. Sometimes the output can be larger than
|
|
108
|
+
* the largest javascript number and a string is returned instead. Most drivers
|
|
109
109
|
* allow you to configure the output type of large numbers and Kysely can't
|
|
110
110
|
* know if you've done so.
|
|
111
111
|
*
|
|
@@ -128,7 +128,7 @@ export class FunctionBuilder {
|
|
|
128
128
|
queryId: createQueryId(),
|
|
129
129
|
executor: this.#props.executor,
|
|
130
130
|
sql: `${fn}(??)`,
|
|
131
|
-
|
|
131
|
+
parameters: [column],
|
|
132
132
|
});
|
|
133
133
|
}
|
|
134
134
|
}
|
|
@@ -10,13 +10,13 @@ export class JoinBuilder {
|
|
|
10
10
|
on(...args) {
|
|
11
11
|
return new JoinBuilder({
|
|
12
12
|
...this.#props,
|
|
13
|
-
joinNode: JoinNode.cloneWithOn(this.#props.joinNode,
|
|
13
|
+
joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseOnFilter(this.#props.parseContext, args)),
|
|
14
14
|
});
|
|
15
15
|
}
|
|
16
16
|
orOn(...args) {
|
|
17
17
|
return new JoinBuilder({
|
|
18
18
|
...this.#props,
|
|
19
|
-
joinNode: JoinNode.
|
|
19
|
+
joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseOnFilter(this.#props.parseContext, args)),
|
|
20
20
|
});
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
@@ -28,7 +28,7 @@ export class JoinBuilder {
|
|
|
28
28
|
onRef(lhs, op, rhs) {
|
|
29
29
|
return new JoinBuilder({
|
|
30
30
|
...this.#props,
|
|
31
|
-
joinNode: JoinNode.cloneWithOn(this.#props.joinNode,
|
|
31
|
+
joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
@@ -40,7 +40,7 @@ export class JoinBuilder {
|
|
|
40
40
|
orOnRef(lhs, op, rhs) {
|
|
41
41
|
return new JoinBuilder({
|
|
42
42
|
...this.#props,
|
|
43
|
-
joinNode: JoinNode.
|
|
43
|
+
joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
|
|
44
44
|
});
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
@@ -52,7 +52,7 @@ export class JoinBuilder {
|
|
|
52
52
|
onExists(arg) {
|
|
53
53
|
return new JoinBuilder({
|
|
54
54
|
...this.#props,
|
|
55
|
-
joinNode: JoinNode.cloneWithOn(this.#props.joinNode,
|
|
55
|
+
joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseExistFilter(this.#props.parseContext, arg)),
|
|
56
56
|
});
|
|
57
57
|
}
|
|
58
58
|
/**
|
|
@@ -64,7 +64,7 @@ export class JoinBuilder {
|
|
|
64
64
|
onNotExists(arg) {
|
|
65
65
|
return new JoinBuilder({
|
|
66
66
|
...this.#props,
|
|
67
|
-
joinNode: JoinNode.cloneWithOn(this.#props.joinNode,
|
|
67
|
+
joinNode: JoinNode.cloneWithOn(this.#props.joinNode, parseNotExistFilter(this.#props.parseContext, arg)),
|
|
68
68
|
});
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
@@ -76,7 +76,7 @@ export class JoinBuilder {
|
|
|
76
76
|
orOnExists(arg) {
|
|
77
77
|
return new JoinBuilder({
|
|
78
78
|
...this.#props,
|
|
79
|
-
joinNode: JoinNode.
|
|
79
|
+
joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseExistFilter(this.#props.parseContext, arg)),
|
|
80
80
|
});
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
@@ -88,7 +88,7 @@ export class JoinBuilder {
|
|
|
88
88
|
orOnNotExists(arg) {
|
|
89
89
|
return new JoinBuilder({
|
|
90
90
|
...this.#props,
|
|
91
|
-
joinNode: JoinNode.
|
|
91
|
+
joinNode: JoinNode.cloneWithOrOn(this.#props.joinNode, parseNotExistFilter(this.#props.parseContext, arg)),
|
|
92
92
|
});
|
|
93
93
|
}
|
|
94
94
|
toOperationNode() {
|
|
@@ -3,13 +3,10 @@ import { parseJoin, } from '../parser/join-parser.js';
|
|
|
3
3
|
import { parseSelectExpressionOrList, parseSelectAll, } from '../parser/select-parser.js';
|
|
4
4
|
import { parseExistFilter, parseReferenceFilter, parseWhereFilter, parseHavingFilter, parseNotExistFilter, } from '../parser/filter-parser.js';
|
|
5
5
|
import { parseInsertObjectOrList, } from '../parser/insert-values-parser.js';
|
|
6
|
-
import { parseReferenceExpressionOrList, } from '../parser/reference-parser.js';
|
|
7
|
-
import { OrderByItemNode } from '../operation-node/order-by-item-node.js';
|
|
8
6
|
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
9
7
|
import { InsertQueryNode } from '../operation-node/insert-query-node.js';
|
|
10
8
|
import { QueryNode, } from '../operation-node/query-node.js';
|
|
11
|
-
import {
|
|
12
|
-
import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
|
|
9
|
+
import { parseOrderBy, } from '../parser/order-by-parser.js';
|
|
13
10
|
import { UpdateQueryNode } from '../operation-node/update-query-node.js';
|
|
14
11
|
import { parseUpdateObject, } from '../parser/update-set-parser.js';
|
|
15
12
|
import { preventAwait } from '../util/prevent-await.js';
|
|
@@ -19,6 +16,7 @@ import { parseOnConflictDoNothing, parseOnConflictUpdate, } from '../parser/on-c
|
|
|
19
16
|
import { freeze } from '../util/object-utils.js';
|
|
20
17
|
import { DeleteQueryNode } from '../operation-node/delete-query-node.js';
|
|
21
18
|
import { OnDuplicateKeyNode } from '../operation-node/on-duplicate-key-node.js';
|
|
19
|
+
import { parseGroupBy } from '../parser/group-by-parser.js';
|
|
22
20
|
/**
|
|
23
21
|
* The main query builder class.
|
|
24
22
|
*
|
|
@@ -43,7 +41,7 @@ export class QueryBuilder {
|
|
|
43
41
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
44
42
|
return new QueryBuilder({
|
|
45
43
|
...this.#props,
|
|
46
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
44
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(this.#props.parseContext, args)),
|
|
47
45
|
});
|
|
48
46
|
}
|
|
49
47
|
/**
|
|
@@ -101,14 +99,14 @@ export class QueryBuilder {
|
|
|
101
99
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
102
100
|
return new QueryBuilder({
|
|
103
101
|
...this.#props,
|
|
104
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
102
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
|
|
105
103
|
});
|
|
106
104
|
}
|
|
107
105
|
orWhere(...args) {
|
|
108
106
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
109
107
|
return new QueryBuilder({
|
|
110
108
|
...this.#props,
|
|
111
|
-
queryNode: QueryNode.
|
|
109
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(this.#props.parseContext, args)),
|
|
112
110
|
});
|
|
113
111
|
}
|
|
114
112
|
/**
|
|
@@ -121,7 +119,7 @@ export class QueryBuilder {
|
|
|
121
119
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
122
120
|
return new QueryBuilder({
|
|
123
121
|
...this.#props,
|
|
124
|
-
queryNode: QueryNode.
|
|
122
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
|
|
125
123
|
});
|
|
126
124
|
}
|
|
127
125
|
/**
|
|
@@ -187,7 +185,7 @@ export class QueryBuilder {
|
|
|
187
185
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
188
186
|
return new QueryBuilder({
|
|
189
187
|
...this.#props,
|
|
190
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
188
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
|
|
191
189
|
});
|
|
192
190
|
}
|
|
193
191
|
/**
|
|
@@ -197,7 +195,7 @@ export class QueryBuilder {
|
|
|
197
195
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
198
196
|
return new QueryBuilder({
|
|
199
197
|
...this.#props,
|
|
200
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
198
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
|
|
201
199
|
});
|
|
202
200
|
}
|
|
203
201
|
/**
|
|
@@ -207,7 +205,7 @@ export class QueryBuilder {
|
|
|
207
205
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
208
206
|
return new QueryBuilder({
|
|
209
207
|
...this.#props,
|
|
210
|
-
queryNode: QueryNode.
|
|
208
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
|
|
211
209
|
});
|
|
212
210
|
}
|
|
213
211
|
/**
|
|
@@ -217,14 +215,14 @@ export class QueryBuilder {
|
|
|
217
215
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
218
216
|
return new QueryBuilder({
|
|
219
217
|
...this.#props,
|
|
220
|
-
queryNode: QueryNode.
|
|
218
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
|
|
221
219
|
});
|
|
222
220
|
}
|
|
223
221
|
having(...args) {
|
|
224
222
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
225
223
|
return new QueryBuilder({
|
|
226
224
|
...this.#props,
|
|
227
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode,
|
|
225
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseHavingFilter(this.#props.parseContext, args)),
|
|
228
226
|
});
|
|
229
227
|
}
|
|
230
228
|
/**
|
|
@@ -235,14 +233,14 @@ export class QueryBuilder {
|
|
|
235
233
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
236
234
|
return new QueryBuilder({
|
|
237
235
|
...this.#props,
|
|
238
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode,
|
|
236
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
|
|
239
237
|
});
|
|
240
238
|
}
|
|
241
239
|
orHaving(...args) {
|
|
242
240
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
243
241
|
return new QueryBuilder({
|
|
244
242
|
...this.#props,
|
|
245
|
-
queryNode: SelectQueryNode.
|
|
243
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseHavingFilter(this.#props.parseContext, args)),
|
|
246
244
|
});
|
|
247
245
|
}
|
|
248
246
|
/**
|
|
@@ -253,7 +251,7 @@ export class QueryBuilder {
|
|
|
253
251
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
254
252
|
return new QueryBuilder({
|
|
255
253
|
...this.#props,
|
|
256
|
-
queryNode: SelectQueryNode.
|
|
254
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
|
|
257
255
|
});
|
|
258
256
|
}
|
|
259
257
|
/**
|
|
@@ -264,7 +262,7 @@ export class QueryBuilder {
|
|
|
264
262
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
265
263
|
return new QueryBuilder({
|
|
266
264
|
...this.#props,
|
|
267
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode,
|
|
265
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
|
|
268
266
|
});
|
|
269
267
|
}
|
|
270
268
|
/**
|
|
@@ -275,7 +273,7 @@ export class QueryBuilder {
|
|
|
275
273
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
276
274
|
return new QueryBuilder({
|
|
277
275
|
...this.#props,
|
|
278
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode,
|
|
276
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
|
|
279
277
|
});
|
|
280
278
|
}
|
|
281
279
|
/**
|
|
@@ -286,7 +284,7 @@ export class QueryBuilder {
|
|
|
286
284
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
287
285
|
return new QueryBuilder({
|
|
288
286
|
...this.#props,
|
|
289
|
-
queryNode: SelectQueryNode.
|
|
287
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
|
|
290
288
|
});
|
|
291
289
|
}
|
|
292
290
|
/**
|
|
@@ -297,7 +295,7 @@ export class QueryBuilder {
|
|
|
297
295
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
298
296
|
return new QueryBuilder({
|
|
299
297
|
...this.#props,
|
|
300
|
-
queryNode: SelectQueryNode.
|
|
298
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
|
|
301
299
|
});
|
|
302
300
|
}
|
|
303
301
|
select(selection) {
|
|
@@ -714,14 +712,14 @@ export class QueryBuilder {
|
|
|
714
712
|
assertCanHaveOrderByClause(this.#props.queryNode);
|
|
715
713
|
return new QueryBuilder({
|
|
716
714
|
...this.#props,
|
|
717
|
-
queryNode: SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode,
|
|
715
|
+
queryNode: SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, parseOrderBy(this.#props.parseContext, orderBy, direction)),
|
|
718
716
|
});
|
|
719
717
|
}
|
|
720
718
|
groupBy(orderBy) {
|
|
721
719
|
assertCanHaveGroupByClause(this.#props.queryNode);
|
|
722
720
|
return new QueryBuilder({
|
|
723
721
|
...this.#props,
|
|
724
|
-
queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode,
|
|
722
|
+
queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, parseGroupBy(this.#props.parseContext, orderBy)),
|
|
725
723
|
});
|
|
726
724
|
}
|
|
727
725
|
/**
|
|
@@ -958,7 +956,7 @@ function assertCanHaveUpdates(node) {
|
|
|
958
956
|
}
|
|
959
957
|
function assertCanHaveReturningClause(node) {
|
|
960
958
|
if (!QueryNode.isMutating(node)) {
|
|
961
|
-
throw new Error('only
|
|
959
|
+
throw new Error('only insert, delete and update queries can have a returning clause');
|
|
962
960
|
}
|
|
963
961
|
}
|
|
964
962
|
function assertCanHaveOrderByClause(node) {
|