kysely 0.8.1 → 0.9.3
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 -4
- package/dist/cjs/dialect/mysql/mysql-driver.js +2 -2
- 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/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.d.ts +2 -0
- package/dist/cjs/operation-node/operation-node-transformer.js +11 -1
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +61 -59
- package/dist/cjs/operation-node/operation-node-visitor.js +1 -316
- package/dist/cjs/operation-node/operation-node.d.ts +1 -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 +5 -1
- package/dist/cjs/operation-node/select-query-node.js +18 -2
- package/dist/cjs/operation-node/union-node.d.ts +16 -0
- package/dist/cjs/operation-node/union-node.js +19 -0
- 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/insert-values-parser.d.ts +1 -1
- 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/parser/union-parser.d.ts +5 -0
- package/dist/cjs/parser/union-parser.js +13 -0
- package/dist/cjs/parser/value-parser.d.ts +1 -1
- package/dist/cjs/query-builder/function-builder.d.ts +6 -6
- package/dist/cjs/query-builder/function-builder.js +6 -6
- package/dist/cjs/query-builder/join-builder.js +8 -8
- package/dist/cjs/query-builder/query-builder.d.ts +30 -1
- package/dist/cjs/query-builder/query-builder.js +66 -22
- package/dist/cjs/query-compiler/compiled-query.d.ts +1 -1
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +8 -2
- package/dist/cjs/query-compiler/default-query-compiler.js +33 -22
- package/dist/cjs/query-creator.d.ts +6 -3
- package/dist/cjs/query-creator.js +5 -2
- 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 +3 -3
- 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/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.d.ts +2 -0
- package/dist/esm/operation-node/operation-node-transformer.js +11 -1
- package/dist/esm/operation-node/operation-node-visitor.d.ts +61 -59
- package/dist/esm/operation-node/operation-node-visitor.js +1 -316
- package/dist/esm/operation-node/operation-node.d.ts +1 -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 +5 -1
- package/dist/esm/operation-node/select-query-node.js +18 -2
- package/dist/esm/operation-node/union-node.d.ts +16 -0
- package/dist/esm/operation-node/union-node.js +16 -0
- 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/insert-values-parser.d.ts +1 -1
- 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/parser/union-parser.d.ts +5 -0
- package/dist/esm/parser/union-parser.js +9 -0
- package/dist/esm/parser/value-parser.d.ts +1 -1
- package/dist/esm/query-builder/function-builder.d.ts +6 -6
- package/dist/esm/query-builder/function-builder.js +6 -6
- package/dist/esm/query-builder/join-builder.js +8 -8
- package/dist/esm/query-builder/query-builder.d.ts +30 -1
- package/dist/esm/query-builder/query-builder.js +67 -23
- package/dist/esm/query-compiler/compiled-query.d.ts +1 -1
- package/dist/esm/query-compiler/default-query-compiler.d.ts +8 -2
- package/dist/esm/query-compiler/default-query-compiler.js +33 -22
- package/dist/esm/query-creator.d.ts +6 -3
- package/dist/esm/query-creator.js +5 -2
- 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
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { OperationNode } from './operation-node.js';
|
|
2
|
+
import { RawNode } from './raw-node.js';
|
|
3
|
+
import { SelectQueryNode } from './select-query-node.js';
|
|
4
|
+
export declare type UnionExpressionNode = SelectQueryNode | RawNode;
|
|
5
|
+
export interface UnionNode extends OperationNode {
|
|
6
|
+
readonly kind: 'UnionNode';
|
|
7
|
+
readonly union: UnionExpressionNode;
|
|
8
|
+
readonly all: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare const UnionNode: Readonly<{
|
|
14
|
+
is(node: OperationNode): node is UnionNode;
|
|
15
|
+
create(union: UnionExpressionNode, all: boolean): UnionNode;
|
|
16
|
+
}>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { freeze } from '../util/object-utils.js';
|
|
2
|
+
/**
|
|
3
|
+
* @internal
|
|
4
|
+
*/
|
|
5
|
+
export const UnionNode = freeze({
|
|
6
|
+
is(node) {
|
|
7
|
+
return node.kind === 'UnionNode';
|
|
8
|
+
},
|
|
9
|
+
create(union, all) {
|
|
10
|
+
return freeze({
|
|
11
|
+
kind: 'UnionNode',
|
|
12
|
+
union,
|
|
13
|
+
all,
|
|
14
|
+
});
|
|
15
|
+
},
|
|
16
|
+
});
|
|
@@ -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
|
+
}
|
|
@@ -8,7 +8,7 @@ import { PrimitiveValue } from '../util/object-utils.js';
|
|
|
8
8
|
export declare type InsertObject<DB, TB extends keyof DB> = {
|
|
9
9
|
[C in keyof DB[TB]]: InsertValueExpression<DB[TB][C]>;
|
|
10
10
|
};
|
|
11
|
-
export declare type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | InsertObject<DB, TB
|
|
11
|
+
export declare type InsertObjectOrList<DB, TB extends keyof DB> = InsertObject<DB, TB> | ReadonlyArray<InsertObject<DB, TB>>;
|
|
12
12
|
declare type InsertValueExpression<T> = T | AnyQueryBuilder | AnyRawBuilder | GeneratedPlaceholder;
|
|
13
13
|
export declare function parseInsertObjectOrList(args: InsertObjectOrList<any, any>): [ReadonlyArray<ColumnNode>, ReadonlyArray<InsertValuesNode>];
|
|
14
14
|
export declare function parseInsertValueExpression(value: InsertValueExpression<PrimitiveValue>): ValueNode | RawNode | SelectQueryNode;
|
|
@@ -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;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { UnionNode } from '../operation-node/union-node.js';
|
|
2
|
+
import { QueryBuilder } from '../query-builder/query-builder.js';
|
|
3
|
+
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
4
|
+
export declare type UnionExpression<DB, O> = QueryBuilder<DB, any, O> | RawBuilder<O>;
|
|
5
|
+
export declare function parseUnion(union: UnionExpression<any, any>, all: boolean): UnionNode;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { QueryNode } from '../operation-node/query-node.js';
|
|
2
|
+
import { UnionNode } from '../operation-node/union-node.js';
|
|
3
|
+
export function parseUnion(union, all) {
|
|
4
|
+
const node = union.toOperationNode();
|
|
5
|
+
if (QueryNode.isMutating(node)) {
|
|
6
|
+
throw new Error("can't combine insert, update or delete queries using union");
|
|
7
|
+
}
|
|
8
|
+
return UnionNode.create(node, all);
|
|
9
|
+
}
|
|
@@ -3,6 +3,6 @@ import { AnyQueryBuilder, AnyRawBuilder, QueryBuilderFactory, RawBuilderFactory
|
|
|
3
3
|
import { ExtractTypeFromReferenceExpression } from './reference-parser.js';
|
|
4
4
|
import { ParseContext } from './parse-context.js';
|
|
5
5
|
export declare type ValueExpression<DB, TB extends keyof DB, RE> = ExtractTypeFromReferenceExpression<DB, TB, RE> | AnyQueryBuilder | QueryBuilderFactory<DB, TB> | AnyRawBuilder | RawBuilderFactory<DB, TB>;
|
|
6
|
-
export declare type ValueExpressionOrList<DB, TB extends keyof DB, RE> = ValueExpression<DB, TB, RE> | ValueExpression<DB, TB, RE
|
|
6
|
+
export declare type ValueExpressionOrList<DB, TB extends keyof DB, RE> = ValueExpression<DB, TB, RE> | ReadonlyArray<ValueExpression<DB, TB, RE>>;
|
|
7
7
|
export declare function parseValueExpressionOrList(ctx: ParseContext, arg: ValueExpressionOrList<any, any, any>): ValueExpressionNode;
|
|
8
8
|
export declare function parseValueExpression(ctx: ParseContext, arg: ValueExpression<any, any, any>): ValueExpressionNode;
|
|
@@ -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
|
*
|
|
@@ -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() {
|
|
@@ -18,6 +18,7 @@ import { QueryExecutor } from '../query-executor/query-executor.js';
|
|
|
18
18
|
import { QueryId } from '../util/query-id.js';
|
|
19
19
|
import { OnConflictConstraintTarget } from '../parser/on-conflict-parser.js';
|
|
20
20
|
import { ParseContext } from '../parser/parse-context.js';
|
|
21
|
+
import { UnionExpression } from '../parser/union-parser.js';
|
|
21
22
|
/**
|
|
22
23
|
* The main query builder class.
|
|
23
24
|
*
|
|
@@ -998,7 +999,7 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
|
|
|
998
999
|
* ```
|
|
999
1000
|
*/
|
|
1000
1001
|
values(row: InsertObject<DB, TB>): QueryBuilder<DB, TB, O>;
|
|
1001
|
-
values(row: InsertObject<DB, TB
|
|
1002
|
+
values(row: ReadonlyArray<InsertObject<DB, TB>>): QueryBuilder<DB, TB, O>;
|
|
1002
1003
|
/**
|
|
1003
1004
|
* Ignores the insert if the column or constraint given as the first
|
|
1004
1005
|
* argument conflicts with the current rows in the database. The
|
|
@@ -1553,6 +1554,34 @@ export declare class QueryBuilder<DB, TB extends keyof DB, O = {}> implements Op
|
|
|
1553
1554
|
* ```
|
|
1554
1555
|
*/
|
|
1555
1556
|
offset(offset: number): QueryBuilder<DB, TB, O>;
|
|
1557
|
+
/**
|
|
1558
|
+
* Combines another select query or raw expression to this query using `union`.
|
|
1559
|
+
*
|
|
1560
|
+
* The output row type of the combined query must match `this` query.
|
|
1561
|
+
*
|
|
1562
|
+
* @xample
|
|
1563
|
+
* ```ts
|
|
1564
|
+
* db.selectFrom('person')
|
|
1565
|
+
* .select(['id', 'first_name as name'])
|
|
1566
|
+
* .union(db.selectFrom('pet').select(['id', 'name']))
|
|
1567
|
+
* .orderBy('name')
|
|
1568
|
+
* ```
|
|
1569
|
+
*/
|
|
1570
|
+
union(expression: UnionExpression<DB, O>): QueryBuilder<DB, TB, O>;
|
|
1571
|
+
/**
|
|
1572
|
+
* Combines another select query or raw expression to this query using `union all`.
|
|
1573
|
+
*
|
|
1574
|
+
* The output row type of the combined query must match `this` query.
|
|
1575
|
+
*
|
|
1576
|
+
* @xample
|
|
1577
|
+
* ```ts
|
|
1578
|
+
* db.selectFrom('person')
|
|
1579
|
+
* .select(['id', 'first_name as name'])
|
|
1580
|
+
* .unionAll(db.selectFrom('pet').select(['id', 'name']))
|
|
1581
|
+
* .orderBy('name')
|
|
1582
|
+
* ```
|
|
1583
|
+
*/
|
|
1584
|
+
unionAll(expression: UnionExpression<DB, O>): QueryBuilder<DB, TB, O>;
|
|
1556
1585
|
/**
|
|
1557
1586
|
* Gives an alias for the query. This method is only useful for sub queries.
|
|
1558
1587
|
*
|
|
@@ -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,8 @@ 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';
|
|
20
|
+
import { parseUnion } from '../parser/union-parser.js';
|
|
22
21
|
/**
|
|
23
22
|
* The main query builder class.
|
|
24
23
|
*
|
|
@@ -43,7 +42,7 @@ export class QueryBuilder {
|
|
|
43
42
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
44
43
|
return new QueryBuilder({
|
|
45
44
|
...this.#props,
|
|
46
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
45
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseWhereFilter(this.#props.parseContext, args)),
|
|
47
46
|
});
|
|
48
47
|
}
|
|
49
48
|
/**
|
|
@@ -101,14 +100,14 @@ export class QueryBuilder {
|
|
|
101
100
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
102
101
|
return new QueryBuilder({
|
|
103
102
|
...this.#props,
|
|
104
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
103
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
|
|
105
104
|
});
|
|
106
105
|
}
|
|
107
106
|
orWhere(...args) {
|
|
108
107
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
109
108
|
return new QueryBuilder({
|
|
110
109
|
...this.#props,
|
|
111
|
-
queryNode: QueryNode.
|
|
110
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseWhereFilter(this.#props.parseContext, args)),
|
|
112
111
|
});
|
|
113
112
|
}
|
|
114
113
|
/**
|
|
@@ -121,7 +120,7 @@ export class QueryBuilder {
|
|
|
121
120
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
122
121
|
return new QueryBuilder({
|
|
123
122
|
...this.#props,
|
|
124
|
-
queryNode: QueryNode.
|
|
123
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
|
|
125
124
|
});
|
|
126
125
|
}
|
|
127
126
|
/**
|
|
@@ -187,7 +186,7 @@ export class QueryBuilder {
|
|
|
187
186
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
188
187
|
return new QueryBuilder({
|
|
189
188
|
...this.#props,
|
|
190
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
189
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
|
|
191
190
|
});
|
|
192
191
|
}
|
|
193
192
|
/**
|
|
@@ -197,7 +196,7 @@ export class QueryBuilder {
|
|
|
197
196
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
198
197
|
return new QueryBuilder({
|
|
199
198
|
...this.#props,
|
|
200
|
-
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode,
|
|
199
|
+
queryNode: QueryNode.cloneWithWhere(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
|
|
201
200
|
});
|
|
202
201
|
}
|
|
203
202
|
/**
|
|
@@ -207,7 +206,7 @@ export class QueryBuilder {
|
|
|
207
206
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
208
207
|
return new QueryBuilder({
|
|
209
208
|
...this.#props,
|
|
210
|
-
queryNode: QueryNode.
|
|
209
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
|
|
211
210
|
});
|
|
212
211
|
}
|
|
213
212
|
/**
|
|
@@ -217,14 +216,14 @@ export class QueryBuilder {
|
|
|
217
216
|
assertCanHaveWhereClause(this.#props.queryNode);
|
|
218
217
|
return new QueryBuilder({
|
|
219
218
|
...this.#props,
|
|
220
|
-
queryNode: QueryNode.
|
|
219
|
+
queryNode: QueryNode.cloneWithOrWhere(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
|
|
221
220
|
});
|
|
222
221
|
}
|
|
223
222
|
having(...args) {
|
|
224
223
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
225
224
|
return new QueryBuilder({
|
|
226
225
|
...this.#props,
|
|
227
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode,
|
|
226
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseHavingFilter(this.#props.parseContext, args)),
|
|
228
227
|
});
|
|
229
228
|
}
|
|
230
229
|
/**
|
|
@@ -235,14 +234,14 @@ export class QueryBuilder {
|
|
|
235
234
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
236
235
|
return new QueryBuilder({
|
|
237
236
|
...this.#props,
|
|
238
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode,
|
|
237
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
|
|
239
238
|
});
|
|
240
239
|
}
|
|
241
240
|
orHaving(...args) {
|
|
242
241
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
243
242
|
return new QueryBuilder({
|
|
244
243
|
...this.#props,
|
|
245
|
-
queryNode: SelectQueryNode.
|
|
244
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseHavingFilter(this.#props.parseContext, args)),
|
|
246
245
|
});
|
|
247
246
|
}
|
|
248
247
|
/**
|
|
@@ -253,7 +252,7 @@ export class QueryBuilder {
|
|
|
253
252
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
254
253
|
return new QueryBuilder({
|
|
255
254
|
...this.#props,
|
|
256
|
-
queryNode: SelectQueryNode.
|
|
255
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseReferenceFilter(this.#props.parseContext, lhs, op, rhs)),
|
|
257
256
|
});
|
|
258
257
|
}
|
|
259
258
|
/**
|
|
@@ -264,7 +263,7 @@ export class QueryBuilder {
|
|
|
264
263
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
265
264
|
return new QueryBuilder({
|
|
266
265
|
...this.#props,
|
|
267
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode,
|
|
266
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
|
|
268
267
|
});
|
|
269
268
|
}
|
|
270
269
|
/**
|
|
@@ -275,7 +274,7 @@ export class QueryBuilder {
|
|
|
275
274
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
276
275
|
return new QueryBuilder({
|
|
277
276
|
...this.#props,
|
|
278
|
-
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode,
|
|
277
|
+
queryNode: SelectQueryNode.cloneWithHaving(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
|
|
279
278
|
});
|
|
280
279
|
}
|
|
281
280
|
/**
|
|
@@ -286,7 +285,7 @@ export class QueryBuilder {
|
|
|
286
285
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
287
286
|
return new QueryBuilder({
|
|
288
287
|
...this.#props,
|
|
289
|
-
queryNode: SelectQueryNode.
|
|
288
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseExistFilter(this.#props.parseContext, arg)),
|
|
290
289
|
});
|
|
291
290
|
}
|
|
292
291
|
/**
|
|
@@ -297,7 +296,7 @@ export class QueryBuilder {
|
|
|
297
296
|
assertCanHaveHavingClause(this.#props.queryNode);
|
|
298
297
|
return new QueryBuilder({
|
|
299
298
|
...this.#props,
|
|
300
|
-
queryNode: SelectQueryNode.
|
|
299
|
+
queryNode: SelectQueryNode.cloneWithOrHaving(this.#props.queryNode, parseNotExistFilter(this.#props.parseContext, arg)),
|
|
301
300
|
});
|
|
302
301
|
}
|
|
303
302
|
select(selection) {
|
|
@@ -714,14 +713,14 @@ export class QueryBuilder {
|
|
|
714
713
|
assertCanHaveOrderByClause(this.#props.queryNode);
|
|
715
714
|
return new QueryBuilder({
|
|
716
715
|
...this.#props,
|
|
717
|
-
queryNode: SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode,
|
|
716
|
+
queryNode: SelectQueryNode.cloneWithOrderByItem(this.#props.queryNode, parseOrderBy(this.#props.parseContext, orderBy, direction)),
|
|
718
717
|
});
|
|
719
718
|
}
|
|
720
719
|
groupBy(orderBy) {
|
|
721
720
|
assertCanHaveGroupByClause(this.#props.queryNode);
|
|
722
721
|
return new QueryBuilder({
|
|
723
722
|
...this.#props,
|
|
724
|
-
queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode,
|
|
723
|
+
queryNode: SelectQueryNode.cloneWithGroupByItems(this.#props.queryNode, parseGroupBy(this.#props.parseContext, orderBy)),
|
|
725
724
|
});
|
|
726
725
|
}
|
|
727
726
|
/**
|
|
@@ -776,6 +775,46 @@ export class QueryBuilder {
|
|
|
776
775
|
queryNode: SelectQueryNode.cloneWithOffset(this.#props.queryNode, OffsetNode.create(offset)),
|
|
777
776
|
});
|
|
778
777
|
}
|
|
778
|
+
/**
|
|
779
|
+
* Combines another select query or raw expression to this query using `union`.
|
|
780
|
+
*
|
|
781
|
+
* The output row type of the combined query must match `this` query.
|
|
782
|
+
*
|
|
783
|
+
* @xample
|
|
784
|
+
* ```ts
|
|
785
|
+
* db.selectFrom('person')
|
|
786
|
+
* .select(['id', 'first_name as name'])
|
|
787
|
+
* .union(db.selectFrom('pet').select(['id', 'name']))
|
|
788
|
+
* .orderBy('name')
|
|
789
|
+
* ```
|
|
790
|
+
*/
|
|
791
|
+
union(expression) {
|
|
792
|
+
assertCanHaveUnion(this.#props.queryNode);
|
|
793
|
+
return new QueryBuilder({
|
|
794
|
+
...this.#props,
|
|
795
|
+
queryNode: SelectQueryNode.cloneWithUnion(this.#props.queryNode, parseUnion(expression, false)),
|
|
796
|
+
});
|
|
797
|
+
}
|
|
798
|
+
/**
|
|
799
|
+
* Combines another select query or raw expression to this query using `union all`.
|
|
800
|
+
*
|
|
801
|
+
* The output row type of the combined query must match `this` query.
|
|
802
|
+
*
|
|
803
|
+
* @xample
|
|
804
|
+
* ```ts
|
|
805
|
+
* db.selectFrom('person')
|
|
806
|
+
* .select(['id', 'first_name as name'])
|
|
807
|
+
* .unionAll(db.selectFrom('pet').select(['id', 'name']))
|
|
808
|
+
* .orderBy('name')
|
|
809
|
+
* ```
|
|
810
|
+
*/
|
|
811
|
+
unionAll(expression) {
|
|
812
|
+
assertCanHaveUnion(this.#props.queryNode);
|
|
813
|
+
return new QueryBuilder({
|
|
814
|
+
...this.#props,
|
|
815
|
+
queryNode: SelectQueryNode.cloneWithUnion(this.#props.queryNode, parseUnion(expression, true)),
|
|
816
|
+
});
|
|
817
|
+
}
|
|
779
818
|
/**
|
|
780
819
|
* Gives an alias for the query. This method is only useful for sub queries.
|
|
781
820
|
*
|
|
@@ -958,7 +997,7 @@ function assertCanHaveUpdates(node) {
|
|
|
958
997
|
}
|
|
959
998
|
function assertCanHaveReturningClause(node) {
|
|
960
999
|
if (!QueryNode.isMutating(node)) {
|
|
961
|
-
throw new Error('only
|
|
1000
|
+
throw new Error('only insert, delete and update queries can have a returning clause');
|
|
962
1001
|
}
|
|
963
1002
|
}
|
|
964
1003
|
function assertCanHaveOrderByClause(node) {
|
|
@@ -981,3 +1020,8 @@ function assertCanHaveOffset(node) {
|
|
|
981
1020
|
throw new Error('only a select query can have an offset');
|
|
982
1021
|
}
|
|
983
1022
|
}
|
|
1023
|
+
function assertCanHaveUnion(node) {
|
|
1024
|
+
if (!SelectQueryNode.is(node)) {
|
|
1025
|
+
throw new Error('only a select query can have an union');
|
|
1026
|
+
}
|
|
1027
|
+
}
|