@finos/legend-query-builder 4.18.0 → 4.18.1
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/lib/__test__.d.ts +1 -0
- package/lib/__test__.d.ts.map +1 -1
- package/lib/__test__.js +1 -0
- package/lib/__test__.js.map +1 -1
- package/lib/components/__test-utils__/QueryBuilderComponentTestUtils.d.ts +5 -0
- package/lib/components/__test-utils__/QueryBuilderComponentTestUtils.d.ts.map +1 -1
- package/lib/components/__test-utils__/QueryBuilderComponentTestUtils.js +28 -2
- package/lib/components/__test-utils__/QueryBuilderComponentTestUtils.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js +8 -2
- package/lib/components/fetch-structure/QueryBuilderTDSWindowPanel.js.map +1 -1
- package/lib/components/workflows/AccessorQueryBuilder.js +1 -1
- package/lib/components/workflows/AccessorQueryBuilder.js.map +1 -1
- package/lib/components/workflows/DataProductQueryBuilder.d.ts.map +1 -1
- package/lib/components/workflows/DataProductQueryBuilder.js +13 -12
- package/lib/components/workflows/DataProductQueryBuilder.js.map +1 -1
- package/lib/data-access-overview.css +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/index.css +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/package.json +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/QueryBuilderTypeaheadHelper.js +4 -4
- package/lib/stores/QueryBuilderTypeaheadHelper.js.map +1 -1
- package/lib/stores/QueryBuilderValueSpecificationHelper.d.ts +1 -1
- package/lib/stores/QueryBuilderValueSpecificationHelper.d.ts.map +1 -1
- package/lib/stores/QueryBuilderValueSpecificationHelper.js +2 -2
- package/lib/stores/QueryBuilderValueSpecificationHelper.js.map +1 -1
- package/lib/stores/__test-utils__/TEST_DATA__QueryBuilder_Accessors.d.ts +374 -0
- package/lib/stores/__test-utils__/TEST_DATA__QueryBuilder_Accessors.d.ts.map +1 -0
- package/lib/stores/__test-utils__/TEST_DATA__QueryBuilder_Accessors.js +625 -0
- package/lib/stores/__test-utils__/TEST_DATA__QueryBuilder_Accessors.js.map +1 -0
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js +3 -2
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js.map +1 -1
- package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderRelationAggregationValueSpecBuilder.js +2 -2
- package/lib/stores/fetch-structure/tds/aggregation/QueryBuilderRelationAggregationValueSpecBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterValueSpecificationBuilder.js +1 -1
- package/lib/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterValueSpecificationBuilder.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 +8 -6
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.js +2 -2
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowGroupByOperatorLoader.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowGroupByOperatorLoader.js +2 -0
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowGroupByOperatorLoader.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.js +40 -14
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.js +72 -30
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.d.ts +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.js +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.js +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.js +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.js +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_PercentRank.d.ts +25 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_PercentRank.d.ts.map +1 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_PercentRank.js +54 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_PercentRank.js.map +1 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.js +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.js +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.js.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterValueSpecificationBuilder.js +3 -3
- package/lib/stores/filter/QueryBuilderFilterValueSpecificationBuilder.js.map +1 -1
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.d.ts +1 -0
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.d.ts.map +1 -1
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.js +4 -0
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.js.map +1 -1
- package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.d.ts +31 -6
- package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.d.ts.map +1 -1
- package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js +162 -15
- package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js.map +1 -1
- package/package.json +5 -5
- package/src/__test__.ts +1 -0
- package/src/components/__test-utils__/QueryBuilderComponentTestUtils.tsx +73 -1
- package/src/components/fetch-structure/QueryBuilderTDSWindowPanel.tsx +10 -4
- package/src/components/workflows/AccessorQueryBuilder.tsx +2 -2
- package/src/components/workflows/DataProductQueryBuilder.tsx +40 -62
- package/src/graph/QueryBuilderMetaModelConst.ts +2 -0
- package/src/index.ts +3 -0
- package/src/stores/QueryBuilderStateHashUtils.ts +1 -0
- package/src/stores/QueryBuilderTypeaheadHelper.ts +4 -4
- package/src/stores/QueryBuilderValueSpecificationHelper.ts +5 -3
- package/src/stores/__test-utils__/TEST_DATA__QueryBuilder_Accessors.ts +630 -0
- package/src/stores/fetch-structure/tds/QueryBuilderTDSState.ts +3 -2
- package/src/stores/fetch-structure/tds/aggregation/QueryBuilderRelationAggregationValueSpecBuilder.ts +2 -2
- package/src/stores/fetch-structure/tds/post-filter/QueryBuilderPostFilterValueSpecificationBuilder.ts +1 -1
- package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.ts +8 -6
- package/src/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.ts +2 -2
- package/src/stores/fetch-structure/tds/window/QueryBuilderWindowGroupByOperatorLoader.ts +2 -0
- package/src/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.ts +85 -25
- package/src/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.ts +141 -38
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.ts +1 -1
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.ts +1 -1
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.ts +1 -1
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.ts +1 -1
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.ts +1 -1
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_PercentRank.ts +57 -0
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.ts +1 -1
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.ts +1 -1
- package/src/stores/filter/QueryBuilderFilterValueSpecificationBuilder.ts +3 -3
- package/src/stores/workflows/accessor/AccessorQueryBuilderState.ts +5 -0
- package/src/stores/workflows/dataProduct/DataProductQueryBuilderState.ts +275 -24
- package/tsconfig.json +2 -0
package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.ts
CHANGED
|
@@ -67,7 +67,7 @@ const buildProjectColFunc = (
|
|
|
67
67
|
projectionColumnState instanceof QueryBuilderSimpleProjectionColumnState
|
|
68
68
|
) {
|
|
69
69
|
columnLambda = buildGenericLambdaFunctionInstanceValue(
|
|
70
|
-
projectionColumnState.lambdaParameterName,
|
|
70
|
+
[projectionColumnState.lambdaParameterName],
|
|
71
71
|
[
|
|
72
72
|
buildPropertyExpressionChain(
|
|
73
73
|
projectionColumnState.propertyExpressionState.propertyExpression,
|
|
@@ -172,7 +172,7 @@ export const appendProjection = (
|
|
|
172
172
|
projectionColumnState instanceof QueryBuilderSimpleProjectionColumnState
|
|
173
173
|
) {
|
|
174
174
|
columnLambda = buildGenericLambdaFunctionInstanceValue(
|
|
175
|
-
projectionColumnState.lambdaParameterName,
|
|
175
|
+
[projectionColumnState.lambdaParameterName],
|
|
176
176
|
[
|
|
177
177
|
buildPropertyExpressionChain(
|
|
178
178
|
projectionColumnState.propertyExpressionState.propertyExpression,
|
|
@@ -222,7 +222,7 @@ export const appendProjection = (
|
|
|
222
222
|
extractElementNameFromPath(QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_AGG),
|
|
223
223
|
);
|
|
224
224
|
const aggregateLambda = buildGenericLambdaFunctionInstanceValue(
|
|
225
|
-
aggregateColumnState.lambdaParameterName,
|
|
225
|
+
[aggregateColumnState.lambdaParameterName],
|
|
226
226
|
[
|
|
227
227
|
aggregateColumnState.operator.buildAggregateExpressionFromState(
|
|
228
228
|
aggregateColumnState,
|
|
@@ -242,8 +242,10 @@ export const appendProjection = (
|
|
|
242
242
|
aggregateCalendarLambdaState instanceof SimpleFunctionExpression
|
|
243
243
|
) {
|
|
244
244
|
aggregateCalendarLambda = buildGenericLambdaFunctionInstanceValue(
|
|
245
|
-
|
|
246
|
-
.
|
|
245
|
+
[
|
|
246
|
+
guaranteeNonNullable(aggregateColumnState.calendarFunction)
|
|
247
|
+
.lambdaParameterName,
|
|
248
|
+
],
|
|
247
249
|
[aggregateCalendarLambdaState],
|
|
248
250
|
aggregateColumnState.aggregationState.tdsState.queryBuilderState
|
|
249
251
|
.graphManagerState.graph,
|
|
@@ -348,7 +350,7 @@ export const appendProjection = (
|
|
|
348
350
|
QueryBuilderSimpleProjectionColumnState
|
|
349
351
|
) {
|
|
350
352
|
columnLambda = buildGenericLambdaFunctionInstanceValue(
|
|
351
|
-
projectionColumnState.lambdaParameterName,
|
|
353
|
+
[projectionColumnState.lambdaParameterName],
|
|
352
354
|
[
|
|
353
355
|
buildPropertyExpressionChain(
|
|
354
356
|
projectionColumnState.propertyExpressionState
|
package/src/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.ts
CHANGED
|
@@ -79,7 +79,7 @@ export const buildRelationProjection = (
|
|
|
79
79
|
projectionColumnState instanceof QueryBuilderSimpleProjectionColumnState
|
|
80
80
|
) {
|
|
81
81
|
columnLambda = buildGenericLambdaFunctionInstanceValue(
|
|
82
|
-
projectionColumnState.lambdaParameterName,
|
|
82
|
+
[projectionColumnState.lambdaParameterName],
|
|
83
83
|
[
|
|
84
84
|
buildPropertyExpressionChain(
|
|
85
85
|
projectionColumnState.propertyExpressionState.propertyExpression,
|
|
@@ -104,7 +104,7 @@ export const buildRelationProjection = (
|
|
|
104
104
|
simple.func = real;
|
|
105
105
|
simple.parametersValues = [variable];
|
|
106
106
|
columnLambda = buildGenericLambdaFunctionInstanceValue(
|
|
107
|
-
projectionColumnState.lambdaParameterName,
|
|
107
|
+
[projectionColumnState.lambdaParameterName],
|
|
108
108
|
[simple],
|
|
109
109
|
queryBuilderState.graphManagerState.graph,
|
|
110
110
|
);
|
|
@@ -24,6 +24,7 @@ import { QueryBuilderTDS_WindowOperator_Count } from './operators/QueryBuilderTD
|
|
|
24
24
|
import { QueryBuilderTDS_WindowOperator_Max } from './operators/QueryBuilderTDS_WindowOperator_Max.js';
|
|
25
25
|
import { QueryBuilderTDS_WindowOperator_Min } from './operators/QueryBuilderTDS_WindowOperator_Min.js';
|
|
26
26
|
import { QueryBuilderTDS_WindowOperator_Average } from './operators/QueryBuilderTDS_WindowOperator_Average.js';
|
|
27
|
+
import { QueryBuilderTDS_WindowRankOperator_PercentRank } from './operators/QueryBuilderTDS_WindowOperator_PercentRank.js';
|
|
27
28
|
|
|
28
29
|
export const getQueryBuilderCoreWindowOperators =
|
|
29
30
|
(): QueryBuilderTDS_WindowOperator[] => [
|
|
@@ -36,4 +37,5 @@ export const getQueryBuilderCoreWindowOperators =
|
|
|
36
37
|
new QueryBuilderTDS_WindowRankOperator_DenseRank(),
|
|
37
38
|
new QueryBuilderTDS_WindowRankOperator_Rank(),
|
|
38
39
|
new QueryBuilderTDS_WindowRankOperator_RowNumber(),
|
|
40
|
+
new QueryBuilderTDS_WindowRankOperator_PercentRank(),
|
|
39
41
|
];
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
type ColSpec,
|
|
20
20
|
ColSpecArrayInstance,
|
|
21
21
|
ColSpecInstanceValue,
|
|
22
|
+
FunctionExpression,
|
|
22
23
|
LambdaFunction,
|
|
23
24
|
LambdaFunctionInstanceValue,
|
|
24
25
|
matchFunctionName,
|
|
@@ -248,35 +249,94 @@ const process_WindowOperatorState = (
|
|
|
248
249
|
colSpec: ColSpec,
|
|
249
250
|
tdsState: QueryBuilderTDSState,
|
|
250
251
|
): QueryBuilderTDS_WindowOperatorState => {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
guaranteeType(
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
252
|
+
if (colSpec.function2) {
|
|
253
|
+
//process function 1
|
|
254
|
+
const function1Lambda = guaranteeType(
|
|
255
|
+
guaranteeType(colSpec.function1, LambdaFunctionInstanceValue).values[0],
|
|
256
|
+
LambdaFunction,
|
|
257
|
+
);
|
|
258
|
+
const function1Column = guaranteeType(
|
|
259
|
+
function1Lambda.expressionSequence[0],
|
|
260
|
+
FunctionExpression,
|
|
261
|
+
`Can't process typed window aggregation: expects function1 to be a Function Expression`,
|
|
262
|
+
);
|
|
263
|
+
const aggColumnState = getTDSColumnState(
|
|
264
|
+
tdsState,
|
|
265
|
+
function1Column.functionName,
|
|
266
|
+
);
|
|
261
267
|
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
268
|
+
//process function2
|
|
269
|
+
const aggLambda = guaranteeType(
|
|
270
|
+
guaranteeType(colSpec.function2, LambdaFunctionInstanceValue).values[0],
|
|
271
|
+
LambdaFunction,
|
|
272
|
+
);
|
|
273
|
+
const aggFunctionExp = guaranteeType(
|
|
274
|
+
aggLambda.expressionSequence[0],
|
|
275
|
+
SimpleFunctionExpression,
|
|
276
|
+
);
|
|
266
277
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
278
|
+
const operation = guaranteeNonNullable(
|
|
279
|
+
tdsState.windowState.findOperator(aggFunctionExp.functionName, true),
|
|
280
|
+
`Operator '${aggFunctionExp.functionName}' not supported yet for typed TDS`,
|
|
281
|
+
);
|
|
271
282
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
operatorState.setLambdaParameterNames(operatorParameters);
|
|
283
|
+
const operatorState = new QueryBuilderTDS_WindowAggreationOperatorState(
|
|
284
|
+
tdsState.windowState,
|
|
285
|
+
operation,
|
|
286
|
+
aggColumnState,
|
|
287
|
+
);
|
|
278
288
|
|
|
279
|
-
|
|
289
|
+
//add parameter vlaues
|
|
290
|
+
const lambdaParameters: string[] = [];
|
|
291
|
+
function1Lambda.functionType.parameters.forEach((param) => {
|
|
292
|
+
guaranteeType(param, VariableExpression);
|
|
293
|
+
lambdaParameters.push(param.name);
|
|
294
|
+
});
|
|
295
|
+
const aggLambdaParamName = guaranteeType(
|
|
296
|
+
aggLambda.functionType.parameters[0],
|
|
297
|
+
VariableExpression,
|
|
298
|
+
).name;
|
|
299
|
+
lambdaParameters.push(aggLambdaParamName);
|
|
300
|
+
operatorState.setLambdaParameterNames(lambdaParameters);
|
|
301
|
+
return operatorState;
|
|
302
|
+
} else if (colSpec.function1) {
|
|
303
|
+
//TODO: implement rowNumber as part of rank functions
|
|
304
|
+
const rankLambda = guaranteeType(
|
|
305
|
+
guaranteeType(colSpec.function1, LambdaFunctionInstanceValue).values[0],
|
|
306
|
+
LambdaFunction,
|
|
307
|
+
);
|
|
308
|
+
assertTrue(rankLambda.expressionSequence.length === 1);
|
|
309
|
+
const operationFunctionExp = guaranteeType(
|
|
310
|
+
rankLambda.expressionSequence[0],
|
|
311
|
+
SimpleFunctionExpression,
|
|
312
|
+
);
|
|
313
|
+
|
|
314
|
+
const operation = guaranteeNonNullable(
|
|
315
|
+
tdsState.windowState.findOperator(
|
|
316
|
+
operationFunctionExp.functionName,
|
|
317
|
+
true,
|
|
318
|
+
),
|
|
319
|
+
`Operator '${operationFunctionExp.functionName}' not supported yet for typed TDS`,
|
|
320
|
+
);
|
|
321
|
+
|
|
322
|
+
const operatorState = new QueryBuilderTDS_WindowRankOperatorState(
|
|
323
|
+
tdsState.windowState,
|
|
324
|
+
operation,
|
|
325
|
+
);
|
|
326
|
+
|
|
327
|
+
const operatorParameters: string[] = [];
|
|
328
|
+
rankLambda.functionType.parameters.forEach((param) => {
|
|
329
|
+
guaranteeType(param, VariableExpression);
|
|
330
|
+
operatorParameters.push(param.name);
|
|
331
|
+
});
|
|
332
|
+
operatorState.setLambdaParameterNames(operatorParameters);
|
|
333
|
+
|
|
334
|
+
return operatorState;
|
|
335
|
+
} else {
|
|
336
|
+
throw new UnsupportedOperationError(
|
|
337
|
+
`Only support aggregation and rank operators in extend() expression`,
|
|
338
|
+
);
|
|
339
|
+
}
|
|
280
340
|
};
|
|
281
341
|
|
|
282
342
|
export const processTDS_ExtendExpression = (
|
package/src/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.ts
CHANGED
|
@@ -22,6 +22,7 @@ import {
|
|
|
22
22
|
GenericTypeExplicitReference,
|
|
23
23
|
PrimitiveInstanceValue,
|
|
24
24
|
SimpleFunctionExpression,
|
|
25
|
+
FunctionExpression,
|
|
25
26
|
VariableExpression,
|
|
26
27
|
Multiplicity,
|
|
27
28
|
PrimitiveType,
|
|
@@ -29,8 +30,12 @@ import {
|
|
|
29
30
|
ColSpecArray,
|
|
30
31
|
ColSpecArrayInstance,
|
|
31
32
|
ColSpecInstanceValue,
|
|
33
|
+
RelationColumn,
|
|
32
34
|
} from '@finos/legend-graph';
|
|
33
|
-
import {
|
|
35
|
+
import {
|
|
36
|
+
guaranteeNonNullable,
|
|
37
|
+
UnsupportedOperationError,
|
|
38
|
+
} from '@finos/legend-shared';
|
|
34
39
|
import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../../../graph/QueryBuilderMetaModelConst.js';
|
|
35
40
|
import { buildGenericLambdaFunctionInstanceValue } from '../../../QueryBuilderValueSpecificationHelper.js';
|
|
36
41
|
import {
|
|
@@ -41,6 +46,7 @@ import {
|
|
|
41
46
|
type QueryBuilderWindowColumnState,
|
|
42
47
|
type QueryBuilderWindowState,
|
|
43
48
|
QueryBuilderTDS_WindowAggreationOperatorState,
|
|
49
|
+
QueryBuilderTDS_WindowRankOperatorState,
|
|
44
50
|
} from './QueryBuilderWindowState.js';
|
|
45
51
|
import { DEFAULT_LAMBDA_VARIABLE_NAME } from '@finos/legend-data-cube';
|
|
46
52
|
import {
|
|
@@ -93,13 +99,18 @@ const appendOLAPGroupByColumnState = (
|
|
|
93
99
|
const operationState = olapGroupByColumnState.operatorState;
|
|
94
100
|
const lambdaParameterName =
|
|
95
101
|
operationState.lambdaParameterNames[0] ?? DEFAULT_LAMBDA_VARIABLE_NAME;
|
|
96
|
-
const olapFunc = extractElementNameFromPath(
|
|
102
|
+
const olapFunc = extractElementNameFromPath(
|
|
103
|
+
guaranteeNonNullable(
|
|
104
|
+
operationState.operator.pureFunc,
|
|
105
|
+
`Operator '${operationState.operator.getLabel()}' does not have a compatible OLAP function`,
|
|
106
|
+
),
|
|
107
|
+
);
|
|
97
108
|
const olapFuncExpression = new SimpleFunctionExpression(olapFunc);
|
|
98
109
|
olapFuncExpression.parametersValues = [
|
|
99
110
|
new VariableExpression(lambdaParameterName, Multiplicity.ONE),
|
|
100
111
|
];
|
|
101
112
|
const olapLambdaFuncInstance = buildGenericLambdaFunctionInstanceValue(
|
|
102
|
-
lambdaParameterName,
|
|
113
|
+
[lambdaParameterName],
|
|
103
114
|
[olapFuncExpression],
|
|
104
115
|
graph,
|
|
105
116
|
);
|
|
@@ -216,47 +227,139 @@ const appendExtendColumnState = (
|
|
|
216
227
|
]);
|
|
217
228
|
}
|
|
218
229
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
operatorState.operator.
|
|
222
|
-
)
|
|
223
|
-
|
|
230
|
+
if (
|
|
231
|
+
operatorState instanceof QueryBuilderTDS_WindowAggreationOperatorState &&
|
|
232
|
+
operatorState.operator.relationFunc
|
|
233
|
+
) {
|
|
234
|
+
const operatorFunc = extractElementNameFromPath(
|
|
235
|
+
operatorState.operator.relationFunc,
|
|
236
|
+
);
|
|
224
237
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
238
|
+
//parameters
|
|
239
|
+
const [
|
|
240
|
+
partitionParam = DEFAULT_WINDOW_FUNCTION_PARTITION_VAR_NAME,
|
|
241
|
+
windowParam = DEFAULT_WINDOW_FUNCTION_WINDOW_VAR_NAME,
|
|
242
|
+
rowParam = DEFAULT_WINDOW_FUNCTION_ROW_VAR_NAME,
|
|
243
|
+
aggParam = DEFAULT_LAMBDA_VARIABLE_NAME,
|
|
244
|
+
] = operatorState.lambdaParameterNames;
|
|
230
245
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
246
|
+
// Build function1: the map lambda {p, w, r|$r.SOURCE_COL}
|
|
247
|
+
const columnAccessExpression = new FunctionExpression(
|
|
248
|
+
operatorState.columnState.columnName,
|
|
249
|
+
);
|
|
250
|
+
columnAccessExpression.func = new RelationColumn(
|
|
251
|
+
operatorState.columnState.columnName,
|
|
252
|
+
GenericTypeExplicitReference.create(
|
|
253
|
+
new GenericType(PrimitiveType.STRING),
|
|
254
|
+
),
|
|
255
|
+
);
|
|
256
|
+
columnAccessExpression.parametersValues = [
|
|
257
|
+
new VariableExpression(rowParam, Multiplicity.ONE),
|
|
258
|
+
];
|
|
237
259
|
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
operatorColSpecArray.colSpecs.push(operatorColSpec);
|
|
260
|
+
const mapLambda = buildGenericLambdaFunctionInstanceValue(
|
|
261
|
+
[partitionParam, windowParam, rowParam],
|
|
262
|
+
[columnAccessExpression],
|
|
263
|
+
graph,
|
|
264
|
+
);
|
|
244
265
|
|
|
245
|
-
|
|
246
|
-
extractElementNameFromPath(
|
|
247
|
-
QUERY_BUILDER_SUPPORTED_FUNCTIONS.RELATION_EXTEND,
|
|
248
|
-
),
|
|
249
|
-
);
|
|
266
|
+
operatorColSpec.function1 = mapLambda;
|
|
250
267
|
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
];
|
|
268
|
+
// Build function2: the reduce lambda x|$x->operatorFunc()
|
|
269
|
+
const operatorFuncExpression = new SimpleFunctionExpression(operatorFunc);
|
|
270
|
+
operatorFuncExpression.parametersValues = [
|
|
271
|
+
new VariableExpression(aggParam, Multiplicity.ONE),
|
|
272
|
+
];
|
|
257
273
|
|
|
258
|
-
|
|
259
|
-
|
|
274
|
+
//build col spec
|
|
275
|
+
const function2 = buildGenericLambdaFunctionInstanceValue(
|
|
276
|
+
[aggParam],
|
|
277
|
+
[operatorFuncExpression],
|
|
278
|
+
graph,
|
|
279
|
+
);
|
|
280
|
+
|
|
281
|
+
operatorColSpec.function2 = function2;
|
|
282
|
+
|
|
283
|
+
operatorColSpecArray.colSpecs.push(operatorColSpec);
|
|
284
|
+
|
|
285
|
+
const extendExpression = new SimpleFunctionExpression(
|
|
286
|
+
extractElementNameFromPath(
|
|
287
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.RELATION_EXTEND,
|
|
288
|
+
),
|
|
289
|
+
);
|
|
290
|
+
const currentExpression = guaranteeNonNullable(
|
|
291
|
+
lambda.expressionSequence[0],
|
|
292
|
+
);
|
|
293
|
+
extendExpression.parametersValues = [
|
|
294
|
+
currentExpression,
|
|
295
|
+
overExpression,
|
|
296
|
+
operatorColSpecArrayInst,
|
|
297
|
+
];
|
|
298
|
+
lambda.expressionSequence[0] = extendExpression;
|
|
299
|
+
return lambda;
|
|
300
|
+
} else if (
|
|
301
|
+
operatorState instanceof QueryBuilderTDS_WindowRankOperatorState &&
|
|
302
|
+
operatorState.operator.relationFunc
|
|
303
|
+
) {
|
|
304
|
+
const operatorFunc = extractElementNameFromPath(
|
|
305
|
+
operatorState.operator.relationFunc,
|
|
306
|
+
);
|
|
307
|
+
const operatorFuncExpression = new SimpleFunctionExpression(operatorFunc);
|
|
308
|
+
const [
|
|
309
|
+
partitionParam = DEFAULT_WINDOW_FUNCTION_PARTITION_VAR_NAME,
|
|
310
|
+
windowParam = DEFAULT_WINDOW_FUNCTION_WINDOW_VAR_NAME,
|
|
311
|
+
rowParam = DEFAULT_WINDOW_FUNCTION_ROW_VAR_NAME,
|
|
312
|
+
] = operatorState.lambdaParameterNames;
|
|
313
|
+
|
|
314
|
+
if (
|
|
315
|
+
operatorFunc ===
|
|
316
|
+
extractElementNameFromPath(
|
|
317
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.RELATION_ROW_NUMBER,
|
|
318
|
+
)
|
|
319
|
+
) {
|
|
320
|
+
operatorFuncExpression.parametersValues = [
|
|
321
|
+
new VariableExpression(partitionParam, Multiplicity.ONE),
|
|
322
|
+
new VariableExpression(rowParam, Multiplicity.ONE),
|
|
323
|
+
];
|
|
324
|
+
} else {
|
|
325
|
+
operatorFuncExpression.parametersValues = [
|
|
326
|
+
new VariableExpression(partitionParam, Multiplicity.ONE),
|
|
327
|
+
new VariableExpression(windowParam, Multiplicity.ONE),
|
|
328
|
+
new VariableExpression(rowParam, Multiplicity.ONE),
|
|
329
|
+
];
|
|
330
|
+
}
|
|
331
|
+
|
|
332
|
+
const rankLambda = buildGenericLambdaFunctionInstanceValue(
|
|
333
|
+
[partitionParam, windowParam, rowParam],
|
|
334
|
+
[operatorFuncExpression],
|
|
335
|
+
graph,
|
|
336
|
+
);
|
|
337
|
+
|
|
338
|
+
operatorColSpec.function1 = rankLambda;
|
|
339
|
+
operatorColSpecArray.colSpecs.push(operatorColSpec);
|
|
340
|
+
|
|
341
|
+
const extendExpression = new SimpleFunctionExpression(
|
|
342
|
+
extractElementNameFromPath(
|
|
343
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.RELATION_EXTEND,
|
|
344
|
+
),
|
|
345
|
+
);
|
|
346
|
+
|
|
347
|
+
const currentExpression = guaranteeNonNullable(
|
|
348
|
+
lambda.expressionSequence[0],
|
|
349
|
+
);
|
|
350
|
+
extendExpression.parametersValues = [
|
|
351
|
+
currentExpression,
|
|
352
|
+
overExpression,
|
|
353
|
+
operatorColSpecArrayInst,
|
|
354
|
+
];
|
|
355
|
+
|
|
356
|
+
lambda.expressionSequence[0] = extendExpression;
|
|
357
|
+
return lambda;
|
|
358
|
+
} else {
|
|
359
|
+
throw new UnsupportedOperationError(
|
|
360
|
+
`Unsupported window function. Function must be supported for typed TDS and be an aggregation or rank function.`,
|
|
361
|
+
);
|
|
362
|
+
}
|
|
260
363
|
};
|
|
261
364
|
|
|
262
365
|
export const appendWindowFunctionState = (
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026-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 { PRIMITIVE_TYPE, type Type } from '@finos/legend-graph';
|
|
18
|
+
import { QueryBuilderTDS_WindowOperator } from './QueryBuilderTDS_WindowOperator.js';
|
|
19
|
+
import { hashArray } from '@finos/legend-shared';
|
|
20
|
+
import { QUERY_BUILDER_STATE_HASH_STRUCTURE } from '../../../../QueryBuilderStateHashUtils.js';
|
|
21
|
+
import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../../../../graph/QueryBuilderMetaModelConst.js';
|
|
22
|
+
|
|
23
|
+
export class QueryBuilderTDS_WindowRankOperator_PercentRank extends QueryBuilderTDS_WindowOperator {
|
|
24
|
+
override getLabel(): string {
|
|
25
|
+
return 'percent rank';
|
|
26
|
+
}
|
|
27
|
+
override get pureFunc(): string | undefined {
|
|
28
|
+
// percentRank() is only supported for typed TDS
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
override get relationFunc(): string | undefined {
|
|
32
|
+
return QUERY_BUILDER_SUPPORTED_FUNCTIONS.RELATION_PERCENT_RANK;
|
|
33
|
+
}
|
|
34
|
+
override get hashCode(): string {
|
|
35
|
+
return hashArray([
|
|
36
|
+
QUERY_BUILDER_STATE_HASH_STRUCTURE.TDS_WINDOW_OPERATOR_PERCENT_RANK,
|
|
37
|
+
]);
|
|
38
|
+
}
|
|
39
|
+
override isCompatibleWithType(type: Type | undefined): boolean {
|
|
40
|
+
if (type) {
|
|
41
|
+
return (
|
|
42
|
+
[
|
|
43
|
+
PRIMITIVE_TYPE.STRING,
|
|
44
|
+
PRIMITIVE_TYPE.BOOLEAN,
|
|
45
|
+
PRIMITIVE_TYPE.NUMBER,
|
|
46
|
+
PRIMITIVE_TYPE.INTEGER,
|
|
47
|
+
PRIMITIVE_TYPE.DECIMAL,
|
|
48
|
+
PRIMITIVE_TYPE.FLOAT,
|
|
49
|
+
PRIMITIVE_TYPE.DATE,
|
|
50
|
+
PRIMITIVE_TYPE.STRICTDATE,
|
|
51
|
+
PRIMITIVE_TYPE.DATETIME,
|
|
52
|
+
] as string[]
|
|
53
|
+
).includes(type.path);
|
|
54
|
+
}
|
|
55
|
+
return true;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -156,7 +156,7 @@ export const buildFilterConditionExpression = (
|
|
|
156
156
|
} else if (clauses.length === 1) {
|
|
157
157
|
const lambdaFunctionInstanceValue =
|
|
158
158
|
buildGenericLambdaFunctionInstanceValue(
|
|
159
|
-
node.lambdaParameterName ?? DEFAULT_LAMBDA_VARIABLE_NAME,
|
|
159
|
+
[node.lambdaParameterName ?? DEFAULT_LAMBDA_VARIABLE_NAME],
|
|
160
160
|
clauses,
|
|
161
161
|
filterState.queryBuilderState.graphManagerState.graph,
|
|
162
162
|
);
|
|
@@ -175,7 +175,7 @@ export const buildFilterConditionExpression = (
|
|
|
175
175
|
);
|
|
176
176
|
simp.parametersValues = parametersValues;
|
|
177
177
|
const lambdaFunctionInstanceValue = buildGenericLambdaFunctionInstanceValue(
|
|
178
|
-
node.lambdaParameterName ?? DEFAULT_LAMBDA_VARIABLE_NAME,
|
|
178
|
+
[node.lambdaParameterName ?? DEFAULT_LAMBDA_VARIABLE_NAME],
|
|
179
179
|
[simp],
|
|
180
180
|
filterState.queryBuilderState.graphManagerState.graph,
|
|
181
181
|
);
|
|
@@ -209,7 +209,7 @@ export const buildFilterExpression = (
|
|
|
209
209
|
// param [1]
|
|
210
210
|
filterExpression.parametersValues.push(
|
|
211
211
|
buildGenericLambdaFunctionInstanceValue(
|
|
212
|
-
filterState.lambdaParameterName,
|
|
212
|
+
[filterState.lambdaParameterName],
|
|
213
213
|
filterConditionExpressions,
|
|
214
214
|
filterState.queryBuilderState.graphManagerState.graph,
|
|
215
215
|
),
|
|
@@ -63,6 +63,7 @@ export class AccessorQueryBuilderState extends QueryBuilderState {
|
|
|
63
63
|
changeAccessorOwner: action,
|
|
64
64
|
changeAccessor: action,
|
|
65
65
|
accessorOwnerOptions: computed,
|
|
66
|
+
accessorLabel: computed,
|
|
66
67
|
compatibleRuntimes: computed,
|
|
67
68
|
});
|
|
68
69
|
this.workflowState.updateActionConfig(actionConfig);
|
|
@@ -83,6 +84,10 @@ export class AccessorQueryBuilderState extends QueryBuilderState {
|
|
|
83
84
|
];
|
|
84
85
|
}
|
|
85
86
|
|
|
87
|
+
get accessorLabel(): string {
|
|
88
|
+
return this.sourceAccessor?.accessorLabel ?? 'Accessor';
|
|
89
|
+
}
|
|
90
|
+
|
|
86
91
|
get accessorOwnerOptions(): AccessorOwnerOption[] {
|
|
87
92
|
return this.accessorOwners.map(buildElementOption);
|
|
88
93
|
}
|