kysely 0.21.6 → 0.22.0
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 +2 -2
- package/dist/cjs/index.d.ts +9 -4
- package/dist/cjs/index.js +7 -2
- package/dist/cjs/kysely.d.ts +3 -3
- package/dist/cjs/kysely.js +3 -3
- package/dist/cjs/migration/file-migration-provider.js +7 -2
- package/dist/cjs/operation-node/aggregate-function-node.d.ts +22 -0
- package/dist/cjs/operation-node/aggregate-function-node.js +31 -0
- package/dist/cjs/operation-node/alias-node.d.ts +2 -1
- package/dist/cjs/operation-node/group-by-node.d.ts +1 -1
- package/dist/cjs/operation-node/group-by-node.js +3 -3
- package/dist/cjs/operation-node/insert-query-node.d.ts +2 -1
- package/dist/cjs/operation-node/operation-node-transformer.d.ts +10 -2
- package/dist/cjs/operation-node/operation-node-transformer.js +38 -5
- package/dist/cjs/operation-node/operation-node-utils.d.ts +2 -1
- package/dist/cjs/operation-node/operation-node-visitor.d.ts +10 -2
- package/dist/cjs/operation-node/operation-node-visitor.js +5 -1
- package/dist/cjs/operation-node/operation-node.d.ts +1 -1
- package/dist/cjs/operation-node/over-node.d.ts +19 -0
- package/dist/cjs/operation-node/over-node.js +35 -0
- package/dist/cjs/operation-node/partition-by-item-node.d.ts +14 -0
- package/dist/cjs/operation-node/{union-node.js → partition-by-item-node.js} +6 -7
- package/dist/cjs/operation-node/partition-by-node.d.ts +14 -0
- package/dist/cjs/operation-node/partition-by-node.js +24 -0
- package/dist/cjs/operation-node/select-query-node.d.ts +3 -3
- package/dist/cjs/operation-node/select-query-node.js +4 -4
- package/dist/cjs/operation-node/set-operation-node.d.ts +18 -0
- package/dist/cjs/operation-node/set-operation-node.js +20 -0
- package/dist/cjs/operation-node/value-list-node.d.ts +2 -1
- package/dist/cjs/parser/complex-expression-parser.d.ts +6 -4
- package/dist/cjs/parser/group-by-parser.d.ts +1 -1
- package/dist/cjs/parser/group-by-parser.js +2 -2
- package/dist/cjs/parser/parse-utils.d.ts +2 -0
- package/dist/cjs/parser/parse-utils.js +9 -1
- package/dist/cjs/parser/partition-by-parser.d.ts +6 -0
- package/dist/cjs/parser/partition-by-parser.js +9 -0
- package/dist/cjs/parser/reference-parser.d.ts +2 -1
- package/dist/cjs/parser/select-parser.d.ts +4 -3
- package/dist/cjs/parser/set-operation-parser.d.ts +5 -0
- package/dist/cjs/parser/set-operation-parser.js +8 -0
- package/dist/cjs/parser/value-parser.d.ts +2 -1
- package/dist/cjs/query-builder/aggregate-function-builder.d.ts +117 -0
- package/dist/cjs/query-builder/aggregate-function-builder.js +146 -0
- package/dist/cjs/query-builder/expression-builder.d.ts +3 -3
- package/dist/cjs/query-builder/expression-builder.js +3 -3
- package/dist/cjs/query-builder/{function-builder.d.ts → function-module.d.ts} +49 -42
- package/dist/cjs/query-builder/{function-builder.js → function-module.js} +70 -59
- package/dist/cjs/query-builder/over-builder.d.ts +59 -0
- package/dist/cjs/query-builder/over-builder.js +50 -0
- package/dist/cjs/query-builder/select-query-builder.d.ts +63 -3
- package/dist/cjs/query-builder/select-query-builder.js +83 -3
- package/dist/cjs/query-compiler/default-query-compiler.d.ts +10 -2
- package/dist/cjs/query-compiler/default-query-compiler.js +41 -14
- package/dist/cjs/raw-builder/sql.d.ts +13 -5
- package/dist/cjs/raw-builder/sql.js +6 -0
- package/dist/cjs/util/type-utils.d.ts +4 -0
- package/dist/esm/index.d.ts +9 -4
- package/dist/esm/index.js +7 -2
- package/dist/esm/kysely.d.ts +3 -3
- package/dist/esm/kysely.js +3 -3
- package/dist/esm/migration/file-migration-provider.js +7 -2
- package/dist/esm/operation-node/aggregate-function-node.d.ts +22 -0
- package/dist/esm/operation-node/aggregate-function-node.js +29 -0
- package/dist/esm/operation-node/alias-node.d.ts +2 -1
- package/dist/esm/operation-node/group-by-node.d.ts +1 -1
- package/dist/esm/operation-node/group-by-node.js +3 -3
- package/dist/esm/operation-node/insert-query-node.d.ts +2 -1
- package/dist/esm/operation-node/operation-node-transformer.d.ts +10 -2
- package/dist/esm/operation-node/operation-node-transformer.js +38 -5
- package/dist/esm/operation-node/operation-node-utils.d.ts +2 -1
- package/dist/esm/operation-node/operation-node-visitor.d.ts +10 -2
- package/dist/esm/operation-node/operation-node-visitor.js +5 -1
- package/dist/esm/operation-node/operation-node.d.ts +1 -1
- package/dist/esm/operation-node/over-node.d.ts +19 -0
- package/dist/esm/operation-node/over-node.js +33 -0
- package/dist/esm/operation-node/partition-by-item-node.d.ts +14 -0
- package/dist/esm/operation-node/partition-by-item-node.js +16 -0
- package/dist/esm/operation-node/partition-by-node.d.ts +14 -0
- package/dist/esm/operation-node/partition-by-node.js +22 -0
- package/dist/esm/operation-node/select-query-node.d.ts +3 -3
- package/dist/esm/operation-node/select-query-node.js +4 -4
- package/dist/esm/operation-node/set-operation-node.d.ts +18 -0
- package/dist/esm/operation-node/set-operation-node.js +18 -0
- package/dist/esm/operation-node/value-list-node.d.ts +2 -1
- package/dist/esm/parser/complex-expression-parser.d.ts +6 -4
- package/dist/esm/parser/group-by-parser.d.ts +1 -1
- package/dist/esm/parser/group-by-parser.js +2 -2
- package/dist/esm/parser/parse-utils.d.ts +2 -0
- package/dist/esm/parser/parse-utils.js +7 -0
- package/dist/esm/parser/partition-by-parser.d.ts +6 -0
- package/dist/esm/parser/partition-by-parser.js +6 -0
- package/dist/esm/parser/reference-parser.d.ts +2 -1
- package/dist/esm/parser/select-parser.d.ts +4 -3
- package/dist/esm/parser/set-operation-parser.d.ts +5 -0
- package/dist/esm/parser/set-operation-parser.js +5 -0
- package/dist/esm/parser/value-parser.d.ts +2 -1
- package/dist/esm/query-builder/aggregate-function-builder.d.ts +117 -0
- package/dist/esm/query-builder/aggregate-function-builder.js +142 -0
- package/dist/esm/query-builder/expression-builder.d.ts +3 -3
- package/dist/esm/query-builder/expression-builder.js +3 -3
- package/dist/esm/query-builder/{function-builder.d.ts → function-module.d.ts} +49 -42
- package/dist/esm/query-builder/{function-builder.js → function-module.js} +69 -58
- package/dist/esm/query-builder/over-builder.d.ts +59 -0
- package/dist/esm/query-builder/over-builder.js +47 -0
- package/dist/esm/query-builder/select-query-builder.d.ts +63 -3
- package/dist/esm/query-builder/select-query-builder.js +83 -3
- package/dist/esm/query-compiler/default-query-compiler.d.ts +10 -2
- package/dist/esm/query-compiler/default-query-compiler.js +41 -14
- package/dist/esm/raw-builder/sql.d.ts +13 -5
- package/dist/esm/raw-builder/sql.js +6 -0
- package/dist/esm/util/type-utils.d.ts +4 -0
- package/package.json +4 -1
- package/dist/cjs/operation-node/union-node.d.ts +0 -16
- package/dist/cjs/parser/union-parser.d.ts +0 -5
- package/dist/cjs/parser/union-parser.js +0 -8
- package/dist/esm/operation-node/union-node.d.ts +0 -16
- package/dist/esm/operation-node/union-node.js +0 -17
- package/dist/esm/parser/union-parser.d.ts +0 -5
- package/dist/esm/parser/union-parser.js +0 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | '
|
|
1
|
+
export declare type OperationNodeKind = 'IdentifierNode' | 'SchemableIdentifierNode' | 'RawNode' | 'SelectQueryNode' | 'SelectionNode' | 'ReferenceNode' | 'ColumnNode' | 'TableNode' | 'AliasNode' | 'FromNode' | 'SelectAllNode' | 'FilterNode' | 'AndNode' | 'OrNode' | 'ParensNode' | 'ValueNode' | 'ValueListNode' | 'PrimitiveValueListNode' | 'JoinNode' | 'OperatorNode' | 'WhereNode' | 'InsertQueryNode' | 'DeleteQueryNode' | 'ReturningNode' | 'CreateTableNode' | 'ColumnDefinitionNode' | 'AddColumnNode' | 'DropTableNode' | 'DataTypeNode' | 'OrderByNode' | 'OrderByItemNode' | 'GroupByNode' | 'GroupByItemNode' | 'UpdateQueryNode' | 'ColumnUpdateNode' | 'LimitNode' | 'OffsetNode' | 'OnConflictNode' | 'OnDuplicateKeyNode' | 'CreateIndexNode' | 'DropIndexNode' | 'ListNode' | 'ReferencesNode' | 'PrimaryKeyConstraintNode' | 'UniqueConstraintNode' | 'CheckConstraintNode' | 'ForeignKeyConstraintNode' | 'WithNode' | 'CommonTableExpressionNode' | 'HavingNode' | 'CreateSchemaNode' | 'DropSchemaNode' | 'AlterTableNode' | 'ModifyColumnNode' | 'DropColumnNode' | 'RenameColumnNode' | 'AlterColumnNode' | 'AddConstraintNode' | 'DropConstraintNode' | 'CreateViewNode' | 'DropViewNode' | 'GeneratedNode' | 'DefaultValueNode' | 'OnNode' | 'ValuesNode' | 'CommonTableExpressionNameNode' | 'SelectModifierNode' | 'CreateTypeNode' | 'DropTypeNode' | 'ExplainNode' | 'DefaultInsertValueNode' | 'AggregateFunctionNode' | 'OverNode' | 'PartitionByNode' | 'PartitionByItemNode' | 'SetOperationNode';
|
|
2
2
|
export interface OperationNode {
|
|
3
3
|
readonly kind: OperationNodeKind;
|
|
4
4
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { OperationNode } from './operation-node.js';
|
|
2
|
+
import { OrderByItemNode } from './order-by-item-node.js';
|
|
3
|
+
import { OrderByNode } from './order-by-node.js';
|
|
4
|
+
import { PartitionByItemNode } from './partition-by-item-node.js';
|
|
5
|
+
import { PartitionByNode } from './partition-by-node.js';
|
|
6
|
+
export interface OverNode extends OperationNode {
|
|
7
|
+
readonly kind: 'OverNode';
|
|
8
|
+
readonly orderBy?: OrderByNode;
|
|
9
|
+
readonly partitionBy?: PartitionByNode;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare const OverNode: Readonly<{
|
|
15
|
+
is(node: OperationNode): node is OverNode;
|
|
16
|
+
create(): OverNode;
|
|
17
|
+
cloneWithOrderByItem(overNode: OverNode, item: OrderByItemNode): OverNode;
|
|
18
|
+
cloneWithPartitionByItems(overNode: OverNode, items: ReadonlyArray<PartitionByItemNode>): OverNode;
|
|
19
|
+
}>;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/// <reference types="./over-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
import { OrderByNode } from './order-by-node.js';
|
|
4
|
+
import { PartitionByNode } from './partition-by-node.js';
|
|
5
|
+
/**
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export const OverNode = freeze({
|
|
9
|
+
is(node) {
|
|
10
|
+
return node.kind === 'OverNode';
|
|
11
|
+
},
|
|
12
|
+
create() {
|
|
13
|
+
return freeze({
|
|
14
|
+
kind: 'OverNode',
|
|
15
|
+
});
|
|
16
|
+
},
|
|
17
|
+
cloneWithOrderByItem(overNode, item) {
|
|
18
|
+
return freeze({
|
|
19
|
+
...overNode,
|
|
20
|
+
orderBy: overNode.orderBy
|
|
21
|
+
? OrderByNode.cloneWithItem(overNode.orderBy, item)
|
|
22
|
+
: OrderByNode.create(item),
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
cloneWithPartitionByItems(overNode, items) {
|
|
26
|
+
return freeze({
|
|
27
|
+
...overNode,
|
|
28
|
+
partitionBy: overNode.partitionBy
|
|
29
|
+
? PartitionByNode.cloneWithItems(overNode.partitionBy, items)
|
|
30
|
+
: PartitionByNode.create(items),
|
|
31
|
+
});
|
|
32
|
+
},
|
|
33
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { ColumnNode } from './column-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
import { ReferenceNode } from './reference-node.js';
|
|
4
|
+
export interface PartitionByItemNode extends OperationNode {
|
|
5
|
+
readonly kind: 'PartitionByItemNode';
|
|
6
|
+
readonly partitionBy: ColumnNode | ReferenceNode;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
11
|
+
export declare const PartitionByItemNode: Readonly<{
|
|
12
|
+
is(node: OperationNode): node is PartitionByItemNode;
|
|
13
|
+
create(partitionBy: ColumnNode | ReferenceNode): PartitionByItemNode;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/// <reference types="./partition-by-item-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export const PartitionByItemNode = freeze({
|
|
7
|
+
is(node) {
|
|
8
|
+
return node.kind === 'PartitionByItemNode';
|
|
9
|
+
},
|
|
10
|
+
create(partitionBy) {
|
|
11
|
+
return freeze({
|
|
12
|
+
kind: 'PartitionByItemNode',
|
|
13
|
+
partitionBy,
|
|
14
|
+
});
|
|
15
|
+
},
|
|
16
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { PartitionByItemNode } from './partition-by-item-node.js';
|
|
2
|
+
import { OperationNode } from './operation-node.js';
|
|
3
|
+
export interface PartitionByNode extends OperationNode {
|
|
4
|
+
readonly kind: 'PartitionByNode';
|
|
5
|
+
readonly items: ReadonlyArray<PartitionByItemNode>;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* @internal
|
|
9
|
+
*/
|
|
10
|
+
export declare const PartitionByNode: Readonly<{
|
|
11
|
+
is(node: OperationNode): node is PartitionByNode;
|
|
12
|
+
create(items: ReadonlyArray<PartitionByItemNode>): PartitionByNode;
|
|
13
|
+
cloneWithItems(partitionBy: PartitionByNode, items: ReadonlyArray<PartitionByItemNode>): PartitionByNode;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/// <reference types="./partition-by-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export const PartitionByNode = freeze({
|
|
7
|
+
is(node) {
|
|
8
|
+
return node.kind === 'PartitionByNode';
|
|
9
|
+
},
|
|
10
|
+
create(items) {
|
|
11
|
+
return freeze({
|
|
12
|
+
kind: 'PartitionByNode',
|
|
13
|
+
items: freeze(items),
|
|
14
|
+
});
|
|
15
|
+
},
|
|
16
|
+
cloneWithItems(partitionBy, items) {
|
|
17
|
+
return freeze({
|
|
18
|
+
...partitionBy,
|
|
19
|
+
items: freeze([...partitionBy.items, ...items]),
|
|
20
|
+
});
|
|
21
|
+
},
|
|
22
|
+
});
|
|
@@ -12,9 +12,9 @@ import { OrderByNode } from './order-by-node.js';
|
|
|
12
12
|
import { SelectionNode } from './selection-node.js';
|
|
13
13
|
import { WhereNode } from './where-node.js';
|
|
14
14
|
import { WithNode } from './with-node.js';
|
|
15
|
-
import { UnionNode } from './union-node.js';
|
|
16
15
|
import { SelectModifierNode } from './select-modifier-node.js';
|
|
17
16
|
import { ExplainNode } from './explain-node.js';
|
|
17
|
+
import { SetOperationNode } from './set-operation-node.js';
|
|
18
18
|
export interface SelectQueryNode extends OperationNode {
|
|
19
19
|
readonly kind: 'SelectQueryNode';
|
|
20
20
|
readonly from: FromNode;
|
|
@@ -30,8 +30,8 @@ export interface SelectQueryNode extends OperationNode {
|
|
|
30
30
|
readonly offset?: OffsetNode;
|
|
31
31
|
readonly with?: WithNode;
|
|
32
32
|
readonly having?: HavingNode;
|
|
33
|
-
readonly union?: ReadonlyArray<UnionNode>;
|
|
34
33
|
readonly explain?: ExplainNode;
|
|
34
|
+
readonly setOperations?: ReadonlyArray<SetOperationNode>;
|
|
35
35
|
}
|
|
36
36
|
/**
|
|
37
37
|
* @internal
|
|
@@ -49,6 +49,6 @@ export declare const SelectQueryNode: Readonly<{
|
|
|
49
49
|
cloneWithOffset(selectNode: SelectQueryNode, offset: OffsetNode): SelectQueryNode;
|
|
50
50
|
cloneWithHaving(selectNode: SelectQueryNode, filter: FilterExpressionNode): SelectQueryNode;
|
|
51
51
|
cloneWithOrHaving(selectNode: SelectQueryNode, filter: FilterExpressionNode): SelectQueryNode;
|
|
52
|
-
|
|
52
|
+
cloneWithSetOperation(selectNode: SelectQueryNode, setOperation: SetOperationNode): SelectQueryNode;
|
|
53
53
|
cloneWithExplain(selectNode: SelectQueryNode, explain: ExplainNode): SelectQueryNode;
|
|
54
54
|
}>;
|
|
@@ -94,12 +94,12 @@ export const SelectQueryNode = freeze({
|
|
|
94
94
|
: HavingNode.create(filter),
|
|
95
95
|
});
|
|
96
96
|
},
|
|
97
|
-
|
|
97
|
+
cloneWithSetOperation(selectNode, setOperation) {
|
|
98
98
|
return freeze({
|
|
99
99
|
...selectNode,
|
|
100
|
-
|
|
101
|
-
? freeze([...selectNode.
|
|
102
|
-
: freeze([
|
|
100
|
+
setOperations: selectNode.setOperations
|
|
101
|
+
? freeze([...selectNode.setOperations, setOperation])
|
|
102
|
+
: freeze([setOperation]),
|
|
103
103
|
});
|
|
104
104
|
},
|
|
105
105
|
cloneWithExplain(selectNode, explain) {
|
|
@@ -0,0 +1,18 @@
|
|
|
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 SetOperationExpressionNode = SelectQueryNode | RawNode;
|
|
5
|
+
export declare type SetOperator = 'union' | 'intersect' | 'except';
|
|
6
|
+
export interface SetOperationNode extends OperationNode {
|
|
7
|
+
kind: 'SetOperationNode';
|
|
8
|
+
operator: SetOperator;
|
|
9
|
+
expression: SetOperationExpressionNode;
|
|
10
|
+
all: boolean;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export declare const SetOperationNode: Readonly<{
|
|
16
|
+
is(node: OperationNode): node is SetOperationNode;
|
|
17
|
+
create(operator: SetOperator, expression: SetOperationExpressionNode, all: boolean): SetOperationNode;
|
|
18
|
+
}>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/// <reference types="./set-operation-node.d.ts" />
|
|
2
|
+
import { freeze } from '../util/object-utils.js';
|
|
3
|
+
/**
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export const SetOperationNode = freeze({
|
|
7
|
+
is(node) {
|
|
8
|
+
return node.kind === 'SetOperationNode';
|
|
9
|
+
},
|
|
10
|
+
create(operator, expression, all) {
|
|
11
|
+
return freeze({
|
|
12
|
+
kind: 'SetOperationNode',
|
|
13
|
+
operator,
|
|
14
|
+
expression,
|
|
15
|
+
all,
|
|
16
|
+
});
|
|
17
|
+
},
|
|
18
|
+
});
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import { AggregateFunctionNode } from './aggregate-function-node.js';
|
|
1
2
|
import { DefaultInsertValueNode } from './default-insert-value-node.js';
|
|
2
3
|
import { OperationNode } from './operation-node.js';
|
|
3
4
|
import { RawNode } from './raw-node.js';
|
|
4
5
|
import { ReferenceNode } from './reference-node.js';
|
|
5
6
|
import { SelectQueryNode } from './select-query-node.js';
|
|
6
7
|
import { ValueNode } from './value-node.js';
|
|
7
|
-
export declare type ListNodeItem = ValueNode | ReferenceNode | DefaultInsertValueNode | SelectQueryNode | RawNode;
|
|
8
|
+
export declare type ListNodeItem = ValueNode | ReferenceNode | DefaultInsertValueNode | SelectQueryNode | RawNode | AggregateFunctionNode;
|
|
8
9
|
export interface ValueListNode extends OperationNode {
|
|
9
10
|
readonly kind: 'ValueListNode';
|
|
10
11
|
readonly values: ReadonlyArray<ListNodeItem>;
|
|
@@ -1,10 +1,12 @@
|
|
|
1
|
+
import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
|
|
1
2
|
import { AliasNode } from '../operation-node/alias-node.js';
|
|
2
3
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
3
4
|
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
5
|
+
import { AggregateFunctionBuilder } from '../query-builder/aggregate-function-builder.js';
|
|
4
6
|
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
5
|
-
import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, AnySelectQueryBuilder, SelectQueryBuilderFactory, RawBuilderFactory } from '../util/type-utils.js';
|
|
6
|
-
export declare type ComplexExpression<DB, TB extends keyof DB, V = any> = AnySelectQueryBuilder | SelectQueryBuilderFactory<DB, TB> | RawBuilder<V> | RawBuilderFactory<DB, TB, V>;
|
|
7
|
-
export declare type AliasedComplexExpression<DB, TB extends keyof DB> = AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB> | AnyAliasedRawBuilder | AliasedRawBuilderFactory<DB, TB>;
|
|
8
|
-
export declare function parseComplexExpression(exp: ComplexExpression<any, any>): SelectQueryNode | RawNode;
|
|
7
|
+
import { AliasedQueryBuilderFactory, AliasedRawBuilderFactory, AnyAliasedQueryBuilder, AnyAliasedRawBuilder, AnySelectQueryBuilder, SelectQueryBuilderFactory, RawBuilderFactory, AggregateFunctionBuilderFactory, AliasedAggregateFunctionBuilderFactory, AnyAliasedAggregateFunctionBuilder } from '../util/type-utils.js';
|
|
8
|
+
export declare type ComplexExpression<DB, TB extends keyof DB, V = any> = AnySelectQueryBuilder | SelectQueryBuilderFactory<DB, TB> | RawBuilder<V> | RawBuilderFactory<DB, TB, V> | AggregateFunctionBuilder<DB, TB, V> | AggregateFunctionBuilderFactory<DB, TB, V>;
|
|
9
|
+
export declare type AliasedComplexExpression<DB, TB extends keyof DB> = AnyAliasedQueryBuilder | AliasedQueryBuilderFactory<DB, TB> | AnyAliasedRawBuilder | AliasedRawBuilderFactory<DB, TB> | AnyAliasedAggregateFunctionBuilder | AliasedAggregateFunctionBuilderFactory<DB, TB>;
|
|
10
|
+
export declare function parseComplexExpression(exp: ComplexExpression<any, any>): SelectQueryNode | RawNode | AggregateFunctionNode;
|
|
9
11
|
export declare function parseAliasedComplexExpression(exp: AliasedComplexExpression<any, any>): AliasNode;
|
|
10
12
|
export declare function isComplexExpression(obj: unknown): obj is ComplexExpression<any, any>;
|
|
@@ -2,4 +2,4 @@ import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
|
|
|
2
2
|
import { ReferenceExpression } from './reference-parser.js';
|
|
3
3
|
export declare type GroupByExpression<DB, TB extends keyof DB, O> = ReferenceExpression<DB, TB> | (keyof O & string);
|
|
4
4
|
export declare type GroupByExpressionOrList<DB, TB extends keyof DB, O> = ReadonlyArray<GroupByExpression<DB, TB, O>> | GroupByExpression<DB, TB, O>;
|
|
5
|
-
export declare function parseGroupBy(
|
|
5
|
+
export declare function parseGroupBy(groupBy: GroupByExpressionOrList<any, any, any>): GroupByItemNode[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/// <reference types="./group-by-parser.d.ts" />
|
|
2
2
|
import { GroupByItemNode } from '../operation-node/group-by-item-node.js';
|
|
3
3
|
import { parseReferenceExpressionOrList, } from './reference-parser.js';
|
|
4
|
-
export function parseGroupBy(
|
|
5
|
-
return parseReferenceExpressionOrList(
|
|
4
|
+
export function parseGroupBy(groupBy) {
|
|
5
|
+
return parseReferenceExpressionOrList(groupBy).map(GroupByItemNode.create);
|
|
6
6
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { JoinType } from '../operation-node/join-node.js';
|
|
2
2
|
import { ExpressionBuilder } from '../query-builder/expression-builder.js';
|
|
3
3
|
import { JoinBuilder } from '../query-builder/join-builder.js';
|
|
4
|
+
import { OverBuilder } from '../query-builder/over-builder.js';
|
|
4
5
|
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
5
6
|
import { QueryCreator } from '../query-creator.js';
|
|
6
7
|
import { TableExpression } from './table-parser.js';
|
|
@@ -8,3 +9,4 @@ export declare function createSelectQueryBuilder(): SelectQueryBuilder<any, any,
|
|
|
8
9
|
export declare function createExpressionBuilder(): ExpressionBuilder<any, any>;
|
|
9
10
|
export declare function createQueryCreator(): QueryCreator<any>;
|
|
10
11
|
export declare function createJoinBuilder(joinType: JoinType, table: TableExpression<any, any>): JoinBuilder<any, any>;
|
|
12
|
+
export declare function createOverBuilder(): OverBuilder<any, any>;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/// <reference types="./parse-utils.d.ts" />
|
|
2
2
|
import { JoinNode } from '../operation-node/join-node.js';
|
|
3
|
+
import { OverNode } from '../operation-node/over-node.js';
|
|
3
4
|
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
4
5
|
import { ExpressionBuilder } from '../query-builder/expression-builder.js';
|
|
5
6
|
import { JoinBuilder } from '../query-builder/join-builder.js';
|
|
7
|
+
import { OverBuilder } from '../query-builder/over-builder.js';
|
|
6
8
|
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
7
9
|
import { QueryCreator } from '../query-creator.js';
|
|
8
10
|
import { NOOP_QUERY_EXECUTOR } from '../query-executor/noop-query-executor.js';
|
|
@@ -30,3 +32,8 @@ export function createJoinBuilder(joinType, table) {
|
|
|
30
32
|
joinNode: JoinNode.create(joinType, parseTableExpression(table)),
|
|
31
33
|
});
|
|
32
34
|
}
|
|
35
|
+
export function createOverBuilder() {
|
|
36
|
+
return new OverBuilder({
|
|
37
|
+
overNode: OverNode.create(),
|
|
38
|
+
});
|
|
39
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
2
|
+
import { PartitionByItemNode } from '../operation-node/partition-by-item-node.js';
|
|
3
|
+
import { StringReference } from './reference-parser.js';
|
|
4
|
+
export declare type PartitionByExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | DynamicReferenceBuilder<any>;
|
|
5
|
+
export declare type PartitionByExpressionOrList<DB, TB extends keyof DB> = ReadonlyArray<PartitionByExpression<DB, TB>> | PartitionByExpression<DB, TB>;
|
|
6
|
+
export declare function parsePartitionBy(partitionBy: PartitionByExpressionOrList<any, any>): PartitionByItemNode[];
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="./partition-by-parser.d.ts" />
|
|
2
|
+
import { PartitionByItemNode } from '../operation-node/partition-by-item-node.js';
|
|
3
|
+
import { parseReferenceExpressionOrList, } from './reference-parser.js';
|
|
4
|
+
export function parsePartitionBy(partitionBy) {
|
|
5
|
+
return parseReferenceExpressionOrList(partitionBy).map(PartitionByItemNode.create);
|
|
6
|
+
}
|
|
@@ -8,10 +8,11 @@ import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
|
8
8
|
import { ComplexExpression } from './complex-expression-parser.js';
|
|
9
9
|
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
10
10
|
import { SelectType } from '../util/column-type.js';
|
|
11
|
+
import { AggregateFunctionBuilder } from '../query-builder/aggregate-function-builder.js';
|
|
11
12
|
export declare type ReferenceExpression<DB, TB extends keyof DB> = StringReference<DB, TB> | DynamicReferenceBuilder<any> | ComplexExpression<DB, TB>;
|
|
12
13
|
export declare type ReferenceExpressionOrList<DB, TB extends keyof DB> = ReferenceExpression<DB, TB> | ReadonlyArray<ReferenceExpression<DB, TB>>;
|
|
13
14
|
export declare type StringReference<DB, TB extends keyof DB> = AnyColumn<DB, TB> | AnyColumnWithTable<DB, TB>;
|
|
14
|
-
export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? SelectType<ExtractTypeFromStringReference<DB, TB, RE>> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => SelectQueryBuilder<any, any, infer O> ? ValueType<O> : unknown;
|
|
15
|
+
export declare type ExtractTypeFromReferenceExpression<DB, TB extends keyof DB, RE> = RE extends string ? SelectType<ExtractTypeFromStringReference<DB, TB, RE>> : RE extends RawBuilder<infer O> ? O : RE extends (qb: any) => RawBuilder<infer O> ? O : RE extends SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends (qb: any) => SelectQueryBuilder<any, any, infer O> ? ValueType<O> : RE extends AggregateFunctionBuilder<any, any, infer O> ? O : RE extends (qb: any) => AggregateFunctionBuilder<any, any, infer O> ? O : unknown;
|
|
15
16
|
declare type ExtractTypeFromStringReference<DB, TB extends keyof DB, RE extends string> = RE extends `${infer SC}.${infer T}.${infer C}` ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : RE extends `${infer T}.${infer C}` ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : RE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, RE> : unknown;
|
|
16
17
|
export declare function parseReferenceExpressionOrList(arg: ReferenceExpressionOrList<any, any>): ReferenceExpressionNode[];
|
|
17
18
|
export declare function parseReferenceExpression(exp: ReferenceExpression<any, any>): ReferenceExpressionNode;
|
|
@@ -5,7 +5,8 @@ import { AnyAliasedColumn, AnyAliasedColumnWithTable, AnyColumn, AnyColumnWithTa
|
|
|
5
5
|
import { DynamicReferenceBuilder } from '../dynamic/dynamic-reference-builder.js';
|
|
6
6
|
import { AliasedComplexExpression } from './complex-expression-parser.js';
|
|
7
7
|
import { Selectable, SelectType } from '../util/column-type.js';
|
|
8
|
-
|
|
8
|
+
import { AliasedAggregateFunctionBuilder } from '../query-builder/aggregate-function-builder.js';
|
|
9
|
+
export declare type SelectExpression<DB, TB extends keyof DB> = AnyAliasedColumnWithTable<DB, TB> | AnyAliasedColumn<DB, TB> | AnyColumnWithTable<DB, TB> | AnyColumn<DB, TB> | DynamicReferenceBuilder<any> | AliasedComplexExpression<DB, TB> | AliasedAggregateFunctionBuilder<DB, TB>;
|
|
9
10
|
export declare type SelectExpressionOrList<DB, TB extends keyof DB> = SelectExpression<DB, TB> | ReadonlyArray<SelectExpression<DB, TB>>;
|
|
10
11
|
/**
|
|
11
12
|
* Given a selection expression returns a query builder type that
|
|
@@ -19,9 +20,9 @@ export declare type SelectAllQueryBuilder<DB, TB extends keyof DB, O, S extends
|
|
|
19
20
|
export declare type Selection<DB, TB extends keyof DB, SE> = {
|
|
20
21
|
[A in ExtractAliasFromSelectExpression<SE>]: SelectType<ExtractTypeFromSelectExpression<DB, TB, SE, A>>;
|
|
21
22
|
};
|
|
22
|
-
declare type ExtractAliasFromSelectExpression<SE> = SE extends string ? ExtractAliasFromStringSelectExpression<SE> : SE extends AliasedRawBuilder<any, infer RA> ? RA : SE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : SE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : SE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : SE extends DynamicReferenceBuilder<infer RA> ? ExtractAliasFromStringSelectExpression<RA> : never;
|
|
23
|
+
declare type ExtractAliasFromSelectExpression<SE> = SE extends string ? ExtractAliasFromStringSelectExpression<SE> : SE extends AliasedRawBuilder<any, infer RA> ? RA : SE extends (qb: any) => AliasedRawBuilder<any, infer RA> ? RA : SE extends AliasedQueryBuilder<any, any, any, infer QA> ? QA : SE extends (qb: any) => AliasedQueryBuilder<any, any, any, infer QA> ? QA : SE extends DynamicReferenceBuilder<infer RA> ? ExtractAliasFromStringSelectExpression<RA> : SE extends AliasedAggregateFunctionBuilder<any, any, any, infer QA> ? QA : SE extends (qb: any) => AliasedAggregateFunctionBuilder<any, any, any, infer QA> ? QA : never;
|
|
23
24
|
declare type ExtractAliasFromStringSelectExpression<SE extends string> = SE extends `${string}.${string}.${string} as ${infer A}` ? A : SE extends `${string}.${string} as ${infer A}` ? A : SE extends `${string} as ${infer A}` ? A : SE extends `${string}.${string}.${infer C}` ? C : SE extends `${string}.${infer C}` ? C : SE;
|
|
24
|
-
declare type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, SE, A extends keyof any> = SE extends string ? ExtractTypeFromStringSelectExpression<DB, TB, SE, A> : SE extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : SE extends (qb: any) => AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : SE extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends DynamicReferenceBuilder<infer RA> ? A extends ExtractAliasFromStringSelectExpression<RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA, A> | undefined : never : never;
|
|
25
|
+
declare type ExtractTypeFromSelectExpression<DB, TB extends keyof DB, SE, A extends keyof any> = SE extends string ? ExtractTypeFromStringSelectExpression<DB, TB, SE, A> : SE extends AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : SE extends (qb: any) => AliasedRawBuilder<infer O, infer RA> ? RA extends A ? O : never : SE extends AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends (qb: any) => AliasedQueryBuilder<any, any, infer O, infer QA> ? QA extends A ? ValueType<O> : never : SE extends DynamicReferenceBuilder<infer RA> ? A extends ExtractAliasFromStringSelectExpression<RA> ? ExtractTypeFromStringSelectExpression<DB, TB, RA, A> | undefined : never : SE extends AliasedAggregateFunctionBuilder<any, any, infer O, infer FA> ? FA extends A ? O : never : SE extends (qb: any) => AliasedAggregateFunctionBuilder<any, any, infer O, infer FA> ? FA extends A ? O : never : never;
|
|
25
26
|
declare type ExtractTypeFromStringSelectExpression<DB, TB extends keyof DB, SE extends string, A extends keyof any> = SE extends `${infer SC}.${infer T}.${infer C} as ${infer RA}` ? RA extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C} as ${infer RA}` ? RA extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends `${infer C} as ${infer RA}` ? RA extends A ? C extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, C> : never : never : SE extends `${infer SC}.${infer T}.${infer C}` ? C extends A ? `${SC}.${T}` extends TB ? C extends keyof DB[`${SC}.${T}`] ? DB[`${SC}.${T}`][C] : never : never : never : SE extends `${infer T}.${infer C}` ? C extends A ? T extends TB ? C extends keyof DB[T] ? DB[T][C] : never : never : never : SE extends A ? SE extends AnyColumn<DB, TB> ? ExtractColumnType<DB, TB, SE> : never : never;
|
|
26
27
|
declare type AllSelection<DB, TB extends keyof DB> = Selectable<{
|
|
27
28
|
[C in AnyColumn<DB, TB>]: {
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { SetOperator, SetOperationNode } from '../operation-node/set-operation-node.js';
|
|
2
|
+
import { SelectQueryBuilder } from '../query-builder/select-query-builder.js';
|
|
3
|
+
import { RawBuilder } from '../raw-builder/raw-builder.js';
|
|
4
|
+
export declare type SetOperationExpression<DB, O> = SelectQueryBuilder<DB, any, O> | RawBuilder<O>;
|
|
5
|
+
export declare function parseSetOperation(operator: SetOperator, expression: SetOperationExpression<any, any>, all: boolean): SetOperationNode;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/// <reference types="./set-operation-parser.d.ts" />
|
|
2
|
+
import { SetOperationNode, } from '../operation-node/set-operation-node.js';
|
|
3
|
+
export function parseSetOperation(operator, expression, all) {
|
|
4
|
+
return SetOperationNode.create(operator, expression.toOperationNode(), all);
|
|
5
|
+
}
|
|
@@ -3,7 +3,8 @@ import { ValueNode } from '../operation-node/value-node.js';
|
|
|
3
3
|
import { SelectQueryNode } from '../operation-node/select-query-node.js';
|
|
4
4
|
import { RawNode } from '../operation-node/raw-node.js';
|
|
5
5
|
import { ComplexExpression } from './complex-expression-parser.js';
|
|
6
|
+
import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
|
|
6
7
|
export declare type ValueExpression<DB, TB extends keyof DB, V> = V | ComplexExpression<DB, TB, V>;
|
|
7
8
|
export declare type ValueExpressionOrList<DB, TB extends keyof DB, V> = ValueExpression<DB, TB, V> | ReadonlyArray<ValueExpression<DB, TB, V>>;
|
|
8
9
|
export declare function parseValueExpressionOrList(arg: ValueExpressionOrList<any, any, unknown>): ValueExpressionNode;
|
|
9
|
-
export declare function parseValueExpression(exp: ValueExpression<any, any, unknown>): ValueNode | SelectQueryNode | RawNode;
|
|
10
|
+
export declare function parseValueExpression(exp: ValueExpression<any, any, unknown>): ValueNode | SelectQueryNode | RawNode | AggregateFunctionNode;
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { AggregateFunctionNode } from '../operation-node/aggregate-function-node.js';
|
|
2
|
+
import { OperationNodeSource } from '../operation-node/operation-node-source.js';
|
|
3
|
+
import { AliasNode } from '../operation-node/alias-node.js';
|
|
4
|
+
import { OverBuilder } from './over-builder.js';
|
|
5
|
+
export declare class AggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown> implements OperationNodeSource {
|
|
6
|
+
#private;
|
|
7
|
+
constructor(props: AggregateFunctionBuilderProps);
|
|
8
|
+
/**
|
|
9
|
+
* Returns an aliased version of the function.
|
|
10
|
+
*
|
|
11
|
+
* In addition to slapping `as "the_alias"` to the end of the SQL,
|
|
12
|
+
* this method also provides strict typing:
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* const result = await db
|
|
16
|
+
* .selectFrom('person')
|
|
17
|
+
* .select(
|
|
18
|
+
* eb => eb.fn.count<number>('id').as('person_count')
|
|
19
|
+
* )
|
|
20
|
+
* .executeTakeFirstOrThrow()
|
|
21
|
+
*
|
|
22
|
+
* // `person_count: number` field exists in the result type.
|
|
23
|
+
* console.log(result.person_count)
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* The generated SQL (PostgreSQL):
|
|
27
|
+
*
|
|
28
|
+
* ```sql
|
|
29
|
+
* select count("id") as "person_count"
|
|
30
|
+
* from "person"
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
as<A extends string>(alias: A): AliasedAggregateFunctionBuilder<DB, TB, O, A>;
|
|
34
|
+
/**
|
|
35
|
+
* Adds a distinct clause inside the function.
|
|
36
|
+
*
|
|
37
|
+
* ```ts
|
|
38
|
+
* const result = await db
|
|
39
|
+
* .selectFrom('person')
|
|
40
|
+
* .select(
|
|
41
|
+
* eb => eb.fn.count<number>('first_name').distinct().as('first_name_count')
|
|
42
|
+
* )
|
|
43
|
+
* .executeTakeFirstOrThrow()
|
|
44
|
+
* ```
|
|
45
|
+
*
|
|
46
|
+
* The generated SQL (PostgreSQL):
|
|
47
|
+
*
|
|
48
|
+
* ```sql
|
|
49
|
+
* select count(distinct "first_name") as "first_name_count"
|
|
50
|
+
* from "person"
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
distinct(): AggregateFunctionBuilder<DB, TB, O>;
|
|
54
|
+
/**
|
|
55
|
+
* Adds an over clause (window functions) after the function.
|
|
56
|
+
*
|
|
57
|
+
* ```ts
|
|
58
|
+
* const result = await db
|
|
59
|
+
* .selectFrom('person')
|
|
60
|
+
* .select(
|
|
61
|
+
* eb => eb.fn.avg<number>('age').over().as('average_age')
|
|
62
|
+
* )
|
|
63
|
+
* .execute()
|
|
64
|
+
* ```
|
|
65
|
+
*
|
|
66
|
+
* The generated SQL (PostgreSQL):
|
|
67
|
+
*
|
|
68
|
+
* ```sql
|
|
69
|
+
* select avg("age") over() as "average_age"
|
|
70
|
+
* from "person"
|
|
71
|
+
* ```
|
|
72
|
+
*
|
|
73
|
+
* Also supports passing a callback that returns an over builder,
|
|
74
|
+
* allowing to add partition by and sort by clauses inside over.
|
|
75
|
+
*
|
|
76
|
+
* ```ts
|
|
77
|
+
* const result = await db
|
|
78
|
+
* .selectFrom('person')
|
|
79
|
+
* .select(
|
|
80
|
+
* eb => eb.fn.avg<number>('age').over(
|
|
81
|
+
* ob => ob.partitionBy('last_name').orderBy('first_name', 'asc')
|
|
82
|
+
* ).as('average_age')
|
|
83
|
+
* )
|
|
84
|
+
* .execute()
|
|
85
|
+
* ```
|
|
86
|
+
*
|
|
87
|
+
* The generated SQL (PostgreSQL):
|
|
88
|
+
*
|
|
89
|
+
* ```sql
|
|
90
|
+
* select avg("age") over(partition by "last_name" order by "first_name" asc) as "average_age"
|
|
91
|
+
* from "person"
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
over(over?: OverBuilderCallback<DB, TB>): AggregateFunctionBuilder<DB, TB, O>;
|
|
95
|
+
toOperationNode(): AggregateFunctionNode;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* {@link AggregateFunctionBuilder} with an alias. The result of calling {@link AggregateFunctionBuilder.as}.
|
|
99
|
+
*/
|
|
100
|
+
export declare class AliasedAggregateFunctionBuilder<DB, TB extends keyof DB, O = unknown, A extends string = never> implements OperationNodeSource {
|
|
101
|
+
#private;
|
|
102
|
+
constructor(aggregateFunctionBuilder: AggregateFunctionBuilder<DB, TB, O>, alias: A);
|
|
103
|
+
/**
|
|
104
|
+
* @private
|
|
105
|
+
*
|
|
106
|
+
* This needs to be here just so that the typings work. Without this
|
|
107
|
+
* the generated .d.ts file contains no reference to the type param A
|
|
108
|
+
* which causes this type to be equal to AliasedAggregateFunctionBuilder with any A
|
|
109
|
+
* as long as O is the same.
|
|
110
|
+
*/
|
|
111
|
+
protected get alias(): A;
|
|
112
|
+
toOperationNode(): AliasNode;
|
|
113
|
+
}
|
|
114
|
+
export interface AggregateFunctionBuilderProps {
|
|
115
|
+
aggregateFunctionNode: AggregateFunctionNode;
|
|
116
|
+
}
|
|
117
|
+
export declare type OverBuilderCallback<DB, TB extends keyof DB> = (builder: OverBuilder<DB, TB>) => OverBuilder<DB, TB>;
|