@finos/legend-data-cube 0.0.38 → 0.0.39
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/index.css +1 -1
- package/lib/package.json +3 -3
- package/lib/stores/core/DataCubeQuerySnapshotBuilder.d.ts +2 -1
- package/lib/stores/core/DataCubeQuerySnapshotBuilder.d.ts.map +1 -1
- package/lib/stores/core/DataCubeQuerySnapshotBuilder.js +25 -7
- package/lib/stores/core/DataCubeQuerySnapshotBuilder.js.map +1 -1
- package/lib/stores/core/DataCubeQuerySnapshotBuilderUtils.d.ts +8 -1
- package/lib/stores/core/DataCubeQuerySnapshotBuilderUtils.d.ts.map +1 -1
- package/lib/stores/core/DataCubeQuerySnapshotBuilderUtils.js +228 -3
- package/lib/stores/core/DataCubeQuerySnapshotBuilderUtils.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Contain.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Contain.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Contain.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Contain.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWith.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWith.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWith.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWith.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Equal.d.ts +3 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Equal.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Equal.js +79 -70
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Equal.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.js +11 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualColumn.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualColumn.js +11 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThan.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThan.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThan.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThan.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.js +11 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.js +11 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNotNull.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNotNull.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNotNull.js +4 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNotNull.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNull.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNull.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNull.js +4 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNull.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThan.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThan.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThan.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThan.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanColumn.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanColumn.js +11 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.js +11 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotContain.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotContain.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotContain.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotContain.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEndWith.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEndWith.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEndWith.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEndWith.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqual.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqual.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqual.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqual.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.js +11 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.js +11 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotStartWith.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotStartWith.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotStartWith.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotStartWith.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWith.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWith.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWith.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWith.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.d.ts +2 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.js +8 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.js.map +1 -1
- package/lib/stores/view/DataCubeViewState.d.ts.map +1 -1
- package/lib/stores/view/DataCubeViewState.js +1 -1
- package/lib/stores/view/DataCubeViewState.js.map +1 -1
- package/package.json +7 -7
- package/src/stores/core/DataCubeQuerySnapshotBuilder.ts +38 -5
- package/src/stores/core/DataCubeQuerySnapshotBuilderUtils.ts +316 -3
- package/src/stores/core/filter/DataCubeQueryFilterOperation__Contain.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__EndWith.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__Equal.tsx +91 -72
- package/src/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__EqualColumn.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__GreaterThan.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__IsNotNull.tsx +11 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__IsNull.tsx +11 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__LessThan.tsx +18 -3
- package/src/stores/core/filter/DataCubeQueryFilterOperation__LessThanColumn.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__NotContain.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__NotEndWith.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__NotEqual.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__NotStartWith.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__StartWith.tsx +18 -4
- package/src/stores/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.tsx +18 -4
- package/src/stores/view/DataCubeViewState.ts +1 -0
|
@@ -13,15 +13,26 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
16
|
import {
|
|
17
|
+
PRIMITIVE_TYPE,
|
|
18
18
|
V1_AppliedFunction,
|
|
19
|
+
V1_AppliedProperty,
|
|
20
|
+
V1_CBoolean,
|
|
21
|
+
V1_CDateTime,
|
|
22
|
+
V1_CDecimal,
|
|
23
|
+
V1_CFloat,
|
|
24
|
+
V1_CInteger,
|
|
25
|
+
V1_CStrictDate,
|
|
26
|
+
V1_CStrictTime,
|
|
27
|
+
V1_CString,
|
|
19
28
|
V1_ClassInstance,
|
|
20
29
|
V1_ColSpec,
|
|
21
30
|
V1_ColSpecArray,
|
|
31
|
+
V1_Lambda,
|
|
32
|
+
type V1_ValueSpecification,
|
|
33
|
+
type V1_PrimitiveValueSpecification,
|
|
22
34
|
extractElementNameFromPath as _name,
|
|
23
35
|
matchFunctionName,
|
|
24
|
-
type V1_ValueSpecification,
|
|
25
36
|
} from '@finos/legend-graph';
|
|
26
37
|
import { type DataCubeColumn } from './model/DataCubeColumn.js';
|
|
27
38
|
import {
|
|
@@ -29,9 +40,22 @@ import {
|
|
|
29
40
|
assertType,
|
|
30
41
|
guaranteeNonNullable,
|
|
31
42
|
guaranteeType,
|
|
43
|
+
UnsupportedOperationError,
|
|
32
44
|
type Clazz,
|
|
33
45
|
} from '@finos/legend-shared';
|
|
34
|
-
import {
|
|
46
|
+
import {
|
|
47
|
+
DataCubeFunction,
|
|
48
|
+
DataCubeQueryFilterGroupOperator,
|
|
49
|
+
DataCubeQueryFilterOperator,
|
|
50
|
+
TREE_COLUMN_VALUE_SEPARATOR,
|
|
51
|
+
type DataCubeOperationValue,
|
|
52
|
+
} from './DataCubeQueryEngine.js';
|
|
53
|
+
import type {
|
|
54
|
+
DataCubeQuerySnapshotFilter,
|
|
55
|
+
DataCubeQuerySnapshotFilterCondition,
|
|
56
|
+
} from './DataCubeQuerySnapshot.js';
|
|
57
|
+
import { _functionName } from './DataCubeQueryBuilderUtils.js';
|
|
58
|
+
import type { DataCubeQueryFilterOperation } from './filter/DataCubeQueryFilterOperation.js';
|
|
35
59
|
|
|
36
60
|
// --------------------------------- UTILITIES ---------------------------------
|
|
37
61
|
|
|
@@ -59,6 +83,14 @@ export function _colSpecParam(func: V1_AppliedFunction, paramIdx: number) {
|
|
|
59
83
|
);
|
|
60
84
|
}
|
|
61
85
|
|
|
86
|
+
export function _lambdaParam(func: V1_AppliedFunction, paramIdx: number) {
|
|
87
|
+
return guaranteeType(
|
|
88
|
+
_param(func, paramIdx, V1_Lambda),
|
|
89
|
+
V1_Lambda,
|
|
90
|
+
`Can't process ${_name(func.function)}: Expected parameter at index ${paramIdx} to be a lambda expression`,
|
|
91
|
+
);
|
|
92
|
+
}
|
|
93
|
+
|
|
62
94
|
export function _colSpecArrayParam(func: V1_AppliedFunction, paramIdx: number) {
|
|
63
95
|
return guaranteeType(
|
|
64
96
|
_param(func, paramIdx, V1_ClassInstance).value,
|
|
@@ -121,3 +153,284 @@ export function _pruneExpandedPaths(
|
|
|
121
153
|
)
|
|
122
154
|
.sort();
|
|
123
155
|
}
|
|
156
|
+
|
|
157
|
+
export function _buildFilterSnapshot(
|
|
158
|
+
vs: V1_ValueSpecification,
|
|
159
|
+
filterOperations: DataCubeQueryFilterOperation[],
|
|
160
|
+
): DataCubeQuerySnapshotFilter {
|
|
161
|
+
const filterSnapshot = {} as DataCubeQuerySnapshotFilter;
|
|
162
|
+
const filterConditionSnapshot = [];
|
|
163
|
+
|
|
164
|
+
if (vs instanceof V1_AppliedFunction) {
|
|
165
|
+
switch (vs.function) {
|
|
166
|
+
case DataCubeQueryFilterGroupOperator.OR:
|
|
167
|
+
case DataCubeQueryFilterGroupOperator.AND:
|
|
168
|
+
filterSnapshot.groupOperator = vs.function;
|
|
169
|
+
break;
|
|
170
|
+
default:
|
|
171
|
+
filterSnapshot.groupOperator = DataCubeQueryFilterGroupOperator.AND;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (
|
|
175
|
+
vs.function === DataCubeQueryFilterGroupOperator.AND ||
|
|
176
|
+
vs.function === DataCubeQueryFilterGroupOperator.OR
|
|
177
|
+
) {
|
|
178
|
+
vs.parameters.forEach((param) => {
|
|
179
|
+
filterConditionSnapshot.push(_buildSubFilter(param, filterOperations)!);
|
|
180
|
+
});
|
|
181
|
+
} else {
|
|
182
|
+
filterConditionSnapshot.push(_buildSubFilter(vs, filterOperations)!);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
filterSnapshot.conditions = filterConditionSnapshot;
|
|
186
|
+
return filterSnapshot;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
function _buildSubFilter(
|
|
190
|
+
vs: V1_ValueSpecification,
|
|
191
|
+
filterOperations: DataCubeQueryFilterOperation[],
|
|
192
|
+
):
|
|
193
|
+
| DataCubeQuerySnapshotFilterCondition
|
|
194
|
+
| DataCubeQuerySnapshotFilter
|
|
195
|
+
| undefined {
|
|
196
|
+
if (vs instanceof V1_AppliedFunction) {
|
|
197
|
+
if (
|
|
198
|
+
Object.values(DataCubeFunction)
|
|
199
|
+
.map((op) => _functionName(op))
|
|
200
|
+
.includes(vs.function) &&
|
|
201
|
+
vs.function !== _functionName(DataCubeFunction.NOT)
|
|
202
|
+
) {
|
|
203
|
+
const condition = _buildFilterConditionSnapshot(vs)!;
|
|
204
|
+
return _buildDataCubeQueryFilter(
|
|
205
|
+
condition[0],
|
|
206
|
+
condition[1],
|
|
207
|
+
filterOperations,
|
|
208
|
+
);
|
|
209
|
+
} else if (vs.function === _functionName(DataCubeFunction.NOT)) {
|
|
210
|
+
const notCondition = _buildNotFilterConditionSnapshot(
|
|
211
|
+
vs.parameters[0] as V1_AppliedFunction,
|
|
212
|
+
);
|
|
213
|
+
if (notCondition) {
|
|
214
|
+
return _buildDataCubeQueryFilter(
|
|
215
|
+
notCondition[0],
|
|
216
|
+
notCondition[1],
|
|
217
|
+
filterOperations,
|
|
218
|
+
);
|
|
219
|
+
} else {
|
|
220
|
+
const filterSnapshot = _buildFilterSnapshot(
|
|
221
|
+
vs.parameters[0] as V1_ValueSpecification,
|
|
222
|
+
filterOperations,
|
|
223
|
+
);
|
|
224
|
+
filterSnapshot.not = true;
|
|
225
|
+
return filterSnapshot;
|
|
226
|
+
}
|
|
227
|
+
} else if (vs.parameters[0] instanceof V1_AppliedFunction) {
|
|
228
|
+
return _buildFilterSnapshot(vs, filterOperations);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return undefined;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
function _buildFilterConditionSnapshot(
|
|
235
|
+
af: V1_AppliedFunction,
|
|
236
|
+
): [V1_AppliedFunction, string] | undefined {
|
|
237
|
+
if (af.parameters[1] && af.parameters[1] instanceof V1_AppliedProperty) {
|
|
238
|
+
switch (af.function) {
|
|
239
|
+
case _functionName(DataCubeFunction.EQUAL):
|
|
240
|
+
return [af, DataCubeQueryFilterOperator.EQUAL_COLUMN];
|
|
241
|
+
case _functionName(DataCubeFunction.GREATER_THAN):
|
|
242
|
+
return [af, DataCubeQueryFilterOperator.GREATER_THAN_COLUMN];
|
|
243
|
+
case _functionName(DataCubeFunction.GREATER_THAN_OR_EQUAL):
|
|
244
|
+
return [af, DataCubeQueryFilterOperator.GREATER_THAN_OR_EQUAL_COLUMN];
|
|
245
|
+
case _functionName(DataCubeFunction.LESS_THAN):
|
|
246
|
+
return [af, DataCubeQueryFilterOperator.GREATER_THAN_OR_EQUAL_COLUMN];
|
|
247
|
+
case _functionName(DataCubeFunction.LESS_THAN):
|
|
248
|
+
return [af, DataCubeQueryFilterOperator.LESS_THAN_COLUMN];
|
|
249
|
+
case _functionName(DataCubeFunction.LESS_THAN_OR_EQUAL):
|
|
250
|
+
return [af, DataCubeQueryFilterOperator.LESS_THAN_OR_EQUAL_COLUMN];
|
|
251
|
+
default:
|
|
252
|
+
return undefined;
|
|
253
|
+
}
|
|
254
|
+
} else if (
|
|
255
|
+
af.parameters[0] instanceof V1_AppliedFunction &&
|
|
256
|
+
af.parameters[0].function === _functionName(DataCubeFunction.TO_LOWERCASE)
|
|
257
|
+
) {
|
|
258
|
+
return _buildCaseInsensitiveFilterConditionSnapshot(af);
|
|
259
|
+
} else {
|
|
260
|
+
switch (af.function) {
|
|
261
|
+
case _functionName(DataCubeFunction.CONTAINS):
|
|
262
|
+
return [af, DataCubeQueryFilterOperator.CONTAIN];
|
|
263
|
+
case _functionName(DataCubeFunction.ENDS_WITH):
|
|
264
|
+
return [af, DataCubeQueryFilterOperator.END_WITH];
|
|
265
|
+
case _functionName(DataCubeFunction.EQUAL):
|
|
266
|
+
return [af, DataCubeQueryFilterOperator.EQUAL];
|
|
267
|
+
case _functionName(DataCubeFunction.GREATER_THAN):
|
|
268
|
+
return [af, DataCubeQueryFilterOperator.GREATER_THAN];
|
|
269
|
+
case _functionName(DataCubeFunction.GREATER_THAN_OR_EQUAL):
|
|
270
|
+
return [af, DataCubeQueryFilterOperator.GREATER_THAN_OR_EQUAL];
|
|
271
|
+
case _functionName(DataCubeFunction.IS_EMPTY):
|
|
272
|
+
return [af, DataCubeQueryFilterOperator.IS_NULL];
|
|
273
|
+
case _functionName(DataCubeFunction.LESS_THAN):
|
|
274
|
+
return [af, DataCubeQueryFilterOperator.LESS_THAN];
|
|
275
|
+
case _functionName(DataCubeFunction.LESS_THAN_OR_EQUAL):
|
|
276
|
+
return [af, DataCubeQueryFilterOperator.LESS_THAN_OR_EQUAL];
|
|
277
|
+
case _functionName(DataCubeFunction.STARTS_WITH):
|
|
278
|
+
return [af, DataCubeQueryFilterOperator.START_WITH];
|
|
279
|
+
default:
|
|
280
|
+
return undefined;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
function _buildCaseInsensitiveFilterConditionSnapshot(
|
|
286
|
+
af: V1_AppliedFunction,
|
|
287
|
+
): [V1_AppliedFunction, string] | undefined {
|
|
288
|
+
const func = af;
|
|
289
|
+
if (
|
|
290
|
+
af.parameters[0] instanceof V1_AppliedFunction &&
|
|
291
|
+
af.parameters[1] instanceof V1_AppliedFunction
|
|
292
|
+
) {
|
|
293
|
+
func.parameters = [
|
|
294
|
+
af.parameters[0].parameters[0]!,
|
|
295
|
+
af.parameters[1].parameters[0]!,
|
|
296
|
+
];
|
|
297
|
+
}
|
|
298
|
+
if (func.parameters[1] && func.parameters[1] instanceof V1_AppliedProperty) {
|
|
299
|
+
switch (af.function) {
|
|
300
|
+
case _functionName(DataCubeFunction.EQUAL):
|
|
301
|
+
return [
|
|
302
|
+
func,
|
|
303
|
+
DataCubeQueryFilterOperator.EQUAL_CASE_INSENSITIVE_COLUMN,
|
|
304
|
+
];
|
|
305
|
+
default:
|
|
306
|
+
return undefined;
|
|
307
|
+
}
|
|
308
|
+
} else {
|
|
309
|
+
switch (af.function) {
|
|
310
|
+
case _functionName(DataCubeFunction.CONTAINS):
|
|
311
|
+
return [func, DataCubeQueryFilterOperator.CONTAIN_CASE_INSENSITIVE];
|
|
312
|
+
case _functionName(DataCubeFunction.ENDS_WITH):
|
|
313
|
+
return [func, DataCubeQueryFilterOperator.END_WITH_CASE_INSENSITIVE];
|
|
314
|
+
case _functionName(DataCubeFunction.EQUAL):
|
|
315
|
+
return [func, DataCubeQueryFilterOperator.EQUAL_CASE_INSENSITIVE];
|
|
316
|
+
case _functionName(DataCubeFunction.STARTS_WITH):
|
|
317
|
+
return [func, DataCubeQueryFilterOperator.START_WITH_CASE_INSENSITIVE];
|
|
318
|
+
default:
|
|
319
|
+
return undefined;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
function _buildNotFilterConditionSnapshot(
|
|
325
|
+
af: V1_AppliedFunction,
|
|
326
|
+
): [V1_AppliedFunction, string] | undefined {
|
|
327
|
+
if (af.parameters[1] && af.parameters[1] instanceof V1_AppliedProperty) {
|
|
328
|
+
switch (af.function) {
|
|
329
|
+
case _functionName(DataCubeFunction.EQUAL):
|
|
330
|
+
return [af, DataCubeQueryFilterOperator.NOT_EQUAL_COLUMN];
|
|
331
|
+
default:
|
|
332
|
+
return undefined;
|
|
333
|
+
}
|
|
334
|
+
} else if (
|
|
335
|
+
af.parameters[0] instanceof V1_AppliedFunction &&
|
|
336
|
+
af.parameters[0].function === _functionName(DataCubeFunction.TO_LOWERCASE)
|
|
337
|
+
) {
|
|
338
|
+
if (af.function === _functionName(DataCubeFunction.EQUAL)) {
|
|
339
|
+
const func = af;
|
|
340
|
+
if (
|
|
341
|
+
af.parameters[0] instanceof V1_AppliedFunction &&
|
|
342
|
+
af.parameters[1] instanceof V1_AppliedFunction
|
|
343
|
+
) {
|
|
344
|
+
func.parameters = [
|
|
345
|
+
af.parameters[0].parameters[0]!,
|
|
346
|
+
af.parameters[1].parameters[0]!,
|
|
347
|
+
];
|
|
348
|
+
}
|
|
349
|
+
if (
|
|
350
|
+
func.parameters[1] &&
|
|
351
|
+
func.parameters[1] instanceof V1_AppliedProperty
|
|
352
|
+
) {
|
|
353
|
+
return [
|
|
354
|
+
func,
|
|
355
|
+
DataCubeQueryFilterOperator.NOT_EQUAL_CASE_INSENSITIVE_COLUMN,
|
|
356
|
+
];
|
|
357
|
+
}
|
|
358
|
+
return [func, DataCubeQueryFilterOperator.NOT_EQUAL_CASE_INSENSITIVE];
|
|
359
|
+
}
|
|
360
|
+
} else {
|
|
361
|
+
switch (af.function) {
|
|
362
|
+
case _functionName(DataCubeFunction.CONTAINS):
|
|
363
|
+
return [af, DataCubeQueryFilterOperator.NOT_CONTAIN];
|
|
364
|
+
case _functionName(DataCubeFunction.ENDS_WITH):
|
|
365
|
+
return [af, DataCubeQueryFilterOperator.NOT_END_WITH];
|
|
366
|
+
case _functionName(DataCubeFunction.EQUAL):
|
|
367
|
+
return [af, DataCubeQueryFilterOperator.NOT_EQUAL];
|
|
368
|
+
case _functionName(DataCubeFunction.IS_EMPTY):
|
|
369
|
+
return [af, DataCubeQueryFilterOperator.IS_NOT_NULL];
|
|
370
|
+
case _functionName(DataCubeFunction.STARTS_WITH):
|
|
371
|
+
return [af, DataCubeQueryFilterOperator.NOT_START_WITH];
|
|
372
|
+
default:
|
|
373
|
+
return undefined;
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
return undefined;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
export function _dataCubeOperationValue(
|
|
380
|
+
vs: V1_PrimitiveValueSpecification,
|
|
381
|
+
): DataCubeOperationValue {
|
|
382
|
+
switch (true) {
|
|
383
|
+
case vs instanceof V1_CString:
|
|
384
|
+
return _buildDataCubeOperationValue(PRIMITIVE_TYPE.STRING, vs.value);
|
|
385
|
+
case vs instanceof V1_CBoolean:
|
|
386
|
+
return _buildDataCubeOperationValue(PRIMITIVE_TYPE.BOOLEAN, vs.value);
|
|
387
|
+
case vs instanceof V1_CDecimal:
|
|
388
|
+
return _buildDataCubeOperationValue(PRIMITIVE_TYPE.DECIMAL, vs.value);
|
|
389
|
+
case vs instanceof V1_CInteger:
|
|
390
|
+
return _buildDataCubeOperationValue(PRIMITIVE_TYPE.INTEGER, vs.value);
|
|
391
|
+
case vs instanceof V1_CFloat:
|
|
392
|
+
return _buildDataCubeOperationValue(PRIMITIVE_TYPE.FLOAT, vs.value);
|
|
393
|
+
case vs instanceof V1_CStrictDate:
|
|
394
|
+
return _buildDataCubeOperationValue(PRIMITIVE_TYPE.STRICTDATE, vs.value);
|
|
395
|
+
case vs instanceof V1_CDateTime:
|
|
396
|
+
return _buildDataCubeOperationValue(PRIMITIVE_TYPE.DATETIME, vs.value);
|
|
397
|
+
case vs instanceof V1_CStrictTime:
|
|
398
|
+
return _buildDataCubeOperationValue(PRIMITIVE_TYPE.STRICTTIME, vs.value);
|
|
399
|
+
default:
|
|
400
|
+
throw new UnsupportedOperationError(
|
|
401
|
+
`Unsupported primitive value '${vs}'`,
|
|
402
|
+
);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
function _buildDataCubeQueryFilter(
|
|
407
|
+
af: V1_AppliedFunction,
|
|
408
|
+
operator: string,
|
|
409
|
+
filterOperations: DataCubeQueryFilterOperation[],
|
|
410
|
+
): DataCubeQuerySnapshotFilterCondition | undefined {
|
|
411
|
+
const filterOperation = filterOperations.find(
|
|
412
|
+
(op) => op.operator === operator,
|
|
413
|
+
);
|
|
414
|
+
return filterOperation?.buildConditionSnapshot(af);
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
function _buildDataCubeOperationValue(
|
|
418
|
+
type: string,
|
|
419
|
+
value: unknown,
|
|
420
|
+
): DataCubeOperationValue {
|
|
421
|
+
return {
|
|
422
|
+
value: value,
|
|
423
|
+
type: type,
|
|
424
|
+
} satisfies DataCubeOperationValue;
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
export function _buildConditionSnapshotProperty(
|
|
428
|
+
property: V1_AppliedProperty,
|
|
429
|
+
operator: DataCubeQueryFilterOperator,
|
|
430
|
+
): DataCubeQuerySnapshotFilterCondition {
|
|
431
|
+
return {
|
|
432
|
+
name: property.property,
|
|
433
|
+
operator: operator,
|
|
434
|
+
type: property.class!, // TODO: fix this in engine (missing class in V1_AppliedProperty)
|
|
435
|
+
} as DataCubeQuerySnapshotFilterCondition;
|
|
436
|
+
}
|
|
@@ -13,8 +13,6 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
|
-
import { type V1_AppliedFunction } from '@finos/legend-graph';
|
|
18
16
|
import {
|
|
19
17
|
DataCubeQueryFilterOperation,
|
|
20
18
|
generateDefaultFilterConditionPrimitiveTypeValue,
|
|
@@ -35,6 +33,15 @@ import {
|
|
|
35
33
|
_value,
|
|
36
34
|
} from '../DataCubeQueryBuilderUtils.js';
|
|
37
35
|
import { guaranteeNonNullable } from '@finos/legend-shared';
|
|
36
|
+
import {
|
|
37
|
+
V1_PrimitiveValueSpecification,
|
|
38
|
+
type V1_AppliedFunction,
|
|
39
|
+
type V1_AppliedProperty,
|
|
40
|
+
} from '@finos/legend-graph';
|
|
41
|
+
import {
|
|
42
|
+
_buildConditionSnapshotProperty,
|
|
43
|
+
_dataCubeOperationValue,
|
|
44
|
+
} from '../DataCubeQuerySnapshotBuilderUtils.js';
|
|
38
45
|
|
|
39
46
|
export class DataCubeQueryFilterOperation__Contain extends DataCubeQueryFilterOperation {
|
|
40
47
|
override get label() {
|
|
@@ -73,8 +80,15 @@ export class DataCubeQueryFilterOperation__Contain extends DataCubeQueryFilterOp
|
|
|
73
80
|
}
|
|
74
81
|
|
|
75
82
|
buildConditionSnapshot(expression: V1_AppliedFunction) {
|
|
76
|
-
|
|
77
|
-
|
|
83
|
+
const value = expression.parameters[1];
|
|
84
|
+
const filterConditionSnapshot = _buildConditionSnapshotProperty(
|
|
85
|
+
expression.parameters[0] as V1_AppliedProperty,
|
|
86
|
+
this.operator,
|
|
87
|
+
);
|
|
88
|
+
if (value instanceof V1_PrimitiveValueSpecification) {
|
|
89
|
+
filterConditionSnapshot.value = _dataCubeOperationValue(value);
|
|
90
|
+
}
|
|
91
|
+
return filterConditionSnapshot satisfies DataCubeQuerySnapshotFilterCondition;
|
|
78
92
|
}
|
|
79
93
|
|
|
80
94
|
buildConditionExpression(condition: DataCubeQuerySnapshotFilterCondition) {
|
|
@@ -13,8 +13,6 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
|
-
import { type V1_AppliedFunction } from '@finos/legend-graph';
|
|
18
16
|
import {
|
|
19
17
|
DataCubeQueryFilterOperation,
|
|
20
18
|
generateDefaultFilterConditionPrimitiveTypeValue,
|
|
@@ -36,6 +34,15 @@ import {
|
|
|
36
34
|
_var,
|
|
37
35
|
} from '../DataCubeQueryBuilderUtils.js';
|
|
38
36
|
import { guaranteeNonNullable } from '@finos/legend-shared';
|
|
37
|
+
import {
|
|
38
|
+
V1_PrimitiveValueSpecification,
|
|
39
|
+
type V1_AppliedFunction,
|
|
40
|
+
type V1_AppliedProperty,
|
|
41
|
+
} from '@finos/legend-graph';
|
|
42
|
+
import {
|
|
43
|
+
_buildConditionSnapshotProperty,
|
|
44
|
+
_dataCubeOperationValue,
|
|
45
|
+
} from '../DataCubeQuerySnapshotBuilderUtils.js';
|
|
39
46
|
|
|
40
47
|
export class DataCubeQueryFilterOperation__ContainCaseInsensitive extends DataCubeQueryFilterOperation {
|
|
41
48
|
override get label() {
|
|
@@ -74,8 +81,15 @@ export class DataCubeQueryFilterOperation__ContainCaseInsensitive extends DataCu
|
|
|
74
81
|
}
|
|
75
82
|
|
|
76
83
|
buildConditionSnapshot(expression: V1_AppliedFunction) {
|
|
77
|
-
|
|
78
|
-
|
|
84
|
+
const value = expression.parameters[1];
|
|
85
|
+
const filterConditionSnapshot = _buildConditionSnapshotProperty(
|
|
86
|
+
expression.parameters[0] as V1_AppliedProperty,
|
|
87
|
+
this.operator,
|
|
88
|
+
);
|
|
89
|
+
if (value instanceof V1_PrimitiveValueSpecification) {
|
|
90
|
+
filterConditionSnapshot.value = _dataCubeOperationValue(value);
|
|
91
|
+
}
|
|
92
|
+
return filterConditionSnapshot satisfies DataCubeQuerySnapshotFilterCondition;
|
|
79
93
|
}
|
|
80
94
|
|
|
81
95
|
buildConditionExpression(condition: DataCubeQuerySnapshotFilterCondition) {
|
|
@@ -13,8 +13,6 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
|
-
import { type V1_AppliedFunction } from '@finos/legend-graph';
|
|
18
16
|
import {
|
|
19
17
|
DataCubeQueryFilterOperation,
|
|
20
18
|
generateDefaultFilterConditionPrimitiveTypeValue,
|
|
@@ -35,6 +33,15 @@ import {
|
|
|
35
33
|
_value,
|
|
36
34
|
} from '../DataCubeQueryBuilderUtils.js';
|
|
37
35
|
import { guaranteeNonNullable } from '@finos/legend-shared';
|
|
36
|
+
import {
|
|
37
|
+
V1_PrimitiveValueSpecification,
|
|
38
|
+
type V1_AppliedFunction,
|
|
39
|
+
type V1_AppliedProperty,
|
|
40
|
+
} from '@finos/legend-graph';
|
|
41
|
+
import {
|
|
42
|
+
_buildConditionSnapshotProperty,
|
|
43
|
+
_dataCubeOperationValue,
|
|
44
|
+
} from '../DataCubeQuerySnapshotBuilderUtils.js';
|
|
38
45
|
|
|
39
46
|
export class DataCubeQueryFilterOperation__EndWith extends DataCubeQueryFilterOperation {
|
|
40
47
|
override get label() {
|
|
@@ -73,8 +80,15 @@ export class DataCubeQueryFilterOperation__EndWith extends DataCubeQueryFilterOp
|
|
|
73
80
|
}
|
|
74
81
|
|
|
75
82
|
buildConditionSnapshot(expression: V1_AppliedFunction) {
|
|
76
|
-
|
|
77
|
-
|
|
83
|
+
const value = expression.parameters[1];
|
|
84
|
+
const filterConditionSnapshot = _buildConditionSnapshotProperty(
|
|
85
|
+
expression.parameters[0] as V1_AppliedProperty,
|
|
86
|
+
this.operator,
|
|
87
|
+
);
|
|
88
|
+
if (value instanceof V1_PrimitiveValueSpecification) {
|
|
89
|
+
filterConditionSnapshot.value = _dataCubeOperationValue(value);
|
|
90
|
+
}
|
|
91
|
+
return filterConditionSnapshot satisfies DataCubeQuerySnapshotFilterCondition;
|
|
78
92
|
}
|
|
79
93
|
|
|
80
94
|
buildConditionExpression(condition: DataCubeQuerySnapshotFilterCondition) {
|
|
@@ -13,8 +13,6 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
|
|
17
|
-
import { type V1_AppliedFunction } from '@finos/legend-graph';
|
|
18
16
|
import {
|
|
19
17
|
DataCubeQueryFilterOperation,
|
|
20
18
|
generateDefaultFilterConditionPrimitiveTypeValue,
|
|
@@ -36,6 +34,15 @@ import {
|
|
|
36
34
|
_var,
|
|
37
35
|
} from '../DataCubeQueryBuilderUtils.js';
|
|
38
36
|
import { guaranteeNonNullable } from '@finos/legend-shared';
|
|
37
|
+
import {
|
|
38
|
+
V1_PrimitiveValueSpecification,
|
|
39
|
+
type V1_AppliedFunction,
|
|
40
|
+
type V1_AppliedProperty,
|
|
41
|
+
} from '@finos/legend-graph';
|
|
42
|
+
import {
|
|
43
|
+
_buildConditionSnapshotProperty,
|
|
44
|
+
_dataCubeOperationValue,
|
|
45
|
+
} from '../DataCubeQuerySnapshotBuilderUtils.js';
|
|
39
46
|
|
|
40
47
|
export class DataCubeQueryFilterOperation__EndWithCaseInsensitive extends DataCubeQueryFilterOperation {
|
|
41
48
|
override get label() {
|
|
@@ -74,8 +81,15 @@ export class DataCubeQueryFilterOperation__EndWithCaseInsensitive extends DataCu
|
|
|
74
81
|
}
|
|
75
82
|
|
|
76
83
|
buildConditionSnapshot(expression: V1_AppliedFunction) {
|
|
77
|
-
|
|
78
|
-
|
|
84
|
+
const value = expression.parameters[1];
|
|
85
|
+
const filterConditionSnapshot = _buildConditionSnapshotProperty(
|
|
86
|
+
expression.parameters[0] as V1_AppliedProperty,
|
|
87
|
+
this.operator,
|
|
88
|
+
);
|
|
89
|
+
if (value instanceof V1_PrimitiveValueSpecification) {
|
|
90
|
+
filterConditionSnapshot.value = _dataCubeOperationValue(value);
|
|
91
|
+
}
|
|
92
|
+
return filterConditionSnapshot satisfies DataCubeQuerySnapshotFilterCondition;
|
|
79
93
|
}
|
|
80
94
|
|
|
81
95
|
buildConditionExpression(condition: DataCubeQuerySnapshotFilterCondition) {
|