@finos/legend-data-cube 0.0.41 → 0.0.43
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.d.ts.map +1 -1
- package/lib/components/DataCube.js +1 -1
- package/lib/components/DataCube.js.map +1 -1
- package/lib/components/DataCubePlaceholder.d.ts +0 -1
- package/lib/components/DataCubePlaceholder.d.ts.map +1 -1
- package/lib/components/DataCubePlaceholder.js.map +1 -1
- package/lib/components/core/DataCubeCodeCheckErrorAlert.d.ts.map +1 -1
- package/lib/components/core/DataCubeCodeCheckErrorAlert.js +5 -1
- package/lib/components/core/DataCubeCodeCheckErrorAlert.js.map +1 -1
- package/lib/components/view/extend/DataCubeColumnEditor.d.ts.map +1 -1
- package/lib/components/view/extend/DataCubeColumnEditor.js +5 -2
- package/lib/components/view/extend/DataCubeColumnEditor.js.map +1 -1
- package/lib/components/view/filter/DataCubeFilterEditor.d.ts.map +1 -1
- package/lib/components/view/filter/DataCubeFilterEditor.js +3 -3
- package/lib/components/view/filter/DataCubeFilterEditor.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/package.json +4 -4
- package/lib/stores/core/DataCubeQueryBuilder.d.ts.map +1 -1
- package/lib/stores/core/DataCubeQueryBuilder.js +12 -6
- package/lib/stores/core/DataCubeQueryBuilder.js.map +1 -1
- package/lib/stores/core/DataCubeQueryBuilderUtils.d.ts +5 -5
- package/lib/stores/core/DataCubeQueryBuilderUtils.d.ts.map +1 -1
- package/lib/stores/core/DataCubeQueryBuilderUtils.js +20 -20
- package/lib/stores/core/DataCubeQueryBuilderUtils.js.map +1 -1
- package/lib/stores/core/DataCubeQueryEngine.d.ts +4 -2
- package/lib/stores/core/DataCubeQueryEngine.d.ts.map +1 -1
- package/lib/stores/core/DataCubeQueryEngine.js +13 -0
- package/lib/stores/core/DataCubeQueryEngine.js.map +1 -1
- package/lib/stores/core/DataCubeQuerySnapshot.d.ts +1 -1
- package/lib/stores/core/DataCubeQuerySnapshot.d.ts.map +1 -1
- 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 +86 -53
- package/lib/stores/core/DataCubeQuerySnapshotBuilder.js.map +1 -1
- package/lib/stores/core/DataCubeQuerySnapshotBuilderUtils.d.ts +37 -8
- package/lib/stores/core/DataCubeQuerySnapshotBuilderUtils.d.ts.map +1 -1
- package/lib/stores/core/DataCubeQuerySnapshotBuilderUtils.js +227 -203
- package/lib/stores/core/DataCubeQuerySnapshotBuilderUtils.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterEditorState.d.ts +3 -3
- package/lib/stores/core/filter/DataCubeQueryFilterEditorState.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterEditorState.js +4 -8
- package/lib/stores/core/filter/DataCubeQueryFilterEditorState.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation.d.ts +7 -3
- package/lib/stores/core/filter/DataCubeQueryFilterOperation.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation.js +16 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Contain.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Contain.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Contain.js +10 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Contain.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.js +10 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWith.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWith.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWith.js +10 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWith.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.js +10 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Equal.d.ts +1 -2
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Equal.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Equal.js +15 -90
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__Equal.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.js +10 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.js +6 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualColumn.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualColumn.js +6 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__EqualColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThan.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThan.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThan.js +14 -18
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThan.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.js +6 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.js +14 -18
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.js +6 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNotNull.d.ts +6 -4
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNotNull.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNotNull.js +15 -15
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNotNull.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNull.d.ts +6 -4
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNull.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNull.js +10 -15
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__IsNull.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThan.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThan.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThan.js +14 -18
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThan.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanColumn.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanColumn.js +6 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.js +14 -18
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.js +6 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotContain.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotContain.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotContain.js +14 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotContain.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEndWith.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEndWith.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEndWith.js +14 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEndWith.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqual.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqual.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqual.js +19 -19
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqual.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.js +14 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.js +10 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.js +10 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotStartWith.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotStartWith.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotStartWith.js +14 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__NotStartWith.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWith.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWith.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWith.js +10 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWith.js.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.d.ts +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.d.ts.map +1 -1
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.js +10 -14
- package/lib/stores/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.js.map +1 -1
- package/lib/stores/core/model/DataCubeConfiguration.d.ts +2 -0
- package/lib/stores/core/model/DataCubeConfiguration.d.ts.map +1 -1
- package/lib/stores/core/model/DataCubeConfiguration.js +3 -1
- package/lib/stores/core/model/DataCubeConfiguration.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/lib/stores/view/editor/DataCubeEditorColumnPropertiesPanelState.js +2 -2
- package/lib/stores/view/editor/DataCubeEditorColumnPropertiesPanelState.js.map +1 -1
- package/lib/stores/view/extend/DataCubeColumnEditorState.d.ts.map +1 -1
- package/lib/stores/view/extend/DataCubeColumnEditorState.js +3 -6
- package/lib/stores/view/extend/DataCubeColumnEditorState.js.map +1 -1
- package/lib/stores/view/filter/DataCubeFilterEditorState.d.ts.map +1 -1
- package/lib/stores/view/filter/DataCubeFilterEditorState.js +3 -3
- package/lib/stores/view/filter/DataCubeFilterEditorState.js.map +1 -1
- package/lib/stores/view/grid/DataCubeGridClientEngine.js +1 -1
- package/lib/stores/view/grid/DataCubeGridClientEngine.js.map +1 -1
- package/lib/stores/view/grid/DataCubeGridConfigurationBuilder.d.ts.map +1 -1
- package/lib/stores/view/grid/DataCubeGridConfigurationBuilder.js +5 -5
- package/lib/stores/view/grid/DataCubeGridConfigurationBuilder.js.map +1 -1
- package/lib/stores/view/grid/DataCubeGridMenuBuilder.d.ts.map +1 -1
- package/lib/stores/view/grid/DataCubeGridMenuBuilder.js +13 -5
- package/lib/stores/view/grid/DataCubeGridMenuBuilder.js.map +1 -1
- package/lib/stores/view/grid/DataCubeGridQueryBuilder.d.ts.map +1 -1
- package/lib/stores/view/grid/DataCubeGridQueryBuilder.js +8 -5
- package/lib/stores/view/grid/DataCubeGridQueryBuilder.js.map +1 -1
- package/package.json +9 -9
- package/src/components/DataCube.tsx +1 -0
- package/src/components/DataCubePlaceholder.tsx +0 -1
- package/src/components/core/DataCubeCodeCheckErrorAlert.tsx +7 -3
- package/src/components/view/extend/DataCubeColumnEditor.tsx +7 -4
- package/src/components/view/filter/DataCubeFilterEditor.tsx +10 -19
- package/src/index.tsx +1 -0
- package/src/stores/core/DataCubeQueryBuilder.ts +20 -6
- package/src/stores/core/DataCubeQueryBuilderUtils.ts +38 -33
- package/src/stores/core/DataCubeQueryEngine.ts +17 -1
- package/src/stores/core/DataCubeQuerySnapshot.ts +1 -1
- package/src/stores/core/DataCubeQuerySnapshotBuilder.ts +148 -75
- package/src/stores/core/DataCubeQuerySnapshotBuilderUtils.ts +332 -260
- package/src/stores/core/filter/DataCubeQueryFilterEditorState.ts +7 -11
- package/src/stores/core/filter/DataCubeQueryFilterOperation.ts +28 -6
- package/src/stores/core/filter/DataCubeQueryFilterOperation__Contain.tsx +13 -21
- package/src/stores/core/filter/DataCubeQueryFilterOperation__ContainCaseInsensitive.tsx +17 -21
- package/src/stores/core/filter/DataCubeQueryFilterOperation__EndWith.tsx +17 -21
- package/src/stores/core/filter/DataCubeQueryFilterOperation__EndWithCaseInsensitive.tsx +17 -21
- package/src/stores/core/filter/DataCubeQueryFilterOperation__Equal.tsx +13 -98
- package/src/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitive.tsx +17 -21
- package/src/stores/core/filter/DataCubeQueryFilterOperation__EqualCaseInsensitiveColumn.tsx +13 -19
- package/src/stores/core/filter/DataCubeQueryFilterOperation__EqualColumn.tsx +9 -19
- package/src/stores/core/filter/DataCubeQueryFilterOperation__GreaterThan.tsx +17 -21
- package/src/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanColumn.tsx +13 -19
- package/src/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqual.tsx +17 -21
- package/src/stores/core/filter/DataCubeQueryFilterOperation__GreaterThanOrEqualColumn.tsx +13 -19
- package/src/stores/core/filter/DataCubeQueryFilterOperation__IsNotNull.tsx +24 -20
- package/src/stores/core/filter/DataCubeQueryFilterOperation__IsNull.tsx +14 -20
- package/src/stores/core/filter/DataCubeQueryFilterOperation__LessThan.tsx +17 -21
- package/src/stores/core/filter/DataCubeQueryFilterOperation__LessThanColumn.tsx +13 -19
- package/src/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqual.tsx +17 -21
- package/src/stores/core/filter/DataCubeQueryFilterOperation__LessThanOrEqualColumn.tsx +13 -19
- package/src/stores/core/filter/DataCubeQueryFilterOperation__NotContain.tsx +20 -19
- package/src/stores/core/filter/DataCubeQueryFilterOperation__NotEndWith.tsx +20 -19
- package/src/stores/core/filter/DataCubeQueryFilterOperation__NotEqual.tsx +20 -19
- package/src/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitive.tsx +24 -19
- package/src/stores/core/filter/DataCubeQueryFilterOperation__NotEqualCaseInsensitiveColumn.tsx +25 -18
- package/src/stores/core/filter/DataCubeQueryFilterOperation__NotEqualColumn.tsx +21 -18
- package/src/stores/core/filter/DataCubeQueryFilterOperation__NotStartWith.tsx +24 -19
- package/src/stores/core/filter/DataCubeQueryFilterOperation__StartWith.tsx +17 -21
- package/src/stores/core/filter/DataCubeQueryFilterOperation__StartWithCaseInsensitive.tsx +17 -21
- package/src/stores/core/model/DataCubeConfiguration.ts +9 -1
- package/src/stores/view/DataCubeViewState.ts +1 -0
- package/src/stores/view/editor/DataCubeEditorColumnPropertiesPanelState.ts +2 -2
- package/src/stores/view/extend/DataCubeColumnEditorState.tsx +2 -5
- package/src/stores/view/filter/DataCubeFilterEditorState.tsx +3 -7
- package/src/stores/view/grid/DataCubeGridClientEngine.ts +1 -1
- package/src/stores/view/grid/DataCubeGridConfigurationBuilder.tsx +6 -6
- package/src/stores/view/grid/DataCubeGridMenuBuilder.tsx +14 -5
- package/src/stores/view/grid/DataCubeGridQueryBuilder.ts +9 -5
|
@@ -28,25 +28,32 @@ import {
|
|
|
28
28
|
V1_ClassInstance,
|
|
29
29
|
V1_ColSpec,
|
|
30
30
|
V1_ColSpecArray,
|
|
31
|
-
|
|
31
|
+
V1_GenericTypeInstance,
|
|
32
32
|
type V1_ValueSpecification,
|
|
33
|
-
|
|
33
|
+
V1_PrimitiveValueSpecification,
|
|
34
34
|
extractElementNameFromPath as _name,
|
|
35
35
|
matchFunctionName,
|
|
36
|
+
V1_RelationType,
|
|
37
|
+
V1_PackageableType,
|
|
38
|
+
type V1_GenericType,
|
|
36
39
|
} from '@finos/legend-graph';
|
|
37
40
|
import { type DataCubeColumn } from './model/DataCubeColumn.js';
|
|
38
41
|
import {
|
|
39
42
|
assertTrue,
|
|
40
43
|
assertType,
|
|
44
|
+
at,
|
|
41
45
|
guaranteeNonNullable,
|
|
42
46
|
guaranteeType,
|
|
47
|
+
IllegalStateError,
|
|
48
|
+
uniq,
|
|
43
49
|
UnsupportedOperationError,
|
|
44
50
|
type Clazz,
|
|
45
51
|
} from '@finos/legend-shared';
|
|
46
52
|
import {
|
|
47
53
|
DataCubeFunction,
|
|
54
|
+
DataCubeOperationAdvancedValueType,
|
|
48
55
|
DataCubeQueryFilterGroupOperator,
|
|
49
|
-
|
|
56
|
+
getDataType,
|
|
50
57
|
TREE_COLUMN_VALUE_SEPARATOR,
|
|
51
58
|
type DataCubeOperationValue,
|
|
52
59
|
} from './DataCubeQueryEngine.js';
|
|
@@ -54,7 +61,7 @@ import type {
|
|
|
54
61
|
DataCubeQuerySnapshotFilter,
|
|
55
62
|
DataCubeQuerySnapshotFilterCondition,
|
|
56
63
|
} from './DataCubeQuerySnapshot.js';
|
|
57
|
-
import {
|
|
64
|
+
import { _serializeValueSpecification } from './DataCubeQueryBuilderUtils.js';
|
|
58
65
|
import type { DataCubeQueryFilterOperation } from './filter/DataCubeQueryFilterOperation.js';
|
|
59
66
|
|
|
60
67
|
// --------------------------------- UTILITIES ---------------------------------
|
|
@@ -63,6 +70,7 @@ export function _param<T extends V1_ValueSpecification>(
|
|
|
63
70
|
func: V1_AppliedFunction,
|
|
64
71
|
paramIdx: number,
|
|
65
72
|
clazz: Clazz<T>,
|
|
73
|
+
message?: string | undefined,
|
|
66
74
|
): T {
|
|
67
75
|
assertTrue(
|
|
68
76
|
func.parameters.length >= paramIdx + 1,
|
|
@@ -71,7 +79,8 @@ export function _param<T extends V1_ValueSpecification>(
|
|
|
71
79
|
return guaranteeType(
|
|
72
80
|
func.parameters[paramIdx],
|
|
73
81
|
clazz,
|
|
74
|
-
|
|
82
|
+
message ??
|
|
83
|
+
`Can't process ${_name(func.function)}() expression: Found unexpected type for parameter at index ${paramIdx}`,
|
|
75
84
|
);
|
|
76
85
|
}
|
|
77
86
|
|
|
@@ -83,14 +92,6 @@ export function _colSpecParam(func: V1_AppliedFunction, paramIdx: number) {
|
|
|
83
92
|
);
|
|
84
93
|
}
|
|
85
94
|
|
|
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
|
-
|
|
94
95
|
export function _colSpecArrayParam(func: V1_AppliedFunction, paramIdx: number) {
|
|
95
96
|
return guaranteeType(
|
|
96
97
|
_param(func, paramIdx, V1_ClassInstance).value,
|
|
@@ -99,6 +100,15 @@ export function _colSpecArrayParam(func: V1_AppliedFunction, paramIdx: number) {
|
|
|
99
100
|
);
|
|
100
101
|
}
|
|
101
102
|
|
|
103
|
+
export function _genericTypeParam(func: V1_AppliedFunction, paramIdx: number) {
|
|
104
|
+
return _param(
|
|
105
|
+
func,
|
|
106
|
+
paramIdx,
|
|
107
|
+
V1_GenericTypeInstance,
|
|
108
|
+
`Can't process ${_name(func.function)}: Expected parameter at index ${paramIdx} to be a generic type instance`,
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
|
|
102
112
|
export function _funcMatch(
|
|
103
113
|
value: V1_ValueSpecification | undefined,
|
|
104
114
|
functionNames: string | string[],
|
|
@@ -113,11 +123,50 @@ export function _funcMatch(
|
|
|
113
123
|
value.function,
|
|
114
124
|
Array.isArray(functionNames) ? functionNames : [functionNames],
|
|
115
125
|
),
|
|
116
|
-
`Can't process function: Expected function
|
|
126
|
+
`Can't process function: Expected function to be one of [${uniq((Array.isArray(functionNames) ? functionNames : [functionNames]).map(_name)).join(', ')}]`,
|
|
117
127
|
);
|
|
118
128
|
return value;
|
|
119
129
|
}
|
|
120
130
|
|
|
131
|
+
export function _relationType(genericType: V1_GenericType) {
|
|
132
|
+
return guaranteeType(
|
|
133
|
+
genericType.typeArguments[0]?.rawType,
|
|
134
|
+
V1_RelationType,
|
|
135
|
+
`Can't process generic type: failed to extract relation type`,
|
|
136
|
+
);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export function _packageableType(genericType: V1_GenericType) {
|
|
140
|
+
return guaranteeType(
|
|
141
|
+
genericType.rawType,
|
|
142
|
+
V1_PackageableType,
|
|
143
|
+
`Can't process generic type: failed to extract packageable type`,
|
|
144
|
+
);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
export function _operationPrimitiveValue(
|
|
148
|
+
value: V1_PrimitiveValueSpecification,
|
|
149
|
+
): DataCubeOperationValue {
|
|
150
|
+
if (value instanceof V1_CString) {
|
|
151
|
+
return { value: value.value, type: PRIMITIVE_TYPE.STRING };
|
|
152
|
+
} else if (value instanceof V1_CBoolean) {
|
|
153
|
+
return { value: value.value, type: PRIMITIVE_TYPE.BOOLEAN };
|
|
154
|
+
} else if (value instanceof V1_CDecimal) {
|
|
155
|
+
return { value: value.value, type: PRIMITIVE_TYPE.DECIMAL };
|
|
156
|
+
} else if (value instanceof V1_CInteger) {
|
|
157
|
+
return { value: value.value, type: PRIMITIVE_TYPE.INTEGER };
|
|
158
|
+
} else if (value instanceof V1_CFloat) {
|
|
159
|
+
return { value: value.value, type: PRIMITIVE_TYPE.FLOAT };
|
|
160
|
+
} else if (value instanceof V1_CStrictDate) {
|
|
161
|
+
return { value: value.value, type: PRIMITIVE_TYPE.STRICTDATE };
|
|
162
|
+
} else if (value instanceof V1_CDateTime) {
|
|
163
|
+
return { value: value.value, type: PRIMITIVE_TYPE.DATETIME };
|
|
164
|
+
} else if (value instanceof V1_CStrictTime) {
|
|
165
|
+
return { value: value.value, type: PRIMITIVE_TYPE.STRICTTIME };
|
|
166
|
+
}
|
|
167
|
+
throw new UnsupportedOperationError(`Can't process primitive value`);
|
|
168
|
+
}
|
|
169
|
+
|
|
121
170
|
// --------------------------------- BUILDING BLOCKS ---------------------------------
|
|
122
171
|
|
|
123
172
|
/**
|
|
@@ -154,283 +203,306 @@ export function _pruneExpandedPaths(
|
|
|
154
203
|
.sort();
|
|
155
204
|
}
|
|
156
205
|
|
|
157
|
-
export function
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
case DataCubeQueryFilterGroupOperator.OR:
|
|
167
|
-
case DataCubeQueryFilterGroupOperator.AND:
|
|
168
|
-
filterSnapshot.groupOperator = vs.function;
|
|
169
|
-
break;
|
|
170
|
-
default:
|
|
171
|
-
filterSnapshot.groupOperator = DataCubeQueryFilterGroupOperator.AND;
|
|
206
|
+
export function _extractExtendedColumns(func: V1_AppliedFunction) {
|
|
207
|
+
const extendFuncs: V1_AppliedFunction[] = [];
|
|
208
|
+
let currentFunc = func;
|
|
209
|
+
|
|
210
|
+
while (currentFunc instanceof V1_AppliedFunction) {
|
|
211
|
+
// since we are processing a chain of extend(), we can finish processing when
|
|
212
|
+
// encountering a different function.
|
|
213
|
+
if (!matchFunctionName(currentFunc.function, DataCubeFunction.EXTEND)) {
|
|
214
|
+
break;
|
|
172
215
|
}
|
|
173
216
|
|
|
174
|
-
if (
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
217
|
+
if (currentFunc.parameters.length === 2) {
|
|
218
|
+
const valueSpecification = currentFunc.parameters[0];
|
|
219
|
+
if (!(valueSpecification instanceof V1_AppliedFunction)) {
|
|
220
|
+
throw new IllegalStateError(
|
|
221
|
+
`Can't process extend() expression: Expected a chain of function calls (e.g. x()->y()->z())`,
|
|
222
|
+
);
|
|
223
|
+
} else {
|
|
224
|
+
currentFunc.parameters = currentFunc.parameters.slice(1);
|
|
225
|
+
extendFuncs.unshift(currentFunc);
|
|
226
|
+
currentFunc = valueSpecification;
|
|
227
|
+
}
|
|
181
228
|
} else {
|
|
182
|
-
|
|
229
|
+
assertTrue(
|
|
230
|
+
currentFunc.parameters.length === 1,
|
|
231
|
+
`Can't process extend() expression: Expected 1 parameter, got ${currentFunc.parameters.length}`,
|
|
232
|
+
);
|
|
233
|
+
extendFuncs.unshift(currentFunc);
|
|
234
|
+
break;
|
|
183
235
|
}
|
|
184
236
|
}
|
|
185
|
-
|
|
186
|
-
|
|
237
|
+
return extendFuncs.map((extendFunc) => {
|
|
238
|
+
const colSpecs = _colSpecArrayParam(extendFunc, 0).colSpecs;
|
|
239
|
+
assertTrue(
|
|
240
|
+
colSpecs.length === 1,
|
|
241
|
+
`Can't process extend() expression: Expected 1 column specification, got ${colSpecs.length}`,
|
|
242
|
+
);
|
|
243
|
+
const colSpec = at(colSpecs, 0);
|
|
244
|
+
return {
|
|
245
|
+
name: colSpec.name,
|
|
246
|
+
type: '', // NOTE: we don't have type information for extended columns at this point
|
|
247
|
+
mapFn: _serializeValueSpecification(
|
|
248
|
+
guaranteeNonNullable(
|
|
249
|
+
colSpec.function1,
|
|
250
|
+
`Can't process extend() expression: Expected a transformation function expression`,
|
|
251
|
+
),
|
|
252
|
+
),
|
|
253
|
+
reduceFn: colSpec.function2
|
|
254
|
+
? _serializeValueSpecification(colSpec.function2)
|
|
255
|
+
: undefined,
|
|
256
|
+
};
|
|
257
|
+
});
|
|
187
258
|
}
|
|
188
259
|
|
|
189
|
-
function
|
|
190
|
-
|
|
260
|
+
export function _filter(
|
|
261
|
+
value: V1_ValueSpecification,
|
|
262
|
+
columnGetter: (name: string) => DataCubeColumn,
|
|
191
263
|
filterOperations: DataCubeQueryFilterOperation[],
|
|
192
|
-
):
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
264
|
+
): DataCubeQuerySnapshotFilter {
|
|
265
|
+
if (!(value instanceof V1_AppliedFunction)) {
|
|
266
|
+
throw new Error(
|
|
267
|
+
`Can't process filter() expression: Expected a function expression`,
|
|
268
|
+
);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
const group: DataCubeQuerySnapshotFilter = {
|
|
272
|
+
// default to AND group for case where there is only one condition
|
|
273
|
+
groupOperator: DataCubeQueryFilterGroupOperator.AND,
|
|
274
|
+
conditions: [],
|
|
275
|
+
};
|
|
276
|
+
|
|
277
|
+
if (matchFunctionName(value.function, DataCubeFunction.AND)) {
|
|
278
|
+
value.parameters.forEach((param) => {
|
|
279
|
+
group.conditions.push(
|
|
280
|
+
_filterCondition(param, columnGetter, filterOperations),
|
|
208
281
|
);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
|
|
282
|
+
});
|
|
283
|
+
} else if (matchFunctionName(value.function, DataCubeFunction.OR)) {
|
|
284
|
+
group.groupOperator = DataCubeQueryFilterGroupOperator.OR;
|
|
285
|
+
value.parameters.forEach((param) => {
|
|
286
|
+
group.conditions.push(
|
|
287
|
+
_filterCondition(param, columnGetter, filterOperations),
|
|
212
288
|
);
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
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
|
-
}
|
|
289
|
+
});
|
|
290
|
+
} else {
|
|
291
|
+
// handles the case where the root is a simple condition or a NOT condition
|
|
292
|
+
group.conditions.push(
|
|
293
|
+
_filterCondition(value, columnGetter, filterOperations),
|
|
294
|
+
);
|
|
230
295
|
}
|
|
231
|
-
return
|
|
296
|
+
return group;
|
|
232
297
|
}
|
|
233
298
|
|
|
234
|
-
function
|
|
235
|
-
|
|
236
|
-
)
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
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
|
-
}
|
|
299
|
+
export function _unwrapNotFilterCondition(func: V1_AppliedFunction) {
|
|
300
|
+
assertTrue(
|
|
301
|
+
matchFunctionName(func.function, DataCubeFunction.NOT),
|
|
302
|
+
`Can't process filter condition expression: failed to unwrap not() function`,
|
|
303
|
+
);
|
|
304
|
+
assertTrue(
|
|
305
|
+
func.parameters.length === 1,
|
|
306
|
+
`Can't process not() function: Expected 1 parameter`,
|
|
307
|
+
);
|
|
308
|
+
return _param(func, 0, V1_AppliedFunction);
|
|
283
309
|
}
|
|
284
310
|
|
|
285
|
-
function
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
311
|
+
function _filterCondition(
|
|
312
|
+
value: V1_ValueSpecification,
|
|
313
|
+
columnGetter: (name: string) => DataCubeColumn,
|
|
314
|
+
filterOperations: DataCubeQueryFilterOperation[],
|
|
315
|
+
): DataCubeQuerySnapshotFilterCondition | DataCubeQuerySnapshotFilter {
|
|
316
|
+
if (!(value instanceof V1_AppliedFunction)) {
|
|
317
|
+
throw new UnsupportedOperationError(
|
|
318
|
+
`Can't process filter condition expression: Expected a function expression`,
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
// handle group condition
|
|
289
323
|
if (
|
|
290
|
-
|
|
291
|
-
|
|
324
|
+
matchFunctionName(value.function, [
|
|
325
|
+
DataCubeFunction.AND,
|
|
326
|
+
DataCubeFunction.OR,
|
|
327
|
+
])
|
|
292
328
|
) {
|
|
293
|
-
|
|
294
|
-
af.parameters[0].parameters[0]!,
|
|
295
|
-
af.parameters[1].parameters[0]!,
|
|
296
|
-
];
|
|
329
|
+
return _filter(value, columnGetter, filterOperations);
|
|
297
330
|
}
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
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;
|
|
331
|
+
|
|
332
|
+
// run through the list of supported filter operations to find the one that can process the condition
|
|
333
|
+
for (const filterOperation of filterOperations) {
|
|
334
|
+
const condition = filterOperation.buildConditionSnapshot(
|
|
335
|
+
value,
|
|
336
|
+
columnGetter,
|
|
337
|
+
);
|
|
338
|
+
if (condition) {
|
|
339
|
+
return condition;
|
|
320
340
|
}
|
|
321
341
|
}
|
|
322
|
-
}
|
|
323
342
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
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
|
-
];
|
|
343
|
+
// if no match found, proceed to unwrap if it's a NOT condition
|
|
344
|
+
if (matchFunctionName(value.function, DataCubeFunction.NOT)) {
|
|
345
|
+
// run through the list of supported filter operations to find the one that can process the condition
|
|
346
|
+
// again. Processing in this order ensures cases like x != y can be recognized as NOT_EQUAL operator
|
|
347
|
+
// instead of NOT(x == y)
|
|
348
|
+
const unwrapped = _unwrapNotFilterCondition(value);
|
|
349
|
+
for (const filterOperation of filterOperations) {
|
|
350
|
+
const condition = filterOperation.buildConditionSnapshot(
|
|
351
|
+
unwrapped,
|
|
352
|
+
columnGetter,
|
|
353
|
+
);
|
|
354
|
+
if (condition) {
|
|
355
|
+
condition.not = true;
|
|
356
|
+
return condition;
|
|
357
357
|
}
|
|
358
|
-
return [func, DataCubeQueryFilterOperator.NOT_EQUAL_CASE_INSENSITIVE];
|
|
359
358
|
}
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
default:
|
|
373
|
-
return undefined;
|
|
359
|
+
|
|
360
|
+
// if no match found, try to see if the condition is a group condition and process
|
|
361
|
+
if (
|
|
362
|
+
unwrapped instanceof V1_AppliedFunction &&
|
|
363
|
+
matchFunctionName(unwrapped.function, [
|
|
364
|
+
DataCubeFunction.AND,
|
|
365
|
+
DataCubeFunction.OR,
|
|
366
|
+
])
|
|
367
|
+
) {
|
|
368
|
+
const condition = _filter(unwrapped, columnGetter, filterOperations);
|
|
369
|
+
condition.not = true;
|
|
370
|
+
return condition;
|
|
374
371
|
}
|
|
375
372
|
}
|
|
376
|
-
|
|
373
|
+
|
|
374
|
+
// if no match found, throw error, we encountered a filter condition form that we don't support
|
|
375
|
+
throw new Error(`Can't process filter condition: no matching operator found`);
|
|
377
376
|
}
|
|
378
377
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
default:
|
|
400
|
-
throw new UnsupportedOperationError(
|
|
401
|
-
`Unsupported primitive value '${vs}'`,
|
|
402
|
-
);
|
|
378
|
+
function _filterConditionValue(
|
|
379
|
+
value: V1_ValueSpecification | undefined,
|
|
380
|
+
column: DataCubeColumn,
|
|
381
|
+
columnGetter: (name: string) => DataCubeColumn,
|
|
382
|
+
) {
|
|
383
|
+
if (value instanceof V1_PrimitiveValueSpecification) {
|
|
384
|
+
return _operationPrimitiveValue(value);
|
|
385
|
+
} else if (value instanceof V1_AppliedProperty) {
|
|
386
|
+
const column2 = columnGetter(value.property);
|
|
387
|
+
if (getDataType(column.type) !== getDataType(column2.type)) {
|
|
388
|
+
return undefined;
|
|
389
|
+
}
|
|
390
|
+
return {
|
|
391
|
+
value: column2.name,
|
|
392
|
+
type: DataCubeOperationAdvancedValueType.COLUMN,
|
|
393
|
+
};
|
|
394
|
+
} else if (value === undefined) {
|
|
395
|
+
return {
|
|
396
|
+
type: DataCubeOperationAdvancedValueType.VOID,
|
|
397
|
+
};
|
|
403
398
|
}
|
|
404
|
-
}
|
|
405
399
|
|
|
406
|
-
|
|
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);
|
|
400
|
+
return undefined;
|
|
415
401
|
}
|
|
416
402
|
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
403
|
+
/**
|
|
404
|
+
* Processes filter conditions of form: column | operator | value, e.g.
|
|
405
|
+
* $x.Age > 5
|
|
406
|
+
* $x.Name == 'abc'
|
|
407
|
+
* $x.Name->startsWith('abc')
|
|
408
|
+
* $x.Age > $x.Age2
|
|
409
|
+
* $x.Name == $x.Name2
|
|
410
|
+
*/
|
|
411
|
+
export function _baseFilterCondition(
|
|
412
|
+
expression: V1_AppliedFunction,
|
|
413
|
+
columnGetter: (name: string) => DataCubeColumn,
|
|
414
|
+
func: string,
|
|
415
|
+
) {
|
|
416
|
+
if (matchFunctionName(expression.function, func)) {
|
|
417
|
+
if (
|
|
418
|
+
expression.parameters.length !== 2 &&
|
|
419
|
+
expression.parameters.length !== 1
|
|
420
|
+
) {
|
|
421
|
+
return undefined;
|
|
422
|
+
}
|
|
423
|
+
|
|
424
|
+
const column =
|
|
425
|
+
expression.parameters[0] instanceof V1_AppliedProperty
|
|
426
|
+
? columnGetter(expression.parameters[0].property)
|
|
427
|
+
: undefined;
|
|
428
|
+
if (!column) {
|
|
429
|
+
return undefined;
|
|
430
|
+
}
|
|
431
|
+
|
|
432
|
+
const value = _filterConditionValue(
|
|
433
|
+
expression.parameters[1],
|
|
434
|
+
column,
|
|
435
|
+
columnGetter,
|
|
436
|
+
);
|
|
437
|
+
if (!value) {
|
|
438
|
+
return undefined;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
return {
|
|
442
|
+
column,
|
|
443
|
+
value,
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
return undefined;
|
|
425
447
|
}
|
|
426
448
|
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
)
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
449
|
+
/**
|
|
450
|
+
* Processes filter conditions of form: column (case-insensitive) | operator | value (case-insensitive), e.g.
|
|
451
|
+
* $x.Name->toLower() == 'abc'->toLower()
|
|
452
|
+
* $x.Name->toLower() == $x.Name2->toLower()
|
|
453
|
+
*/
|
|
454
|
+
export function _caseSensitiveBaseFilterCondition(
|
|
455
|
+
expression: V1_AppliedFunction,
|
|
456
|
+
columnGetter: (name: string) => DataCubeColumn,
|
|
457
|
+
func: string,
|
|
458
|
+
) {
|
|
459
|
+
if (matchFunctionName(expression.function, func)) {
|
|
460
|
+
if (expression.parameters.length !== 2) {
|
|
461
|
+
return undefined;
|
|
462
|
+
}
|
|
463
|
+
|
|
464
|
+
const param1 = expression.parameters[0];
|
|
465
|
+
if (
|
|
466
|
+
!(param1 instanceof V1_AppliedFunction) ||
|
|
467
|
+
!matchFunctionName(param1.function, DataCubeFunction.TO_LOWERCASE)
|
|
468
|
+
) {
|
|
469
|
+
return undefined;
|
|
470
|
+
}
|
|
471
|
+
if (param1.parameters.length !== 1) {
|
|
472
|
+
return undefined;
|
|
473
|
+
}
|
|
474
|
+
const column =
|
|
475
|
+
param1.parameters[0] instanceof V1_AppliedProperty
|
|
476
|
+
? columnGetter(param1.parameters[0].property)
|
|
477
|
+
: undefined;
|
|
478
|
+
if (!column) {
|
|
479
|
+
return undefined;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
const param2 = expression.parameters[1];
|
|
483
|
+
if (
|
|
484
|
+
!(param2 instanceof V1_AppliedFunction) ||
|
|
485
|
+
!matchFunctionName(param2.function, DataCubeFunction.TO_LOWERCASE)
|
|
486
|
+
) {
|
|
487
|
+
return undefined;
|
|
488
|
+
}
|
|
489
|
+
if (param2.parameters.length !== 1) {
|
|
490
|
+
return undefined;
|
|
491
|
+
}
|
|
492
|
+
const value = _filterConditionValue(
|
|
493
|
+
param2.parameters[0],
|
|
494
|
+
column,
|
|
495
|
+
columnGetter,
|
|
496
|
+
);
|
|
497
|
+
|
|
498
|
+
if (!value) {
|
|
499
|
+
return undefined;
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
return {
|
|
503
|
+
column,
|
|
504
|
+
value,
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
return undefined;
|
|
436
508
|
}
|