@finos/legend-query-builder 4.17.99 → 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 (268) 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/result/QueryBuilderResultPanel.d.ts.map +1 -1
  22. package/lib/components/result/QueryBuilderResultPanel.js +1 -1
  23. package/lib/components/result/QueryBuilderResultPanel.js.map +1 -1
  24. package/lib/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.d.ts +42 -0
  25. package/lib/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.d.ts.map +1 -0
  26. package/lib/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.js +212 -0
  27. package/lib/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.js.map +1 -0
  28. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStats.d.ts +66 -0
  29. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStats.d.ts.map +1 -0
  30. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStats.js +265 -0
  31. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStats.js.map +1 -0
  32. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.d.ts +28 -0
  33. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.d.ts.map +1 -0
  34. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.js +148 -0
  35. package/lib/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.js.map +1 -0
  36. package/lib/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.d.ts +19 -0
  37. package/lib/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.d.ts.map +1 -0
  38. package/lib/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.js +196 -0
  39. package/lib/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.js.map +1 -0
  40. package/lib/components/result/tds/QueryBuilderTDSGridResult.d.ts +5 -0
  41. package/lib/components/result/tds/QueryBuilderTDSGridResult.d.ts.map +1 -1
  42. package/lib/components/result/tds/QueryBuilderTDSGridResult.js +64 -87
  43. package/lib/components/result/tds/QueryBuilderTDSGridResult.js.map +1 -1
  44. package/lib/components/result/tds/QueryBuilderTDSGridShared.d.ts +26 -0
  45. package/lib/components/result/tds/QueryBuilderTDSGridShared.d.ts.map +1 -0
  46. package/lib/components/result/tds/QueryBuilderTDSGridShared.js +51 -0
  47. package/lib/components/result/tds/QueryBuilderTDSGridShared.js.map +1 -0
  48. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.d.ts +5 -0
  49. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.d.ts.map +1 -1
  50. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.js +169 -60
  51. package/lib/components/result/tds/QueryBuilderTDSSimpleGridResult.js.map +1 -1
  52. package/lib/components/workflows/AccessorQueryBuilder.d.ts +18 -0
  53. package/lib/components/workflows/AccessorQueryBuilder.d.ts.map +1 -0
  54. package/lib/components/workflows/AccessorQueryBuilder.js +87 -0
  55. package/lib/components/workflows/AccessorQueryBuilder.js.map +1 -0
  56. package/lib/components/workflows/ClassQueryBuilder.js +5 -5
  57. package/lib/components/workflows/ClassQueryBuilder.js.map +1 -1
  58. package/lib/data-access-overview.css +1 -1
  59. package/lib/graph/QueryBuilderMetaModelConst.d.ts +4 -0
  60. package/lib/graph/QueryBuilderMetaModelConst.d.ts.map +1 -1
  61. package/lib/graph/QueryBuilderMetaModelConst.js +4 -0
  62. package/lib/graph/QueryBuilderMetaModelConst.js.map +1 -1
  63. package/lib/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.d.ts.map +1 -1
  64. package/lib/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.js +7 -1
  65. package/lib/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.js.map +1 -1
  66. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.d.ts +2 -0
  67. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.d.ts.map +1 -1
  68. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.js +93 -3
  69. package/lib/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.js.map +1 -1
  70. package/lib/index.css +2 -2
  71. package/lib/index.css.map +1 -1
  72. package/lib/index.d.ts +2 -0
  73. package/lib/index.d.ts.map +1 -1
  74. package/lib/index.js +2 -0
  75. package/lib/index.js.map +1 -1
  76. package/lib/package.json +1 -1
  77. package/lib/stores/QueryBuilderConfig.d.ts +3 -0
  78. package/lib/stores/QueryBuilderConfig.d.ts.map +1 -1
  79. package/lib/stores/QueryBuilderConfig.js +3 -0
  80. package/lib/stores/QueryBuilderConfig.js.map +1 -1
  81. package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
  82. package/lib/stores/QueryBuilderResultState.js +13 -3
  83. package/lib/stores/QueryBuilderResultState.js.map +1 -1
  84. package/lib/stores/QueryBuilderState.d.ts +14 -4
  85. package/lib/stores/QueryBuilderState.d.ts.map +1 -1
  86. package/lib/stores/QueryBuilderState.js +41 -13
  87. package/lib/stores/QueryBuilderState.js.map +1 -1
  88. package/lib/stores/QueryBuilderStateBuilder.d.ts +2 -1
  89. package/lib/stores/QueryBuilderStateBuilder.d.ts.map +1 -1
  90. package/lib/stores/QueryBuilderStateBuilder.js +51 -20
  91. package/lib/stores/QueryBuilderStateBuilder.js.map +1 -1
  92. package/lib/stores/QueryBuilderStateHashUtils.d.ts +1 -0
  93. package/lib/stores/QueryBuilderStateHashUtils.d.ts.map +1 -1
  94. package/lib/stores/QueryBuilderStateHashUtils.js +1 -0
  95. package/lib/stores/QueryBuilderStateHashUtils.js.map +1 -1
  96. package/lib/stores/QueryBuilderTypeaheadHelper.js +2 -2
  97. package/lib/stores/QueryBuilderTypeaheadHelper.js.map +1 -1
  98. package/lib/stores/QueryBuilderValueSpecificationBuilder.d.ts +1 -1
  99. package/lib/stores/QueryBuilderValueSpecificationBuilder.d.ts.map +1 -1
  100. package/lib/stores/QueryBuilderValueSpecificationBuilder.js +54 -45
  101. package/lib/stores/QueryBuilderValueSpecificationBuilder.js.map +1 -1
  102. package/lib/stores/__test-utils__/QueryBuilderStateTestUtils.js +1 -1
  103. package/lib/stores/__test-utils__/QueryBuilderStateTestUtils.js.map +1 -1
  104. package/lib/stores/explorer/QueryBuilderExplorerState.d.ts +12 -2
  105. package/lib/stores/explorer/QueryBuilderExplorerState.d.ts.map +1 -1
  106. package/lib/stores/explorer/QueryBuilderExplorerState.js +12 -2
  107. package/lib/stores/explorer/QueryBuilderExplorerState.js.map +1 -1
  108. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts +2 -2
  109. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts.map +1 -1
  110. package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.js.map +1 -1
  111. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts +2 -2
  112. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts.map +1 -1
  113. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js +4 -3
  114. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js.map +1 -1
  115. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.js +1 -1
  116. package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.js.map +1 -1
  117. package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.d.ts +2 -0
  118. package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.d.ts.map +1 -1
  119. package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.js +19 -0
  120. package/lib/stores/fetch-structure/tds/QueryBuilderTDSHelper.js.map +1 -1
  121. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts +7 -4
  122. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts.map +1 -1
  123. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js +59 -12
  124. package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js.map +1 -1
  125. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.d.ts +16 -3
  126. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.d.ts.map +1 -1
  127. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js +102 -24
  128. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.js.map +1 -1
  129. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.d.ts +2 -1
  130. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.d.ts.map +1 -1
  131. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.js +16 -1
  132. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.js.map +1 -1
  133. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.js +3 -3
  134. package/lib/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.js.map +1 -1
  135. package/lib/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.d.ts.map +1 -1
  136. package/lib/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.js +11 -2
  137. package/lib/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.js.map +1 -1
  138. package/lib/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.d.ts.map +1 -1
  139. package/lib/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.js +16 -12
  140. package/lib/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.js.map +1 -1
  141. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.d.ts +4 -3
  142. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.d.ts.map +1 -1
  143. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.js +19 -9
  144. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowState.js.map +1 -1
  145. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.d.ts +1 -0
  146. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.d.ts.map +1 -1
  147. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.js +57 -5
  148. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.js.map +1 -1
  149. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.d.ts +4 -3
  150. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.d.ts.map +1 -1
  151. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.js +85 -6
  152. package/lib/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.js.map +1 -1
  153. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.d.ts +1 -0
  154. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.d.ts.map +1 -1
  155. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.js.map +1 -1
  156. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.d.ts +1 -0
  157. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.d.ts.map +1 -1
  158. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.js +3 -0
  159. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.js.map +1 -1
  160. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.d.ts +1 -0
  161. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.d.ts.map +1 -1
  162. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.js +3 -0
  163. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.js.map +1 -1
  164. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.d.ts +1 -0
  165. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.d.ts.map +1 -1
  166. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.js +3 -0
  167. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.js.map +1 -1
  168. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.d.ts +1 -0
  169. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.d.ts.map +1 -1
  170. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.js +3 -0
  171. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.js.map +1 -1
  172. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.d.ts +1 -0
  173. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.d.ts.map +1 -1
  174. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.js +3 -0
  175. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.js.map +1 -1
  176. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.d.ts +1 -0
  177. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.d.ts.map +1 -1
  178. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.js +4 -0
  179. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.js.map +1 -1
  180. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.d.ts +1 -0
  181. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.d.ts.map +1 -1
  182. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.js +3 -0
  183. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.js.map +1 -1
  184. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.d.ts +1 -0
  185. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.d.ts.map +1 -1
  186. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.js +3 -0
  187. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.js.map +1 -1
  188. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.d.ts +1 -0
  189. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.d.ts.map +1 -1
  190. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.js +3 -0
  191. package/lib/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.js.map +1 -1
  192. package/lib/stores/milestoning/QueryBuilderMilestoningState.js +4 -4
  193. package/lib/stores/milestoning/QueryBuilderMilestoningState.js.map +1 -1
  194. package/lib/stores/workflows/MappingQueryBuilderState.js +2 -2
  195. package/lib/stores/workflows/MappingQueryBuilderState.js.map +1 -1
  196. package/lib/stores/workflows/ServiceQueryBuilderState.js +2 -2
  197. package/lib/stores/workflows/ServiceQueryBuilderState.js.map +1 -1
  198. package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.d.ts +18 -0
  199. package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.d.ts.map +1 -0
  200. package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.js +32 -0
  201. package/lib/stores/workflows/accessor/AccessorQueryBuilderHelper.js.map +1 -0
  202. package/lib/stores/workflows/accessor/AccessorQueryBuilderState.d.ts +57 -0
  203. package/lib/stores/workflows/accessor/AccessorQueryBuilderState.d.ts.map +1 -0
  204. package/lib/stores/workflows/accessor/AccessorQueryBuilderState.js +125 -0
  205. package/lib/stores/workflows/accessor/AccessorQueryBuilderState.js.map +1 -0
  206. package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js +4 -4
  207. package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js.map +1 -1
  208. package/package.json +7 -7
  209. package/src/components/QueryBuilder.tsx +2 -1
  210. package/src/components/QueryBuilderSideBar.tsx +12 -8
  211. package/src/components/explorer/QueryBuilderExplorerPanel.tsx +77 -14
  212. package/src/components/explorer/QueryBuilderRelationExplorerPanel.tsx +536 -0
  213. package/src/components/fetch-structure/QueryBuilderPostFilterPanel.tsx +1 -0
  214. package/src/components/fetch-structure/QueryBuilderResultModifierPanel.tsx +3 -3
  215. package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +62 -4
  216. package/src/components/result/QueryBuilderResultPanel.tsx +6 -2
  217. package/src/components/result/tds/QueryBuilderTDSAsyncCellSelectionStats.ts +254 -0
  218. package/src/components/result/tds/QueryBuilderTDSCellSelectionStats.ts +397 -0
  219. package/src/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.tsx +439 -0
  220. package/src/components/result/tds/QueryBuilderTDSGridKeyboardShortcuts.ts +270 -0
  221. package/src/components/result/tds/QueryBuilderTDSGridResult.tsx +107 -112
  222. package/src/components/result/tds/QueryBuilderTDSGridShared.ts +76 -0
  223. package/src/components/result/tds/QueryBuilderTDSSimpleGridResult.tsx +272 -99
  224. package/src/components/workflows/AccessorQueryBuilder.tsx +211 -0
  225. package/src/components/workflows/ClassQueryBuilder.tsx +5 -5
  226. package/src/graph/QueryBuilderMetaModelConst.ts +5 -0
  227. package/src/graph-manager/protocol/pure/QueryBuilder_PureProtocolProcessorPlugin.ts +28 -0
  228. package/src/graph-manager/protocol/pure/v1/V1_QueryValueSpecificationBuilderHelper.ts +223 -4
  229. package/src/index.ts +2 -0
  230. package/src/stores/QueryBuilderConfig.ts +3 -0
  231. package/src/stores/QueryBuilderResultState.ts +22 -9
  232. package/src/stores/QueryBuilderState.ts +47 -12
  233. package/src/stores/QueryBuilderStateBuilder.ts +107 -43
  234. package/src/stores/QueryBuilderStateHashUtils.ts +1 -0
  235. package/src/stores/QueryBuilderTypeaheadHelper.ts +2 -2
  236. package/src/stores/QueryBuilderValueSpecificationBuilder.ts +72 -59
  237. package/src/stores/__test-utils__/QueryBuilderStateTestUtils.ts +1 -1
  238. package/src/stores/explorer/QueryBuilderExplorerState.ts +26 -2
  239. package/src/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.ts +1 -2
  240. package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.ts +4 -3
  241. package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.ts +1 -1
  242. package/src/stores/fetch-structure/tds/QueryBuilderTDSHelper.ts +42 -0
  243. package/src/stores/fetch-structure/tds/QueryBuilderTDSState.ts +135 -19
  244. package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionColumnState.ts +197 -38
  245. package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionStateBuilder.ts +30 -0
  246. package/src/stores/fetch-structure/tds/projection/QueryBuilderProjectionValueSpecificationBuilder.ts +3 -3
  247. package/src/stores/fetch-structure/tds/projection/QueryBuilderRelationProjectValueSpecBuilder.ts +21 -0
  248. package/src/stores/fetch-structure/tds/projection/QueryBuilderTypedProjectionStateBuilder.ts +25 -16
  249. package/src/stores/fetch-structure/tds/window/QueryBuilderWindowState.ts +23 -9
  250. package/src/stores/fetch-structure/tds/window/QueryBuilderWindowStateBuilder.ts +146 -4
  251. package/src/stores/fetch-structure/tds/window/QueryBuilderWindowValueSpecificationBuilder.ts +145 -10
  252. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator.ts +2 -0
  253. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Average.ts +4 -0
  254. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Count.ts +4 -0
  255. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Max.ts +4 -0
  256. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Min.ts +4 -0
  257. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowOperator_Sum.ts +4 -0
  258. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_AverageRank.ts +5 -0
  259. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_DenseRank.ts +4 -0
  260. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_Rank.ts +4 -0
  261. package/src/stores/fetch-structure/tds/window/operators/QueryBuilderTDS_WindowRankOperator_RowNumber.ts +4 -0
  262. package/src/stores/milestoning/QueryBuilderMilestoningState.ts +4 -4
  263. package/src/stores/workflows/MappingQueryBuilderState.ts +2 -2
  264. package/src/stores/workflows/ServiceQueryBuilderState.ts +2 -2
  265. package/src/stores/workflows/accessor/AccessorQueryBuilderHelper.ts +51 -0
  266. package/src/stores/workflows/accessor/AccessorQueryBuilderState.ts +195 -0
  267. package/src/stores/workflows/dataProduct/DataProductQueryBuilderState.ts +4 -4
  268. package/tsconfig.json +9 -0
