@finos/legend-query-builder 0.4.3 → 0.4.4
Sign up to get free protection for your applications and to get access to all the features.
- package/lib/components/QueryBuilder.d.ts +0 -1
- package/lib/components/QueryBuilder.d.ts.map +1 -1
- package/lib/components/QueryBuilderDiffPanel.d.ts +0 -1
- package/lib/components/QueryBuilderDiffPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderParametersPanel.d.ts +0 -1
- package/lib/components/QueryBuilderParametersPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderParametersPanel.js +2 -4
- package/lib/components/QueryBuilderParametersPanel.js.map +1 -1
- package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts +0 -1
- package/lib/components/QueryBuilderPropertyExpressionEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderResultPanel.d.ts +0 -1
- package/lib/components/QueryBuilderResultPanel.d.ts.map +1 -1
- package/lib/components/QueryBuilderSideBar.d.ts +0 -1
- package/lib/components/QueryBuilderSideBar.d.ts.map +1 -1
- package/lib/components/QueryBuilderTextEditor.d.ts +0 -1
- package/lib/components/QueryBuilderTextEditor.d.ts.map +1 -1
- package/lib/components/QueryBuilderUnsupportedQueryEditor.d.ts +0 -1
- package/lib/components/QueryBuilderUnsupportedQueryEditor.d.ts.map +1 -1
- package/lib/components/explorer/QueryBuilderFunctionsExplorerPanel.d.ts +0 -1
- package/lib/components/explorer/QueryBuilderFunctionsExplorerPanel.d.ts.map +1 -1
- package/lib/components/explorer/QueryBuilderMilestoningEditor.d.ts +0 -1
- package/lib/components/explorer/QueryBuilderMilestoningEditor.d.ts.map +1 -1
- package/lib/components/explorer/QueryBuilderPropertySearchPanel.d.ts +0 -1
- package/lib/components/explorer/QueryBuilderPropertySearchPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderFetchStructurePanel.d.ts +0 -1
- package/lib/components/fetch-structure/QueryBuilderFetchStructurePanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderGraphFetchTreePanel.d.ts +0 -1
- package/lib/components/fetch-structure/QueryBuilderGraphFetchTreePanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderOLAPGroupByPanel_.d.ts +0 -1
- package/lib/components/fetch-structure/QueryBuilderOLAPGroupByPanel_.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.d.ts +0 -1
- package/lib/components/fetch-structure/QueryBuilderPostFilterPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderPostTDSPanel.d.ts +0 -1
- package/lib/components/fetch-structure/QueryBuilderPostTDSPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.d.ts +0 -1
- package/lib/components/fetch-structure/QueryBuilderResultModifierPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts +0 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
- package/lib/components/filter/QueryBuilderFilterPanel.d.ts +0 -1
- package/lib/components/filter/QueryBuilderFilterPanel.d.ts.map +1 -1
- package/lib/components/shared/LambdaEditor.d.ts +0 -1
- package/lib/components/shared/LambdaEditor.d.ts.map +1 -1
- package/lib/components/shared/LambdaParameterValuesEditor.d.ts +0 -1
- package/lib/components/shared/LambdaParameterValuesEditor.d.ts.map +1 -1
- package/lib/components/watermark/QueryBuilderWatermark.d.ts +0 -1
- package/lib/components/watermark/QueryBuilderWatermark.d.ts.map +1 -1
- package/lib/index.css +16 -0
- package/lib/package.json +6 -6
- package/lib/stores/QueryBuilderResultState.d.ts +1 -2
- package/lib/stores/QueryBuilderResultState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderResultState.js +7 -12
- package/lib/stores/QueryBuilderResultState.js.map +1 -1
- package/lib/stores/QueryBuilderValueSpecificationBuilder.d.ts.map +1 -1
- package/lib/stores/QueryBuilderValueSpecificationBuilder.js +9 -4
- package/lib/stores/QueryBuilderValueSpecificationBuilder.js.map +1 -1
- package/lib/stores/shared/LambdaParameterState.d.ts +14 -2
- package/lib/stores/shared/LambdaParameterState.d.ts.map +1 -1
- package/lib/stores/shared/LambdaParameterState.js +79 -6
- package/lib/stores/shared/LambdaParameterState.js.map +1 -1
- package/package.json +13 -13
- package/src/components/QueryBuilderParametersPanel.tsx +2 -7
- package/src/stores/QueryBuilderResultState.ts +19 -17
- package/src/stores/QueryBuilderValueSpecificationBuilder.ts +14 -7
- package/src/stores/shared/LambdaParameterState.ts +151 -10
@@ -19,11 +19,26 @@ import {
|
|
19
19
|
type Type,
|
20
20
|
type ValueSpecification,
|
21
21
|
type PureModel,
|
22
|
+
type GraphManagerState,
|
23
|
+
type RawLambda,
|
22
24
|
GenericType,
|
23
25
|
GenericTypeExplicitReference,
|
24
26
|
observe_ValueSpecification,
|
25
27
|
observe_VariableExpression,
|
26
28
|
VariableExpression,
|
29
|
+
SimpleFunctionExpression,
|
30
|
+
PackageableElementExplicitReference,
|
31
|
+
LambdaFunction,
|
32
|
+
FunctionType,
|
33
|
+
CORE_PURE_PATH,
|
34
|
+
extractElementNameFromPath,
|
35
|
+
Multiplicity,
|
36
|
+
PrimitiveInstanceValue,
|
37
|
+
PrimitiveType,
|
38
|
+
SUPPORTED_FUNCTIONS,
|
39
|
+
areMultiplicitiesEqual,
|
40
|
+
ParameterValue,
|
41
|
+
buildRawLambdaFromLambdaFunction,
|
27
42
|
} from '@finos/legend-graph';
|
28
43
|
import {
|
29
44
|
addUniqueEntry,
|
@@ -32,6 +47,8 @@ import {
|
|
32
47
|
hashArray,
|
33
48
|
IllegalStateError,
|
34
49
|
uuid,
|
50
|
+
isNonNullable,
|
51
|
+
guaranteeNonNullable,
|
35
52
|
} from '@finos/legend-shared';
|
36
53
|
import { makeObservable, observable, action, computed } from 'mobx';
|
37
54
|
import { generateVariableExpressionMockValue } from './ValueSpecificationEditorHelper.js';
|
@@ -49,6 +66,137 @@ enum LAMABA_PARAMETER_HASH_STRUCTURE {
|
|
49
66
|
LAMBDA_PARAMETER_STATE = 'LAMBDA_PARAMETER_STATE',
|
50
67
|
LAMBDA_PARAMETERS_STATE = 'LAMBDA_PARAMETERS_STATE',
|
51
68
|
}
|
69
|
+
|
70
|
+
export const buildParametersLetLambdaFunc = (
|
71
|
+
graph: PureModel,
|
72
|
+
lambdaParametersStates: LambdaParameterState[],
|
73
|
+
): LambdaFunction => {
|
74
|
+
const letlambdaFunction = new LambdaFunction(
|
75
|
+
new FunctionType(
|
76
|
+
PackageableElementExplicitReference.create(
|
77
|
+
graph.getType(CORE_PURE_PATH.ANY),
|
78
|
+
),
|
79
|
+
Multiplicity.ONE,
|
80
|
+
),
|
81
|
+
);
|
82
|
+
letlambdaFunction.expressionSequence = lambdaParametersStates
|
83
|
+
.map((queryParamState) => {
|
84
|
+
if (queryParamState.value) {
|
85
|
+
const letFunc = new SimpleFunctionExpression(
|
86
|
+
extractElementNameFromPath(SUPPORTED_FUNCTIONS.LET),
|
87
|
+
);
|
88
|
+
const letVar = new PrimitiveInstanceValue(
|
89
|
+
GenericTypeExplicitReference.create(
|
90
|
+
new GenericType(PrimitiveType.STRING),
|
91
|
+
),
|
92
|
+
);
|
93
|
+
letVar.values = [queryParamState.variableName];
|
94
|
+
letFunc.parametersValues.push(letVar);
|
95
|
+
letFunc.parametersValues.push(queryParamState.value);
|
96
|
+
return letFunc;
|
97
|
+
}
|
98
|
+
return undefined;
|
99
|
+
})
|
100
|
+
.filter(isNonNullable);
|
101
|
+
return letlambdaFunction;
|
102
|
+
};
|
103
|
+
|
104
|
+
/**
|
105
|
+
* For most query executions we will use the stragtical method of sending in `paramValues` as part of the execution input payload.
|
106
|
+
* However when the user wants to use a function value as the parameter value, engine does not understand this i.e for date param the functions `now()`, `today()`.
|
107
|
+
* Engine Does not support this because those functions require a building of execution nodes inside the execution plan.
|
108
|
+
* To continue supporting this execution flow , we will add let statements for parameter values with function values so that they can be evaluated to constants in the execution plan.
|
109
|
+
*/
|
110
|
+
export const doesLambdaParameterStateContainFunctionValues = (
|
111
|
+
parameterState: LambdaParameterState,
|
112
|
+
): boolean =>
|
113
|
+
parameterState.value instanceof SimpleFunctionExpression &&
|
114
|
+
[Multiplicity.ONE, Multiplicity.ZERO_ONE].some((p) =>
|
115
|
+
areMultiplicitiesEqual(p, parameterState.parameter.multiplicity),
|
116
|
+
);
|
117
|
+
|
118
|
+
export const getParameterStatesWithFunctionValues = (
|
119
|
+
parameterStates: LambdaParameterState[],
|
120
|
+
): LambdaParameterState[] =>
|
121
|
+
parameterStates.filter(doesLambdaParameterStateContainFunctionValues);
|
122
|
+
|
123
|
+
export const buildExecutionParameterValues = (
|
124
|
+
paramStates: LambdaParameterState[],
|
125
|
+
graphState: GraphManagerState,
|
126
|
+
): ParameterValue[] =>
|
127
|
+
paramStates
|
128
|
+
.filter((ps) => !doesLambdaParameterStateContainFunctionValues(ps))
|
129
|
+
.map((queryParamState) => {
|
130
|
+
const paramValue = new ParameterValue();
|
131
|
+
paramValue.name = queryParamState.parameter.name;
|
132
|
+
paramValue.value = graphState.graphManager.serializeValueSpecification(
|
133
|
+
guaranteeNonNullable(queryParamState.value),
|
134
|
+
);
|
135
|
+
return paramValue;
|
136
|
+
});
|
137
|
+
|
138
|
+
export const getExecutionQueryFromRawLambda = (
|
139
|
+
rawLambda: RawLambda,
|
140
|
+
parameterStates: LambdaParameterState[],
|
141
|
+
graphManagerState: GraphManagerState,
|
142
|
+
): RawLambda => {
|
143
|
+
const paramsWithLetStatements =
|
144
|
+
getParameterStatesWithFunctionValues(parameterStates);
|
145
|
+
if (paramsWithLetStatements.length > 0) {
|
146
|
+
const execuLambdaFunction = buildParametersLetLambdaFunc(
|
147
|
+
graphManagerState.graph,
|
148
|
+
paramsWithLetStatements,
|
149
|
+
);
|
150
|
+
// remove parameters added as let statements from lambda parameters
|
151
|
+
execuLambdaFunction.functionType.parameters = parameterStates
|
152
|
+
.filter((ps) => !paramsWithLetStatements.includes(ps))
|
153
|
+
.map((e) => e.parameter);
|
154
|
+
const execQuery = buildRawLambdaFromLambdaFunction(
|
155
|
+
execuLambdaFunction,
|
156
|
+
graphManagerState,
|
157
|
+
);
|
158
|
+
// reset paramaters
|
159
|
+
if (Array.isArray(rawLambda.body) && Array.isArray(execQuery.body)) {
|
160
|
+
execQuery.body = [
|
161
|
+
...(execQuery.body as object[]),
|
162
|
+
...(rawLambda.body as object[]),
|
163
|
+
];
|
164
|
+
return execQuery;
|
165
|
+
}
|
166
|
+
}
|
167
|
+
return rawLambda;
|
168
|
+
};
|
169
|
+
|
170
|
+
export const buildExecutionQueryFromLambdaFunction = (
|
171
|
+
lambdaFunction: LambdaFunction,
|
172
|
+
parameterStates: LambdaParameterState[],
|
173
|
+
graphManagerState: GraphManagerState,
|
174
|
+
): LambdaFunction => {
|
175
|
+
const funcParameterStates =
|
176
|
+
getParameterStatesWithFunctionValues(parameterStates);
|
177
|
+
if (funcParameterStates.length) {
|
178
|
+
// To handle parameter value with function calls we
|
179
|
+
// 1. remove those parameters from parameter list
|
180
|
+
// 2. add let statements with parameter values
|
181
|
+
lambdaFunction.functionType.parameters = parameterStates
|
182
|
+
.filter((ps) => !funcParameterStates.includes(ps))
|
183
|
+
.map((e) => e.parameter);
|
184
|
+
const letsFuncs = buildParametersLetLambdaFunc(
|
185
|
+
graphManagerState.graph,
|
186
|
+
funcParameterStates,
|
187
|
+
);
|
188
|
+
lambdaFunction.expressionSequence = [
|
189
|
+
...letsFuncs.expressionSequence,
|
190
|
+
...lambdaFunction.expressionSequence,
|
191
|
+
];
|
192
|
+
} else {
|
193
|
+
lambdaFunction.functionType.parameters = parameterStates.map(
|
194
|
+
(e) => e.parameter,
|
195
|
+
);
|
196
|
+
}
|
197
|
+
return lambdaFunction;
|
198
|
+
};
|
199
|
+
|
52
200
|
export class LambdaParameterState implements Hashable {
|
53
201
|
readonly uuid = uuid();
|
54
202
|
readonly parameter: VariableExpression;
|
@@ -109,18 +257,11 @@ export class LambdaParameterState implements Hashable {
|
|
109
257
|
|
110
258
|
changeMultiplicity(
|
111
259
|
variableExpression: VariableExpression,
|
112
|
-
|
113
|
-
uppderBound: number | undefined,
|
260
|
+
mul: Multiplicity,
|
114
261
|
): void {
|
115
262
|
const current = this.parameter.multiplicity;
|
116
|
-
if (
|
117
|
-
|
118
|
-
current.upperBound !== uppderBound
|
119
|
-
) {
|
120
|
-
valueSpecification_setMultiplicity(
|
121
|
-
variableExpression,
|
122
|
-
this.graph.getMultiplicity(lowerBound, uppderBound),
|
123
|
-
);
|
263
|
+
if (!areMultiplicitiesEqual(current, mul)) {
|
264
|
+
valueSpecification_setMultiplicity(variableExpression, mul);
|
124
265
|
this.mockParameterValue();
|
125
266
|
}
|
126
267
|
}
|