@finos/legend-application-data-cube 0.3.8 → 0.3.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/__lib__/DataCubeEvent.d.ts +28 -0
- package/lib/__lib__/DataCubeEvent.d.ts.map +1 -0
- package/lib/__lib__/DataCubeEvent.js +29 -0
- package/lib/__lib__/DataCubeEvent.js.map +1 -0
- package/lib/components/__test-utils__/LegendDataCubeStoreTestUtils.d.ts.map +1 -1
- package/lib/components/__test-utils__/LegendDataCubeStoreTestUtils.js +7 -1
- package/lib/components/__test-utils__/LegendDataCubeStoreTestUtils.js.map +1 -1
- package/lib/index.css +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/LegendDataCubeDataCubeEngine.d.ts +1 -0
- package/lib/stores/LegendDataCubeDataCubeEngine.d.ts.map +1 -1
- package/lib/stores/LegendDataCubeDataCubeEngine.js +23 -0
- package/lib/stores/LegendDataCubeDataCubeEngine.js.map +1 -1
- package/lib/stores/builder/LegendDataCubeBuilderStore.d.ts.map +1 -1
- package/lib/stores/builder/LegendDataCubeBuilderStore.js +25 -4
- package/lib/stores/builder/LegendDataCubeBuilderStore.js.map +1 -1
- package/lib/stores/builder/LegendDataCubeCreatorState.d.ts +3 -1
- package/lib/stores/builder/LegendDataCubeCreatorState.d.ts.map +1 -1
- package/lib/stores/builder/LegendDataCubeCreatorState.js +184 -13
- package/lib/stores/builder/LegendDataCubeCreatorState.js.map +1 -1
- package/package.json +5 -5
- package/src/__lib__/DataCubeEvent.ts +28 -0
- package/src/components/__test-utils__/LegendDataCubeStoreTestUtils.tsx +24 -0
- package/src/stores/LegendDataCubeDataCubeEngine.ts +43 -0
- package/src/stores/builder/LegendDataCubeBuilderStore.tsx +60 -4
- package/src/stores/builder/LegendDataCubeCreatorState.tsx +286 -17
- package/tsconfig.json +1 -0
|
@@ -18,13 +18,17 @@ import { action, makeObservable, observable } from 'mobx';
|
|
|
18
18
|
import { ActionState, assertErrorThrown, IllegalStateError, UnsupportedOperationError, } from '@finos/legend-shared';
|
|
19
19
|
import { LegendQueryDataCubeSourceBuilderState } from './source/LegendQueryDataCubeSourceBuilderState.js';
|
|
20
20
|
import { LegendDataCubeSourceBuilderType, } from './source/LegendDataCubeSourceBuilderState.js';
|
|
21
|
-
import { DEFAULT_TOOL_PANEL_WINDOW_CONFIG, } from '@finos/legend-data-cube';
|
|
21
|
+
import { ADHOC_FUNCTION_DATA_CUBE_SOURCE_TYPE, ADHOC_QUERY_DATA_CUBE_SOURCE_TYPE, AdhocQueryDataCubeSource, DataCubeTelemetryHelper, DEFAULT_TOOL_PANEL_WINDOW_CONFIG, RawAdhocQueryDataCubeSource, RawUserDefinedFunctionDataCubeSource, UserDefinedFunctionDataCubeSource, } from '@finos/legend-data-cube';
|
|
22
22
|
import { LegendDataCubeCreator } from '../../components/builder/LegendDataCubeCreator.js';
|
|
23
23
|
import { AdhocQueryDataCubeSourceBuilderState } from './source/AdhocQueryDataCubeSourceBuilderState.js';
|
|
24
24
|
import { LegendDataCubeBuilderState, } from './LegendDataCubeBuilderStore.js';
|
|
25
25
|
import { generateBuilderRoute } from '../../__lib__/LegendDataCubeNavigation.js';
|
|
26
26
|
import { LocalFileDataCubeSourceBuilderState } from './source/LocalFileDataCubeSourceBuilderState.js';
|
|
27
27
|
import { UserDefinedFunctionDataCubeSourceBuilderState } from './source/UserDefinedFunctionDataCubeSourceBuilderState.js';
|
|
28
|
+
import { LEGEND_QUERY_DATA_CUBE_SOURCE_TYPE, LegendQueryDataCubeSource, RawLegendQueryDataCubeSource, } from '../model/LegendQueryDataCubeSource.js';
|
|
29
|
+
import { V1_deserializePureModelContext, V1_PureModelContextPointer, V1_LegendSDLC, } from '@finos/legend-graph';
|
|
30
|
+
import { LOCAL_FILE_QUERY_DATA_CUBE_SOURCE_TYPE, LocalFileDataCubeSource, RawLocalFileQueryDataCubeSource, } from '../model/LocalFileDataCubeSource.js';
|
|
31
|
+
import { DATACUBE_APP_EVENT } from '../../__lib__/DataCubeEvent.js';
|
|
28
32
|
const DEFAULT_SOURCE_TYPE = LegendDataCubeSourceBuilderType.LEGEND_QUERY;
|
|
29
33
|
export class LegendDataCubeCreatorState {
|
|
30
34
|
_application;
|
|
@@ -69,29 +73,196 @@ export class LegendDataCubeCreatorState {
|
|
|
69
73
|
throw new UnsupportedOperationError(`Can't create source builder for unsupported type '${type}'`);
|
|
70
74
|
}
|
|
71
75
|
}
|
|
76
|
+
logFromSource(eventType, source, errorMessage) {
|
|
77
|
+
if (!source) {
|
|
78
|
+
DataCubeTelemetryHelper.logEvent_Datacube(this._application.telemetryService, {
|
|
79
|
+
error: errorMessage,
|
|
80
|
+
}, eventType);
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (source instanceof LegendQueryDataCubeSource) {
|
|
84
|
+
const queryInfo = source.info;
|
|
85
|
+
DataCubeTelemetryHelper.logEvent_Datacube_LegendQuery(this._application.telemetryService, {
|
|
86
|
+
project: {
|
|
87
|
+
groupId: queryInfo.groupId,
|
|
88
|
+
artifactId: queryInfo.artifactId,
|
|
89
|
+
versionId: queryInfo.versionId,
|
|
90
|
+
},
|
|
91
|
+
query: {
|
|
92
|
+
id: queryInfo.id,
|
|
93
|
+
name: queryInfo.name,
|
|
94
|
+
},
|
|
95
|
+
error: errorMessage,
|
|
96
|
+
}, eventType);
|
|
97
|
+
}
|
|
98
|
+
else if (source instanceof UserDefinedFunctionDataCubeSource) {
|
|
99
|
+
const deserializedModel = V1_deserializePureModelContext(source.model);
|
|
100
|
+
const sdlcInfo = deserializedModel instanceof V1_PureModelContextPointer &&
|
|
101
|
+
deserializedModel.sdlcInfo instanceof V1_LegendSDLC
|
|
102
|
+
? deserializedModel.sdlcInfo
|
|
103
|
+
: undefined;
|
|
104
|
+
DataCubeTelemetryHelper.logEvent_Datacube_AdhocFunction(this._application.telemetryService, {
|
|
105
|
+
project: sdlcInfo !== undefined
|
|
106
|
+
? {
|
|
107
|
+
groupId: sdlcInfo.groupId,
|
|
108
|
+
artifactId: sdlcInfo.artifactId,
|
|
109
|
+
versionId: sdlcInfo.version,
|
|
110
|
+
}
|
|
111
|
+
: undefined,
|
|
112
|
+
function: {
|
|
113
|
+
path: source.functionPath,
|
|
114
|
+
runtime: source.runtime,
|
|
115
|
+
},
|
|
116
|
+
error: errorMessage,
|
|
117
|
+
}, eventType);
|
|
118
|
+
}
|
|
119
|
+
else if (source instanceof LocalFileDataCubeSource) {
|
|
120
|
+
DataCubeTelemetryHelper.logEvent_Datacube_LocalFile(this._application.telemetryService, {
|
|
121
|
+
file: {
|
|
122
|
+
name: source.fileName,
|
|
123
|
+
format: source.fileFormat,
|
|
124
|
+
},
|
|
125
|
+
error: errorMessage,
|
|
126
|
+
}, eventType);
|
|
127
|
+
}
|
|
128
|
+
else if (source instanceof AdhocQueryDataCubeSource) {
|
|
129
|
+
const deserializedModel = V1_deserializePureModelContext(source.model);
|
|
130
|
+
const sdlcInfo = deserializedModel instanceof V1_PureModelContextPointer &&
|
|
131
|
+
deserializedModel.sdlcInfo instanceof V1_LegendSDLC
|
|
132
|
+
? deserializedModel.sdlcInfo
|
|
133
|
+
: undefined;
|
|
134
|
+
DataCubeTelemetryHelper.logEvent_Datacube_AdhocQuery(this._application.telemetryService, {
|
|
135
|
+
project: sdlcInfo !== undefined
|
|
136
|
+
? {
|
|
137
|
+
groupId: sdlcInfo.groupId,
|
|
138
|
+
artifactId: sdlcInfo.artifactId,
|
|
139
|
+
versionId: sdlcInfo.version,
|
|
140
|
+
}
|
|
141
|
+
: undefined,
|
|
142
|
+
adhocQuery: {
|
|
143
|
+
mapping: source.mapping,
|
|
144
|
+
runtime: source.runtime,
|
|
145
|
+
},
|
|
146
|
+
error: errorMessage,
|
|
147
|
+
}, eventType);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
logFromRawSource(eventType, source, errorMessage, dataCubeId) {
|
|
151
|
+
if (!source) {
|
|
152
|
+
DataCubeTelemetryHelper.logEvent_Datacube(this._application.telemetryService, {
|
|
153
|
+
dataCubeId: dataCubeId,
|
|
154
|
+
error: errorMessage,
|
|
155
|
+
}, eventType);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
if (source._type === LEGEND_QUERY_DATA_CUBE_SOURCE_TYPE) {
|
|
159
|
+
const rawSource = RawLegendQueryDataCubeSource.serialization.fromJson(source);
|
|
160
|
+
DataCubeTelemetryHelper.logEvent_Datacube_LegendQuery(this._application.telemetryService, {
|
|
161
|
+
query: {
|
|
162
|
+
id: rawSource.queryId,
|
|
163
|
+
},
|
|
164
|
+
dataCubeId: dataCubeId,
|
|
165
|
+
error: errorMessage,
|
|
166
|
+
}, eventType);
|
|
167
|
+
}
|
|
168
|
+
else if (source._type === ADHOC_FUNCTION_DATA_CUBE_SOURCE_TYPE) {
|
|
169
|
+
const rawSource = RawUserDefinedFunctionDataCubeSource.serialization.fromJson(source);
|
|
170
|
+
const deserializedModel = V1_deserializePureModelContext(rawSource.model);
|
|
171
|
+
const sdlcInfo = deserializedModel instanceof V1_PureModelContextPointer &&
|
|
172
|
+
deserializedModel.sdlcInfo instanceof V1_LegendSDLC
|
|
173
|
+
? deserializedModel.sdlcInfo
|
|
174
|
+
: undefined;
|
|
175
|
+
DataCubeTelemetryHelper.logEvent_Datacube_AdhocFunction(this._application.telemetryService, {
|
|
176
|
+
project: sdlcInfo !== undefined
|
|
177
|
+
? {
|
|
178
|
+
groupId: sdlcInfo.groupId,
|
|
179
|
+
artifactId: sdlcInfo.artifactId,
|
|
180
|
+
versionId: sdlcInfo.version,
|
|
181
|
+
}
|
|
182
|
+
: undefined,
|
|
183
|
+
function: {
|
|
184
|
+
path: rawSource.functionPath,
|
|
185
|
+
runtime: rawSource.runtime,
|
|
186
|
+
},
|
|
187
|
+
dataCubeId: dataCubeId,
|
|
188
|
+
error: errorMessage,
|
|
189
|
+
}, eventType);
|
|
190
|
+
}
|
|
191
|
+
else if (source._type === LOCAL_FILE_QUERY_DATA_CUBE_SOURCE_TYPE) {
|
|
192
|
+
const rawSource = RawLocalFileQueryDataCubeSource.serialization.fromJson(source);
|
|
193
|
+
DataCubeTelemetryHelper.logEvent_Datacube_LocalFile(this._application.telemetryService, {
|
|
194
|
+
file: {
|
|
195
|
+
name: rawSource.fileName,
|
|
196
|
+
format: rawSource.fileFormat,
|
|
197
|
+
},
|
|
198
|
+
dataCubeId: dataCubeId,
|
|
199
|
+
error: errorMessage,
|
|
200
|
+
}, eventType);
|
|
201
|
+
}
|
|
202
|
+
else if (source._type === ADHOC_QUERY_DATA_CUBE_SOURCE_TYPE) {
|
|
203
|
+
const rawSource = RawAdhocQueryDataCubeSource.serialization.fromJson(source);
|
|
204
|
+
const deserializedModel = V1_deserializePureModelContext(rawSource.model);
|
|
205
|
+
const sdlcInfo = deserializedModel instanceof V1_PureModelContextPointer &&
|
|
206
|
+
deserializedModel.sdlcInfo instanceof V1_LegendSDLC
|
|
207
|
+
? deserializedModel.sdlcInfo
|
|
208
|
+
: undefined;
|
|
209
|
+
DataCubeTelemetryHelper.logEvent_Datacube_AdhocQuery(this._application.telemetryService, {
|
|
210
|
+
project: sdlcInfo !== undefined
|
|
211
|
+
? {
|
|
212
|
+
groupId: sdlcInfo.groupId,
|
|
213
|
+
artifactId: sdlcInfo.artifactId,
|
|
214
|
+
versionId: sdlcInfo.version,
|
|
215
|
+
}
|
|
216
|
+
: undefined,
|
|
217
|
+
adhocQuery: {
|
|
218
|
+
mapping: rawSource.mapping,
|
|
219
|
+
runtime: rawSource.runtime,
|
|
220
|
+
},
|
|
221
|
+
dataCubeId: dataCubeId,
|
|
222
|
+
error: errorMessage,
|
|
223
|
+
}, eventType);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
72
226
|
async finalize(sourceData) {
|
|
73
227
|
if (!sourceData && !this.sourceBuilder.isValid) {
|
|
74
228
|
throw new IllegalStateError(`Can't generate DataCube: source is not valid`);
|
|
75
229
|
}
|
|
76
230
|
this.finalizeState.inProgress();
|
|
77
231
|
try {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
232
|
+
sourceData =
|
|
233
|
+
sourceData ?? (await this.sourceBuilder.generateSourceData());
|
|
234
|
+
try {
|
|
235
|
+
const source = await this._engine.processSource(sourceData);
|
|
236
|
+
const specification = await this._engine.generateBaseSpecification(sourceData, source);
|
|
237
|
+
if (specification.configuration) {
|
|
238
|
+
this.sourceBuilder.finalizeConfiguration(specification.configuration);
|
|
239
|
+
}
|
|
240
|
+
// reset
|
|
241
|
+
this._store.setBuilder(new LegendDataCubeBuilderState(specification));
|
|
242
|
+
// only update the route instead of reloading in case we are creating
|
|
243
|
+
// a new DataCube when we are editing another DataCube
|
|
244
|
+
this._application.navigationService.navigator.updateCurrentLocation(generateBuilderRoute(null));
|
|
245
|
+
this.changeSourceBuilder(DEFAULT_SOURCE_TYPE, true);
|
|
246
|
+
this.display.close();
|
|
247
|
+
this.finalizeState.pass();
|
|
248
|
+
this.logFromSource(DATACUBE_APP_EVENT.NEW_DATACUBE__SUCCESS, source);
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
assertErrorThrown(error);
|
|
252
|
+
const message = `DataCube Creation Failure: ${error.message}`;
|
|
253
|
+
this.logFromRawSource(DATACUBE_APP_EVENT.NEW_DATACUBE__FAILURE, sourceData, message);
|
|
254
|
+
this._alertService.alertError(error, {
|
|
255
|
+
message: message,
|
|
256
|
+
});
|
|
257
|
+
this.finalizeState.fail();
|
|
81
258
|
}
|
|
82
|
-
// reset
|
|
83
|
-
this._store.setBuilder(new LegendDataCubeBuilderState(specification));
|
|
84
|
-
// only update the route instead of reloading in case we are creating
|
|
85
|
-
// a new DataCube when we are editing another DataCube
|
|
86
|
-
this._application.navigationService.navigator.updateCurrentLocation(generateBuilderRoute(null));
|
|
87
|
-
this.changeSourceBuilder(DEFAULT_SOURCE_TYPE, true);
|
|
88
|
-
this.display.close();
|
|
89
|
-
this.finalizeState.pass();
|
|
90
259
|
}
|
|
91
260
|
catch (error) {
|
|
92
261
|
assertErrorThrown(error);
|
|
262
|
+
const message = `DataCube Creation Failure: ${error.message}`;
|
|
263
|
+
this.logFromSource(DATACUBE_APP_EVENT.NEW_DATACUBE__FAILURE, undefined, message);
|
|
93
264
|
this._alertService.alertError(error, {
|
|
94
|
-
message:
|
|
265
|
+
message: message,
|
|
95
266
|
});
|
|
96
267
|
this.finalizeState.fail();
|
|
97
268
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LegendDataCubeCreatorState.js","sourceRoot":"","sources":["../../../src/stores/builder/LegendDataCubeCreatorState.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAC1D,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,yBAAyB,GAE1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,qCAAqC,EAAE,MAAM,mDAAmD,CAAC;AAE1G,OAAO,EACL,+BAA+B,GAEhC,MAAM,8CAA8C,CAAC;AACtD,OAAO,
|
|
1
|
+
{"version":3,"file":"LegendDataCubeCreatorState.js","sourceRoot":"","sources":["../../../src/stores/builder/LegendDataCubeCreatorState.tsx"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@finos/legend-application-data-cube",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.10",
|
|
4
4
|
"description": "Legend DataCube application core",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"legend",
|
|
@@ -45,10 +45,10 @@
|
|
|
45
45
|
"@duckdb/duckdb-wasm": "1.29.0",
|
|
46
46
|
"@finos/legend-application": "16.0.31",
|
|
47
47
|
"@finos/legend-art": "7.1.88",
|
|
48
|
-
"@finos/legend-code-editor": "2.0.
|
|
49
|
-
"@finos/legend-data-cube": "0.1.
|
|
50
|
-
"@finos/legend-graph": "32.1.
|
|
51
|
-
"@finos/legend-query-builder": "4.16.
|
|
48
|
+
"@finos/legend-code-editor": "2.0.54",
|
|
49
|
+
"@finos/legend-data-cube": "0.1.16",
|
|
50
|
+
"@finos/legend-graph": "32.1.12",
|
|
51
|
+
"@finos/legend-query-builder": "4.16.17",
|
|
52
52
|
"@finos/legend-server-depot": "6.0.86",
|
|
53
53
|
"@finos/legend-shared": "11.0.9",
|
|
54
54
|
"@finos/legend-storage": "3.0.128",
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2020-present, Goldman Sachs
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
export enum DATACUBE_APP_EVENT {
|
|
18
|
+
CREATE_DATACUBE__SUCCESS = 'dataCube.create-dataCube.success',
|
|
19
|
+
CREATE_DATACUBE__FAILURE = 'dataCube.create-dataCube.failure',
|
|
20
|
+
LOAD_DATACUBE__SUCCESS = 'dataCube.load-dataCube.success',
|
|
21
|
+
LOAD_DATACUBE__FAILURE = 'dataCube.load-dataCube.failure',
|
|
22
|
+
NEW_DATACUBE__SUCCESS = 'dataCube.new-dataCube.success',
|
|
23
|
+
NEW_DATACUBE__FAILURE = 'dataCube.new-dataCube.failure',
|
|
24
|
+
UPDATE_DATACUBE__SUCCESS = 'dataCube.update-dataCube.success',
|
|
25
|
+
UPDATE_DATACUBE__FAILURE = 'dataCube.update-dataCube.failure',
|
|
26
|
+
DELETE_DATACUBE__SUCCESS = 'dataCube.delete-dataCube.success',
|
|
27
|
+
DELETE_DATACUBE__FAILURE = 'dataCube.delete-dataCube.failure',
|
|
28
|
+
}
|
|
@@ -58,9 +58,11 @@ import { DSL_DataSpace_GraphManagerPreset } from '@finos/legend-extension-dsl-da
|
|
|
58
58
|
import {
|
|
59
59
|
ENGINE_TEST_SUPPORT__execute,
|
|
60
60
|
ENGINE_TEST_SUPPORT__getLambdaRelationType,
|
|
61
|
+
ENGINE_TEST_SUPPORT__getLambdaReturnType,
|
|
61
62
|
ENGINE_TEST_SUPPORT__grammarToJSON_lambda,
|
|
62
63
|
ENGINE_TEST_SUPPORT__grammarToJSON_valueSpecification,
|
|
63
64
|
ENGINE_TEST_SUPPORT__JSONToGrammar_valueSpecification,
|
|
65
|
+
ENGINE_TEST_SUPPORT__transformTdsToRelation_lambda,
|
|
64
66
|
} from '@finos/legend-graph/test';
|
|
65
67
|
import type { Entity } from '@finos/legend-storage';
|
|
66
68
|
|
|
@@ -165,6 +167,17 @@ export const TEST__setUpDataCubeBuilder = async (
|
|
|
165
167
|
MOCK__builderStore.depotServerClient,
|
|
166
168
|
'getVersionEntities',
|
|
167
169
|
).mockResolvedValue(mockEntities);
|
|
170
|
+
createSpy(
|
|
171
|
+
MOCK__builderStore.engineServerClient,
|
|
172
|
+
'lambdaReturnType',
|
|
173
|
+
).mockImplementation(
|
|
174
|
+
async (input: PlainObject<V1_LambdaReturnTypeInput>) => {
|
|
175
|
+
return ENGINE_TEST_SUPPORT__getLambdaReturnType(
|
|
176
|
+
input.lambda as PlainObject<V1_RawLambda>,
|
|
177
|
+
V1_serializePureModelContext(pmcd),
|
|
178
|
+
);
|
|
179
|
+
},
|
|
180
|
+
);
|
|
168
181
|
createSpy(
|
|
169
182
|
MOCK__builderStore.engineServerClient,
|
|
170
183
|
'lambdaRelationType',
|
|
@@ -176,6 +189,17 @@ export const TEST__setUpDataCubeBuilder = async (
|
|
|
176
189
|
);
|
|
177
190
|
},
|
|
178
191
|
);
|
|
192
|
+
createSpy(
|
|
193
|
+
MOCK__builderStore.engineServerClient,
|
|
194
|
+
'transformTdsToRelation_lambda',
|
|
195
|
+
).mockImplementation(
|
|
196
|
+
async (input: PlainObject<V1_LambdaReturnTypeInput>) => {
|
|
197
|
+
return ENGINE_TEST_SUPPORT__transformTdsToRelation_lambda(
|
|
198
|
+
input.lambda as PlainObject<V1_RawLambda>,
|
|
199
|
+
V1_serializePureModelContext(pmcd),
|
|
200
|
+
);
|
|
201
|
+
},
|
|
202
|
+
);
|
|
179
203
|
createSpy(
|
|
180
204
|
MOCK__builderStore.engineServerClient,
|
|
181
205
|
'runQuery',
|
|
@@ -84,6 +84,7 @@ import {
|
|
|
84
84
|
V1_deserializeValueSpecification,
|
|
85
85
|
LET_TOKEN,
|
|
86
86
|
V1_AppliedFunction,
|
|
87
|
+
type V1_LambdaReturnTypeResult,
|
|
87
88
|
} from '@finos/legend-graph';
|
|
88
89
|
import {
|
|
89
90
|
_elementPtr,
|
|
@@ -138,6 +139,7 @@ import {
|
|
|
138
139
|
LocalFileDataCubeSource,
|
|
139
140
|
RawLocalFileQueryDataCubeSource,
|
|
140
141
|
} from './model/LocalFileDataCubeSource.js';
|
|
142
|
+
import { QUERY_BUILDER_PURE_PATH } from '@finos/legend-query-builder';
|
|
141
143
|
|
|
142
144
|
export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
143
145
|
private readonly _application: LegendDataCubeApplicationStore;
|
|
@@ -409,10 +411,38 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
409
411
|
),
|
|
410
412
|
),
|
|
411
413
|
);
|
|
414
|
+
|
|
415
|
+
// Check return type of lambda. If it is a TDS type, convert it to
|
|
416
|
+
// the new relation protocol.
|
|
417
|
+
const returnType = await this._getLambdaReturnType(
|
|
418
|
+
this.serializeValueSpecification(source.lambda),
|
|
419
|
+
source.model,
|
|
420
|
+
);
|
|
421
|
+
if (returnType === QUERY_BUILDER_PURE_PATH.TDS_TABULAR_DATASET) {
|
|
422
|
+
try {
|
|
423
|
+
const transformedLambda = guaranteeType(
|
|
424
|
+
this.deserializeValueSpecification(
|
|
425
|
+
await this._engineServerClient.transformTdsToRelation_lambda({
|
|
426
|
+
model: source.model,
|
|
427
|
+
lambda: source.lambda,
|
|
428
|
+
}),
|
|
429
|
+
),
|
|
430
|
+
V1_Lambda,
|
|
431
|
+
);
|
|
432
|
+
source.lambda = transformedLambda;
|
|
433
|
+
} catch (e) {
|
|
434
|
+
assertErrorThrown(e);
|
|
435
|
+
throw new Error(
|
|
436
|
+
`Error transforming TDS protocol to relation protocol:\n${e.message}`,
|
|
437
|
+
);
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
|
|
412
441
|
// If the lambda has multiple expressions, the source query should only be the final
|
|
413
442
|
// expression of the lambda. All previous expressions should be left untouched and will
|
|
414
443
|
// be prepended to the transformed query when it is executed.
|
|
415
444
|
source.query = at(source.lambda.body, source.lambda.body.length - 1);
|
|
445
|
+
|
|
416
446
|
try {
|
|
417
447
|
source.columns = (
|
|
418
448
|
await this._getLambdaRelationType(
|
|
@@ -426,6 +456,7 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
426
456
|
`Can't get query result columns. Make sure the saved query return a relation (i.e. typed TDS). Error: ${error.message}`,
|
|
427
457
|
);
|
|
428
458
|
}
|
|
459
|
+
|
|
429
460
|
// To handle parameter value with function calls we
|
|
430
461
|
// 1. Separate the parameters with function calls from regular parameters
|
|
431
462
|
// 2. Add let statements for function parameter values and store them in the source's letParameterValueSpec
|
|
@@ -905,6 +936,18 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
905
936
|
);
|
|
906
937
|
}
|
|
907
938
|
|
|
939
|
+
private async _getLambdaReturnType(
|
|
940
|
+
lambda: PlainObject<V1_Lambda>,
|
|
941
|
+
model: PlainObject<V1_PureModelContext>,
|
|
942
|
+
): Promise<string> {
|
|
943
|
+
return (
|
|
944
|
+
(await this._engineServerClient.lambdaReturnType({
|
|
945
|
+
lambda,
|
|
946
|
+
model,
|
|
947
|
+
})) as unknown as V1_LambdaReturnTypeResult
|
|
948
|
+
).returnType;
|
|
949
|
+
}
|
|
950
|
+
|
|
908
951
|
async _getLambdaRelationType(
|
|
909
952
|
lambda: PlainObject<V1_Lambda>,
|
|
910
953
|
model: PlainObject<V1_PureModelContext>,
|
|
@@ -68,6 +68,8 @@ import { LegendDataCubeSourceViewer } from '../../components/builder/LegendDataC
|
|
|
68
68
|
import { LOCAL_FILE_QUERY_DATA_CUBE_SOURCE_TYPE } from '../model/LocalFileDataCubeSource.js';
|
|
69
69
|
import type { LegendDataCubeSourceLoaderState } from './source/LegendDataCubeSourceLoaderState.js';
|
|
70
70
|
import { LocalFileDataCubeSourceLoaderState } from './source/LocalFileDataCubeSourceLoaderState.js';
|
|
71
|
+
import { DATACUBE_APP_EVENT } from '../../__lib__/DataCubeEvent.js';
|
|
72
|
+
import { LegendApplicationTelemetryHelper } from '@finos/legend-application';
|
|
71
73
|
|
|
72
74
|
export class LegendDataCubeBuilderState {
|
|
73
75
|
readonly uuid = uuid();
|
|
@@ -382,10 +384,20 @@ export class LegendDataCubeBuilderStore {
|
|
|
382
384
|
|
|
383
385
|
this.finalizeLoad(specification, persistentDataCube, dataCubeId);
|
|
384
386
|
this.loadState.pass();
|
|
387
|
+
this.creator.logFromRawSource(
|
|
388
|
+
DATACUBE_APP_EVENT.LOAD_DATACUBE__SUCCESS,
|
|
389
|
+
specification.source,
|
|
390
|
+
);
|
|
385
391
|
} catch (error) {
|
|
386
392
|
assertErrorThrown(error);
|
|
393
|
+
const message = `DataCube Load Failure: ${error.message}`;
|
|
394
|
+
this.creator.logFromRawSource(
|
|
395
|
+
DATACUBE_APP_EVENT.LOAD_DATACUBE__FAILURE,
|
|
396
|
+
this.builder?.initialSpecification.source,
|
|
397
|
+
message,
|
|
398
|
+
);
|
|
387
399
|
this.alertService.alertError(error, {
|
|
388
|
-
message:
|
|
400
|
+
message: message,
|
|
389
401
|
});
|
|
390
402
|
this.application.navigationService.navigator.updateCurrentLocation(
|
|
391
403
|
generateBuilderRoute(null),
|
|
@@ -396,6 +408,11 @@ export class LegendDataCubeBuilderStore {
|
|
|
396
408
|
this.taskService.endTask(task);
|
|
397
409
|
}
|
|
398
410
|
}
|
|
411
|
+
|
|
412
|
+
LegendApplicationTelemetryHelper.logEvent_ApplicationInitializationSucceeded(
|
|
413
|
+
this.application.telemetryService,
|
|
414
|
+
this.application,
|
|
415
|
+
);
|
|
399
416
|
}
|
|
400
417
|
|
|
401
418
|
private finalizeLoad(
|
|
@@ -496,12 +513,22 @@ export class LegendDataCubeBuilderStore {
|
|
|
496
513
|
|
|
497
514
|
this.saverDisplay.close();
|
|
498
515
|
this.saveState.pass();
|
|
516
|
+
this.creator.logFromSource(
|
|
517
|
+
DATACUBE_APP_EVENT.CREATE_DATACUBE__SUCCESS,
|
|
518
|
+
this.builder.source,
|
|
519
|
+
);
|
|
499
520
|
} catch (error) {
|
|
500
521
|
assertErrorThrown(error);
|
|
522
|
+
const message = `DataCube Creation Failure: ${error.message}`;
|
|
501
523
|
this.alertService.alertError(error, {
|
|
502
|
-
message:
|
|
524
|
+
message: message,
|
|
503
525
|
});
|
|
504
526
|
this.saveState.fail();
|
|
527
|
+
this.creator.logFromSource(
|
|
528
|
+
DATACUBE_APP_EVENT.CREATE_DATACUBE__FAILURE,
|
|
529
|
+
this.builder.source,
|
|
530
|
+
message,
|
|
531
|
+
);
|
|
505
532
|
} finally {
|
|
506
533
|
this.taskService.endTask(task);
|
|
507
534
|
}
|
|
@@ -554,10 +581,24 @@ export class LegendDataCubeBuilderStore {
|
|
|
554
581
|
|
|
555
582
|
this.saverDisplay.close();
|
|
556
583
|
this.saveState.pass();
|
|
584
|
+
this.creator.logFromSource(
|
|
585
|
+
options?.saveAsNew
|
|
586
|
+
? DATACUBE_APP_EVENT.CREATE_DATACUBE__SUCCESS
|
|
587
|
+
: DATACUBE_APP_EVENT.UPDATE_DATACUBE__SUCCESS,
|
|
588
|
+
this.builder.source,
|
|
589
|
+
);
|
|
557
590
|
} catch (error) {
|
|
558
591
|
assertErrorThrown(error);
|
|
592
|
+
const message = `DataCube Update Failure: ${error.message}`;
|
|
593
|
+
this.creator.logFromSource(
|
|
594
|
+
options?.saveAsNew
|
|
595
|
+
? DATACUBE_APP_EVENT.CREATE_DATACUBE__FAILURE
|
|
596
|
+
: DATACUBE_APP_EVENT.UPDATE_DATACUBE__FAILURE,
|
|
597
|
+
this.builder.source,
|
|
598
|
+
message,
|
|
599
|
+
);
|
|
559
600
|
this.alertService.alertError(error, {
|
|
560
|
-
message:
|
|
601
|
+
message: message,
|
|
561
602
|
});
|
|
562
603
|
this.saveState.fail();
|
|
563
604
|
} finally {
|
|
@@ -581,6 +622,11 @@ export class LegendDataCubeBuilderStore {
|
|
|
581
622
|
const task = this.taskService.newTask('Deleting DataCube...');
|
|
582
623
|
|
|
583
624
|
try {
|
|
625
|
+
const persistentDataCubeToDelete =
|
|
626
|
+
await this.baseStore.graphManager.getDataCube(dataCubeId);
|
|
627
|
+
const specification = DataCubeSpecification.serialization.fromJson(
|
|
628
|
+
persistentDataCubeToDelete.content,
|
|
629
|
+
);
|
|
584
630
|
await this.baseStore.graphManager.deleteDataCube(dataCubeId);
|
|
585
631
|
|
|
586
632
|
// update the list of stack of recently viewed DataCubes
|
|
@@ -609,10 +655,20 @@ export class LegendDataCubeBuilderStore {
|
|
|
609
655
|
this.setDataCubeToDelete(undefined);
|
|
610
656
|
this.deleteConfirmationDisplay.close();
|
|
611
657
|
this.deleteState.pass();
|
|
658
|
+
this.creator.logFromRawSource(
|
|
659
|
+
DATACUBE_APP_EVENT.DELETE_DATACUBE__SUCCESS,
|
|
660
|
+
specification.source,
|
|
661
|
+
);
|
|
612
662
|
} catch (error) {
|
|
613
663
|
assertErrorThrown(error);
|
|
664
|
+
const message = `DataCube Delete Failure: ${error.message}`;
|
|
665
|
+
this.creator.logFromRawSource(
|
|
666
|
+
DATACUBE_APP_EVENT.DELETE_DATACUBE__FAILURE,
|
|
667
|
+
undefined,
|
|
668
|
+
message,
|
|
669
|
+
);
|
|
614
670
|
this.alertService.alertError(error, {
|
|
615
|
-
message:
|
|
671
|
+
message: message,
|
|
616
672
|
});
|
|
617
673
|
this.deleteState.fail();
|
|
618
674
|
} finally {
|