@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.
@@ -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,+CAmGtC,CAAC"}
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
@@ -1,4 +1,4 @@
1
- /** @license @finos/legend-application-data-cube v0.1.21
1
+ /** @license @finos/legend-application-data-cube v0.2.0
2
2
  * Copyright (c) 2020-present, Goldman Sachs
3
3
  *
4
4
  * Licensed under the Apache License, Version 2.0 (the "License");
package/lib/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos/legend-application-data-cube",
3
- "version": "0.1.21",
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 { type V1_Lambda, type V1_ValueSpecification, type V1_EngineServerClient, V1_PureGraphManager, TDSExecutionResult } from '@finos/legend-graph';
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,KAAK,SAAS,EACd,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,mBAAmB,EAKnB,kBAAkB,EAqBnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAEL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,cAAc,EAWnB,KAAK,wBAAwB,EAC9B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAEL,QAAQ,EAER,KAAK,WAAW,EAMjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAQnF,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AAEpC,qBAAa,4BAA6B,SAAQ,cAAc;IAC9D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiC;IAC9D,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAoB;IACvD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAwB;IAC5D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;gBAGlD,WAAW,EAAE,8BAA8B,EAC3C,iBAAiB,EAAE,iBAAiB,EACpC,kBAAkB,EAAE,qBAAqB,EACzC,YAAY,EAAE,mBAAmB;IAYpB,kBAAkB,CAC/B,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,cAAc,CAAC;IAmHX,uBAAuB,CACpC,IAAI,EAAE,MAAM,EACZ,uBAAuB,CAAC,EAAE,OAAO,GAAG,SAAS;IA4BhC,yBAAyB,CACtC,KAAK,EAAE,qBAAqB,EAC5B,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS;IAUf,iBAAiB,CAC9B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,cAAc;IA2BT,0BAA0B,CACvC,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,cAAc;;;;;;IA0BT,8BAA8B,CAC3C,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,qBAAqB,EAChC,MAAM,EAAE,cAAc;;;;;;IAkCT,YAAY,CACzB,KAAK,EAAE,SAAS,EAChB,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,wBAAwB,GAAG,SAAS;;;;;IAuCvC,qBAAqB,CAAC,MAAM,EAAE,cAAc;YAoBvC,qBAAqB;YAcrB,sBAAsB;YAmBtB,SAAS;IA+Bd,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE;IAQ5C,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE;IAmB9D,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE;IAI3C,UAAU,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE;IAI9C,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE;IAI5C,iBAAiB,CAAC,KAAK,EAAE,KAAK;IAI9B,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK;IAQnD,qBAAqB,CAAC,GAAG,EAAE,MAAM;IAIjC,QAAQ,CAAC,GAAG,EAAE,MAAM;IAIpB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW;CAGxD"}
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":"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"}
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.1.21",
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.41",
48
- "@finos/legend-data-cube": "0.0.48",
49
- "@finos/legend-graph": "32.0.9",
50
- "@finos/legend-query-builder": "4.15.46",
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.1.37",
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",
@@ -157,6 +157,7 @@ export const LegendDataCubeQueryBuilder = withLegendDataCubeQueryBuilderStore(
157
157
  );
158
158
  },
159
159
  documentationUrl: application.documentationService.url,
160
+ enableCache: true,
160
161
  }}
161
162
  />
162
163
  );
@@ -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
- type V1_Lambda,
19
- type V1_ValueSpecification,
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",