@finos/legend-query-builder 4.15.17 → 4.15.19

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. package/lib/__lib__/QueryBuilderTesting.d.ts +1 -0
  2. package/lib/__lib__/QueryBuilderTesting.d.ts.map +1 -1
  3. package/lib/__lib__/QueryBuilderTesting.js +1 -0
  4. package/lib/__lib__/QueryBuilderTesting.js.map +1 -1
  5. package/lib/components/fetch-structure/QueryBuilderAggParam.d.ts +22 -0
  6. package/lib/components/fetch-structure/QueryBuilderAggParam.d.ts.map +1 -0
  7. package/lib/components/fetch-structure/QueryBuilderAggParam.js +59 -0
  8. package/lib/components/fetch-structure/QueryBuilderAggParam.js.map +1 -0
  9. package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts +4 -0
  10. package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
  11. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +3 -0
  12. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
  13. package/lib/graph/QueryBuilderMetaModelConst.d.ts +2 -0
  14. package/lib/graph/QueryBuilderMetaModelConst.d.ts.map +1 -1
  15. package/lib/graph/QueryBuilderMetaModelConst.js +2 -0
  16. package/lib/graph/QueryBuilderMetaModelConst.js.map +1 -1
  17. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.d.ts.map +1 -1
  18. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.js +6 -0
  19. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.js.map +1 -1
  20. package/lib/index.css +2 -2
  21. package/lib/index.css.map +1 -1
  22. package/lib/package.json +1 -1
  23. package/lib/stores/QueryBuilderStateBuilder.d.ts.map +1 -1
  24. package/lib/stores/QueryBuilderStateBuilder.js +6 -1
  25. package/lib/stores/QueryBuilderStateBuilder.js.map +1 -1
  26. package/lib/stores/QueryBuilderStateHashUtils.d.ts +1 -0
  27. package/lib/stores/QueryBuilderStateHashUtils.d.ts.map +1 -1
  28. package/lib/stores/QueryBuilderStateHashUtils.js +1 -0
  29. package/lib/stores/QueryBuilderStateHashUtils.js.map +1 -1
  30. package/lib/stores/data-cube/QueryBuilderDataCubeEngine.js +1 -1
  31. package/lib/stores/data-cube/QueryBuilderDataCubeEngine.js.map +1 -1
  32. package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderAggregateOperatorLoader.d.ts.map +1 -1
  33. package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderAggregateOperatorLoader.js +2 -0
  34. package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderAggregateOperatorLoader.js.map +1 -1
  35. package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderAggregationStateBuilder.d.ts +1 -0
  36. package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderAggregationStateBuilder.d.ts.map +1 -1
  37. package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderAggregationStateBuilder.js +26 -1
  38. package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderAggregationStateBuilder.js.map +1 -1
  39. package/lib/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_Wavg.d.ts +33 -0
  40. package/lib/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_Wavg.d.ts.map +1 -0
  41. package/lib/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_Wavg.js +78 -0
  42. package/lib/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_Wavg.js.map +1 -0
  43. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.d.ts +2 -0
  44. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.d.ts.map +1 -1
  45. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js +6 -0
  46. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js.map +1 -1
  47. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.d.ts.map +1 -1
  48. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.js +29 -1
  49. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.js.map +1 -1
  50. package/package.json +5 -5
  51. package/src/__lib__/QueryBuilderTesting.ts +1 -0
  52. package/src/components/fetch-structure/QueryBuilderAggParam.tsx +122 -0
  53. package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +10 -2
  54. package/src/graph/QueryBuilderMetaModelConst.ts +2 -0
  55. package/src/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.ts +18 -1
  56. package/src/stores/QueryBuilderStateBuilder.ts +15 -1
  57. package/src/stores/QueryBuilderStateHashUtils.ts +1 -0
  58. package/src/stores/data-cube/QueryBuilderDataCubeEngine.ts +1 -1
  59. package/src/stores/fetch-structure/tds/aggregation/QueryBuilderAggregateOperatorLoader.ts +2 -0
  60. package/src/stores/fetch-structure/tds/aggregation/QueryBuilderAggregationStateBuilder.ts +69 -0
  61. package/src/stores/fetch-structure/tds/aggregation/operators/QueryBuilderAggregateOperator_Wavg.ts +136 -0
  62. package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.ts +7 -0
  63. package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.ts +37 -0
  64. package/tsconfig.json +2 -0
