@finos/legend-query-builder 4.17.100 → 4.18.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/lib/components/QueryBuilder.d.ts.map +1 -1
- package/lib/components/QueryBuilder.js +2 -1
- package/lib/components/QueryBuilder.js.map +1 -1
- package/lib/components/QueryBuilderSideBar.d.ts.map +1 -1
- package/lib/components/QueryBuilderSideBar.js +9 -8
- package/lib/components/QueryBuilderSideBar.js.map +1 -1
- package/lib/components/explorer/QueryBuilderExplorerPanel.d.ts.map +1 -1
- package/lib/components/explorer/QueryBuilderExplorerPanel.js +48 -5
- package/lib/components/explorer/QueryBuilderExplorerPanel.js.map +1 -1
- package/lib/components/explorer/QueryBuilderRelationExplorerPanel.d.ts +24 -0
- package/lib/components/explorer/QueryBuilderRelationExplorerPanel.d.ts.map +1 -0
- package/lib/components/explorer/QueryBuilderRelationExplorerPanel.js +202 -0
- package/lib/components/explorer/QueryBuilderRelationExplorerPanel.js.map +1 -0
- package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js +3 -3
- package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +25 -6
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
- package/lib/components/workflows/AccessorQueryBuilder.d.ts +18 -0
- package/lib/components/workflows/AccessorQueryBuilder.d.ts.map +1 -0
- package/lib/components/workflows/AccessorQueryBuilder.js +87 -0
- package/lib/components/workflows/AccessorQueryBuilder.js.map +1 -0
- package/lib/components/workflows/ClassQueryBuilder.js +5 -5
- package/lib/components/workflows/ClassQueryBuilder.js.map +1 -1
- package/lib/data-access-overview.css +1 -1
- package/lib/graph/QueryBuilderMetaModelConst.d.ts +4 -0
- package/lib/graph/QueryBuilderMetaModelConst.d.ts.map +1 -1
- package/lib/graph/QueryBuilderMetaModelConst.js +4 -0
- package/lib/graph/QueryBuilderMetaModelConst.js.map +1 -1
- package/lib/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.js +7 -1
- package/lib/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.d.ts +2 -0
- package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.js +93 -3
- 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/index.d.ts +2 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/QueryBuilderConfig.d.ts +3 -0
- package/lib/stores/QueryBuilderConfig.d.ts.map +1 -1
- package/lib/stores/QueryBuilderConfig.js +3 -0
- package/lib/stores/QueryBuilderConfig.js.map +1 -1
- package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderResultState.js +6 -2
- package/lib/stores/QueryBuilderResultState.js.map +1 -1
- package/lib/stores/QueryBuilderState.d.ts +14 -4
- package/lib/stores/QueryBuilderState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderState.js +41 -13
- package/lib/stores/QueryBuilderState.js.map +1 -1
- package/lib/stores/QueryBuilderStateBuilder.d.ts +2 -1
- package/lib/stores/QueryBuilderStateBuilder.d.ts.map +1 -1
- package/lib/stores/QueryBuilderStateBuilder.js +51 -20
- 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/QueryBuilderTypeaheadHelper.js +2 -2
- package/lib/stores/QueryBuilderTypeaheadHelper.js.map +1 -1
- package/lib/stores/QueryBuilderValueSpecificationBuilder.d.ts +1 -1
- package/lib/stores/QueryBuilderValueSpecificationBuilder.d.ts.map +1 -1
- package/lib/stores/QueryBuilderValueSpecificationBuilder.js +54 -45
- package/lib/stores/QueryBuilderValueSpecificationBuilder.js.map +1 -1
- package/lib/stores/__test-utils__/QueryBuilderStateTestUtils.js +1 -1
- package/lib/stores/__test-utils__/QueryBuilderStateTestUtils.js.map +1 -1
- package/lib/stores/explorer/QueryBuilderExplorerState.d.ts +12 -2
- package/lib/stores/explorer/QueryBuilderExplorerState.d.ts.map +1 -1
- package/lib/stores/explorer/QueryBuilderExplorerState.js +12 -2
- package/lib/stores/explorer/QueryBuilderExplorerState.js.map +1 -1
- package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts +2 -2
- package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.js.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts +2 -2
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js +4 -3
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.js +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.d.ts +2 -0
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.js +19 -0
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.js.map +1 -1
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts +7 -4
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js +59 -12
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.d.ts +16 -3
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js +102 -24
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.d.ts +2 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.js +16 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.js +3 -3
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.js +11 -2
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.js +16 -12
- package/lib/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.d.ts +4 -3
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.js +19 -9
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.d.ts +1 -0
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.js +57 -5
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.d.ts +4 -3
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.js +85 -6
- 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 -0
- 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.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.d.ts +1 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.js +3 -0
- 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.d.ts +1 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.js +3 -0
- 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.d.ts +1 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.js +3 -0
- 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.d.ts +1 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.js +3 -0
- 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_Sum.d.ts +1 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.js +3 -0
- 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_AverageRank.d.ts +1 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.js +4 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.d.ts +1 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.js +3 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.d.ts +1 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.js +3 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.js.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.d.ts +1 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.js +3 -0
- package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.js.map +1 -1
- package/lib/stores/milestoning/QueryBuilderMilestoningState.js +4 -4
- package/lib/stores/milestoning/QueryBuilderMilestoningState.js.map +1 -1
- package/lib/stores/workflows/MappingQueryBuilderState.js +2 -2
- package/lib/stores/workflows/MappingQueryBuilderState.js.map +1 -1
- package/lib/stores/workflows/ServiceQueryBuilderState.js +2 -2
- package/lib/stores/workflows/ServiceQueryBuilderState.js.map +1 -1
- package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.d.ts +18 -0
- package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.d.ts.map +1 -0
- package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.js +32 -0
- package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.js.map +1 -0
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.d.ts +57 -0
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.d.ts.map +1 -0
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.js +125 -0
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.js.map +1 -0
- package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js +4 -4
- package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js.map +1 -1
- package/package.json +7 -7
- package/src/components/QueryBuilder.tsx +2 -1
- package/src/components/QueryBuilderSideBar.tsx +12 -8
- package/src/components/explorer/QueryBuilderExplorerPanel.tsx +77 -14
- package/src/components/explorer/QueryBuilderRelationExplorerPanel.tsx +536 -0
- package/src/components/fetch-structure/QueryBuilderPostFilterPanel.tsx +1 -0
- package/src/components/fetch-structure/QueryBuilderResultModifierPanel.tsx +3 -3
- package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +62 -4
- package/src/components/workflows/AccessorQueryBuilder.tsx +211 -0
- package/src/components/workflows/ClassQueryBuilder.tsx +5 -5
- package/src/graph/QueryBuilderMetaModelConst.ts +5 -0
- package/src/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.ts +28 -0
- package/src/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.ts +223 -4
- package/src/index.ts +2 -0
- package/src/stores/QueryBuilderConfig.ts +3 -0
- package/src/stores/QueryBuilderResultState.ts +12 -8
- package/src/stores/QueryBuilderState.ts +47 -12
- package/src/stores/QueryBuilderStateBuilder.ts +107 -43
- package/src/stores/QueryBuilderStateHashUtils.ts +1 -0
- package/src/stores/QueryBuilderTypeaheadHelper.ts +2 -2
- package/src/stores/QueryBuilderValueSpecificationBuilder.ts +72 -59
- package/src/stores/__test-utils__/QueryBuilderStateTestUtils.ts +1 -1
- package/src/stores/explorer/QueryBuilderExplorerState.ts +26 -2
- package/src/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.ts +1 -2
- package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.ts +4 -3
- package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.ts +1 -1
- package/src/stores/fetch-structure/tds/QueryBuilderTDSHelper.ts +42 -0
- package/src/stores/fetch-structure/tds/QueryBuilderTDSState.ts +135 -19
- package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.ts +197 -38
- package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.ts +30 -0
- package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.ts +3 -3
- package/src/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.ts +21 -0
- package/src/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.ts +25 -16
- package/src/stores/fetch-structure/tds/window/QueryBuilderWindowState.ts +23 -9
- package/src/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.ts +146 -4
- package/src/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.ts +145 -10
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.ts +2 -0
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.ts +4 -0
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.ts +4 -0
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.ts +4 -0
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.ts +4 -0
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.ts +4 -0
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.ts +5 -0
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.ts +4 -0
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.ts +4 -0
- package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.ts +4 -0
- package/src/stores/milestoning/QueryBuilderMilestoningState.ts +4 -4
- package/src/stores/workflows/MappingQueryBuilderState.ts +2 -2
- package/src/stores/workflows/ServiceQueryBuilderState.ts +2 -2
- package/src/stores/workflows/accessor/AccessorQueryBuilderHelper.ts +51 -0
- package/src/stores/workflows/accessor/AccessorQueryBuilderState.ts +195 -0
- package/src/stores/workflows/dataProduct/DataProductQueryBuilderState.ts +4 -4
- package/tsconfig.json +4 -0
|
@@ -15,7 +15,6 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import type {
|
|
18
|
-
Class,
|
|
19
18
|
CompilationError,
|
|
20
19
|
LambdaFunction,
|
|
21
20
|
VariableExpression,
|
|
@@ -63,7 +62,7 @@ export abstract class QueryBuilderFetchStructureImplementationState
|
|
|
63
62
|
abstract get fetchLabel(): string;
|
|
64
63
|
abstract get canBeExportedToCube(): boolean;
|
|
65
64
|
|
|
66
|
-
abstract onClassChange(
|
|
65
|
+
abstract onClassChange(): void;
|
|
67
66
|
abstract revealCompilationError(compilationError: CompilationError): boolean;
|
|
68
67
|
abstract clearCompilationError(): void;
|
|
69
68
|
abstract fetchProperty(node: QueryBuilderExplorerTreePropertyNodeData): void;
|
|
@@ -296,7 +296,7 @@ export class QueryBuilderGraphFetchTreeState
|
|
|
296
296
|
});
|
|
297
297
|
|
|
298
298
|
// try to initialize the graph-fetch tree data using the setup class
|
|
299
|
-
this.updateTreeData(this.queryBuilderState.
|
|
299
|
+
this.updateTreeData(this.queryBuilderState.sourceClass);
|
|
300
300
|
// we will default to standard pure serialization with no config
|
|
301
301
|
this.serializationState = new GraphFetchPureSerializationState(this);
|
|
302
302
|
}
|
|
@@ -426,8 +426,9 @@ export class QueryBuilderGraphFetchTreeState
|
|
|
426
426
|
return;
|
|
427
427
|
}
|
|
428
428
|
|
|
429
|
-
onClassChange(
|
|
430
|
-
|
|
429
|
+
onClassChange(): void {
|
|
430
|
+
// graph-fetch is only applicable for Class sources
|
|
431
|
+
this.updateTreeData(this.queryBuilderState.sourceClass);
|
|
431
432
|
}
|
|
432
433
|
|
|
433
434
|
appendFetchStructure(
|
|
@@ -136,7 +136,7 @@ export const processInternalizeExpression = (
|
|
|
136
136
|
`Can't process internalize() expression: internalize() return type is missing`,
|
|
137
137
|
);
|
|
138
138
|
|
|
139
|
-
queryBuilderState.
|
|
139
|
+
queryBuilderState.setSourceElement(_class);
|
|
140
140
|
queryBuilderState.milestoningState.clearMilestoningDates();
|
|
141
141
|
queryBuilderState.explorerState.refreshTreeData();
|
|
142
142
|
|
|
@@ -86,6 +86,48 @@ export const getFunctionNameFromTDSSortColumn = (
|
|
|
86
86
|
}
|
|
87
87
|
};
|
|
88
88
|
|
|
89
|
+
export const getFunctionNameFromRelationSortColumn = (
|
|
90
|
+
columnSortType: COLUMN_SORT_TYPE,
|
|
91
|
+
): string => {
|
|
92
|
+
switch (columnSortType) {
|
|
93
|
+
case COLUMN_SORT_TYPE.ASC:
|
|
94
|
+
return extractElementNameFromPath(
|
|
95
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.RELATION_ASC,
|
|
96
|
+
);
|
|
97
|
+
case COLUMN_SORT_TYPE.DESC:
|
|
98
|
+
return extractElementNameFromPath(
|
|
99
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.RELATION_DESC,
|
|
100
|
+
);
|
|
101
|
+
default:
|
|
102
|
+
throw new UnsupportedOperationError(
|
|
103
|
+
`Unsupported column sort type ${columnSortType}`,
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
export const getRelationSortColumnFromFunctionName = (
|
|
109
|
+
functionName: string,
|
|
110
|
+
): COLUMN_SORT_TYPE => {
|
|
111
|
+
if (
|
|
112
|
+
matchFunctionName(
|
|
113
|
+
functionName,
|
|
114
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.RELATION_ASC,
|
|
115
|
+
)
|
|
116
|
+
) {
|
|
117
|
+
return COLUMN_SORT_TYPE.ASC;
|
|
118
|
+
} else if (
|
|
119
|
+
matchFunctionName(
|
|
120
|
+
functionName,
|
|
121
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.RELATION_DESC,
|
|
122
|
+
)
|
|
123
|
+
) {
|
|
124
|
+
return COLUMN_SORT_TYPE.DESC;
|
|
125
|
+
}
|
|
126
|
+
throw new UnsupportedOperationError(
|
|
127
|
+
`Unsupported relation sort function: ${functionName}`,
|
|
128
|
+
);
|
|
129
|
+
};
|
|
130
|
+
|
|
89
131
|
export const buildTDSSortTypeExpression = (
|
|
90
132
|
sortType: COLUMN_SORT_TYPE,
|
|
91
133
|
column: string,
|
|
@@ -37,13 +37,13 @@ import {
|
|
|
37
37
|
hashArray,
|
|
38
38
|
UnsupportedOperationError,
|
|
39
39
|
ContentType,
|
|
40
|
+
type PlainObject,
|
|
40
41
|
} from '@finos/legend-shared';
|
|
41
42
|
import type { QueryBuilderState } from '../../QueryBuilderState.js';
|
|
42
43
|
import {
|
|
43
44
|
type CompilationError,
|
|
44
45
|
type LambdaFunction,
|
|
45
46
|
type ValueSpecification,
|
|
46
|
-
type VariableExpression,
|
|
47
47
|
type EngineError,
|
|
48
48
|
GRAPH_MANAGER_EVENT,
|
|
49
49
|
extractSourceInformationCoordinates,
|
|
@@ -51,11 +51,16 @@ import {
|
|
|
51
51
|
RawLambda,
|
|
52
52
|
isStubbed_RawLambda,
|
|
53
53
|
Class,
|
|
54
|
+
Accessor,
|
|
54
55
|
AbstractPropertyExpression,
|
|
55
56
|
matchFunctionName,
|
|
56
57
|
SimpleFunctionExpression,
|
|
57
58
|
getAllSuperclasses,
|
|
58
59
|
EXECUTION_SERIALIZATION_FORMAT,
|
|
60
|
+
FunctionExpression,
|
|
61
|
+
VariableExpression,
|
|
62
|
+
Multiplicity,
|
|
63
|
+
type RelationTypeMetadata,
|
|
59
64
|
} from '@finos/legend-graph';
|
|
60
65
|
import {
|
|
61
66
|
DEFAULT_LAMBDA_VARIABLE_NAME,
|
|
@@ -78,8 +83,11 @@ import type { QueryBuilderAggregateOperator } from './aggregation/QueryBuilderAg
|
|
|
78
83
|
import { getQueryBuilderCoreAggregrationOperators } from './aggregation/QueryBuilderAggregateOperatorLoader.js';
|
|
79
84
|
import {
|
|
80
85
|
QueryBuilderDerivationProjectionColumnState,
|
|
86
|
+
QueryBuilderRelationColumnProjectionColumnState,
|
|
81
87
|
QueryBuilderSimpleProjectionColumnState,
|
|
82
88
|
type QueryBuilderProjectionColumnState,
|
|
89
|
+
_buildAccessorProjectRawLambda,
|
|
90
|
+
_decorateRawLambdaWithParametersAndLetExpressions,
|
|
83
91
|
} from './projection/QueryBuilderProjectionColumnState.js';
|
|
84
92
|
import type { QueryBuilderFetchStructureState } from '../QueryBuilderFetchStructureState.js';
|
|
85
93
|
import {
|
|
@@ -284,6 +292,10 @@ export class QueryBuilderTDSState
|
|
|
284
292
|
}
|
|
285
293
|
|
|
286
294
|
nodeIDs = nodeIDs.concat(ids);
|
|
295
|
+
} else if (
|
|
296
|
+
column instanceof QueryBuilderRelationColumnProjectionColumnState
|
|
297
|
+
) {
|
|
298
|
+
nodeIDs.push(column.column.name);
|
|
287
299
|
}
|
|
288
300
|
});
|
|
289
301
|
|
|
@@ -447,7 +459,7 @@ export class QueryBuilderTDSState
|
|
|
447
459
|
);
|
|
448
460
|
}
|
|
449
461
|
|
|
450
|
-
onClassChange(
|
|
462
|
+
onClassChange(): void {
|
|
451
463
|
return;
|
|
452
464
|
}
|
|
453
465
|
|
|
@@ -550,6 +562,55 @@ export class QueryBuilderTDSState
|
|
|
550
562
|
).catch(this.queryBuilderState.applicationStore.alertUnhandledError);
|
|
551
563
|
}
|
|
552
564
|
|
|
565
|
+
transformRelationColumnProjectionToDerivation(
|
|
566
|
+
relationColumnProjectionColumnState: QueryBuilderRelationColumnProjectionColumnState,
|
|
567
|
+
): void {
|
|
568
|
+
// setup new derivation column state
|
|
569
|
+
const column = relationColumnProjectionColumnState.column;
|
|
570
|
+
const funcExpression = new FunctionExpression(column.name);
|
|
571
|
+
funcExpression.func = column;
|
|
572
|
+
funcExpression.parametersValues = [
|
|
573
|
+
new VariableExpression(
|
|
574
|
+
relationColumnProjectionColumnState.lambdaParameterName,
|
|
575
|
+
Multiplicity.ONE,
|
|
576
|
+
undefined,
|
|
577
|
+
),
|
|
578
|
+
];
|
|
579
|
+
const columnColumnLambda = buildGenericLambdaFunctionInstanceValue(
|
|
580
|
+
relationColumnProjectionColumnState.lambdaParameterName,
|
|
581
|
+
[funcExpression],
|
|
582
|
+
this.queryBuilderState.graphManagerState.graph,
|
|
583
|
+
);
|
|
584
|
+
const derivationColumnState =
|
|
585
|
+
new QueryBuilderDerivationProjectionColumnState(
|
|
586
|
+
this,
|
|
587
|
+
guaranteeType(
|
|
588
|
+
this.queryBuilderState.graphManagerState.graphManager.transformValueSpecToRawValueSpec(
|
|
589
|
+
columnColumnLambda,
|
|
590
|
+
this.queryBuilderState.graphManagerState.graph,
|
|
591
|
+
),
|
|
592
|
+
RawLambda,
|
|
593
|
+
),
|
|
594
|
+
);
|
|
595
|
+
derivationColumnState.setColumnName(
|
|
596
|
+
relationColumnProjectionColumnState.columnName,
|
|
597
|
+
);
|
|
598
|
+
|
|
599
|
+
this.replaceColumn(
|
|
600
|
+
relationColumnProjectionColumnState,
|
|
601
|
+
derivationColumnState,
|
|
602
|
+
);
|
|
603
|
+
|
|
604
|
+
// convert to grammar for display
|
|
605
|
+
flowResult(
|
|
606
|
+
derivationColumnState.derivationLambdaEditorState.convertLambdaObjectToGrammarString(
|
|
607
|
+
{
|
|
608
|
+
pretty: false,
|
|
609
|
+
},
|
|
610
|
+
),
|
|
611
|
+
).catch(this.queryBuilderState.applicationStore.alertUnhandledError);
|
|
612
|
+
}
|
|
613
|
+
|
|
553
614
|
replaceColumn(
|
|
554
615
|
oldVal: QueryBuilderProjectionColumnState,
|
|
555
616
|
newVal: QueryBuilderProjectionColumnState,
|
|
@@ -843,6 +904,25 @@ export class QueryBuilderTDSState
|
|
|
843
904
|
);
|
|
844
905
|
}
|
|
845
906
|
|
|
907
|
+
getParameters(): PlainObject[] {
|
|
908
|
+
return this.queryBuilderState.parametersState.parameterStates.map(
|
|
909
|
+
(_param) =>
|
|
910
|
+
this.queryBuilderState.graphManagerState.graphManager.serializeValueSpecification(
|
|
911
|
+
_param.parameter,
|
|
912
|
+
),
|
|
913
|
+
);
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
getLetExpressions(): PlainObject[] {
|
|
917
|
+
return this.queryBuilderState.constantState.constants
|
|
918
|
+
.map((_const) => _const.buildLetExpression())
|
|
919
|
+
.map((expres) =>
|
|
920
|
+
this.queryBuilderState.graphManagerState.graphManager.serializeValueSpecification(
|
|
921
|
+
expres,
|
|
922
|
+
),
|
|
923
|
+
);
|
|
924
|
+
}
|
|
925
|
+
|
|
846
926
|
get hashCode(): string {
|
|
847
927
|
return hashArray([
|
|
848
928
|
QUERY_BUILDER_STATE_HASH_STRUCTURE.PROJECTION_STATE,
|
|
@@ -855,28 +935,64 @@ export class QueryBuilderTDSState
|
|
|
855
935
|
|
|
856
936
|
*fetchDerivedReturnTypes(): GeneratorFn<void> {
|
|
857
937
|
try {
|
|
858
|
-
const input = new Map<string, RawLambda>();
|
|
859
938
|
const graph = this.queryBuilderState.graphManagerState.graph;
|
|
860
939
|
const derivedCols = this.projectionColumns.filter(
|
|
861
940
|
filterByType(QueryBuilderDerivationProjectionColumnState),
|
|
862
941
|
);
|
|
863
|
-
derivedCols.
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
const
|
|
867
|
-
|
|
868
|
-
|
|
942
|
+
if (derivedCols.length === 0) {
|
|
943
|
+
return;
|
|
944
|
+
}
|
|
945
|
+
const sourceElement = this.queryBuilderState.sourceElement;
|
|
946
|
+
if (sourceElement instanceof Class) {
|
|
947
|
+
const input = new Map<string, RawLambda>();
|
|
948
|
+
derivedCols.forEach((col) =>
|
|
949
|
+
input.set(col.columnName, col.getIsolatedClassRawLambda()),
|
|
950
|
+
);
|
|
951
|
+
const result =
|
|
952
|
+
(yield this.queryBuilderState.graphManagerState.graphManager.getLambdasReturnType(
|
|
953
|
+
input,
|
|
954
|
+
graph,
|
|
955
|
+
)) as {
|
|
956
|
+
results: Map<string, string>;
|
|
957
|
+
errors: Map<string, EngineError>;
|
|
958
|
+
};
|
|
959
|
+
Array.from(result.results.entries()).forEach((res) => {
|
|
960
|
+
const col = derivedCols.find((d) => d.columnName === res[0]);
|
|
961
|
+
if (col) {
|
|
962
|
+
col.setLambdaReturnType(res[1]);
|
|
963
|
+
}
|
|
964
|
+
});
|
|
965
|
+
} else if (sourceElement instanceof Accessor) {
|
|
966
|
+
const columnsMap = new Map<string, RawLambda>();
|
|
967
|
+
derivedCols.forEach((col) =>
|
|
968
|
+
columnsMap.set(col.columnName, col.lambda),
|
|
969
|
+
);
|
|
970
|
+
const isolatedLambda = _buildAccessorProjectRawLambda(
|
|
869
971
|
graph,
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
972
|
+
this.queryBuilderState.graphManagerState,
|
|
973
|
+
sourceElement,
|
|
974
|
+
columnsMap,
|
|
975
|
+
);
|
|
976
|
+
const enrichedLambda =
|
|
977
|
+
_decorateRawLambdaWithParametersAndLetExpressions(
|
|
978
|
+
isolatedLambda,
|
|
979
|
+
this.getParameters(),
|
|
980
|
+
this.getLetExpressions(),
|
|
981
|
+
);
|
|
982
|
+
const relationTypeMetadata =
|
|
983
|
+
(yield this.queryBuilderState.graphManagerState.graphManager.getLambdaRelationType(
|
|
984
|
+
enrichedLambda,
|
|
985
|
+
graph,
|
|
986
|
+
)) as RelationTypeMetadata;
|
|
987
|
+
derivedCols.forEach((col) => {
|
|
988
|
+
const columnMeta = relationTypeMetadata.columns.find(
|
|
989
|
+
(c) => c.name === col.columnName,
|
|
990
|
+
);
|
|
991
|
+
if (columnMeta) {
|
|
992
|
+
col.setLambdaReturnType(columnMeta.type);
|
|
993
|
+
}
|
|
994
|
+
});
|
|
995
|
+
}
|
|
880
996
|
} catch (error) {
|
|
881
997
|
assertErrorThrown(error);
|
|
882
998
|
this.queryBuilderState.applicationStore.logService.info(
|
|
@@ -21,17 +21,21 @@ import {
|
|
|
21
21
|
flow,
|
|
22
22
|
computed,
|
|
23
23
|
flowResult,
|
|
24
|
+
override,
|
|
24
25
|
} from 'mobx';
|
|
25
26
|
import {
|
|
26
27
|
type GeneratorFn,
|
|
27
28
|
LogEvent,
|
|
28
29
|
assertErrorThrown,
|
|
29
30
|
guaranteeNonNullable,
|
|
31
|
+
guaranteeType,
|
|
30
32
|
assertTrue,
|
|
31
33
|
assertNonEmptyString,
|
|
32
34
|
type Hashable,
|
|
33
35
|
hashArray,
|
|
34
36
|
ActionState,
|
|
37
|
+
prettyCONSTName,
|
|
38
|
+
type PlainObject,
|
|
35
39
|
} from '@finos/legend-shared';
|
|
36
40
|
import {
|
|
37
41
|
type QueryBuilderExplorerTreePropertyNodeData,
|
|
@@ -45,7 +49,10 @@ import type { QueryBuilderState } from '../../../QueryBuilderState.js';
|
|
|
45
49
|
import {
|
|
46
50
|
type AbstractPropertyExpression,
|
|
47
51
|
type Type,
|
|
52
|
+
type RelationColumn,
|
|
48
53
|
type VariableExpression,
|
|
54
|
+
type RelationTypeMetadata,
|
|
55
|
+
type PureModel,
|
|
49
56
|
PackageableElementExplicitReference,
|
|
50
57
|
GRAPH_MANAGER_EVENT,
|
|
51
58
|
buildSourceInformationSourceId,
|
|
@@ -56,6 +63,23 @@ import {
|
|
|
56
63
|
stub_RawLambda,
|
|
57
64
|
Multiplicity,
|
|
58
65
|
PrimitiveType,
|
|
66
|
+
Accessor,
|
|
67
|
+
Class,
|
|
68
|
+
LambdaFunction,
|
|
69
|
+
FunctionType,
|
|
70
|
+
CORE_PURE_PATH,
|
|
71
|
+
AccessorInstanceValue,
|
|
72
|
+
SimpleFunctionExpression,
|
|
73
|
+
ColSpec,
|
|
74
|
+
extractElementNameFromPath,
|
|
75
|
+
ColSpecArrayInstance,
|
|
76
|
+
ColSpecArray,
|
|
77
|
+
INTERNAL__UnknownValueSpecification,
|
|
78
|
+
V1_serializeRawValueSpecification,
|
|
79
|
+
V1_transformRawLambda,
|
|
80
|
+
V1_GraphTransformerContextBuilder,
|
|
81
|
+
buildRawLambdaFromLambdaFunction,
|
|
82
|
+
type GraphManagerState,
|
|
59
83
|
} from '@finos/legend-graph';
|
|
60
84
|
import { QueryBuilderTDSColumnState } from '../QueryBuilderTDSColumnState.js';
|
|
61
85
|
import type { QueryBuilderTDSState } from '../QueryBuilderTDSState.js';
|
|
@@ -66,6 +90,74 @@ import {
|
|
|
66
90
|
import { QUERY_BUILDER_STATE_HASH_STRUCTURE } from '../../../QueryBuilderStateHashUtils.js';
|
|
67
91
|
import { LambdaEditorState } from '../../../shared/LambdaEditorState.js';
|
|
68
92
|
import { isValueExpressionReferencedInValue } from '../../../QueryBuilderValueSpecificationHelper.js';
|
|
93
|
+
import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../../../graph/QueryBuilderMetaModelConst.js';
|
|
94
|
+
|
|
95
|
+
export const _buildAccessorProjectRawLambda = (
|
|
96
|
+
graph: PureModel,
|
|
97
|
+
graphManagerState: GraphManagerState,
|
|
98
|
+
accessor: Accessor,
|
|
99
|
+
columns: ReadonlyMap<string, RawLambda>,
|
|
100
|
+
): RawLambda => {
|
|
101
|
+
const lambdaFunction = new LambdaFunction(
|
|
102
|
+
new FunctionType(
|
|
103
|
+
PackageableElementExplicitReference.create(
|
|
104
|
+
graph.getType(CORE_PURE_PATH.ANY),
|
|
105
|
+
),
|
|
106
|
+
Multiplicity.ONE,
|
|
107
|
+
),
|
|
108
|
+
);
|
|
109
|
+
const accessorInstanceValue = new AccessorInstanceValue();
|
|
110
|
+
accessorInstanceValue.values = [accessor];
|
|
111
|
+
const projectFunction = new SimpleFunctionExpression(
|
|
112
|
+
extractElementNameFromPath(
|
|
113
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.RELATION_PROJECT,
|
|
114
|
+
),
|
|
115
|
+
);
|
|
116
|
+
const instanceVal = new ColSpecArrayInstance(Multiplicity.ONE, undefined);
|
|
117
|
+
const colSpecArray = new ColSpecArray();
|
|
118
|
+
instanceVal.values = [colSpecArray];
|
|
119
|
+
const transformerContext = new V1_GraphTransformerContextBuilder(
|
|
120
|
+
// TODO?: do we need to include the plugins here?
|
|
121
|
+
[],
|
|
122
|
+
).build();
|
|
123
|
+
columns.forEach((lambda, columnName) => {
|
|
124
|
+
const colSpec = new ColSpec();
|
|
125
|
+
colSpec.name = columnName;
|
|
126
|
+
colSpec.function1 = new INTERNAL__UnknownValueSpecification(
|
|
127
|
+
V1_serializeRawValueSpecification(
|
|
128
|
+
V1_transformRawLambda(lambda, transformerContext),
|
|
129
|
+
),
|
|
130
|
+
);
|
|
131
|
+
colSpecArray.colSpecs.push(colSpec);
|
|
132
|
+
});
|
|
133
|
+
projectFunction.parametersValues = [accessorInstanceValue, instanceVal];
|
|
134
|
+
lambdaFunction.expressionSequence = [projectFunction];
|
|
135
|
+
return buildRawLambdaFromLambdaFunction(lambdaFunction, graphManagerState);
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export const _decorateRawLambdaWithParametersAndLetExpressions = (
|
|
139
|
+
rawLambda: RawLambda,
|
|
140
|
+
parameters: PlainObject[],
|
|
141
|
+
letExpressions: PlainObject[],
|
|
142
|
+
): RawLambda => {
|
|
143
|
+
let lambdaBody = rawLambda.body;
|
|
144
|
+
if (letExpressions.length) {
|
|
145
|
+
if (Array.isArray(rawLambda.body)) {
|
|
146
|
+
lambdaBody = [...letExpressions, ...(rawLambda.body as object[])];
|
|
147
|
+
} else {
|
|
148
|
+
lambdaBody = [...letExpressions, rawLambda.body];
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
return new RawLambda(
|
|
152
|
+
[
|
|
153
|
+
...(Array.isArray(rawLambda.parameters)
|
|
154
|
+
? (rawLambda.parameters as object[])
|
|
155
|
+
: []),
|
|
156
|
+
...parameters,
|
|
157
|
+
],
|
|
158
|
+
lambdaBody,
|
|
159
|
+
);
|
|
160
|
+
};
|
|
69
161
|
|
|
70
162
|
export const QUERY_BUILDER_PROJECTION_COLUMN_DND_TYPE = 'PROJECTION_COLUMN';
|
|
71
163
|
|
|
@@ -182,6 +274,54 @@ export class QueryBuilderSimpleProjectionColumnState
|
|
|
182
274
|
}
|
|
183
275
|
}
|
|
184
276
|
|
|
277
|
+
export class QueryBuilderRelationColumnProjectionColumnState
|
|
278
|
+
extends QueryBuilderProjectionColumnState
|
|
279
|
+
implements Hashable
|
|
280
|
+
{
|
|
281
|
+
lambdaParameterName: string = DEFAULT_LAMBDA_VARIABLE_NAME;
|
|
282
|
+
|
|
283
|
+
readonly column: RelationColumn;
|
|
284
|
+
|
|
285
|
+
constructor(
|
|
286
|
+
tdsState: QueryBuilderTDSState,
|
|
287
|
+
column: RelationColumn,
|
|
288
|
+
humanizePropertyName: boolean = true,
|
|
289
|
+
) {
|
|
290
|
+
super(tdsState, column.name);
|
|
291
|
+
|
|
292
|
+
makeObservable(this, {
|
|
293
|
+
hashCode: override,
|
|
294
|
+
lambdaParameterName: observable,
|
|
295
|
+
setLambdaParameterName: action,
|
|
296
|
+
});
|
|
297
|
+
|
|
298
|
+
this.column = column;
|
|
299
|
+
this.columnName = humanizePropertyName
|
|
300
|
+
? prettyCONSTName(column.name)
|
|
301
|
+
: column.name;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
override getColumnType(): Type | undefined {
|
|
305
|
+
return this.column.genericType.value.rawType;
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
setLambdaParameterName(val: string): void {
|
|
309
|
+
this.lambdaParameterName = val;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
isVariableUsed(_variable: VariableExpression): boolean {
|
|
313
|
+
return false;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
get hashCode(): string {
|
|
317
|
+
return hashArray([
|
|
318
|
+
QUERY_BUILDER_STATE_HASH_STRUCTURE.RELATION_COLUMN_PROJECTION_COLUMN_STATE,
|
|
319
|
+
this.column.name,
|
|
320
|
+
this.columnName,
|
|
321
|
+
]);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
|
|
185
325
|
class QueryBuilderDerivationProjectionLambdaState extends LambdaEditorState {
|
|
186
326
|
queryBuilderState: QueryBuilderState;
|
|
187
327
|
derivationProjectionColumnState: QueryBuilderDerivationProjectionColumnState;
|
|
@@ -300,6 +440,7 @@ export class QueryBuilderDerivationProjectionColumnState
|
|
|
300
440
|
returnType: observable,
|
|
301
441
|
fetchingLambdaReturnTypeState: observable,
|
|
302
442
|
setLambda: action,
|
|
443
|
+
setResolvedLambdaReturnType: action,
|
|
303
444
|
fetchDerivationLambdaReturnType: flow,
|
|
304
445
|
setLambdaReturnType: action,
|
|
305
446
|
});
|
|
@@ -351,13 +492,29 @@ export class QueryBuilderDerivationProjectionColumnState
|
|
|
351
492
|
}
|
|
352
493
|
assertTrue(Array.isArray(this.lambda.parameters));
|
|
353
494
|
const graph = this.tdsState.queryBuilderState.graphManagerState.graph;
|
|
354
|
-
const
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
495
|
+
const sourceElement = this.tdsState.queryBuilderState.sourceElement;
|
|
496
|
+
if (sourceElement instanceof Class) {
|
|
497
|
+
const isolatedLambda = this.getIsolatedClassRawLambda();
|
|
498
|
+
const type =
|
|
499
|
+
(yield this.tdsState.queryBuilderState.graphManagerState.graphManager.getLambdaReturnType(
|
|
500
|
+
isolatedLambda,
|
|
501
|
+
graph,
|
|
502
|
+
)) as string;
|
|
503
|
+
this.setLambdaReturnType(type);
|
|
504
|
+
} else if (sourceElement instanceof Accessor) {
|
|
505
|
+
const isolatedLambda = this.getIsolatedAccessorRawLambda(sourceElement);
|
|
506
|
+
const relationTypeMetadata =
|
|
507
|
+
(yield this.tdsState.queryBuilderState.graphManagerState.graphManager.getLambdaRelationType(
|
|
508
|
+
isolatedLambda,
|
|
509
|
+
graph,
|
|
510
|
+
)) as RelationTypeMetadata;
|
|
511
|
+
const columnMetadata = relationTypeMetadata.columns.find(
|
|
512
|
+
(col) => col.name === this.columnName,
|
|
513
|
+
);
|
|
514
|
+
if (columnMetadata) {
|
|
515
|
+
this.setLambdaReturnType(columnMetadata.type);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
361
518
|
} catch (error) {
|
|
362
519
|
assertErrorThrown(error);
|
|
363
520
|
this.tdsState.queryBuilderState.applicationStore.logService.info(
|
|
@@ -372,7 +529,28 @@ export class QueryBuilderDerivationProjectionColumnState
|
|
|
372
529
|
}
|
|
373
530
|
}
|
|
374
531
|
|
|
375
|
-
|
|
532
|
+
getIsolatedAccessorRawLambda(_accessor: Accessor): RawLambda {
|
|
533
|
+
const { graphManagerState } = this.tdsState.queryBuilderState;
|
|
534
|
+
const isolatedLambda = _buildAccessorProjectRawLambda(
|
|
535
|
+
graphManagerState.graph,
|
|
536
|
+
graphManagerState,
|
|
537
|
+
_accessor,
|
|
538
|
+
new Map([[this.columnName, this.lambda]]),
|
|
539
|
+
);
|
|
540
|
+
const enrichedLambda = _decorateRawLambdaWithParametersAndLetExpressions(
|
|
541
|
+
isolatedLambda,
|
|
542
|
+
this.tdsState.getParameters(),
|
|
543
|
+
this.tdsState.getLetExpressions(),
|
|
544
|
+
);
|
|
545
|
+
return enrichedLambda;
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
getIsolatedClassRawLambda(): RawLambda {
|
|
549
|
+
const _class = guaranteeType(
|
|
550
|
+
this.tdsState.queryBuilderState.sourceElement,
|
|
551
|
+
Class,
|
|
552
|
+
'Expected source element to be a class',
|
|
553
|
+
);
|
|
376
554
|
assertTrue(Array.isArray(this.lambda.parameters));
|
|
377
555
|
const projectionParameter = this.lambda.parameters as object[];
|
|
378
556
|
assertTrue(projectionParameter.length === 1);
|
|
@@ -383,45 +561,26 @@ export class QueryBuilderDerivationProjectionColumnState
|
|
|
383
561
|
const rawVariableExpression = new RawVariableExpression(
|
|
384
562
|
variable.name,
|
|
385
563
|
Multiplicity.ONE,
|
|
386
|
-
PackageableElementExplicitReference.create(
|
|
387
|
-
guaranteeNonNullable(queryBuilderState.class),
|
|
388
|
-
),
|
|
564
|
+
PackageableElementExplicitReference.create(guaranteeNonNullable(_class)),
|
|
389
565
|
);
|
|
390
566
|
const _rawVariableExpression =
|
|
391
567
|
queryBuilderState.graphManagerState.graphManager.serializeRawValueSpecification(
|
|
392
568
|
rawVariableExpression,
|
|
393
569
|
);
|
|
394
|
-
|
|
395
|
-
(
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
),
|
|
570
|
+
return _decorateRawLambdaWithParametersAndLetExpressions(
|
|
571
|
+
new RawLambda([_rawVariableExpression], this.lambda.body),
|
|
572
|
+
this.tdsState.getParameters(),
|
|
573
|
+
this.tdsState.getLetExpressions(),
|
|
399
574
|
);
|
|
400
|
-
const letExpressions = queryBuilderState.constantState.constants
|
|
401
|
-
.map((_const) => _const.buildLetExpression())
|
|
402
|
-
.map((expres) =>
|
|
403
|
-
queryBuilderState.graphManagerState.graphManager.serializeValueSpecification(
|
|
404
|
-
expres,
|
|
405
|
-
),
|
|
406
|
-
);
|
|
407
|
-
let lambdaBody = this.lambda.body;
|
|
408
|
-
if (letExpressions.length) {
|
|
409
|
-
if (Array.isArray(this.lambda.body)) {
|
|
410
|
-
lambdaBody = [...letExpressions, ...(this.lambda.body as object[])];
|
|
411
|
-
} else {
|
|
412
|
-
lambdaBody = [...letExpressions, this.lambda.body];
|
|
413
|
-
}
|
|
414
|
-
}
|
|
415
|
-
const isolatedLambda = new RawLambda(
|
|
416
|
-
[_rawVariableExpression, ...parameters],
|
|
417
|
-
lambdaBody,
|
|
418
|
-
);
|
|
419
|
-
return isolatedLambda;
|
|
420
575
|
}
|
|
421
576
|
|
|
422
577
|
setLambdaReturnType(type: string): void {
|
|
423
|
-
|
|
424
|
-
this.tdsState.queryBuilderState.graphManagerState.graph.getType(type)
|
|
578
|
+
this.setResolvedLambdaReturnType(
|
|
579
|
+
this.tdsState.queryBuilderState.graphManagerState.graph.getType(type),
|
|
580
|
+
);
|
|
581
|
+
}
|
|
582
|
+
|
|
583
|
+
setResolvedLambdaReturnType(resolvedType: Type): void {
|
|
425
584
|
assertTrue(
|
|
426
585
|
resolvedType instanceof PrimitiveType ||
|
|
427
586
|
resolvedType instanceof Enumeration,
|
|
@@ -30,6 +30,8 @@ import {
|
|
|
30
30
|
PrimitiveInstanceValue,
|
|
31
31
|
LambdaFunctionInstanceValue,
|
|
32
32
|
ColSpecInstanceValue,
|
|
33
|
+
type RelationColumn,
|
|
34
|
+
type FunctionExpression,
|
|
33
35
|
} from '@finos/legend-graph';
|
|
34
36
|
import {
|
|
35
37
|
assertNonNullable,
|
|
@@ -56,6 +58,7 @@ import {
|
|
|
56
58
|
import { FETCH_STRUCTURE_IMPLEMENTATION } from '../../QueryBuilderFetchStructureImplementationState.js';
|
|
57
59
|
import {
|
|
58
60
|
QueryBuilderDerivationProjectionColumnState,
|
|
61
|
+
QueryBuilderRelationColumnProjectionColumnState,
|
|
59
62
|
QueryBuilderSimpleProjectionColumnState,
|
|
60
63
|
} from './QueryBuilderProjectionColumnState.js';
|
|
61
64
|
import { QueryBuilderTDSState } from '../QueryBuilderTDSState.js';
|
|
@@ -300,6 +303,33 @@ export const processTDSProjectionColumnPropertyExpression = (
|
|
|
300
303
|
}
|
|
301
304
|
};
|
|
302
305
|
|
|
306
|
+
export const processTDSRelationColumn = (
|
|
307
|
+
parentExpression: FunctionExpression,
|
|
308
|
+
columnName: string | undefined,
|
|
309
|
+
col: RelationColumn,
|
|
310
|
+
queryBuilderState: QueryBuilderState,
|
|
311
|
+
): void => {
|
|
312
|
+
if (
|
|
313
|
+
queryBuilderState.fetchStructureState.implementation instanceof
|
|
314
|
+
QueryBuilderTDSState
|
|
315
|
+
) {
|
|
316
|
+
const tdsState = queryBuilderState.fetchStructureState.implementation;
|
|
317
|
+
const columnState = new QueryBuilderRelationColumnProjectionColumnState(
|
|
318
|
+
tdsState,
|
|
319
|
+
col,
|
|
320
|
+
false,
|
|
321
|
+
);
|
|
322
|
+
tdsState.addColumn(columnState, { skipSorting: true });
|
|
323
|
+
if (columnName) {
|
|
324
|
+
columnState.setColumnName(columnName);
|
|
325
|
+
}
|
|
326
|
+
const parameter = parentExpression.parametersValues[0];
|
|
327
|
+
if (parameter instanceof VariableExpression) {
|
|
328
|
+
columnState.setLambdaParameterName(parameter.name);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
|
|
303
333
|
export const processTDSProjectionDerivationExpression = (
|
|
304
334
|
value: INTERNAL__UnknownValueSpecification,
|
|
305
335
|
columnName: string | undefined,
|