@finos/legend-query-builder 4.15.16 → 4.15.18
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/__lib__/QueryBuilderTesting.d.ts +1 -0
- package/lib/__lib__/QueryBuilderTesting.d.ts.map +1 -1
- package/lib/__lib__/QueryBuilderTesting.js +1 -0
- package/lib/__lib__/QueryBuilderTesting.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderAggParam.d.ts +22 -0
- package/lib/components/fetch-structure/QueryBuilderAggParam.d.ts.map +1 -0
- package/lib/components/fetch-structure/QueryBuilderAggParam.js +59 -0
- package/lib/components/fetch-structure/QueryBuilderAggParam.js.map +1 -0
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts +4 -0
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +3 -0
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
- package/lib/graph/QueryBuilderMetaModelConst.d.ts +2 -0
- package/lib/graph/QueryBuilderMetaModelConst.d.ts.map +1 -1
- package/lib/graph/QueryBuilderMetaModelConst.js +2 -0
- package/lib/graph/QueryBuilderMetaModelConst.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.js +6 -0
- package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/QueryBuilderStateBuilder.d.ts.map +1 -1
- package/lib/stores/QueryBuilderStateBuilder.js +6 -1
- package/lib/stores/QueryBuilderStateBuilder.js.map +1 -1
- package/lib/stores/QueryBuilderStateHashUtils.d.ts +1 -0
- package/lib/stores/QueryBuilderStateHashUtils.d.ts.map +1 -1
- package/lib/stores/QueryBuilderStateHashUtils.js +1 -0
- package/lib/stores/QueryBuilderStateHashUtils.js.map +1 -1
- package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderAggregateOperatorLoader.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderAggregateOperatorLoader.js +2 -0
- package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderAggregateOperatorLoader.js.map +1 -1
- package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderAggregationStateBuilder.d.ts +1 -0
- package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderAggregationStateBuilder.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderAggregationStateBuilder.js +26 -1
- package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderAggregationStateBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_Wavg.d.ts +33 -0
- package/lib/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_Wavg.d.ts.map +1 -0
- package/lib/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_Wavg.js +78 -0
- package/lib/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_Wavg.js.map +1 -0
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.d.ts +2 -0
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js +6 -0
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.js +29 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.js.map +1 -1
- package/package.json +6 -6
- package/src/__lib__/QueryBuilderTesting.ts +1 -0
- package/src/components/fetch-structure/QueryBuilderAggParam.tsx +122 -0
- package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +10 -2
- package/src/graph/QueryBuilderMetaModelConst.ts +2 -0
- package/src/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.ts +18 -1
- package/src/stores/QueryBuilderStateBuilder.ts +15 -1
- package/src/stores/QueryBuilderStateHashUtils.ts +1 -0
- package/src/stores/fetch-structure/tds/aggregation/QueryBuilderAggregateOperatorLoader.ts +2 -0
- package/src/stores/fetch-structure/tds/aggregation/QueryBuilderAggregationStateBuilder.ts +69 -0
- package/src/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_Wavg.ts +136 -0
- package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.ts +7 -0
- package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.ts +37 -0
- package/tsconfig.json +2 -0
package/src/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_Wavg.ts
ADDED
@@ -0,0 +1,136 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright (c) 2020-present, Goldman Sachs
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
* you may not use this file except in compliance with the License.
|
6
|
+
* You may obtain a copy of the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
* See the License for the specific language governing permissions and
|
14
|
+
* limitations under the License.
|
15
|
+
*/
|
16
|
+
|
17
|
+
import {
|
18
|
+
PRIMITIVE_TYPE,
|
19
|
+
type ValueSpecification,
|
20
|
+
type SimpleFunctionExpression,
|
21
|
+
type VariableExpression,
|
22
|
+
type PureModel,
|
23
|
+
type AbstractPropertyExpression,
|
24
|
+
matchFunctionName,
|
25
|
+
} from '@finos/legend-graph';
|
26
|
+
import { QueryBuilderAggregateColumnState } from '../QueryBuilderAggregationState.js';
|
27
|
+
import { QueryBuilderAggregateOperator } from '../QueryBuilderAggregateOperator.js';
|
28
|
+
import {
|
29
|
+
type QueryBuilderProjectionColumnState,
|
30
|
+
QueryBuilderSimpleProjectionColumnState,
|
31
|
+
} from '../../projection/QueryBuilderProjectionColumnState.js';
|
32
|
+
import { buildAggregateExpression } from './QueryBuilderAggregateOperatorValueSpecificationBuilder.js';
|
33
|
+
import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../../../../graph/QueryBuilderMetaModelConst.js';
|
34
|
+
import { type Hashable, hashArray, guaranteeType } from '@finos/legend-shared';
|
35
|
+
import { QUERY_BUILDER_STATE_HASH_STRUCTURE } from '../../../../QueryBuilderStateHashUtils.js';
|
36
|
+
import { action, makeObservable, observable } from 'mobx';
|
37
|
+
|
38
|
+
export class QueryBuilderAggregateOperator_Wavg
|
39
|
+
extends QueryBuilderAggregateOperator
|
40
|
+
implements Hashable
|
41
|
+
{
|
42
|
+
weight: AbstractPropertyExpression | undefined;
|
43
|
+
|
44
|
+
constructor() {
|
45
|
+
super();
|
46
|
+
makeObservable(this, {
|
47
|
+
weight: observable,
|
48
|
+
setWeight: action,
|
49
|
+
});
|
50
|
+
}
|
51
|
+
|
52
|
+
setWeight(val: AbstractPropertyExpression | undefined) {
|
53
|
+
this.weight = val;
|
54
|
+
}
|
55
|
+
|
56
|
+
getLabel(projectionColumnState?: QueryBuilderProjectionColumnState): string {
|
57
|
+
return 'wavg';
|
58
|
+
}
|
59
|
+
|
60
|
+
getName(projectionColumnState: QueryBuilderProjectionColumnState): string {
|
61
|
+
return projectionColumnState.columnName;
|
62
|
+
}
|
63
|
+
|
64
|
+
isCompatibleWithColumn(
|
65
|
+
projectionColumnState: QueryBuilderProjectionColumnState,
|
66
|
+
): boolean {
|
67
|
+
if (
|
68
|
+
projectionColumnState instanceof QueryBuilderSimpleProjectionColumnState
|
69
|
+
) {
|
70
|
+
const propertyType =
|
71
|
+
projectionColumnState.propertyExpressionState.propertyExpression.func
|
72
|
+
.value.genericType.value.rawType;
|
73
|
+
return (
|
74
|
+
[
|
75
|
+
PRIMITIVE_TYPE.NUMBER,
|
76
|
+
PRIMITIVE_TYPE.INTEGER,
|
77
|
+
PRIMITIVE_TYPE.DECIMAL,
|
78
|
+
PRIMITIVE_TYPE.FLOAT,
|
79
|
+
] as string[]
|
80
|
+
).includes(propertyType.path);
|
81
|
+
}
|
82
|
+
return false;
|
83
|
+
}
|
84
|
+
|
85
|
+
buildAggregateExpression(
|
86
|
+
propertyExpression: AbstractPropertyExpression | undefined,
|
87
|
+
variableName: string,
|
88
|
+
graph: PureModel,
|
89
|
+
): ValueSpecification {
|
90
|
+
return buildAggregateExpression(
|
91
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.WAVG,
|
92
|
+
variableName,
|
93
|
+
graph,
|
94
|
+
);
|
95
|
+
}
|
96
|
+
|
97
|
+
buildAggregateColumnState(
|
98
|
+
expression: SimpleFunctionExpression,
|
99
|
+
lambdaParam: VariableExpression,
|
100
|
+
projectionColumnState: QueryBuilderProjectionColumnState,
|
101
|
+
): QueryBuilderAggregateColumnState | undefined {
|
102
|
+
if (
|
103
|
+
matchFunctionName(
|
104
|
+
expression.functionName,
|
105
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.WAVG,
|
106
|
+
)
|
107
|
+
) {
|
108
|
+
const aggregateColumnState = new QueryBuilderAggregateColumnState(
|
109
|
+
projectionColumnState.tdsState.aggregationState,
|
110
|
+
projectionColumnState,
|
111
|
+
new QueryBuilderAggregateOperator_Wavg(),
|
112
|
+
);
|
113
|
+
|
114
|
+
const currentOperator = guaranteeType(
|
115
|
+
aggregateColumnState.operator,
|
116
|
+
QueryBuilderAggregateOperator_Wavg,
|
117
|
+
);
|
118
|
+
|
119
|
+
aggregateColumnState.setLambdaParameterName(lambdaParam.name);
|
120
|
+
|
121
|
+
aggregateColumnState.setOperator(currentOperator);
|
122
|
+
return aggregateColumnState;
|
123
|
+
}
|
124
|
+
return undefined;
|
125
|
+
}
|
126
|
+
|
127
|
+
override get getOperator(): QueryBuilderAggregateOperator {
|
128
|
+
return new QueryBuilderAggregateOperator_Wavg();
|
129
|
+
}
|
130
|
+
|
131
|
+
get hashCode(): string {
|
132
|
+
return hashArray([
|
133
|
+
QUERY_BUILDER_STATE_HASH_STRUCTURE.AGGREGATE_OPERATOR_WAVG,
|
134
|
+
]);
|
135
|
+
}
|
136
|
+
}
|
@@ -79,6 +79,7 @@ export abstract class QueryBuilderProjectionColumnState
|
|
79
79
|
{
|
80
80
|
tdsState: QueryBuilderTDSState;
|
81
81
|
columnName: string;
|
82
|
+
wavgWeight: AbstractPropertyExpression | undefined;
|
82
83
|
|
83
84
|
constructor(tdsState: QueryBuilderTDSState, columnName: string) {
|
84
85
|
super();
|
@@ -86,7 +87,9 @@ export abstract class QueryBuilderProjectionColumnState
|
|
86
87
|
uuid: false,
|
87
88
|
tdsState: false,
|
88
89
|
columnName: observable,
|
90
|
+
wavgWeight: observable,
|
89
91
|
setColumnName: action,
|
92
|
+
setWavgWeight: action,
|
90
93
|
hashCode: computed,
|
91
94
|
});
|
92
95
|
this.tdsState = tdsState;
|
@@ -96,6 +99,10 @@ export abstract class QueryBuilderProjectionColumnState
|
|
96
99
|
setColumnName(val: string): void {
|
97
100
|
this.columnName = val;
|
98
101
|
}
|
102
|
+
|
103
|
+
setWavgWeight(val: AbstractPropertyExpression): void {
|
104
|
+
this.wavgWeight = val;
|
105
|
+
}
|
99
106
|
}
|
100
107
|
|
101
108
|
export class QueryBuilderSimpleProjectionColumnState
|
package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.ts
CHANGED
@@ -29,6 +29,7 @@ import {
|
|
29
29
|
V1_GraphTransformerContextBuilder,
|
30
30
|
matchFunctionName,
|
31
31
|
PrimitiveType,
|
32
|
+
LambdaFunctionInstanceValue,
|
32
33
|
} from '@finos/legend-graph';
|
33
34
|
import {
|
34
35
|
guaranteeNonNullable,
|
@@ -54,6 +55,7 @@ import { appendOLAPGroupByState } from '../window/QueryBuilderWindowValueSpecifi
|
|
54
55
|
import { appendPostFilter } from '../post-filter/QueryBuilderPostFilterValueSpecificationBuilder.js';
|
55
56
|
import { buildTDSSortTypeExpression } from '../QueryBuilderTDSHelper.js';
|
56
57
|
import { buildRelationProjection } from './QueryBuilderRelationProjectValueSpecBuidler.js';
|
58
|
+
import { QueryBuilderAggregateOperator_Wavg } from '../aggregation/operators/QueryBuilderAggregateOperator_Wavg.js';
|
57
59
|
|
58
60
|
const buildSortExpression = (
|
59
61
|
sortColumnState: SortColumnState,
|
@@ -340,6 +342,12 @@ export const appendProjection = (
|
|
340
342
|
|
341
343
|
// column aggregation
|
342
344
|
if (aggregateColumnState) {
|
345
|
+
if (
|
346
|
+
aggregateColumnState.operator instanceof
|
347
|
+
QueryBuilderAggregateOperator_Wavg
|
348
|
+
) {
|
349
|
+
aggregateColumnState.setLambdaParameterName('y');
|
350
|
+
}
|
343
351
|
const aggregateFunctionExpression = new SimpleFunctionExpression(
|
344
352
|
extractElementNameFromPath(QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_AGG),
|
345
353
|
);
|
@@ -371,6 +379,35 @@ export const appendProjection = (
|
|
371
379
|
.graphManagerState.graph,
|
372
380
|
);
|
373
381
|
}
|
382
|
+
//TODO support wavg on non SimpleProjectionColumnStates as well
|
383
|
+
if (
|
384
|
+
aggregateColumnState.operator instanceof
|
385
|
+
QueryBuilderAggregateOperator_Wavg &&
|
386
|
+
aggregateColumnState.operator.weight &&
|
387
|
+
aggregateColumnState.projectionColumnState instanceof
|
388
|
+
QueryBuilderSimpleProjectionColumnState &&
|
389
|
+
columnLambda instanceof LambdaFunctionInstanceValue
|
390
|
+
) {
|
391
|
+
//build row mapper
|
392
|
+
const wavgRowMapper = new SimpleFunctionExpression(
|
393
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.WAVG_ROW_MAPPER,
|
394
|
+
);
|
395
|
+
//add params
|
396
|
+
const quantity =
|
397
|
+
aggregateColumnState.projectionColumnState.propertyExpressionState
|
398
|
+
.propertyExpression;
|
399
|
+
const weight = aggregateColumnState.operator.weight;
|
400
|
+
wavgRowMapper.parametersValues = [quantity, weight];
|
401
|
+
if (
|
402
|
+
aggregateCalendarLambda &&
|
403
|
+
aggregateCalendarLambda instanceof LambdaFunctionInstanceValue
|
404
|
+
) {
|
405
|
+
aggregateCalendarLambda.values[0]!.expressionSequence[0] =
|
406
|
+
wavgRowMapper;
|
407
|
+
} else if (columnLambda instanceof LambdaFunctionInstanceValue) {
|
408
|
+
columnLambda.values[0]!.expressionSequence[0] = wavgRowMapper;
|
409
|
+
}
|
410
|
+
}
|
374
411
|
aggregateFunctionExpression.parametersValues = [
|
375
412
|
aggregateCalendarLambda ?? columnLambda,
|
376
413
|
aggregateLambda,
|
package/tsconfig.json
CHANGED
@@ -137,6 +137,7 @@
|
|
137
137
|
"./src/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_StdDev_Population.ts",
|
138
138
|
"./src/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_StdDev_Sample.ts",
|
139
139
|
"./src/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_Sum.ts",
|
140
|
+
"./src/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_Wavg.ts",
|
140
141
|
"./src/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterOperator.ts",
|
141
142
|
"./src/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterOperatorLoader.ts",
|
142
143
|
"./src/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterState.ts",
|
@@ -244,6 +245,7 @@
|
|
244
245
|
"./src/components/explorer/QueryBuilderFunctionsExplorerPanel.tsx",
|
245
246
|
"./src/components/explorer/QueryBuilderMilestoningParameterEditor.tsx",
|
246
247
|
"./src/components/explorer/QueryBuilderPropertySearchPanel.tsx",
|
248
|
+
"./src/components/fetch-structure/QueryBuilderAggParam.tsx",
|
247
249
|
"./src/components/fetch-structure/QueryBuilderFetchStructurePanel.tsx",
|
248
250
|
"./src/components/fetch-structure/QueryBuilderGraphFetchTreePanel.tsx",
|
249
251
|
"./src/components/fetch-structure/QueryBuilderPostFilterPanel.tsx",
|