@finos/legend-data-cube 0.1.0 → 0.1.1
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/components/view/grid/DataCubeGrid.d.ts.map +1 -1
- package/lib/components/view/grid/DataCubeGrid.js +20 -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 +8 -5
- package/lib/stores/core/DataCubeEngine.d.ts.map +1 -1
- package/lib/stores/core/DataCubeEngine.js +31 -7
- 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/DataCubeTaskService.d.ts.map +1 -1
- package/lib/stores/services/DataCubeTaskService.js +2 -0
- 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 +46 -18
- package/lib/stores/view/DataCubeViewState.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/grid/DataCubeGridClientEngine.d.ts.map +1 -1
- package/lib/stores/view/grid/DataCubeGridClientEngine.js +7 -4
- package/lib/stores/view/grid/DataCubeGridClientEngine.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 +18 -8
- package/lib/stores/view/grid/DataCubeGridState.js.map +1 -1
- package/package.json +7 -7
- package/src/components/view/grid/DataCubeGrid.tsx +8 -5
- 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 +41 -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/DataCubeTaskService.ts +2 -0
- package/src/stores/view/DataCubeViewState.ts +46 -26
- package/src/stores/view/extend/DataCubeColumnEditorState.tsx +7 -15
- package/src/stores/view/grid/DataCubeGridClientEngine.ts +20 -26
- package/src/stores/view/grid/DataCubeGridQueryBuilder.ts +19 -32
- package/src/stores/view/grid/DataCubeGridState.ts +24 -8
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
import { debounce, guaranteeNonNullable, } from '@finos/legend-shared';
|
|
17
|
-
import { action, makeObservable, observable } from 'mobx';
|
|
17
|
+
import { action, makeObservable, observable, runInAction } from 'mobx';
|
|
18
18
|
import { DataCubeGridClientServerSideDataSource, INTERNAL__GRID_CLIENT_DEFAULT_CACHE_BLOCK_SIZE, INTERNAL__GRID_CLIENT_DATA_FETCH_MANUAL_TRIGGER_COLUMN_ID, INTERNAL__GRID_CLIENT_MAX_CACHE_BLOCK_SIZE, INTERNAL__GRID_CLIENT_DEFAULT_ENABLE_PAGINATION, computeHashCodeForDataFetchManualTrigger, INTERNAL__GRID_CLIENT_DEFAULT_ENABLE_CACHING, } from './DataCubeGridClientEngine.js';
|
|
19
19
|
import { DataCubeQuerySnapshotController } from '../../services/DataCubeQuerySnapshotService.js';
|
|
20
20
|
import { generateGridOptionsFromSnapshot } from './DataCubeGridConfigurationBuilder.js';
|
|
@@ -87,17 +87,27 @@ export class DataCubeGridState extends DataCubeQuerySnapshotController {
|
|
|
87
87
|
});
|
|
88
88
|
}
|
|
89
89
|
async setCachingEnabled(val) {
|
|
90
|
-
this.isCachingEnabled
|
|
91
|
-
if (
|
|
92
|
-
|
|
90
|
+
const currentVal = this.isCachingEnabled;
|
|
91
|
+
if (val === currentVal) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
runInAction(() => {
|
|
95
|
+
this.isCachingEnabled = val;
|
|
96
|
+
});
|
|
97
|
+
if (val) {
|
|
93
98
|
await this._view.initializeCache();
|
|
94
|
-
this.
|
|
99
|
+
if (this._view.processCacheState.hasFailed) {
|
|
100
|
+
this.isCachingEnabled = currentVal;
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
95
103
|
}
|
|
96
104
|
else {
|
|
97
|
-
this.
|
|
98
|
-
await this._view.clearCache();
|
|
99
|
-
this._client?.setGridOption('loading', false);
|
|
105
|
+
await this._view.disposeCache();
|
|
100
106
|
}
|
|
107
|
+
runInAction(() => {
|
|
108
|
+
// hard reset the grid, this will force the grid to fetch data again
|
|
109
|
+
this.clientDataSource = new DataCubeGridClientServerSideDataSource(this, this._view);
|
|
110
|
+
});
|
|
101
111
|
}
|
|
102
112
|
setScrollHintText(val) {
|
|
103
113
|
this.scrollHintText = val;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DataCubeGridState.js","sourceRoot":"","sources":["../../../../src/stores/view/grid/DataCubeGridState.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,QAAQ,EACR,oBAAoB,GAErB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"DataCubeGridState.js","sourceRoot":"","sources":["../../../../src/stores/view/grid/DataCubeGridState.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@finos/legend-data-cube",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Legend DataCube",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"legend",
|
|
@@ -42,16 +42,16 @@
|
|
|
42
42
|
"test:watch": "jest --watch"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@finos/legend-art": "7.1.
|
|
46
|
-
"@finos/legend-code-editor": "2.0.
|
|
47
|
-
"@finos/legend-graph": "32.1.
|
|
48
|
-
"@finos/legend-shared": "11.0.
|
|
45
|
+
"@finos/legend-art": "7.1.80",
|
|
46
|
+
"@finos/legend-code-editor": "2.0.43",
|
|
47
|
+
"@finos/legend-graph": "32.1.1",
|
|
48
|
+
"@finos/legend-shared": "11.0.2",
|
|
49
49
|
"@types/react": "19.0.8",
|
|
50
50
|
"ag-grid-community": "33.0.4",
|
|
51
51
|
"ag-grid-enterprise": "33.0.4",
|
|
52
52
|
"ag-grid-react": "33.0.4",
|
|
53
|
-
"mathjs": "14.1
|
|
54
|
-
"mobx": "6.13.
|
|
53
|
+
"mathjs": "14.2.1",
|
|
54
|
+
"mobx": "6.13.6",
|
|
55
55
|
"mobx-react-lite": "4.1.0",
|
|
56
56
|
"monaco-editor": "0.52.2",
|
|
57
57
|
"react": "19.0.0",
|
|
@@ -44,6 +44,7 @@ import type {
|
|
|
44
44
|
} from '../../../stores/core/model/DataCubeConfiguration.js';
|
|
45
45
|
import { generateBaseGridOptions } from '../../../stores/view/grid/DataCubeGridConfigurationBuilder.js';
|
|
46
46
|
import type { DataCubeViewState } from '../../../stores/view/DataCubeViewState.js';
|
|
47
|
+
import { FormBadge_WIP } from '../../core/DataCubeFormUtils.js';
|
|
47
48
|
|
|
48
49
|
// NOTE: This is a workaround to prevent ag-grid license key check from flooding the console screen
|
|
49
50
|
// with its stack trace in Chrome.
|
|
@@ -318,8 +319,9 @@ const DataCubeGridStatusBar = observer((props: { view: DataCubeViewState }) => {
|
|
|
318
319
|
Pagination
|
|
319
320
|
</div>
|
|
320
321
|
</button>
|
|
321
|
-
{view.dataCube.options?.enableCache
|
|
322
|
-
|
|
322
|
+
{view.dataCube.options?.enableCache && (
|
|
323
|
+
<>
|
|
324
|
+
<div className="h-3 w-[1px] bg-neutral-200" />
|
|
323
325
|
<button
|
|
324
326
|
className="flex h-full items-center p-2"
|
|
325
327
|
// eslint-disable-next-line @typescript-eslint/no-misused-promises
|
|
@@ -347,15 +349,16 @@ const DataCubeGridStatusBar = observer((props: { view: DataCubeViewState }) => {
|
|
|
347
349
|
disableFocusRipple={true}
|
|
348
350
|
/>
|
|
349
351
|
<div
|
|
350
|
-
className={cn('text-sm', {
|
|
352
|
+
className={cn('flex items-center text-sm', {
|
|
351
353
|
'text-sky-600': grid.isCachingEnabled,
|
|
352
354
|
'text-neutral-500': !grid.isCachingEnabled,
|
|
353
355
|
})}
|
|
354
356
|
>
|
|
355
|
-
Cache
|
|
357
|
+
Cache <FormBadge_WIP />
|
|
356
358
|
</div>
|
|
357
359
|
</button>
|
|
358
|
-
|
|
360
|
+
</>
|
|
361
|
+
)}
|
|
359
362
|
</div>
|
|
360
363
|
</div>
|
|
361
364
|
);
|
package/src/index.tsx
CHANGED
|
@@ -19,12 +19,11 @@ export * from './stores/core/model/DataCubeSource.js';
|
|
|
19
19
|
export { type DataCubeColumn } from './stores/core/model/DataCubeColumn.js';
|
|
20
20
|
export * from './stores/core/model/DataCubeConfiguration.js';
|
|
21
21
|
export * from './stores/core/model/AdhocQueryDataCubeSource.js';
|
|
22
|
+
export { CachedDataCubeSource } from './stores/core/model/CachedDataCubeSource.js';
|
|
22
23
|
|
|
23
24
|
export * from './stores/core/DataCubeEngine.js';
|
|
24
25
|
export * from './stores/core/DataCubeQueryEngine.js';
|
|
25
|
-
export * from './stores/core/DataCubeQueryBuilderUtils.js';
|
|
26
26
|
export { DataCubeQuerySnapshot } from './stores/core/DataCubeQuerySnapshot.js';
|
|
27
|
-
export * from './stores/core/filter/DataCubeQueryFilterOperation.js';
|
|
28
27
|
|
|
29
28
|
export {
|
|
30
29
|
type DataCubeSetting,
|
|
@@ -54,4 +53,10 @@ export * from './components/DataCube.js';
|
|
|
54
53
|
export * from './components/core/DataCubeFormUtils.js';
|
|
55
54
|
export * from './components/DataCubePlaceholder.js';
|
|
56
55
|
|
|
57
|
-
|
|
56
|
+
// some low-level/core utilities we expose for building DataCube extensions
|
|
57
|
+
// or implementing DataCube engine
|
|
58
|
+
export {
|
|
59
|
+
_function,
|
|
60
|
+
_lambda,
|
|
61
|
+
_elementPtr,
|
|
62
|
+
} from './stores/core/DataCubeQueryBuilderUtils.js';
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import type { DataCubeQuery } from './core/model/DataCubeQuery.js';
|
|
18
|
+
import type { DataCubeSource } from './core/model/DataCubeSource.js';
|
|
18
19
|
import type { DataCubeState } from './DataCubeState.js';
|
|
19
20
|
import type { DataCubeViewState } from './view/DataCubeViewState.js';
|
|
20
21
|
|
|
@@ -23,6 +24,10 @@ import type { DataCubeViewState } from './view/DataCubeViewState.js';
|
|
|
23
24
|
* internal components and functionalities.
|
|
24
25
|
*/
|
|
25
26
|
export interface DataCubeAPI {
|
|
27
|
+
/**
|
|
28
|
+
* Get the processed source of the DataCube.
|
|
29
|
+
*/
|
|
30
|
+
getProcessedSource(): DataCubeSource | undefined;
|
|
26
31
|
/**
|
|
27
32
|
* Generates the data cube query (including the query, configuration, and source)
|
|
28
33
|
* from the latest state of the DataCube.
|
|
@@ -61,6 +66,10 @@ export class INTERNAL__DataCubeAPI implements DataCubeAPI {
|
|
|
61
66
|
|
|
62
67
|
// ----------------------------- API -----------------------------
|
|
63
68
|
|
|
69
|
+
getProcessedSource() {
|
|
70
|
+
return this._dataCube.view.getOriginalSource();
|
|
71
|
+
}
|
|
72
|
+
|
|
64
73
|
generateDataCubeQuery() {
|
|
65
74
|
return this._dataCube.view.generateDataCubeQuery();
|
|
66
75
|
}
|
|
@@ -127,7 +127,7 @@ export type DataCubeOptions = {
|
|
|
127
127
|
*/
|
|
128
128
|
documentationUrl?: string | undefined;
|
|
129
129
|
/**
|
|
130
|
-
*
|
|
130
|
+
* Enables caching to suppport local query execution.
|
|
131
131
|
*/
|
|
132
132
|
enableCache?: boolean | undefined;
|
|
133
133
|
};
|
|
@@ -133,7 +133,7 @@ export function newConfiguration(
|
|
|
133
133
|
//
|
|
134
134
|
// since we have made sure all groupBy sort columns must be of the same direction
|
|
135
135
|
// we simply retrieve the direction from the one of the column provided
|
|
136
|
-
if (groupBySortColumns
|
|
136
|
+
if (groupBySortColumns?.length) {
|
|
137
137
|
configuration.treeColumnSortDirection = at(groupBySortColumns, 0).direction;
|
|
138
138
|
}
|
|
139
139
|
|
|
@@ -20,6 +20,8 @@ import {
|
|
|
20
20
|
type TDSExecutionResult,
|
|
21
21
|
type V1_AppliedFunction,
|
|
22
22
|
PRIMITIVE_TYPE,
|
|
23
|
+
V1_deserializeValueSpecification,
|
|
24
|
+
V1_serializeValueSpecification,
|
|
23
25
|
} from '@finos/legend-graph';
|
|
24
26
|
import {
|
|
25
27
|
getFilterOperation,
|
|
@@ -65,20 +67,25 @@ import { DataCubeQueryFilterOperation__EndWithCaseInsensitive } from './filter/D
|
|
|
65
67
|
import { DataCubeQueryFilterOperation__NotEndWith } from './filter/DataCubeQueryFilterOperation__NotEndWith.js';
|
|
66
68
|
import { DataCubeQueryFilterOperation__IsNull } from './filter/DataCubeQueryFilterOperation__IsNull.js';
|
|
67
69
|
import { DataCubeQueryFilterOperation__IsNotNull } from './filter/DataCubeQueryFilterOperation__IsNotNull.js';
|
|
68
|
-
import
|
|
70
|
+
import { DataCubeQuerySnapshot } from './DataCubeQuerySnapshot.js';
|
|
69
71
|
import { buildExecutableQuery } from './DataCubeQueryBuilder.js';
|
|
70
|
-
import type
|
|
72
|
+
import { _toCol, type DataCubeColumn } from './model/DataCubeColumn.js';
|
|
71
73
|
import {
|
|
72
74
|
type DataCubeSource,
|
|
73
75
|
INTERNAL__DataCubeSource,
|
|
74
76
|
} from './model/DataCubeSource.js';
|
|
75
|
-
import {
|
|
77
|
+
import {
|
|
78
|
+
_primitiveValue,
|
|
79
|
+
_selectFunction,
|
|
80
|
+
} from './DataCubeQueryBuilderUtils.js';
|
|
76
81
|
import {
|
|
77
82
|
type DocumentationEntry,
|
|
78
83
|
type LogEvent,
|
|
79
84
|
type PlainObject,
|
|
80
85
|
} from '@finos/legend-shared';
|
|
81
86
|
import type { CachedDataCubeSource } from './model/CachedDataCubeSource.js';
|
|
87
|
+
import { DataCubeQuery } from './model/DataCubeQuery.js';
|
|
88
|
+
import { newConfiguration } from './DataCubeConfigurationBuilder.js';
|
|
82
89
|
|
|
83
90
|
export type CompletionItem = {
|
|
84
91
|
completion: string;
|
|
@@ -168,6 +175,14 @@ export abstract class DataCubeEngine {
|
|
|
168
175
|
return getAggregateOperation(value, this.aggregateOperations);
|
|
169
176
|
}
|
|
170
177
|
|
|
178
|
+
deserializeValueSpecification(json: PlainObject<V1_ValueSpecification>) {
|
|
179
|
+
return V1_deserializeValueSpecification(json, []);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
serializeValueSpecification(protocol: V1_ValueSpecification) {
|
|
183
|
+
return V1_serializeValueSpecification(protocol, []);
|
|
184
|
+
}
|
|
185
|
+
|
|
171
186
|
/**
|
|
172
187
|
* By default, for a function chain, Pure grammar composer will extract the first parameter of the first function
|
|
173
188
|
* and render it as the caller of that function rather than a parameter
|
|
@@ -184,21 +199,34 @@ export abstract class DataCubeEngine {
|
|
|
184
199
|
source.query = _primitiveValue(PRIMITIVE_TYPE.STRING, '');
|
|
185
200
|
return (
|
|
186
201
|
await this.getValueSpecificationCode(
|
|
187
|
-
buildExecutableQuery(
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
() => undefined,
|
|
191
|
-
this.filterOperations,
|
|
192
|
-
this.aggregateOperations,
|
|
193
|
-
),
|
|
202
|
+
buildExecutableQuery(snapshot, source, this, {
|
|
203
|
+
skipExecutionContext: true,
|
|
204
|
+
}),
|
|
194
205
|
pretty,
|
|
195
206
|
)
|
|
196
207
|
).substring(`''->`.length);
|
|
197
208
|
}
|
|
198
209
|
|
|
210
|
+
async generateBaseQuery(sourceData: PlainObject) {
|
|
211
|
+
const source = await this.processQuerySource(sourceData);
|
|
212
|
+
const query = new DataCubeQuery();
|
|
213
|
+
query.source = sourceData;
|
|
214
|
+
query.query = await this.getValueSpecificationCode(
|
|
215
|
+
_selectFunction(source.columns),
|
|
216
|
+
);
|
|
217
|
+
const snapshot = DataCubeQuerySnapshot.create({});
|
|
218
|
+
snapshot.data.sourceColumns = source.columns.map(_toCol);
|
|
219
|
+
snapshot.data.selectColumns = source.columns.map(_toCol);
|
|
220
|
+
const configuration = newConfiguration({
|
|
221
|
+
snapshot,
|
|
222
|
+
});
|
|
223
|
+
query.configuration = configuration;
|
|
224
|
+
return query;
|
|
225
|
+
}
|
|
226
|
+
|
|
199
227
|
// ---------------------------------- PROCESSOR ----------------------------------
|
|
200
228
|
|
|
201
|
-
abstract processQuerySource(
|
|
229
|
+
abstract processQuerySource(sourceData: PlainObject): Promise<DataCubeSource>;
|
|
202
230
|
|
|
203
231
|
abstract parseValueSpecification(
|
|
204
232
|
code: string,
|
|
@@ -237,12 +265,7 @@ export abstract class DataCubeEngine {
|
|
|
237
265
|
source: DataCubeSource,
|
|
238
266
|
): V1_AppliedFunction | undefined;
|
|
239
267
|
|
|
240
|
-
|
|
241
|
-
source: DataCubeSource,
|
|
242
|
-
snapshot: DataCubeQuerySnapshot,
|
|
243
|
-
): DataCubeQuerySnapshot;
|
|
244
|
-
|
|
245
|
-
// ---------------------------------- CACHING --------------------------------------
|
|
268
|
+
// ---------------------------------- CACHING ----------------------------------
|
|
246
269
|
|
|
247
270
|
async initializeCache(
|
|
248
271
|
source: DataCubeSource,
|
|
@@ -250,9 +273,7 @@ export abstract class DataCubeEngine {
|
|
|
250
273
|
return undefined;
|
|
251
274
|
}
|
|
252
275
|
|
|
253
|
-
async
|
|
254
|
-
// do nothing
|
|
255
|
-
}
|
|
276
|
+
async disposeCache(source: CachedDataCubeSource) {}
|
|
256
277
|
|
|
257
278
|
// ---------------------------------- APPLICATION ----------------------------------
|
|
258
279
|
|
|
@@ -21,22 +21,24 @@
|
|
|
21
21
|
* the query snapshot. The executable query is then used to fetch data.
|
|
22
22
|
***************************************************************************************/
|
|
23
23
|
|
|
24
|
-
import {
|
|
24
|
+
import {
|
|
25
|
+
PRIMITIVE_TYPE,
|
|
26
|
+
V1_Lambda,
|
|
27
|
+
type V1_AppliedFunction,
|
|
28
|
+
} from '@finos/legend-graph';
|
|
25
29
|
import { type DataCubeQuerySnapshot } from './DataCubeQuerySnapshot.js';
|
|
26
|
-
import { at } from '@finos/legend-shared';
|
|
30
|
+
import { at, guaranteeType } from '@finos/legend-shared';
|
|
27
31
|
import {
|
|
28
32
|
DataCubeFunction,
|
|
29
33
|
DataCubeQuerySortDirection,
|
|
30
34
|
type DataCubeQueryFunctionMap,
|
|
31
35
|
} from './DataCubeQueryEngine.js';
|
|
32
36
|
import { DataCubeConfiguration } from './model/DataCubeConfiguration.js';
|
|
33
|
-
import type { DataCubeQueryFilterOperation } from './filter/DataCubeQueryFilterOperation.js';
|
|
34
37
|
import {
|
|
35
38
|
_col,
|
|
36
39
|
_collection,
|
|
37
40
|
_cols,
|
|
38
41
|
_colSpec,
|
|
39
|
-
_deserializeLambda,
|
|
40
42
|
_filter,
|
|
41
43
|
_function,
|
|
42
44
|
_groupByAggCols,
|
|
@@ -48,26 +50,21 @@ import {
|
|
|
48
50
|
_functionCompositionProcessor,
|
|
49
51
|
_extendRootAggregation,
|
|
50
52
|
} from './DataCubeQueryBuilderUtils.js';
|
|
51
|
-
import type { DataCubeQueryAggregateOperation } from './aggregation/DataCubeQueryAggregateOperation.js';
|
|
52
53
|
import type { DataCubeSource } from './model/DataCubeSource.js';
|
|
53
54
|
import { _findCol } from './model/DataCubeColumn.js';
|
|
55
|
+
import type { DataCubeEngine } from './DataCubeEngine.js';
|
|
54
56
|
|
|
55
57
|
export function buildExecutableQuery(
|
|
56
58
|
snapshot: DataCubeQuerySnapshot,
|
|
57
59
|
source: DataCubeSource,
|
|
58
|
-
|
|
59
|
-
source: DataCubeSource,
|
|
60
|
-
) => V1_AppliedFunction | undefined,
|
|
61
|
-
filterOperations: DataCubeQueryFilterOperation[],
|
|
62
|
-
aggregateOperations: DataCubeQueryAggregateOperation[],
|
|
60
|
+
engine: DataCubeEngine,
|
|
63
61
|
options?: {
|
|
64
62
|
postProcessor?: (
|
|
65
63
|
snapshot: DataCubeQuerySnapshot,
|
|
66
64
|
sequence: V1_AppliedFunction[],
|
|
67
65
|
funcMap: DataCubeQueryFunctionMap,
|
|
68
66
|
configuration: DataCubeConfiguration,
|
|
69
|
-
|
|
70
|
-
aggregateOperations: DataCubeQueryAggregateOperation[],
|
|
67
|
+
engine: DataCubeEngine,
|
|
71
68
|
) => void;
|
|
72
69
|
rootAggregation?:
|
|
73
70
|
| {
|
|
@@ -101,8 +98,16 @@ export function buildExecutableQuery(
|
|
|
101
98
|
_cols([
|
|
102
99
|
_colSpec(
|
|
103
100
|
col.name,
|
|
104
|
-
|
|
105
|
-
|
|
101
|
+
guaranteeType(
|
|
102
|
+
engine.deserializeValueSpecification(col.mapFn),
|
|
103
|
+
V1_Lambda,
|
|
104
|
+
),
|
|
105
|
+
col.reduceFn
|
|
106
|
+
? guaranteeType(
|
|
107
|
+
engine.deserializeValueSpecification(col.reduceFn),
|
|
108
|
+
V1_Lambda,
|
|
109
|
+
)
|
|
110
|
+
: undefined,
|
|
106
111
|
),
|
|
107
112
|
]),
|
|
108
113
|
]),
|
|
@@ -116,7 +121,7 @@ export function buildExecutableQuery(
|
|
|
116
121
|
_process(
|
|
117
122
|
'filter',
|
|
118
123
|
_function(DataCubeFunction.FILTER, [
|
|
119
|
-
_lambda([_var()], [_filter(data.filter, filterOperations)]),
|
|
124
|
+
_lambda([_var()], [_filter(data.filter, engine.filterOperations)]),
|
|
120
125
|
]),
|
|
121
126
|
);
|
|
122
127
|
}
|
|
@@ -164,7 +169,7 @@ export function buildExecutableQuery(
|
|
|
164
169
|
pivot.columns,
|
|
165
170
|
snapshot,
|
|
166
171
|
configuration,
|
|
167
|
-
aggregateOperations,
|
|
172
|
+
engine.aggregateOperations,
|
|
168
173
|
),
|
|
169
174
|
),
|
|
170
175
|
]),
|
|
@@ -194,7 +199,7 @@ export function buildExecutableQuery(
|
|
|
194
199
|
groupBy.columns,
|
|
195
200
|
snapshot,
|
|
196
201
|
configuration,
|
|
197
|
-
aggregateOperations,
|
|
202
|
+
engine.aggregateOperations,
|
|
198
203
|
),
|
|
199
204
|
),
|
|
200
205
|
]),
|
|
@@ -227,8 +232,16 @@ export function buildExecutableQuery(
|
|
|
227
232
|
_cols([
|
|
228
233
|
_colSpec(
|
|
229
234
|
col.name,
|
|
230
|
-
|
|
231
|
-
|
|
235
|
+
guaranteeType(
|
|
236
|
+
engine.deserializeValueSpecification(col.mapFn),
|
|
237
|
+
V1_Lambda,
|
|
238
|
+
),
|
|
239
|
+
col.reduceFn
|
|
240
|
+
? guaranteeType(
|
|
241
|
+
engine.deserializeValueSpecification(col.reduceFn),
|
|
242
|
+
V1_Lambda,
|
|
243
|
+
)
|
|
244
|
+
: undefined,
|
|
232
245
|
),
|
|
233
246
|
]),
|
|
234
247
|
]),
|
|
@@ -280,19 +293,14 @@ export function buildExecutableQuery(
|
|
|
280
293
|
|
|
281
294
|
// --------------------------------- FINALIZE ---------------------------------
|
|
282
295
|
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
296
|
+
if (!options?.skipExecutionContext) {
|
|
297
|
+
const executionContext = engine.buildExecutionContext(source);
|
|
298
|
+
if (executionContext) {
|
|
299
|
+
sequence.push(executionContext);
|
|
300
|
+
}
|
|
286
301
|
}
|
|
287
302
|
|
|
288
|
-
options?.postProcessor?.(
|
|
289
|
-
snapshot,
|
|
290
|
-
sequence,
|
|
291
|
-
funcMap,
|
|
292
|
-
configuration,
|
|
293
|
-
filterOperations,
|
|
294
|
-
aggregateOperations,
|
|
295
|
-
);
|
|
303
|
+
options?.postProcessor?.(snapshot, sequence, funcMap, configuration, engine);
|
|
296
304
|
|
|
297
305
|
if (sequence.length === 0) {
|
|
298
306
|
return source.query;
|
|
@@ -43,7 +43,6 @@ import {
|
|
|
43
43
|
V1_PackageableElementPtr,
|
|
44
44
|
type V1_PrimitiveValueSpecification,
|
|
45
45
|
V1_Variable,
|
|
46
|
-
V1_deserializeValueSpecification,
|
|
47
46
|
extractElementNameFromPath,
|
|
48
47
|
type V1_ValueSpecification,
|
|
49
48
|
extractPackagePathFromPath,
|
|
@@ -53,7 +52,6 @@ import {
|
|
|
53
52
|
V1_createGenericTypeWithRawType,
|
|
54
53
|
V1_createRelationType,
|
|
55
54
|
V1_createRelationTypeColumn,
|
|
56
|
-
V1_serializeValueSpecification,
|
|
57
55
|
} from '@finos/legend-graph';
|
|
58
56
|
import {
|
|
59
57
|
type DataCubeQuerySnapshotFilterCondition,
|
|
@@ -67,8 +65,6 @@ import {
|
|
|
67
65
|
guaranteeIsBoolean,
|
|
68
66
|
guaranteeIsNumber,
|
|
69
67
|
UnsupportedOperationError,
|
|
70
|
-
guaranteeType,
|
|
71
|
-
type PlainObject,
|
|
72
68
|
} from '@finos/legend-shared';
|
|
73
69
|
import {
|
|
74
70
|
DataCubeFunction,
|
|
@@ -91,69 +87,6 @@ import {
|
|
|
91
87
|
|
|
92
88
|
// --------------------------------- UTILITIES ---------------------------------
|
|
93
89
|
|
|
94
|
-
export function _functionCompositionProcessor(
|
|
95
|
-
sequence: V1_AppliedFunction[],
|
|
96
|
-
funcMap: DataCubeQueryFunctionMap,
|
|
97
|
-
) {
|
|
98
|
-
return (
|
|
99
|
-
key: keyof DataCubeQueryFunctionMap,
|
|
100
|
-
data: V1_AppliedFunction | V1_AppliedFunction[],
|
|
101
|
-
) => {
|
|
102
|
-
switch (key) {
|
|
103
|
-
case 'leafExtend':
|
|
104
|
-
case 'groupExtend': {
|
|
105
|
-
if (Array.isArray(data)) {
|
|
106
|
-
data.forEach((func) => sequence.push(func));
|
|
107
|
-
funcMap[key] = data;
|
|
108
|
-
}
|
|
109
|
-
break;
|
|
110
|
-
}
|
|
111
|
-
default: {
|
|
112
|
-
funcMap[key] = data as V1_AppliedFunction;
|
|
113
|
-
sequence.push(data as V1_AppliedFunction);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export function _functionCompositionUnProcessor(
|
|
120
|
-
sequence: V1_AppliedFunction[],
|
|
121
|
-
funcMap: DataCubeQueryFunctionMap,
|
|
122
|
-
) {
|
|
123
|
-
return (key: keyof DataCubeQueryFunctionMap) => {
|
|
124
|
-
const data = funcMap[key];
|
|
125
|
-
if (data) {
|
|
126
|
-
if (Array.isArray(data)) {
|
|
127
|
-
data.forEach((func) => sequence.splice(sequence.indexOf(func), 1));
|
|
128
|
-
} else {
|
|
129
|
-
sequence.splice(sequence.indexOf(data), 1);
|
|
130
|
-
}
|
|
131
|
-
funcMap[key] = undefined;
|
|
132
|
-
}
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
export function _deserializeLambda(json: PlainObject<V1_Lambda>) {
|
|
137
|
-
return guaranteeType(V1_deserializeValueSpecification(json, []), V1_Lambda);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
export function _deserializeValueSpecification(
|
|
141
|
-
json: PlainObject<V1_ValueSpecification>,
|
|
142
|
-
) {
|
|
143
|
-
return V1_deserializeValueSpecification(json, []);
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
export function _serializeValueSpecification(protocol: V1_ValueSpecification) {
|
|
147
|
-
return V1_serializeValueSpecification(protocol, []);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
export function _deserializeFunction(json: PlainObject<V1_Lambda>) {
|
|
151
|
-
return guaranteeType(
|
|
152
|
-
V1_deserializeValueSpecification(json, []),
|
|
153
|
-
V1_AppliedFunction,
|
|
154
|
-
);
|
|
155
|
-
}
|
|
156
|
-
|
|
157
90
|
export function _var() {
|
|
158
91
|
const variable = new V1_Variable();
|
|
159
92
|
// NOTE: we simplify processing logic by forcing all variable names to default value, i.e. x
|
|
@@ -356,6 +289,48 @@ export function _cols(colSpecs: V1_ColSpec[]) {
|
|
|
356
289
|
|
|
357
290
|
// --------------------------------- BUILDING BLOCKS ---------------------------------
|
|
358
291
|
|
|
292
|
+
export function _functionCompositionProcessor(
|
|
293
|
+
sequence: V1_AppliedFunction[],
|
|
294
|
+
funcMap: DataCubeQueryFunctionMap,
|
|
295
|
+
) {
|
|
296
|
+
return (
|
|
297
|
+
key: keyof DataCubeQueryFunctionMap,
|
|
298
|
+
data: V1_AppliedFunction | V1_AppliedFunction[],
|
|
299
|
+
) => {
|
|
300
|
+
switch (key) {
|
|
301
|
+
case 'leafExtend':
|
|
302
|
+
case 'groupExtend': {
|
|
303
|
+
if (Array.isArray(data)) {
|
|
304
|
+
data.forEach((func) => sequence.push(func));
|
|
305
|
+
funcMap[key] = data;
|
|
306
|
+
}
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
default: {
|
|
310
|
+
funcMap[key] = data as V1_AppliedFunction;
|
|
311
|
+
sequence.push(data as V1_AppliedFunction);
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
export function _functionCompositionUnProcessor(
|
|
318
|
+
sequence: V1_AppliedFunction[],
|
|
319
|
+
funcMap: DataCubeQueryFunctionMap,
|
|
320
|
+
) {
|
|
321
|
+
return (key: keyof DataCubeQueryFunctionMap) => {
|
|
322
|
+
const data = funcMap[key];
|
|
323
|
+
if (data) {
|
|
324
|
+
if (Array.isArray(data)) {
|
|
325
|
+
data.forEach((func) => sequence.splice(sequence.indexOf(func), 1));
|
|
326
|
+
} else {
|
|
327
|
+
sequence.splice(sequence.indexOf(data), 1);
|
|
328
|
+
}
|
|
329
|
+
funcMap[key] = undefined;
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
}
|
|
333
|
+
|
|
359
334
|
export function _selectFunction(columns: DataCubeColumn[]) {
|
|
360
335
|
return _function(DataCubeFunction.SELECT, [
|
|
361
336
|
_cols(columns.map((col) => _colSpec(col.name))),
|
|
@@ -71,10 +71,10 @@ export type DataCubeQuerySnapshotPivot = {
|
|
|
71
71
|
|
|
72
72
|
export type DataCubeQuerySnapshotProcessingContext = {
|
|
73
73
|
snapshot: DataCubeQuerySnapshot;
|
|
74
|
-
pivotAggColumns
|
|
75
|
-
pivotSortColumns
|
|
76
|
-
groupByAggColumns
|
|
77
|
-
groupBySortColumns
|
|
74
|
+
pivotAggColumns?: DataCubeQuerySnapshotAggregateColumn[] | undefined;
|
|
75
|
+
pivotSortColumns?: DataCubeQuerySnapshotSortColumn[] | undefined;
|
|
76
|
+
groupByAggColumns?: DataCubeQuerySnapshotAggregateColumn[] | undefined;
|
|
77
|
+
groupBySortColumns?: DataCubeQuerySnapshotSortColumn[] | undefined;
|
|
78
78
|
};
|
|
79
79
|
|
|
80
80
|
export type DataCubeQuerySnapshotData = {
|
|
@@ -185,4 +185,15 @@ export class DataCubeQuerySnapshot {
|
|
|
185
185
|
clone._hashCode = this._hashCode;
|
|
186
186
|
return clone;
|
|
187
187
|
}
|
|
188
|
+
|
|
189
|
+
serialize() {
|
|
190
|
+
const clone = this.clone();
|
|
191
|
+
return {
|
|
192
|
+
uuid: clone.uuid,
|
|
193
|
+
data: clone.data,
|
|
194
|
+
_isPatchChange: clone._isPatchChange,
|
|
195
|
+
_finalized: clone._finalized,
|
|
196
|
+
_hashCode: clone._hashCode,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
188
199
|
}
|