@finos/legend-application-data-cube 0.1.21 → 0.2.0
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/query-builder/LegendDataCubeQueryBuilder.d.ts.map +1 -1
- package/lib/components/query-builder/LegendDataCubeQueryBuilder.js +1 -0
- package/lib/components/query-builder/LegendDataCubeQueryBuilder.js.map +1 -1
- package/lib/index.css +1 -1
- package/lib/package.json +2 -1
- package/lib/stores/LegendDataCubeCacheManager.d.ts +25 -0
- package/lib/stores/LegendDataCubeCacheManager.d.ts.map +1 -0
- package/lib/stores/LegendDataCubeCacheManager.js +107 -0
- package/lib/stores/LegendDataCubeCacheManager.js.map +1 -0
- package/lib/stores/LegendDataCubeDataCubeEngine.d.ts +13 -3
- package/lib/stores/LegendDataCubeDataCubeEngine.d.ts.map +1 -1
- package/lib/stores/LegendDataCubeDataCubeEngine.js +157 -3
- package/lib/stores/LegendDataCubeDataCubeEngine.js.map +1 -1
- package/package.json +7 -6
- package/src/components/query-builder/LegendDataCubeQueryBuilder.tsx +1 -0
- package/src/stores/DuckDBWASM.d.ts +22 -0
- package/src/stores/LegendDataCubeCacheManager.ts +132 -0
- package/src/stores/LegendDataCubeDataCubeEngine.ts +244 -2
- package/tsconfig.json +2 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LegendDataCubeQueryBuilder.d.ts","sourceRoot":"","sources":["../../../src/components/query-builder/LegendDataCubeQueryBuilder.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAkDH,eAAO,MAAM,0BAA0B,+
|
|
1
|
+
{"version":3,"file":"LegendDataCubeQueryBuilder.d.ts","sourceRoot":"","sources":["../../../src/components/query-builder/LegendDataCubeQueryBuilder.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAkDH,eAAO,MAAM,0BAA0B,+CAoGtC,CAAC"}
|
|
@@ -87,6 +87,7 @@ export const LegendDataCubeQueryBuilder = withLegendDataCubeQueryBuilderStore(ob
|
|
|
87
87
|
application.settingService.persistValue(LegendDataCubeSettingStorageKey.DATA_CUBE, event.values);
|
|
88
88
|
},
|
|
89
89
|
documentationUrl: application.documentationService.url,
|
|
90
|
+
enableCache: true,
|
|
90
91
|
} }, builder.uuid));
|
|
91
92
|
}));
|
|
92
93
|
//# sourceMappingURL=LegendDataCubeQueryBuilder.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LegendDataCubeQueryBuilder.js","sourceRoot":"","sources":["../../../src/components/query-builder/LegendDataCubeQueryBuilder.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"LegendDataCubeQueryBuilder.js","sourceRoot":"","sources":["../../../src/components/query-builder/LegendDataCubeQueryBuilder.tsx"],"names":[],"mappings":"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"}
|
package/lib/index.css
CHANGED
package/lib/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@finos/legend-application-data-cube",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Legend DataCube application core",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"legend",
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
"test:watch": "jest --watch"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
+
"@duckdb/duckdb-wasm": "1.29.0",
|
|
45
46
|
"@finos/legend-application": "workspace:*",
|
|
46
47
|
"@finos/legend-art": "workspace:*",
|
|
47
48
|
"@finos/legend-code-editor": "workspace:*",
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
import { TDSExecutionResult } from '@finos/legend-graph';
|
|
17
|
+
export declare class LegendDataCubeDataCubeCacheEngine {
|
|
18
|
+
private _database?;
|
|
19
|
+
private _connection?;
|
|
20
|
+
initializeDuckDb(result: TDSExecutionResult): Promise<void>;
|
|
21
|
+
runQuery(sql: string): Promise<TDSExecutionResult>;
|
|
22
|
+
clearDuckDb(): Promise<void>;
|
|
23
|
+
private getDuckDbType;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=LegendDataCubeCacheManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegendDataCubeCacheManager.d.ts","sourceRoot":"","sources":["../../src/stores/LegendDataCubeCacheManager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,EACL,kBAAkB,EAGnB,MAAM,qBAAqB,CAAC;AAI7B,qBAAa,iCAAiC;IAC5C,OAAO,CAAC,SAAS,CAAC,CAAiC;IACnD,OAAO,CAAC,WAAW,CAAC,CAAoC;IAGlD,gBAAgB,CAAC,MAAM,EAAE,kBAAkB;IAwD3C,QAAQ,CAAC,GAAG,EAAE,MAAM;IAkBpB,WAAW;IAMjB,OAAO,CAAC,aAAa;CAmBtB"}
|
|
@@ -0,0 +1,107 @@
|
|
|
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
|
+
import * as duckdb from '@duckdb/duckdb-wasm';
|
|
17
|
+
import duckdb_wasm from '@duckdb/duckdb-wasm/dist/duckdb-mvp.wasm';
|
|
18
|
+
import duckdb_wasm_next from '@duckdb/duckdb-wasm/dist/duckdb-eh.wasm';
|
|
19
|
+
import { TDSExecutionResult, TDSRow, TabularDataSet, } from '@finos/legend-graph';
|
|
20
|
+
import { assertNonNullable } from '@finos/legend-shared';
|
|
21
|
+
export class LegendDataCubeDataCubeCacheEngine {
|
|
22
|
+
_database;
|
|
23
|
+
_connection;
|
|
24
|
+
// Documentation: https://duckdb.org/docs/api/wasm/instantiation.html
|
|
25
|
+
async initializeDuckDb(result) {
|
|
26
|
+
const MANUAL_BUNDLES = {
|
|
27
|
+
mvp: {
|
|
28
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
29
|
+
mainModule: duckdb_wasm,
|
|
30
|
+
mainWorker: new URL('@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js', import.meta.url).toString(),
|
|
31
|
+
},
|
|
32
|
+
eh: {
|
|
33
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
34
|
+
mainModule: duckdb_wasm_next,
|
|
35
|
+
mainWorker: new URL('@duckdb/duckdb-wasm/dist/duckdb-browser-eh.worker.js', import.meta.url).toString(),
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
// Select a bundle based on browser checks
|
|
39
|
+
const bundle = await duckdb.selectBundle(MANUAL_BUNDLES);
|
|
40
|
+
// Instantiate the asynchronus version of DuckDB-wasm
|
|
41
|
+
assertNonNullable(bundle.mainWorker, `Can't initialize duck db`);
|
|
42
|
+
const worker = new Worker(bundle.mainWorker);
|
|
43
|
+
const logger = new duckdb.ConsoleLogger();
|
|
44
|
+
this._database = new duckdb.AsyncDuckDB(logger, worker);
|
|
45
|
+
await this._database.instantiate(bundle.mainModule, bundle.pthreadWorker);
|
|
46
|
+
this._connection = await this._database.connect();
|
|
47
|
+
const columns = [];
|
|
48
|
+
result.builder.columns.forEach((col) => columns.push(`"${col.name}" ${this.getDuckDbType(col.type)}`));
|
|
49
|
+
const CREATE_TABLE_SQL = `CREATE TABLE cached_tbl (${columns.join(',')})`;
|
|
50
|
+
await this._connection.query(CREATE_TABLE_SQL);
|
|
51
|
+
const rowString = [];
|
|
52
|
+
result.result.rows.forEach((row) => {
|
|
53
|
+
const updatedRows = row.values.map((val) => {
|
|
54
|
+
if (val !== null && typeof val === 'string') {
|
|
55
|
+
return `'${val.replaceAll(`'`, `''`)}'`;
|
|
56
|
+
}
|
|
57
|
+
else if (val === null) {
|
|
58
|
+
return `NULL`;
|
|
59
|
+
}
|
|
60
|
+
return val;
|
|
61
|
+
});
|
|
62
|
+
rowString.push(`(${updatedRows.join(',')})`);
|
|
63
|
+
});
|
|
64
|
+
const INSERT_TABLE_SQL = `INSERT INTO cached_tbl VALUES ${rowString.join(',')}`;
|
|
65
|
+
await this._connection.query(INSERT_TABLE_SQL);
|
|
66
|
+
}
|
|
67
|
+
async runQuery(sql) {
|
|
68
|
+
const result = await this._connection?.query(sql);
|
|
69
|
+
const columnNames = Object.keys(result?.toArray().at(0));
|
|
70
|
+
const rows = result?.toArray().map((row) => {
|
|
71
|
+
const values = new TDSRow();
|
|
72
|
+
values.values = columnNames.map((column) => row[column]);
|
|
73
|
+
return values;
|
|
74
|
+
});
|
|
75
|
+
const tdsExecutionResult = new TDSExecutionResult();
|
|
76
|
+
const tds = new TabularDataSet();
|
|
77
|
+
tds.columns = columnNames;
|
|
78
|
+
tds.rows = rows !== undefined ? rows : [new TDSRow()];
|
|
79
|
+
tdsExecutionResult.result = tds;
|
|
80
|
+
return tdsExecutionResult;
|
|
81
|
+
}
|
|
82
|
+
async clearDuckDb() {
|
|
83
|
+
await this._connection?.close();
|
|
84
|
+
await this._database?.flushFiles();
|
|
85
|
+
await this._database?.terminate();
|
|
86
|
+
}
|
|
87
|
+
getDuckDbType(type) {
|
|
88
|
+
switch (type?.toLowerCase()) {
|
|
89
|
+
//TODO: mapping from tds build to duckdb data types
|
|
90
|
+
case 'string':
|
|
91
|
+
return 'VARCHAR';
|
|
92
|
+
case 'boolean':
|
|
93
|
+
return 'BOOLEAN';
|
|
94
|
+
case 'bigint':
|
|
95
|
+
return 'BIGINT';
|
|
96
|
+
case 'number':
|
|
97
|
+
return 'DOUBLE';
|
|
98
|
+
case 'integer':
|
|
99
|
+
return 'INTEGER';
|
|
100
|
+
case 'date':
|
|
101
|
+
return 'TIMESTAMP';
|
|
102
|
+
default:
|
|
103
|
+
return 'VARCHAR';
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
//# sourceMappingURL=LegendDataCubeCacheManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegendDataCubeCacheManager.js","sourceRoot":"","sources":["../../src/stores/LegendDataCubeCacheManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import {
|
|
17
|
-
import { DataCubeEngine, type DataCubeSource, type CompletionItem, type DataCubeExecutionOptions } from '@finos/legend-data-cube';
|
|
16
|
+
import { V1_Lambda, V1_ValueSpecification, type V1_EngineServerClient, V1_PureGraphManager, TDSExecutionResult } from '@finos/legend-graph';
|
|
17
|
+
import { DataCubeEngine, type DataCubeSource, type CompletionItem, type DataCubeExecutionOptions, CachedDataCubeSource, type DataCubeQuerySnapshot } from '@finos/legend-data-cube';
|
|
18
18
|
import { LogEvent, type PlainObject } from '@finos/legend-shared';
|
|
19
19
|
import type { LegendDataCubeApplicationStore } from './LegendDataCubeBaseStore.js';
|
|
20
20
|
import { type DepotServerClient } from '@finos/legend-server-depot';
|
|
@@ -23,6 +23,7 @@ export declare class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
23
23
|
private readonly _depotServerClient;
|
|
24
24
|
private readonly _engineServerClient;
|
|
25
25
|
private readonly _graphManager;
|
|
26
|
+
private readonly _cacheManager;
|
|
26
27
|
constructor(application: LegendDataCubeApplicationStore, depotServerClient: DepotServerClient, engineServerClient: V1_EngineServerClient, graphManager: V1_PureGraphManager);
|
|
27
28
|
processQuerySource(value: PlainObject): Promise<DataCubeSource>;
|
|
28
29
|
parseValueSpecification(code: string, returnSourceInformation?: boolean | undefined): Promise<V1_ValueSpecification>;
|
|
@@ -41,14 +42,23 @@ export declare class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
41
42
|
}[];
|
|
42
43
|
}>;
|
|
43
44
|
executeQuery(query: V1_Lambda, source: DataCubeSource, options?: DataCubeExecutionOptions | undefined): Promise<{
|
|
44
|
-
result: TDSExecutionResult;
|
|
45
45
|
executedQuery: string;
|
|
46
46
|
executedSQL: string;
|
|
47
|
+
result: TDSExecutionResult;
|
|
48
|
+
executionTime: number;
|
|
47
49
|
}>;
|
|
48
50
|
buildExecutionContext(source: DataCubeSource): import("@finos/legend-graph").V1_AppliedFunction | undefined;
|
|
51
|
+
processInitialSnapshot(source: DataCubeSource, snapshot: DataCubeQuerySnapshot): DataCubeQuerySnapshot;
|
|
49
52
|
private _getQueryRelationType;
|
|
50
53
|
private _getLambdaRelationType;
|
|
51
54
|
private _runQuery;
|
|
55
|
+
private generateExecutionPlan;
|
|
56
|
+
initializeCache(source: DataCubeSource): Promise<CachedDataCubeSource | undefined>;
|
|
57
|
+
clearCache(): Promise<void>;
|
|
58
|
+
private _synthesizeCachedSource;
|
|
59
|
+
private _synthesizeQuery;
|
|
60
|
+
private _synthesizeModel;
|
|
61
|
+
private _getColumnType;
|
|
52
62
|
logDebug(message: string, ...data: unknown[]): void;
|
|
53
63
|
debugProcess(processName: string, ...data: [string, unknown][]): void;
|
|
54
64
|
logInfo(event: LogEvent, ...data: unknown[]): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LegendDataCubeDataCubeEngine.d.ts","sourceRoot":"","sources":["../../src/stores/LegendDataCubeDataCubeEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"LegendDataCubeDataCubeEngine.d.ts","sourceRoot":"","sources":["../../src/stores/LegendDataCubeDataCubeEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,9 +13,10 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { V1_PureGraphManager, RelationalExecutionActivities, TDSExecutionResult, V1_ParameterValue, V1_PureModelContextPointer, V1_LegendSDLC, V1_serializePureModelContext, V1_buildParserError, V1_ParserError, V1_relationTypeModelSchema, V1_getGenericTypeFullPath, LAMBDA_PIPE, V1_rawBaseExecutionContextModelSchema, V1_deserializeExecutionResult, V1_parameterValueModelSchema, V1_buildExecutionResult, V1_RawBaseExecutionContext, PureClientVersion, V1_buildEngineError, V1_EngineError, V1_PackageableType, V1_deserializeRawValueSpecificationType, V1_Protocol, } from '@finos/legend-graph';
|
|
17
|
-
import { _elementPtr, DataCubeEngine, _function, DataCubeFunction, _deserializeLambda, AdhocQueryDataCubeSource, ADHOC_QUERY_DATA_CUBE_SOURCE_TYPE, RawAdhocQueryDataCubeSource, _lambda, _serializeValueSpecification, _deserializeValueSpecification, _defaultPrimitiveTypeValue, } from '@finos/legend-data-cube';
|
|
18
|
-
import { isNonNullable, LogEvent, UnsupportedOperationError, assertErrorThrown, NetworkClientError, HttpStatus, at, assertType, } from '@finos/legend-shared';
|
|
16
|
+
import { V1_Lambda, V1_ValueSpecification, V1_PureGraphManager, RelationalExecutionActivities, TDSExecutionResult, V1_ParameterValue, V1_PureModelContextPointer, V1_LegendSDLC, V1_serializePureModelContext, V1_buildParserError, V1_ParserError, V1_relationTypeModelSchema, V1_getGenericTypeFullPath, LAMBDA_PIPE, V1_rawBaseExecutionContextModelSchema, V1_deserializeExecutionResult, V1_parameterValueModelSchema, V1_buildExecutionResult, V1_RawBaseExecutionContext, PureClientVersion, V1_buildEngineError, V1_EngineError, V1_PackageableType, V1_deserializeRawValueSpecificationType, V1_Protocol, V1_deserializeExecutionPlan, V1_SQLExecutionNode, V1_SimpleExecutionPlan, V1_Binary, V1_ClassInstance, V1_ClassInstanceType, V1_Column, V1_Database, V1_Date, V1_Double, V1_DuckDBDatasourceSpecification, V1_EngineRuntime, V1_IdentifiedConnection, V1_Integer, V1_PackageableElementPointer, V1_PackageableRuntime, V1_PureModelContextData, V1_RelationStoreAccessor, V1_RelationalDatabaseConnection, V1_Schema, V1_StoreConnections, V1_Table, V1_TestAuthenticationStrategy, V1_VarChar, } from '@finos/legend-graph';
|
|
17
|
+
import { _elementPtr, DataCubeEngine, _function, DataCubeFunction, _deserializeLambda, AdhocQueryDataCubeSource, ADHOC_QUERY_DATA_CUBE_SOURCE_TYPE, RawAdhocQueryDataCubeSource, _lambda, _serializeValueSpecification, _deserializeValueSpecification, _defaultPrimitiveTypeValue, CachedDataCubeSource, } from '@finos/legend-data-cube';
|
|
18
|
+
import { isNonNullable, LogEvent, UnsupportedOperationError, assertErrorThrown, NetworkClientError, HttpStatus, at, assertType, guaranteeType, assertNonNullable, } from '@finos/legend-shared';
|
|
19
|
+
import { LegendDataCubeDataCubeCacheEngine } from './LegendDataCubeCacheManager.js';
|
|
19
20
|
import { APPLICATION_EVENT } from '@finos/legend-application';
|
|
20
21
|
import { LEGEND_QUERY_DATA_CUBE_SOURCE_TYPE, LegendQueryDataCubeSource, RawLegendQueryDataCubeSource, } from './model/LegendQueryDataCubeSource.js';
|
|
21
22
|
import { deserialize, serialize } from 'serializr';
|
|
@@ -25,12 +26,14 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
25
26
|
_depotServerClient;
|
|
26
27
|
_engineServerClient;
|
|
27
28
|
_graphManager;
|
|
29
|
+
_cacheManager;
|
|
28
30
|
constructor(application, depotServerClient, engineServerClient, graphManager) {
|
|
29
31
|
super();
|
|
30
32
|
this._application = application;
|
|
31
33
|
this._depotServerClient = depotServerClient;
|
|
32
34
|
this._engineServerClient = engineServerClient;
|
|
33
35
|
this._graphManager = graphManager;
|
|
36
|
+
this._cacheManager = new LegendDataCubeDataCubeCacheEngine();
|
|
34
37
|
}
|
|
35
38
|
// ---------------------------------- IMPLEMENTATION ----------------------------------
|
|
36
39
|
async processQuerySource(value) {
|
|
@@ -172,6 +175,7 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
172
175
|
async executeQuery(query, source, options) {
|
|
173
176
|
const queryCodePromise = this.getValueSpecificationCode(query);
|
|
174
177
|
let result;
|
|
178
|
+
const startTime = performance.now();
|
|
175
179
|
if (source instanceof AdhocQueryDataCubeSource) {
|
|
176
180
|
result = await this._runQuery(query, source.model, undefined, options);
|
|
177
181
|
}
|
|
@@ -179,10 +183,30 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
179
183
|
query.parameters = source.lambda.parameters;
|
|
180
184
|
result = await this._runQuery(query, source.model, source.parameterValues, options);
|
|
181
185
|
}
|
|
186
|
+
else if (source instanceof CachedDataCubeSource) {
|
|
187
|
+
//execute plan
|
|
188
|
+
const executionPlan = await this.generateExecutionPlan(query, source.model, [], options);
|
|
189
|
+
let sql;
|
|
190
|
+
if (executionPlan instanceof V1_SimpleExecutionPlan) {
|
|
191
|
+
sql = executionPlan.rootExecutionNode.executionNodes
|
|
192
|
+
.filter((node) => node instanceof V1_SQLExecutionNode)
|
|
193
|
+
.map((x) => guaranteeType(x, V1_SQLExecutionNode, `Can't generate sql for the query`))
|
|
194
|
+
.at(-1)?.sqlQuery;
|
|
195
|
+
}
|
|
196
|
+
assertNonNullable(sql, `Can't generate sql for the query`);
|
|
197
|
+
const endTime = performance.now();
|
|
198
|
+
return {
|
|
199
|
+
executedQuery: await queryCodePromise,
|
|
200
|
+
executedSQL: sql,
|
|
201
|
+
result: await this._cacheManager.runQuery(sql),
|
|
202
|
+
executionTime: endTime - startTime,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
182
205
|
else {
|
|
183
206
|
throw new UnsupportedOperationError(`Can't execute query with unsupported source`);
|
|
184
207
|
}
|
|
185
208
|
assertType(result, TDSExecutionResult, `Can't extract execution result: expected tabular data set format`);
|
|
209
|
+
const endTime = performance.now();
|
|
186
210
|
const queryCode = await queryCodePromise;
|
|
187
211
|
const sql = result.activities?.[0] instanceof RelationalExecutionActivities
|
|
188
212
|
? result.activities[0].sql
|
|
@@ -194,6 +218,7 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
194
218
|
result: result,
|
|
195
219
|
executedQuery: queryCode,
|
|
196
220
|
executedSQL: sql,
|
|
221
|
+
executionTime: endTime - startTime,
|
|
197
222
|
};
|
|
198
223
|
}
|
|
199
224
|
buildExecutionContext(source) {
|
|
@@ -206,8 +231,17 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
206
231
|
_elementPtr(source.runtime),
|
|
207
232
|
].filter(isNonNullable));
|
|
208
233
|
}
|
|
234
|
+
else if (source instanceof CachedDataCubeSource) {
|
|
235
|
+
return _function(DataCubeFunction.FROM, [_elementPtr(source.runtime)].filter(isNonNullable));
|
|
236
|
+
}
|
|
209
237
|
return undefined;
|
|
210
238
|
}
|
|
239
|
+
processInitialSnapshot(source, snapshot) {
|
|
240
|
+
if (source instanceof LegendQueryDataCubeSource) {
|
|
241
|
+
snapshot.data.configuration.name = source.info.name;
|
|
242
|
+
}
|
|
243
|
+
return snapshot;
|
|
244
|
+
}
|
|
211
245
|
// ---------------------------------- UTILITIES ----------------------------------
|
|
212
246
|
async _getQueryRelationType(query, source) {
|
|
213
247
|
if (source instanceof AdhocQueryDataCubeSource) {
|
|
@@ -216,6 +250,9 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
216
250
|
else if (source instanceof LegendQueryDataCubeSource) {
|
|
217
251
|
return this._getLambdaRelationType(query, source.model);
|
|
218
252
|
}
|
|
253
|
+
else if (source instanceof CachedDataCubeSource) {
|
|
254
|
+
return this._getLambdaRelationType(query, serialize(source.model));
|
|
255
|
+
}
|
|
219
256
|
throw new UnsupportedOperationError(`Can't get relation type for lambda with unsupported source`);
|
|
220
257
|
}
|
|
221
258
|
async _getLambdaRelationType(lambda, model) {
|
|
@@ -243,6 +280,123 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
243
280
|
parameterValues: (parameterValues ?? []).map((parameterValue) => serialize(V1_parameterValueModelSchema, parameterValue)),
|
|
244
281
|
}))));
|
|
245
282
|
}
|
|
283
|
+
async generateExecutionPlan(query, model, parameterValues, options) {
|
|
284
|
+
return V1_deserializeExecutionPlan(await this._engineServerClient.generatePlan({
|
|
285
|
+
clientVersion: options?.clientVersion ??
|
|
286
|
+
// eslint-disable-next-line no-process-env
|
|
287
|
+
(process.env.NODE_ENV === 'development'
|
|
288
|
+
? PureClientVersion.VX_X_X
|
|
289
|
+
: undefined),
|
|
290
|
+
function: _serializeValueSpecification(query),
|
|
291
|
+
model: serialize(model),
|
|
292
|
+
context: serialize(V1_rawBaseExecutionContextModelSchema, new V1_RawBaseExecutionContext()),
|
|
293
|
+
parameterValues: (parameterValues ?? []).map((parameterValue) => serialize(V1_parameterValueModelSchema, parameterValue)),
|
|
294
|
+
}));
|
|
295
|
+
}
|
|
296
|
+
// ---------------------------------- CACHING --------------------------------------
|
|
297
|
+
async initializeCache(source) {
|
|
298
|
+
if (source instanceof LegendQueryDataCubeSource) {
|
|
299
|
+
const fromQuery = this.buildExecutionContext(source);
|
|
300
|
+
fromQuery?.parameters.unshift(source.query);
|
|
301
|
+
const valSpec = guaranteeType(fromQuery, V1_ValueSpecification, 'Query is not a valueSpecification');
|
|
302
|
+
const queryLambda = new V1_Lambda();
|
|
303
|
+
queryLambda.body = [valSpec];
|
|
304
|
+
const resultQuery = await this.executeQuery(queryLambda, source, undefined);
|
|
305
|
+
const result = resultQuery.result;
|
|
306
|
+
await this._cacheManager.initializeDuckDb(result);
|
|
307
|
+
return this._synthesizeCachedSource(source, result.builder);
|
|
308
|
+
}
|
|
309
|
+
return undefined;
|
|
310
|
+
}
|
|
311
|
+
async clearCache() {
|
|
312
|
+
await this._cacheManager.clearDuckDb();
|
|
313
|
+
}
|
|
314
|
+
// --------------------------------- CACHING UTILITY -------------------------------
|
|
315
|
+
_synthesizeCachedSource(source, builder) {
|
|
316
|
+
const cachedSource = new CachedDataCubeSource();
|
|
317
|
+
cachedSource.columns = source.columns;
|
|
318
|
+
cachedSource.query = this._synthesizeQuery([
|
|
319
|
+
'local::duckdb::cachedStore',
|
|
320
|
+
'main',
|
|
321
|
+
'cached_tbl',
|
|
322
|
+
]);
|
|
323
|
+
cachedSource.model = this._synthesizeModel(builder);
|
|
324
|
+
cachedSource.runtime = 'local::duckdb::runtime';
|
|
325
|
+
return cachedSource;
|
|
326
|
+
}
|
|
327
|
+
_synthesizeQuery(databaseAccessor) {
|
|
328
|
+
const classInstance = new V1_ClassInstance();
|
|
329
|
+
classInstance.type = V1_ClassInstanceType.RELATION_STORE_ACCESSOR;
|
|
330
|
+
const storeAccessor = new V1_RelationStoreAccessor();
|
|
331
|
+
storeAccessor.path = databaseAccessor;
|
|
332
|
+
classInstance.value = storeAccessor;
|
|
333
|
+
return classInstance;
|
|
334
|
+
}
|
|
335
|
+
_synthesizeModel(builder) {
|
|
336
|
+
// synthesize table
|
|
337
|
+
const table = new V1_Table();
|
|
338
|
+
table.name = 'cached_tbl';
|
|
339
|
+
table.columns = builder.columns.map((col) => {
|
|
340
|
+
const column = new V1_Column();
|
|
341
|
+
column.name = col.name;
|
|
342
|
+
column.type = this._getColumnType(col.type);
|
|
343
|
+
return column;
|
|
344
|
+
});
|
|
345
|
+
// synthesize schema
|
|
346
|
+
const schema = new V1_Schema();
|
|
347
|
+
schema.name = 'main';
|
|
348
|
+
schema.tables = [table];
|
|
349
|
+
// synthesize database
|
|
350
|
+
const database = new V1_Database();
|
|
351
|
+
database.name = 'cachedStore';
|
|
352
|
+
database.package = 'local::duckdb';
|
|
353
|
+
database.schemas = [schema];
|
|
354
|
+
// build connection
|
|
355
|
+
const connection = new V1_RelationalDatabaseConnection();
|
|
356
|
+
connection.databaseType = 'DuckDB';
|
|
357
|
+
connection.type = 'DuckDB';
|
|
358
|
+
const dataSourceSpec = new V1_DuckDBDatasourceSpecification();
|
|
359
|
+
dataSourceSpec.path = '/temp/path';
|
|
360
|
+
connection.store = 'local::duckdb::cachedStore';
|
|
361
|
+
connection.datasourceSpecification = dataSourceSpec;
|
|
362
|
+
connection.authenticationStrategy = new V1_TestAuthenticationStrategy();
|
|
363
|
+
// build runtime
|
|
364
|
+
const runtime = new V1_EngineRuntime();
|
|
365
|
+
const storeConnections = new V1_StoreConnections();
|
|
366
|
+
storeConnections.store = new V1_PackageableElementPointer('STORE', `${database.package}::${database.name}`);
|
|
367
|
+
const idConnection = new V1_IdentifiedConnection();
|
|
368
|
+
idConnection.connection = connection;
|
|
369
|
+
idConnection.id = 'local_duckdb_connection';
|
|
370
|
+
storeConnections.storeConnections = [idConnection];
|
|
371
|
+
runtime.connections = [storeConnections];
|
|
372
|
+
const packageableRuntime = new V1_PackageableRuntime();
|
|
373
|
+
packageableRuntime.runtimeValue = runtime;
|
|
374
|
+
packageableRuntime.package = 'local::duckdb';
|
|
375
|
+
packageableRuntime.name = 'runtime';
|
|
376
|
+
const pmcd = new V1_PureModelContextData();
|
|
377
|
+
pmcd.elements = [database, packageableRuntime];
|
|
378
|
+
return pmcd;
|
|
379
|
+
}
|
|
380
|
+
// TODO: need a better way to infer datatype from tds builder
|
|
381
|
+
_getColumnType(type) {
|
|
382
|
+
if (type === undefined) {
|
|
383
|
+
throw Error('Unsupported data type');
|
|
384
|
+
}
|
|
385
|
+
switch (type) {
|
|
386
|
+
case 'string':
|
|
387
|
+
return new V1_VarChar();
|
|
388
|
+
case 'integer':
|
|
389
|
+
return new V1_Integer();
|
|
390
|
+
case 'date':
|
|
391
|
+
return new V1_Date();
|
|
392
|
+
case 'boolean':
|
|
393
|
+
return new V1_Binary();
|
|
394
|
+
case 'number':
|
|
395
|
+
return new V1_Double();
|
|
396
|
+
default:
|
|
397
|
+
return new V1_VarChar();
|
|
398
|
+
}
|
|
399
|
+
}
|
|
246
400
|
// ---------------------------------- APPLICATION ----------------------------------
|
|
247
401
|
logDebug(message, ...data) {
|
|
248
402
|
this._application.logService.debug(LogEvent.create(APPLICATION_EVENT.DEBUG), message, ...data);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LegendDataCubeDataCubeEngine.js","sourceRoot":"","sources":["../../src/stores/LegendDataCubeDataCubeEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAIL,mBAAmB,EAInB,6BAA6B,EAC7B,kBAAkB,EAClB,iBAAiB,EACjB,0BAA0B,EAC1B,aAAa,EACb,4BAA4B,EAC5B,mBAAmB,EACnB,cAAc,EACd,0BAA0B,EAC1B,yBAAyB,EACzB,WAAW,EACX,qCAAqC,EACrC,6BAA6B,EAC7B,4BAA4B,EAC5B,uBAAuB,EACvB,0BAA0B,EAC1B,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,uCAAuC,EACvC,WAAW,GACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,WAAW,EACX,cAAc,EAGd,SAAS,EACT,gBAAgB,EAChB,kBAAkB,EAClB,wBAAwB,EACxB,iCAAiC,EACjC,2BAA2B,EAC3B,OAAO,EACP,4BAA4B,EAC5B,8BAA8B,EAC9B,0BAA0B,GAE3B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,aAAa,EACb,QAAQ,EACR,yBAAyB,EAEzB,iBAAiB,EACjB,kBAAkB,EAClB,UAAU,EACV,EAAE,EACF,UAAU,GACX,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EACL,kCAAkC,EAClC,yBAAyB,EACzB,4BAA4B,GAC7B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EACL,cAAc,GAEf,MAAM,4BAA4B,CAAC;AAEpC,MAAM,OAAO,4BAA6B,SAAQ,cAAc;IAC7C,YAAY,CAAiC;IAC7C,kBAAkB,CAAoB;IACtC,mBAAmB,CAAwB;IAC3C,aAAa,CAAsB;IAEpD,YACE,WAA2C,EAC3C,iBAAoC,EACpC,kBAAyC,EACzC,YAAiC;QAEjC,KAAK,EAAE,CAAC;QAER,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;QAC5C,IAAI,CAAC,mBAAmB,GAAG,kBAAkB,CAAC;QAC9C,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACpC,CAAC;IAED,uFAAuF;IAE9E,KAAK,CAAC,kBAAkB,CAC/B,KAAkB;QAElB,QAAQ,KAAK,CAAC,KAAK,EAAE,CAAC;YACpB,KAAK,iCAAiC,CAAC,CAAC,CAAC;gBACvC,MAAM,SAAS,GACb,2BAA2B,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,IAAI,wBAAwB,EAAE,CAAC;gBAC9C,MAAM,CAAC,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;gBACnC,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;gBAC/B,MAAM,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,uBAAuB,CAC/C,SAAS,CAAC,KAAK,EACf,KAAK,CACN,CAAC;gBACF,IAAI,CAAC;oBACH,MAAM,CAAC,OAAO,GAAG,CACf,MAAM,IAAI,CAAC,sBAAsB,CAC/B,4BAA4B,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EACzD,MAAM,CAAC,KAAK,CACb,CACF,CAAC,OAAO,CAAC;gBACZ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,iBAAiB,CAAC,KAAK,CAAC,CAAC;oBACzB,MAAM,IAAI,KAAK,CACb,yGAAyG,KAAK,CAAC,OAAO,EAAE,CACzH,CAAC;gBACJ,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,KAAK,kCAAkC,CAAC,CAAC,CAAC;gBACxC,MAAM,SAAS,GACb,4BAA4B,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC7D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CACrD,SAAS,CAAC,OAAO,CAClB,CAAC;gBACF,MAAM,gBAAgB,GACpB,MAAM,IAAI,CAAC,aAAa,CAAC,gCAAgC,CACvD,SAAS,EACT,GAAG,EAAE,CACH,IAAI,CAAC,kBAAkB,CAAC,kBAAkB,CACxC,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,UAAU,EACpB,SAAS,CAAC,SAAS,CACpB,CACJ,CAAC;gBACJ,MAAM,MAAM,GAAG,IAAI,yBAAyB,EAAE,CAAC;gBAC/C,MAAM,CAAC,IAAI,GAAG,SAAS,CAAC;gBACxB,MAAM,CAAC,MAAM,GAAG,kBAAkB,CAChC,MAAM,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CACjD,SAAS,CAAC,OAAO,EACjB,EAAE,EACF,SAAS,EACT,SAAS,EACT,KAAK,CACN,CACF,CAAC;gBACF,MAAM,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;gBAC1C,MAAM,CAAC,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC;gBAC1C,MAAM,CAAC,KAAK,GAAG,4BAA4B,CACzC,IAAI,0BAA0B;gBAC5B,iEAAiE;gBACjE,IAAI,WAAW,CACb,mBAAmB,CAAC,kBAAkB,EACtC,iBAAiB,CAAC,MAAM,CACzB,EACD,IAAI,aAAa,CACf,SAAS,CAAC,OAAO,EACjB,SAAS,CAAC,UAAU,EACpB,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC,CACpC,CACF,CACF,CAAC;gBACF,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;gBACzC,MAAM,eAAe,GAAG,MAAM,OAAO,CAAC,GAAG,CACvC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;oBAC/C,IAAI,SAAS,CAAC,WAAW,EAAE,OAAO,YAAY,kBAAkB,EAAE,CAAC;wBACjE,MAAM,UAAU,GAAG,IAAI,iBAAiB,EAAE,CAAC;wBAC3C,UAAU,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;wBACjC,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC;wBACpD,MAAM,YAAY,GAAG,SAAS,CAAC,sBAAsB,EAAE,IAAI,CACzD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CACrC,EAAE,OAAO,CAAC;wBACX,UAAU,CAAC,KAAK;4BACd,YAAY,KAAK,SAAS;gCACxB,CAAC,CAAC,MAAM,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC;gCAClD,CAAC,CAAC;oCACE,KAAK,EAAE,uCAAuC,CAAC,IAAI,CAAC;oCACpD,KAAK,EAAE,0BAA0B,CAAC,IAAI,CAAC;iCACxC,CAAC;wBACR,OAAO,UAAU,CAAC;oBACpB,CAAC;oBACD,OAAO,SAAS,CAAC;gBACnB,CAAC,CAAC,CACH,CAAC;gBACF,MAAM,CAAC,eAAe,GAAG,eAAe,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC/D,IAAI,CAAC;oBACH,MAAM,CAAC,OAAO,GAAG,CACf,MAAM,IAAI,CAAC,sBAAsB,CAC/B,4BAA4B,CAAC,MAAM,CAAC,MAAM,CAAC,EAC3C,MAAM,CAAC,KAAK,CACb,CACF,CAAC,OAAO,CAAC;gBACZ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,iBAAiB,CAAC,KAAK,CAAC,CAAC;oBACzB,MAAM,IAAI,KAAK,CACb,wGAAwG,KAAK,CAAC,OAAO,EAAE,CACxH,CAAC;gBACJ,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;YACD;gBACE,MAAM,IAAI,yBAAyB,CACjC,uCAAuC,KAAK,CAAC,KAAK,GAAG,CACtD,CAAC;QACN,CAAC;IACH,CAAC;IAEQ,KAAK,CAAC,uBAAuB,CACpC,IAAY,EACZ,uBAA6C;QAE7C,IAAI,CAAC;YACH,OAAO,8BAA8B,CACnC,MAAM,IAAI,CAAC,mBAAmB,CAAC,gCAAgC,CAC7D,IAAI,EACJ,EAAE,EACF,SAAS,EACT,SAAS,EACT,uBAAuB,CACxB,CACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzB,IACE,KAAK,YAAY,kBAAkB;gBACnC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,WAAW,EAChD,CAAC;gBACD,MAAM,mBAAmB,CACvB,cAAc,CAAC,aAAa,CAAC,QAAQ,CACnC,KAAK,CAAC,OAAsC,CAC7C,CACF,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEQ,KAAK,CAAC,yBAAyB,CACtC,KAA4B,EAC5B,MAA4B;QAE5B,OAAO,IAAI,CAAC,aAAa,CAAC,4BAA4B,CACpD,4BAA4B,CAAC,KAAK,CAAC,EACnC,MAAM,CACP,CAAC;IACJ,CAAC;IAED,sFAAsF;IACtF,mDAAmD;IAC1C,KAAK,CAAC,iBAAiB,CAC9B,IAAY,EACZ,SAAoB,EACpB,MAAsB;QAEtB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;QACtE,IAAI,SAAS,GAAG,aAAa,GAAG,IAAI,CAAC;QACrC,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC;YAC3C,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC;YACzC,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,MAAM,YAAY,wBAAwB,EAAE,CAAC;YAC/C,OAAO,CACL,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;gBAC1C,SAAS;gBACT,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CACH,CAAC,WAA+B,CAAC;QACpC,CAAC;aAAM,IAAI,MAAM,YAAY,yBAAyB,EAAE,CAAC;YACvD,OAAO,CACL,MAAM,IAAI,CAAC,mBAAmB,CAAC,YAAY,CAAC;gBAC1C,SAAS;gBACT,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC,CACH,CAAC,WAA+B,CAAC;QACpC,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,8DAA8D,CAC/D,CAAC;IACJ,CAAC;IAEQ,KAAK,CAAC,0BAA0B,CACvC,KAAgB,EAChB,MAAsB;QAEtB,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,qBAAqB,CACrC,4BAA4B,CAAC,KAAK,CAAC,EACnC,MAAM,CACP,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzB,IACE,KAAK,YAAY,kBAAkB;gBACnC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,WAAW,EAChD,CAAC;gBACD,MAAM,WAAW,GAAG,mBAAmB,CACrC,cAAc,CAAC,aAAa,CAAC,QAAQ,CACnC,KAAK,CAAC,OAAsC,CAC7C,CACF,CAAC;gBACF,MAAM,WAAW,CAAC;YACpB,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,sFAAsF;IACtF,mDAAmD;IAC1C,KAAK,CAAC,8BAA8B,CAC3C,IAAY,EACZ,SAAgC,EAChC,MAAsB;QAEtB,MAAM,aAAa,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;QACtE,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,oBAAoB,CAChE,aAAa,GAAG,IAAI,EACpB,EAAE,EACF,SAAS,EACT,SAAS,EACT,IAAI,CACL,CAAC;YACF,OAAO,MAAM,IAAI,CAAC,qBAAqB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzB,IACE,KAAK,YAAY,kBAAkB;gBACnC,KAAK,CAAC,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,WAAW,EAChD,CAAC;gBACD,MAAM,WAAW,GAAG,mBAAmB,CACrC,cAAc,CAAC,aAAa,CAAC,QAAQ,CACnC,KAAK,CAAC,OAAsC,CAC7C,CACF,CAAC;gBACF,IAAI,WAAW,CAAC,iBAAiB,EAAE,CAAC;oBAClC,WAAW,CAAC,iBAAiB,CAAC,SAAS,IAAI,YAAY,CAAC;oBACxD,WAAW,CAAC,iBAAiB,CAAC,WAAW,IAAI,YAAY,CAAC;gBAC5D,CAAC;gBACD,MAAM,WAAW,CAAC;YACpB,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEQ,KAAK,CAAC,YAAY,CACzB,KAAgB,EAChB,MAAsB,EACtB,OAA8C;QAE9C,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAAC;QAC/D,IAAI,MAAuB,CAAC;QAC5B,IAAI,MAAM,YAAY,wBAAwB,EAAE,CAAC;YAC/C,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACzE,CAAC;aAAM,IAAI,MAAM,YAAY,yBAAyB,EAAE,CAAC;YACvD,KAAK,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC;YAC5C,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAC3B,KAAK,EACL,MAAM,CAAC,KAAK,EACZ,MAAM,CAAC,eAAe,EACtB,OAAO,CACR,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,yBAAyB,CACjC,6CAA6C,CAC9C,CAAC;QACJ,CAAC;QACD,UAAU,CACR,MAAM,EACN,kBAAkB,EAClB,kEAAkE,CACnE,CAAC;QACF,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC;QACzC,MAAM,GAAG,GACP,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,YAAY,6BAA6B;YAC7D,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG;YAC1B,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAClD,CAAC;QACD,OAAO;YACL,MAAM,EAAE,MAAM;YACd,aAAa,EAAE,SAAS;YACxB,WAAW,EAAE,GAAG;SACjB,CAAC;IACJ,CAAC;IAEQ,qBAAqB,CAAC,MAAsB;QACnD,IAAI,MAAM,YAAY,wBAAwB,EAAE,CAAC;YAC/C,OAAO,SAAS,CACd,gBAAgB,CAAC,IAAI,EACrB,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CACpD,CAAC;QACJ,CAAC;aAAM,IAAI,MAAM,YAAY,yBAAyB,EAAE,CAAC;YACvD,OAAO,SAAS,CACd,gBAAgB,CAAC,IAAI,EACrB;gBACE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;gBACxD,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC;aAC5B,CAAC,MAAM,CAAC,aAAa,CAAC,CACxB,CAAC;QACJ,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,kFAAkF;IAE1E,KAAK,CAAC,qBAAqB,CACjC,KAA6B,EAC7B,MAAsB;QAEtB,IAAI,MAAM,YAAY,wBAAwB,EAAE,CAAC;YAC/C,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1D,CAAC;aAAM,IAAI,MAAM,YAAY,yBAAyB,EAAE,CAAC;YACvD,OAAO,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,sBAAsB,CAClC,MAA8B,EAC9B,KAAuC;QAEvC,MAAM,YAAY,GAAG,WAAW,CAC9B,0BAA0B,EAC1B,MAAM,IAAI,CAAC,mBAAmB,CAAC,kBAAkB,CAAC;YAChD,MAAM;YACN,KAAK;SACN,CAAC,CACH,CAAC;QACF,OAAO;YACL,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;gBAC7C,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,IAAI,EAAE,yBAAyB,CAAC,MAAM,CAAC,WAAW,CAAC;aACpD,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,KAAgB,EAChB,KAAuC,EACvC,eAAiD,EACjD,OAA8C;QAE9C,OAAO,uBAAuB,CAC5B,6BAA6B,CAC3B,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;YACvC,aAAa,EACX,OAAO,EAAE,aAAa;gBACtB,0CAA0C;gBAC1C,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa;oBACrC,CAAC,CAAC,iBAAiB,CAAC,MAAM;oBAC1B,CAAC,CAAC,SAAS,CAAC;YAChB,QAAQ,EAAE,4BAA4B,CAAC,KAAK,CAAC;YAC7C,KAAK;YACL,OAAO,EAAE,SAAS,CAChB,qCAAqC,EACrC,IAAI,0BAA0B,EAAE,CACjC;YACD,eAAe,EAAE,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,CAC9D,SAAS,CAAC,4BAA4B,EAAE,cAAc,CAAC,CACxD;SACF,CAAC,CAAoC,CACvC,CACF,CAAC;IACJ,CAAC;IAED,oFAAoF;IAE3E,QAAQ,CAAC,OAAe,EAAE,GAAG,IAAe;QACnD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAChC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,EACxC,OAAO,EACP,GAAG,IAAI,CACR,CAAC;IACJ,CAAC;IAEQ,YAAY,CAAC,WAAmB,EAAE,GAAG,IAAyB;QACrE,0CAA0C;QAC1C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAC/B,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,EACxC,iCAAiC,WAAW,SAAS,EACrD,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EACvE,gCAAgC,WAAW,cAAc,CAC1D,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAChC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC,EACxC,iCAAiC,WAAW,SAAS,EACrD,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,EACvE,gCAAgC,WAAW,cAAc,CAC1D,CAAC;QACJ,CAAC;IACH,CAAC;IAEQ,OAAO,CAAC,KAAe,EAAE,GAAG,IAAe;QAClD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACpD,CAAC;IAEQ,UAAU,CAAC,KAAe,EAAE,GAAG,IAAe;QACrD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACpD,CAAC;IAEQ,QAAQ,CAAC,KAAe,EAAE,GAAG,IAAe;QACnD,IAAI,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACrD,CAAC;IAEQ,iBAAiB,CAAC,KAAY;QACrC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IAEQ,oBAAoB,CAAC,OAAe,EAAE,KAAa;QAC1D,IAAI,CAAC,QAAQ,CACX,QAAQ,CAAC,MAAM,CAAC,iBAAiB,CAAC,kCAAkC,CAAC,EACrE,OAAO,EACP,KAAK,CACN,CAAC;IACJ,CAAC;IAEQ,qBAAqB,CAAC,GAAW;QACxC,OAAO,IAAI,CAAC,YAAY,CAAC,oBAAoB,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACjE,CAAC;IAEQ,QAAQ,CAAC,GAAW;QAC3B,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAClE,CAAC;IAEQ,aAAa,CAAC,KAAa,EAAE,IAAiB;QACrD,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"LegendDataCubeDataCubeEngine.js","sourceRoot":"","sources":["../../src/stores/LegendDataCubeDataCubeEngine.ts"],"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
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Legend DataCube application core",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"legend",
|
|
@@ -42,12 +42,13 @@
|
|
|
42
42
|
"test:watch": "jest --watch"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
+
"@duckdb/duckdb-wasm": "1.29.0",
|
|
45
46
|
"@finos/legend-application": "16.0.22",
|
|
46
47
|
"@finos/legend-art": "7.1.79",
|
|
47
|
-
"@finos/legend-code-editor": "2.0.
|
|
48
|
-
"@finos/legend-data-cube": "0.0
|
|
49
|
-
"@finos/legend-graph": "32.0
|
|
50
|
-
"@finos/legend-query-builder": "4.
|
|
48
|
+
"@finos/legend-code-editor": "2.0.42",
|
|
49
|
+
"@finos/legend-data-cube": "0.1.0",
|
|
50
|
+
"@finos/legend-graph": "32.1.0",
|
|
51
|
+
"@finos/legend-query-builder": "4.16.0",
|
|
51
52
|
"@finos/legend-server-depot": "6.0.78",
|
|
52
53
|
"@finos/legend-shared": "11.0.1",
|
|
53
54
|
"@finos/legend-storage": "3.0.120",
|
|
@@ -60,7 +61,7 @@
|
|
|
60
61
|
"serializr": "3.0.3"
|
|
61
62
|
},
|
|
62
63
|
"devDependencies": {
|
|
63
|
-
"@finos/legend-dev-utils": "2.
|
|
64
|
+
"@finos/legend-dev-utils": "2.2.0",
|
|
64
65
|
"@jest/globals": "29.7.0",
|
|
65
66
|
"cross-env": "7.0.3",
|
|
66
67
|
"eslint": "9.19.0",
|
|
@@ -0,0 +1,22 @@
|
|
|
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
|
+
declare module '*.wasm' {
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
19
|
+
const value: any;
|
|
20
|
+
// eslint-disable-next-line import/no-default-export
|
|
21
|
+
export default value;
|
|
22
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
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
|
+
import * as duckdb from '@duckdb/duckdb-wasm';
|
|
18
|
+
import duckdb_wasm from '@duckdb/duckdb-wasm/dist/duckdb-mvp.wasm';
|
|
19
|
+
import duckdb_wasm_next from '@duckdb/duckdb-wasm/dist/duckdb-eh.wasm';
|
|
20
|
+
import {
|
|
21
|
+
TDSExecutionResult,
|
|
22
|
+
TDSRow,
|
|
23
|
+
TabularDataSet,
|
|
24
|
+
} from '@finos/legend-graph';
|
|
25
|
+
import type { AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';
|
|
26
|
+
import { assertNonNullable } from '@finos/legend-shared';
|
|
27
|
+
|
|
28
|
+
export class LegendDataCubeDataCubeCacheEngine {
|
|
29
|
+
private _database?: duckdb.AsyncDuckDB | undefined;
|
|
30
|
+
private _connection?: AsyncDuckDBConnection | undefined;
|
|
31
|
+
|
|
32
|
+
// Documentation: https://duckdb.org/docs/api/wasm/instantiation.html
|
|
33
|
+
async initializeDuckDb(result: TDSExecutionResult) {
|
|
34
|
+
const MANUAL_BUNDLES: duckdb.DuckDBBundles = {
|
|
35
|
+
mvp: {
|
|
36
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
37
|
+
mainModule: duckdb_wasm,
|
|
38
|
+
mainWorker: new URL(
|
|
39
|
+
'@duckdb/duckdb-wasm/dist/duckdb-browser-mvp.worker.js',
|
|
40
|
+
import.meta.url,
|
|
41
|
+
).toString(),
|
|
42
|
+
},
|
|
43
|
+
eh: {
|
|
44
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
|
|
45
|
+
mainModule: duckdb_wasm_next,
|
|
46
|
+
mainWorker: new URL(
|
|
47
|
+
'@duckdb/duckdb-wasm/dist/duckdb-browser-eh.worker.js',
|
|
48
|
+
import.meta.url,
|
|
49
|
+
).toString(),
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
// Select a bundle based on browser checks
|
|
53
|
+
const bundle = await duckdb.selectBundle(MANUAL_BUNDLES);
|
|
54
|
+
// Instantiate the asynchronus version of DuckDB-wasm
|
|
55
|
+
assertNonNullable(bundle.mainWorker, `Can't initialize duck db`);
|
|
56
|
+
const worker = new Worker(bundle.mainWorker);
|
|
57
|
+
const logger = new duckdb.ConsoleLogger();
|
|
58
|
+
this._database = new duckdb.AsyncDuckDB(logger, worker);
|
|
59
|
+
await this._database.instantiate(bundle.mainModule, bundle.pthreadWorker);
|
|
60
|
+
this._connection = await this._database.connect();
|
|
61
|
+
|
|
62
|
+
const columns: string[] = [];
|
|
63
|
+
result.builder.columns.forEach((col) =>
|
|
64
|
+
columns.push(`"${col.name}" ${this.getDuckDbType(col.type)}`),
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
const CREATE_TABLE_SQL = `CREATE TABLE cached_tbl (${columns.join(',')})`;
|
|
68
|
+
await this._connection.query(CREATE_TABLE_SQL);
|
|
69
|
+
|
|
70
|
+
const rowString: string[] = [];
|
|
71
|
+
|
|
72
|
+
result.result.rows.forEach((row) => {
|
|
73
|
+
const updatedRows = row.values.map((val) => {
|
|
74
|
+
if (val !== null && typeof val === 'string') {
|
|
75
|
+
return `'${val.replaceAll(`'`, `''`)}'`;
|
|
76
|
+
} else if (val === null) {
|
|
77
|
+
return `NULL`;
|
|
78
|
+
}
|
|
79
|
+
return val;
|
|
80
|
+
});
|
|
81
|
+
rowString.push(`(${updatedRows.join(',')})`);
|
|
82
|
+
});
|
|
83
|
+
|
|
84
|
+
const INSERT_TABLE_SQL = `INSERT INTO cached_tbl VALUES ${rowString.join(',')}`;
|
|
85
|
+
|
|
86
|
+
await this._connection.query(INSERT_TABLE_SQL);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
async runQuery(sql: string) {
|
|
90
|
+
const result = await this._connection?.query(sql);
|
|
91
|
+
const columnNames = Object.keys(result?.toArray().at(0));
|
|
92
|
+
const rows = result?.toArray().map((row) => {
|
|
93
|
+
const values = new TDSRow();
|
|
94
|
+
values.values = columnNames.map(
|
|
95
|
+
(column) => row[column] as string | number | boolean | null,
|
|
96
|
+
);
|
|
97
|
+
return values;
|
|
98
|
+
});
|
|
99
|
+
const tdsExecutionResult = new TDSExecutionResult();
|
|
100
|
+
const tds = new TabularDataSet();
|
|
101
|
+
tds.columns = columnNames;
|
|
102
|
+
tds.rows = rows !== undefined ? rows : [new TDSRow()];
|
|
103
|
+
tdsExecutionResult.result = tds;
|
|
104
|
+
return tdsExecutionResult;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
async clearDuckDb() {
|
|
108
|
+
await this._connection?.close();
|
|
109
|
+
await this._database?.flushFiles();
|
|
110
|
+
await this._database?.terminate();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
private getDuckDbType(type: string | undefined): string {
|
|
114
|
+
switch (type?.toLowerCase()) {
|
|
115
|
+
//TODO: mapping from tds build to duckdb data types
|
|
116
|
+
case 'string':
|
|
117
|
+
return 'VARCHAR';
|
|
118
|
+
case 'boolean':
|
|
119
|
+
return 'BOOLEAN';
|
|
120
|
+
case 'bigint':
|
|
121
|
+
return 'BIGINT';
|
|
122
|
+
case 'number':
|
|
123
|
+
return 'DOUBLE';
|
|
124
|
+
case 'integer':
|
|
125
|
+
return 'INTEGER';
|
|
126
|
+
case 'date':
|
|
127
|
+
return 'TIMESTAMP';
|
|
128
|
+
default:
|
|
129
|
+
return 'VARCHAR';
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
V1_Lambda,
|
|
19
|
+
V1_ValueSpecification,
|
|
20
20
|
type V1_EngineServerClient,
|
|
21
21
|
V1_PureGraphManager,
|
|
22
22
|
type V1_PureModelContext,
|
|
@@ -44,6 +44,33 @@ import {
|
|
|
44
44
|
V1_PackageableType,
|
|
45
45
|
V1_deserializeRawValueSpecificationType,
|
|
46
46
|
V1_Protocol,
|
|
47
|
+
type V1_ExecutionPlan,
|
|
48
|
+
V1_deserializeExecutionPlan,
|
|
49
|
+
V1_SQLExecutionNode,
|
|
50
|
+
V1_SimpleExecutionPlan,
|
|
51
|
+
V1_Binary,
|
|
52
|
+
V1_ClassInstance,
|
|
53
|
+
V1_ClassInstanceType,
|
|
54
|
+
V1_Column,
|
|
55
|
+
V1_Database,
|
|
56
|
+
V1_Date,
|
|
57
|
+
V1_Double,
|
|
58
|
+
V1_DuckDBDatasourceSpecification,
|
|
59
|
+
V1_EngineRuntime,
|
|
60
|
+
V1_IdentifiedConnection,
|
|
61
|
+
V1_Integer,
|
|
62
|
+
V1_PackageableElementPointer,
|
|
63
|
+
V1_PackageableRuntime,
|
|
64
|
+
V1_PureModelContextData,
|
|
65
|
+
V1_RelationStoreAccessor,
|
|
66
|
+
type V1_RelationalDataType,
|
|
67
|
+
V1_RelationalDatabaseConnection,
|
|
68
|
+
V1_Schema,
|
|
69
|
+
V1_StoreConnections,
|
|
70
|
+
V1_Table,
|
|
71
|
+
V1_TestAuthenticationStrategy,
|
|
72
|
+
V1_VarChar,
|
|
73
|
+
type TDSBuilder,
|
|
47
74
|
} from '@finos/legend-graph';
|
|
48
75
|
import {
|
|
49
76
|
_elementPtr,
|
|
@@ -61,6 +88,8 @@ import {
|
|
|
61
88
|
_deserializeValueSpecification,
|
|
62
89
|
_defaultPrimitiveTypeValue,
|
|
63
90
|
type DataCubeExecutionOptions,
|
|
91
|
+
CachedDataCubeSource,
|
|
92
|
+
type DataCubeQuerySnapshot,
|
|
64
93
|
} from '@finos/legend-data-cube';
|
|
65
94
|
import {
|
|
66
95
|
isNonNullable,
|
|
@@ -72,8 +101,11 @@ import {
|
|
|
72
101
|
HttpStatus,
|
|
73
102
|
at,
|
|
74
103
|
assertType,
|
|
104
|
+
guaranteeType,
|
|
105
|
+
assertNonNullable,
|
|
75
106
|
} from '@finos/legend-shared';
|
|
76
107
|
import type { LegendDataCubeApplicationStore } from './LegendDataCubeBaseStore.js';
|
|
108
|
+
import { LegendDataCubeDataCubeCacheEngine } from './LegendDataCubeCacheManager.js';
|
|
77
109
|
import { APPLICATION_EVENT } from '@finos/legend-application';
|
|
78
110
|
import {
|
|
79
111
|
LEGEND_QUERY_DATA_CUBE_SOURCE_TYPE,
|
|
@@ -91,6 +123,7 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
91
123
|
private readonly _depotServerClient: DepotServerClient;
|
|
92
124
|
private readonly _engineServerClient: V1_EngineServerClient;
|
|
93
125
|
private readonly _graphManager: V1_PureGraphManager;
|
|
126
|
+
private readonly _cacheManager: LegendDataCubeDataCubeCacheEngine;
|
|
94
127
|
|
|
95
128
|
constructor(
|
|
96
129
|
application: LegendDataCubeApplicationStore,
|
|
@@ -104,6 +137,7 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
104
137
|
this._depotServerClient = depotServerClient;
|
|
105
138
|
this._engineServerClient = engineServerClient;
|
|
106
139
|
this._graphManager = graphManager;
|
|
140
|
+
this._cacheManager = new LegendDataCubeDataCubeCacheEngine();
|
|
107
141
|
}
|
|
108
142
|
|
|
109
143
|
// ---------------------------------- IMPLEMENTATION ----------------------------------
|
|
@@ -369,6 +403,7 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
369
403
|
) {
|
|
370
404
|
const queryCodePromise = this.getValueSpecificationCode(query);
|
|
371
405
|
let result: ExecutionResult;
|
|
406
|
+
const startTime = performance.now();
|
|
372
407
|
if (source instanceof AdhocQueryDataCubeSource) {
|
|
373
408
|
result = await this._runQuery(query, source.model, undefined, options);
|
|
374
409
|
} else if (source instanceof LegendQueryDataCubeSource) {
|
|
@@ -379,6 +414,35 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
379
414
|
source.parameterValues,
|
|
380
415
|
options,
|
|
381
416
|
);
|
|
417
|
+
} else if (source instanceof CachedDataCubeSource) {
|
|
418
|
+
//execute plan
|
|
419
|
+
const executionPlan = await this.generateExecutionPlan(
|
|
420
|
+
query,
|
|
421
|
+
source.model,
|
|
422
|
+
[],
|
|
423
|
+
options,
|
|
424
|
+
);
|
|
425
|
+
let sql;
|
|
426
|
+
if (executionPlan instanceof V1_SimpleExecutionPlan) {
|
|
427
|
+
sql = executionPlan.rootExecutionNode.executionNodes
|
|
428
|
+
.filter((node) => node instanceof V1_SQLExecutionNode)
|
|
429
|
+
.map((x) =>
|
|
430
|
+
guaranteeType(
|
|
431
|
+
x,
|
|
432
|
+
V1_SQLExecutionNode,
|
|
433
|
+
`Can't generate sql for the query`,
|
|
434
|
+
),
|
|
435
|
+
)
|
|
436
|
+
.at(-1)?.sqlQuery;
|
|
437
|
+
}
|
|
438
|
+
assertNonNullable(sql, `Can't generate sql for the query`);
|
|
439
|
+
const endTime = performance.now();
|
|
440
|
+
return {
|
|
441
|
+
executedQuery: await queryCodePromise,
|
|
442
|
+
executedSQL: sql,
|
|
443
|
+
result: await this._cacheManager.runQuery(sql),
|
|
444
|
+
executionTime: endTime - startTime,
|
|
445
|
+
};
|
|
382
446
|
} else {
|
|
383
447
|
throw new UnsupportedOperationError(
|
|
384
448
|
`Can't execute query with unsupported source`,
|
|
@@ -389,6 +453,7 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
389
453
|
TDSExecutionResult,
|
|
390
454
|
`Can't extract execution result: expected tabular data set format`,
|
|
391
455
|
);
|
|
456
|
+
const endTime = performance.now();
|
|
392
457
|
const queryCode = await queryCodePromise;
|
|
393
458
|
const sql =
|
|
394
459
|
result.activities?.[0] instanceof RelationalExecutionActivities
|
|
@@ -401,6 +466,7 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
401
466
|
result: result,
|
|
402
467
|
executedQuery: queryCode,
|
|
403
468
|
executedSQL: sql,
|
|
469
|
+
executionTime: endTime - startTime,
|
|
404
470
|
};
|
|
405
471
|
}
|
|
406
472
|
|
|
@@ -418,10 +484,25 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
418
484
|
_elementPtr(source.runtime),
|
|
419
485
|
].filter(isNonNullable),
|
|
420
486
|
);
|
|
487
|
+
} else if (source instanceof CachedDataCubeSource) {
|
|
488
|
+
return _function(
|
|
489
|
+
DataCubeFunction.FROM,
|
|
490
|
+
[_elementPtr(source.runtime)].filter(isNonNullable),
|
|
491
|
+
);
|
|
421
492
|
}
|
|
422
493
|
return undefined;
|
|
423
494
|
}
|
|
424
495
|
|
|
496
|
+
override processInitialSnapshot(
|
|
497
|
+
source: DataCubeSource,
|
|
498
|
+
snapshot: DataCubeQuerySnapshot,
|
|
499
|
+
): DataCubeQuerySnapshot {
|
|
500
|
+
if (source instanceof LegendQueryDataCubeSource) {
|
|
501
|
+
snapshot.data.configuration.name = source.info.name;
|
|
502
|
+
}
|
|
503
|
+
return snapshot;
|
|
504
|
+
}
|
|
505
|
+
|
|
425
506
|
// ---------------------------------- UTILITIES ----------------------------------
|
|
426
507
|
|
|
427
508
|
private async _getQueryRelationType(
|
|
@@ -432,6 +513,8 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
432
513
|
return this._getLambdaRelationType(query, source.model);
|
|
433
514
|
} else if (source instanceof LegendQueryDataCubeSource) {
|
|
434
515
|
return this._getLambdaRelationType(query, source.model);
|
|
516
|
+
} else if (source instanceof CachedDataCubeSource) {
|
|
517
|
+
return this._getLambdaRelationType(query, serialize(source.model));
|
|
435
518
|
}
|
|
436
519
|
throw new UnsupportedOperationError(
|
|
437
520
|
`Can't get relation type for lambda with unsupported source`,
|
|
@@ -486,6 +569,165 @@ export class LegendDataCubeDataCubeEngine extends DataCubeEngine {
|
|
|
486
569
|
);
|
|
487
570
|
}
|
|
488
571
|
|
|
572
|
+
private async generateExecutionPlan(
|
|
573
|
+
query: V1_Lambda,
|
|
574
|
+
model: V1_PureModelContext,
|
|
575
|
+
parameterValues?: V1_ParameterValue[] | undefined,
|
|
576
|
+
options?: DataCubeExecutionOptions | undefined,
|
|
577
|
+
): Promise<V1_ExecutionPlan> {
|
|
578
|
+
return V1_deserializeExecutionPlan(
|
|
579
|
+
await this._engineServerClient.generatePlan({
|
|
580
|
+
clientVersion:
|
|
581
|
+
options?.clientVersion ??
|
|
582
|
+
// eslint-disable-next-line no-process-env
|
|
583
|
+
(process.env.NODE_ENV === 'development'
|
|
584
|
+
? PureClientVersion.VX_X_X
|
|
585
|
+
: undefined),
|
|
586
|
+
function: _serializeValueSpecification(query),
|
|
587
|
+
model: serialize(model),
|
|
588
|
+
context: serialize(
|
|
589
|
+
V1_rawBaseExecutionContextModelSchema,
|
|
590
|
+
new V1_RawBaseExecutionContext(),
|
|
591
|
+
),
|
|
592
|
+
parameterValues: (parameterValues ?? []).map((parameterValue) =>
|
|
593
|
+
serialize(V1_parameterValueModelSchema, parameterValue),
|
|
594
|
+
),
|
|
595
|
+
}),
|
|
596
|
+
);
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
// ---------------------------------- CACHING --------------------------------------
|
|
600
|
+
|
|
601
|
+
override async initializeCache(
|
|
602
|
+
source: DataCubeSource,
|
|
603
|
+
): Promise<CachedDataCubeSource | undefined> {
|
|
604
|
+
if (source instanceof LegendQueryDataCubeSource) {
|
|
605
|
+
const fromQuery = this.buildExecutionContext(source);
|
|
606
|
+
fromQuery?.parameters.unshift(source.query);
|
|
607
|
+
const valSpec = guaranteeType(
|
|
608
|
+
fromQuery,
|
|
609
|
+
V1_ValueSpecification,
|
|
610
|
+
'Query is not a valueSpecification',
|
|
611
|
+
);
|
|
612
|
+
const queryLambda = new V1_Lambda();
|
|
613
|
+
queryLambda.body = [valSpec];
|
|
614
|
+
const resultQuery = await this.executeQuery(
|
|
615
|
+
queryLambda,
|
|
616
|
+
source,
|
|
617
|
+
undefined,
|
|
618
|
+
);
|
|
619
|
+
const result = resultQuery.result;
|
|
620
|
+
await this._cacheManager.initializeDuckDb(result);
|
|
621
|
+
return this._synthesizeCachedSource(source, result.builder);
|
|
622
|
+
}
|
|
623
|
+
return undefined;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
override async clearCache() {
|
|
627
|
+
await this._cacheManager.clearDuckDb();
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
// --------------------------------- CACHING UTILITY -------------------------------
|
|
631
|
+
|
|
632
|
+
private _synthesizeCachedSource(
|
|
633
|
+
source: LegendQueryDataCubeSource,
|
|
634
|
+
builder: TDSBuilder,
|
|
635
|
+
) {
|
|
636
|
+
const cachedSource = new CachedDataCubeSource();
|
|
637
|
+
cachedSource.columns = source.columns;
|
|
638
|
+
cachedSource.query = this._synthesizeQuery([
|
|
639
|
+
'local::duckdb::cachedStore',
|
|
640
|
+
'main',
|
|
641
|
+
'cached_tbl',
|
|
642
|
+
]);
|
|
643
|
+
cachedSource.model = this._synthesizeModel(builder);
|
|
644
|
+
cachedSource.runtime = 'local::duckdb::runtime';
|
|
645
|
+
return cachedSource;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
private _synthesizeQuery(databaseAccessor: string[]) {
|
|
649
|
+
const classInstance = new V1_ClassInstance();
|
|
650
|
+
classInstance.type = V1_ClassInstanceType.RELATION_STORE_ACCESSOR;
|
|
651
|
+
const storeAccessor = new V1_RelationStoreAccessor();
|
|
652
|
+
storeAccessor.path = databaseAccessor;
|
|
653
|
+
classInstance.value = storeAccessor;
|
|
654
|
+
return classInstance;
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
private _synthesizeModel(builder: TDSBuilder) {
|
|
658
|
+
// synthesize table
|
|
659
|
+
const table = new V1_Table();
|
|
660
|
+
table.name = 'cached_tbl';
|
|
661
|
+
table.columns = builder.columns.map((col) => {
|
|
662
|
+
const column = new V1_Column();
|
|
663
|
+
column.name = col.name;
|
|
664
|
+
column.type = this._getColumnType(col.type);
|
|
665
|
+
return column;
|
|
666
|
+
});
|
|
667
|
+
// synthesize schema
|
|
668
|
+
const schema = new V1_Schema();
|
|
669
|
+
schema.name = 'main';
|
|
670
|
+
schema.tables = [table];
|
|
671
|
+
// synthesize database
|
|
672
|
+
const database = new V1_Database();
|
|
673
|
+
database.name = 'cachedStore';
|
|
674
|
+
database.package = 'local::duckdb';
|
|
675
|
+
database.schemas = [schema];
|
|
676
|
+
|
|
677
|
+
// build connection
|
|
678
|
+
const connection = new V1_RelationalDatabaseConnection();
|
|
679
|
+
connection.databaseType = 'DuckDB';
|
|
680
|
+
connection.type = 'DuckDB';
|
|
681
|
+
const dataSourceSpec = new V1_DuckDBDatasourceSpecification();
|
|
682
|
+
dataSourceSpec.path = '/temp/path';
|
|
683
|
+
connection.store = 'local::duckdb::cachedStore';
|
|
684
|
+
connection.datasourceSpecification = dataSourceSpec;
|
|
685
|
+
connection.authenticationStrategy = new V1_TestAuthenticationStrategy();
|
|
686
|
+
|
|
687
|
+
// build runtime
|
|
688
|
+
const runtime = new V1_EngineRuntime();
|
|
689
|
+
const storeConnections = new V1_StoreConnections();
|
|
690
|
+
storeConnections.store = new V1_PackageableElementPointer(
|
|
691
|
+
'STORE',
|
|
692
|
+
`${database.package}::${database.name}`,
|
|
693
|
+
);
|
|
694
|
+
const idConnection = new V1_IdentifiedConnection();
|
|
695
|
+
idConnection.connection = connection;
|
|
696
|
+
idConnection.id = 'local_duckdb_connection';
|
|
697
|
+
storeConnections.storeConnections = [idConnection];
|
|
698
|
+
runtime.connections = [storeConnections];
|
|
699
|
+
|
|
700
|
+
const packageableRuntime = new V1_PackageableRuntime();
|
|
701
|
+
packageableRuntime.runtimeValue = runtime;
|
|
702
|
+
packageableRuntime.package = 'local::duckdb';
|
|
703
|
+
packageableRuntime.name = 'runtime';
|
|
704
|
+
|
|
705
|
+
const pmcd = new V1_PureModelContextData();
|
|
706
|
+
pmcd.elements = [database, packageableRuntime];
|
|
707
|
+
return pmcd;
|
|
708
|
+
}
|
|
709
|
+
|
|
710
|
+
// TODO: need a better way to infer datatype from tds builder
|
|
711
|
+
private _getColumnType(type: string | undefined): V1_RelationalDataType {
|
|
712
|
+
if (type === undefined) {
|
|
713
|
+
throw Error('Unsupported data type');
|
|
714
|
+
}
|
|
715
|
+
switch (type) {
|
|
716
|
+
case 'string':
|
|
717
|
+
return new V1_VarChar();
|
|
718
|
+
case 'integer':
|
|
719
|
+
return new V1_Integer();
|
|
720
|
+
case 'date':
|
|
721
|
+
return new V1_Date();
|
|
722
|
+
case 'boolean':
|
|
723
|
+
return new V1_Binary();
|
|
724
|
+
case 'number':
|
|
725
|
+
return new V1_Double();
|
|
726
|
+
default:
|
|
727
|
+
return new V1_VarChar();
|
|
728
|
+
}
|
|
729
|
+
}
|
|
730
|
+
|
|
489
731
|
// ---------------------------------- APPLICATION ----------------------------------
|
|
490
732
|
|
|
491
733
|
override logDebug(message: string, ...data: unknown[]) {
|
package/tsconfig.json
CHANGED
|
@@ -60,7 +60,9 @@
|
|
|
60
60
|
"./src/application/LegendDataCubeApplicationConfig.ts",
|
|
61
61
|
"./src/application/LegendDataCubeApplicationPlugin.ts",
|
|
62
62
|
"./src/application/LegendDataCubePluginManager.ts",
|
|
63
|
+
"./src/stores/DuckDBWASM.d.ts",
|
|
63
64
|
"./src/stores/LegendDataCubeBaseStore.ts",
|
|
65
|
+
"./src/stores/LegendDataCubeCacheManager.ts",
|
|
64
66
|
"./src/stores/LegendDataCubeDataCubeEngine.ts",
|
|
65
67
|
"./src/stores/model/LegendQueryDataCubeSource.ts",
|
|
66
68
|
"./src/stores/query-builder/source-builder/AdhocQueryDataCubeSourceBuilderState.ts",
|