@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.
Files changed (229) hide show
  1. package/lib/components/QueryBuilder.d.ts.map +1 -1
  2. package/lib/components/QueryBuilder.js +2 -1
  3. package/lib/components/QueryBuilder.js.map +1 -1
  4. package/lib/components/QueryBuilderSideBar.d.ts.map +1 -1
  5. package/lib/components/QueryBuilderSideBar.js +9 -8
  6. package/lib/components/QueryBuilderSideBar.js.map +1 -1
  7. package/lib/components/explorer/QueryBuilderExplorerPanel.d.ts.map +1 -1
  8. package/lib/components/explorer/QueryBuilderExplorerPanel.js +48 -5
  9. package/lib/components/explorer/QueryBuilderExplorerPanel.js.map +1 -1
  10. package/lib/components/explorer/QueryBuilderRelationExplorerPanel.d.ts +24 -0
  11. package/lib/components/explorer/QueryBuilderRelationExplorerPanel.d.ts.map +1 -0
  12. package/lib/components/explorer/QueryBuilderRelationExplorerPanel.js +202 -0
  13. package/lib/components/explorer/QueryBuilderRelationExplorerPanel.js.map +1 -0
  14. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.d.ts.map +1 -1
  15. package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.js.map +1 -1
  16. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js +3 -3
  17. package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.js.map +1 -1
  18. package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
  19. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +25 -6
  20. package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
  21. package/lib/components/workflows/AccessorQueryBuilder.d.ts +18 -0
  22. package/lib/components/workflows/AccessorQueryBuilder.d.ts.map +1 -0
  23. package/lib/components/workflows/AccessorQueryBuilder.js +87 -0
  24. package/lib/components/workflows/AccessorQueryBuilder.js.map +1 -0
  25. package/lib/components/workflows/ClassQueryBuilder.js +5 -5
  26. package/lib/components/workflows/ClassQueryBuilder.js.map +1 -1
  27. package/lib/data-access-overview.css +1 -1
  28. package/lib/graph/QueryBuilderMetaModelConst.d.ts +4 -0
  29. package/lib/graph/QueryBuilderMetaModelConst.d.ts.map +1 -1
  30. package/lib/graph/QueryBuilderMetaModelConst.js +4 -0
  31. package/lib/graph/QueryBuilderMetaModelConst.js.map +1 -1
  32. package/lib/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.d.ts.map +1 -1
  33. package/lib/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.js +7 -1
  34. package/lib/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.js.map +1 -1
  35. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.d.ts +2 -0
  36. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.d.ts.map +1 -1
  37. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.js +93 -3
  38. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.js.map +1 -1
  39. package/lib/index.css +2 -2
  40. package/lib/index.css.map +1 -1
  41. package/lib/index.d.ts +2 -0
  42. package/lib/index.d.ts.map +1 -1
  43. package/lib/index.js +2 -0
  44. package/lib/index.js.map +1 -1
  45. package/lib/package.json +1 -1
  46. package/lib/stores/QueryBuilderConfig.d.ts +3 -0
  47. package/lib/stores/QueryBuilderConfig.d.ts.map +1 -1
  48. package/lib/stores/QueryBuilderConfig.js +3 -0
  49. package/lib/stores/QueryBuilderConfig.js.map +1 -1
  50. package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
  51. package/lib/stores/QueryBuilderResultState.js +6 -2
  52. package/lib/stores/QueryBuilderResultState.js.map +1 -1
  53. package/lib/stores/QueryBuilderState.d.ts +14 -4
  54. package/lib/stores/QueryBuilderState.d.ts.map +1 -1
  55. package/lib/stores/QueryBuilderState.js +41 -13
  56. package/lib/stores/QueryBuilderState.js.map +1 -1
  57. package/lib/stores/QueryBuilderStateBuilder.d.ts +2 -1
  58. package/lib/stores/QueryBuilderStateBuilder.d.ts.map +1 -1
  59. package/lib/stores/QueryBuilderStateBuilder.js +51 -20
  60. package/lib/stores/QueryBuilderStateBuilder.js.map +1 -1
  61. package/lib/stores/QueryBuilderStateHashUtils.d.ts +1 -0
  62. package/lib/stores/QueryBuilderStateHashUtils.d.ts.map +1 -1
  63. package/lib/stores/QueryBuilderStateHashUtils.js +1 -0
  64. package/lib/stores/QueryBuilderStateHashUtils.js.map +1 -1
  65. package/lib/stores/QueryBuilderTypeaheadHelper.js +2 -2
  66. package/lib/stores/QueryBuilderTypeaheadHelper.js.map +1 -1
  67. package/lib/stores/QueryBuilderValueSpecificationBuilder.d.ts +1 -1
  68. package/lib/stores/QueryBuilderValueSpecificationBuilder.d.ts.map +1 -1
  69. package/lib/stores/QueryBuilderValueSpecificationBuilder.js +54 -45
  70. package/lib/stores/QueryBuilderValueSpecificationBuilder.js.map +1 -1
  71. package/lib/stores/__test-utils__/QueryBuilderStateTestUtils.js +1 -1
  72. package/lib/stores/__test-utils__/QueryBuilderStateTestUtils.js.map +1 -1
  73. package/lib/stores/explorer/QueryBuilderExplorerState.d.ts +12 -2
  74. package/lib/stores/explorer/QueryBuilderExplorerState.d.ts.map +1 -1
  75. package/lib/stores/explorer/QueryBuilderExplorerState.js +12 -2
  76. package/lib/stores/explorer/QueryBuilderExplorerState.js.map +1 -1
  77. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts +2 -2
  78. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts.map +1 -1
  79. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.js.map +1 -1
  80. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts +2 -2
  81. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts.map +1 -1
  82. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js +4 -3
  83. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js.map +1 -1
  84. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.js +1 -1
  85. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.js.map +1 -1
  86. package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.d.ts +2 -0
  87. package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.d.ts.map +1 -1
  88. package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.js +19 -0
  89. package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.js.map +1 -1
  90. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts +7 -4
  91. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts.map +1 -1
  92. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js +59 -12
  93. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js.map +1 -1
  94. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.d.ts +16 -3
  95. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.d.ts.map +1 -1
  96. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js +102 -24
  97. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js.map +1 -1
  98. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.d.ts +2 -1
  99. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.d.ts.map +1 -1
  100. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.js +16 -1
  101. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.js.map +1 -1
  102. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.js +3 -3
  103. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.js.map +1 -1
  104. package/lib/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.d.ts.map +1 -1
  105. package/lib/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.js +11 -2
  106. package/lib/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.js.map +1 -1
  107. package/lib/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.d.ts.map +1 -1
  108. package/lib/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.js +16 -12
  109. package/lib/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.js.map +1 -1
  110. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.d.ts +4 -3
  111. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.d.ts.map +1 -1
  112. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.js +19 -9
  113. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.js.map +1 -1
  114. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.d.ts +1 -0
  115. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.d.ts.map +1 -1
  116. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.js +57 -5
  117. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.js.map +1 -1
  118. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.d.ts +4 -3
  119. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.d.ts.map +1 -1
  120. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.js +85 -6
  121. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.js.map +1 -1
  122. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.d.ts +1 -0
  123. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.d.ts.map +1 -1
  124. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.js.map +1 -1
  125. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.d.ts +1 -0
  126. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.d.ts.map +1 -1
  127. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.js +3 -0
  128. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.js.map +1 -1
  129. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.d.ts +1 -0
  130. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.d.ts.map +1 -1
  131. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.js +3 -0
  132. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.js.map +1 -1
  133. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.d.ts +1 -0
  134. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.d.ts.map +1 -1
  135. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.js +3 -0
  136. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.js.map +1 -1
  137. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.d.ts +1 -0
  138. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.d.ts.map +1 -1
  139. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.js +3 -0
  140. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.js.map +1 -1
  141. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.d.ts +1 -0
  142. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.d.ts.map +1 -1
  143. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.js +3 -0
  144. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.js.map +1 -1
  145. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.d.ts +1 -0
  146. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.d.ts.map +1 -1
  147. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.js +4 -0
  148. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.js.map +1 -1
  149. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.d.ts +1 -0
  150. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.d.ts.map +1 -1
  151. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.js +3 -0
  152. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.js.map +1 -1
  153. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.d.ts +1 -0
  154. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.d.ts.map +1 -1
  155. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.js +3 -0
  156. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.js.map +1 -1
  157. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.d.ts +1 -0
  158. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.d.ts.map +1 -1
  159. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.js +3 -0
  160. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.js.map +1 -1
  161. package/lib/stores/milestoning/QueryBuilderMilestoningState.js +4 -4
  162. package/lib/stores/milestoning/QueryBuilderMilestoningState.js.map +1 -1
  163. package/lib/stores/workflows/MappingQueryBuilderState.js +2 -2
  164. package/lib/stores/workflows/MappingQueryBuilderState.js.map +1 -1
  165. package/lib/stores/workflows/ServiceQueryBuilderState.js +2 -2
  166. package/lib/stores/workflows/ServiceQueryBuilderState.js.map +1 -1
  167. package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.d.ts +18 -0
  168. package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.d.ts.map +1 -0
  169. package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.js +32 -0
  170. package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.js.map +1 -0
  171. package/lib/stores/workflows/accessor/AccessorQueryBuilderState.d.ts +57 -0
  172. package/lib/stores/workflows/accessor/AccessorQueryBuilderState.d.ts.map +1 -0
  173. package/lib/stores/workflows/accessor/AccessorQueryBuilderState.js +125 -0
  174. package/lib/stores/workflows/accessor/AccessorQueryBuilderState.js.map +1 -0
  175. package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js +4 -4
  176. package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js.map +1 -1
  177. package/package.json +7 -7
  178. package/src/components/QueryBuilder.tsx +2 -1
  179. package/src/components/QueryBuilderSideBar.tsx +12 -8
  180. package/src/components/explorer/QueryBuilderExplorerPanel.tsx +77 -14
  181. package/src/components/explorer/QueryBuilderRelationExplorerPanel.tsx +536 -0
  182. package/src/components/fetch-structure/QueryBuilderPostFilterPanel.tsx +1 -0
  183. package/src/components/fetch-structure/QueryBuilderResultModifierPanel.tsx +3 -3
  184. package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +62 -4
  185. package/src/components/workflows/AccessorQueryBuilder.tsx +211 -0
  186. package/src/components/workflows/ClassQueryBuilder.tsx +5 -5
  187. package/src/graph/QueryBuilderMetaModelConst.ts +5 -0
  188. package/src/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.ts +28 -0
  189. package/src/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.ts +223 -4
  190. package/src/index.ts +2 -0
  191. package/src/stores/QueryBuilderConfig.ts +3 -0
  192. package/src/stores/QueryBuilderResultState.ts +12 -8
  193. package/src/stores/QueryBuilderState.ts +47 -12
  194. package/src/stores/QueryBuilderStateBuilder.ts +107 -43
  195. package/src/stores/QueryBuilderStateHashUtils.ts +1 -0
  196. package/src/stores/QueryBuilderTypeaheadHelper.ts +2 -2
  197. package/src/stores/QueryBuilderValueSpecificationBuilder.ts +72 -59
  198. package/src/stores/__test-utils__/QueryBuilderStateTestUtils.ts +1 -1
  199. package/src/stores/explorer/QueryBuilderExplorerState.ts +26 -2
  200. package/src/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.ts +1 -2
  201. package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.ts +4 -3
  202. package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.ts +1 -1
  203. package/src/stores/fetch-structure/tds/QueryBuilderTDSHelper.ts +42 -0
  204. package/src/stores/fetch-structure/tds/QueryBuilderTDSState.ts +135 -19
  205. package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.ts +197 -38
  206. package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.ts +30 -0
  207. package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.ts +3 -3
  208. package/src/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.ts +21 -0
  209. package/src/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.ts +25 -16
  210. package/src/stores/fetch-structure/tds/window/QueryBuilderWindowState.ts +23 -9
  211. package/src/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.ts +146 -4
  212. package/src/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.ts +145 -10
  213. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.ts +2 -0
  214. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.ts +4 -0
  215. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.ts +4 -0
  216. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.ts +4 -0
  217. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.ts +4 -0
  218. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.ts +4 -0
  219. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.ts +5 -0
  220. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.ts +4 -0
  221. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.ts +4 -0
  222. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.ts +4 -0
  223. package/src/stores/milestoning/QueryBuilderMilestoningState.ts +4 -4
  224. package/src/stores/workflows/MappingQueryBuilderState.ts +2 -2
  225. package/src/stores/workflows/ServiceQueryBuilderState.ts +2 -2
  226. package/src/stores/workflows/accessor/AccessorQueryBuilderHelper.ts +51 -0
  227. package/src/stores/workflows/accessor/AccessorQueryBuilderState.ts +195 -0
  228. package/src/stores/workflows/dataProduct/DataProductQueryBuilderState.ts +4 -4
  229. 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(_class: Class | undefined): void;
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.class);
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(_class: Class | undefined): void {
430
- this.updateTreeData(_class);
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.setClass(_class);
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(_class: Class | undefined): void {
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.forEach((col) =>
864
- input.set(col.columnName, col.getIsolatedRawLambda()),
865
- );
866
- const result =
867
- (yield this.queryBuilderState.graphManagerState.graphManager.getLambdasReturnType(
868
- input,
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
- )) as {
871
- results: Map<string, string>;
872
- errors: Map<string, EngineError>;
873
- };
874
- Array.from(result.results.entries()).forEach((res) => {
875
- const col = derivedCols.find((d) => d.columnName === res[0]);
876
- if (col) {
877
- col.setLambdaReturnType(res[1]);
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 isolatedLambda = this.getIsolatedRawLambda();
355
- const type =
356
- (yield this.tdsState.queryBuilderState.graphManagerState.graphManager.getLambdaReturnType(
357
- isolatedLambda,
358
- graph,
359
- )) as string;
360
- this.setLambdaReturnType(type);
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
- getIsolatedRawLambda(): RawLambda {
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
- const parameters = queryBuilderState.parametersState.parameterStates.map(
395
- (_param) =>
396
- queryBuilderState.graphManagerState.graphManager.serializeValueSpecification(
397
- _param.parameter,
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
- const resolvedType =
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,