@finos/legend-application-repl 0.0.23 → 0.0.25

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.
Files changed (31) hide show
  1. package/lib/components/dataCube/grid/DataCubeGrid.d.ts.map +1 -1
  2. package/lib/components/dataCube/grid/DataCubeGrid.js +1 -1
  3. package/lib/components/dataCube/grid/DataCubeGrid.js.map +1 -1
  4. package/lib/grid.css +1 -1
  5. package/lib/index.css +1 -1
  6. package/lib/package.json +1 -1
  7. package/lib/repl.css +1 -1
  8. package/lib/stores/dataCube/DataCubeMetaModelConst.d.ts +14 -0
  9. package/lib/stores/dataCube/DataCubeMetaModelConst.d.ts.map +1 -1
  10. package/lib/stores/dataCube/DataCubeMetaModelConst.js +15 -0
  11. package/lib/stores/dataCube/DataCubeMetaModelConst.js.map +1 -1
  12. package/lib/stores/dataCube/core/DataCubeQueryBuilder.d.ts.map +1 -1
  13. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js +250 -11
  14. package/lib/stores/dataCube/core/DataCubeQueryBuilder.js.map +1 -1
  15. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts +11 -2
  16. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts.map +1 -1
  17. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js +2 -0
  18. package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js.map +1 -1
  19. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts.map +1 -1
  20. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js +42 -4
  21. package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js.map +1 -1
  22. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.d.ts.map +1 -1
  23. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.js +32 -4
  24. package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.js.map +1 -1
  25. package/package.json +4 -4
  26. package/src/components/dataCube/grid/DataCubeGrid.tsx +2 -0
  27. package/src/stores/dataCube/DataCubeMetaModelConst.ts +15 -0
  28. package/src/stores/dataCube/core/DataCubeQueryBuilder.ts +341 -13
  29. package/src/stores/dataCube/core/DataCubeQuerySnapshot.ts +12 -1
  30. package/src/stores/dataCube/grid/DataCubeGridClientEngine.ts +61 -4
  31. package/src/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.ts +40 -4
