@finos/legend-cube-builder 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -3
- package/docs/adding-an-operation.md +22 -12
- package/docs/demo/DEMO-FAST-NOTES.md +67 -0
- package/docs/demo/README.md +102 -0
- package/docs/demo/specs/duckdb-sales-pivot.cube.json +110 -0
- package/docs/demo/specs/trades-desks-1-joined.cube.json +123 -0
- package/docs/demo/specs/trades-desks-2-grouped.cube.json +140 -0
- package/docs/demo/specs/trades-desks-3-ranked.cube.json +158 -0
- package/docs/demo/specs/trades-desks-4-extended.cube.json +208 -0
- package/docs/demo/specs/trades-desks-5-final.cube.json +248 -0
- package/docs/hosting.md +50 -3
- package/docs/testing.md +32 -0
- package/lib/__lib__/LegendCubeCommand.d.ts +2 -0
- package/lib/__lib__/LegendCubeCommand.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeCommand.js +7 -0
- package/lib/__lib__/LegendCubeCommand.js.map +1 -1
- package/lib/__lib__/LegendCubeFunctionLabels.d.ts +29 -0
- package/lib/__lib__/LegendCubeFunctionLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeFunctionLabels.js +31 -0
- package/lib/__lib__/LegendCubeFunctionLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeHelpText.d.ts +5 -1
- package/lib/__lib__/LegendCubeHelpText.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeHelpText.js +14 -2
- package/lib/__lib__/LegendCubeHelpText.js.map +1 -1
- package/lib/__lib__/LegendCubeLabels.d.ts +100 -8
- package/lib/__lib__/LegendCubeLabels.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeLabels.js +129 -14
- package/lib/__lib__/LegendCubeLabels.js.map +1 -1
- package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts +26 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.js +26 -0
- package/lib/__lib__/LegendCubeProjectSourceLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeServiceLabels.d.ts +27 -0
- package/lib/__lib__/LegendCubeServiceLabels.d.ts.map +1 -0
- package/lib/__lib__/LegendCubeServiceLabels.js +32 -0
- package/lib/__lib__/LegendCubeServiceLabels.js.map +1 -0
- package/lib/__lib__/LegendCubeTesting.d.ts +7 -0
- package/lib/__lib__/LegendCubeTesting.d.ts.map +1 -1
- package/lib/__lib__/LegendCubeTesting.js +7 -0
- package/lib/__lib__/LegendCubeTesting.js.map +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.d.ts.map +1 -1
- package/lib/__test-utils__/CubeEngineTestSupport.js +2 -2
- package/lib/__test-utils__/CubeEngineTestSupport.js.map +1 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts +8 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubeExpressionTestUtils.js +20 -3
- package/lib/__test-utils__/CubeExpressionTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeFunctionTestOutline.d.ts +26 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.d.ts.map +1 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.js +56 -0
- package/lib/__test-utils__/CubeFunctionTestOutline.js.map +1 -0
- package/lib/__test-utils__/CubeLambdaCorpus.d.ts +36 -0
- package/lib/__test-utils__/CubeLambdaCorpus.d.ts.map +1 -0
- package/lib/__test-utils__/CubeLambdaCorpus.js +83 -0
- package/lib/__test-utils__/CubeLambdaCorpus.js.map +1 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts +6 -0
- package/lib/__test-utils__/CubePageTestUtils.d.ts.map +1 -1
- package/lib/__test-utils__/CubePageTestUtils.js +21 -0
- package/lib/__test-utils__/CubePageTestUtils.js.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.d.ts +9 -0
- package/lib/__test-utils__/CubeTestApplication.d.ts.map +1 -1
- package/lib/__test-utils__/CubeTestApplication.js +16 -0
- package/lib/__test-utils__/CubeTestApplication.js.map +1 -1
- package/lib/__test-utils__/FakeCubeEngine.d.ts +5 -0
- package/lib/__test-utils__/FakeCubeEngine.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeEngine.js +17 -0
- package/lib/__test-utils__/FakeCubeEngine.js.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts +7 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.d.ts.map +1 -1
- package/lib/__test-utils__/FakeCubeIngestCatalog.js +16 -0
- package/lib/__test-utils__/FakeCubeIngestCatalog.js.map +1 -1
- package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts +26 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.d.ts.map +1 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.js +40 -0
- package/lib/__test-utils__/FakeCubeServiceCatalog.js.map +1 -0
- package/lib/components/CubeAddItems.d.ts.map +1 -1
- package/lib/components/CubeAddItems.js +9 -6
- package/lib/components/CubeAddItems.js.map +1 -1
- package/lib/components/CubeDialogTheme.d.ts +25 -0
- package/lib/components/CubeDialogTheme.d.ts.map +1 -0
- package/lib/components/CubeDialogTheme.js +25 -0
- package/lib/components/CubeDialogTheme.js.map +1 -0
- package/lib/components/CubeEditor.d.ts +12 -1
- package/lib/components/CubeEditor.d.ts.map +1 -1
- package/lib/components/CubeEditor.js +16 -14
- package/lib/components/CubeEditor.js.map +1 -1
- package/lib/components/CubeFileMenu.d.ts +28 -0
- package/lib/components/CubeFileMenu.d.ts.map +1 -0
- package/lib/components/CubeFileMenu.js +77 -0
- package/lib/components/CubeFileMenu.js.map +1 -0
- package/lib/components/CubeLambdaImportBanner.d.ts +26 -0
- package/lib/components/CubeLambdaImportBanner.d.ts.map +1 -0
- package/lib/components/CubeLambdaImportBanner.js +47 -0
- package/lib/components/CubeLambdaImportBanner.js.map +1 -0
- package/lib/components/CubeNodeIcon.d.ts.map +1 -1
- package/lib/components/CubeNodeIcon.js +5 -1
- package/lib/components/CubeNodeIcon.js.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.d.ts.map +1 -1
- package/lib/components/CubeSchemaColumnsTable.js +2 -2
- package/lib/components/CubeSchemaColumnsTable.js.map +1 -1
- package/lib/components/canvas/CubeCanvas.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvas.js +38 -5
- package/lib/components/canvas/CubeCanvas.js.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js +2 -1
- package/lib/components/canvas/CubeCanvasContextMenu.js.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts +18 -1
- package/lib/components/canvas/CubeCanvasElements.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasElements.js +58 -3
- package/lib/components/canvas/CubeCanvasElements.js.map +1 -1
- package/lib/components/canvas/CubeCanvasLayout.js +1 -1
- package/lib/components/canvas/CubeCanvasNode.d.ts.map +1 -1
- package/lib/components/canvas/CubeCanvasNode.js +8 -4
- package/lib/components/canvas/CubeCanvasNode.js.map +1 -1
- package/lib/components/dev-settings/CubeDevSettings.d.ts +35 -0
- package/lib/components/dev-settings/CubeDevSettings.d.ts.map +1 -0
- package/lib/components/dev-settings/CubeDevSettings.js +50 -0
- package/lib/components/dev-settings/CubeDevSettings.js.map +1 -0
- package/lib/components/editors/CubeColumnChecklist.d.ts.map +1 -1
- package/lib/components/editors/CubeColumnChecklist.js +2 -2
- package/lib/components/editors/CubeColumnChecklist.js.map +1 -1
- package/lib/components/editors/CubeColumnPicker.d.ts.map +1 -1
- package/lib/components/editors/CubeColumnPicker.js +3 -3
- package/lib/components/editors/CubeColumnPicker.js.map +1 -1
- package/lib/components/editors/CubeConcatEditor.js +2 -2
- package/lib/components/editors/CubeConcatEditor.js.map +1 -1
- package/lib/components/editors/CubeExpressionFilterEditor.d.ts +25 -0
- package/lib/components/editors/CubeExpressionFilterEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js +83 -0
- package/lib/components/editors/CubeExpressionFilterEditor.js.map +1 -0
- package/lib/components/editors/CubeExtendEditor.d.ts +2 -0
- package/lib/components/editors/CubeExtendEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeExtendEditor.js +3 -3
- package/lib/components/editors/CubeExtendEditor.js.map +1 -1
- package/lib/components/editors/CubeFilterEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeFilterEditor.js +13 -2
- package/lib/components/editors/CubeFilterEditor.js.map +1 -1
- package/lib/components/editors/CubeFunctionSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeFunctionSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeFunctionSourceEditor.js +55 -0
- package/lib/components/editors/CubeFunctionSourceEditor.js.map +1 -0
- package/lib/components/editors/CubeJoinEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeJoinEditor.js +16 -4
- package/lib/components/editors/CubeJoinEditor.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorPanel.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPanel.js +18 -8
- package/lib/components/editors/CubeNodeEditorPanel.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts +5 -1
- package/lib/components/editors/CubeNodeEditorPopper.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorPopper.js +10 -2
- package/lib/components/editors/CubeNodeEditorPopper.js.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.d.ts.map +1 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js +9 -1
- package/lib/components/editors/CubeNodeEditorRegistry.js.map +1 -1
- package/lib/components/editors/CubePivotEditor.d.ts +26 -0
- package/lib/components/editors/CubePivotEditor.d.ts.map +1 -0
- package/lib/components/editors/CubePivotEditor.js +93 -0
- package/lib/components/editors/CubePivotEditor.js.map +1 -0
- package/lib/components/editors/CubeRestrictEditor.d.ts.map +1 -1
- package/lib/components/editors/CubeRestrictEditor.js +2 -2
- package/lib/components/editors/CubeRestrictEditor.js.map +1 -1
- package/lib/components/editors/CubeServiceSourceEditor.d.ts +25 -0
- package/lib/components/editors/CubeServiceSourceEditor.d.ts.map +1 -0
- package/lib/components/editors/CubeServiceSourceEditor.js +41 -0
- package/lib/components/editors/CubeServiceSourceEditor.js.map +1 -0
- package/lib/components/grid/CubeColumnFormatDialog.d.ts +28 -0
- package/lib/components/grid/CubeColumnFormatDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeColumnFormatDialog.js +94 -0
- package/lib/components/grid/CubeColumnFormatDialog.js.map +1 -0
- package/lib/components/grid/CubeDrilldownBar.d.ts +37 -0
- package/lib/components/grid/CubeDrilldownBar.d.ts.map +1 -0
- package/lib/components/grid/CubeDrilldownBar.js +77 -0
- package/lib/components/grid/CubeDrilldownBar.js.map +1 -0
- package/lib/components/grid/CubeGridRegion.d.ts.map +1 -1
- package/lib/components/grid/CubeGridRegion.js +40 -26
- package/lib/components/grid/CubeGridRegion.js.map +1 -1
- package/lib/components/grid/CubeGridValues.d.ts +31 -1
- package/lib/components/grid/CubeGridValues.d.ts.map +1 -1
- package/lib/components/grid/CubeGridValues.js +108 -1
- package/lib/components/grid/CubeGridValues.js.map +1 -1
- package/lib/components/grid/CubeResultGrid.d.ts +68 -5
- package/lib/components/grid/CubeResultGrid.d.ts.map +1 -1
- package/lib/components/grid/CubeResultGrid.js +308 -35
- package/lib/components/grid/CubeResultGrid.js.map +1 -1
- package/lib/components/grid/CubeRunStatsPanel.d.ts +28 -0
- package/lib/components/grid/CubeRunStatsPanel.d.ts.map +1 -0
- package/lib/components/grid/CubeRunStatsPanel.js +61 -0
- package/lib/components/grid/CubeRunStatsPanel.js.map +1 -0
- package/lib/components/grid/CubeServerSideGrid.d.ts +36 -0
- package/lib/components/grid/CubeServerSideGrid.d.ts.map +1 -0
- package/lib/components/grid/CubeServerSideGrid.js +114 -0
- package/lib/components/grid/CubeServerSideGrid.js.map +1 -0
- package/lib/components/grid/CubeSqlDialog.d.ts +24 -0
- package/lib/components/grid/CubeSqlDialog.d.ts.map +1 -0
- package/lib/components/grid/CubeSqlDialog.js +39 -0
- package/lib/components/grid/CubeSqlDialog.js.map +1 -0
- package/lib/components/grid/CubeSqlFormat.d.ts +20 -0
- package/lib/components/grid/CubeSqlFormat.d.ts.map +1 -0
- package/lib/components/grid/CubeSqlFormat.js +32 -0
- package/lib/components/grid/CubeSqlFormat.js.map +1 -0
- package/lib/components/palette/CubePalette.d.ts.map +1 -1
- package/lib/components/palette/CubePalette.js +32 -13
- package/lib/components/palette/CubePalette.js.map +1 -1
- package/lib/components/show-pure/CubeShowPureDialog.d.ts +4 -1
- package/lib/components/show-pure/CubeShowPureDialog.d.ts.map +1 -1
- package/lib/components/show-pure/CubeShowPureDialog.js +8 -4
- package/lib/components/show-pure/CubeShowPureDialog.js.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeDataProductTab.js +37 -16
- package/lib/components/source-picker/CubeDataProductTab.js.map +1 -1
- package/lib/components/source-picker/CubeDirectConnectionTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeDirectConnectionTab.js +6 -4
- package/lib/components/source-picker/CubeDirectConnectionTab.js.map +1 -1
- package/lib/components/source-picker/CubeFunctionSteps.d.ts +36 -0
- package/lib/components/source-picker/CubeFunctionSteps.d.ts.map +1 -0
- package/lib/components/source-picker/CubeFunctionSteps.js +76 -0
- package/lib/components/source-picker/CubeFunctionSteps.js.map +1 -0
- package/lib/components/source-picker/CubeIngestTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeIngestTab.js +39 -16
- package/lib/components/source-picker/CubeIngestTab.js.map +1 -1
- package/lib/components/source-picker/CubeInlineModelTab.d.ts +3 -2
- package/lib/components/source-picker/CubeInlineModelTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeInlineModelTab.js +23 -13
- package/lib/components/source-picker/CubeInlineModelTab.js.map +1 -1
- package/lib/components/source-picker/CubePickerListItem.d.ts +47 -0
- package/lib/components/source-picker/CubePickerListItem.d.ts.map +1 -0
- package/lib/components/source-picker/CubePickerListItem.js +62 -0
- package/lib/components/source-picker/CubePickerListItem.js.map +1 -0
- package/lib/components/source-picker/CubeProjectTab.d.ts +4 -3
- package/lib/components/source-picker/CubeProjectTab.d.ts.map +1 -1
- package/lib/components/source-picker/CubeProjectTab.js +7 -4
- package/lib/components/source-picker/CubeProjectTab.js.map +1 -1
- package/lib/components/source-picker/CubeServiceTab.d.ts +27 -0
- package/lib/components/source-picker/CubeServiceTab.d.ts.map +1 -0
- package/lib/components/source-picker/CubeServiceTab.js +36 -0
- package/lib/components/source-picker/CubeServiceTab.js.map +1 -0
- package/lib/components/source-picker/CubeSourcePicker.d.ts.map +1 -1
- package/lib/components/source-picker/CubeSourcePicker.js +16 -3
- package/lib/components/source-picker/CubeSourcePicker.js.map +1 -1
- package/lib/components/source-picker/CubeTablePreview.d.ts +29 -0
- package/lib/components/source-picker/CubeTablePreview.d.ts.map +1 -0
- package/lib/components/source-picker/CubeTablePreview.js +10 -0
- package/lib/components/source-picker/CubeTablePreview.js.map +1 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.d.ts +27 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.d.ts.map +1 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.js +38 -0
- package/lib/components/spec-transfer/CubeImportPureDialog.js.map +1 -0
- package/lib/components/spec-transfer/CubeSpecTransferDialog.d.ts.map +1 -1
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js +9 -3
- package/lib/components/spec-transfer/CubeSpecTransferDialog.js.map +1 -1
- package/lib/graph-manager/CubeDataProductCatalog.d.ts +10 -0
- package/lib/graph-manager/CubeDataProductCatalog.d.ts.map +1 -1
- package/lib/graph-manager/CubeDataProductCatalog.js.map +1 -1
- package/lib/graph-manager/CubeEngine.d.ts +46 -1
- package/lib/graph-manager/CubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/CubeEngine.js.map +1 -1
- package/lib/graph-manager/CubeEngineClientSettings.d.ts +43 -0
- package/lib/graph-manager/CubeEngineClientSettings.d.ts.map +1 -0
- package/lib/graph-manager/CubeEngineClientSettings.js +51 -0
- package/lib/graph-manager/CubeEngineClientSettings.js.map +1 -0
- package/lib/graph-manager/CubeIngest.d.ts +5 -0
- package/lib/graph-manager/CubeIngest.d.ts.map +1 -1
- package/lib/graph-manager/CubeIngest.js +10 -0
- package/lib/graph-manager/CubeIngest.js.map +1 -1
- package/lib/graph-manager/CubeIngestCatalog.d.ts +26 -0
- package/lib/graph-manager/CubeIngestCatalog.d.ts.map +1 -1
- package/lib/graph-manager/CubeIngestCatalog.js +6 -0
- package/lib/graph-manager/CubeIngestCatalog.js.map +1 -1
- package/lib/graph-manager/CubeLakehouseRuntime.d.ts +29 -0
- package/lib/graph-manager/CubeLakehouseRuntime.d.ts.map +1 -0
- package/lib/graph-manager/CubeLakehouseRuntime.js +40 -0
- package/lib/graph-manager/CubeLakehouseRuntime.js.map +1 -0
- package/lib/graph-manager/CubeProjectCatalog.d.ts +3 -3
- package/lib/graph-manager/CubeService.d.ts +20 -0
- package/lib/graph-manager/CubeService.d.ts.map +1 -0
- package/lib/graph-manager/CubeService.js +22 -0
- package/lib/graph-manager/CubeService.js.map +1 -0
- package/lib/graph-manager/CubeServiceCatalog.d.ts +31 -0
- package/lib/graph-manager/CubeServiceCatalog.d.ts.map +1 -0
- package/lib/graph-manager/CubeServiceCatalog.js +17 -0
- package/lib/graph-manager/CubeServiceCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts +52 -5
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js +63 -5
- package/lib/graph-manager/protocol/pure/CubeEngineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts +9 -6
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js +12 -8
- package/lib/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts +30 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js +229 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js +18 -9
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts +4 -9
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeIngestModel.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts +34 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js +332 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js +49 -10
- package/lib/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js +3 -1
- package/lib/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js +2 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts +18 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js +74 -6
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js +7 -4
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.js.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts +31 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.d.ts.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js +69 -0
- package/lib/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.js.map +1 -0
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.d.ts.map +1 -1
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js +6 -2
- package/lib/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/index.d.ts +12 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +10 -1
- package/lib/index.js.map +1 -1
- package/lib/stores/CubeAddPlacement.d.ts +10 -3
- package/lib/stores/CubeAddPlacement.d.ts.map +1 -1
- package/lib/stores/CubeAddPlacement.js +16 -5
- package/lib/stores/CubeAddPlacement.js.map +1 -1
- package/lib/stores/CubeDevSettingsState.d.ts +47 -0
- package/lib/stores/CubeDevSettingsState.d.ts.map +1 -0
- package/lib/stores/CubeDevSettingsState.js +99 -0
- package/lib/stores/CubeDevSettingsState.js.map +1 -0
- package/lib/stores/CubeEditorState.d.ts +173 -43
- package/lib/stores/CubeEditorState.d.ts.map +1 -1
- package/lib/stores/CubeEditorState.js +498 -113
- package/lib/stores/CubeEditorState.js.map +1 -1
- package/lib/stores/CubeEngineChecks.d.ts +59 -0
- package/lib/stores/CubeEngineChecks.d.ts.map +1 -0
- package/lib/stores/CubeEngineChecks.js +100 -0
- package/lib/stores/CubeEngineChecks.js.map +1 -0
- package/lib/stores/CubeExamples.d.ts.map +1 -1
- package/lib/stores/CubeExamples.js +39 -2
- package/lib/stores/CubeExamples.js.map +1 -1
- package/lib/stores/CubeExamplesState.d.ts +1 -1
- package/lib/stores/CubeExamplesState.d.ts.map +1 -1
- package/lib/stores/CubeExamplesState.js +2 -2
- package/lib/stores/CubeExamplesState.js.map +1 -1
- package/lib/stores/CubeExecutionState.d.ts.map +1 -1
- package/lib/stores/CubeExecutionState.js +24 -33
- package/lib/stores/CubeExecutionState.js.map +1 -1
- package/lib/stores/CubeExportState.d.ts +41 -0
- package/lib/stores/CubeExportState.d.ts.map +1 -0
- package/lib/stores/CubeExportState.js +134 -0
- package/lib/stores/CubeExportState.js.map +1 -0
- package/lib/stores/CubeExpressionFilterCheck.d.ts +51 -0
- package/lib/stores/CubeExpressionFilterCheck.d.ts.map +1 -0
- package/lib/stores/CubeExpressionFilterCheck.js +134 -0
- package/lib/stores/CubeExpressionFilterCheck.js.map +1 -0
- package/lib/stores/CubeExtendTyping.d.ts +6 -14
- package/lib/stores/CubeExtendTyping.d.ts.map +1 -1
- package/lib/stores/CubeExtendTyping.js +6 -33
- package/lib/stores/CubeExtendTyping.js.map +1 -1
- package/lib/stores/CubeFunctionRecheck.d.ts +30 -0
- package/lib/stores/CubeFunctionRecheck.d.ts.map +1 -0
- package/lib/stores/CubeFunctionRecheck.js +67 -0
- package/lib/stores/CubeFunctionRecheck.js.map +1 -0
- package/lib/stores/CubeGridFetcher.d.ts +75 -0
- package/lib/stores/CubeGridFetcher.d.ts.map +1 -0
- package/lib/stores/CubeGridFetcher.js +197 -0
- package/lib/stores/CubeGridFetcher.js.map +1 -0
- package/lib/stores/CubeGridQuickActions.d.ts +18 -6
- package/lib/stores/CubeGridQuickActions.d.ts.map +1 -1
- package/lib/stores/CubeGridQuickActions.js +32 -12
- package/lib/stores/CubeGridQuickActions.js.map +1 -1
- package/lib/stores/CubeGridState.d.ts +136 -0
- package/lib/stores/CubeGridState.d.ts.map +1 -0
- package/lib/stores/CubeGridState.js +317 -0
- package/lib/stores/CubeGridState.js.map +1 -0
- package/lib/stores/CubeHost.d.ts +42 -0
- package/lib/stores/CubeHost.d.ts.map +1 -1
- package/lib/stores/CubeHost.js +4 -0
- package/lib/stores/CubeHost.js.map +1 -1
- package/lib/stores/CubeLambdaImportState.d.ts +118 -0
- package/lib/stores/CubeLambdaImportState.d.ts.map +1 -0
- package/lib/stores/CubeLambdaImportState.js +302 -0
- package/lib/stores/CubeLambdaImportState.js.map +1 -0
- package/lib/stores/CubeLambdaSources.d.ts +45 -0
- package/lib/stores/CubeLambdaSources.d.ts.map +1 -0
- package/lib/stores/CubeLambdaSources.js +261 -0
- package/lib/stores/CubeLambdaSources.js.map +1 -0
- package/lib/stores/CubeQueryRun.d.ts +59 -0
- package/lib/stores/CubeQueryRun.d.ts.map +1 -0
- package/lib/stores/CubeQueryRun.js +101 -0
- package/lib/stores/CubeQueryRun.js.map +1 -0
- package/lib/stores/CubeRunStatsState.d.ts +61 -0
- package/lib/stores/CubeRunStatsState.d.ts.map +1 -0
- package/lib/stores/CubeRunStatsState.js +54 -0
- package/lib/stores/CubeRunStatsState.js.map +1 -0
- package/lib/stores/CubeRunningStepLambda.d.ts +25 -0
- package/lib/stores/CubeRunningStepLambda.d.ts.map +1 -0
- package/lib/stores/CubeRunningStepLambda.js +45 -0
- package/lib/stores/CubeRunningStepLambda.js.map +1 -0
- package/lib/stores/CubeServiceRecheck.d.ts +29 -0
- package/lib/stores/CubeServiceRecheck.d.ts.map +1 -0
- package/lib/stores/CubeServiceRecheck.js +33 -0
- package/lib/stores/CubeServiceRecheck.js.map +1 -0
- package/lib/stores/CubeShowPureState.d.ts +14 -1
- package/lib/stores/CubeShowPureState.d.ts.map +1 -1
- package/lib/stores/CubeShowPureState.js +41 -11
- package/lib/stores/CubeShowPureState.js.map +1 -1
- package/lib/stores/CubeSourcePickerState.d.ts +20 -4
- package/lib/stores/CubeSourcePickerState.d.ts.map +1 -1
- package/lib/stores/CubeSourcePickerState.js +75 -14
- package/lib/stores/CubeSourcePickerState.js.map +1 -1
- package/lib/stores/LocalModelCatalog.d.ts.map +1 -1
- package/lib/stores/LocalModelCatalog.js +3 -1
- package/lib/stores/LocalModelCatalog.js.map +1 -1
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts +91 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js +254 -0
- package/lib/stores/editors/CubeExpressionFilterDraft.js.map +1 -0
- package/lib/stores/editors/CubeFunctionDraft.d.ts +34 -0
- package/lib/stores/editors/CubeFunctionDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubeFunctionDraft.js +69 -0
- package/lib/stores/editors/CubeFunctionDraft.js.map +1 -0
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts +4 -2
- package/lib/stores/editors/CubeNodeDraftRegistry.d.ts.map +1 -1
- package/lib/stores/editors/CubeNodeDraftRegistry.js +20 -3
- package/lib/stores/editors/CubeNodeDraftRegistry.js.map +1 -1
- package/lib/stores/editors/CubePivotDraft.d.ts +93 -0
- package/lib/stores/editors/CubePivotDraft.d.ts.map +1 -0
- package/lib/stores/editors/CubePivotDraft.js +267 -0
- package/lib/stores/editors/CubePivotDraft.js.map +1 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts +26 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.d.ts.map +1 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.js +46 -0
- package/lib/stores/fixtures/CubeSalesDuckDbModel.js.map +1 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts +4 -0
- package/lib/stores/fixtures/CubeTradesModel.d.ts.map +1 -1
- package/lib/stores/fixtures/CubeTradesModel.js +31 -1
- package/lib/stores/fixtures/CubeTradesModel.js.map +1 -1
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts +34 -5
- package/lib/stores/source-picker/CubeDataProductTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeDataProductTabState.js +111 -26
- package/lib/stores/source-picker/CubeDataProductTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts +25 -2
- package/lib/stores/source-picker/CubeDirectConnectionTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js +183 -31
- package/lib/stores/source-picker/CubeDirectConnectionTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeIngestTabState.d.ts +22 -9
- package/lib/stores/source-picker/CubeIngestTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeIngestTabState.js +84 -29
- package/lib/stores/source-picker/CubeIngestTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts +100 -4
- package/lib/stores/source-picker/CubeInlineModelTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeInlineModelTabState.js +415 -28
- package/lib/stores/source-picker/CubeInlineModelTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeProjectTabState.d.ts +18 -3
- package/lib/stores/source-picker/CubeProjectTabState.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeProjectTabState.js +26 -1
- package/lib/stores/source-picker/CubeProjectTabState.js.map +1 -1
- package/lib/stores/source-picker/CubeServiceTabState.d.ts +74 -0
- package/lib/stores/source-picker/CubeServiceTabState.d.ts.map +1 -0
- package/lib/stores/source-picker/CubeServiceTabState.js +216 -0
- package/lib/stores/source-picker/CubeServiceTabState.js.map +1 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts +15 -3
- package/lib/stores/source-picker/CubeSourcePickerTab.d.ts.map +1 -1
- package/lib/stores/source-picker/CubeSourcePickerTab.js +21 -0
- package/lib/stores/source-picker/CubeSourcePickerTab.js.map +1 -1
- package/package.json +10 -9
- package/src/__lib__/LegendCubeCommand.ts +7 -0
- package/src/__lib__/LegendCubeFunctionLabels.ts +41 -0
- package/src/__lib__/LegendCubeHelpText.ts +23 -1
- package/src/__lib__/LegendCubeLabels.ts +170 -13
- package/src/__lib__/LegendCubeProjectSourceLabels.ts +26 -0
- package/src/__lib__/LegendCubeServiceLabels.ts +41 -0
- package/src/__lib__/LegendCubeTesting.ts +7 -0
- package/src/__test-utils__/CubeEngineTestSupport.ts +2 -1
- package/src/__test-utils__/CubeExpressionTestUtils.ts +29 -2
- package/src/__test-utils__/CubeFunctionTestOutline.ts +78 -0
- package/src/__test-utils__/CubeLambdaCorpus.ts +137 -0
- package/src/__test-utils__/CubePageTestUtils.tsx +34 -0
- package/src/__test-utils__/CubeTestApplication.ts +25 -0
- package/src/__test-utils__/FakeCubeEngine.ts +27 -0
- package/src/__test-utils__/FakeCubeIngestCatalog.ts +18 -0
- package/src/__test-utils__/FakeCubeServiceCatalog.ts +57 -0
- package/src/components/CubeAddItems.tsx +13 -6
- package/src/components/CubeDialogTheme.ts +25 -0
- package/src/components/CubeEditor.tsx +155 -129
- package/src/components/CubeFileMenu.tsx +127 -0
- package/src/components/CubeLambdaImportBanner.tsx +97 -0
- package/src/components/CubeNodeIcon.tsx +7 -0
- package/src/components/CubeSchemaColumnsTable.tsx +7 -2
- package/src/components/canvas/CubeCanvas.tsx +52 -13
- package/src/components/canvas/CubeCanvasContextMenu.tsx +33 -2
- package/src/components/canvas/CubeCanvasElements.ts +76 -3
- package/src/components/canvas/CubeCanvasLayout.ts +1 -1
- package/src/components/canvas/CubeCanvasNode.tsx +30 -3
- package/src/components/dev-settings/CubeDevSettings.tsx +154 -0
- package/src/components/editors/CubeColumnChecklist.tsx +8 -2
- package/src/components/editors/CubeColumnPicker.tsx +6 -3
- package/src/components/editors/CubeConcatEditor.tsx +2 -2
- package/src/components/editors/CubeExpressionFilterEditor.tsx +193 -0
- package/src/components/editors/CubeExtendEditor.tsx +3 -3
- package/src/components/editors/CubeFilterEditor.tsx +13 -1
- package/src/components/editors/CubeFunctionSourceEditor.tsx +140 -0
- package/src/components/editors/CubeJoinEditor.tsx +23 -4
- package/src/components/editors/CubeNodeEditorPanel.tsx +22 -10
- package/src/components/editors/CubeNodeEditorPopper.tsx +9 -1
- package/src/components/editors/CubeNodeEditorRegistry.ts +12 -0
- package/src/components/editors/CubePivotEditor.tsx +277 -0
- package/src/components/editors/CubeRestrictEditor.tsx +8 -2
- package/src/components/editors/CubeServiceSourceEditor.tsx +77 -0
- package/src/components/grid/CubeColumnFormatDialog.tsx +289 -0
- package/src/components/grid/CubeDrilldownBar.tsx +219 -0
- package/src/components/grid/CubeGridRegion.tsx +170 -54
- package/src/components/grid/CubeGridValues.ts +146 -1
- package/src/components/grid/CubeResultGrid.tsx +443 -41
- package/src/components/grid/CubeRunStatsPanel.tsx +156 -0
- package/src/components/grid/CubeServerSideGrid.tsx +200 -0
- package/src/components/grid/CubeSqlDialog.tsx +90 -0
- package/src/components/grid/CubeSqlFormat.ts +37 -0
- package/src/components/palette/CubePalette.tsx +45 -12
- package/src/components/show-pure/CubeShowPureDialog.tsx +19 -5
- package/src/components/source-picker/CubeDataProductTab.tsx +169 -75
- package/src/components/source-picker/CubeDirectConnectionTab.tsx +42 -30
- package/src/components/source-picker/CubeFunctionSteps.tsx +244 -0
- package/src/components/source-picker/CubeIngestTab.tsx +159 -79
- package/src/components/source-picker/CubeInlineModelTab.tsx +110 -81
- package/src/components/source-picker/CubePickerListItem.tsx +118 -0
- package/src/components/source-picker/CubeProjectTab.tsx +6 -3
- package/src/components/source-picker/CubeServiceTab.tsx +151 -0
- package/src/components/source-picker/CubeSourcePicker.tsx +54 -18
- package/src/components/source-picker/CubeTablePreview.tsx +49 -0
- package/src/components/spec-transfer/CubeImportPureDialog.tsx +122 -0
- package/src/components/spec-transfer/CubeSpecTransferDialog.tsx +21 -8
- package/src/graph-manager/CubeDataProductCatalog.ts +11 -0
- package/src/graph-manager/CubeEngine.ts +51 -1
- package/src/graph-manager/CubeEngineClientSettings.ts +64 -0
- package/src/graph-manager/CubeIngest.ts +15 -0
- package/src/graph-manager/CubeIngestCatalog.ts +33 -0
- package/src/graph-manager/CubeLakehouseRuntime.ts +43 -0
- package/src/graph-manager/CubeProjectCatalog.ts +3 -3
- package/src/graph-manager/CubeService.ts +29 -0
- package/src/graph-manager/CubeServiceCatalog.ts +35 -0
- package/src/graph-manager/protocol/pure/CubeEngineBuilder.ts +115 -5
- package/src/graph-manager/protocol/pure/v1/V1_CubeDataProductModel.ts +13 -7
- package/src/graph-manager/protocol/pure/v1/V1_CubeFunctionOutlineBuilder.ts +312 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestDefinition.ts +35 -9
- package/src/graph-manager/protocol/pure/v1/V1_CubeIngestModel.ts +6 -15
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaReader.ts +471 -0
- package/src/graph-manager/protocol/pure/v1/V1_CubeLambdaSerializer.ts +70 -15
- package/src/graph-manager/protocol/pure/v1/V1_CubeModelOutlineBuilder.ts +3 -1
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeConnectionExplorer.ts +7 -1
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeEngine.ts +122 -7
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeProjectCatalog.ts +9 -4
- package/src/graph-manager/protocol/pure/v1/V1_LegendCubeServiceCatalog.ts +92 -0
- package/src/graph-manager/protocol/pure/v1/__test-utils__/V1_CubeEngineTestUtils.ts +6 -1
- package/src/index.ts +32 -2
- package/src/stores/CubeAddPlacement.ts +25 -5
- package/src/stores/CubeDevSettingsState.ts +117 -0
- package/src/stores/CubeEditorState.ts +687 -197
- package/src/stores/CubeEngineChecks.ts +240 -0
- package/src/stores/CubeExamples.ts +70 -1
- package/src/stores/CubeExamplesState.ts +4 -2
- package/src/stores/CubeExecutionState.ts +26 -57
- package/src/stores/CubeExportState.ts +196 -0
- package/src/stores/CubeExpressionFilterCheck.ts +218 -0
- package/src/stores/CubeExtendTyping.ts +6 -46
- package/src/stores/CubeFunctionRecheck.ts +97 -0
- package/src/stores/CubeGridFetcher.ts +302 -0
- package/src/stores/CubeGridQuickActions.ts +33 -11
- package/src/stores/CubeGridState.ts +450 -0
- package/src/stores/CubeHost.ts +48 -0
- package/src/stores/CubeLambdaImportState.ts +434 -0
- package/src/stores/CubeLambdaSources.ts +390 -0
- package/src/stores/CubeQueryRun.ts +169 -0
- package/src/stores/CubeRunStatsState.ts +91 -0
- package/src/stores/CubeRunningStepLambda.ts +62 -0
- package/src/stores/CubeServiceRecheck.ts +53 -0
- package/src/stores/CubeShowPureState.ts +51 -12
- package/src/stores/CubeSourcePickerState.ts +89 -13
- package/src/stores/LocalModelCatalog.ts +6 -1
- package/src/stores/editors/CubeExpressionFilterDraft.ts +385 -0
- package/src/stores/editors/CubeFunctionDraft.ts +92 -0
- package/src/stores/editors/CubeNodeDraftRegistry.ts +27 -2
- package/src/stores/editors/CubePivotDraft.ts +355 -0
- package/src/stores/fixtures/CubeSalesDuckDbModel.ts +54 -0
- package/src/stores/fixtures/CubeTradesModel.ts +36 -1
- package/src/stores/source-picker/CubeDataProductTabState.ts +162 -35
- package/src/stores/source-picker/CubeDirectConnectionTabState.ts +246 -47
- package/src/stores/source-picker/CubeIngestTabState.ts +112 -38
- package/src/stores/source-picker/CubeInlineModelTabState.ts +514 -34
- package/src/stores/source-picker/CubeProjectTabState.ts +35 -3
- package/src/stores/source-picker/CubeServiceTabState.ts +288 -0
- package/src/stores/source-picker/CubeSourcePickerTab.ts +31 -2
- package/tsconfig.json +50 -0
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
type ModelContext,
|
|
21
21
|
RELATIONAL_TABLE_SOURCE_DEFINITION,
|
|
22
22
|
RelationalTableSource,
|
|
23
|
+
Schema,
|
|
23
24
|
} from '@finos/legend-cube';
|
|
24
25
|
import { assertErrorThrown, type GeneratorFn } from '@finos/legend-shared';
|
|
25
26
|
import {
|
|
@@ -63,6 +64,8 @@ import {
|
|
|
63
64
|
import {
|
|
64
65
|
type CubeSourcePickerTab,
|
|
65
66
|
CubeSourcePickerTabKey,
|
|
67
|
+
CUBE_TABLE_PREVIEW_DELAY_MS,
|
|
68
|
+
generateCubeNodeIds,
|
|
66
69
|
} from './CubeSourcePickerTab.js';
|
|
67
70
|
|
|
68
71
|
/** An error as the tab shows it: its first line, with the rest on demand (R48) */
|
|
@@ -147,11 +150,19 @@ export class CubeDirectConnectionTabState implements CubeSourcePickerTab {
|
|
|
147
150
|
/** The schema's tables; none until they are listed */
|
|
148
151
|
schemaTables: readonly CubeExploredTable[] | undefined;
|
|
149
152
|
/** The picked table, by its stored (quoted) name */
|
|
150
|
-
|
|
153
|
+
/** The picked tables' stored names, in the order picked; several are added at once */
|
|
154
|
+
tableNames: readonly string[] = [];
|
|
151
155
|
tableSearch = '';
|
|
152
156
|
isTesting = false;
|
|
153
157
|
isListing = false;
|
|
154
158
|
isResolving = false;
|
|
159
|
+
/** The table, by its stored name, whose columns the tab shows under the list: the one picked last */
|
|
160
|
+
previewTableName: string | undefined;
|
|
161
|
+
/** The columns of each table previewed, or why they couldn't be read, by schema and stored name */
|
|
162
|
+
previewSchemas: ReadonlyMap<string, Schema | string> = new Map();
|
|
163
|
+
/** Counts the connection's changes, so a late preview is dropped */
|
|
164
|
+
private previewGeneration = 0;
|
|
165
|
+
private previewTimer: ReturnType<typeof setTimeout> | undefined;
|
|
155
166
|
error: CubeDirectConnectionError | undefined;
|
|
156
167
|
/** DuckDB only: a CSV to add to the setup SQL as a table, pasted or read from a file */
|
|
157
168
|
csvText = '';
|
|
@@ -176,11 +187,16 @@ export class CubeDirectConnectionTabState implements CubeSourcePickerTab {
|
|
|
176
187
|
schemas: observable.ref,
|
|
177
188
|
schemaName: observable,
|
|
178
189
|
schemaTables: observable.ref,
|
|
179
|
-
|
|
190
|
+
tableNames: observable.ref,
|
|
191
|
+
tableName: computed,
|
|
180
192
|
tableSearch: observable,
|
|
181
193
|
isTesting: observable,
|
|
182
194
|
isListing: observable,
|
|
183
195
|
isResolving: observable,
|
|
196
|
+
previewTableName: observable,
|
|
197
|
+
previewSchemas: observable.ref,
|
|
198
|
+
previewedColumns: computed,
|
|
199
|
+
loadPreview: flow,
|
|
184
200
|
error: observable.ref,
|
|
185
201
|
csvText: observable,
|
|
186
202
|
csvTableName: observable,
|
|
@@ -203,6 +219,7 @@ export class CubeDirectConnectionTabState implements CubeSourcePickerTab {
|
|
|
203
219
|
setDuckDbPath: action,
|
|
204
220
|
selectSchema: action,
|
|
205
221
|
selectTable: action,
|
|
222
|
+
toggleTable: action,
|
|
206
223
|
setTableSearch: action,
|
|
207
224
|
setCsvText: action,
|
|
208
225
|
setCsvTableName: action,
|
|
@@ -303,9 +320,20 @@ export class CubeDirectConnectionTabState implements CubeSourcePickerTab {
|
|
|
303
320
|
);
|
|
304
321
|
}
|
|
305
322
|
|
|
323
|
+
/** The one picked table's stored name; none when several are */
|
|
324
|
+
get tableName(): string | undefined {
|
|
325
|
+
return this.tableNames.length === 1 ? this.tableNames[0] : undefined;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/** How many tables Add adds */
|
|
329
|
+
get pickedCount(): number {
|
|
330
|
+
return this.tableNames.length;
|
|
331
|
+
}
|
|
332
|
+
|
|
306
333
|
get canConfirm(): boolean {
|
|
307
|
-
|
|
308
|
-
|
|
334
|
+
// a picked table hidden by the search still counts
|
|
335
|
+
const tables = this.tableNames.map((name) =>
|
|
336
|
+
this.schemaTables?.find((candidate) => candidate.storedName === name),
|
|
309
337
|
);
|
|
310
338
|
return (
|
|
311
339
|
this.isOffered &&
|
|
@@ -315,8 +343,10 @@ export class CubeDirectConnectionTabState implements CubeSourcePickerTab {
|
|
|
315
343
|
this.connection !== undefined &&
|
|
316
344
|
this.connection === this.testedConnection &&
|
|
317
345
|
this.schemaName !== undefined &&
|
|
318
|
-
|
|
319
|
-
|
|
346
|
+
tables.length > 0 &&
|
|
347
|
+
tables.every(
|
|
348
|
+
(table) => table !== undefined && isExploredTableSelectable(table),
|
|
349
|
+
)
|
|
320
350
|
);
|
|
321
351
|
}
|
|
322
352
|
|
|
@@ -434,9 +464,101 @@ export class CubeDirectConnectionTabState implements CubeSourcePickerTab {
|
|
|
434
464
|
}
|
|
435
465
|
}
|
|
436
466
|
|
|
467
|
+
/** Picks the table alone, in place of any picked, and previews its columns */
|
|
437
468
|
selectTable(storedName: string | undefined): void {
|
|
438
|
-
this.
|
|
469
|
+
this.tableNames = storedName === undefined ? [] : [storedName];
|
|
470
|
+
this.error = undefined;
|
|
471
|
+
this.preview(storedName);
|
|
472
|
+
}
|
|
473
|
+
|
|
474
|
+
/** Adds the table to the picked ones, previewing it, or takes it out */
|
|
475
|
+
toggleTable(storedName: string): void {
|
|
476
|
+
const adding = !this.tableNames.includes(storedName);
|
|
477
|
+
this.tableNames = adding
|
|
478
|
+
? [...this.tableNames, storedName]
|
|
479
|
+
: this.tableNames.filter((each) => each !== storedName);
|
|
439
480
|
this.error = undefined;
|
|
481
|
+
this.preview(adding ? storedName : this.tableNames.at(-1));
|
|
482
|
+
}
|
|
483
|
+
|
|
484
|
+
private previewKey(storedName: string): string {
|
|
485
|
+
return `${this.schemaName ?? ''}\u0000${storedName}`;
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
/** The previewed table's columns, `undefined` while they load, or why they couldn't be read */
|
|
489
|
+
get previewedColumns(): Schema | string | undefined {
|
|
490
|
+
const name = this.previewTableName;
|
|
491
|
+
return name === undefined
|
|
492
|
+
? undefined
|
|
493
|
+
: this.previewSchemas.get(this.previewKey(name));
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
/** Previews the table once the clicks pause (`CUBE_TABLE_PREVIEW_DELAY_MS`) */
|
|
497
|
+
private preview(storedName: string | undefined): void {
|
|
498
|
+
this.previewTableName = storedName;
|
|
499
|
+
this.cancelPreview();
|
|
500
|
+
if (storedName !== undefined) {
|
|
501
|
+
this.previewTimer = setTimeout(() => {
|
|
502
|
+
this.previewTimer = undefined;
|
|
503
|
+
flowResult(this.loadPreview(storedName)).catch(
|
|
504
|
+
this.editorState.host.applicationStore.alertUnhandledError,
|
|
505
|
+
);
|
|
506
|
+
}, CUBE_TABLE_PREVIEW_DELAY_MS);
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
private cancelPreview(): void {
|
|
511
|
+
if (this.previewTimer !== undefined) {
|
|
512
|
+
clearTimeout(this.previewTimer);
|
|
513
|
+
this.previewTimer = undefined;
|
|
514
|
+
}
|
|
515
|
+
}
|
|
516
|
+
|
|
517
|
+
/** Reads a table's columns from the engine, over the connection tested */
|
|
518
|
+
*loadPreview(storedName: string): GeneratorFn<void> {
|
|
519
|
+
const key = this.previewKey(storedName);
|
|
520
|
+
const table = this.schemaTables?.find(
|
|
521
|
+
(candidate) => candidate.storedName === storedName,
|
|
522
|
+
);
|
|
523
|
+
const connection = this.testedConnection;
|
|
524
|
+
const schemaName = this.schemaName;
|
|
525
|
+
if (
|
|
526
|
+
this.previewSchemas.has(key) ||
|
|
527
|
+
!table ||
|
|
528
|
+
!connection ||
|
|
529
|
+
schemaName === undefined
|
|
530
|
+
) {
|
|
531
|
+
return;
|
|
532
|
+
}
|
|
533
|
+
const model =
|
|
534
|
+
this.editorState.document.context?.model ??
|
|
535
|
+
createCubeDirectModel(connection);
|
|
536
|
+
const coordinates = getCubeDirectTableCoordinates(schemaName, table);
|
|
537
|
+
const generation = this.previewGeneration;
|
|
538
|
+
const id = this.editorState.document.query.generateId(
|
|
539
|
+
RelationalTableSource.TYPE,
|
|
540
|
+
);
|
|
541
|
+
let answer: Schema | string;
|
|
542
|
+
try {
|
|
543
|
+
const typed = (yield this.editorState.host.engine.resolveSchemas(
|
|
544
|
+
model,
|
|
545
|
+
new Map([
|
|
546
|
+
[id, [coordinates.database, coordinates.schema, coordinates.table]],
|
|
547
|
+
]),
|
|
548
|
+
)) as Awaited<
|
|
549
|
+
ReturnType<typeof this.editorState.host.engine.resolveSchemas>
|
|
550
|
+
>;
|
|
551
|
+
const schema = typed.get(id);
|
|
552
|
+
answer =
|
|
553
|
+
schema instanceof Schema
|
|
554
|
+
? schema
|
|
555
|
+
: (schema?.message ?? CUBE_DIRECT_MESSAGE.NO_TABLE_SCHEMA);
|
|
556
|
+
} catch (error) {
|
|
557
|
+
answer = toError(error).message;
|
|
558
|
+
}
|
|
559
|
+
if (generation === this.previewGeneration) {
|
|
560
|
+
this.previewSchemas = new Map(this.previewSchemas).set(key, answer);
|
|
561
|
+
}
|
|
440
562
|
}
|
|
441
563
|
|
|
442
564
|
setTableSearch(search: string): void {
|
|
@@ -476,6 +598,7 @@ export class CubeDirectConnectionTabState implements CubeSourcePickerTab {
|
|
|
476
598
|
this.isTesting = false;
|
|
477
599
|
this.isListing = false;
|
|
478
600
|
this.isResolving = false;
|
|
601
|
+
this.cancelPreview();
|
|
479
602
|
}
|
|
480
603
|
|
|
481
604
|
/** Lists the connection's schemas; with a single one, lists its tables */
|
|
@@ -558,58 +681,130 @@ export class CubeDirectConnectionTabState implements CubeSourcePickerTab {
|
|
|
558
681
|
const model: ModelContext =
|
|
559
682
|
contextBefore?.model ??
|
|
560
683
|
createCubeDirectModel(this.connection as CubeDirectConnection);
|
|
561
|
-
const
|
|
562
|
-
(
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
table,
|
|
684
|
+
const tables = this.tableNames.map(
|
|
685
|
+
(name) =>
|
|
686
|
+
this.schemaTables?.find(
|
|
687
|
+
(candidate) => candidate.storedName === name,
|
|
688
|
+
) as CubeExploredTable,
|
|
567
689
|
);
|
|
568
|
-
|
|
569
|
-
|
|
690
|
+
const schemaName = this.schemaName as string;
|
|
691
|
+
// the engine stamps each table's accessor with its node id, so the ids come first
|
|
692
|
+
const ids = generateCubeNodeIds(
|
|
693
|
+
editorState.document.query,
|
|
570
694
|
RelationalTableSource.TYPE,
|
|
695
|
+
tables.length,
|
|
571
696
|
);
|
|
697
|
+
this.cancelPreview();
|
|
572
698
|
const request = ++this.confirmRequest;
|
|
573
699
|
this.isResolving = true;
|
|
574
700
|
this.error = undefined;
|
|
575
701
|
try {
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
]
|
|
581
|
-
|
|
702
|
+
// a table previewed has its columns already: the engine types the others
|
|
703
|
+
const typed = new Map<string, Schema | CubeEngineError>();
|
|
704
|
+
const toType = new Map<string, readonly [string, string, string]>();
|
|
705
|
+
tables.forEach((table, index) => {
|
|
706
|
+
const id = ids[index] as string;
|
|
707
|
+
const schema = this.previewSchemas.get(
|
|
708
|
+
this.previewKey(table.storedName),
|
|
709
|
+
);
|
|
710
|
+
if (schema instanceof Schema) {
|
|
711
|
+
typed.set(id, schema);
|
|
712
|
+
} else {
|
|
713
|
+
const coordinates = getCubeDirectTableCoordinates(schemaName, table);
|
|
714
|
+
toType.set(id, [
|
|
715
|
+
coordinates.database,
|
|
716
|
+
coordinates.schema,
|
|
717
|
+
coordinates.table,
|
|
718
|
+
]);
|
|
719
|
+
}
|
|
720
|
+
});
|
|
721
|
+
if (toType.size) {
|
|
722
|
+
const answer = (yield editorState.host.engine.resolveSchemas(
|
|
723
|
+
model,
|
|
724
|
+
toType,
|
|
725
|
+
)) as Awaited<
|
|
726
|
+
ReturnType<typeof editorState.host.engine.resolveSchemas>
|
|
727
|
+
>;
|
|
728
|
+
answer.forEach((schema, id) => typed.set(id, schema));
|
|
729
|
+
}
|
|
582
730
|
if (request !== this.confirmRequest) {
|
|
583
731
|
return false;
|
|
584
732
|
}
|
|
585
|
-
const schema = typed.get(id);
|
|
586
|
-
if (schema === undefined || schema instanceof CubeEngineError) {
|
|
587
|
-
throw (
|
|
588
|
-
schema ??
|
|
589
|
-
new CubeEngineError(
|
|
590
|
-
CubeEngineErrorKind.COMPILE,
|
|
591
|
-
CUBE_DIRECT_MESSAGE.NO_TABLE_SCHEMA,
|
|
592
|
-
)
|
|
593
|
-
);
|
|
594
|
-
}
|
|
595
|
-
const node = RELATIONAL_TABLE_SOURCE_DEFINITION.resolve(
|
|
596
|
-
RELATIONAL_TABLE_SOURCE_DEFINITION.fromCoordinates(id, coordinates),
|
|
597
|
-
{ kind: 'resolved', schema },
|
|
598
|
-
);
|
|
599
733
|
const { document } = editorState;
|
|
600
|
-
if (document.context !== contextBefore
|
|
734
|
+
if (document.context !== contextBefore) {
|
|
601
735
|
throw new Error(CUBE_DIRECT_MESSAGE.CUBE_CHANGED);
|
|
602
736
|
}
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
737
|
+
// each table typed is added, in the order picked; the first one picked
|
|
738
|
+
// is the one that runs on an empty cube, as a single table would be
|
|
739
|
+
let query = document.query;
|
|
740
|
+
const added: string[] = [];
|
|
741
|
+
const failed: CubeDirectConnectionError[] = [];
|
|
742
|
+
// with several tables, each failure names its table
|
|
743
|
+
const named = (
|
|
744
|
+
table: CubeExploredTable,
|
|
745
|
+
error: CubeDirectConnectionError,
|
|
746
|
+
): CubeDirectConnectionError =>
|
|
747
|
+
tables.length > 1
|
|
748
|
+
? { ...error, message: `${table.name}: ${error.message}` }
|
|
749
|
+
: error;
|
|
750
|
+
tables.forEach((table, index) => {
|
|
751
|
+
const id = ids[index] as string;
|
|
752
|
+
const schema = typed.get(id);
|
|
753
|
+
if (schema === undefined || schema instanceof CubeEngineError) {
|
|
754
|
+
failed.push(
|
|
755
|
+
named(
|
|
756
|
+
table,
|
|
757
|
+
toError(
|
|
758
|
+
schema ??
|
|
759
|
+
new CubeEngineError(
|
|
760
|
+
CubeEngineErrorKind.COMPILE,
|
|
761
|
+
CUBE_DIRECT_MESSAGE.NO_TABLE_SCHEMA,
|
|
762
|
+
),
|
|
763
|
+
),
|
|
764
|
+
),
|
|
765
|
+
);
|
|
766
|
+
return;
|
|
767
|
+
}
|
|
768
|
+
const node = RELATIONAL_TABLE_SOURCE_DEFINITION.resolve(
|
|
769
|
+
RELATIONAL_TABLE_SOURCE_DEFINITION.fromCoordinates(
|
|
770
|
+
id,
|
|
771
|
+
getCubeDirectTableCoordinates(schemaName, table),
|
|
772
|
+
),
|
|
773
|
+
{ kind: 'resolved', schema },
|
|
774
|
+
);
|
|
775
|
+
if (!query.canAdd(node)) {
|
|
776
|
+
failed.push(
|
|
777
|
+
named(table, { message: CUBE_DIRECT_MESSAGE.CUBE_CHANGED }),
|
|
778
|
+
);
|
|
779
|
+
return;
|
|
780
|
+
}
|
|
781
|
+
query = query.add(node);
|
|
782
|
+
added.push(table.storedName);
|
|
783
|
+
});
|
|
784
|
+
if (added.length) {
|
|
785
|
+
editorState.applyDocument(
|
|
786
|
+
document.context
|
|
787
|
+
? document.withQuery(query)
|
|
788
|
+
: document
|
|
789
|
+
.withContext({ model, runtime: CUBE_DIRECT_RUNTIME_PATH })
|
|
790
|
+
.withQuery(query),
|
|
791
|
+
);
|
|
792
|
+
// what was tested is now the cube's connection
|
|
793
|
+
this.testedConnection = this.connection;
|
|
794
|
+
}
|
|
795
|
+
if (failed.length) {
|
|
796
|
+
// the tables added aren't picked any more, so Add again adds only the others
|
|
797
|
+
this.tableNames = this.tableNames.filter(
|
|
798
|
+
(name) => !added.includes(name),
|
|
799
|
+
);
|
|
800
|
+
this.error =
|
|
801
|
+
failed.length === 1
|
|
802
|
+
? failed[0]
|
|
803
|
+
: {
|
|
804
|
+
message: failed.map((each) => each.message).join('\n'),
|
|
805
|
+
};
|
|
806
|
+
return false;
|
|
807
|
+
}
|
|
613
808
|
this.resetTable();
|
|
614
809
|
return true;
|
|
615
810
|
} catch (error) {
|
|
@@ -626,6 +821,8 @@ export class CubeDirectConnectionTabState implements CubeSourcePickerTab {
|
|
|
626
821
|
|
|
627
822
|
/** Forgets what was read from the connection: it changed, or its answers are stale */
|
|
628
823
|
private resetResults(): void {
|
|
824
|
+
this.previewGeneration++;
|
|
825
|
+
this.previewSchemas = new Map();
|
|
629
826
|
this.testRequest++;
|
|
630
827
|
this.listRequest++;
|
|
631
828
|
this.confirmRequest++;
|
|
@@ -641,7 +838,9 @@ export class CubeDirectConnectionTabState implements CubeSourcePickerTab {
|
|
|
641
838
|
}
|
|
642
839
|
|
|
643
840
|
private resetTable(): void {
|
|
644
|
-
this.
|
|
841
|
+
this.tableNames = [];
|
|
645
842
|
this.tableSearch = '';
|
|
843
|
+
this.previewTableName = undefined;
|
|
844
|
+
this.cancelPreview();
|
|
646
845
|
}
|
|
647
846
|
}
|
|
@@ -53,6 +53,7 @@ import type { CubeEditorState } from '../CubeEditorState.js';
|
|
|
53
53
|
import {
|
|
54
54
|
type CubeSourcePickerTab,
|
|
55
55
|
CubeSourcePickerTabKey,
|
|
56
|
+
generateCubeNodeIds,
|
|
56
57
|
} from './CubeSourcePickerTab.js';
|
|
57
58
|
|
|
58
59
|
/** What failed in the tab: its first line, and the rest on demand */
|
|
@@ -79,10 +80,10 @@ const toError = (error: unknown): CubeIngestTabError => {
|
|
|
79
80
|
/**
|
|
80
81
|
* The source dialog's Ingest tab (PLAN §6.7), as Data Cube's producer
|
|
81
82
|
* source picks: the Mode (class), the viewer's environment for it, a
|
|
82
|
-
* producer deployment, one of its SDLC-deployed definitions, then
|
|
83
|
-
*
|
|
84
|
-
* class, the producer deployment and the warehouse as
|
|
85
|
-
* then the tab offers only that deployment's definitions.
|
|
83
|
+
* producer deployment, one of its SDLC-deployed definitions, then one or
|
|
84
|
+
* several of its data sets, typed from what the definition declares. The
|
|
85
|
+
* first Add saves the class, the producer deployment and the warehouse as
|
|
86
|
+
* the cube's model; then the tab offers only that deployment's definitions.
|
|
86
87
|
*/
|
|
87
88
|
export class CubeIngestTabState implements CubeSourcePickerTab {
|
|
88
89
|
readonly key = CubeSourcePickerTabKey.INGEST;
|
|
@@ -97,7 +98,8 @@ export class CubeIngestTabState implements CubeSourcePickerTab {
|
|
|
97
98
|
definitionSearch = '';
|
|
98
99
|
definition: CubeIngestDefinitionCandidate | undefined;
|
|
99
100
|
dataSets: readonly CubeIngestDataSet[] | undefined;
|
|
100
|
-
|
|
101
|
+
/** The picked data sets, by name, in the order picked; several are added at once */
|
|
102
|
+
dataSetNames: readonly string[] = [];
|
|
101
103
|
/** The warehouse of a cube without one yet: the one the viewer last picked, else the default */
|
|
102
104
|
warehouse = CUBE_DEFAULT_CONSUMER_WAREHOUSE;
|
|
103
105
|
isLoadingEnvironment = false;
|
|
@@ -124,7 +126,9 @@ export class CubeIngestTabState implements CubeSourcePickerTab {
|
|
|
124
126
|
definitionSearch: observable,
|
|
125
127
|
definition: observable.ref,
|
|
126
128
|
dataSets: observable.ref,
|
|
127
|
-
|
|
129
|
+
dataSetNames: observable.ref,
|
|
130
|
+
dataSetName: computed,
|
|
131
|
+
pickedDataSets: computed,
|
|
128
132
|
warehouse: observable,
|
|
129
133
|
isLoadingEnvironment: observable,
|
|
130
134
|
isListingDefinitions: observable,
|
|
@@ -143,6 +147,7 @@ export class CubeIngestTabState implements CubeSourcePickerTab {
|
|
|
143
147
|
setDefinitionSearch: action,
|
|
144
148
|
selectDefinition: action,
|
|
145
149
|
selectDataSet: action,
|
|
150
|
+
toggleDataSet: action,
|
|
146
151
|
setWarehouse: action,
|
|
147
152
|
retry: action,
|
|
148
153
|
open: action,
|
|
@@ -194,8 +199,34 @@ export class CubeIngestTabState implements CubeSourcePickerTab {
|
|
|
194
199
|
);
|
|
195
200
|
}
|
|
196
201
|
|
|
202
|
+
/** The data set picked last, the one previewed */
|
|
203
|
+
get dataSetName(): string | undefined {
|
|
204
|
+
return this.dataSetNames.at(-1);
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/** The data set picked last, the one previewed */
|
|
197
208
|
get dataSet(): CubeIngestDataSet | undefined {
|
|
198
|
-
return this.
|
|
209
|
+
return this.findDataSet(this.dataSetName);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/** The picked data sets, in the order picked */
|
|
213
|
+
get pickedDataSets(): readonly (CubeIngestDataSet | undefined)[] {
|
|
214
|
+
return this.dataSetNames.map((name) => this.findDataSet(name));
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/** How many data sets Add adds */
|
|
218
|
+
get pickedCount(): number {
|
|
219
|
+
return this.dataSetNames.length;
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
isDataSetPicked(name: string): boolean {
|
|
223
|
+
return this.dataSetNames.includes(name);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
private findDataSet(name: string | undefined): CubeIngestDataSet | undefined {
|
|
227
|
+
return name === undefined
|
|
228
|
+
? undefined
|
|
229
|
+
: this.dataSets?.find((each) => each.name === name);
|
|
199
230
|
}
|
|
200
231
|
|
|
201
232
|
get canConfirm(): boolean {
|
|
@@ -206,7 +237,8 @@ export class CubeIngestTabState implements CubeSourcePickerTab {
|
|
|
206
237
|
!this.isAdding &&
|
|
207
238
|
this.producerDeploymentId !== undefined &&
|
|
208
239
|
this.definition !== undefined &&
|
|
209
|
-
this.
|
|
240
|
+
this.pickedDataSets.length > 0 &&
|
|
241
|
+
this.pickedDataSets.every((each) => each?.isPickable === true) &&
|
|
210
242
|
this.warehouse.trim() !== ''
|
|
211
243
|
);
|
|
212
244
|
}
|
|
@@ -255,10 +287,19 @@ export class CubeIngestTabState implements CubeSourcePickerTab {
|
|
|
255
287
|
}
|
|
256
288
|
}
|
|
257
289
|
|
|
258
|
-
/** Picks a data set that can be added */
|
|
290
|
+
/** Picks a data set that can be added, alone, in place of any picked */
|
|
259
291
|
selectDataSet(name: string): void {
|
|
260
|
-
if (this.
|
|
261
|
-
this.
|
|
292
|
+
if (this.findDataSet(name)?.isPickable) {
|
|
293
|
+
this.dataSetNames = [name];
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
/** Adds a data set that can be added to the picked ones, or takes it out */
|
|
298
|
+
toggleDataSet(name: string): void {
|
|
299
|
+
if (this.isDataSetPicked(name)) {
|
|
300
|
+
this.dataSetNames = this.dataSetNames.filter((each) => each !== name);
|
|
301
|
+
} else if (this.findDataSet(name)?.isPickable) {
|
|
302
|
+
this.dataSetNames = [...this.dataSetNames, name];
|
|
262
303
|
}
|
|
263
304
|
}
|
|
264
305
|
|
|
@@ -364,6 +405,20 @@ export class CubeIngestTabState implements CubeSourcePickerTab {
|
|
|
364
405
|
}
|
|
365
406
|
this.environment = environment;
|
|
366
407
|
this.producers = producers;
|
|
408
|
+
// a new cube starts on the environment's own warehouse, when it has one
|
|
409
|
+
if (!this.fixedSettings && environment.warehouse) {
|
|
410
|
+
this.warehouse = environment.warehouse;
|
|
411
|
+
}
|
|
412
|
+
// the only producer deployment is the one to read
|
|
413
|
+
const [onlyProducer] = producers;
|
|
414
|
+
if (
|
|
415
|
+
this.producerDeploymentId === undefined &&
|
|
416
|
+
producers.length === 1 &&
|
|
417
|
+
onlyProducer
|
|
418
|
+
) {
|
|
419
|
+
this.producerDeploymentId = onlyProducer.deploymentId;
|
|
420
|
+
this.resetDefinitions();
|
|
421
|
+
}
|
|
367
422
|
} catch (error) {
|
|
368
423
|
if (request === this.environmentRequest) {
|
|
369
424
|
this.loadedEnvironmentType = undefined;
|
|
@@ -427,9 +482,11 @@ export class CubeIngestTabState implements CubeSourcePickerTab {
|
|
|
427
482
|
if (request === this.describeRequest) {
|
|
428
483
|
this.dataSets = dataSets;
|
|
429
484
|
// the only data set that can be added is picked
|
|
430
|
-
const
|
|
431
|
-
|
|
432
|
-
|
|
485
|
+
const [onlyPickable, ...otherPickable] = dataSets.filter(
|
|
486
|
+
(each) => each.isPickable,
|
|
487
|
+
);
|
|
488
|
+
this.dataSetNames =
|
|
489
|
+
onlyPickable && !otherPickable.length ? [onlyPickable.name] : [];
|
|
433
490
|
}
|
|
434
491
|
} catch (error) {
|
|
435
492
|
if (request === this.describeRequest) {
|
|
@@ -443,9 +500,10 @@ export class CubeIngestTabState implements CubeSourcePickerTab {
|
|
|
443
500
|
}
|
|
444
501
|
|
|
445
502
|
/**
|
|
446
|
-
* Adds the data
|
|
447
|
-
* producer deployment and the warehouse as the cube's
|
|
448
|
-
* undo step, and remembers the warehouse for the
|
|
503
|
+
* Adds the picked data sets, already typed, in one undo step; the first
|
|
504
|
+
* saves the class, the producer deployment and the warehouse as the cube's
|
|
505
|
+
* model, in the same undo step, and remembers the warehouse for the
|
|
506
|
+
* viewer's next cubes
|
|
449
507
|
*/
|
|
450
508
|
*confirm(): GeneratorFn<boolean> {
|
|
451
509
|
if (!this.canConfirm) {
|
|
@@ -453,7 +511,7 @@ export class CubeIngestTabState implements CubeSourcePickerTab {
|
|
|
453
511
|
}
|
|
454
512
|
const { editorState } = this;
|
|
455
513
|
const definition = this.definition as CubeIngestDefinitionCandidate;
|
|
456
|
-
const
|
|
514
|
+
const picked = this.pickedDataSets as readonly CubeIngestDataSet[];
|
|
457
515
|
const producerDeploymentId = this.producerDeploymentId as string;
|
|
458
516
|
const warehouse = this.warehouse.trim();
|
|
459
517
|
const request = ++this.confirmRequest;
|
|
@@ -466,29 +524,45 @@ export class CubeIngestTabState implements CubeSourcePickerTab {
|
|
|
466
524
|
return false;
|
|
467
525
|
}
|
|
468
526
|
const { document } = editorState;
|
|
469
|
-
const
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
527
|
+
const ids = generateCubeNodeIds(
|
|
528
|
+
document.query,
|
|
529
|
+
IngestDatasetSource.TYPE,
|
|
530
|
+
picked.length,
|
|
531
|
+
);
|
|
532
|
+
const nodes = picked.map((dataSet, index) =>
|
|
533
|
+
INGEST_DATASET_SOURCE_DEFINITION.resolve(
|
|
534
|
+
INGEST_DATASET_SOURCE_DEFINITION.fromCoordinates(
|
|
535
|
+
ids[index] as string,
|
|
536
|
+
{
|
|
537
|
+
ingestDefinitionUrn: definition.urn,
|
|
538
|
+
ingestDefinition: definition.definition,
|
|
539
|
+
dataSet: dataSet.name,
|
|
540
|
+
},
|
|
541
|
+
),
|
|
542
|
+
{
|
|
543
|
+
kind: 'resolved',
|
|
544
|
+
schema: dataSet.schema as NonNullable<CubeIngestDataSet['schema']>,
|
|
545
|
+
},
|
|
546
|
+
),
|
|
480
547
|
);
|
|
481
548
|
const settings = this.fixedSettings;
|
|
482
549
|
if (
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
!document.query.canAdd(node)
|
|
550
|
+
document.context !== undefined &&
|
|
551
|
+
(!settings ||
|
|
552
|
+
settings.environmentType !== this.environmentType ||
|
|
553
|
+
settings.producerDeploymentId !== producerDeploymentId)
|
|
488
554
|
) {
|
|
489
555
|
throw new Error(CUBE_INGEST_TAB_MESSAGE.CUBE_CHANGED);
|
|
490
556
|
}
|
|
491
|
-
|
|
557
|
+
// each data set is added in the order picked; the first one picked is
|
|
558
|
+
// the one that runs on an empty cube, as a single one would be
|
|
559
|
+
let query = document.query;
|
|
560
|
+
for (const node of nodes) {
|
|
561
|
+
if (!query.canAdd(node)) {
|
|
562
|
+
throw new Error(CUBE_INGEST_TAB_MESSAGE.CUBE_CHANGED);
|
|
563
|
+
}
|
|
564
|
+
query = query.add(node);
|
|
565
|
+
}
|
|
492
566
|
editorState.applyDocument(
|
|
493
567
|
document.context
|
|
494
568
|
? document.withQuery(query)
|
|
@@ -506,8 +580,8 @@ export class CubeIngestTabState implements CubeSourcePickerTab {
|
|
|
506
580
|
if (!settings) {
|
|
507
581
|
editorState.dataProductRuntime.remember(warehouse);
|
|
508
582
|
}
|
|
509
|
-
// the definition stays open, to add
|
|
510
|
-
this.
|
|
583
|
+
// the definition stays open, to add others of its data sets
|
|
584
|
+
this.dataSetNames = [];
|
|
511
585
|
return true;
|
|
512
586
|
} catch (error) {
|
|
513
587
|
if (request === this.confirmRequest) {
|
|
@@ -546,6 +620,6 @@ export class CubeIngestTabState implements CubeSourcePickerTab {
|
|
|
546
620
|
this.isDescribing = false;
|
|
547
621
|
this.definition = undefined;
|
|
548
622
|
this.dataSets = undefined;
|
|
549
|
-
this.
|
|
623
|
+
this.dataSetNames = [];
|
|
550
624
|
}
|
|
551
625
|
}
|