@@ -21,6 +21,7 @@ import {
21
21
  matchFunctionName,
22
22
  SimpleFunctionExpression,
23
23
  VariableExpression,
24
+ AbstractPropertyExpression,
24
25
  } from '@finos/legend-graph';
25
26
  import {
26
27
  assertTrue,
@@ -41,6 +42,8 @@ import { extractNullableStringFromInstanceValue } from '../../../QueryBuilderVal
41
42
  import { FETCH_STRUCTURE_IMPLEMENTATION } from '../../QueryBuilderFetchStructureImplementationState.js';
42
43
  import { QueryBuilderTDSState } from '../QueryBuilderTDSState.js';
43
44
 
45
+ import { QueryBuilderAggregateOperator_Wavg } from './operators/QueryBuilderAggregateOperator_Wavg.js';
46
+
44
47
  export const processTDSAggregateExpression = (
45
48
  expression: SimpleFunctionExpression,
46
49
  parentExpression: SimpleFunctionExpression | undefined,
@@ -151,6 +154,16 @@ export const processTDSAggregateExpression = (
151
154
  projectionColumnState,
152
155
  ),
153
156
  );
157
+ if (
158
+ projectionColumnState.wavgWeight &&
159
+ aggregateColumnState &&
160
+ aggregateColumnState.operator instanceof
161
+ QueryBuilderAggregateOperator_Wavg
162
+ ) {
163
+ aggregateColumnState.operator.setWeight(
164
+ projectionColumnState.wavgWeight,
165
+ );
166
+ }
154
167
  if (aggregateColumnState) {
155
168
  aggregationState.addColumn(aggregateColumnState);
156
169
  if (
@@ -181,6 +194,62 @@ export const processTDSAggregateExpression = (
181
194
  }
182
195
  };
183
196
 
197
+ export const processWAVGRowMapperExpression = (
198
+ expression: SimpleFunctionExpression,
199
+ parentExpression: SimpleFunctionExpression | undefined,
200
+ queryBuilderState: QueryBuilderState,
201
+ parentLambda: LambdaFunction,
202
+ ): void => {
203
+ // check parent expression is agg
204
+ assertTrue(
205
+ Boolean(
206
+ parentExpression &&
207
+ matchFunctionName(
208
+ parentExpression.functionName,
209
+ QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_AGG,
210
+ ),
211
+ ),
212
+ `Can't process wavgRowMapper() expression: only support wavgRowMapper() used within an agg() expression`,
213
+ );
214
+
215
+ // check number of parameters
216
+ assertTrue(
217
+ expression.parametersValues.length === 2,
218
+ `Can't process wavgRowMapper() expression: wavgRowMapper() expects 2 arguments`,
219
+ );
220
+
221
+ //checking type of parameters
222
+ const wavgInput = expression.parametersValues;
223
+ wavgInput.map((p) =>
224
+ assertType(
225
+ p,
226
+ AbstractPropertyExpression,
227
+ `Can't process wavgRowMapper() expression: wavgRowMapper() expects arguments to be Property Expressions`,
228
+ ),
229
+ );
230
+
231
+ QueryBuilderValueSpecificationProcessor.processChild(
232
+ guaranteeNonNullable(expression.parametersValues[0]),
233
+ expression,
234
+ parentLambda,
235
+ queryBuilderState,
236
+ );
237
+
238
+ //setting weight here then build when agg is built
239
+ if (
240
+ queryBuilderState.fetchStructureState.implementation instanceof
241
+ QueryBuilderTDSState
242
+ ) {
243
+ const tdsState = queryBuilderState.fetchStructureState.implementation;
244
+ const projectionColumnState = guaranteeNonNullable(
245
+ tdsState.projectionColumns[tdsState.projectionColumns.length - 1],
246
+ );
247
+ projectionColumnState.setWavgWeight(
248
+ expression.parametersValues[1] as AbstractPropertyExpression,
249
+ );
250
+ }
251
+ };
252
+
184
253
  export const processTDSGroupByExpression = (
185
254
  expression: SimpleFunctionExpression,
186
255
  queryBuilderState: QueryBuilderState,
@@ -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
@@ -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",