@finos/legend-cube-builder 0.0.4 → 0.0.6

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 (719) hide show
  1. package/README.md +9 -3
  2. package/docs/adding-an-operation.md +24 -12
  3. package/docs/demo/DEMO-FAST-NOTES.md +67 -0
  4. package/docs/demo/README.md +102 -0
  5. package/docs/demo/specs/duckdb-sales-pivot.cube.json +110 -0
  6. package/docs/demo/specs/trades-desks-1-joined.cube.json +123 -0
  7. package/docs/demo/specs/trades-desks-2-grouped.cube.json +140 -0
  8. package/docs/demo/specs/trades-desks-3-ranked.cube.json +158 -0
  9. package/docs/demo/specs/trades-desks-4-extended.cube.json +208 -0
  10. package/docs/demo/specs/trades-desks-5-final.cube.json +248 -0
  11. package/docs/hosting.md +83 -5
  12. package/docs/testing.md +32 -0
  13. package/lib/__lib__/LegendCubeCommand.d.ts +2 -0
  14. package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -1
  15. package/lib/__lib__/LegendCubeCommand.js +7 -0
  16. package/lib/__lib__/LegendCubeCommand.js.map +1 -1
  17. package/lib/__lib__/LegendCubeFunctionLabels.d.ts +29 -0
  18. package/lib/__lib__/LegendCubeFunctionLabels.d.ts.map +1 -0
  19. package/lib/__lib__/LegendCubeFunctionLabels.js +31 -0
  20. package/lib/__lib__/LegendCubeFunctionLabels.js.map +1 -0
  21. package/lib/__lib__/LegendCubeHelpText.d.ts +5 -1
  22. package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -1
  23. package/lib/__lib__/LegendCubeHelpText.js +16 -2
  24. package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
  25. package/lib/__lib__/LegendCubeLabels.d.ts +130 -9
  26. package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
  27. package/lib/__lib__/LegendCubeLabels.js +169 -17
  28. package/lib/__lib__/LegendCubeLabels.js.map +1 -1
  29. package/lib/__lib__/LegendCubeNavigation.d.ts +23 -0
  30. package/lib/__lib__/LegendCubeNavigation.d.ts.map +1 -0
  31. package/lib/__lib__/LegendCubeNavigation.js +33 -0
  32. package/lib/__lib__/LegendCubeNavigation.js.map +1 -0
  33. package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts +26 -0
  34. package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts.map +1 -0
  35. package/lib/__lib__/LegendCubeProjectSourceLabels.js +26 -0
  36. package/lib/__lib__/LegendCubeProjectSourceLabels.js.map +1 -0
  37. package/lib/__lib__/LegendCubeServiceLabels.d.ts +27 -0
  38. package/lib/__lib__/LegendCubeServiceLabels.d.ts.map +1 -0
  39. package/lib/__lib__/LegendCubeServiceLabels.js +32 -0
  40. package/lib/__lib__/LegendCubeServiceLabels.js.map +1 -0
  41. package/lib/__lib__/LegendCubeTesting.d.ts +10 -1
  42. package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
  43. package/lib/__lib__/LegendCubeTesting.js +9 -0
  44. package/lib/__lib__/LegendCubeTesting.js.map +1 -1
  45. package/lib/__lib__/LegendCubeTour.d.ts +62 -0
  46. package/lib/__lib__/LegendCubeTour.d.ts.map +1 -0
  47. package/lib/__lib__/LegendCubeTour.js +149 -0
  48. package/lib/__lib__/LegendCubeTour.js.map +1 -0
  49. package/lib/__test-utils__/CubeEngineTestSupport.d.ts +1 -1
  50. package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
  51. package/lib/__test-utils__/CubeEngineTestSupport.js +2 -2
  52. package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -1
  53. package/lib/__test-utils__/CubeExampleTestUtils.d.ts +34 -0
  54. package/lib/__test-utils__/CubeExampleTestUtils.d.ts.map +1 -0
  55. package/lib/__test-utils__/CubeExampleTestUtils.js +72 -0
  56. package/lib/__test-utils__/CubeExampleTestUtils.js.map +1 -0
  57. package/lib/__test-utils__/CubeExpressionTestUtils.d.ts +8 -1
  58. package/lib/__test-utils__/CubeExpressionTestUtils.d.ts.map +1 -1
  59. package/lib/__test-utils__/CubeExpressionTestUtils.js +20 -3
  60. package/lib/__test-utils__/CubeExpressionTestUtils.js.map +1 -1
  61. package/lib/__test-utils__/CubeFunctionTestOutline.d.ts +26 -0
  62. package/lib/__test-utils__/CubeFunctionTestOutline.d.ts.map +1 -0
  63. package/lib/__test-utils__/CubeFunctionTestOutline.js +56 -0
  64. package/lib/__test-utils__/CubeFunctionTestOutline.js.map +1 -0
  65. package/lib/__test-utils__/CubeLambdaCorpus.d.ts +36 -0
  66. package/lib/__test-utils__/CubeLambdaCorpus.d.ts.map +1 -0
  67. package/lib/__test-utils__/CubeLambdaCorpus.js +83 -0
  68. package/lib/__test-utils__/CubeLambdaCorpus.js.map +1 -0
  69. package/lib/__test-utils__/CubePageTestUtils.d.ts +6 -0
  70. package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -1
  71. package/lib/__test-utils__/CubePageTestUtils.js +21 -0
  72. package/lib/__test-utils__/CubePageTestUtils.js.map +1 -1
  73. package/lib/__test-utils__/CubeTestApplication.d.ts +9 -0
  74. package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -1
  75. package/lib/__test-utils__/CubeTestApplication.js +16 -0
  76. package/lib/__test-utils__/CubeTestApplication.js.map +1 -1
  77. package/lib/__test-utils__/CubeVariantTestUtils.d.ts +16 -0
  78. package/lib/__test-utils__/CubeVariantTestUtils.d.ts.map +1 -0
  79. package/lib/__test-utils__/CubeVariantTestUtils.js +66 -0
  80. package/lib/__test-utils__/CubeVariantTestUtils.js.map +1 -0
  81. package/lib/__test-utils__/FakeCubeEngine.d.ts +5 -0
  82. package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -1
  83. package/lib/__test-utils__/FakeCubeEngine.js +17 -0
  84. package/lib/__test-utils__/FakeCubeEngine.js.map +1 -1
  85. package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts +7 -1
  86. package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts.map +1 -1
  87. package/lib/__test-utils__/FakeCubeIngestCatalog.js +16 -0
  88. package/lib/__test-utils__/FakeCubeIngestCatalog.js.map +1 -1
  89. package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts +26 -0
  90. package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts.map +1 -0
  91. package/lib/__test-utils__/FakeCubeServiceCatalog.js +40 -0
  92. package/lib/__test-utils__/FakeCubeServiceCatalog.js.map +1 -0
  93. package/lib/components/CubeAddItems.d.ts.map +1 -1
  94. package/lib/components/CubeAddItems.js +11 -7
  95. package/lib/components/CubeAddItems.js.map +1 -1
  96. package/lib/components/CubeDialogTheme.d.ts +25 -0
  97. package/lib/components/CubeDialogTheme.d.ts.map +1 -0
  98. package/lib/components/CubeDialogTheme.js +25 -0
  99. package/lib/components/CubeDialogTheme.js.map +1 -0
  100. package/lib/components/CubeEditor.d.ts +12 -1
  101. package/lib/components/CubeEditor.d.ts.map +1 -1
  102. package/lib/components/CubeEditor.js +22 -14
  103. package/lib/components/CubeEditor.js.map +1 -1
  104. package/lib/components/CubeFileMenu.d.ts +28 -0
  105. package/lib/components/CubeFileMenu.d.ts.map +1 -0
  106. package/lib/components/CubeFileMenu.js +78 -0
  107. package/lib/components/CubeFileMenu.js.map +1 -0
  108. package/lib/components/CubeLambdaImportBanner.d.ts +26 -0
  109. package/lib/components/CubeLambdaImportBanner.d.ts.map +1 -0
  110. package/lib/components/CubeLambdaImportBanner.js +47 -0
  111. package/lib/components/CubeLambdaImportBanner.js.map +1 -0
  112. package/lib/components/CubeNodeIcon.d.ts.map +1 -1
  113. package/lib/components/CubeNodeIcon.js +6 -1
  114. package/lib/components/CubeNodeIcon.js.map +1 -1
  115. package/lib/components/CubeSchemaColumnsTable.d.ts.map +1 -1
  116. package/lib/components/CubeSchemaColumnsTable.js +2 -2
  117. package/lib/components/CubeSchemaColumnsTable.js.map +1 -1
  118. package/lib/components/canvas/CubeCanvas.d.ts.map +1 -1
  119. package/lib/components/canvas/CubeCanvas.js +40 -6
  120. package/lib/components/canvas/CubeCanvas.js.map +1 -1
  121. package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -1
  122. package/lib/components/canvas/CubeCanvasContextMenu.js +2 -1
  123. package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -1
  124. package/lib/components/canvas/CubeCanvasElements.d.ts +18 -1
  125. package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
  126. package/lib/components/canvas/CubeCanvasElements.js +58 -3
  127. package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
  128. package/lib/components/canvas/CubeCanvasLayout.js +1 -1
  129. package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
  130. package/lib/components/canvas/CubeCanvasNode.js +11 -4
  131. package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
  132. package/lib/components/dev-settings/CubeDevSettings.d.ts +35 -0
  133. package/lib/components/dev-settings/CubeDevSettings.d.ts.map +1 -0
  134. package/lib/components/dev-settings/CubeDevSettings.js +54 -0
  135. package/lib/components/dev-settings/CubeDevSettings.js.map +1 -0
  136. package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -1
  137. package/lib/components/editors/CubeColumnChecklist.js +2 -2
  138. package/lib/components/editors/CubeColumnChecklist.js.map +1 -1
  139. package/lib/components/editors/CubeColumnPicker.d.ts.map +1 -1
  140. package/lib/components/editors/CubeColumnPicker.js +6 -4
  141. package/lib/components/editors/CubeColumnPicker.js.map +1 -1
  142. package/lib/components/editors/CubeConcatEditor.js +2 -2
  143. package/lib/components/editors/CubeConcatEditor.js.map +1 -1
  144. package/lib/components/editors/CubeExplodeEditor.d.ts +26 -0
  145. package/lib/components/editors/CubeExplodeEditor.d.ts.map +1 -0
  146. package/lib/components/editors/CubeExplodeEditor.js +61 -0
  147. package/lib/components/editors/CubeExplodeEditor.js.map +1 -0
  148. package/lib/components/editors/CubeExpressionFilterEditor.d.ts +25 -0
  149. package/lib/components/editors/CubeExpressionFilterEditor.d.ts.map +1 -0
  150. package/lib/components/editors/CubeExpressionFilterEditor.js +86 -0
  151. package/lib/components/editors/CubeExpressionFilterEditor.js.map +1 -0
  152. package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -1
  153. package/lib/components/editors/CubeExtendEditor.js +13 -12
  154. package/lib/components/editors/CubeExtendEditor.js.map +1 -1
  155. package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
  156. package/lib/components/editors/CubeFilterEditor.js +13 -2
  157. package/lib/components/editors/CubeFilterEditor.js.map +1 -1
  158. package/lib/components/editors/CubeFunctionSourceEditor.d.ts +25 -0
  159. package/lib/components/editors/CubeFunctionSourceEditor.d.ts.map +1 -0
  160. package/lib/components/editors/CubeFunctionSourceEditor.js +55 -0
  161. package/lib/components/editors/CubeFunctionSourceEditor.js.map +1 -0
  162. package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
  163. package/lib/components/editors/CubeJoinEditor.js +16 -4
  164. package/lib/components/editors/CubeJoinEditor.js.map +1 -1
  165. package/lib/components/editors/CubeJsonFieldsTree.d.ts +46 -0
  166. package/lib/components/editors/CubeJsonFieldsTree.d.ts.map +1 -0
  167. package/lib/components/editors/CubeJsonFieldsTree.js +93 -0
  168. package/lib/components/editors/CubeJsonFieldsTree.js.map +1 -0
  169. package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
  170. package/lib/components/editors/CubeNodeEditorPanel.js +18 -8
  171. package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
  172. package/lib/components/editors/CubeNodeEditorPopper.d.ts +5 -1
  173. package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -1
  174. package/lib/components/editors/CubeNodeEditorPopper.js +10 -2
  175. package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -1
  176. package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
  177. package/lib/components/editors/CubeNodeEditorRegistry.js +11 -1
  178. package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
  179. package/lib/components/editors/CubePivotEditor.d.ts +26 -0
  180. package/lib/components/editors/CubePivotEditor.d.ts.map +1 -0
  181. package/lib/components/editors/CubePivotEditor.js +93 -0
  182. package/lib/components/editors/CubePivotEditor.js.map +1 -0
  183. package/lib/components/editors/CubeRestrictEditor.d.ts.map +1 -1
  184. package/lib/components/editors/CubeRestrictEditor.js +2 -2
  185. package/lib/components/editors/CubeRestrictEditor.js.map +1 -1
  186. package/lib/components/editors/CubeServiceSourceEditor.d.ts +25 -0
  187. package/lib/components/editors/CubeServiceSourceEditor.d.ts.map +1 -0
  188. package/lib/components/editors/CubeServiceSourceEditor.js +41 -0
  189. package/lib/components/editors/CubeServiceSourceEditor.js.map +1 -0
  190. package/lib/components/grid/CubeColumnFormatDialog.d.ts +28 -0
  191. package/lib/components/grid/CubeColumnFormatDialog.d.ts.map +1 -0
  192. package/lib/components/grid/CubeColumnFormatDialog.js +94 -0
  193. package/lib/components/grid/CubeColumnFormatDialog.js.map +1 -0
  194. package/lib/components/grid/CubeDrilldownBar.d.ts +37 -0
  195. package/lib/components/grid/CubeDrilldownBar.d.ts.map +1 -0
  196. package/lib/components/grid/CubeDrilldownBar.js +77 -0
  197. package/lib/components/grid/CubeDrilldownBar.js.map +1 -0
  198. package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
  199. package/lib/components/grid/CubeGridRegion.js +43 -28
  200. package/lib/components/grid/CubeGridRegion.js.map +1 -1
  201. package/lib/components/grid/CubeGridValues.d.ts +36 -4
  202. package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
  203. package/lib/components/grid/CubeGridValues.js +116 -4
  204. package/lib/components/grid/CubeGridValues.js.map +1 -1
  205. package/lib/components/grid/CubeJsonExplorerDialog.d.ts +27 -0
  206. package/lib/components/grid/CubeJsonExplorerDialog.d.ts.map +1 -0
  207. package/lib/components/grid/CubeJsonExplorerDialog.js +102 -0
  208. package/lib/components/grid/CubeJsonExplorerDialog.js.map +1 -0
  209. package/lib/components/grid/CubeJsonViewerDialog.d.ts +27 -0
  210. package/lib/components/grid/CubeJsonViewerDialog.d.ts.map +1 -0
  211. package/lib/components/grid/CubeJsonViewerDialog.js +68 -0
  212. package/lib/components/grid/CubeJsonViewerDialog.js.map +1 -0
  213. package/lib/components/grid/CubeResultGrid.d.ts +81 -6
  214. package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
  215. package/lib/components/grid/CubeResultGrid.js +400 -35
  216. package/lib/components/grid/CubeResultGrid.js.map +1 -1
  217. package/lib/components/grid/CubeRunStatsPanel.d.ts +28 -0
  218. package/lib/components/grid/CubeRunStatsPanel.d.ts.map +1 -0
  219. package/lib/components/grid/CubeRunStatsPanel.js +61 -0
  220. package/lib/components/grid/CubeRunStatsPanel.js.map +1 -0
  221. package/lib/components/grid/CubeServerSideGrid.d.ts +36 -0
  222. package/lib/components/grid/CubeServerSideGrid.d.ts.map +1 -0
  223. package/lib/components/grid/CubeServerSideGrid.js +116 -0
  224. package/lib/components/grid/CubeServerSideGrid.js.map +1 -0
  225. package/lib/components/grid/CubeSqlDialog.d.ts +24 -0
  226. package/lib/components/grid/CubeSqlDialog.d.ts.map +1 -0
  227. package/lib/components/grid/CubeSqlDialog.js +39 -0
  228. package/lib/components/grid/CubeSqlDialog.js.map +1 -0
  229. package/lib/components/grid/CubeSqlFormat.d.ts +20 -0
  230. package/lib/components/grid/CubeSqlFormat.d.ts.map +1 -0
  231. package/lib/components/grid/CubeSqlFormat.js +32 -0
  232. package/lib/components/grid/CubeSqlFormat.js.map +1 -0
  233. package/lib/components/palette/CubePalette.d.ts.map +1 -1
  234. package/lib/components/palette/CubePalette.js +36 -14
  235. package/lib/components/palette/CubePalette.js.map +1 -1
  236. package/lib/components/show-pure/CubeShowPureDialog.d.ts +4 -1
  237. package/lib/components/show-pure/CubeShowPureDialog.d.ts.map +1 -1
  238. package/lib/components/show-pure/CubeShowPureDialog.js +8 -4
  239. package/lib/components/show-pure/CubeShowPureDialog.js.map +1 -1
  240. package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -1
  241. package/lib/components/source-picker/CubeDataProductTab.js +37 -16
  242. package/lib/components/source-picker/CubeDataProductTab.js.map +1 -1
  243. package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -1
  244. package/lib/components/source-picker/CubeDirectConnectionTab.js +6 -4
  245. package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -1
  246. package/lib/components/source-picker/CubeFunctionSteps.d.ts +36 -0
  247. package/lib/components/source-picker/CubeFunctionSteps.d.ts.map +1 -0
  248. package/lib/components/source-picker/CubeFunctionSteps.js +76 -0
  249. package/lib/components/source-picker/CubeFunctionSteps.js.map +1 -0
  250. package/lib/components/source-picker/CubeIngestTab.d.ts +2 -2
  251. package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -1
  252. package/lib/components/source-picker/CubeIngestTab.js +49 -20
  253. package/lib/components/source-picker/CubeIngestTab.js.map +1 -1
  254. package/lib/components/source-picker/CubeInlineModelTab.d.ts +3 -2
  255. package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -1
  256. package/lib/components/source-picker/CubeInlineModelTab.js +23 -13
  257. package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -1
  258. package/lib/components/source-picker/CubePickerListItem.d.ts +47 -0
  259. package/lib/components/source-picker/CubePickerListItem.d.ts.map +1 -0
  260. package/lib/components/source-picker/CubePickerListItem.js +62 -0
  261. package/lib/components/source-picker/CubePickerListItem.js.map +1 -0
  262. package/lib/components/source-picker/CubeProjectTab.d.ts +4 -3
  263. package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -1
  264. package/lib/components/source-picker/CubeProjectTab.js +7 -4
  265. package/lib/components/source-picker/CubeProjectTab.js.map +1 -1
  266. package/lib/components/source-picker/CubeServiceTab.d.ts +27 -0
  267. package/lib/components/source-picker/CubeServiceTab.d.ts.map +1 -0
  268. package/lib/components/source-picker/CubeServiceTab.js +36 -0
  269. package/lib/components/source-picker/CubeServiceTab.js.map +1 -0
  270. package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
  271. package/lib/components/source-picker/CubeSourcePicker.js +16 -3
  272. package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
  273. package/lib/components/source-picker/CubeTablePreview.d.ts +29 -0
  274. package/lib/components/source-picker/CubeTablePreview.d.ts.map +1 -0
  275. package/lib/components/source-picker/CubeTablePreview.js +10 -0
  276. package/lib/components/source-picker/CubeTablePreview.js.map +1 -0
  277. package/lib/components/spec-transfer/CubeImportPureDialog.d.ts +27 -0
  278. package/lib/components/spec-transfer/CubeImportPureDialog.d.ts.map +1 -0
  279. package/lib/components/spec-transfer/CubeImportPureDialog.js +38 -0
  280. package/lib/components/spec-transfer/CubeImportPureDialog.js.map +1 -0
  281. package/lib/components/spec-transfer/CubeSpecTransferDialog.d.ts.map +1 -1
  282. package/lib/components/spec-transfer/CubeSpecTransferDialog.js +9 -3
  283. package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
  284. package/lib/components/tour/CubeTour.d.ts +36 -0
  285. package/lib/components/tour/CubeTour.d.ts.map +1 -0
  286. package/lib/components/tour/CubeTour.js +183 -0
  287. package/lib/components/tour/CubeTour.js.map +1 -0
  288. package/lib/graph-manager/CubeDataProductCatalog.d.ts +10 -0
  289. package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -1
  290. package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -1
  291. package/lib/graph-manager/CubeEngine.d.ts +46 -1
  292. package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
  293. package/lib/graph-manager/CubeEngine.js.map +1 -1
  294. package/lib/graph-manager/CubeEngineClientSettings.d.ts +43 -0
  295. package/lib/graph-manager/CubeEngineClientSettings.d.ts.map +1 -0
  296. package/lib/graph-manager/CubeEngineClientSettings.js +51 -0
  297. package/lib/graph-manager/CubeEngineClientSettings.js.map +1 -0
  298. package/lib/graph-manager/CubeIngest.d.ts +5 -0
  299. package/lib/graph-manager/CubeIngest.d.ts.map +1 -1
  300. package/lib/graph-manager/CubeIngest.js +10 -0
  301. package/lib/graph-manager/CubeIngest.js.map +1 -1
  302. package/lib/graph-manager/CubeIngestCatalog.d.ts +26 -0
  303. package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -1
  304. package/lib/graph-manager/CubeIngestCatalog.js +6 -0
  305. package/lib/graph-manager/CubeIngestCatalog.js.map +1 -1
  306. package/lib/graph-manager/CubeLakehouseRuntime.d.ts +29 -0
  307. package/lib/graph-manager/CubeLakehouseRuntime.d.ts.map +1 -0
  308. package/lib/graph-manager/CubeLakehouseRuntime.js +40 -0
  309. package/lib/graph-manager/CubeLakehouseRuntime.js.map +1 -0
  310. package/lib/graph-manager/CubeProjectCatalog.d.ts +3 -3
  311. package/lib/graph-manager/CubeService.d.ts +20 -0
  312. package/lib/graph-manager/CubeService.d.ts.map +1 -0
  313. package/lib/graph-manager/CubeService.js +22 -0
  314. package/lib/graph-manager/CubeService.js.map +1 -0
  315. package/lib/graph-manager/CubeServiceCatalog.d.ts +31 -0
  316. package/lib/graph-manager/CubeServiceCatalog.d.ts.map +1 -0
  317. package/lib/graph-manager/CubeServiceCatalog.js +17 -0
  318. package/lib/graph-manager/CubeServiceCatalog.js.map +1 -0
  319. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +52 -5
  320. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
  321. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +63 -5
  322. package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
  323. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +9 -6
  324. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -1
  325. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +12 -8
  326. package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -1
  327. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts +30 -0
  328. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts.map +1 -0
  329. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js +229 -0
  330. package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js.map +1 -0
  331. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -1
  332. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +18 -9
  333. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -1
  334. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +4 -9
  335. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -1
  336. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +2 -1
  337. package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -1
  338. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts +34 -0
  339. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts.map +1 -0
  340. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js +332 -0
  341. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js.map +1 -0
  342. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -1
  343. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +49 -10
  344. package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
  345. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts +1 -1
  346. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts.map +1 -1
  347. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js +3 -1
  348. package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js.map +1 -1
  349. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +2 -1
  350. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -1
  351. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +2 -1
  352. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -1
  353. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +18 -0
  354. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
  355. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +74 -6
  356. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
  357. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -1
  358. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +7 -4
  359. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -1
  360. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts +31 -0
  361. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts.map +1 -0
  362. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js +69 -0
  363. package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js.map +1 -0
  364. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -1
  365. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +6 -2
  366. package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -1
  367. package/lib/index.css +2 -2
  368. package/lib/index.css.map +1 -1
  369. package/lib/index.d.ts +13 -3
  370. package/lib/index.d.ts.map +1 -1
  371. package/lib/index.js +11 -1
  372. package/lib/index.js.map +1 -1
  373. package/lib/stores/CubeAddPlacement.d.ts +10 -3
  374. package/lib/stores/CubeAddPlacement.d.ts.map +1 -1
  375. package/lib/stores/CubeAddPlacement.js +16 -5
  376. package/lib/stores/CubeAddPlacement.js.map +1 -1
  377. package/lib/stores/CubeDevSettingsState.d.ts +47 -0
  378. package/lib/stores/CubeDevSettingsState.d.ts.map +1 -0
  379. package/lib/stores/CubeDevSettingsState.js +99 -0
  380. package/lib/stores/CubeDevSettingsState.js.map +1 -0
  381. package/lib/stores/CubeEditorState.d.ts +189 -43
  382. package/lib/stores/CubeEditorState.d.ts.map +1 -1
  383. package/lib/stores/CubeEditorState.js +532 -117
  384. package/lib/stores/CubeEditorState.js.map +1 -1
  385. package/lib/stores/CubeEngineChecks.d.ts +59 -0
  386. package/lib/stores/CubeEngineChecks.d.ts.map +1 -0
  387. package/lib/stores/CubeEngineChecks.js +100 -0
  388. package/lib/stores/CubeEngineChecks.js.map +1 -0
  389. package/lib/stores/CubeExamples.d.ts.map +1 -1
  390. package/lib/stores/CubeExamples.js +136 -2
  391. package/lib/stores/CubeExamples.js.map +1 -1
  392. package/lib/stores/CubeExamplesState.d.ts +1 -1
  393. package/lib/stores/CubeExamplesState.d.ts.map +1 -1
  394. package/lib/stores/CubeExamplesState.js +6 -3
  395. package/lib/stores/CubeExamplesState.js.map +1 -1
  396. package/lib/stores/CubeExecutionState.d.ts.map +1 -1
  397. package/lib/stores/CubeExecutionState.js +24 -33
  398. package/lib/stores/CubeExecutionState.js.map +1 -1
  399. package/lib/stores/CubeExportState.d.ts +41 -0
  400. package/lib/stores/CubeExportState.d.ts.map +1 -0
  401. package/lib/stores/CubeExportState.js +134 -0
  402. package/lib/stores/CubeExportState.js.map +1 -0
  403. package/lib/stores/CubeExpressionFilterCheck.d.ts +51 -0
  404. package/lib/stores/CubeExpressionFilterCheck.d.ts.map +1 -0
  405. package/lib/stores/CubeExpressionFilterCheck.js +134 -0
  406. package/lib/stores/CubeExpressionFilterCheck.js.map +1 -0
  407. package/lib/stores/CubeExtendTyping.d.ts +6 -14
  408. package/lib/stores/CubeExtendTyping.d.ts.map +1 -1
  409. package/lib/stores/CubeExtendTyping.js +6 -33
  410. package/lib/stores/CubeExtendTyping.js.map +1 -1
  411. package/lib/stores/CubeFunctionRecheck.d.ts +30 -0
  412. package/lib/stores/CubeFunctionRecheck.d.ts.map +1 -0
  413. package/lib/stores/CubeFunctionRecheck.js +67 -0
  414. package/lib/stores/CubeFunctionRecheck.js.map +1 -0
  415. package/lib/stores/CubeGridFetcher.d.ts +75 -0
  416. package/lib/stores/CubeGridFetcher.d.ts.map +1 -0
  417. package/lib/stores/CubeGridFetcher.js +197 -0
  418. package/lib/stores/CubeGridFetcher.js.map +1 -0
  419. package/lib/stores/CubeGridQuickActions.d.ts +25 -6
  420. package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
  421. package/lib/stores/CubeGridQuickActions.js +52 -23
  422. package/lib/stores/CubeGridQuickActions.js.map +1 -1
  423. package/lib/stores/CubeGridState.d.ts +136 -0
  424. package/lib/stores/CubeGridState.d.ts.map +1 -0
  425. package/lib/stores/CubeGridState.js +317 -0
  426. package/lib/stores/CubeGridState.js.map +1 -0
  427. package/lib/stores/CubeHost.d.ts +42 -0
  428. package/lib/stores/CubeHost.d.ts.map +1 -1
  429. package/lib/stores/CubeHost.js +4 -0
  430. package/lib/stores/CubeHost.js.map +1 -1
  431. package/lib/stores/CubeLambdaImportState.d.ts +118 -0
  432. package/lib/stores/CubeLambdaImportState.d.ts.map +1 -0
  433. package/lib/stores/CubeLambdaImportState.js +302 -0
  434. package/lib/stores/CubeLambdaImportState.js.map +1 -0
  435. package/lib/stores/CubeLambdaSources.d.ts +45 -0
  436. package/lib/stores/CubeLambdaSources.d.ts.map +1 -0
  437. package/lib/stores/CubeLambdaSources.js +261 -0
  438. package/lib/stores/CubeLambdaSources.js.map +1 -0
  439. package/lib/stores/CubePureText.d.ts +20 -0
  440. package/lib/stores/CubePureText.d.ts.map +1 -0
  441. package/lib/stores/CubePureText.js +24 -0
  442. package/lib/stores/CubePureText.js.map +1 -0
  443. package/lib/stores/CubeQueryRun.d.ts +59 -0
  444. package/lib/stores/CubeQueryRun.d.ts.map +1 -0
  445. package/lib/stores/CubeQueryRun.js +101 -0
  446. package/lib/stores/CubeQueryRun.js.map +1 -0
  447. package/lib/stores/CubeRunStatsState.d.ts +61 -0
  448. package/lib/stores/CubeRunStatsState.d.ts.map +1 -0
  449. package/lib/stores/CubeRunStatsState.js +54 -0
  450. package/lib/stores/CubeRunStatsState.js.map +1 -0
  451. package/lib/stores/CubeRunningStepLambda.d.ts +25 -0
  452. package/lib/stores/CubeRunningStepLambda.d.ts.map +1 -0
  453. package/lib/stores/CubeRunningStepLambda.js +45 -0
  454. package/lib/stores/CubeRunningStepLambda.js.map +1 -0
  455. package/lib/stores/CubeServiceRecheck.d.ts +29 -0
  456. package/lib/stores/CubeServiceRecheck.d.ts.map +1 -0
  457. package/lib/stores/CubeServiceRecheck.js +33 -0
  458. package/lib/stores/CubeServiceRecheck.js.map +1 -0
  459. package/lib/stores/CubeShowPureState.d.ts +14 -1
  460. package/lib/stores/CubeShowPureState.d.ts.map +1 -1
  461. package/lib/stores/CubeShowPureState.js +41 -11
  462. package/lib/stores/CubeShowPureState.js.map +1 -1
  463. package/lib/stores/CubeSourcePickerState.d.ts +20 -4
  464. package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
  465. package/lib/stores/CubeSourcePickerState.js +75 -14
  466. package/lib/stores/CubeSourcePickerState.js.map +1 -1
  467. package/lib/stores/CubeTourState.d.ts +49 -0
  468. package/lib/stores/CubeTourState.d.ts.map +1 -0
  469. package/lib/stores/CubeTourState.js +92 -0
  470. package/lib/stores/CubeTourState.js.map +1 -0
  471. package/lib/stores/LegendCubeHost.d.ts +88 -0
  472. package/lib/stores/LegendCubeHost.d.ts.map +1 -0
  473. package/lib/stores/LegendCubeHost.js +149 -0
  474. package/lib/stores/LegendCubeHost.js.map +1 -0
  475. package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
  476. package/lib/stores/LocalModelCatalog.js +3 -1
  477. package/lib/stores/LocalModelCatalog.js.map +1 -1
  478. package/lib/stores/editors/CubeExplodeDraft.d.ts +87 -0
  479. package/lib/stores/editors/CubeExplodeDraft.d.ts.map +1 -0
  480. package/lib/stores/editors/CubeExplodeDraft.js +221 -0
  481. package/lib/stores/editors/CubeExplodeDraft.js.map +1 -0
  482. package/lib/stores/editors/CubeExpressionFilterDraft.d.ts +94 -0
  483. package/lib/stores/editors/CubeExpressionFilterDraft.d.ts.map +1 -0
  484. package/lib/stores/editors/CubeExpressionFilterDraft.js +258 -0
  485. package/lib/stores/editors/CubeExpressionFilterDraft.js.map +1 -0
  486. package/lib/stores/editors/CubeExtendDraft.d.ts +9 -0
  487. package/lib/stores/editors/CubeExtendDraft.d.ts.map +1 -1
  488. package/lib/stores/editors/CubeExtendDraft.js +26 -0
  489. package/lib/stores/editors/CubeExtendDraft.js.map +1 -1
  490. package/lib/stores/editors/CubeFunctionDraft.d.ts +34 -0
  491. package/lib/stores/editors/CubeFunctionDraft.d.ts.map +1 -0
  492. package/lib/stores/editors/CubeFunctionDraft.js +69 -0
  493. package/lib/stores/editors/CubeFunctionDraft.js.map +1 -0
  494. package/lib/stores/editors/CubeNodeDraftRegistry.d.ts +4 -2
  495. package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
  496. package/lib/stores/editors/CubeNodeDraftRegistry.js +25 -3
  497. package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
  498. package/lib/stores/editors/CubePivotDraft.d.ts +93 -0
  499. package/lib/stores/editors/CubePivotDraft.d.ts.map +1 -0
  500. package/lib/stores/editors/CubePivotDraft.js +267 -0
  501. package/lib/stores/editors/CubePivotDraft.js.map +1 -0
  502. package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts +27 -0
  503. package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts.map +1 -0
  504. package/lib/stores/fixtures/CubeSalesDuckDbModel.js +52 -0
  505. package/lib/stores/fixtures/CubeSalesDuckDbModel.js.map +1 -0
  506. package/lib/stores/fixtures/CubeTradesModel.d.ts +4 -0
  507. package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -1
  508. package/lib/stores/fixtures/CubeTradesModel.js +31 -1
  509. package/lib/stores/fixtures/CubeTradesModel.js.map +1 -1
  510. package/lib/stores/source-picker/CubeDataProductTabState.d.ts +34 -5
  511. package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -1
  512. package/lib/stores/source-picker/CubeDataProductTabState.js +111 -26
  513. package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -1
  514. package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +25 -2
  515. package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -1
  516. package/lib/stores/source-picker/CubeDirectConnectionTabState.js +183 -31
  517. package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -1
  518. package/lib/stores/source-picker/CubeIngestTabState.d.ts +62 -15
  519. package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -1
  520. package/lib/stores/source-picker/CubeIngestTabState.js +212 -60
  521. package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -1
  522. package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +100 -4
  523. package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -1
  524. package/lib/stores/source-picker/CubeInlineModelTabState.js +415 -28
  525. package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -1
  526. package/lib/stores/source-picker/CubeProjectTabState.d.ts +18 -3
  527. package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -1
  528. package/lib/stores/source-picker/CubeProjectTabState.js +26 -1
  529. package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -1
  530. package/lib/stores/source-picker/CubeServiceTabState.d.ts +74 -0
  531. package/lib/stores/source-picker/CubeServiceTabState.d.ts.map +1 -0
  532. package/lib/stores/source-picker/CubeServiceTabState.js +216 -0
  533. package/lib/stores/source-picker/CubeServiceTabState.js.map +1 -0
  534. package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +15 -3
  535. package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -1
  536. package/lib/stores/source-picker/CubeSourcePickerTab.js +21 -0
  537. package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -1
  538. package/lib/stores/variant/CubeJson.d.ts +48 -0
  539. package/lib/stores/variant/CubeJson.d.ts.map +1 -0
  540. package/lib/stores/variant/CubeJson.js +207 -0
  541. package/lib/stores/variant/CubeJson.js.map +1 -0
  542. package/lib/stores/variant/CubeJsonExplorerState.d.ts +88 -0
  543. package/lib/stores/variant/CubeJsonExplorerState.d.ts.map +1 -0
  544. package/lib/stores/variant/CubeJsonExplorerState.js +297 -0
  545. package/lib/stores/variant/CubeJsonExplorerState.js.map +1 -0
  546. package/lib/stores/variant/CubeJsonFieldsState.d.ts +83 -0
  547. package/lib/stores/variant/CubeJsonFieldsState.d.ts.map +1 -0
  548. package/lib/stores/variant/CubeJsonFieldsState.js +207 -0
  549. package/lib/stores/variant/CubeJsonFieldsState.js.map +1 -0
  550. package/lib/stores/variant/CubeJsonOffers.d.ts +76 -0
  551. package/lib/stores/variant/CubeJsonOffers.d.ts.map +1 -0
  552. package/lib/stores/variant/CubeJsonOffers.js +250 -0
  553. package/lib/stores/variant/CubeJsonOffers.js.map +1 -0
  554. package/lib/stores/variant/CubeJsonParse.d.ts +28 -0
  555. package/lib/stores/variant/CubeJsonParse.d.ts.map +1 -0
  556. package/lib/stores/variant/CubeJsonParse.js +53 -0
  557. package/lib/stores/variant/CubeJsonParse.js.map +1 -0
  558. package/lib/stores/variant/CubeJsonSampling.d.ts +41 -0
  559. package/lib/stores/variant/CubeJsonSampling.d.ts.map +1 -0
  560. package/lib/stores/variant/CubeJsonSampling.js +59 -0
  561. package/lib/stores/variant/CubeJsonSampling.js.map +1 -0
  562. package/lib/stores/variant/CubeJsonShape.d.ts +87 -0
  563. package/lib/stores/variant/CubeJsonShape.d.ts.map +1 -0
  564. package/lib/stores/variant/CubeJsonShape.js +209 -0
  565. package/lib/stores/variant/CubeJsonShape.js.map +1 -0
  566. package/lib/stores/variant/CubeJsonViewerState.d.ts +33 -0
  567. package/lib/stores/variant/CubeJsonViewerState.d.ts.map +1 -0
  568. package/lib/stores/variant/CubeJsonViewerState.js +53 -0
  569. package/lib/stores/variant/CubeJsonViewerState.js.map +1 -0
  570. package/package.json +10 -9
  571. package/src/__lib__/LegendCubeCommand.ts +7 -0
  572. package/src/__lib__/LegendCubeFunctionLabels.ts +41 -0
  573. package/src/__lib__/LegendCubeHelpText.ts +27 -1
  574. package/src/__lib__/LegendCubeLabels.ts +225 -16
  575. package/src/__lib__/LegendCubeNavigation.ts +48 -0
  576. package/src/__lib__/LegendCubeProjectSourceLabels.ts +26 -0
  577. package/src/__lib__/LegendCubeServiceLabels.ts +41 -0
  578. package/src/__lib__/LegendCubeTesting.ts +9 -0
  579. package/src/__lib__/LegendCubeTour.ts +173 -0
  580. package/src/__test-utils__/CubeEngineTestSupport.ts +2 -1
  581. package/src/__test-utils__/CubeExampleTestUtils.ts +119 -0
  582. package/src/__test-utils__/CubeExpressionTestUtils.ts +29 -2
  583. package/src/__test-utils__/CubeFunctionTestOutline.ts +78 -0
  584. package/src/__test-utils__/CubeLambdaCorpus.ts +137 -0
  585. package/src/__test-utils__/CubePageTestUtils.tsx +34 -0
  586. package/src/__test-utils__/CubeTestApplication.ts +25 -0
  587. package/src/__test-utils__/CubeVariantTestUtils.ts +103 -0
  588. package/src/__test-utils__/FakeCubeEngine.ts +27 -0
  589. package/src/__test-utils__/FakeCubeIngestCatalog.ts +18 -0
  590. package/src/__test-utils__/FakeCubeServiceCatalog.ts +57 -0
  591. package/src/components/CubeAddItems.tsx +15 -6
  592. package/src/components/CubeDialogTheme.ts +25 -0
  593. package/src/components/CubeEditor.tsx +170 -129
  594. package/src/components/CubeFileMenu.tsx +129 -0
  595. package/src/components/CubeLambdaImportBanner.tsx +97 -0
  596. package/src/components/CubeNodeIcon.tsx +9 -0
  597. package/src/components/CubeSchemaColumnsTable.tsx +7 -2
  598. package/src/components/canvas/CubeCanvas.tsx +65 -10
  599. package/src/components/canvas/CubeCanvasContextMenu.tsx +33 -2
  600. package/src/components/canvas/CubeCanvasElements.ts +76 -3
  601. package/src/components/canvas/CubeCanvasLayout.ts +1 -1
  602. package/src/components/canvas/CubeCanvasNode.tsx +37 -3
  603. package/src/components/dev-settings/CubeDevSettings.tsx +169 -0
  604. package/src/components/editors/CubeColumnChecklist.tsx +8 -2
  605. package/src/components/editors/CubeColumnPicker.tsx +9 -3
  606. package/src/components/editors/CubeConcatEditor.tsx +2 -2
  607. package/src/components/editors/CubeExplodeEditor.tsx +207 -0
  608. package/src/components/editors/CubeExpressionFilterEditor.tsx +210 -0
  609. package/src/components/editors/CubeExtendEditor.tsx +34 -21
  610. package/src/components/editors/CubeFilterEditor.tsx +13 -1
  611. package/src/components/editors/CubeFunctionSourceEditor.tsx +140 -0
  612. package/src/components/editors/CubeJoinEditor.tsx +23 -4
  613. package/src/components/editors/CubeJsonFieldsTree.tsx +316 -0
  614. package/src/components/editors/CubeNodeEditorPanel.tsx +22 -10
  615. package/src/components/editors/CubeNodeEditorPopper.tsx +9 -1
  616. package/src/components/editors/CubeNodeEditorRegistry.ts +15 -0
  617. package/src/components/editors/CubePivotEditor.tsx +277 -0
  618. package/src/components/editors/CubeRestrictEditor.tsx +8 -2
  619. package/src/components/editors/CubeServiceSourceEditor.tsx +77 -0
  620. package/src/components/grid/CubeColumnFormatDialog.tsx +289 -0
  621. package/src/components/grid/CubeDrilldownBar.tsx +219 -0
  622. package/src/components/grid/CubeGridRegion.tsx +190 -56
  623. package/src/components/grid/CubeGridValues.ts +154 -4
  624. package/src/components/grid/CubeJsonExplorerDialog.tsx +304 -0
  625. package/src/components/grid/CubeJsonViewerDialog.tsx +190 -0
  626. package/src/components/grid/CubeResultGrid.tsx +586 -42
  627. package/src/components/grid/CubeRunStatsPanel.tsx +156 -0
  628. package/src/components/grid/CubeServerSideGrid.tsx +213 -0
  629. package/src/components/grid/CubeSqlDialog.tsx +90 -0
  630. package/src/components/grid/CubeSqlFormat.ts +37 -0
  631. package/src/components/palette/CubePalette.tsx +54 -12
  632. package/src/components/show-pure/CubeShowPureDialog.tsx +19 -5
  633. package/src/components/source-picker/CubeDataProductTab.tsx +169 -75
  634. package/src/components/source-picker/CubeDirectConnectionTab.tsx +42 -30
  635. package/src/components/source-picker/CubeFunctionSteps.tsx +244 -0
  636. package/src/components/source-picker/CubeIngestTab.tsx +195 -83
  637. package/src/components/source-picker/CubeInlineModelTab.tsx +110 -81
  638. package/src/components/source-picker/CubePickerListItem.tsx +118 -0
  639. package/src/components/source-picker/CubeProjectTab.tsx +6 -3
  640. package/src/components/source-picker/CubeServiceTab.tsx +151 -0
  641. package/src/components/source-picker/CubeSourcePicker.tsx +54 -18
  642. package/src/components/source-picker/CubeTablePreview.tsx +49 -0
  643. package/src/components/spec-transfer/CubeImportPureDialog.tsx +122 -0
  644. package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +21 -8
  645. package/src/components/tour/CubeTour.tsx +317 -0
  646. package/src/graph-manager/CubeDataProductCatalog.ts +11 -0
  647. package/src/graph-manager/CubeEngine.ts +51 -1
  648. package/src/graph-manager/CubeEngineClientSettings.ts +64 -0
  649. package/src/graph-manager/CubeIngest.ts +15 -0
  650. package/src/graph-manager/CubeIngestCatalog.ts +33 -0
  651. package/src/graph-manager/CubeLakehouseRuntime.ts +43 -0
  652. package/src/graph-manager/CubeProjectCatalog.ts +3 -3
  653. package/src/graph-manager/CubeService.ts +29 -0
  654. package/src/graph-manager/CubeServiceCatalog.ts +35 -0
  655. package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +115 -5
  656. package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +13 -7
  657. package/src/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.ts +312 -0
  658. package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +35 -9
  659. package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +6 -15
  660. package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.ts +471 -0
  661. package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +70 -15
  662. package/src/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.ts +3 -1
  663. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +7 -1
  664. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +122 -7
  665. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +9 -4
  666. package/src/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.ts +92 -0
  667. package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +6 -1
  668. package/src/index.ts +39 -2
  669. package/src/stores/CubeAddPlacement.ts +25 -5
  670. package/src/stores/CubeDevSettingsState.ts +117 -0
  671. package/src/stores/CubeEditorState.ts +722 -201
  672. package/src/stores/CubeEngineChecks.ts +240 -0
  673. package/src/stores/CubeExamples.ts +188 -1
  674. package/src/stores/CubeExamplesState.ts +13 -3
  675. package/src/stores/CubeExecutionState.ts +26 -57
  676. package/src/stores/CubeExportState.ts +196 -0
  677. package/src/stores/CubeExpressionFilterCheck.ts +218 -0
  678. package/src/stores/CubeExtendTyping.ts +6 -46
  679. package/src/stores/CubeFunctionRecheck.ts +97 -0
  680. package/src/stores/CubeGridFetcher.ts +302 -0
  681. package/src/stores/CubeGridQuickActions.ts +56 -23
  682. package/src/stores/CubeGridState.ts +450 -0
  683. package/src/stores/CubeHost.ts +48 -0
  684. package/src/stores/CubeLambdaImportState.ts +434 -0
  685. package/src/stores/CubeLambdaSources.ts +390 -0
  686. package/src/stores/CubePureText.ts +28 -0
  687. package/src/stores/CubeQueryRun.ts +169 -0
  688. package/src/stores/CubeRunStatsState.ts +91 -0
  689. package/src/stores/CubeRunningStepLambda.ts +62 -0
  690. package/src/stores/CubeServiceRecheck.ts +53 -0
  691. package/src/stores/CubeShowPureState.ts +51 -12
  692. package/src/stores/CubeSourcePickerState.ts +89 -13
  693. package/src/stores/CubeTourState.ts +116 -0
  694. package/src/stores/LegendCubeHost.ts +243 -0
  695. package/src/stores/LocalModelCatalog.ts +6 -1
  696. package/src/stores/editors/CubeExplodeDraft.ts +272 -0
  697. package/src/stores/editors/CubeExpressionFilterDraft.ts +389 -0
  698. package/src/stores/editors/CubeExtendDraft.ts +29 -0
  699. package/src/stores/editors/CubeFunctionDraft.ts +92 -0
  700. package/src/stores/editors/CubeNodeDraftRegistry.ts +34 -2
  701. package/src/stores/editors/CubePivotDraft.ts +355 -0
  702. package/src/stores/fixtures/CubeSalesDuckDbModel.ts +60 -0
  703. package/src/stores/fixtures/CubeTradesModel.ts +36 -1
  704. package/src/stores/source-picker/CubeDataProductTabState.ts +162 -35
  705. package/src/stores/source-picker/CubeDirectConnectionTabState.ts +246 -47
  706. package/src/stores/source-picker/CubeIngestTabState.ts +331 -106
  707. package/src/stores/source-picker/CubeInlineModelTabState.ts +514 -34
  708. package/src/stores/source-picker/CubeProjectTabState.ts +35 -3
  709. package/src/stores/source-picker/CubeServiceTabState.ts +288 -0
  710. package/src/stores/source-picker/CubeSourcePickerTab.ts +31 -2
  711. package/src/stores/variant/CubeJson.ts +229 -0
  712. package/src/stores/variant/CubeJsonExplorerState.ts +378 -0
  713. package/src/stores/variant/CubeJsonFieldsState.ts +252 -0
  714. package/src/stores/variant/CubeJsonOffers.ts +359 -0
  715. package/src/stores/variant/CubeJsonParse.ts +75 -0
  716. package/src/stores/variant/CubeJsonSampling.ts +90 -0
  717. package/src/stores/variant/CubeJsonShape.ts +279 -0
  718. package/src/stores/variant/CubeJsonViewerState.ts +59 -0
  719. package/tsconfig.json +72 -1
