@finos/legend-data-cube 0.1.0 → 0.1.2
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__/DataCubeSetting.d.ts +1 -0
- package/lib/__lib__/DataCubeSetting.d.ts.map +1 -1
- package/lib/__lib__/DataCubeSetting.js +1 -0
- package/lib/__lib__/DataCubeSetting.js.map +1 -1
- package/lib/components/DataCubeStatusBar.d.ts.map +1 -1
- package/lib/components/DataCubeStatusBar.js +10 -3
- package/lib/components/DataCubeStatusBar.js.map +1 -1
- package/lib/components/DataCubeTitleBar.js +1 -1
- package/lib/components/DataCubeTitleBar.js.map +1 -1
- package/lib/components/core/DataCubeAlert.js +1 -1
- package/lib/components/core/DataCubeAlert.js.map +1 -1
- package/lib/components/view/grid/DataCubeGrid.d.ts.map +1 -1
- package/lib/components/view/grid/DataCubeGrid.js +26 -20
- package/lib/components/view/grid/DataCubeGrid.js.map +1 -1
- package/lib/index.css +1 -1
- package/lib/index.d.ts +2 -3
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +4 -3
- package/lib/index.js.map +1 -1
- package/lib/package.json +3 -3
- package/lib/stores/DataCubeAPI.d.ts +6 -0
- package/lib/stores/DataCubeAPI.d.ts.map +1 -1
- package/lib/stores/DataCubeAPI.js +3 -0
- package/lib/stores/DataCubeAPI.js.map +1 -1
- package/lib/stores/DataCubeOptions.d.ts +1 -1
- package/lib/stores/core/DataCubeConfigurationBuilder.js +1 -1
- package/lib/stores/core/DataCubeConfigurationBuilder.js.map +1 -1
- package/lib/stores/core/DataCubeEngine.d.ts +13 -6
- package/lib/stores/core/DataCubeEngine.d.ts.map +1 -1
- package/lib/stores/core/DataCubeEngine.js +32 -8
- package/lib/stores/core/DataCubeEngine.js.map +1 -1
- package/lib/stores/core/DataCubeQueryBuilder.d.ts +3 -4
- package/lib/stores/core/DataCubeQueryBuilder.d.ts.map +1 -1
- package/lib/stores/core/DataCubeQueryBuilder.js +19 -13
- package/lib/stores/core/DataCubeQueryBuilder.js.map +1 -1
- package/lib/stores/core/DataCubeQueryBuilderUtils.d.ts +2 -7
- package/lib/stores/core/DataCubeQueryBuilderUtils.d.ts.map +1 -1
- package/lib/stores/core/DataCubeQueryBuilderUtils.js +34 -46
- package/lib/stores/core/DataCubeQueryBuilderUtils.js.map +1 -1
- package/lib/stores/core/DataCubeQuerySnapshot.d.ts +11 -4
- package/lib/stores/core/DataCubeQuerySnapshot.d.ts.map +1 -1
- package/lib/stores/core/DataCubeQuerySnapshot.js +10 -0
- package/lib/stores/core/DataCubeQuerySnapshot.js.map +1 -1
- package/lib/stores/core/DataCubeQuerySnapshotBuilder.d.ts.map +1 -1
- package/lib/stores/core/DataCubeQuerySnapshotBuilder.js +1 -2
- package/lib/stores/core/DataCubeQuerySnapshotBuilder.js.map +1 -1
- package/lib/stores/core/DataCubeQuerySnapshotBuilderUtils.d.ts.map +1 -1
- package/lib/stores/core/DataCubeQuerySnapshotBuilderUtils.js +3 -3
- package/lib/stores/core/DataCubeQuerySnapshotBuilderUtils.js.map +1 -1
- package/lib/stores/core/model/CachedDataCubeSource.d.ts +4 -0
- package/lib/stores/core/model/CachedDataCubeSource.d.ts.map +1 -1
- package/lib/stores/core/model/CachedDataCubeSource.js +4 -0
- package/lib/stores/core/model/CachedDataCubeSource.js.map +1 -1
- package/lib/stores/services/DataCubeQuerySnapshotService.js +1 -1
- package/lib/stores/services/DataCubeQuerySnapshotService.js.map +1 -1
- package/lib/stores/services/DataCubeSettingService.d.ts.map +1 -1
- package/lib/stores/services/DataCubeSettingService.js +8 -0
- package/lib/stores/services/DataCubeSettingService.js.map +1 -1
- package/lib/stores/services/DataCubeTaskService.d.ts +4 -4
- package/lib/stores/services/DataCubeTaskService.d.ts.map +1 -1
- package/lib/stores/services/DataCubeTaskService.js +9 -7
- package/lib/stores/services/DataCubeTaskService.js.map +1 -1
- package/lib/stores/view/DataCubeViewState.d.ts +3 -1
- package/lib/stores/view/DataCubeViewState.d.ts.map +1 -1
- package/lib/stores/view/DataCubeViewState.js +54 -19
- package/lib/stores/view/DataCubeViewState.js.map +1 -1
- package/lib/stores/view/editor/DataCubeEditorState.js +1 -1
- package/lib/stores/view/editor/DataCubeEditorState.js.map +1 -1
- package/lib/stores/view/extend/DataCubeColumnEditorState.d.ts.map +1 -1
- package/lib/stores/view/extend/DataCubeColumnEditorState.js +7 -5
- package/lib/stores/view/extend/DataCubeColumnEditorState.js.map +1 -1
- package/lib/stores/view/extend/DataCubeExtendManagerState.js +2 -2
- package/lib/stores/view/extend/DataCubeExtendManagerState.js.map +1 -1
- package/lib/stores/view/grid/DataCubeGridClientEngine.d.ts.map +1 -1
- package/lib/stores/view/grid/DataCubeGridClientEngine.js +104 -108
- package/lib/stores/view/grid/DataCubeGridClientEngine.js.map +1 -1
- package/lib/stores/view/grid/DataCubeGridConfigurationBuilder.d.ts.map +1 -1
- package/lib/stores/view/grid/DataCubeGridConfigurationBuilder.js +3 -3
- package/lib/stores/view/grid/DataCubeGridConfigurationBuilder.js.map +1 -1
- package/lib/stores/view/grid/DataCubeGridQueryBuilder.d.ts +3 -4
- package/lib/stores/view/grid/DataCubeGridQueryBuilder.d.ts.map +1 -1
- package/lib/stores/view/grid/DataCubeGridQueryBuilder.js +5 -5
- package/lib/stores/view/grid/DataCubeGridQueryBuilder.js.map +1 -1
- package/lib/stores/view/grid/DataCubeGridState.d.ts.map +1 -1
- package/lib/stores/view/grid/DataCubeGridState.js +63 -8
- package/lib/stores/view/grid/DataCubeGridState.js.map +1 -1
- package/package.json +7 -7
- package/src/__lib__/DataCubeSetting.ts +1 -0
- package/src/components/DataCubeStatusBar.tsx +18 -3
- package/src/components/DataCubeTitleBar.tsx +3 -3
- package/src/components/core/DataCubeAlert.tsx +1 -1
- package/src/components/view/grid/DataCubeGrid.tsx +23 -7
- package/src/index.tsx +8 -3
- package/src/stores/DataCubeAPI.ts +9 -0
- package/src/stores/DataCubeOptions.ts +1 -1
- package/src/stores/core/DataCubeConfigurationBuilder.ts +1 -1
- package/src/stores/core/DataCubeEngine.tsx +47 -20
- package/src/stores/core/DataCubeQueryBuilder.ts +38 -30
- package/src/stores/core/DataCubeQueryBuilderUtils.ts +42 -67
- package/src/stores/core/DataCubeQuerySnapshot.ts +15 -4
- package/src/stores/core/DataCubeQuerySnapshotBuilder.ts +2 -6
- package/src/stores/core/DataCubeQuerySnapshotBuilderUtils.ts +2 -3
- package/src/stores/core/model/CachedDataCubeSource.ts +4 -0
- package/src/stores/services/DataCubeQuerySnapshotService.ts +2 -2
- package/src/stores/services/DataCubeSettingService.tsx +8 -0
- package/src/stores/services/DataCubeTaskService.ts +9 -7
- package/src/stores/view/DataCubeViewState.ts +58 -27
- package/src/stores/view/editor/DataCubeEditorState.tsx +1 -1
- package/src/stores/view/extend/DataCubeColumnEditorState.tsx +7 -15
- package/src/stores/view/extend/DataCubeExtendManagerState.tsx +2 -2
- package/src/stores/view/grid/DataCubeGridClientEngine.ts +149 -168
- package/src/stores/view/grid/DataCubeGridConfigurationBuilder.tsx +6 -7
- package/src/stores/view/grid/DataCubeGridQueryBuilder.ts +19 -32
- package/src/stores/view/grid/DataCubeGridState.ts +89 -8
|
@@ -60,11 +60,10 @@ import {
|
|
|
60
60
|
type DataCubeGridClientDataFetchRequest,
|
|
61
61
|
} from './DataCubeGridClientEngine.js';
|
|
62
62
|
import { DataCubeConfiguration } from '../../core/model/DataCubeConfiguration.js';
|
|
63
|
-
import type { DataCubeQueryFilterOperation } from '../../core/filter/DataCubeQueryFilterOperation.js';
|
|
64
|
-
import type { DataCubeQueryAggregateOperation } from '../../core/aggregation/DataCubeQueryAggregateOperation.js';
|
|
65
63
|
import { _colSpecArrayParam } from '../../core/DataCubeQuerySnapshotBuilderUtils.js';
|
|
66
64
|
import { buildExecutableQuery } from '../../core/DataCubeQueryBuilder.js';
|
|
67
65
|
import type { DataCubeSource } from '../../core/model/DataCubeSource.js';
|
|
66
|
+
import type { DataCubeEngine } from '../../core/DataCubeEngine.js';
|
|
68
67
|
|
|
69
68
|
/*****************************************************************************
|
|
70
69
|
* [GRID]
|
|
@@ -148,11 +147,7 @@ export function buildGridDataFetchExecutableQuery(
|
|
|
148
147
|
request: DataCubeGridClientDataFetchRequest,
|
|
149
148
|
snapshot: DataCubeQuerySnapshot,
|
|
150
149
|
source: DataCubeSource,
|
|
151
|
-
|
|
152
|
-
source: DataCubeSource,
|
|
153
|
-
) => V1_AppliedFunction | undefined,
|
|
154
|
-
filterOperations: DataCubeQueryFilterOperation[],
|
|
155
|
-
aggregateOperations: DataCubeQueryAggregateOperation[],
|
|
150
|
+
engine: DataCubeEngine,
|
|
156
151
|
enablePagination: boolean,
|
|
157
152
|
) {
|
|
158
153
|
const processedSnapshot = snapshot.clone();
|
|
@@ -170,28 +165,21 @@ export function buildGridDataFetchExecutableQuery(
|
|
|
170
165
|
],
|
|
171
166
|
};
|
|
172
167
|
}
|
|
173
|
-
return buildExecutableQuery(
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
filterOperations,
|
|
178
|
-
aggregateOperations,
|
|
179
|
-
{
|
|
180
|
-
postProcessor: generateGridDataFetchExecutableQueryPostProcessor(request),
|
|
181
|
-
rootAggregation: {
|
|
182
|
-
columnName: INTERNAL__GRID_CLIENT_ROOT_AGGREGATION_COLUMN_ID,
|
|
183
|
-
},
|
|
184
|
-
pagination:
|
|
185
|
-
enablePagination &&
|
|
186
|
-
request.startRow !== undefined &&
|
|
187
|
-
request.endRow !== undefined
|
|
188
|
-
? {
|
|
189
|
-
start: request.startRow,
|
|
190
|
-
end: request.endRow,
|
|
191
|
-
}
|
|
192
|
-
: undefined,
|
|
168
|
+
return buildExecutableQuery(processedSnapshot, source, engine, {
|
|
169
|
+
postProcessor: generateGridDataFetchExecutableQueryPostProcessor(request),
|
|
170
|
+
rootAggregation: {
|
|
171
|
+
columnName: INTERNAL__GRID_CLIENT_ROOT_AGGREGATION_COLUMN_ID,
|
|
193
172
|
},
|
|
194
|
-
|
|
173
|
+
pagination:
|
|
174
|
+
enablePagination &&
|
|
175
|
+
request.startRow !== undefined &&
|
|
176
|
+
request.endRow !== undefined
|
|
177
|
+
? {
|
|
178
|
+
start: request.startRow,
|
|
179
|
+
end: request.endRow,
|
|
180
|
+
}
|
|
181
|
+
: undefined,
|
|
182
|
+
});
|
|
195
183
|
}
|
|
196
184
|
|
|
197
185
|
function generateGridDataFetchExecutableQueryPostProcessor(
|
|
@@ -202,8 +190,7 @@ function generateGridDataFetchExecutableQueryPostProcessor(
|
|
|
202
190
|
sequence: V1_AppliedFunction[],
|
|
203
191
|
funcMap: DataCubeQueryFunctionMap,
|
|
204
192
|
configuration: DataCubeConfiguration,
|
|
205
|
-
|
|
206
|
-
aggregateOperations: DataCubeQueryAggregateOperation[],
|
|
193
|
+
engine: DataCubeEngine,
|
|
207
194
|
) => {
|
|
208
195
|
const _unprocess = _functionCompositionUnProcessor(sequence, funcMap);
|
|
209
196
|
const data = snapshot.data;
|
|
@@ -285,7 +272,7 @@ function generateGridDataFetchExecutableQueryPostProcessor(
|
|
|
285
272
|
}),
|
|
286
273
|
groupOperator: DataCubeQueryFilterGroupOperator.AND,
|
|
287
274
|
},
|
|
288
|
-
filterOperations,
|
|
275
|
+
engine.filterOperations,
|
|
289
276
|
),
|
|
290
277
|
],
|
|
291
278
|
),
|
|
@@ -312,7 +299,7 @@ function generateGridDataFetchExecutableQueryPostProcessor(
|
|
|
312
299
|
groupByColumns,
|
|
313
300
|
snapshot,
|
|
314
301
|
configuration,
|
|
315
|
-
aggregateOperations,
|
|
302
|
+
engine.aggregateOperations,
|
|
316
303
|
),
|
|
317
304
|
|
|
318
305
|
// if pivot is present, add sum aggregation columns for each
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
guaranteeNonNullable,
|
|
20
20
|
type DebouncedFunc,
|
|
21
21
|
} from '@finos/legend-shared';
|
|
22
|
-
import { action, makeObservable, observable } from 'mobx';
|
|
22
|
+
import { action, makeObservable, observable, runInAction } from 'mobx';
|
|
23
23
|
import type { GridApi } from 'ag-grid-community';
|
|
24
24
|
import type { DataCubeViewState } from '../DataCubeViewState.js';
|
|
25
25
|
import {
|
|
@@ -38,6 +38,8 @@ import { DataCubeConfiguration } from '../../core/model/DataCubeConfiguration.js
|
|
|
38
38
|
import { DataCubeGridControllerState } from './DataCubeGridControllerState.js';
|
|
39
39
|
import { DataCubeGridClientExportEngine } from './DataCubeGridClientExportEngine.js';
|
|
40
40
|
import { DataCubeSettingKey } from '../../../__lib__/DataCubeSetting.js';
|
|
41
|
+
import { DEFAULT_ALERT_WINDOW_CONFIG } from '../../services/DataCubeLayoutService.js';
|
|
42
|
+
import { AlertType } from '../../services/DataCubeAlertService.js';
|
|
41
43
|
|
|
42
44
|
/**
|
|
43
45
|
* This query editor state is responsible for syncing the internal state of ag-grid
|
|
@@ -125,15 +127,94 @@ export class DataCubeGridState extends DataCubeQuerySnapshotController {
|
|
|
125
127
|
}
|
|
126
128
|
|
|
127
129
|
async setCachingEnabled(val: boolean) {
|
|
128
|
-
this.isCachingEnabled
|
|
129
|
-
|
|
130
|
-
|
|
130
|
+
if (val === this.isCachingEnabled) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// disable caching
|
|
135
|
+
if (val === false) {
|
|
136
|
+
await this._view.disposeCache();
|
|
137
|
+
|
|
138
|
+
runInAction(() => {
|
|
139
|
+
this.isCachingEnabled = val;
|
|
140
|
+
|
|
141
|
+
// hard reset the grid, this will force the grid to fetch data again
|
|
142
|
+
this.clientDataSource = new DataCubeGridClientServerSideDataSource(
|
|
143
|
+
this,
|
|
144
|
+
this._view,
|
|
145
|
+
);
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// enable caching
|
|
152
|
+
const run = async () => {
|
|
131
153
|
await this._view.initializeCache();
|
|
132
|
-
|
|
154
|
+
|
|
155
|
+
// only update value if cache processing succeeds
|
|
156
|
+
if (this._view.processCacheState.hasSucceeded) {
|
|
157
|
+
runInAction(() => {
|
|
158
|
+
this.isCachingEnabled = val;
|
|
159
|
+
|
|
160
|
+
// hard reset the grid, this will force the grid to fetch data again
|
|
161
|
+
this.clientDataSource = new DataCubeGridClientServerSideDataSource(
|
|
162
|
+
this,
|
|
163
|
+
this._view,
|
|
164
|
+
);
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
};
|
|
168
|
+
|
|
169
|
+
// TODO?: we might want to do a quick check here for the amount of data the cache
|
|
170
|
+
// will handle, so maybe fire a COUNT query to check for the number of records
|
|
171
|
+
// and check that against a threshold, we will need to alter the prompt below accordingly.
|
|
172
|
+
if (
|
|
173
|
+
this._settingService.getBooleanValue(
|
|
174
|
+
DataCubeSettingKey.GRID_CLIENT__SHOW_CACHE_PERFORMANCE_WARNING,
|
|
175
|
+
)
|
|
176
|
+
) {
|
|
177
|
+
this._view.alertService.alert({
|
|
178
|
+
message: `Confirm you want to proceed with caching`,
|
|
179
|
+
text: `When enabled, the source dataset will be cached locally in order to boost query performance. But depending on computational resource available to your environment, sometimes, caching can negatively impact the overall performance, and can even lead to crashes.\nDo you still want to proceed?`,
|
|
180
|
+
type: AlertType.WARNING,
|
|
181
|
+
actions: [
|
|
182
|
+
{
|
|
183
|
+
label: 'Abort',
|
|
184
|
+
handler: () => {},
|
|
185
|
+
},
|
|
186
|
+
{
|
|
187
|
+
label: 'Proceed',
|
|
188
|
+
handler: () => {
|
|
189
|
+
run().catch((error) =>
|
|
190
|
+
this._view.alertService.alertUnhandledError(error),
|
|
191
|
+
);
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
{
|
|
195
|
+
label: 'Dismiss Warning and Proceed',
|
|
196
|
+
handler: () => {
|
|
197
|
+
this._view.settingService.updateValue(
|
|
198
|
+
this._view.dataCube.api,
|
|
199
|
+
DataCubeSettingKey.GRID_CLIENT__SHOW_CACHE_PERFORMANCE_WARNING,
|
|
200
|
+
false,
|
|
201
|
+
);
|
|
202
|
+
run().catch((error) =>
|
|
203
|
+
this._view.alertService.alertUnhandledError(error),
|
|
204
|
+
);
|
|
205
|
+
},
|
|
206
|
+
},
|
|
207
|
+
],
|
|
208
|
+
windowConfig: {
|
|
209
|
+
...DEFAULT_ALERT_WINDOW_CONFIG,
|
|
210
|
+
width: 600,
|
|
211
|
+
height: 210,
|
|
212
|
+
minWidth: 300,
|
|
213
|
+
minHeight: 150,
|
|
214
|
+
},
|
|
215
|
+
});
|
|
133
216
|
} else {
|
|
134
|
-
|
|
135
|
-
await this._view.clearCache();
|
|
136
|
-
this._client?.setGridOption('loading', false);
|
|
217
|
+
await run();
|
|
137
218
|
}
|
|
138
219
|
}
|
|
139
220
|
|