@finos/legend-application-query 5.0.0 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/components/QueryBuilderExplorerPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderExplorerPanel.js +3 -1
- package/lib/components/QueryBuilderExplorerPanel.js.map +1 -1
- package/lib/components/QueryBuilderFetchStructurePanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderFetchStructurePanel.js +39 -7
- package/lib/components/QueryBuilderFetchStructurePanel.js.map +1 -1
- package/lib/components/QueryBuilderFilterPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderFilterPanel.js +59 -15
- package/lib/components/QueryBuilderFilterPanel.js.map +1 -1
- package/lib/components/QueryBuilderFunctionsExplorerPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderFunctionsExplorerPanel.js.map +1 -1
- package/lib/components/QueryBuilderParameterPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderParameterPanel.js +3 -2
- package/lib/components/QueryBuilderParameterPanel.js.map +1 -1
- package/lib/components/QueryBuilderPostFilterPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderPostFilterPanel.js +29 -7
- package/lib/components/QueryBuilderPostFilterPanel.js.map +1 -1
- package/lib/components/QueryBuilderProjectionPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderProjectionPanel.js +6 -2
- package/lib/components/QueryBuilderProjectionPanel.js.map +1 -1
- package/lib/components/QueryBuilderPropertySearchPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderPropertySearchPanel.js +3 -2
- package/lib/components/QueryBuilderPropertySearchPanel.js.map +1 -1
- package/lib/components/QueryBuilderResultPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderResultPanel.js +13 -7
- package/lib/components/QueryBuilderResultPanel.js.map +1 -1
- package/lib/components/QueryBuilderSetupPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderSetupPanel.js +5 -3
- package/lib/components/QueryBuilderSetupPanel.js.map +1 -1
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/package.json +2 -3
- package/lib/stores/QueryBuilderExplorerState.d.ts +1 -1
- package/lib/stores/QueryBuilderExplorerState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderExplorerState.js +13 -3
- package/lib/stores/QueryBuilderExplorerState.js.map +1 -1
- package/lib/stores/QueryBuilderFetchStructureState.d.ts +2 -1
- package/lib/stores/QueryBuilderFetchStructureState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderFetchStructureState.js +2 -2
- package/lib/stores/QueryBuilderFetchStructureState.js.map +1 -1
- package/lib/stores/QueryBuilderFilterState.d.ts +11 -1
- package/lib/stores/QueryBuilderFilterState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderFilterState.js +33 -2
- package/lib/stores/QueryBuilderFilterState.js.map +1 -1
- package/lib/stores/QueryBuilderOperatorLoader.d.ts +47 -0
- package/lib/stores/QueryBuilderOperatorLoader.d.ts.map +1 -0
- package/lib/stores/QueryBuilderOperatorLoader.js +94 -0
- package/lib/stores/QueryBuilderOperatorLoader.js.map +1 -0
- package/lib/stores/QueryBuilderOperatorsHelper.d.ts +1 -0
- package/lib/stores/QueryBuilderOperatorsHelper.d.ts.map +1 -1
- package/lib/stores/QueryBuilderOperatorsHelper.js +28 -1
- package/lib/stores/QueryBuilderOperatorsHelper.js.map +1 -1
- package/lib/stores/QueryBuilderPostFilterState.d.ts +5 -2
- package/lib/stores/QueryBuilderPostFilterState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderPostFilterState.js +25 -1
- package/lib/stores/QueryBuilderPostFilterState.js.map +1 -1
- package/lib/stores/QueryBuilderPreviewDataHelper.d.ts +4 -3
- package/lib/stores/QueryBuilderPreviewDataHelper.d.ts.map +1 -1
- package/lib/stores/QueryBuilderPreviewDataHelper.js +77 -97
- package/lib/stores/QueryBuilderPreviewDataHelper.js.map +1 -1
- package/lib/stores/QueryBuilderProjectionState.d.ts +4 -2
- package/lib/stores/QueryBuilderProjectionState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderProjectionState.js +24 -28
- package/lib/stores/QueryBuilderProjectionState.js.map +1 -1
- package/lib/stores/QueryBuilderPropertySearchPanelState.js +1 -1
- package/lib/stores/QueryBuilderPropertySearchPanelState.js.map +1 -1
- package/lib/stores/QueryBuilderResultState.d.ts +5 -2
- package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderResultState.js +19 -7
- package/lib/stores/QueryBuilderResultState.js.map +1 -1
- package/lib/stores/QueryBuilderState.d.ts +2 -0
- package/lib/stores/QueryBuilderState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderState.js +11 -58
- package/lib/stores/QueryBuilderState.js.map +1 -1
- package/lib/stores/QueryBuilderTestUtils.d.ts +24 -0
- package/lib/stores/QueryBuilderTestUtils.d.ts.map +1 -0
- package/lib/stores/QueryBuilderTestUtils.js +49 -0
- package/lib/stores/QueryBuilderTestUtils.js.map +1 -0
- package/lib/stores/QueryBuilderTypeaheadHelper.d.ts +24 -0
- package/lib/stores/QueryBuilderTypeaheadHelper.d.ts.map +1 -0
- package/lib/stores/QueryBuilderTypeaheadHelper.js +89 -0
- package/lib/stores/QueryBuilderTypeaheadHelper.js.map +1 -0
- package/lib/stores/QueryEditorStore.d.ts.map +1 -1
- package/lib/stores/QueryEditorStore.js +3 -7
- package/lib/stores/QueryEditorStore.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.js +5 -31
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_Equal.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.js +5 -31
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.js +5 -31
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.js +5 -32
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThan.js.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.d.ts.map +1 -1
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.js +5 -31
- package/lib/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.js.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.d.ts.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.js +3 -29
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.js.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.d.ts.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.js +4 -30
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.js.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.d.ts.map +1 -1
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.js +4 -30
- package/lib/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.js.map +1 -1
- package/package.json +9 -10
- package/src/components/QueryBuilderExplorerPanel.tsx +3 -1
- package/src/components/QueryBuilderFetchStructurePanel.tsx +47 -7
- package/src/components/QueryBuilderFilterPanel.tsx +101 -21
- package/src/components/QueryBuilderFunctionsExplorerPanel.tsx +1 -0
- package/src/components/QueryBuilderParameterPanel.tsx +3 -2
- package/src/components/QueryBuilderPostFilterPanel.tsx +53 -7
- package/src/components/QueryBuilderProjectionPanel.tsx +19 -2
- package/src/components/QueryBuilderPropertySearchPanel.tsx +2 -1
- package/src/components/QueryBuilderResultPanel.tsx +75 -46
- package/src/components/QueryBuilderSetupPanel.tsx +5 -3
- package/src/index.ts +2 -4
- package/src/stores/QueryBuilderExplorerState.ts +17 -3
- package/src/stores/QueryBuilderFetchStructureState.ts +9 -2
- package/src/stores/QueryBuilderFilterState.ts +50 -0
- package/src/stores/QueryBuilderOperatorLoader.ts +133 -0
- package/src/stores/QueryBuilderOperatorsHelper.ts +35 -0
- package/src/stores/QueryBuilderPostFilterState.ts +40 -1
- package/src/stores/QueryBuilderPreviewDataHelper.ts +122 -217
- package/src/stores/QueryBuilderProjectionState.ts +40 -42
- package/src/stores/QueryBuilderPropertySearchPanelState.ts +1 -1
- package/src/stores/QueryBuilderResultState.ts +27 -9
- package/src/stores/QueryBuilderState.ts +27 -94
- package/src/stores/QueryBuilderTestUtils.ts +93 -0
- package/src/stores/QueryBuilderTypeaheadHelper.ts +149 -0
- package/src/stores/QueryEditorStore.ts +11 -12
- package/src/stores/filterOperators/QueryBuilderFilterOperator_Equal.ts +6 -35
- package/src/stores/filterOperators/QueryBuilderFilterOperator_GreaterThan.ts +9 -35
- package/src/stores/filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.ts +9 -35
- package/src/stores/filterOperators/QueryBuilderFilterOperator_LessThan.ts +9 -36
- package/src/stores/filterOperators/QueryBuilderFilterOperator_LessThanEqual.ts +9 -35
- package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_Equal.ts +6 -33
- package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.ts +11 -36
- package/src/stores/postFilterOperators/QueryBuilderPostFilterOperator_LessThan.ts +11 -36
- package/tsconfig.json +3 -0
@@ -0,0 +1,133 @@
|
|
1
|
+
/**
|
2
|
+
* Copyright (c) 2020-present, Goldman Sachs
|
3
|
+
*
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
* you may not use this file except in compliance with the License.
|
6
|
+
* You may obtain a copy of the License at
|
7
|
+
*
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
*
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
* See the License for the specific language governing permissions and
|
14
|
+
* limitations under the License.
|
15
|
+
*/
|
16
|
+
|
17
|
+
import { QueryBuilderAggregateOperator_Count } from './aggregateOperators/QueryBuilderAggregateOperator_Count.js';
|
18
|
+
import { QueryBuilderAggregateOperator_Distinct } from './aggregateOperators/QueryBuilderAggregateOperator_Distinct.js';
|
19
|
+
import { QueryBuilderAggregateOperator_Sum } from './aggregateOperators/QueryBuilderAggregateOperator_Sum.js';
|
20
|
+
import { QueryBuilderAggregateOperator_Average } from './aggregateOperators/QueryBuilderAggregateOperator_Average.js';
|
21
|
+
import { QueryBuilderAggregateOperator_StdDev_Population } from './aggregateOperators/QueryBuilderAggregateOperator_StdDev_Population.js';
|
22
|
+
import { QueryBuilderAggregateOperator_StdDev_Sample } from './aggregateOperators/QueryBuilderAggregateOperator_StdDev_Sample.js';
|
23
|
+
import { QueryBuilderAggregateOperator_DistinctCount } from './aggregateOperators/QueryBuilderAggregateOperator_DistinctCount.js';
|
24
|
+
import { QueryBuilderAggregateOperator_Min } from './aggregateOperators/QueryBuilderAggregateOperator_Min.js';
|
25
|
+
import { QueryBuilderAggregateOperator_Max } from './aggregateOperators/QueryBuilderAggregateOperator_Max.js';
|
26
|
+
import { QueryBuilderAggregateOperator_JoinString } from './aggregateOperators/QueryBuilderAggregateOperator_JoinString.js';
|
27
|
+
import {
|
28
|
+
QueryBuilderFilterOperator_Equal,
|
29
|
+
QueryBuilderFilterOperator_NotEqual,
|
30
|
+
} from './filterOperators/QueryBuilderFilterOperator_Equal.js';
|
31
|
+
import { QueryBuilderFilterOperator_GreaterThan } from './filterOperators/QueryBuilderFilterOperator_GreaterThan.js';
|
32
|
+
import {
|
33
|
+
QueryBuilderFilterOperator_NotStartWith,
|
34
|
+
QueryBuilderFilterOperator_StartWith,
|
35
|
+
} from './filterOperators/QueryBuilderFilterOperator_StartWith.js';
|
36
|
+
import { QueryBuilderFilterOperator_GreaterThanEqual } from './filterOperators/QueryBuilderFilterOperator_GreaterThanEqual.js';
|
37
|
+
import { QueryBuilderFilterOperator_LessThanEqual } from './filterOperators/QueryBuilderFilterOperator_LessThanEqual.js';
|
38
|
+
import { QueryBuilderFilterOperator_LessThan } from './filterOperators/QueryBuilderFilterOperator_LessThan.js';
|
39
|
+
import {
|
40
|
+
QueryBuilderFilterOperator_EndWith,
|
41
|
+
QueryBuilderFilterOperator_NotEndWith,
|
42
|
+
} from './filterOperators/QueryBuilderFilterOperator_EndWith.js';
|
43
|
+
import {
|
44
|
+
QueryBuilderFilterOperator_Contain,
|
45
|
+
QueryBuilderFilterOperator_NotContain,
|
46
|
+
} from './filterOperators/QueryBuilderFilterOperator_Contain.js';
|
47
|
+
import {
|
48
|
+
QueryBuilderFilterOperator_IsEmpty,
|
49
|
+
QueryBuilderFilterOperator_IsNotEmpty,
|
50
|
+
} from './filterOperators/QueryBuilderFilterOperator_IsEmpty.js';
|
51
|
+
import {
|
52
|
+
QueryBuilderFilterOperator_In,
|
53
|
+
QueryBuilderFilterOperator_NotIn,
|
54
|
+
} from './filterOperators/QueryBuilderFilterOperator_In.js';
|
55
|
+
import {
|
56
|
+
QueryBuilderPostFilterOperator_In,
|
57
|
+
QueryBuilderPostFilterOperator_NotIn,
|
58
|
+
} from './postFilterOperators/QueryBuilderPostFilterOperator_In.js';
|
59
|
+
import {
|
60
|
+
QueryBuilderPostFilterOperator_IsEmpty,
|
61
|
+
QueryBuilderPostFilterOperator_IsNotEmpty,
|
62
|
+
} from './postFilterOperators/QueryBuilderPostFilterOperator_IsEmpty.js';
|
63
|
+
import {
|
64
|
+
QueryBuilderPostFilterOperator_Equal,
|
65
|
+
QueryBuilderPostFilterOperator_NotEqual,
|
66
|
+
} from './postFilterOperators/QueryBuilderPostFilterOperator_Equal.js';
|
67
|
+
import { QueryBuilderPostFilterOperator_LessThan } from './postFilterOperators/QueryBuilderPostFilterOperator_LessThan.js';
|
68
|
+
import { QueryBuilderPostFilterOperator_LessThanEqual } from './postFilterOperators/QueryBuilderPostFilterOperator_LessThanEqual.js';
|
69
|
+
import { QueryBuilderPostFilterOperator_GreaterThan } from './postFilterOperators/QueryBuilderPostFilterOperator_GreaterThan.js';
|
70
|
+
import { QueryBuilderPostFilterOperator_GreaterThanEqual } from './postFilterOperators/QueryBuilderPostFilterOperator_GreaterThanEqual.js';
|
71
|
+
import {
|
72
|
+
QueryBuilderPostFilterOperator_NotStartWith,
|
73
|
+
QueryBuilderPostFilterOperator_StartWith,
|
74
|
+
} from './postFilterOperators/QueryBuilderPostFilterOperator_StartWith.js';
|
75
|
+
import {
|
76
|
+
QueryBuilderPostFilterOperator_Contain,
|
77
|
+
QueryBuilderPostFilterOperator_NotContain,
|
78
|
+
} from './postFilterOperators/QueryBuilderPostFilterOperator_Contain.js';
|
79
|
+
import {
|
80
|
+
QueryBuilderPostFilterOperator_EndWith,
|
81
|
+
QueryBuilderPostFilterOperator_NotEndWith,
|
82
|
+
} from './postFilterOperators/QueryBuilderPostFilterOperator_EndWith.js';
|
83
|
+
|
84
|
+
export const AGGREGATION_OPERATORS = [
|
85
|
+
new QueryBuilderAggregateOperator_Count(),
|
86
|
+
new QueryBuilderAggregateOperator_DistinctCount(),
|
87
|
+
new QueryBuilderAggregateOperator_Distinct(),
|
88
|
+
new QueryBuilderAggregateOperator_Sum(),
|
89
|
+
new QueryBuilderAggregateOperator_Average(),
|
90
|
+
new QueryBuilderAggregateOperator_Min(),
|
91
|
+
new QueryBuilderAggregateOperator_Max(),
|
92
|
+
new QueryBuilderAggregateOperator_StdDev_Population(),
|
93
|
+
new QueryBuilderAggregateOperator_StdDev_Sample(),
|
94
|
+
new QueryBuilderAggregateOperator_JoinString(),
|
95
|
+
];
|
96
|
+
|
97
|
+
export const FILTER_OPERATORS = [
|
98
|
+
new QueryBuilderFilterOperator_Equal(),
|
99
|
+
new QueryBuilderFilterOperator_NotEqual(),
|
100
|
+
new QueryBuilderFilterOperator_LessThan(),
|
101
|
+
new QueryBuilderFilterOperator_LessThanEqual(),
|
102
|
+
new QueryBuilderFilterOperator_GreaterThan(),
|
103
|
+
new QueryBuilderFilterOperator_GreaterThanEqual(),
|
104
|
+
new QueryBuilderFilterOperator_StartWith(),
|
105
|
+
new QueryBuilderFilterOperator_NotStartWith(),
|
106
|
+
new QueryBuilderFilterOperator_Contain(),
|
107
|
+
new QueryBuilderFilterOperator_NotContain(),
|
108
|
+
new QueryBuilderFilterOperator_EndWith(),
|
109
|
+
new QueryBuilderFilterOperator_NotEndWith(),
|
110
|
+
new QueryBuilderFilterOperator_In(),
|
111
|
+
new QueryBuilderFilterOperator_NotIn(),
|
112
|
+
new QueryBuilderFilterOperator_IsEmpty(),
|
113
|
+
new QueryBuilderFilterOperator_IsNotEmpty(),
|
114
|
+
];
|
115
|
+
|
116
|
+
export const POST_FILTER_OPERATORS = [
|
117
|
+
new QueryBuilderPostFilterOperator_Equal(),
|
118
|
+
new QueryBuilderPostFilterOperator_NotEqual(),
|
119
|
+
new QueryBuilderPostFilterOperator_LessThan(),
|
120
|
+
new QueryBuilderPostFilterOperator_LessThanEqual(),
|
121
|
+
new QueryBuilderPostFilterOperator_GreaterThan(),
|
122
|
+
new QueryBuilderPostFilterOperator_GreaterThanEqual(),
|
123
|
+
new QueryBuilderPostFilterOperator_StartWith(),
|
124
|
+
new QueryBuilderPostFilterOperator_NotStartWith(),
|
125
|
+
new QueryBuilderPostFilterOperator_Contain(),
|
126
|
+
new QueryBuilderPostFilterOperator_NotContain(),
|
127
|
+
new QueryBuilderPostFilterOperator_EndWith(),
|
128
|
+
new QueryBuilderPostFilterOperator_NotEndWith(),
|
129
|
+
new QueryBuilderPostFilterOperator_In(),
|
130
|
+
new QueryBuilderPostFilterOperator_NotIn(),
|
131
|
+
new QueryBuilderPostFilterOperator_IsEmpty(),
|
132
|
+
new QueryBuilderPostFilterOperator_IsNotEmpty(),
|
133
|
+
];
|
@@ -29,6 +29,7 @@ import {
|
|
29
29
|
EnumValueInstanceValue,
|
30
30
|
VariableExpression,
|
31
31
|
AbstractPropertyExpression,
|
32
|
+
isSuperType,
|
32
33
|
} from '@finos/legend-graph';
|
33
34
|
import {
|
34
35
|
addUniqueEntry,
|
@@ -189,3 +190,37 @@ export const isPropertyExpressionChainOptional = (
|
|
189
190
|
}
|
190
191
|
return isOptional;
|
191
192
|
};
|
193
|
+
|
194
|
+
export const isTypeCompatibleWithConditionValueType = (
|
195
|
+
type: Type | undefined,
|
196
|
+
conditionValueType: Type,
|
197
|
+
): boolean => {
|
198
|
+
const NUMERIC_PRIMITIVE_TYPES = [
|
199
|
+
PRIMITIVE_TYPE.NUMBER,
|
200
|
+
PRIMITIVE_TYPE.INTEGER,
|
201
|
+
PRIMITIVE_TYPE.DECIMAL,
|
202
|
+
PRIMITIVE_TYPE.FLOAT,
|
203
|
+
] as string[];
|
204
|
+
const DATE_PRIMITIVE_TYPES = [
|
205
|
+
PRIMITIVE_TYPE.DATE,
|
206
|
+
PRIMITIVE_TYPE.DATETIME,
|
207
|
+
PRIMITIVE_TYPE.STRICTDATE,
|
208
|
+
PRIMITIVE_TYPE.LATESTDATE,
|
209
|
+
] as string[];
|
210
|
+
|
211
|
+
// When changing the return type for LHS, the RHS value should be adjusted accordingly.
|
212
|
+
return (
|
213
|
+
type !== undefined &&
|
214
|
+
// Numeric value is handled loosely because of autoboxing
|
215
|
+
// e.g. LHS (integer) = RHS (float) is acceptable
|
216
|
+
((NUMERIC_PRIMITIVE_TYPES.includes(type.path) &&
|
217
|
+
NUMERIC_PRIMITIVE_TYPES.includes(conditionValueType.path)) ||
|
218
|
+
// Date value is handled loosely as well if the LHS is of type DateTime
|
219
|
+
// This is because we would simulate auto-boxing for date by altering the
|
220
|
+
// Pure function used for the operation
|
221
|
+
// e.g. LHS(DateTime) = RHS(Date) -> we use isOnDay() instead of is()
|
222
|
+
DATE_PRIMITIVE_TYPES.includes(type.path) ||
|
223
|
+
type === conditionValueType ||
|
224
|
+
isSuperType(conditionValueType, type))
|
225
|
+
);
|
226
|
+
};
|
@@ -19,6 +19,7 @@ import {
|
|
19
19
|
type PureModel,
|
20
20
|
type Type,
|
21
21
|
type ValueSpecification,
|
22
|
+
type ExecutionResult,
|
22
23
|
Enumeration,
|
23
24
|
PRIMITIVE_TYPE,
|
24
25
|
observe_ValueSpecification,
|
@@ -36,6 +37,7 @@ import {
|
|
36
37
|
UnsupportedOperationError,
|
37
38
|
uuid,
|
38
39
|
filterByType,
|
40
|
+
ActionState,
|
39
41
|
} from '@finos/legend-shared';
|
40
42
|
import {
|
41
43
|
action,
|
@@ -51,11 +53,16 @@ import type { QueryBuilderAggregateColumnState } from './QueryBuilderAggregation
|
|
51
53
|
import { QUERY_BUILDER_GROUP_OPERATION } from './QueryBuilderOperatorsHelper.js';
|
52
54
|
import type { QueryBuilderPostFilterOperator } from './QueryBuilderPostFilterOperator.js';
|
53
55
|
import {
|
54
|
-
type QueryBuilderProjectionColumnDragSource,
|
55
56
|
type QueryBuilderProjectionColumnState,
|
57
|
+
type QueryBuilderProjectionColumnDragSource,
|
56
58
|
QueryBuilderDerivationProjectionColumnState,
|
57
59
|
} from './QueryBuilderProjectionState.js';
|
58
60
|
import type { QueryBuilderState } from './QueryBuilderState.js';
|
61
|
+
import {
|
62
|
+
buildProjectionColumnTypeAheadQuery,
|
63
|
+
buildTypeAheadOptions,
|
64
|
+
performTypeAhead,
|
65
|
+
} from './QueryBuilderTypeaheadHelper.js';
|
59
66
|
|
60
67
|
export enum QUERY_BUILDER_POST_FILTER_DND_TYPE {
|
61
68
|
GROUP_CONDITION = 'GROUP_CONDITION',
|
@@ -262,6 +269,8 @@ export class PostFilterConditionState {
|
|
262
269
|
| QueryBuilderAggregateColumnState;
|
263
270
|
value?: ValueSpecification | undefined;
|
264
271
|
operator: QueryBuilderPostFilterOperator;
|
272
|
+
typeaheadSearchResults: string[] | undefined;
|
273
|
+
typeaheadSearchState = ActionState.create();
|
265
274
|
|
266
275
|
constructor(
|
267
276
|
postFilterState: QueryBuilderPostFilterState,
|
@@ -273,11 +282,13 @@ export class PostFilterConditionState {
|
|
273
282
|
) {
|
274
283
|
makeAutoObservable(this, {
|
275
284
|
columnState: observable,
|
285
|
+
typeaheadSearchResults: observable,
|
276
286
|
changeOperator: action,
|
277
287
|
setColumnState: action,
|
278
288
|
setValue: action,
|
279
289
|
setOperator: action,
|
280
290
|
changeColumn: flow,
|
291
|
+
handleTypeaheadSearch: flow,
|
281
292
|
});
|
282
293
|
|
283
294
|
this.postFilterState = postFilterState;
|
@@ -304,6 +315,34 @@ export class PostFilterConditionState {
|
|
304
315
|
);
|
305
316
|
}
|
306
317
|
|
318
|
+
*handleTypeaheadSearch(): GeneratorFn<void> {
|
319
|
+
try {
|
320
|
+
this.typeaheadSearchState.inProgress();
|
321
|
+
this.typeaheadSearchResults = undefined;
|
322
|
+
if (performTypeAhead(this.value)) {
|
323
|
+
const builderState = buildProjectionColumnTypeAheadQuery(
|
324
|
+
this.postFilterState.queryBuilderState,
|
325
|
+
this.columnState,
|
326
|
+
this.value,
|
327
|
+
);
|
328
|
+
const result =
|
329
|
+
(yield builderState.graphManagerState.graphManager.executeMapping(
|
330
|
+
builderState.resultState.buildExecutionRawLambda(),
|
331
|
+
guaranteeNonNullable(builderState.querySetupState.mapping),
|
332
|
+
guaranteeNonNullable(builderState.querySetupState.runtimeValue),
|
333
|
+
builderState.graphManagerState.graph,
|
334
|
+
)) as ExecutionResult;
|
335
|
+
this.typeaheadSearchResults = buildTypeAheadOptions(result);
|
336
|
+
}
|
337
|
+
this.typeaheadSearchState.pass();
|
338
|
+
} catch (error) {
|
339
|
+
assertErrorThrown(error);
|
340
|
+
this.typeaheadSearchState.fail();
|
341
|
+
} finally {
|
342
|
+
this.typeaheadSearchState.complete();
|
343
|
+
}
|
344
|
+
}
|
345
|
+
|
307
346
|
changeOperator(val: QueryBuilderPostFilterOperator): void {
|
308
347
|
this.setOperator(val);
|
309
348
|
if (!this.operator.isCompatibleWithConditionValue(this)) {
|
@@ -14,27 +14,12 @@
|
|
14
14
|
* limitations under the License.
|
15
15
|
*/
|
16
16
|
|
17
|
-
import {
|
18
|
-
|
19
|
-
|
20
|
-
type PureModel,
|
21
|
-
GenericType,
|
22
|
-
GenericTypeExplicitReference,
|
23
|
-
PrimitiveInstanceValue,
|
24
|
-
PRIMITIVE_TYPE,
|
25
|
-
CollectionInstanceValue,
|
26
|
-
CORE_PURE_PATH,
|
27
|
-
extractElementNameFromPath,
|
28
|
-
FunctionType,
|
29
|
-
LambdaFunction,
|
30
|
-
Multiplicity,
|
31
|
-
SimpleFunctionExpression,
|
32
|
-
TYPICAL_MULTIPLICITY_TYPE,
|
17
|
+
import type {
|
18
|
+
RawLambda,
|
19
|
+
AbstractPropertyExpression,
|
33
20
|
} from '@finos/legend-graph';
|
34
|
-
import {
|
35
|
-
|
36
|
-
QUERY_BUILDER_SUPPORTED_FUNCTIONS,
|
37
|
-
} from '../QueryBuilder_Const.js';
|
21
|
+
import { guaranteeNonNullable } from '@finos/legend-shared';
|
22
|
+
import type { QueryBuilderAggregateOperator } from './QueryBuilderAggregationState.js';
|
38
23
|
import { QueryBuilderAggregateOperator_Average } from './aggregateOperators/QueryBuilderAggregateOperator_Average.js';
|
39
24
|
import { QueryBuilderAggregateOperator_Count } from './aggregateOperators/QueryBuilderAggregateOperator_Count.js';
|
40
25
|
import { QueryBuilderAggregateOperator_DistinctCount } from './aggregateOperators/QueryBuilderAggregateOperator_DistinctCount.js';
|
@@ -43,109 +28,82 @@ import { QueryBuilderAggregateOperator_Min } from './aggregateOperators/QueryBui
|
|
43
28
|
import { QueryBuilderAggregateOperator_StdDev_Population } from './aggregateOperators/QueryBuilderAggregateOperator_StdDev_Population.js';
|
44
29
|
import { QueryBuilderAggregateOperator_StdDev_Sample } from './aggregateOperators/QueryBuilderAggregateOperator_StdDev_Sample.js';
|
45
30
|
import { QueryBuilderAggregateOperator_Sum } from './aggregateOperators/QueryBuilderAggregateOperator_Sum.js';
|
46
|
-
import
|
47
|
-
import {
|
48
|
-
import {
|
31
|
+
import { QueryBuilderSimpleProjectionColumnState } from './QueryBuilderProjectionState.js';
|
32
|
+
import type { QueryBuilderState } from './QueryBuilderState.js';
|
33
|
+
import {
|
34
|
+
COLUMN_SORT_TYPE,
|
35
|
+
SortColumnState,
|
36
|
+
} from './QueryResultSetModifierState.js';
|
49
37
|
|
50
|
-
const
|
51
|
-
|
52
|
-
|
53
|
-
aggregates: [QueryBuilderAggregateOperator, string][],
|
54
|
-
includePropertyValue: boolean,
|
55
|
-
graph: PureModel,
|
56
|
-
): SimpleFunctionExpression => {
|
57
|
-
const multiplicityOne = graph.getTypicalMultiplicity(
|
58
|
-
TYPICAL_MULTIPLICITY_TYPE.ONE,
|
59
|
-
);
|
60
|
-
const typeAny = graph.getType(CORE_PURE_PATH.ANY);
|
61
|
-
const typeString = graph.getPrimitiveType(PRIMITIVE_TYPE.STRING);
|
62
|
-
const lambdaFunction = new LambdaFunction(
|
63
|
-
new FunctionType(typeAny, multiplicityOne),
|
64
|
-
);
|
38
|
+
const PREVIEW_DATA_TAKE_LIMIT = 10;
|
39
|
+
const PREVIEW_DATA_NON_NUMERIC_VALUE_COLUMN_NAME = 'Value';
|
40
|
+
const PREVIEW_DATA_NON_NUMERIC_COUNT_COLUMN_NAME = 'Count';
|
65
41
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
42
|
+
enum NUMERIC_AGG_FUNC {
|
43
|
+
COUNT = 'Count',
|
44
|
+
DISTINCT_COUNT = 'Distinct Count',
|
45
|
+
SUM = 'Sum',
|
46
|
+
MIN = 'Min',
|
47
|
+
MAX = 'Max',
|
48
|
+
AVERAGE = 'Average',
|
49
|
+
STD_DEV_POPULATION = 'Std Dev (Population)',
|
50
|
+
STD_DEV_SAMPLE = 'Std Dev (Sample)',
|
51
|
+
}
|
70
52
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
53
|
+
const NUMERIC_AGG_FUNC_TO_AGG_OP: [
|
54
|
+
NUMERIC_AGG_FUNC,
|
55
|
+
typeof QueryBuilderAggregateOperator,
|
56
|
+
][] = [
|
57
|
+
[NUMERIC_AGG_FUNC.COUNT, QueryBuilderAggregateOperator_Count],
|
58
|
+
[
|
59
|
+
NUMERIC_AGG_FUNC.DISTINCT_COUNT,
|
60
|
+
QueryBuilderAggregateOperator_DistinctCount,
|
61
|
+
],
|
62
|
+
[NUMERIC_AGG_FUNC.SUM, QueryBuilderAggregateOperator_Sum],
|
63
|
+
[NUMERIC_AGG_FUNC.MIN, QueryBuilderAggregateOperator_Min],
|
64
|
+
[NUMERIC_AGG_FUNC.MAX, QueryBuilderAggregateOperator_Max],
|
65
|
+
[NUMERIC_AGG_FUNC.AVERAGE, QueryBuilderAggregateOperator_Average],
|
66
|
+
[
|
67
|
+
NUMERIC_AGG_FUNC.STD_DEV_POPULATION,
|
68
|
+
QueryBuilderAggregateOperator_StdDev_Population,
|
69
|
+
],
|
70
|
+
[
|
71
|
+
NUMERIC_AGG_FUNC.STD_DEV_SAMPLE,
|
72
|
+
QueryBuilderAggregateOperator_StdDev_Sample,
|
73
|
+
],
|
74
|
+
];
|
85
75
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
colAliases.values.push(valueColAlias);
|
100
|
-
}
|
76
|
+
const createProjectionColumn = (
|
77
|
+
queryBuilderState: QueryBuilderState,
|
78
|
+
propertyExpression: AbstractPropertyExpression,
|
79
|
+
columnName: string,
|
80
|
+
): QueryBuilderSimpleProjectionColumnState => {
|
81
|
+
const col = new QueryBuilderSimpleProjectionColumnState(
|
82
|
+
queryBuilderState.fetchStructureState.projectionState,
|
83
|
+
propertyExpression,
|
84
|
+
false,
|
85
|
+
);
|
86
|
+
col.setColumnName(columnName);
|
87
|
+
return col;
|
88
|
+
};
|
101
89
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
DEFAULT_LAMBDA_VARIABLE_NAME,
|
110
|
-
[propertyExpression],
|
111
|
-
graph,
|
112
|
-
),
|
113
|
-
buildGenericLambdaFunctionInstanceValue(
|
114
|
-
DEFAULT_LAMBDA_VARIABLE_NAME,
|
115
|
-
[
|
116
|
-
pair[0].buildAggregateExpression(
|
117
|
-
propertyExpression,
|
118
|
-
DEFAULT_LAMBDA_VARIABLE_NAME,
|
119
|
-
graph,
|
120
|
-
),
|
121
|
-
],
|
122
|
-
graph,
|
123
|
-
),
|
124
|
-
];
|
125
|
-
aggregateLambdas.values.push(aggregateFunctionExpression);
|
90
|
+
const createQueryBuilderState = (
|
91
|
+
queryBuilderState: QueryBuilderState,
|
92
|
+
): QueryBuilderState => {
|
93
|
+
const builderState = queryBuilderState.createBareBuilderState();
|
94
|
+
builderState.querySetupState = queryBuilderState.querySetupState;
|
95
|
+
return builderState;
|
96
|
+
};
|
126
97
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
);
|
131
|
-
colAlias.values.push(pair[1]);
|
132
|
-
colAliases.values.push(colAlias);
|
133
|
-
});
|
134
|
-
groupByFunction.parametersValues = [
|
135
|
-
getAllFunction,
|
136
|
-
colLambdas,
|
137
|
-
aggregateLambdas,
|
138
|
-
colAliases,
|
139
|
-
];
|
140
|
-
lambdaFunction.expressionSequence[0] = groupByFunction;
|
141
|
-
return groupByFunction;
|
98
|
+
export type QueryBuilderPreviewData = {
|
99
|
+
columns: string[];
|
100
|
+
rows: { values: (string | number)[] }[];
|
142
101
|
};
|
143
102
|
|
144
103
|
export const buildNumericPreviewDataQuery = (
|
104
|
+
queryBuilderState: QueryBuilderState,
|
145
105
|
propertyExpression: AbstractPropertyExpression,
|
146
|
-
|
147
|
-
graph: PureModel,
|
148
|
-
): LambdaFunction => {
|
106
|
+
): RawLambda => {
|
149
107
|
// Build the following query
|
150
108
|
//
|
151
109
|
// ClassX.all()->groupBy(
|
@@ -171,44 +129,29 @@ export const buildNumericPreviewDataQuery = (
|
|
171
129
|
// 'Std Dev (Sample)'
|
172
130
|
// ]
|
173
131
|
// )
|
174
|
-
const
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
[
|
192
|
-
new QueryBuilderAggregateOperator_StdDev_Population(),
|
193
|
-
'Standard Deviation (Population)',
|
194
|
-
],
|
195
|
-
[
|
196
|
-
new QueryBuilderAggregateOperator_StdDev_Sample(),
|
197
|
-
'Standard Deviation (Sample)',
|
198
|
-
],
|
199
|
-
] as [QueryBuilderAggregateOperator, string][],
|
200
|
-
false,
|
201
|
-
graph,
|
202
|
-
);
|
203
|
-
lambdaFunction.expressionSequence[0] = groupByFunction;
|
204
|
-
return lambdaFunction;
|
132
|
+
const builderState = createQueryBuilderState(queryBuilderState);
|
133
|
+
const projectionState = builderState.fetchStructureState.projectionState;
|
134
|
+
const aggregationState = projectionState.aggregationState;
|
135
|
+
NUMERIC_AGG_FUNC_TO_AGG_OP.forEach((val) => {
|
136
|
+
const colState = createProjectionColumn(
|
137
|
+
builderState,
|
138
|
+
propertyExpression,
|
139
|
+
val[0],
|
140
|
+
);
|
141
|
+
projectionState.columns.push(colState);
|
142
|
+
const valAggOp = guaranteeNonNullable(
|
143
|
+
aggregationState.operators.find((t) => t instanceof val[1]),
|
144
|
+
);
|
145
|
+
aggregationState.changeColumnAggregateOperator(valAggOp, colState);
|
146
|
+
});
|
147
|
+
|
148
|
+
return builderState.resultState.buildExecutionRawLambda();
|
205
149
|
};
|
206
150
|
|
207
151
|
export const buildNonNumericPreviewDataQuery = (
|
152
|
+
queryBuilderState: QueryBuilderState,
|
208
153
|
propertyExpression: AbstractPropertyExpression,
|
209
|
-
|
210
|
-
graph: PureModel,
|
211
|
-
): LambdaFunction => {
|
154
|
+
): RawLambda => {
|
212
155
|
// Build the following query
|
213
156
|
//
|
214
157
|
// ClassX.all()->groupBy(
|
@@ -216,85 +159,47 @@ export const buildNonNumericPreviewDataQuery = (
|
|
216
159
|
// x|$x.prop
|
217
160
|
// ],
|
218
161
|
// [
|
219
|
-
// agg(x|$x.prop, x|$x->
|
162
|
+
// agg(x|$x.prop, x|$x->count())
|
220
163
|
// ],
|
221
164
|
// [
|
222
165
|
// 'Value',
|
223
166
|
// 'Count'
|
224
167
|
// ]
|
225
|
-
// )->
|
226
|
-
const
|
227
|
-
|
228
|
-
|
229
|
-
const typeAny = graph.getType(CORE_PURE_PATH.ANY);
|
230
|
-
const lambdaFunction = new LambdaFunction(
|
231
|
-
new FunctionType(typeAny, multiplicityOne),
|
232
|
-
);
|
233
|
-
|
234
|
-
// build groupBy()
|
235
|
-
const groupByFunction = buildGroupByFunction(
|
236
|
-
buildGetAllFunction(_class, multiplicityOne),
|
168
|
+
// )->sort([desc('Count'), asc('Value')])->take(10)
|
169
|
+
const builderState = createQueryBuilderState(queryBuilderState);
|
170
|
+
const valueProjectionColState = createProjectionColumn(
|
171
|
+
builderState,
|
237
172
|
propertyExpression,
|
238
|
-
|
239
|
-
QueryBuilderAggregateOperator,
|
240
|
-
string,
|
241
|
-
][],
|
242
|
-
true,
|
243
|
-
graph,
|
173
|
+
PREVIEW_DATA_NON_NUMERIC_VALUE_COLUMN_NAME,
|
244
174
|
);
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
extractElementNameFromPath(QUERY_BUILDER_SUPPORTED_FUNCTIONS.TDS_SORT),
|
250
|
-
multiplicityOne,
|
251
|
-
);
|
252
|
-
const sortColumnFunctions = new CollectionInstanceValue(
|
253
|
-
new Multiplicity(2, 2),
|
254
|
-
undefined,
|
175
|
+
const valueCountProjectionState = createProjectionColumn(
|
176
|
+
builderState,
|
177
|
+
propertyExpression,
|
178
|
+
PREVIEW_DATA_NON_NUMERIC_COUNT_COLUMN_NAME,
|
255
179
|
);
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
]
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
);
|
264
|
-
const sortColumnName = new PrimitiveInstanceValue(
|
265
|
-
GenericTypeExplicitReference.create(
|
266
|
-
new GenericType(graph.getPrimitiveType(PRIMITIVE_TYPE.STRING)),
|
267
|
-
),
|
268
|
-
multiplicityOne,
|
269
|
-
);
|
270
|
-
sortColumnName.values = [pair[1]];
|
271
|
-
sortColumnFunction.parametersValues[0] = sortColumnName;
|
272
|
-
return sortColumnFunction;
|
273
|
-
});
|
274
|
-
sortFunction.parametersValues[0] = groupByFunction;
|
275
|
-
sortFunction.parametersValues[1] = sortColumnFunctions;
|
276
|
-
|
277
|
-
// build take()
|
278
|
-
const limit = new PrimitiveInstanceValue(
|
279
|
-
GenericTypeExplicitReference.create(
|
280
|
-
new GenericType(graph.getPrimitiveType(PRIMITIVE_TYPE.INTEGER)),
|
180
|
+
builderState.fetchStructureState.projectionState.columns = [
|
181
|
+
valueProjectionColState,
|
182
|
+
valueCountProjectionState,
|
183
|
+
];
|
184
|
+
const distinctCountOp = guaranteeNonNullable(
|
185
|
+
builderState.fetchStructureState.projectionState.aggregationState.operators.find(
|
186
|
+
(t) => t instanceof QueryBuilderAggregateOperator_Count,
|
281
187
|
),
|
282
|
-
multiplicityOne,
|
283
188
|
);
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
multiplicityOne,
|
189
|
+
builderState.fetchStructureState.projectionState.aggregationState.changeColumnAggregateOperator(
|
190
|
+
distinctCountOp,
|
191
|
+
valueCountProjectionState,
|
288
192
|
);
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
193
|
+
// result set
|
194
|
+
builderState.resultSetModifierState.limit = PREVIEW_DATA_TAKE_LIMIT;
|
195
|
+
const sortValueCount = new SortColumnState(
|
196
|
+
builderState,
|
197
|
+
valueCountProjectionState,
|
198
|
+
);
|
199
|
+
sortValueCount.sortType = COLUMN_SORT_TYPE.DESC;
|
200
|
+
builderState.resultSetModifierState.sortColumns = [
|
201
|
+
sortValueCount,
|
202
|
+
new SortColumnState(builderState, valueProjectionColState),
|
203
|
+
];
|
204
|
+
return builderState.resultState.buildExecutionRawLambda();
|
300
205
|
};
|