package/README.md CHANGED
@@ -9,9 +9,13 @@ stores, the engine port with its `v1/` adapter, and the bundled model catalog. L
9
9
 
10
10
  **Status:** work in progress, version 0.0.x. This version has relational tables (from a model or a direct connection to H2
11
11
  or DuckDB), the access points of deployed data products and the data sets of deployed ingest definitions (both beta),
12
- Join, Sort, Group, Filter, Restrict, Rename, Distinct, Drop, Limit, Slice, Concat, Compare Column Values (Difference),
13
- window functions (Apply Window Functions) and computed columns (Extend Columns, whose expressions the engine checks), with one model, one runtime and one database, data product project or producer deployment per query. A cube is kept only through Export and Import of its spec, marked "(dev)", until
14
- the Cube store exists. A pasted model is kept in the cube. Nothing links to the page yet, there is no redo, and Cube sends no telemetry.
12
+ Join, Sort, Group, Pivot (on the databases that run it), Filter, Restrict, Rename, Distinct, Drop, Limit, Slice, Concat, Compare Column Values (Difference),
13
+ window functions (Apply Window Functions), computed columns (Extend Columns, whose expressions the engine checks) and
14
+ rows kept by a Pure condition (Filter by Expression, which the engine checks too), with one model, one runtime and one database, data product project or producer deployment per query. A cube is kept only through Export and Import of its spec, marked "(dev)", until
15
+ the Cube store exists. A pasted model is kept in the cube. The results grid works server-side by default: a header's
16
+ sort and each drill-down level run on the engine, from the run on screen; local mode groups, pivots and filters the
17
+ run's rows in the browser. The grid exports the whole query as CSV through the engine and the rows shown as Excel, lists
18
+ the latest runs with their SQL, and formats number columns (a number, an ISO currency or a percent). Nothing links to the page yet, there is no redo, and Cube sends no telemetry.
15
19
 