@@ -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,
@@ -47,7 +47,7 @@ import {
47
47
  buildPropertyExpressionChain,
48
48
  type LambdaFunctionBuilderOption,
49
49
  } from '../../../QueryBuilderValueSpecificationBuilderHelper.js';
50
- import { appendOLAPGroupByState } from '../window/QueryBuilderWindowValueSpecificationBuilder.js';
50
+ import { appendWindowFunctionState } from '../window/QueryBuilderWindowValueSpecificationBuilder.js';
51
51
  import { appendPostFilter } from '../post-filter/QueryBuilderPostFilterValueSpecificationBuilder.js';
52
52
  import { buildRelationProjection } from './QueryBuilderRelationProjectValueSpecBuilder.js';
53
53
  import { QueryBuilderAggregateOperator_Wavg } from '../aggregation/operators/QueryBuilderAggregateOperator_Wavg.js';
@@ -295,7 +295,7 @@ export const appendProjection = (
295
295
  ];
296
296
  lambdaFunction.expressionSequence[0] = groupByFunction;
297
297
  } else if (tdsState.projectionColumns.length) {
298
- if (!tdsState.queryBuilderState.isFetchStructureTyped) {
298
+ if (!queryBuilderState.useRelation) {
299
299
  // projection
300
300
  const projectFunction = new SimpleFunctionExpression(
301
301
  extractElementNameFromPath(
@@ -409,7 +409,7 @@ export const appendProjection = (
409
409
  }
410
410
  }
411
411
  // build olapGroupBy
412
- appendOLAPGroupByState(tdsState.windowState, lambdaFunction);
412
+ appendWindowFunctionState(tdsState.windowState, lambdaFunction);
413
413
 
414
414
  // build post-filter
415
415
  appendPostFilter(tdsState.postFilterState, lambdaFunction);
@@ -31,10 +31,13 @@ import {
31
31
  Relation,
32
32
  RelationColumn,
33
33
  RelationType,
34
+ VariableExpression,
35
+ FunctionExpression,
34
36
  } from '@finos/legend-graph';
35
37
  import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../../../graph/QueryBuilderMetaModelConst.js';
36
38
  import {
37
39
  QueryBuilderDerivationProjectionColumnState,
40
+ QueryBuilderRelationColumnProjectionColumnState,
38
41
  QueryBuilderSimpleProjectionColumnState,
39
42
  } from './QueryBuilderProjectionColumnState.js';
40
43
  import type { QueryBuilderTDSState } from '../QueryBuilderTDSState.js';
@@ -87,6 +90,24 @@ export const buildRelationProjection = (
87
90
  ],
88
91
  queryBuilderState.graphManagerState.graph,
89
92
  );
93
+ } else if (
94
+ projectionColumnState instanceof
95
+ QueryBuilderRelationColumnProjectionColumnState
96
+ ) {
97
+ const real = projectionColumnState.column;
98
+ const simple = new FunctionExpression(real.name);
99
+ const variable = new VariableExpression(
100
+ projectionColumnState.lambdaParameterName,
101
+ Multiplicity.ONE,
102
+ undefined,
103
+ );
104
+ simple.func = real;
105
+ simple.parametersValues = [variable];
106
+ columnLambda = buildGenericLambdaFunctionInstanceValue(
107
+ projectionColumnState.lambdaParameterName,
108
+ [simple],
109
+ queryBuilderState.graphManagerState.graph,
110
+ );
90
111
  } else if (
91
112
  projectionColumnState instanceof
92
113
  QueryBuilderDerivationProjectionColumnState