@@ -1 +1 @@
1
- {"version":3,"file":"DataCubeGridClientEngine.js","sourceRoot":"","sources":["../../../../src/stores/dataCube/grid/DataCubeGridClientEngine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataCubeGridClientEngine.js","sourceRoot":"","sources":["../../../../src/stores/dataCube/grid/DataCubeGridClientEngine.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DataCubeGridQuerySnapshotAnalyzer.d.ts","sourceRoot":"","sources":["../../../../src/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AA8M3D,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,qBAAqB,GAC9B,WAAW,CAmBb"}
1
+ {"version":3,"file":"DataCubeGridQuerySnapshotAnalyzer.d.ts","sourceRoot":"","sources":["../../../../src/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAkP3D,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,qBAAqB,GAC9B,WAAW,CAmBb"}
@@ -15,6 +15,7 @@
15
15
  */
16
16
  import { DATA_CUBE_COLUMN_SORT_DIRECTION } from '../DataCubeMetaModelConst.js';
17
17
  import { GridClientSortDirection } from './DataCubeGridClientEngine.js';
18
+ import { PRIMITIVE_TYPE } from '@finos/legend-graph';
18
19
  // export const getTDSSortOrder = (sortOrder: string): TDS_SORT_ORDER => {
19
20
  // switch (sortOrder) {
20
21
  // case 'asc':
@@ -202,6 +203,33 @@ function buildColumnSortSpecification(colName, snapshot) {
202
203
  sortIndex: snapshot.sortColumns.indexOf(sortCol),
203
204
  };
204
205
  }
206
+ function getAggregationColumnCustomizations(colName, snapshot) {
207
+ const columnType = snapshot.columns.find((col) => col.name === colName)?.type;
208
+ switch (columnType) {
209
+ case PRIMITIVE_TYPE.STRING:
210
+ return [];
211
+ case PRIMITIVE_TYPE.DATE:
212
+ case PRIMITIVE_TYPE.DATETIME:
213
+ case PRIMITIVE_TYPE.STRICTDATE:
214
+ return [];
215
+ case PRIMITIVE_TYPE.DECIMAL:
216
+ case PRIMITIVE_TYPE.INTEGER:
217
+ case PRIMITIVE_TYPE.FLOAT:
218
+ return ['count', 'sum', 'max', 'min', 'avg'];
219
+ default:
220
+ return [];
221
+ }
222
+ }
223
+ function buildColumnGroupBySpecification(colName, snapshot) {
224
+ const rowGroup = snapshot.groupByColumns.find((c) => c.name === colName);
225
+ const aggColumn = snapshot.groupByAggColumns.find((c) => c.name === colName);
226
+ return {
227
+ rowGroup: Boolean(rowGroup),
228
+ hide: Boolean(rowGroup),
229
+ aggFunc: aggColumn ? aggColumn.function : null,
230
+ allowedAggFuncs: getAggregationColumnCustomizations(colName, snapshot),
231
+ };
232
+ }
205
233
  export function generateGridOptionsFromSnapshot(snapshot) {
206
234
  const gridOptions = {
207
235
  columnDefs: snapshot.columns.map((col) => ({
@@ -213,10 +241,10 @@ export function generateGridOptionsFromSnapshot(snapshot) {
213
241
  sortable: true,
214
242
  flex: 1,
215
243
  resizable: true,
216
- // enableRowGroup: true,
217
- // allowedAggFuncs: ['count', 'sum', 'max', 'min', 'avg'],
218
- // enableValue: true,
219
- // menuTabs: ['filterMenuTab', 'generalMenuTab', 'columnsMenuTab'],
244
+ enableRowGroup: true,
245
+ enableValue: true,
246
+ menuTabs: ['generalMenuTab', 'columnsMenuTab'],
247
+ ...buildColumnGroupBySpecification(col.name, snapshot),
220
248
  })),
221
249
  };
222
250
  return gridOptions;
@@ -1 +1 @@
1
- {"version":3,"file":"DataCubeGridQuerySnapshotAnalyzer.js","sourceRoot":"","sources":["../../../../src/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"DataCubeGridQuerySnapshotAnalyzer.js","sourceRoot":"","sources":["../../../../src/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@finos/legend-application-repl",
3
- "version": "0.0.23",
3
+ "version": "0.0.25",
4
4
  "description": "Legend REPL Grid client application core",
5
5
  "keywords": [
6
6
  "legend",
@@ -51,10 +51,10 @@
51
51
  "@ag-grid-enterprise/menu": "31.3.2",
52
52
  "@ag-grid-enterprise/row-grouping": "31.3.2",
53
53
  "@ag-grid-enterprise/server-side-row-model": "31.3.2",
54
- "@finos/legend-application": "15.1.6",
55
- "@finos/legend-art": "7.1.35",
54
+ "@finos/legend-application": "15.1.8",
55
+ "@finos/legend-art": "7.1.36",
56
56
  "@finos/legend-graph": "31.10.3",
57
- "@finos/legend-lego": "1.2.36",
57
+ "@finos/legend-lego": "1.2.38",
58
58
  "@finos/legend-shared": "10.0.39",
59
59
  "@types/react": "18.3.3",
60
60
  "@types/react-dom": "18.3.0",
@@ -55,6 +55,8 @@ export const DataCubeGrid = observer((props: { editorStore: REPLStore }) => {
55
55
  alwaysMultiSort={true}
56
56
  rowModelType="serverSide"
57
57
  serverSideDatasource={dataCubeState.grid.clientDataSource}
58
+ suppressAggFuncInHeader={true}
59
+ suppressServerSideInfiniteScroll={true}
58
60
  modules={[
59
61
  // community
60
62
  ClientSideRowModelModule,
@@ -55,6 +55,21 @@ export enum DATA_CUBE_AGGREGATE_FUNCTION {
55
55
  LAST = 'last',
56
56
  }
57
57
 
58
+ export enum DATA_CUBE_FILTER_OPERATION {
59
+ EQUALS = 'equal',
60
+ NOT_EQUAL = 'notEqual',
61
+ GREATER_THAN = 'greaterThan',
62
+ GREATER_THAN_OR_EQUAL = 'greaterThanOrEqual',
63
+ LESS_THAN = 'lessThan',
64
+ LESS_THAN_OR_EQUAL = 'lessThanOrEqual',
65
+ BLANK = 'isEmpty',
66
+ NOT_BLANK = 'isNotEmpty',
67
+ CONTAINS = 'contains',
68
+ NOT_CONTAINS = 'notContains',
69
+ STARTS_WITH = 'startsWith',
70
+ ENDS_WITH = 'endsWith',
71
+ }
72
+
58
73
  export enum DATA_CUBE_COLUMN_SORT_DIRECTION {
59
74
  ASCENDING = 'ascending',
60
75
  DESCENDING = 'descending',
@@ -15,23 +15,49 @@
15
15
  */
16
16
 
17
17
  import {
18
+ PRIMITIVE_TYPE,
18
19
  V1_AppliedFunction,
20
+ V1_AppliedProperty,
21
+ V1_CBoolean,
22
+ V1_CDateTime,
23
+ V1_CDecimal,
24
+ V1_CFloat,
25
+ V1_CInteger,
26
+ V1_CStrictDate,
27
+ V1_CStrictTime,
28
+ V1_CString,
19
29
  V1_ClassInstance,
20
30
  V1_ClassInstanceType,
21
31
  V1_ColSpec,
32
+ V1_ColSpecArray,
22
33
  V1_Collection,
34
+ V1_Lambda,
23
35
  V1_Multiplicity,
24
36
  V1_PackageableElementPtr,
37
+ type V1_PrimitiveValueSpecification,
38
+ V1_Variable,
25
39
  V1_deserializeValueSpecification,
26
40
  extractElementNameFromPath,
27
- type V1_Lambda,
28
41
  type V1_ValueSpecification,
29
42
  } from '@finos/legend-graph';
30
- import type { DataCubeQuerySnapshot } from './DataCubeQuerySnapshot.js';
31
- import { guaranteeNonNullable } from '@finos/legend-shared';
43
+ import type {
44
+ DataCubeQueryFilterCondition,
45
+ DataCubeQueryFilter,
46
+ DataCubeQuerySnapshot,
47
+ } from './DataCubeQuerySnapshot.js';
32
48
  import {
49
+ guaranteeNonNullable,
50
+ guaranteeIsString,
51
+ guaranteeIsBoolean,
52
+ guaranteeIsNumber,
53
+ UnsupportedOperationError,
54
+ } from '@finos/legend-shared';
55
+ import {
56
+ DATA_CUBE_AGGREGATE_FUNCTION,
33
57
  DATA_CUBE_COLUMN_SORT_DIRECTION,
58
+ DATA_CUBE_FILTER_OPERATION,
34
59
  DATA_CUBE_FUNCTIONS,
60
+ DEFAULT_LAMBDA_VARIABLE_NAME,
35
61
  } from '../DataCubeMetaModelConst.js';
36
62
 
37
63
  function createColSpec(
@@ -51,6 +77,197 @@ function createColSpec(
51
77
  return instance;
52
78
  }
53
79
 
80
+ function getAggregationColSpec(
81
+ column: string,
82
+ functionName: string,
83
+ columnType: string,
84
+ // Temporary. Remove it when we support groupBy with empty aggregations
85
+ columnName?: string,
86
+ ): V1_ColSpec {
87
+ const colSpec = new V1_ColSpec();
88
+ const aggLambda = new V1_Lambda();
89
+ const property = new V1_AppliedProperty();
90
+ property.property = column;
91
+ property.class = columnType;
92
+ const defaultVariable = new V1_Variable();
93
+ defaultVariable.name = DEFAULT_LAMBDA_VARIABLE_NAME;
94
+ property.parameters = [defaultVariable];
95
+ aggLambda.body.push(property);
96
+ aggLambda.parameters.push(defaultVariable);
97
+ colSpec.function1 = aggLambda;
98
+
99
+ const funcLambda = new V1_Lambda();
100
+ const aggFunc = new V1_AppliedFunction();
101
+ aggFunc.function = functionName;
102
+ const aggVariable = new V1_Variable();
103
+ aggVariable.name = 'agg';
104
+ funcLambda.body.push(aggFunc);
105
+ aggFunc.parameters.push(aggVariable);
106
+ funcLambda.parameters.push(aggVariable);
107
+ colSpec.function2 = funcLambda;
108
+
109
+ colSpec.name = columnName ?? column;
110
+ return colSpec;
111
+ }
112
+
113
+ function getPrimitiveValueSpecification(
114
+ type: string,
115
+ column: unknown,
116
+ ): V1_PrimitiveValueSpecification {
117
+ switch (type) {
118
+ case PRIMITIVE_TYPE.STRING: {
119
+ const stringValue = new V1_CString();
120
+ stringValue.value = guaranteeIsString(column);
121
+ return stringValue;
122
+ }
123
+ case PRIMITIVE_TYPE.BOOLEAN: {
124
+ const booleanValue = new V1_CBoolean();
125
+ booleanValue.value = guaranteeIsBoolean(column);
126
+ return booleanValue;
127
+ }
128
+ case PRIMITIVE_TYPE.NUMBER:
129
+ case PRIMITIVE_TYPE.DECIMAL: {
130
+ const cDecimal = new V1_CDecimal();
131
+ cDecimal.value = guaranteeIsNumber(column);
132
+ return cDecimal;
133
+ }
134
+ case PRIMITIVE_TYPE.INTEGER: {
135
+ const cInteger = new V1_CInteger();
136
+ cInteger.value = guaranteeIsNumber(column);
137
+ return cInteger;
138
+ }
139
+ case PRIMITIVE_TYPE.FLOAT: {
140
+ const cFloat = new V1_CFloat();
141
+ cFloat.value = guaranteeIsNumber(column);
142
+ return cFloat;
143
+ }
144
+ case PRIMITIVE_TYPE.DATE:
145
+ case PRIMITIVE_TYPE.DATETIME: {
146
+ const cDateTime = new V1_CDateTime();
147
+ cDateTime.value = guaranteeIsString(column);
148
+ return cDateTime;
149
+ }
150
+ case PRIMITIVE_TYPE.STRICTDATE: {
151
+ const cStrictDate = new V1_CStrictDate();
152
+ cStrictDate.value = guaranteeIsString(column);
153
+ return cStrictDate;
154
+ }
155
+ case PRIMITIVE_TYPE.STRICTTIME: {
156
+ const cStrictTime = new V1_CStrictTime();
157
+ cStrictTime.value = guaranteeIsString(column);
158
+ return cStrictTime;
159
+ }
160
+ default:
161
+ throw new UnsupportedOperationError(
162
+ `Unsupported dataCube column type ${type}`,
163
+ );
164
+ }
165
+ }
166
+
167
+ function processFilterQuery(filter: object): V1_ValueSpecification {
168
+ const defaultVariable = new V1_Variable();
169
+ defaultVariable.name = DEFAULT_LAMBDA_VARIABLE_NAME;
170
+ if ('groupOperation' in filter) {
171
+ const groupFilter = filter as DataCubeQueryFilter;
172
+ let conditionExpressions: V1_ValueSpecification[] = [];
173
+ groupFilter.conditions.forEach((condition) => {
174
+ const conditionExpression = processFilterQuery(condition);
175
+ conditionExpressions.push(conditionExpression);
176
+ if (conditionExpressions.length === 2) {
177
+ const groupCondition = groupFilter.groupOperation;
178
+ const groupFunc = new V1_AppliedFunction();
179
+ groupFunc.function = groupCondition;
180
+ groupFunc.parameters = conditionExpressions;
181
+ conditionExpressions = [groupFunc];
182
+ }
183
+ });
184
+ if (conditionExpressions.length === 1) {
185
+ return guaranteeNonNullable(conditionExpressions[0]);
186
+ }
187
+ } else {
188
+ const condition = filter as DataCubeQueryFilterCondition;
189
+ const filterCondition = new V1_AppliedFunction();
190
+ const property = new V1_AppliedProperty();
191
+ property.property = condition.name;
192
+ property.class = condition.type;
193
+ property.parameters = [defaultVariable];
194
+
195
+ switch (condition.operation) {
196
+ case DATA_CUBE_FILTER_OPERATION.EQUALS:
197
+ case DATA_CUBE_FILTER_OPERATION.GREATER_THAN:
198
+ case DATA_CUBE_FILTER_OPERATION.GREATER_THAN_OR_EQUAL:
199
+ case DATA_CUBE_FILTER_OPERATION.LESS_THAN:
200
+ case DATA_CUBE_FILTER_OPERATION.LESS_THAN_OR_EQUAL:
201
+ case DATA_CUBE_FILTER_OPERATION.CONTAINS:
202
+ case DATA_CUBE_FILTER_OPERATION.ENDS_WITH:
203
+ case DATA_CUBE_FILTER_OPERATION.STARTS_WITH: {
204
+ filterCondition.function = condition.operation;
205
+ filterCondition.parameters.push(property);
206
+ filterCondition.parameters.push(
207
+ getPrimitiveValueSpecification(condition.type, condition.value),
208
+ );
209
+ break;
210
+ }
211
+ case DATA_CUBE_FILTER_OPERATION.BLANK: {
212
+ filterCondition.function = condition.operation;
213
+ filterCondition.parameters.push(property);
214
+ break;
215
+ }
216
+ case DATA_CUBE_FILTER_OPERATION.NOT_EQUAL: {
217
+ filterCondition.function = extractElementNameFromPath(
218
+ DATA_CUBE_FUNCTIONS.NOT,
219
+ );
220
+
221
+ const filterConditionFunc = new V1_AppliedFunction();
222
+ filterConditionFunc.function = DATA_CUBE_FILTER_OPERATION.EQUALS;
223
+ filterConditionFunc.parameters.push(property);
224
+ filterConditionFunc.parameters.push(
225
+ getPrimitiveValueSpecification(condition.type, condition.value),
226
+ );
227
+
228
+ filterCondition.parameters.push(filterConditionFunc);
229
+ break;
230
+ }
231
+ case DATA_CUBE_FILTER_OPERATION.NOT_BLANK: {
232
+ filterCondition.function = extractElementNameFromPath(
233
+ DATA_CUBE_FUNCTIONS.NOT,
234
+ );
235
+
236
+ const filterConditionFunc = new V1_AppliedFunction();
237
+ filterConditionFunc.function = DATA_CUBE_FILTER_OPERATION.BLANK;
238
+ filterConditionFunc.parameters.push(property);
239
+ filterConditionFunc.parameters.push(
240
+ getPrimitiveValueSpecification(condition.type, condition.value),
241
+ );
242
+
243
+ filterCondition.parameters.push(filterConditionFunc);
244
+ break;
245
+ }
246
+ case DATA_CUBE_FILTER_OPERATION.NOT_CONTAINS: {
247
+ filterCondition.function = extractElementNameFromPath(
248
+ DATA_CUBE_FUNCTIONS.NOT,
249
+ );
250
+
251
+ const filterConditionFunc = new V1_AppliedFunction();
252
+ filterConditionFunc.function = DATA_CUBE_FILTER_OPERATION.CONTAINS;
253
+ filterConditionFunc.parameters.push(property);
254
+ filterConditionFunc.parameters.push(
255
+ getPrimitiveValueSpecification(condition.type, condition.value),
256
+ );
257
+
258
+ filterCondition.parameters.push(filterConditionFunc);
259
+ break;
260
+ }
261
+ default:
262
+ throw new UnsupportedOperationError(
263
+ `Unsupported filter operation ${condition.operation}`,
264
+ );
265
+ }
266
+ return filterCondition;
267
+ }
268
+ throw new UnsupportedOperationError(`Unsupported dataCube filter`, filter);
269
+ }
270
+
54
271
  export function buildExecutableQueryFromSnapshot(
55
272
  snapshot: DataCubeQuerySnapshot,
56
273
  ): V1_ValueSpecification {
@@ -66,11 +283,86 @@ export function buildExecutableQueryFromSnapshot(
66
283
  // --------------------------------- FILTER ---------------------------------
67
284
  // TODO: @akphi - implement this
68
285
 
286
+ // --------------------------------- GROUP BY FILTER ---------------------------------
287
+ if (snapshot.groupByFilter) {
288
+ const filter = snapshot.groupByFilter;
289
+ const filterValueSpec = processFilterQuery(filter);
290
+ const filterLambda = new V1_Lambda();
291
+ const defaultVariable = new V1_Variable();
292
+ defaultVariable.name = DEFAULT_LAMBDA_VARIABLE_NAME;
293
+ filterLambda.body = [filterValueSpec];
294
+
295
+ filterLambda.parameters = [defaultVariable];
296
+ const filterFunc = new V1_AppliedFunction();
297
+ filterFunc.function = extractElementNameFromPath(
298
+ DATA_CUBE_FUNCTIONS.FILTER,
299
+ );
300
+ filterFunc.parameters.push(filterLambda);
301
+ sequence.push(filterFunc);
302
+ }
303
+
69
304
  // --------------------------------- RENAME ---------------------------------
70
305
  // TODO: @akphi - implement this
71
306
 
72
307
  // --------------------------------- GROUP BY ---------------------------------
73
308
  // TODO: @akphi - implement this
309
+ if (snapshot.groupByColumns.length) {
310
+ const groupByInstance = new V1_ClassInstance();
311
+ groupByInstance.type = V1_ClassInstanceType.COL_SPEC_ARRAY;
312
+ const groupByColSpecArray = new V1_ColSpecArray();
313
+ const aggregationColSpecArray = new V1_ColSpecArray();
314
+ const aggregationInstance = new V1_ClassInstance();
315
+ aggregationInstance.type = V1_ClassInstanceType.COL_SPEC_ARRAY;
316
+
317
+ if (
318
+ snapshot.groupByExpandedKeys.length !== snapshot.groupByColumns.length
319
+ ) {
320
+ const groupKeys = snapshot.groupByExpandedKeys;
321
+ for (let index = 0; index <= groupKeys.length; index++) {
322
+ const currentGroupByColumn = snapshot.groupByColumns[index];
323
+ const columnSpec = new V1_ColSpec();
324
+ columnSpec.name = guaranteeNonNullable(currentGroupByColumn).name;
325
+ groupByColSpecArray.colSpecs.push(columnSpec);
326
+ }
327
+
328
+ // Temporary. Remove it later when we support empty aggregations
329
+ if (snapshot.groupByAggColumns.length === 0) {
330
+ const column = guaranteeNonNullable(snapshot.groupByColumns[0]);
331
+ const colSpec = getAggregationColSpec(
332
+ column.name,
333
+ DATA_CUBE_AGGREGATE_FUNCTION.COUNT,
334
+ PRIMITIVE_TYPE.STRING,
335
+ DATA_CUBE_AGGREGATE_FUNCTION.COUNT,
336
+ );
337
+ aggregationColSpecArray.colSpecs.push(colSpec);
338
+ }
339
+ }
340
+
341
+ if (
342
+ snapshot.groupByExpandedKeys.length === 0 ||
343
+ snapshot.groupByExpandedKeys.length !== snapshot.groupByColumns.length
344
+ ) {
345
+ snapshot.groupByAggColumns.forEach((agg) => {
346
+ const colSpec = getAggregationColSpec(agg.name, agg.function, agg.type);
347
+ aggregationColSpecArray.colSpecs.push(colSpec);
348
+ });
349
+ }
350
+
351
+ groupByInstance.value = groupByColSpecArray;
352
+ aggregationInstance.value = aggregationColSpecArray;
353
+
354
+ if (
355
+ groupByColSpecArray.colSpecs.length !== 0 ||
356
+ aggregationColSpecArray.colSpecs.length !== 0
357
+ ) {
358
+ const groupBy = new V1_AppliedFunction();
359
+ groupBy.function = extractElementNameFromPath(
360
+ DATA_CUBE_FUNCTIONS.GROUP_BY,
361
+ );
362
+ groupBy.parameters = [groupByInstance, aggregationInstance];
363
+ sequence.push(groupBy);
364
+ }
365
+ }
74
366
 
75
367
  // --------------------------------- SELECT ---------------------------------
76
368
  // TODO: @akphi - implement this
@@ -82,7 +374,34 @@ export function buildExecutableQueryFromSnapshot(
82
374
  // TODO: @akphi - implement this
83
375
 
84
376
  // --------------------------------- GROUP EXTEND ---------------------------------
85
- // TODO: @akphi - implement this
377
+ if (snapshot.groupByExpandedKeys.length !== snapshot.groupByColumns.length) {
378
+ const extendFunc = new V1_AppliedFunction();
379
+ extendFunc.function = extractElementNameFromPath(
380
+ DATA_CUBE_FUNCTIONS.EXTEND,
381
+ );
382
+ const classInstance = new V1_ClassInstance();
383
+ classInstance.type = V1_ClassInstanceType.COL_SPEC_ARRAY;
384
+ const colSpecArray = new V1_ColSpecArray();
385
+ classInstance.value = colSpecArray;
386
+ snapshot.columns.forEach((col) => {
387
+ if (!snapshot.groupByColumns.find((c) => c.name === col.name)) {
388
+ const colSpec = new V1_ColSpec();
389
+ const lambda = new V1_Lambda();
390
+ const defaultVariable = new V1_Variable();
391
+ defaultVariable.name = DEFAULT_LAMBDA_VARIABLE_NAME;
392
+ lambda.parameters.push(defaultVariable);
393
+ const variableValue = new V1_CString();
394
+ variableValue.value = '';
395
+ lambda.body.push(variableValue);
396
+ colSpec.function1 = lambda;
397
+ colSpec.name = col.name;
398
+ colSpecArray.colSpecs.push(colSpec);
399
+ }
400
+ });
401
+ extendFunc.parameters.push(classInstance);
402
+
403
+ sequence.push(extendFunc);
404
+ }
86
405
 
87
406
  // --------------------------------- SORT ---------------------------------
88
407
 
@@ -95,17 +414,26 @@ export function buildExecutableQueryFromSnapshot(
95
414
  snapshot.sortColumns.length,
96
415
  );
97
416
  snapshot.sortColumns.forEach((sortCol) => {
98
- const sortInfo = new V1_AppliedFunction();
99
- sortInfo.function = extractElementNameFromPath(
100
- sortCol.direction === DATA_CUBE_COLUMN_SORT_DIRECTION.ASCENDING
101
- ? DATA_CUBE_FUNCTIONS.ASC
102
- : DATA_CUBE_FUNCTIONS.DESC,
103
- );
104
- sortInfo.parameters.push(createColSpec(sortCol.name));
105
- sortInfos.values.push(sortInfo);
417
+ if (
418
+ snapshot.groupByColumns.length ===
419
+ snapshot.groupByExpandedKeys.length ||
420
+ snapshot.groupByColumns.map((col) => col.name).indexOf(sortCol.name) ===
421
+ snapshot.groupByExpandedKeys.length
422
+ ) {
423
+ const sortInfo = new V1_AppliedFunction();
424
+ sortInfo.function = extractElementNameFromPath(
425
+ sortCol.direction === DATA_CUBE_COLUMN_SORT_DIRECTION.ASCENDING
426
+ ? DATA_CUBE_FUNCTIONS.ASC
427
+ : DATA_CUBE_FUNCTIONS.DESC,
428
+ );
429
+ sortInfo.parameters.push(createColSpec(sortCol.name));
430
+ sortInfos.values.push(sortInfo);
431
+ }
106
432
  });
107
433
  sort.parameters.push(sortInfos);
108
- sequence.push(sort);
434
+ if (sortInfos.values.length) {
435
+ sequence.push(sort);
436
+ }
109
437
  }
110
438
 
111
439
  // --------------------------------- LIMIT ---------------------------------
@@ -20,6 +20,7 @@ import { uuid, type PlainObject, type Writable } from '@finos/legend-shared';
20
20
  import type {
21
21
  DATA_CUBE_AGGREGATE_FUNCTION,
22
22
  DATA_CUBE_COLUMN_SORT_DIRECTION,
23
+ DATA_CUBE_FILTER_OPERATION,
23
24
  } from '../DataCubeMetaModelConst.js';
24
25
 
25
26
  // export enum FILTER_OPERATION {
@@ -94,8 +95,14 @@ import type {
94
95
  // );
95
96
  // }
96
97
 
98
+ export type DataCubeQueryFilterCondition = DataCubeQuerySnapshotColumn & {
99
+ value: unknown;
100
+ operation: DATA_CUBE_FILTER_OPERATION;
101
+ };
102
+
97
103
  export type DataCubeQueryFilter = {
98
- // TODO: @akphi
104
+ groupOperation: string;
105
+ conditions: (DataCubeQueryFilterCondition | DataCubeQueryFilter)[];
99
106
  };
100
107
 
101
108
  export enum DataCubeQuerySnapshotColumnOrigin {
@@ -149,7 +156,9 @@ export type DataCubeQuerySnapshot = {
149
156
  filter?: DataCubeQueryFilter | undefined;
150
157
  renamedColumns: DataCubeQuerySnapshotRenamedColumn[];
151
158
  groupByColumns: DataCubeQuerySnapshotColumn[];
159
+ groupByExpandedKeys: string[];
152
160
  groupByAggColumns: DataCubeQuerySnapshotAggregateColumn[];
161
+ groupByFilter?: DataCubeQueryFilter | undefined;
153
162
  selectedColumns: DataCubeQuerySnapshotColumn[];
154
163
  pivotColumns: DataCubeQuerySnapshotColumn[];
155
164
  pivotAggColumns: DataCubeQuerySnapshotAggregateColumn[];
@@ -180,12 +189,14 @@ export function createSnapshot(
180
189
  filter: undefined,
181
190
  renamedColumns: [],
182
191
  groupByColumns: [],
192
+ groupByExpandedKeys: [],
183
193
  groupByAggColumns: [],
184
194
  selectedColumns: [],
185
195
  pivotColumns: [],
186
196
  pivotAggColumns: [],
187
197
  castColumns: [],
188
198
  groupExtendedColumns: [],
199
+ groupByFilter: undefined,
189
200
  sortColumns: [],
190
201
  limit: undefined,
191
202
  columns: [],