@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.
- package/lib/components/dataCube/grid/DataCubeGrid.d.ts.map +1 -1
- package/lib/components/dataCube/grid/DataCubeGrid.js +1 -1
- package/lib/components/dataCube/grid/DataCubeGrid.js.map +1 -1
- package/lib/grid.css +1 -1
- package/lib/index.css +1 -1
- package/lib/package.json +1 -1
- package/lib/repl.css +1 -1
- package/lib/stores/dataCube/DataCubeMetaModelConst.d.ts +14 -0
- package/lib/stores/dataCube/DataCubeMetaModelConst.d.ts.map +1 -1
- package/lib/stores/dataCube/DataCubeMetaModelConst.js +15 -0
- package/lib/stores/dataCube/DataCubeMetaModelConst.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQueryBuilder.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQueryBuilder.js +250 -11
- package/lib/stores/dataCube/core/DataCubeQueryBuilder.js.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts +11 -2
- package/lib/stores/dataCube/core/DataCubeQuerySnapshot.d.ts.map +1 -1
- package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js +2 -0
- package/lib/stores/dataCube/core/DataCubeQuerySnapshot.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridClientEngine.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js +42 -4
- package/lib/stores/dataCube/grid/DataCubeGridClientEngine.js.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.d.ts.map +1 -1
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.js +32 -4
- package/lib/stores/dataCube/grid/DataCubeGridQuerySnapshotAnalyzer.js.map +1 -1
- package/package.json +4 -4
- package/src/components/dataCube/grid/DataCubeGrid.tsx +2 -0
- package/src/stores/dataCube/DataCubeMetaModelConst.ts +15 -0
- package/src/stores/dataCube/core/DataCubeQueryBuilder.ts +341 -13
- package/src/stores/dataCube/core/DataCubeQuerySnapshot.ts +12 -1
- package/src/stores/dataCube/grid/DataCubeGridClientEngine.ts +61 -4
- 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":"AAAA;;;;;;;;;;;;;;GAcG;AAQH,OAAO,EACL,aAAa,
|
|
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;
|
|
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
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;
|
|
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.
|
|
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.
|
|
55
|
-
"@finos/legend-art": "7.1.
|
|
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.
|
|
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 {
|
|
31
|
-
|
|
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
|
-
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
)
|
|
104
|
-
|
|
105
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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: [],
|