16
20
  ## Layout
17
21
 
@@ -93,6 +97,8 @@ example is built in code, so a new one needs no saved spec; add it to `CUBE_EXAM
93
97
 
94
98
  - [Hosting the page](./docs/hosting.md): what a host gives the page, the shortcuts, the stylesheet, and the dev loop.
95
99
  - [Testing](./docs/testing.md): the test groups, the fake engine, and the tests against a real engine.
100
+ - [Demo](./docs/demo/README.md): a walkthrough on the sample data, its [fast notes](./docs/demo/DEMO-FAST-NOTES.md), and
101
+ specs to import at each step.
96
102
  - [Adding an operation](./docs/adding-an-operation.md): the builder half of a new transform. The core half is in
97
103
  [`@finos/legend-cube`](../legend-cube/docs/adding-an-operation.md).
98
104
  - [The plan](../../docs/wip/legend-cube/PLAN.md) and [the known issues](../../docs/wip/legend-cube/ISSUES.md).
@@ -9,8 +9,14 @@ the icon name the node's definition gives. Join and Filter are the examples to f
9
9
  (`CubeGroupEditor`, `CubeGroupDraft`), Concat for a two-input editor with fixes and one setting
10
10
  (`CubeConcatEditor`, `CubeConcatDraft`), Partition for an editor made of the shared rows
11
11
  (`CubePartitionEditor`, `CubePartitionDraft`), Difference for a two-input editor sharing Join's key rows
12
- (`CubeDifferenceEditor`, `CubeDifferenceDraft`), and Extend for an editor that asks the engine before Apply
13
- (`CubeExtendEditor`, `CubeExtendDraft`).
12
+ (`CubeDifferenceEditor`, `CubeDifferenceDraft`), Extend for an editor that asks the engine before Apply
13
+ (`CubeExtendEditor`, `CubeExtendDraft`), Filter by Expression for one condition the engine checks
14
+ (`CubeExpressionFilterEditor`, `CubeExpressionFilterDraft`), Pivot for an editor that loads values from the engine
15
+ through `runCubeQuery` (`CubePivotEditor`, `CubePivotDraft`), and Explode Array for one that reads a sample of a column
16
+ after the node's input, as Explore JSON does (`readCubeJsonSample`), greying its button with the database's reason
17
+ (`CubeExplodeEditor`, `CubeExplodeDraft`; PLAN §11.20). A node type a database can't run is greyed, with the
18
+ reason, in the palette and the Add menus (`getCubeAddDatabaseProblem` in `CubeAddPlacement.ts`): nothing to add for a
19
+ new type but the core's rule.
14
20
 
15
21
  ## 1. A draft
16
22
 
@@ -98,28 +104,34 @@ text (§17.9) where it has one.
98
104
 
99
105
  Map the icon name of the node's definition to a legend-art icon in `NODE_ICONS` (`src/components/CubeNodeIcon.tsx`).
100
106
 
101
- ## A node the engine types
107
+ ## A node the engine types or checks
102
108
 
103
- Extend's types come from the engine (the core guide). `CubeEditorState` types every Extend that waits on `ERR_TYPING`
104
- through a reaction (`extendsToType`, `retypeExtends`), in one `typeLambdas` call, outside the undo history: the
109
+ Extend's types come from the engine (the core guide), and so does the word that a Filter by Expression's condition is
110
+ one Boolean of a row (PLAN §11.11). `CubeEditorState` checks every such node that waits on `ERR_TYPING` or
111
+ `ERR_CHECKING` through a reaction (`nodesToCheck`, `checkExpressions`), in one `typeLambdas` call, outside the undo
112
+ history, through one path for both kinds (`src/stores/CubeEngineChecks.ts`): each kind gives a request, its lambdas
113
+ and how to read the engine's answers into the node to store. The
105
114
  answer replaces the very nodes sent, in the cube shown and in the undo snapshots that give the engine the same input
106
115
  (`replaceOutsideHistory` takes a predicate per snapshot), and an answer for a node changed meanwhile is dropped. Each
107
116
  node is typed as a chain after its input's relation, one chain per first k columns (`src/stores/CubeExtendTyping.ts`),
108
- so a failure names its column.
117
+ so a failure names its column. A condition is checked as its input's relation filtered with it, and typed alone as an
118
+ extend column under a name no input column has, which names its type when it isn't one Boolean
119
+ (`src/stores/CubeExpressionFilterCheck.ts`).
109
120
 
110
121
  A chain's types depend on what the engine sees of the input, which Cube's schema doesn't fully show (an Extend's
111
122
  columns are nullable to Cube, `[1]` to the engine after `toOne()`). So each typing records `upstream`, a digest of the
112
123
  input's emitted relation and the model (`getCubeExtendUpstream`), and the editor adds its own query rule to
113
- `analysis` (`createStaleCubeExtendTypingRule`): an Extend whose digest differs waits on `ERR_TYPING` and is typed
114
- again. Execute reads that validity as well as the emitter's `canEmit`, since the emitter doesn't know the rule. The
124
+ `analysis` (`createStaleCubeEngineCheckRule`): a node whose digest differs waits on `ERR_TYPING` or `ERR_CHECKING`
125
+ and is checked again. Execute reads that validity as well as the emitter's `canEmit`, since the emitter doesn't know the rule. The
115
126
  digest covers the whole relation, filter values included, so any edit above an Extend has it typed again. A typing
116
127
  without a digest, as one loaded, is used as it is; on import every Extend is typed once more, as sources are checked
117
128
  again, which records one. When the engine can't be reached, a typing still current for its input is kept, with a
118
- warning. Every way out of `retypeExtends` leaves the node not stale, or the reaction would loop.
129
+ warning. Every way out of `checkExpressions` leaves the node not stale, or the reaction would loop.
119
130
 
120
- The canvas shows a waiting node as resolving (`isTypingNode`), the header says so, and the panel leaves `ERR_TYPING`
121
- out of its problems. A new node type the engine types needs the same: today the reaction, the rule and the typing
122
- are Extend's.
131
+ The canvas shows a waiting node as resolving (`isTypingNode`), the header says so ("checking expressions"), and the
132
+ panel leaves the waiting marker out of its problems. A new node type the engine types or checks joins
133
+ `CubeEngineCheckedNode` and gives `buildCubeEngineCheckRequest` its request, so the reaction, the stale rule, the undo
134
+ snapshots, the kept check offline and the import serve it too; its draft joins F10 in `CubeEditorState`.
123
135
 
124
136
  ## Warnings
125
137
 
@@ -0,0 +1,67 @@
1
+ # Demo fast notes
2
+
3
+ ## Live build (Trades)
4
+
5
+ 1. **Examples → Trades → Start a new cube**: tick **TRADES**, **DESKS** → **Add 2**
6
+ 2. **Drop Join Another Input** (lands after TRADES = Left); drag **DESKS → Right**
7
+ - Join columns: **DESK_ID** = **ID** → Apply
8
+ 3. **Drop Group by Column**
9
+ - Group by: **DESK**, **REGION**
10
+ - Agg 1: **NOTIONAL_USD** · Sum · `TOTAL_NOTIONAL_USD`
11
+ - Agg 2: Count Rows · `TRADE_COUNT`
12
+ - Apply · **F9** → 6 rows
13
+ 4. **Drop Apply Window Functions**
14
+ - Partition: **REGION**
15
+ - Sort: **TOTAL_NOTIONAL_USD** · Descending
16
+ - Function: Rank · `RANK_IN_REGION`
17
+ - Apply · **F9** → Commodities 1, Rates 2, Equities Cash 3 (Americas)
18
+ 5. **Drop Extend Columns**
19
+ - Name: `NOTIONAL_MM`
20
+ - Expression: `x | $x.TOTAL_NOTIONAL_USD / 1000000` → Validate
21
+ - Apply · **F9** → Commodities 31.10
22
+ 6. **Drop Filter by Expression**
23
+ - `x | $x.NOTIONAL_MM > 25` → Validate
24
+ - Apply · **F9** → 4 rows
25
+ 7. **Show SQL** → Close · **Export** (fold the JSON)
26
+
27
+ Duplicate-column error on a Join → open it → **Rename them**.
28
+
29
+ **End spec:** [specs/trades-desks-5-final.cube.json](specs/trades-desks-5-final.cube.json) (Import → F9 → 4 rows).
30
+ Steps in between: `specs/trades-desks-1-joined` … `-4-extended`.
31
+
32
+ ## Grid
33
+
34
+ 1. **Examples → Notional by desk and asset class**; right-click `join102` → **Select** → Execute (400 rows)
35
+ 2. Click **NOTIONAL_USD** header ×2
36
+ 3. Right-click REGION cell → **Drilldown by "REGION"**; DESK cell → **Drilldown by "DESK"**
37
+ 4. **Group rows…**: ids → Nothing, PRICE → Average
38
+ 5. Expand Americas → Commodities
39
+ 6. NOTIONAL_USD cell → **Format Column…**: Currency, 0 places
40
+ 7. **Runs** · Export ▸ **CSV (whole query)** · **Local**
41
+
42
+ ## Pivot (DuckDB)
43
+
44
+ 1. **Connect to a source → Direct Connection**: DuckDB, paste the setup SQL below
45
+ - Test connection → schema `demo` → **sales** → Add → **F9** (10 rows)
46
+ 2. **Drop Pivot by Column**
47
+ - Pivot column: **year** → Load values → All
48
+ - Rows: **country**
49
+ - Aggregation: Sum · **amount**
50
+ - Apply · **F9** → 4 rows (France 120 · 80 · 180)
51
+
52
+ Setup SQL:
53
+
54
+ ```sql
55
+ drop schema if exists demo cascade;
56
+ create schema demo;
57
+ create table demo.sales (id INTEGER PRIMARY KEY, country VARCHAR(10), product VARCHAR(10), year INTEGER, amount INTEGER, price DOUBLE);
58
+ insert into demo.sales values (1, 'France', 'Tea', 2022, 120, 2.5), (2, 'France', 'Coffee', 2023, 80, 3.1), (3, 'France', 'Tea', 2024, 150, 2.7), (4, 'Germany', 'Tea', 2022, 90, 2.4), (5, 'Germany', 'Coffee', 2022, 60, 3.0), (6, 'Germany', 'Coffee', 2024, 110, 3.3), (7, 'Japan', 'Tea', 2023, 200, 2.9), (8, 'Japan', 'Tea', 2024, 40, 2.9), (9, 'France', 'Coffee', 2024, 30, 3.2), (10, 'Spain', 'Coffee', 2022, 70, 3.0);
59
+ ```
60
+
61
+ Fallback: [specs/duckdb-sales-pivot.cube.json](specs/duckdb-sales-pivot.cube.json).
62
+
63
+ ## Function
64
+
65
+ 1. **Function** (palette) → Dataset Trades → **tradesAbove** · `1000000` → Add → **F9** → 44 rows
66
+
67
+ **New** (header) clears the cube; Undo brings it back.
@@ -0,0 +1,102 @@
1
+ # Legend Cube demo kit
2
+
3
+ A walkthrough of Legend Cube on its sample data, and the specs to fall back on. Every number below is what the
4
+ engine returned when these files were made (2026-10-13); the sample data is fixed, so they match on the day. The
5
+ short version is [DEMO-FAST-NOTES.md](./DEMO-FAST-NOTES.md).
6
+
7
+ | File | What it is |
8
+ | ----------------------------------------- | ---------------------------------------------------------------------------- |
9
+ | `specs/trades-desks-1-joined.cube.json` | Act 2 after the Join: TRADES and DESKS joined on `DESK_ID` = `ID` (400 rows) |
10
+ | `specs/trades-desks-2-grouped.cube.json` | … then the Group by DESK and REGION (6 rows) |
11
+ | `specs/trades-desks-3-ranked.cube.json` | … then the Rank within region (6 rows) |
12
+ | `specs/trades-desks-4-extended.cube.json` | … then the calculated column `NOTIONAL_MM` (6 rows) |
13
+ | `specs/trades-desks-5-final.cube.json` | … then Filter by Expression `NOTIONAL_MM > 25`: the finished cube (4 rows) |
14
+ | `specs/duckdb-sales-pivot.cube.json` | Act 4's DuckDB cube with the Pivot, its setup SQL inside (4 rows) |
15
+
16
+ **Fallback:** if a live step goes wrong, **Import** the spec of the step before or after it and press **F9**. An
17
+ imported cube opens without running.
18
+
19
+ ## Before the demo
20
+
21
+ - A local engine, and the Query dev server (`yarn dev:query`) with Cube enabled (see [hosting](../hosting.md)).
22
+ - Open each example once to warm the engine up.
23
+ - Browser at about 1440×900, 100% zoom, a fresh `/query/cube` page.
24
+
25
+ ## 1. An example (about 1 min)
26
+
27
+ 1. **Examples → Top customers by orders**: it opens and runs, 10 rows, **Save-a-lot Markets** first with 31 orders.
28
+ 2. Click the **Group** step: its editor opens under it. **Escape** closes it.
29
+
30
+ ## 2. A live build on Trades (about 3 min)
31
+
32
+ The question: which desk trades most, and how does each rank in its region?
33
+
34
+ 1. **Examples → Trades → Start a new cube**. Tick **TRADES** and **DESKS** (new: several tables at once), then
35
+ **Add 2**. TRADES, ticked first, is the step that runs.
36
+ - The source dialog's **← Examples** goes back to the examples.
37
+ 2. Drag **Join Another Input** onto the canvas: it lands after TRADES (Left). Drag DESKS' dot to the Join's lower
38
+ input (Right). The Join is red; its tooltip says _"Left join columns cannot be empty."_ Open it, **Add join
39
+ columns**: **DESK_ID** = **ID**, **Apply**. _(Fallback: `trades-desks-1-joined`.)_
40
+ 3. **Add Items ▾ → Group by Column**: tick **DESK** and **REGION**; aggregation 1 **NOTIONAL_USD**, **Sum**, named
41
+ **TOTAL_NOTIONAL_USD**; **Add aggregation**: **Count Rows** named **TRADE_COUNT**. **Apply**, **F9**: 6 desks.
42
+ _(`trades-desks-2-grouped`.)_
43
+ 4. **Add Items ▾ → Apply Window Functions**: partition by **REGION**; **Add sort column** **TOTAL_NOTIONAL_USD**
44
+ **Descending**; function **Rank** named **RANK_IN_REGION**. **Apply**, **F9**: Americas is Commodities 1, Rates 2,
45
+ Equities Cash 3; Europe is Equity Derivatives 1, Credit 2; Asia is FX 1. _(`trades-desks-3-ranked`.)_
46
+ 5. **Add Items ▾ → Extend Columns**: name **NOTIONAL_MM**, expression `x | $x.TOTAL_NOTIONAL_USD / 1000000`,
47
+ **Validate** (_"Float, optional"_), **Apply**, **F9**: Commodities 31,102,024.71 → **31.10**.
48
+ _(`trades-desks-4-extended`.)_
49
+ 6. **Add Items ▾ → Filter by Expression**: `x | $x.NOTIONAL_MM > 25`, **Validate**, **Apply**, **F9**: **4 desks**
50
+ (Commodities, Equity Derivatives, FX, Rates), their ranks unchanged. _(`trades-desks-5-final`.)_
51
+ 7. **Show SQL**: the formatted SQL in a dialog: the `rank() over (partition by …)` inside, the `> 25` filter outside.
52
+ **Copy SQL**, **Close**.
53
+ 8. **Export**: the spec as JSON, each object folding from the gutter.
54
+
55
+ If two inputs share a column name that isn't a join key, the Join says _"Duplicate column names between inputs are not
56
+ supported…"_: open it and click **Rename them**.
57
+
58
+ ## 3. The results grid (about 2 min)
59
+
60
+ 1. **Examples → Notional by desk and asset class**. Right-click the join step (`join102`) → **Select**, then
61
+ **Execute**: 400 trades. **Hide graph** for room.
62
+ 2. Click the **NOTIONAL_USD** header twice: sorted descending, on the engine (Runs goes up by 2).
63
+ 3. Right-click a REGION cell → **Drilldown by "REGION"**: Americas (189), Asia (68), Europe (143). Right-click a DESK
64
+ cell → **Drilldown by "DESK"**.
65
+ 4. **Group rows…**: set the id columns to **Nothing** and **PRICE** to **Average**; **Close**.
66
+ 5. Expand **Americas**, then **Commodities** (65): each level is its own query.
67
+ 6. Right-click a NOTIONAL_USD cell → **Format Column…**: **Currency**, decimal places **0**, **Apply**:
68
+ $81,410,352 for Americas.
69
+ 7. **Runs**: each run, sort and level fetched, with its SQL.
70
+ 8. Right-click → **Export ▸ CSV (whole query)**: `Notional_by_desk_and_asset_class.csv`, a header and 400 trades.
71
+ 9. **Local**: ag-grid's row groups, filters and the Columns panel with **Pivot Mode**. Back to **Server-side**.
72
+
73
+ ## 4. Pivot (about 1.5 min)
74
+
75
+ 1. On any sample cube (H2), point at **Pivot by Column** in the palette: greyed, _"Pivot is not supported on H2."_
76
+ 2. New page → **Connect to a source → Direct Connection**: Database **DuckDB**, paste the setup SQL below into
77
+ **Setup SQL**, **Test connection**, schema **demo**, pick **sales**, **Add**, **F9**: 10 sales.
78
+ 3. Palette **Pivot by Column**: pivot column **year**, **Load values** (2022, 2023, 2024), **All**, row column
79
+ **country**, aggregation **Sum** of **amount**. **Apply**, **F9**: a row per country, a column per year: France
80
+ 120, 80, 180; Germany 150, –, 110; Japan –, 200, 40; Spain 70, –, –.
81
+ 4. _(Fallback: Import `duckdb-sales-pivot.cube.json`, F9.)_
82
+
83
+ The DuckDB setup SQL:
84
+
85
+ ```sql
86
+ drop schema if exists demo cascade;
87
+ create schema demo;
88
+ create table demo.sales (id INTEGER PRIMARY KEY, country VARCHAR(10), product VARCHAR(10), year INTEGER, amount INTEGER, price DOUBLE);
89
+ insert into demo.sales values (1, 'France', 'Tea', 2022, 120, 2.5), (2, 'France', 'Coffee', 2023, 80, 3.1), (3, 'France', 'Tea', 2024, 150, 2.7), (4, 'Germany', 'Tea', 2022, 90, 2.4), (5, 'Germany', 'Coffee', 2022, 60, 3.0), (6, 'Germany', 'Coffee', 2024, 110, 3.3), (7, 'Japan', 'Tea', 2023, 200, 2.9), (8, 'Japan', 'Tea', 2024, 40, 2.9), (9, 'France', 'Coffee', 2024, 30, 3.2), (10, 'Spain', 'Coffee', 2022, 70, 3.0);
90
+ ```
91
+
92
+ ## 5. A function as a source (about 1 min)
93
+
94
+ 1. Palette **Function**: Dataset **Trades**, Read **Functions**: `tradesAbove(minNotionalUsd: Float)` and
95
+ `deskBook(desk, side?)`, which runs on its own runtime.
96
+ 2. Pick **tradesAbove**, value **1000000**, **Add**, **F9**: **44 trades** above a million dollars.
97
+
98
+ ## Not shown, and why
99
+
100
+ - **Data products:** the data product servers don't run locally. The Data Product tab now takes several access points
101
+ at once, like tables.
102
+ - **Services:** work in progress.
@@ -0,0 +1,110 @@
1
+ {
2
+ "formatVersion": 1,
3
+ "context": {
4
+ "model": {
5
+ "_type": "cubeDirectConnection",
6
+ "connection": {
7
+ "_type": "RelationalDatabaseConnection",
8
+ "type": "DuckDB",
9
+ "databaseType": "DuckDB",
10
+ "datasourceSpecification": {
11
+ "_type": "duckDB",
12
+ "path": "",
13
+ "testDataSetupSqls": [
14
+ "drop schema if exists demo cascade",
15
+ "create schema demo",
16
+ "create table demo.sales (id INTEGER PRIMARY KEY, country VARCHAR(10), product VARCHAR(10), year INTEGER, amount INTEGER, price DOUBLE)",
17
+ "insert into demo.sales values (1, 'France', 'Tea', 2022, 120, 2.5), (2, 'France', 'Coffee', 2023, 80, 3.1), (3, 'France', 'Tea', 2024, 150, 2.7), (4, 'Germany', 'Tea', 2022, 90, 2.4), (5, 'Germany', 'Coffee', 2022, 60, 3.0), (6, 'Germany', 'Coffee', 2024, 110, 3.3), (7, 'Japan', 'Tea', 2023, 200, 2.9), (8, 'Japan', 'Tea', 2024, 40, 2.9), (9, 'France', 'Coffee', 2024, 30, 3.2), (10, 'Spain', 'Coffee', 2022, 70, 3.0)"
18
+ ]
19
+ },
20
+ "authenticationStrategy": {
21
+ "_type": "test"
22
+ }
23
+ }
24
+ },
25
+ "runtime": "cube::direct::Runtime"
26
+ },
27
+ "query": {
28
+ "selected": "pivot101",
29
+ "nodes": [
30
+ {
31
+ "kind": "relational",
32
+ "id": "relational101",
33
+ "database": "cube::direct::Database",
34
+ "schema": "\"demo\"",
35
+ "table": "\"sales\"",
36
+ "schemaSnapshot": [
37
+ {
38
+ "name": "id",
39
+ "type": {
40
+ "path": "meta::pure::precisePrimitives::Int"
41
+ },
42
+ "nullable": false
43
+ },
44
+ {
45
+ "name": "country",
46
+ "type": {
47
+ "path": "meta::pure::precisePrimitives::Varchar",
48
+ "params": [0]
49
+ },
50
+ "nullable": true
51
+ },
52
+ {
53
+ "name": "product",
54
+ "type": {
55
+ "path": "meta::pure::precisePrimitives::Varchar",
56
+ "params": [0]
57
+ },
58
+ "nullable": true
59
+ },
60
+ {
61
+ "name": "year",
62
+ "type": {
63
+ "path": "meta::pure::precisePrimitives::Int"
64
+ },
65
+ "nullable": true
66
+ },
67
+ {
68
+ "name": "amount",
69
+ "type": {
70
+ "path": "meta::pure::precisePrimitives::Int"
71
+ },
72
+ "nullable": true
73
+ },
74
+ {
75
+ "name": "price",
76
+ "type": {
77
+ "path": "meta::pure::precisePrimitives::Double"
78
+ },
79
+ "nullable": true
80
+ }
81
+ ]
82
+ },
83
+ {
84
+ "kind": "pivot",
85
+ "id": "pivot101",
86
+ "inputs": ["relational101"],
87
+ "rows": ["country"],
88
+ "column": "year",
89
+ "values": [
90
+ {
91
+ "kind": "integer",
92
+ "value": "2022"
93
+ },
94
+ {
95
+ "kind": "integer",
96
+ "value": "2023"
97
+ },
98
+ {
99
+ "kind": "integer",
100
+ "value": "2024"
101
+ }
102
+ ],
103
+ "aggregation": {
104
+ "column": "amount",
105
+ "function": "Sum"
106
+ }
107
+ }
108
+ ]
109
+ }
110
+ }
@@ -0,0 +1,123 @@
1
+ {
2
+ "formatVersion": 1,
3
+ "context": {
4
+ "model": {
5
+ "_type": "text",
6
+ "code": "###Relational\nDatabase cube::samples::trades::TradesDatabase\n(\n Schema TRADES_SAMPLE\n (\n Table DESKS\n (\n ID INTEGER PRIMARY KEY,\n DESK VARCHAR(20) NOT NULL,\n REGION VARCHAR(10) NOT NULL\n )\n Table INSTRUMENTS\n (\n ID INTEGER PRIMARY KEY,\n SYMBOL VARCHAR(10) NOT NULL,\n INSTRUMENT VARCHAR(30) NOT NULL,\n ASSET_CLASS VARCHAR(10) NOT NULL,\n CURRENCY VARCHAR(3) NOT NULL\n )\n Table TRADES\n (\n TRADE_ID INTEGER PRIMARY KEY,\n TRADE_DATE DATE NOT NULL,\n DESK_ID INTEGER NOT NULL,\n INSTRUMENT_ID INTEGER NOT NULL,\n SIDE VARCHAR(4) NOT NULL,\n QUANTITY INTEGER NOT NULL,\n PRICE DECIMAL(14,4) NOT NULL,\n NOTIONAL_USD DECIMAL(18,2) NOT NULL\n )\n )\n\n Join TRADE_DESK(TRADES_SAMPLE.TRADES.DESK_ID = TRADES_SAMPLE.DESKS.ID)\n Join TRADE_INSTRUMENT(TRADES_SAMPLE.TRADES.INSTRUMENT_ID = TRADES_SAMPLE.INSTRUMENTS.ID)\n)\n\n\n###Connection\nRelationalDatabaseConnection cube::samples::trades::TradesConnection\n{\n store: cube::samples::trades::TradesDatabase;\n type: H2;\n specification: LocalH2\n {\n testDataSetupSqls: [\n 'drop schema if exists TRADES_SAMPLE cascade',\n 'create schema TRADES_SAMPLE',\n 'create table TRADES_SAMPLE.DESKS (ID INTEGER PRIMARY KEY, DESK VARCHAR(20) NOT NULL, REGION VARCHAR(10) NOT NULL)',\n 'insert into TRADES_SAMPLE.DESKS values (1, \\'Equities Cash\\', \\'Americas\\'), (2, \\'Equity Derivatives\\', \\'Europe\\'), (3, \\'Rates\\', \\'Americas\\'), (4, \\'Credit\\', \\'Europe\\'), (5, \\'FX\\', \\'Asia\\'), (6, \\'Commodities\\', \\'Americas\\')',\n 'create table TRADES_SAMPLE.INSTRUMENTS (ID INTEGER PRIMARY KEY, SYMBOL VARCHAR(10) NOT NULL, INSTRUMENT VARCHAR(30) NOT NULL, ASSET_CLASS VARCHAR(10) NOT NULL, CURRENCY VARCHAR(3) NOT NULL)',\n 'insert into TRADES_SAMPLE.INSTRUMENTS values (1, \\'ACME\\', \\'Acme Industries\\', \\'Equity\\', \\'USD\\'), (2, \\'GLBX\\', \\'Globex Corp\\', \\'Equity\\', \\'USD\\'), (3, \\'INIT\\', \\'Initech\\', \\'Equity\\', \\'USD\\'), (4, \\'UMBR\\', \\'Umbrella Holdings\\', \\'Equity\\', \\'EUR\\'), (5, \\'STRK\\', \\'Stark Works\\', \\'Equity\\', \\'EUR\\'), (6, \\'UST10\\', \\'Treasury 10Y\\', \\'Bond\\', \\'USD\\'), (7, \\'UST2\\', \\'Treasury 2Y\\', \\'Bond\\', \\'USD\\'), (8, \\'BUND10\\', \\'Bund 10Y\\', \\'Bond\\', \\'EUR\\'), (9, \\'ACME28\\', \\'Acme 4.5% 2028\\', \\'Bond\\', \\'USD\\'), (10, \\'EURUSD\\', \\'Euro / Dollar\\', \\'FX\\', \\'USD\\'), (11, \\'USDJPY\\', \\'Dollar / Yen\\', \\'FX\\', \\'JPY\\'), (12, \\'GBPUSD\\', \\'Pound / Dollar\\', \\'FX\\', \\'USD\\'), (13, \\'GOLD\\', \\'Gold\\', \\'Commodity\\', \\'USD\\'), (14, \\'BRENT\\', \\'Brent Crude\\', \\'Commodity\\', \\'USD\\'), (15, \\'COPPER\\', \\'Copper\\', \\'Commodity\\', \\'USD\\')',\n 'create table TRADES_SAMPLE.TRADES (TRADE_ID INTEGER PRIMARY KEY, TRADE_DATE DATE NOT NULL, DESK_ID INTEGER NOT NULL, INSTRUMENT_ID INTEGER NOT NULL, SIDE VARCHAR(4) NOT NULL, QUANTITY INTEGER NOT NULL, PRICE DECIMAL(14,4) NOT NULL, NOTIONAL_USD DECIMAL(18,2) NOT NULL)',\n 'insert into TRADES_SAMPLE.TRADES values (1, DATE \\'2026-01-27\\', 1, 1, \\'BUY\\', 1988, 180.2454, 358327.86), (2, DATE \\'2026-03-16\\', 2, 15, \\'BUY\\', 285, 4.3514, 1240.15), (3, DATE \\'2026-04-20\\', 6, 14, \\'SELL\\', 533, 79.8848, 42578.60), (4, DATE \\'2026-05-04\\', 6, 13, \\'SELL\\', 183, 2374.1961, 434477.89), (5, DATE \\'2026-01-26\\', 5, 11, \\'SELL\\', 684501, 150.7060, 691161.33), (6, DATE \\'2026-04-20\\', 2, 15, \\'SELL\\', 915, 4.2042, 3846.84), (7, DATE \\'2026-02-27\\', 1, 4, \\'SELL\\', 2192, 92.2117, 218298.29), (8, DATE \\'2026-01-08\\', 6, 15, \\'SELL\\', 971, 4.1100, 3990.81), (9, DATE \\'2026-02-17\\', 4, 6, \\'BUY\\', 460, 95.8977, 44112.94), (10, DATE \\'2026-05-18\\', 6, 13, \\'BUY\\', 253, 2326.9778, 588725.38), (11, DATE \\'2026-03-16\\', 1, 5, \\'BUY\\', 2138, 295.5412, 682416.45), (12, DATE \\'2026-03-24\\', 6, 13, \\'SELL\\', 85, 2266.6839, 192668.13), (13, DATE \\'2026-06-23\\', 1, 1, \\'BUY\\', 1842, 181.0524, 333498.52), (14, DATE \\'2026-04-24\\', 4, 9, \\'SELL\\', 1966, 97.1767, 191049.39), (15, DATE \\'2026-02-02\\', 3, 12, \\'SELL\\', 112534, 1.2114, 136323.69), (16, DATE \\'2026-03-30\\', 5, 11, \\'BUY\\', 857165, 149.3481, 857706.96), (17, DATE \\'2026-04-20\\', 2, 2, \\'SELL\\', 430, 61.2826, 26351.52), (18, DATE \\'2026-04-20\\', 1, 1, \\'SELL\\', 1875, 191.2751, 358640.81), (19, DATE \\'2026-04-17\\', 1, 1, \\'SELL\\', 2083, 181.0241, 377073.20), (20, DATE \\'2026-03-24\\', 4, 6, \\'BUY\\', 1589, 97.9857, 155699.28), (21, DATE \\'2026-02-23\\', 6, 12, \\'SELL\\', 716973, 1.2287, 880944.73), (22, DATE \\'2026-06-26\\', 1, 2, \\'SELL\\', 1192, 64.9309, 77397.63), (23, DATE \\'2026-06-25\\', 3, 8, \\'SELL\\', 1828, 104.9003, 207098.37), (24, DATE \\'2026-02-23\\', 5, 12, \\'SELL\\', 374446, 1.3038, 488202.69), (25, DATE \\'2026-05-22\\', 6, 12, \\'BUY\\', 24188, 1.3220, 31976.54), (26, DATE \\'2026-01-06\\', 4, 7, \\'SELL\\', 53, 96.0875, 5092.64), (27, DATE \\'2026-03-05\\', 5, 12, \\'SELL\\', 470426, 1.2506, 588314.76), (28, DATE \\'2026-02-02\\', 4, 6, \\'BUY\\', 960, 103.4019, 99265.82), (29, DATE \\'2026-02-12\\', 3, 6, \\'BUY\\', 1103, 102.1229, 112641.56), (30, DATE \\'2026-02-17\\', 4, 7, \\'BUY\\', 1149, 97.6100, 112153.89), (31, DATE \\'2026-02-11\\', 2, 5, \\'SELL\\', 1231, 316.7103, 421060.01), (32, DATE \\'2026-03-05\\', 4, 8, \\'BUY\\', 350, 98.4764, 37224.08), (33, DATE \\'2026-01-22\\', 5, 11, \\'BUY\\', 93598, 153.4066, 96202.29), (34, DATE \\'2026-04-06\\', 5, 10, \\'SELL\\', 970828, 1.0343, 1004127.40), (35, DATE \\'2026-01-06\\', 5, 11, \\'BUY\\', 729753, 146.3302, 715458.85), (36, DATE \\'2026-02-19\\', 1, 4, \\'BUY\\', 3160, 100.3738, 342555.70), (37, DATE \\'2026-05-22\\', 4, 6, \\'BUY\\', 195, 99.1184, 19328.09), (38, DATE \\'2026-01-16\\', 6, 12, \\'SELL\\', 911331, 1.2794, 1165956.88), (39, DATE \\'2026-01-22\\', 6, 15, \\'BUY\\', 260, 4.1129, 1069.35), (40, DATE \\'2026-05-13\\', 1, 3, \\'SELL\\', 1853, 24.1691, 44785.34), (41, DATE \\'2026-05-27\\', 4, 7, \\'BUY\\', 969, 95.2850, 92331.17), (42, DATE \\'2026-05-20\\', 3, 12, \\'SELL\\', 735699, 1.2716, 935514.85), (43, DATE \\'2026-01-01\\', 4, 8, \\'SELL\\', 163, 96.2890, 16950.72), (44, DATE \\'2026-02-27\\', 6, 10, \\'SELL\\', 373588, 1.0685, 399178.78), (45, DATE \\'2026-05-11\\', 2, 1, \\'SELL\\', 922, 185.8442, 171348.35), (46, DATE \\'2026-01-22\\', 3, 7, \\'BUY\\', 1964, 95.7410, 188035.32), (47, DATE \\'2026-05-04\\', 4, 8, \\'BUY\\', 277, 100.0080, 29918.39), (48, DATE \\'2026-06-15\\', 6, 14, \\'BUY\\', 454, 80.0959, 36363.54), (49, DATE \\'2026-03-23\\', 2, 4, \\'SELL\\', 1373, 99.9519, 148212.68), (50, DATE \\'2026-06-22\\', 6, 12, \\'BUY\\', 462334, 1.3046, 603160.94), (51, DATE \\'2026-03-30\\', 2, 14, \\'BUY\\', 456, 79.9388, 36452.09), (52, DATE \\'2026-05-12\\', 2, 1, \\'BUY\\', 1108, 181.0392, 200591.43), (53, DATE \\'2026-02-02\\', 4, 6, \\'SELL\\', 1263, 99.3245, 125446.84), (54, DATE \\'2026-05-14\\', 3, 10, \\'SELL\\', 980434, 1.0644, 1043573.95), (55, DATE \\'2026-02-25\\', 6, 14, \\'SELL\\', 565, 78.8410, 44545.17), (56, DATE \\'2026-02-12\\', 5, 11, \\'SELL\\', 206146, 145.5407, 201017.64), (57, DATE \\'2026-05-21\\', 6, 13, \\'BUY\\', 262, 2273.4484, 595643.48), (58, DATE \\'2026-03-11\\', 5, 12, \\'SELL\\', 128966, 1.3011, 167797.66), (59, DATE \\'2026-02-05\\', 3, 10, \\'SELL\\', 950036, 1.0532, 1000577.92), (60, DATE \\'2026-06-15\\', 5, 12, \\'SELL\\', 651801, 1.3172, 858552.28), (61, DATE \\'2026-05-19\\', 5, 10, \\'SELL\\', 500670, 1.0490, 525202.83), (62, DATE \\'2026-04-24\\', 6, 12, \\'SELL\\', 58609, 1.2430, 72850.99), (63, DATE \\'2026-01-19\\', 5, 12, \\'BUY\\', 733789, 1.2741, 934920.56), (64, DATE \\'2026-05-06\\', 5, 12, \\'SELL\\', 10908, 1.2426, 13554.28), (65, DATE \\'2026-03-16\\', 4, 6, \\'BUY\\', 398, 100.0161, 39806.41), (66, DATE \\'2026-06-11\\', 6, 14, \\'SELL\\', 704, 84.3082, 59352.97), (67, DATE \\'2026-03-10\\', 1, 5, \\'BUY\\', 952, 298.3861, 306788.65), (68, DATE \\'2026-01-21\\', 4, 8, \\'BUY\\', 1437, 103.2999, 160317.31), (69, DATE \\'2026-05-04\\', 4, 8, \\'BUY\\', 1754, 98.6905, 186951.39), (70, DATE \\'2026-03-20\\', 2, 2, \\'BUY\\', 2247, 66.3178, 149016.10), (71, DATE \\'2026-04-02\\', 2, 14, \\'SELL\\', 669, 85.3384, 57091.39), (72, DATE \\'2026-03-04\\', 1, 1, \\'SELL\\', 3099, 190.0419, 588939.85), (73, DATE \\'2026-06-15\\', 1, 3, \\'SELL\\', 1702, 24.1905, 41172.23), (74, DATE \\'2026-06-05\\', 6, 14, \\'BUY\\', 974, 83.1397, 80978.07), (75, DATE \\'2026-05-11\\', 4, 8, \\'BUY\\', 1177, 99.1855, 126080.64), (76, DATE \\'2026-03-09\\', 2, 13, \\'SELL\\', 660, 2327.1055, 1535889.63), (77, DATE \\'2026-01-26\\', 2, 14, \\'BUY\\', 781, 82.8449, 64701.87), (78, DATE \\'2026-04-10\\', 3, 11, \\'BUY\\', 745503, 148.4396, 741436.52), (79, DATE \\'2026-04-21\\', 2, 5, \\'SELL\\', 4837, 298.3668, 1558656.23), (80, DATE \\'2026-04-08\\', 6, 10, \\'SELL\\', 159347, 1.0720, 170819.98), (81, DATE \\'2026-02-23\\', 5, 10, \\'SELL\\', 678391, 1.1139, 755659.73), (82, DATE \\'2026-03-10\\', 1, 4, \\'BUY\\', 2513, 91.6710, 248798.76), (83, DATE \\'2026-05-04\\', 5, 12, \\'BUY\\', 362922, 1.2284, 445813.38), (84, DATE \\'2026-02-11\\', 5, 10, \\'SELL\\', 480051, 1.0361, 497380.84), (85, DATE \\'2026-04-03\\', 1, 2, \\'BUY\\', 4527, 62.1340, 281280.62), (86, DATE \\'2026-03-11\\', 6, 13, \\'BUY\\', 547, 2404.6109, 1315322.16), (87, DATE \\'2026-03-02\\', 5, 11, \\'SELL\\', 47862, 153.9900, 49380.80), (88, DATE \\'2026-06-30\\', 5, 10, \\'BUY\\', 962637, 1.0375, 998735.89), (89, DATE \\'2026-06-24\\', 3, 6, \\'SELL\\', 1531, 97.7766, 149695.97), (90, DATE \\'2026-05-11\\', 2, 2, \\'BUY\\', 1116, 61.7075, 68865.57), (91, DATE \\'2026-05-26\\', 5, 10, \\'SELL\\', 940560, 1.0876, 1022953.06), (92, DATE \\'2026-02-13\\', 4, 8, \\'BUY\\', 563, 101.7719, 61881.39), (93, DATE \\'2026-05-27\\', 3, 12, \\'SELL\\', 797119, 1.2650, 1008355.54), (94, DATE \\'2026-05-29\\', 5, 12, \\'BUY\\', 204135, 1.2448, 254107.25), (95, DATE \\'2026-05-25\\', 3, 11, \\'SELL\\', 795234, 144.3187, 768939.82), (96, DATE \\'2026-03-04\\', 2, 2, \\'SELL\\', 3497, 61.9331, 216580.05), (97, DATE \\'2026-02-27\\', 1, 3, \\'BUY\\', 2773, 24.2652, 67287.40), (98, DATE \\'2026-03-10\\', 2, 3, \\'BUY\\', 4712, 23.6982, 111665.92), (99, DATE \\'2026-06-23\\', 2, 15, \\'BUY\\', 868, 4.0140, 3484.15), (100, DATE \\'2026-01-12\\', 6, 11, \\'SELL\\', 769152, 141.5099, 729245.57), (101, DATE \\'2026-06-08\\', 5, 11, \\'SELL\\', 349618, 141.5310, 331527.96), (102, DATE \\'2026-05-21\\', 5, 11, \\'BUY\\', 473838, 148.0425, 469992.69), (103, DATE \\'2026-06-15\\', 1, 1, \\'BUY\\', 1303, 182.0929, 237267.05), (104, DATE \\'2026-01-22\\', 5, 10, \\'SELL\\', 130815, 1.0430, 136440.05), (105, DATE \\'2026-02-04\\', 5, 11, \\'BUY\\', 223732, 152.5360, 228652.14), (106, DATE \\'2026-04-14\\', 4, 6, \\'SELL\\', 1379, 97.1083, 133912.35), (107, DATE \\'2026-01-02\\', 3, 11, \\'SELL\\', 131892, 150.2284, 132753.29), (108, DATE \\'2026-04-29\\', 3, 11, \\'BUY\\', 242943, 141.3051, 230004.87), (109, DATE \\'2026-05-15\\', 2, 13, \\'SELL\\', 66, 2362.8790, 155950.01), (110, DATE \\'2026-04-15\\', 4, 7, \\'BUY\\', 1172, 102.0146, 119561.11), (111, DATE \\'2026-03-18\\', 1, 3, \\'SELL\\', 3221, 24.9131, 80245.10), (112, DATE \\'2026-01-27\\', 3, 9, \\'SELL\\', 1157, 92.3720, 106874.40), (113, DATE \\'2026-06-02\\', 4, 8, \\'BUY\\', 120, 99.2472, 12862.44), (114, DATE \\'2026-04-15\\', 5, 10, \\'BUY\\', 631488, 1.1202, 707392.86), (115, DATE \\'2026-04-06\\', 1, 2, \\'SELL\\', 1031, 64.9655, 66979.43), (116, DATE \\'2026-03-31\\', 5, 10, \\'BUY\\', 698808, 1.0411, 727529.01), (117, DATE \\'2026-03-13\\', 2, 13, \\'SELL\\', 630, 2371.1618, 1493831.93), (118, DATE \\'2026-04-27\\', 6, 14, \\'SELL\\', 246, 84.1510, 20701.15), (119, DATE \\'2026-02-04\\', 1, 4, \\'SELL\\', 2791, 93.8686, 282946.24), (120, DATE \\'2026-05-15\\', 5, 10, \\'BUY\\', 137924, 1.1317, 156088.59), (121, DATE \\'2026-04-06\\', 1, 1, \\'SELL\\', 2398, 184.1916, 441691.46), (122, DATE \\'2026-03-25\\', 4, 7, \\'SELL\\', 547, 98.7103, 53994.53), (123, DATE \\'2026-01-26\\', 6, 14, \\'BUY\\', 955, 84.6430, 80834.07), (124, DATE \\'2026-04-30\\', 1, 1, \\'SELL\\', 4949, 176.7440, 874706.06), (125, DATE \\'2026-06-30\\', 3, 10, \\'SELL\\', 464545, 1.1359, 527676.67), (126, DATE \\'2026-01-14\\', 3, 12, \\'BUY\\', 768075, 1.2307, 945269.90), (127, DATE \\'2026-04-14\\', 4, 6, \\'SELL\\', 1231, 102.0452, 125617.64), (128, DATE \\'2026-03-09\\', 4, 6, \\'BUY\\', 283, 100.8364, 28536.70), (129, DATE \\'2026-02-16\\', 3, 7, \\'BUY\\', 786, 98.6210, 77516.11), (130, DATE \\'2026-04-21\\', 6, 11, \\'SELL\\', 148325, 152.6076, 151658.00), (131, DATE \\'2026-04-06\\', 1, 4, \\'SELL\\', 4252, 98.5889, 452736.00), (132, DATE \\'2026-03-12\\', 5, 12, \\'BUY\\', 761198, 1.3275, 1010490.35), (133, DATE \\'2026-02-06\\', 2, 2, \\'SELL\\', 4980, 61.5006, 306272.99), (134, DATE \\'2026-06-04\\', 2, 1, \\'SELL\\', 1328, 174.4152, 231623.39), (135, DATE \\'2026-01-09\\', 3, 11, \\'SELL\\', 794371, 144.9323, 771371.11), (136, DATE \\'2026-02-23\\', 1, 4, \\'SELL\\', 947, 92.5952, 94702.67), (137, DATE \\'2026-04-02\\', 4, 8, \\'BUY\\', 442, 96.7027, 46162.00), (138, DATE \\'2026-04-21\\', 5, 10, \\'BUY\\', 615473, 1.0443, 642738.45), (139, DATE \\'2026-04-22\\', 3, 8, \\'SELL\\', 174, 102.1615, 19198.19), (140, DATE \\'2026-02-06\\', 5, 12, \\'BUY\\', 14766, 1.2999, 19194.32), (141, DATE \\'2026-03-11\\', 3, 10, \\'BUY\\', 839553, 1.1147, 935849.73), (142, DATE \\'2026-01-22\\', 3, 11, \\'BUY\\', 249426, 143.1486, 239223.38), (143, DATE \\'2026-03-16\\', 2, 5, \\'SELL\\', 3655, 315.9410, 1247145.50), (144, DATE \\'2026-03-02\\', 2, 3, \\'SELL\\', 3661, 23.0361, 84335.16), (145, DATE \\'2026-04-06\\', 2, 4, \\'SELL\\', 3737, 93.5343, 377500.69), (146, DATE \\'2026-02-02\\', 4, 6, \\'SELL\\', 257, 100.5325, 25836.85), (147, DATE \\'2026-02-11\\', 5, 10, \\'SELL\\', 30608, 1.0562, 32328.17), (148, DATE \\'2026-05-04\\', 3, 6, \\'BUY\\', 1260, 99.6784, 125594.78), (149, DATE \\'2026-05-05\\', 2, 14, \\'SELL\\', 865, 83.5902, 72305.52), (150, DATE \\'2026-02-10\\', 3, 12, \\'SELL\\', 26656, 1.2400, 33053.44), (151, DATE \\'2026-04-29\\', 4, 7, \\'BUY\\', 99, 98.8201, 9783.19), (152, DATE \\'2026-03-02\\', 4, 9, \\'SELL\\', 1477, 101.8644, 150453.72), (153, DATE \\'2026-01-30\\', 4, 9, \\'BUY\\', 1092, 99.2963, 108431.56), (154, DATE \\'2026-01-21\\', 1, 2, \\'SELL\\', 4022, 62.0813, 249690.99), (155, DATE \\'2026-03-06\\', 5, 12, \\'SELL\\', 884030, 1.2089, 1068703.87), (156, DATE \\'2026-05-27\\', 3, 12, \\'BUY\\', 835197, 1.2040, 1005577.19), (157, DATE \\'2026-04-27\\', 1, 2, \\'BUY\\', 3311, 66.7841, 221122.16), (158, DATE \\'2026-06-25\\', 4, 8, \\'SELL\\', 889, 96.2606, 92421.73), (159, DATE \\'2026-06-22\\', 3, 11, \\'BUY\\', 191096, 144.5445, 185066.57), (160, DATE \\'2026-03-30\\', 5, 11, \\'BUY\\', 24910, 146.0548, 24376.11), (161, DATE \\'2026-04-27\\', 4, 6, \\'BUY\\', 619, 100.1139, 61970.50), (162, DATE \\'2026-03-23\\', 6, 13, \\'BUY\\', 938, 2352.1713, 2206336.68), (163, DATE \\'2026-03-17\\', 5, 11, \\'SELL\\', 546439, 151.3862, 554246.27), (164, DATE \\'2026-06-29\\', 5, 10, \\'SELL\\', 596463, 1.1238, 670305.12), (165, DATE \\'2026-02-09\\', 4, 7, \\'BUY\\', 893, 95.1653, 84982.61), (166, DATE \\'2026-02-11\\', 5, 12, \\'BUY\\', 353538, 1.2133, 428947.66), (167, DATE \\'2026-04-29\\', 2, 15, \\'BUY\\', 740, 3.9846, 2948.60), (168, DATE \\'2026-04-08\\', 2, 1, \\'BUY\\', 2568, 174.2819, 447555.92), (169, DATE \\'2026-04-17\\', 5, 11, \\'SELL\\', 517629, 152.7864, 529880.70), (170, DATE \\'2026-06-15\\', 3, 8, \\'BUY\\', 1694, 104.1916, 190620.62), (171, DATE \\'2026-01-26\\', 3, 9, \\'BUY\\', 1184, 99.0112, 117229.26), (172, DATE \\'2026-04-14\\', 5, 10, \\'SELL\\', 612879, 1.0416, 638374.77), (173, DATE \\'2026-04-30\\', 5, 12, \\'SELL\\', 135697, 1.2175, 165211.10), (174, DATE \\'2026-03-30\\', 4, 9, \\'SELL\\', 208, 99.3502, 20664.84), (175, DATE \\'2026-04-23\\', 2, 1, \\'BUY\\', 1089, 177.6269, 193435.69), (176, DATE \\'2026-06-22\\', 1, 5, \\'BUY\\', 4588, 322.4327, 1597666.93), (177, DATE \\'2026-05-25\\', 5, 12, \\'BUY\\', 656852, 1.2317, 809044.61), (178, DATE \\'2026-03-25\\', 5, 10, \\'BUY\\', 764555, 1.0449, 798883.52), (179, DATE \\'2026-01-14\\', 3, 10, \\'BUY\\', 43602, 1.1239, 49004.29), (180, DATE \\'2026-04-20\\', 3, 6, \\'SELL\\', 291, 100.8923, 29359.66), (181, DATE \\'2026-06-01\\', 5, 12, \\'BUY\\', 937145, 1.3241, 1240873.69), (182, DATE \\'2026-03-18\\', 2, 4, \\'SELL\\', 4823, 97.8547, 509709.48), (183, DATE \\'2026-06-16\\', 3, 10, \\'SELL\\', 950526, 1.0721, 1019058.92), (184, DATE \\'2026-06-08\\', 1, 4, \\'SELL\\', 4153, 98.0250, 439665.65), (185, DATE \\'2026-06-08\\', 6, 10, \\'BUY\\', 405220, 1.0518, 426210.40), (186, DATE \\'2026-05-26\\', 5, 12, \\'SELL\\', 504406, 1.2165, 613609.90), (187, DATE \\'2026-02-04\\', 6, 15, \\'BUY\\', 976, 4.1288, 4029.71), (188, DATE \\'2026-04-20\\', 5, 12, \\'SELL\\', 932114, 1.2570, 1171667.30), (189, DATE \\'2026-01-19\\', 4, 6, \\'SELL\\', 305, 97.8096, 29831.93), (190, DATE \\'2026-02-23\\', 6, 10, \\'SELL\\', 39142, 1.1071, 43334.11), (191, DATE \\'2026-03-30\\', 3, 7, \\'BUY\\', 352, 103.5452, 36447.91), (192, DATE \\'2026-02-25\\', 4, 7, \\'BUY\\', 1637, 104.6929, 171382.28), (193, DATE \\'2026-04-30\\', 4, 6, \\'BUY\\', 955, 101.6063, 97034.02), (194, DATE \\'2026-03-23\\', 3, 12, \\'SELL\\', 292870, 1.3157, 385329.06), (195, DATE \\'2026-01-26\\', 6, 13, \\'BUY\\', 98, 2394.3764, 234648.89), (196, DATE \\'2026-02-05\\', 1, 3, \\'SELL\\', 3895, 24.0550, 93694.23), (197, DATE \\'2026-03-04\\', 6, 13, \\'SELL\\', 238, 2318.4881, 551800.17), (198, DATE \\'2026-01-23\\', 3, 11, \\'BUY\\', 78817, 146.3708, 77294.60), (199, DATE \\'2026-01-26\\', 3, 10, \\'BUY\\', 520965, 1.1018, 573999.24), (200, DATE \\'2026-06-15\\', 6, 15, \\'SELL\\', 553, 4.2663, 2359.26), (201, DATE \\'2026-02-16\\', 3, 10, \\'BUY\\', 254317, 1.0344, 263065.50), (202, DATE \\'2026-06-03\\', 6, 13, \\'BUY\\', 156, 2317.0730, 361463.39), (203, DATE \\'2026-05-18\\', 1, 5, \\'BUY\\', 3537, 308.3561, 1177907.97), (204, DATE \\'2026-02-19\\', 3, 10, \\'SELL\\', 105659, 1.0491, 110846.86), (205, DATE \\'2026-01-16\\', 6, 11, \\'BUY\\', 37563, 144.4345, 36350.13), (206, DATE \\'2026-05-01\\', 3, 11, \\'BUY\\', 494050, 154.6795, 512010.03), (207, DATE \\'2026-01-29\\', 5, 10, \\'SELL\\', 813178, 1.0774, 876117.98), (208, DATE \\'2026-04-28\\', 4, 9, \\'SELL\\', 620, 96.7304, 59972.85), (209, DATE \\'2026-01-23\\', 4, 6, \\'BUY\\', 314, 99.1741, 31140.67), (210, DATE \\'2026-02-11\\', 2, 13, \\'BUY\\', 490, 2258.3097, 1106571.75), (211, DATE \\'2026-04-01\\', 2, 15, \\'SELL\\', 463, 4.2626, 1973.58), (212, DATE \\'2026-05-11\\', 5, 10, \\'BUY\\', 937868, 1.0561, 990482.39), (213, DATE \\'2026-06-11\\', 4, 9, \\'BUY\\', 1594, 95.3005, 151909.00), (214, DATE \\'2026-03-03\\', 5, 10, \\'SELL\\', 126526, 1.0863, 137445.19), (215, DATE \\'2026-05-25\\', 2, 13, \\'BUY\\', 591, 2389.6236, 1412267.55), (216, DATE \\'2026-04-20\\', 2, 14, \\'SELL\\', 454, 78.6230, 35694.84), (217, DATE \\'2026-02-12\\', 2, 5, \\'SELL\\', 3394, 315.3463, 1155908.17), (218, DATE \\'2026-05-12\\', 6, 10, \\'BUY\\', 230492, 1.0486, 241693.91), (219, DATE \\'2026-06-01\\', 6, 12, \\'SELL\\', 939635, 1.3257, 1245674.12), (220, DATE \\'2026-01-08\\', 3, 9, \\'SELL\\', 699, 93.0870, 65067.81), (221, DATE \\'2026-04-15\\', 4, 8, \\'BUY\\', 591, 102.4619, 65399.38), (222, DATE \\'2026-05-13\\', 2, 13, \\'BUY\\', 824, 2441.6115, 2011887.88), (223, DATE \\'2026-01-16\\', 2, 15, \\'SELL\\', 413, 4.0712, 1681.41), (224, DATE \\'2026-05-19\\', 3, 7, \\'BUY\\', 1316, 97.5229, 128340.14), (225, DATE \\'2026-04-02\\', 2, 15, \\'BUY\\', 50, 4.3433, 217.17), (226, DATE \\'2026-01-05\\', 6, 10, \\'SELL\\', 132661, 1.1319, 150158.99), (227, DATE \\'2026-03-13\\', 3, 12, \\'BUY\\', 370416, 1.3031, 482689.09), (228, DATE \\'2026-04-15\\', 6, 13, \\'BUY\\', 610, 2370.4446, 1445971.21), (229, DATE \\'2026-04-09\\', 1, 4, \\'SELL\\', 3604, 98.4544, 383216.03), (230, DATE \\'2026-03-31\\', 2, 14, \\'SELL\\', 848, 79.4994, 67415.49), (231, DATE \\'2026-02-09\\', 2, 14, \\'BUY\\', 340, 83.2575, 28307.55), (232, DATE \\'2026-01-22\\', 2, 13, \\'SELL\\', 979, 2335.6072, 2286559.45), (233, DATE \\'2026-03-23\\', 1, 2, \\'SELL\\', 1747, 66.0883, 115456.26), (234, DATE \\'2026-05-13\\', 6, 11, \\'SELL\\', 862778, 154.6767, 894126.08), (235, DATE \\'2026-05-15\\', 6, 12, \\'BUY\\', 221540, 1.2606, 279273.32), (236, DATE \\'2026-05-04\\', 6, 12, \\'SELL\\', 503522, 1.2392, 623964.46), (237, DATE \\'2026-05-22\\', 2, 15, \\'SELL\\', 13, 3.9729, 51.65), (238, DATE \\'2026-02-27\\', 4, 8, \\'SELL\\', 825, 104.4955, 93105.49), (239, DATE \\'2026-06-01\\', 3, 12, \\'BUY\\', 923244, 1.2052, 1112693.67), (240, DATE \\'2026-02-09\\', 3, 11, \\'SELL\\', 276883, 155.4363, 288352.38), (241, DATE \\'2026-02-23\\', 6, 11, \\'BUY\\', 965160, 152.3386, 985108.53), (242, DATE \\'2026-05-04\\', 6, 15, \\'BUY\\', 83, 4.2791, 355.17), (243, DATE \\'2026-01-14\\', 4, 8, \\'BUY\\', 632, 97.5770, 66602.16), (244, DATE \\'2026-06-15\\', 2, 13, \\'BUY\\', 139, 2258.9873, 313999.23), (245, DATE \\'2026-03-23\\', 6, 10, \\'SELL\\', 491019, 1.0896, 535014.30), (246, DATE \\'2026-05-20\\', 3, 11, \\'BUY\\', 412148, 151.7373, 419006.11), (247, DATE \\'2026-05-04\\', 4, 8, \\'BUY\\', 1484, 105.5286, 169132.80), (248, DATE \\'2026-03-31\\', 5, 12, \\'SELL\\', 524240, 1.2260, 642718.24), (249, DATE \\'2026-05-08\\', 5, 11, \\'BUY\\', 376681, 145.0881, 366167.93), (250, DATE \\'2026-06-26\\', 5, 10, \\'SELL\\', 752218, 1.0576, 795545.76), (251, DATE \\'2026-04-30\\', 1, 1, \\'SELL\\', 456, 191.2063, 87190.07), (252, DATE \\'2026-03-18\\', 4, 6, \\'SELL\\', 446, 101.4085, 45228.19), (253, DATE \\'2026-01-21\\', 4, 6, \\'SELL\\', 27, 95.0576, 2566.56), (254, DATE \\'2026-05-25\\', 2, 13, \\'SELL\\', 6, 2331.1287, 13986.77), (255, DATE \\'2026-02-17\\', 2, 1, \\'BUY\\', 4555, 190.6628, 868469.05), (256, DATE \\'2026-03-30\\', 2, 2, \\'BUY\\', 3564, 66.9604, 238646.87), (257, DATE \\'2026-05-28\\', 4, 8, \\'SELL\\', 1970, 99.4968, 211689.39), (258, DATE \\'2026-06-22\\', 4, 9, \\'SELL\\', 395, 101.0953, 39932.64), (259, DATE \\'2026-06-22\\', 2, 5, \\'BUY\\', 800, 314.8361, 272018.39), (260, DATE \\'2026-05-08\\', 2, 4, \\'SELL\\', 2388, 98.3016, 253523.76), (261, DATE \\'2026-04-23\\', 5, 10, \\'SELL\\', 539258, 1.1408, 615185.53), (262, DATE \\'2026-02-13\\', 6, 12, \\'BUY\\', 211808, 1.2692, 268826.71), (263, DATE \\'2026-06-22\\', 1, 5, \\'BUY\\', 1544, 309.8015, 516600.20), (264, DATE \\'2026-06-15\\', 4, 6, \\'SELL\\', 71, 97.3793, 6913.93), (265, DATE \\'2026-05-08\\', 6, 12, \\'SELL\\', 775921, 1.2319, 955857.08), (266, DATE \\'2026-06-16\\', 4, 8, \\'BUY\\', 1992, 102.6797, 220901.00), (267, DATE \\'2026-03-30\\', 2, 15, \\'BUY\\', 787, 4.1876, 3295.64), (268, DATE \\'2026-06-24\\', 2, 1, \\'BUY\\', 1389, 183.3142, 254623.42), (269, DATE \\'2026-01-05\\', 6, 15, \\'BUY\\', 215, 4.2089, 904.91), (270, DATE \\'2026-06-25\\', 6, 13, \\'SELL\\', 67, 2246.6311, 150524.28), (271, DATE \\'2026-03-26\\', 6, 12, \\'SELL\\', 796418, 1.2951, 1031440.95), (272, DATE \\'2026-04-13\\', 6, 14, \\'SELL\\', 820, 81.7932, 67070.42), (273, DATE \\'2026-03-04\\', 2, 4, \\'BUY\\', 4349, 99.9376, 469398.91), (274, DATE \\'2026-03-16\\', 2, 5, \\'BUY\\', 4077, 297.6381, 1310548.18), (275, DATE \\'2026-06-15\\', 6, 13, \\'BUY\\', 375, 2465.2057, 924452.14), (276, DATE \\'2026-06-01\\', 5, 10, \\'SELL\\', 21581, 1.0653, 22990.24), (277, DATE \\'2026-01-12\\', 3, 10, \\'SELL\\', 379896, 1.0697, 406374.75), (278, DATE \\'2026-05-14\\', 6, 10, \\'SELL\\', 991242, 1.0868, 1077281.81), (279, DATE \\'2026-04-13\\', 2, 13, \\'SELL\\', 722, 2419.7534, 1747061.95), (280, DATE \\'2026-02-23\\', 3, 9, \\'SELL\\', 1809, 96.2894, 174187.52), (281, DATE \\'2026-04-13\\', 2, 2, \\'BUY\\', 4164, 63.5512, 264627.20), (282, DATE \\'2026-01-19\\', 1, 2, \\'SELL\\', 434, 62.0680, 26937.51), (283, DATE \\'2026-02-09\\', 1, 4, \\'SELL\\', 2604, 99.3937, 279526.89), (284, DATE \\'2026-03-19\\', 6, 15, \\'BUY\\', 304, 4.0033, 1217.00), (285, DATE \\'2026-02-26\\', 4, 6, \\'BUY\\', 432, 102.9263, 44464.16), (286, DATE \\'2026-02-19\\', 1, 5, \\'SELL\\', 1010, 323.2966, 352651.93), (287, DATE \\'2026-04-20\\', 1, 1, \\'BUY\\', 3516, 184.0417, 647090.62), (288, DATE \\'2026-01-26\\', 3, 10, \\'SELL\\', 962581, 1.0783, 1037951.09), (289, DATE \\'2026-06-01\\', 1, 1, \\'SELL\\', 1922, 187.2411, 359877.39), (290, DATE \\'2026-04-06\\', 2, 14, \\'BUY\\', 884, 82.6645, 73075.42), (291, DATE \\'2026-02-25\\', 4, 9, \\'SELL\\', 730, 95.2391, 69524.54), (292, DATE \\'2026-04-28\\', 3, 8, \\'SELL\\', 1229, 101.3361, 134505.43), (293, DATE \\'2026-02-09\\', 1, 1, \\'SELL\\', 577, 187.9590, 108452.34), (294, DATE \\'2026-03-23\\', 4, 9, \\'BUY\\', 1849, 100.6429, 186088.72), (295, DATE \\'2026-04-22\\', 2, 4, \\'SELL\\', 724, 92.7333, 72510.02), (296, DATE \\'2026-03-09\\', 6, 12, \\'BUY\\', 398229, 1.2343, 491534.05), (297, DATE \\'2026-05-01\\', 5, 11, \\'BUY\\', 984189, 150.2616, 990834.95), (298, DATE \\'2026-06-04\\', 4, 7, \\'SELL\\', 164, 98.8027, 16203.64), (299, DATE \\'2026-01-27\\', 2, 3, \\'BUY\\', 4803, 24.8939, 119565.40), (300, DATE \\'2026-02-09\\', 2, 4, \\'BUY\\', 2166, 95.1015, 222469.04), (301, DATE \\'2026-02-19\\', 3, 7, \\'SELL\\', 399, 103.6754, 41366.48), (302, DATE \\'2026-06-08\\', 5, 12, \\'BUY\\', 50461, 1.3233, 66775.04), (303, DATE \\'2026-03-12\\', 2, 3, \\'SELL\\', 2519, 23.7356, 59789.98), (304, DATE \\'2026-05-04\\', 4, 7, \\'SELL\\', 1872, 104.6197, 195848.08), (305, DATE \\'2026-05-06\\', 5, 10, \\'SELL\\', 331959, 1.1161, 370499.44), (306, DATE \\'2026-01-07\\', 2, 5, \\'SELL\\', 2474, 319.5341, 853769.55), (307, DATE \\'2026-04-02\\', 3, 6, \\'BUY\\', 459, 95.1537, 43675.55), (308, DATE \\'2026-03-09\\', 3, 9, \\'BUY\\', 853, 101.1572, 86287.09), (309, DATE \\'2026-06-10\\', 1, 4, \\'BUY\\', 2181, 92.1987, 217172.19), (310, DATE \\'2026-03-31\\', 6, 10, \\'SELL\\', 390662, 1.0535, 411562.42), (311, DATE \\'2026-01-20\\', 1, 1, \\'SELL\\', 2132, 178.6231, 380824.45), (312, DATE \\'2026-02-16\\', 2, 13, \\'SELL\\', 288, 2306.4420, 664255.30), (313, DATE \\'2026-01-27\\', 3, 12, \\'SELL\\', 147414, 1.3041, 192242.60), (314, DATE \\'2026-04-27\\', 6, 13, \\'SELL\\', 843, 2290.9560, 1931275.91), (315, DATE \\'2026-06-15\\', 2, 13, \\'SELL\\', 260, 2459.6078, 639498.03), (316, DATE \\'2026-03-06\\', 3, 12, \\'SELL\\', 444048, 1.2159, 539917.96), (317, DATE \\'2026-01-30\\', 2, 13, \\'BUY\\', 793, 2371.8328, 1880863.41), (318, DATE \\'2026-05-28\\', 4, 9, \\'SELL\\', 1696, 95.8143, 162501.05), (319, DATE \\'2026-06-24\\', 6, 12, \\'BUY\\', 892464, 1.3043, 1164040.80), (320, DATE \\'2026-03-17\\', 1, 2, \\'SELL\\', 3324, 66.9617, 222580.69), (321, DATE \\'2026-02-17\\', 1, 4, \\'SELL\\', 3895, 97.9061, 411851.80), (322, DATE \\'2026-05-14\\', 5, 10, \\'BUY\\', 288781, 1.0925, 315493.24), (323, DATE \\'2026-06-24\\', 1, 5, \\'BUY\\', 2307, 305.5669, 761338.27), (324, DATE \\'2026-04-06\\', 1, 3, \\'SELL\\', 4878, 24.5807, 119904.65), (325, DATE \\'2026-04-28\\', 1, 2, \\'SELL\\', 1645, 65.9161, 108431.98), (326, DATE \\'2026-04-06\\', 1, 3, \\'SELL\\', 4066, 23.6808, 96286.13), (327, DATE \\'2026-05-13\\', 4, 9, \\'BUY\\', 486, 101.5579, 49357.14), (328, DATE \\'2026-05-26\\', 3, 10, \\'SELL\\', 768915, 1.0383, 798364.44), (329, DATE \\'2026-06-04\\', 2, 3, \\'BUY\\', 1105, 24.7976, 27401.35), (330, DATE \\'2026-04-24\\', 2, 3, \\'BUY\\', 1294, 23.9716, 31019.25), (331, DATE \\'2026-02-03\\', 2, 13, \\'BUY\\', 769, 2354.8062, 1810845.97), (332, DATE \\'2026-02-16\\', 2, 13, \\'SELL\\', 963, 2359.1403, 2271852.11), (333, DATE \\'2026-01-12\\', 4, 6, \\'SELL\\', 57, 97.8541, 5577.68), (334, DATE \\'2026-01-06\\', 5, 11, \\'SELL\\', 313463, 143.3610, 301087.07), (335, DATE \\'2026-06-03\\', 1, 1, \\'SELL\\', 3104, 182.3688, 566072.76), (336, DATE \\'2026-06-17\\', 5, 12, \\'BUY\\', 610476, 1.2590, 768589.28), (337, DATE \\'2026-01-12\\', 2, 14, \\'BUY\\', 345, 85.2124, 29398.28), (338, DATE \\'2026-02-04\\', 4, 6, \\'SELL\\', 1525, 100.4646, 153208.52), (339, DATE \\'2026-04-27\\', 4, 9, \\'SELL\\', 1923, 101.2850, 194771.06), (340, DATE \\'2026-03-03\\', 3, 11, \\'BUY\\', 845730, 146.7726, 831670.94), (341, DATE \\'2026-02-05\\', 2, 5, \\'BUY\\', 2810, 300.5069, 911978.34), (342, DATE \\'2026-06-05\\', 1, 2, \\'BUY\\', 1409, 66.2048, 93282.56), (343, DATE \\'2026-02-16\\', 4, 8, \\'SELL\\', 1320, 98.9363, 141043.59), (344, DATE \\'2026-06-25\\', 4, 9, \\'BUY\\', 738, 92.8139, 68496.66), (345, DATE \\'2026-05-18\\', 1, 5, \\'SELL\\', 3349, 321.5805, 1163130.94), (346, DATE \\'2026-04-15\\', 3, 12, \\'SELL\\', 680284, 1.2832, 872940.43), (347, DATE \\'2026-01-16\\', 1, 1, \\'BUY\\', 3240, 183.2225, 593640.90), (348, DATE \\'2026-06-26\\', 3, 6, \\'BUY\\', 1641, 94.6551, 155329.02), (349, DATE \\'2026-01-16\\', 6, 10, \\'BUY\\', 229174, 1.0716, 245582.86), (350, DATE \\'2026-01-19\\', 2, 15, \\'SELL\\', 571, 4.2722, 2439.43), (351, DATE \\'2026-06-26\\', 1, 2, \\'BUY\\', 961, 64.2259, 61721.09), (352, DATE \\'2026-02-09\\', 6, 11, \\'BUY\\', 184240, 150.0145, 185179.10), (353, DATE \\'2026-05-11\\', 3, 10, \\'BUY\\', 185116, 1.0658, 197296.63), (354, DATE \\'2026-01-05\\', 1, 1, \\'BUY\\', 3067, 187.7571, 575851.03), (355, DATE \\'2026-03-09\\', 6, 10, \\'SELL\\', 291592, 1.0667, 311041.19), (356, DATE \\'2026-05-26\\', 3, 11, \\'SELL\\', 884735, 147.4219, 873876.41), (357, DATE \\'2026-03-02\\', 2, 13, \\'BUY\\', 194, 2257.1086, 437879.07), (358, DATE \\'2026-02-09\\', 2, 14, \\'SELL\\', 224, 83.3550, 18671.52), (359, DATE \\'2026-01-05\\', 4, 9, \\'BUY\\', 633, 95.8982, 60703.56), (360, DATE \\'2026-05-28\\', 5, 11, \\'BUY\\', 208715, 144.9290, 202667.34), (361, DATE \\'2026-04-24\\', 5, 12, \\'SELL\\', 325414, 1.3152, 427984.49), (362, DATE \\'2026-05-07\\', 4, 8, \\'SELL\\', 1276, 97.2777, 134056.45), (363, DATE \\'2026-06-23\\', 5, 12, \\'BUY\\', 988116, 1.2443, 1229512.74), (364, DATE \\'2026-06-26\\', 2, 3, \\'SELL\\', 4848, 23.0348, 111672.71), (365, DATE \\'2026-01-05\\', 6, 11, \\'SELL\\', 62681, 148.0194, 62162.63), (366, DATE \\'2026-01-07\\', 1, 5, \\'BUY\\', 1649, 313.6511, 558587.52), (367, DATE \\'2026-02-02\\', 6, 11, \\'BUY\\', 388219, 154.9858, 403128.50), (368, DATE \\'2026-05-21\\', 3, 10, \\'SELL\\', 574488, 1.1206, 643771.25), (369, DATE \\'2026-03-30\\', 2, 14, \\'BUY\\', 974, 82.9383, 80781.90), (370, DATE \\'2026-01-12\\', 5, 10, \\'BUY\\', 199977, 1.1381, 227593.82), (371, DATE \\'2026-05-06\\', 2, 1, \\'SELL\\', 3908, 185.4041, 724559.22), (372, DATE \\'2026-02-16\\', 5, 10, \\'SELL\\', 506123, 1.0378, 525254.45), (373, DATE \\'2026-06-18\\', 6, 13, \\'SELL\\', 712, 2282.4577, 1625109.88), (374, DATE \\'2026-01-20\\', 5, 12, \\'BUY\\', 525785, 1.2988, 682889.56), (375, DATE \\'2026-05-26\\', 1, 4, \\'BUY\\', 4714, 96.8808, 493231.78), (376, DATE \\'2026-05-04\\', 5, 10, \\'BUY\\', 337787, 1.0922, 368930.96), (377, DATE \\'2026-05-06\\', 3, 11, \\'BUY\\', 136687, 153.9022, 140944.08), (378, DATE \\'2026-03-05\\', 4, 7, \\'BUY\\', 429, 99.7353, 42786.44), (379, DATE \\'2026-06-11\\', 3, 11, \\'BUY\\', 843312, 147.2800, 832160.04), (380, DATE \\'2026-05-20\\', 6, 14, \\'SELL\\', 850, 85.7841, 72916.49), (381, DATE \\'2026-05-18\\', 3, 12, \\'SELL\\', 713416, 1.2453, 888416.94), (382, DATE \\'2026-04-09\\', 1, 5, \\'BUY\\', 3595, 314.9429, 1222797.30), (383, DATE \\'2026-02-16\\', 4, 9, \\'BUY\\', 649, 99.4541, 64545.71), (384, DATE \\'2026-06-15\\', 5, 11, \\'BUY\\', 990397, 143.7568, 953921.23), (385, DATE \\'2026-01-26\\', 2, 4, \\'SELL\\', 3589, 98.5136, 381850.54), (386, DATE \\'2026-05-05\\', 6, 15, \\'SELL\\', 308, 4.3007, 1324.62), (387, DATE \\'2026-01-12\\', 4, 7, \\'BUY\\', 32, 95.8221, 3066.31), (388, DATE \\'2026-06-05\\', 1, 1, \\'SELL\\', 4028, 181.9324, 732823.71), (389, DATE \\'2026-04-01\\', 3, 10, \\'SELL\\', 433776, 1.0483, 454727.38), (390, DATE \\'2026-03-12\\', 3, 12, \\'BUY\\', 318855, 1.2279, 391522.05), (391, DATE \\'2026-02-11\\', 6, 13, \\'BUY\\', 755, 2315.9759, 1748561.80), (392, DATE \\'2026-06-18\\', 5, 10, \\'SELL\\', 244354, 1.0418, 254568.00), (393, DATE \\'2026-03-23\\', 4, 6, \\'SELL\\', 1858, 98.1079, 182284.48), (394, DATE \\'2026-04-09\\', 1, 5, \\'BUY\\', 2304, 295.5175, 735342.11), (395, DATE \\'2026-02-06\\', 1, 1, \\'BUY\\', 939, 190.9736, 179324.21), (396, DATE \\'2026-06-17\\', 5, 11, \\'BUY\\', 708167, 142.1063, 674254.45), (397, DATE \\'2026-04-13\\', 6, 15, \\'BUY\\', 26, 4.3519, 113.15), (398, DATE \\'2026-01-21\\', 2, 13, \\'BUY\\', 733, 2317.7718, 1698926.73), (399, DATE \\'2026-06-10\\', 4, 7, \\'SELL\\', 1852, 102.4321, 189704.25), (400, DATE \\'2026-04-01\\', 3, 12, \\'BUY\\', 212966, 1.2851, 273682.61)'\n ];\n };\n auth: DefaultH2;\n}\n\n\n###Runtime\nRuntime cube::samples::trades::TradesRuntime\n{\n mappings:\n [\n ];\n connections:\n [\n cube::samples::trades::TradesDatabase:\n [\n connection_1: cube::samples::trades::TradesConnection\n ]\n ];\n}\n\n\n###Pure\nfunction cube::samples::trades::tradesAbove(minNotionalUsd: Float[1]): Relation<(TRADE_ID:Integer, TRADE_DATE:StrictDate, DESK_ID:Integer, SIDE:String, NOTIONAL_USD:Decimal)>[1]\n{\n #>{cube::samples::trades::TradesDatabase.TRADES_SAMPLE.TRADES}#\n ->filter(t|$t.NOTIONAL_USD > $minNotionalUsd)\n ->select(~[TRADE_ID, TRADE_DATE, DESK_ID, SIDE, NOTIONAL_USD])\n}\n\nfunction cube::samples::trades::deskBook(desk: String[1], side: String[0..1]): Relation<(TRADE_ID:Integer, TRADE_DATE:StrictDate, DESK:String, REGION:String, SIDE:String, NOTIONAL_USD:Decimal)>[1]\n{\n #>{cube::samples::trades::TradesDatabase.TRADES_SAMPLE.TRADES}#\n ->join(#>{cube::samples::trades::TradesDatabase.TRADES_SAMPLE.DESKS}#, JoinKind.INNER, {t, d|$t.DESK_ID == $d.ID})\n ->filter(r|($r.DESK == $desk) && ($side->isEmpty() || ($r.SIDE == $side->toOne())))\n ->select(~[TRADE_ID, TRADE_DATE, DESK, REGION, SIDE, NOTIONAL_USD])\n ->from(cube::samples::trades::TradesRuntime)\n}\n"
7
+ },
8
+ "runtime": "cube::samples::trades::TradesRuntime"
9
+ },
10
+ "query": {
11
+ "selected": "join101",
12
+ "nodes": [
13
+ {
14
+ "kind": "relational",
15
+ "id": "relational101",
16
+ "database": "cube::samples::trades::TradesDatabase",
17
+ "schema": "TRADES_SAMPLE",
18
+ "table": "TRADES",
19
+ "schemaSnapshot": [
20
+ {
21
+ "name": "TRADE_ID",
22
+ "type": {
23
+ "path": "meta::pure::precisePrimitives::Int"
24
+ },
25
+ "nullable": false
26
+ },
27
+ {
28
+ "name": "TRADE_DATE",
29
+ "type": {
30
+ "path": "StrictDate"
31
+ },
32
+ "nullable": false
33
+ },
34
+ {
35
+ "name": "DESK_ID",
36
+ "type": {
37
+ "path": "meta::pure::precisePrimitives::Int"
38
+ },
39
+ "nullable": false
40
+ },
41
+ {
42
+ "name": "INSTRUMENT_ID",
43
+ "type": {
44
+ "path": "meta::pure::precisePrimitives::Int"
45
+ },
46
+ "nullable": false
47
+ },
48
+ {
49
+ "name": "SIDE",
50
+ "type": {
51
+ "path": "meta::pure::precisePrimitives::Varchar",
52
+ "params": [4]
53
+ },
54
+ "nullable": false
55
+ },
56
+ {
57
+ "name": "QUANTITY",
58
+ "type": {
59
+ "path": "meta::pure::precisePrimitives::Int"
60
+ },
61
+ "nullable": false
62
+ },
63
+ {
64
+ "name": "PRICE",
65
+ "type": {
66
+ "path": "meta::pure::precisePrimitives::Numeric",
67
+ "params": [14, 4]
68
+ },
69
+ "nullable": false
70
+ },
71
+ {
72
+ "name": "NOTIONAL_USD",
73
+ "type": {
74
+ "path": "meta::pure::precisePrimitives::Numeric",
75
+ "params": [18, 2]
76
+ },
77
+ "nullable": false
78
+ }
79
+ ]
80
+ },
81
+ {
82
+ "kind": "relational",
83
+ "id": "relational102",
84
+ "database": "cube::samples::trades::TradesDatabase",
85
+ "schema": "TRADES_SAMPLE",
86
+ "table": "DESKS",
87
+ "schemaSnapshot": [
88
+ {
89
+ "name": "ID",
90
+ "type": {
91
+ "path": "meta::pure::precisePrimitives::Int"
92
+ },
93
+ "nullable": false
94
+ },
95
+ {
96
+ "name": "DESK",
97
+ "type": {
98
+ "path": "meta::pure::precisePrimitives::Varchar",
99
+ "params": [20]
100
+ },
101
+ "nullable": false
102
+ },
103
+ {
104
+ "name": "REGION",
105
+ "type": {
106
+ "path": "meta::pure::precisePrimitives::Varchar",
107
+ "params": [10]
108
+ },
109
+ "nullable": false
110
+ }
111
+ ]
112
+ },
113
+ {
114
+ "kind": "join",
115
+ "id": "join101",
116
+ "inputs": ["relational101", "relational102"],
117
+ "joinType": "LEFT_OUTER",
118
+ "leftColumns": ["DESK_ID"],
119
+ "rightColumns": ["ID"]
120
+ }
121
+ ]
122
+ }
123
+ }