@finos/legend-query-builder 4.1.14 → 4.2.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/filter/QueryBuilderFilterPanel.d.ts +6 -1
- package/lib/components/filter/QueryBuilderFilterPanel.d.ts.map +1 -1
- package/lib/components/filter/QueryBuilderFilterPanel.js +189 -13
- package/lib/components/filter/QueryBuilderFilterPanel.js.map +1 -1
- package/lib/index.css +17 -1
- package/lib/index.css.map +1 -1
- package/lib/package.json +6 -6
- package/lib/stores/QueryBuilderStateHashUtils.d.ts +1 -0
- package/lib/stores/QueryBuilderStateHashUtils.d.ts.map +1 -1
- package/lib/stores/QueryBuilderStateHashUtils.js +1 -0
- package/lib/stores/QueryBuilderStateHashUtils.js.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterOperator.d.ts +1 -1
- package/lib/stores/filter/QueryBuilderFilterOperator.d.ts.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterOperator.js.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterState.d.ts +16 -5
- package/lib/stores/filter/QueryBuilderFilterState.d.ts.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterState.js +78 -18
- package/lib/stores/filter/QueryBuilderFilterState.js.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterStateBuilder.d.ts.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterStateBuilder.js +125 -2
- package/lib/stores/filter/QueryBuilderFilterStateBuilder.js.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterValueSpecificationBuilder.d.ts.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterValueSpecificationBuilder.js +62 -3
- package/lib/stores/filter/QueryBuilderFilterValueSpecificationBuilder.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.d.ts +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.js +12 -192
- package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.d.ts +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.js +4 -4
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.d.ts +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.js +4 -4
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.d.ts +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.js +4 -4
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.d.ts +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.js +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.d.ts +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.js +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.d.ts +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.js +4 -4
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.d.ts +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.js +4 -4
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.d.ts +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.js +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.d.ts +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.js +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.d.ts +2 -2
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.js +4 -4
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.js.map +1 -1
- package/package.json +14 -14
- package/src/components/filter/QueryBuilderFilterPanel.tsx +355 -24
- package/src/stores/QueryBuilderStateHashUtils.ts +1 -0
- package/src/stores/filter/QueryBuilderFilterOperator.ts +1 -0
- package/src/stores/filter/QueryBuilderFilterState.ts +115 -27
- package/src/stores/filter/QueryBuilderFilterStateBuilder.ts +244 -0
- package/src/stores/filter/QueryBuilderFilterValueSpecificationBuilder.ts +94 -1
- package/src/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.ts +37 -377
- package/src/stores/filter/operators/QueryBuilderFilterOperator_Contain.ts +7 -1
- package/src/stores/filter/operators/QueryBuilderFilterOperator_EndWith.ts +7 -1
- package/src/stores/filter/operators/QueryBuilderFilterOperator_Equal.ts +7 -1
- package/src/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.ts +2 -0
- package/src/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.ts +2 -0
- package/src/stores/filter/operators/QueryBuilderFilterOperator_In.ts +7 -1
- package/src/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.ts +7 -1
- package/src/stores/filter/operators/QueryBuilderFilterOperator_LessThan.ts +2 -0
- package/src/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.ts +2 -0
- package/src/stores/filter/operators/QueryBuilderFilterOperator_StartWith.ts +7 -1
|
@@ -13,12 +13,25 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { AbstractPropertyExpression, LambdaFunctionInstanceValue, matchFunctionName, SimpleFunctionExpression, VariableExpression, } from '@finos/legend-graph';
|
|
16
|
+
import { AbstractPropertyExpression, extractElementNameFromPath, LambdaFunction, LambdaFunctionInstanceValue, matchFunctionName, SimpleFunctionExpression, VariableExpression, } from '@finos/legend-graph';
|
|
17
17
|
import { assertTrue, assertType, guaranteeNonNullable, guaranteeType, returnUndefOnError, UnsupportedOperationError, } from '@finos/legend-shared';
|
|
18
18
|
import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../graph/QueryBuilderMetaModelConst.js';
|
|
19
19
|
import { toGroupOperation } from '../QueryBuilderGroupOperationHelper.js';
|
|
20
20
|
import { validatePropertyExpressionChain } from '../QueryBuilderValueSpecificationHelper.js';
|
|
21
|
-
import { QueryBuilderFilterTreeConditionNodeData, QueryBuilderFilterTreeGroupNodeData, } from './QueryBuilderFilterState.js';
|
|
21
|
+
import { QueryBuilderFilterTreeConditionNodeData, QueryBuilderFilterTreeGroupNodeData, QueryBuilderFilterTreeExistsNodeData, QueryBuilderFilterTreeOperationNodeData, } from './QueryBuilderFilterState.js';
|
|
22
|
+
const getPropertyExpressionChainVariable = (propertyExpression) => {
|
|
23
|
+
let currentExpression = propertyExpression;
|
|
24
|
+
while (currentExpression instanceof AbstractPropertyExpression) {
|
|
25
|
+
currentExpression = guaranteeNonNullable(currentExpression.parametersValues[0]);
|
|
26
|
+
// Take care of chains of subtype (a pattern that is not useful, but we want to support and rectify)
|
|
27
|
+
// $x.employees->subType(@Person)->subType(@Staff)
|
|
28
|
+
while (currentExpression instanceof SimpleFunctionExpression &&
|
|
29
|
+
matchFunctionName(currentExpression.functionName, QUERY_BUILDER_SUPPORTED_FUNCTIONS.SUBTYPE)) {
|
|
30
|
+
currentExpression = guaranteeNonNullable(currentExpression.parametersValues[0]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return guaranteeType(currentExpression, VariableExpression);
|
|
34
|
+
};
|
|
22
35
|
const processFilterTree = (expression, filterState, parentFilterNodeId) => {
|
|
23
36
|
const parentNode = parentFilterNodeId
|
|
24
37
|
? filterState.getNode(parentFilterNodeId)
|
|
@@ -29,9 +42,113 @@ const processFilterTree = (expression, filterState, parentFilterNodeId) => {
|
|
|
29
42
|
])) {
|
|
30
43
|
const groupNode = new QueryBuilderFilterTreeGroupNodeData(parentFilterNodeId, toGroupOperation(expression.functionName));
|
|
31
44
|
filterState.nodes.set(groupNode.id, groupNode);
|
|
45
|
+
if (parentNode) {
|
|
46
|
+
groupNode.lambdaParameterName = guaranteeType(parentNode, QueryBuilderFilterTreeOperationNodeData).lambdaParameterName;
|
|
47
|
+
}
|
|
32
48
|
expression.parametersValues.forEach((filterExpression) => processFilterTree(guaranteeType(filterExpression, SimpleFunctionExpression, `Can't process filter group expression: each child expression must be a function expression`), filterState, groupNode.id));
|
|
33
49
|
filterState.addNodeFromNode(groupNode, parentNode);
|
|
34
50
|
}
|
|
51
|
+
else if (matchFunctionName(expression.functionName, [
|
|
52
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.EXISTS,
|
|
53
|
+
])) {
|
|
54
|
+
const propertyExpression = guaranteeType(expression.parametersValues[0], AbstractPropertyExpression);
|
|
55
|
+
if (propertyExpression.func.value.multiplicity.upperBound === undefined ||
|
|
56
|
+
propertyExpression.func.value.multiplicity.upperBound > 1) {
|
|
57
|
+
const existsNode = new QueryBuilderFilterTreeExistsNodeData(parentFilterNodeId);
|
|
58
|
+
const lambdaFunctionInstance = guaranteeType(expression.parametersValues[1], LambdaFunctionInstanceValue, `Can't process filter expression: only supports exists with second paramter as LambdaFunctionInstanceValue`);
|
|
59
|
+
const lambdaFunction = guaranteeType(lambdaFunctionInstance.values[0], LambdaFunction);
|
|
60
|
+
const filterExpression = guaranteeType(lambdaFunction.expressionSequence[0], SimpleFunctionExpression);
|
|
61
|
+
existsNode.setPropertyExpression(propertyExpression);
|
|
62
|
+
existsNode.lambdaParameterName =
|
|
63
|
+
lambdaFunction.functionType.parameters[0]?.name;
|
|
64
|
+
filterState.nodes.set(existsNode.id, existsNode);
|
|
65
|
+
processFilterTree(filterExpression, filterState, existsNode.id);
|
|
66
|
+
filterState.addNodeFromNode(existsNode, parentNode);
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
// Build property chain if we have exists filter() and the multiplicity of the property
|
|
70
|
+
// is of multiplicity less than or equal to one. This will auto-fix the exists into the
|
|
71
|
+
// desired filter expression
|
|
72
|
+
// 1. Decompose the exists() lambda chain into property expression chains
|
|
73
|
+
const existsLambdaParameterNames = [];
|
|
74
|
+
const existsLambdaExpressions = [];
|
|
75
|
+
let mainFilterExpression = expression;
|
|
76
|
+
while (matchFunctionName(mainFilterExpression.functionName, QUERY_BUILDER_SUPPORTED_FUNCTIONS.EXISTS)) {
|
|
77
|
+
const existsLambda = guaranteeNonNullable(guaranteeType(mainFilterExpression.parametersValues[1], LambdaFunctionInstanceValue).values[0], `Can't process exists() expression: exists() lambda is missing`);
|
|
78
|
+
assertTrue(existsLambda.expressionSequence.length === 1, `Can't process exists() expression: exists() lambda body should hold an expression`);
|
|
79
|
+
mainFilterExpression = guaranteeType(existsLambda.expressionSequence[0], SimpleFunctionExpression, `Can't process exists() expression: exists() lambda body should hold an expression`);
|
|
80
|
+
// record the lambda parameter name
|
|
81
|
+
assertTrue(existsLambda.functionType.parameters.length === 1, `Can't process exists() expression: exists() lambda should have 1 parameter`);
|
|
82
|
+
existsLambdaParameterNames.push(guaranteeType(existsLambda.functionType.parameters[0], VariableExpression, `Can't process exists() expression: exists() lambda should have 1 parameter`).name);
|
|
83
|
+
// record the lambda property expression
|
|
84
|
+
if (mainFilterExpression.parametersValues[0] instanceof
|
|
85
|
+
AbstractPropertyExpression &&
|
|
86
|
+
!(mainFilterExpression.parametersValues[0].func.value.multiplicity
|
|
87
|
+
.upperBound === undefined ||
|
|
88
|
+
mainFilterExpression.parametersValues[0].func.value.multiplicity
|
|
89
|
+
.upperBound > 1)) {
|
|
90
|
+
existsLambdaExpressions.push(mainFilterExpression.parametersValues[0]);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// 2. Build the property expression
|
|
97
|
+
const initialPropertyExpression = guaranteeType(expression.parametersValues[0], AbstractPropertyExpression);
|
|
98
|
+
let flattenedPropertyExpressionChain = new AbstractPropertyExpression('');
|
|
99
|
+
flattenedPropertyExpressionChain.func = initialPropertyExpression.func;
|
|
100
|
+
flattenedPropertyExpressionChain.parametersValues = [
|
|
101
|
+
...initialPropertyExpression.parametersValues,
|
|
102
|
+
];
|
|
103
|
+
for (const exp of existsLambdaExpressions) {
|
|
104
|
+
// when rebuilding the property expression chain, disregard the initial variable that starts the chain
|
|
105
|
+
const expressions = [];
|
|
106
|
+
let currentExpression = exp;
|
|
107
|
+
while (currentExpression instanceof AbstractPropertyExpression ||
|
|
108
|
+
(currentExpression instanceof SimpleFunctionExpression &&
|
|
109
|
+
matchFunctionName(currentExpression.functionName, QUERY_BUILDER_SUPPORTED_FUNCTIONS.SUBTYPE))) {
|
|
110
|
+
if (currentExpression instanceof SimpleFunctionExpression) {
|
|
111
|
+
const functionExpression = new SimpleFunctionExpression(extractElementNameFromPath(QUERY_BUILDER_SUPPORTED_FUNCTIONS.SUBTYPE));
|
|
112
|
+
functionExpression.parametersValues.unshift(guaranteeNonNullable(currentExpression.parametersValues[1]));
|
|
113
|
+
expressions.push(functionExpression);
|
|
114
|
+
}
|
|
115
|
+
else if (currentExpression instanceof AbstractPropertyExpression) {
|
|
116
|
+
const propertyExp = new AbstractPropertyExpression('');
|
|
117
|
+
propertyExp.func = currentExpression.func;
|
|
118
|
+
// NOTE: we must retain the rest of the parameters as those are derived property parameters
|
|
119
|
+
propertyExp.parametersValues =
|
|
120
|
+
currentExpression.parametersValues.length > 1
|
|
121
|
+
? currentExpression.parametersValues.slice(1)
|
|
122
|
+
: [];
|
|
123
|
+
expressions.push(propertyExp);
|
|
124
|
+
}
|
|
125
|
+
currentExpression = guaranteeNonNullable(currentExpression.parametersValues[0]);
|
|
126
|
+
}
|
|
127
|
+
assertTrue(expressions.length > 0, `Can't process exists() expression: exists() usage with non-chain property expression is not supported`);
|
|
128
|
+
for (let i = 0; i < expressions.length - 1; ++i) {
|
|
129
|
+
expressions[i].parametersValues.unshift(expressions[i + 1]);
|
|
130
|
+
}
|
|
131
|
+
expressions[expressions.length - 1].parametersValues.unshift(flattenedPropertyExpressionChain);
|
|
132
|
+
flattenedPropertyExpressionChain = guaranteeType(expressions[0], AbstractPropertyExpression, `Can't process exists() expression: can't flatten to a property expression`);
|
|
133
|
+
}
|
|
134
|
+
mainFilterExpression.parametersValues =
|
|
135
|
+
mainFilterExpression.parametersValues.map((p) => {
|
|
136
|
+
if (p instanceof SimpleFunctionExpression &&
|
|
137
|
+
p.parametersValues[0] instanceof AbstractPropertyExpression) {
|
|
138
|
+
p.parametersValues[0].parametersValues[0] =
|
|
139
|
+
flattenedPropertyExpressionChain;
|
|
140
|
+
}
|
|
141
|
+
else if (p instanceof AbstractPropertyExpression) {
|
|
142
|
+
p.parametersValues[0] = guaranteeNonNullable(flattenedPropertyExpressionChain.parametersValues[0]);
|
|
143
|
+
}
|
|
144
|
+
else if (p instanceof VariableExpression) {
|
|
145
|
+
return flattenedPropertyExpressionChain;
|
|
146
|
+
}
|
|
147
|
+
return p;
|
|
148
|
+
});
|
|
149
|
+
processFilterTree(mainFilterExpression, filterState, parentFilterNodeId);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
35
152
|
else {
|
|
36
153
|
const propertyExpression = expression.parametersValues[0];
|
|
37
154
|
if (propertyExpression instanceof AbstractPropertyExpression) {
|
|
@@ -46,6 +163,12 @@ const processFilterTree = (expression, filterState, parentFilterNodeId) => {
|
|
|
46
163
|
// considered as not supporting the lambda.
|
|
47
164
|
const filterConditionState = returnUndefOnError(() => operator.buildFilterConditionState(filterState, expression));
|
|
48
165
|
if (filterConditionState) {
|
|
166
|
+
const variableName = getPropertyExpressionChainVariable(filterConditionState.propertyExpressionState.propertyExpression).name;
|
|
167
|
+
const parentLambdaVariableName = parentNode instanceof QueryBuilderFilterTreeOperationNodeData &&
|
|
168
|
+
parentNode.lambdaParameterName
|
|
169
|
+
? parentNode.lambdaParameterName
|
|
170
|
+
: filterState.lambdaParameterName;
|
|
171
|
+
assertTrue(parentLambdaVariableName === variableName, `Can't process ${extractElementNameFromPath(filterConditionState.operator.getLabel(filterConditionState))}() expression: expects variable used in lambda body '${variableName}' to match lambda parameter '${parentLambdaVariableName}'`);
|
|
49
172
|
filterState.addNodeFromNode(new QueryBuilderFilterTreeConditionNodeData(undefined, filterConditionState), parentNode);
|
|
50
173
|
return;
|
|
51
174
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBuilderFilterStateBuilder.js","sourceRoot":"","sources":["../../../src/stores/filter/QueryBuilderFilterStateBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,iBAAiB,EACjB,wBAAwB,
|
|
1
|
+
{"version":3,"file":"QueryBuilderFilterStateBuilder.js","sourceRoot":"","sources":["../../../src/stores/filter/QueryBuilderFilterStateBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,0BAA0B,EAC1B,0BAA0B,EAC1B,cAAc,EACd,2BAA2B,EAC3B,iBAAiB,EACjB,wBAAwB,EAExB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,UAAU,EACV,UAAU,EACV,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,yBAAyB,GAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,iCAAiC,EAAE,MAAM,2CAA2C,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAE1E,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,OAAO,EAEL,uCAAuC,EACvC,mCAAmC,EACnC,oCAAoC,EACpC,uCAAuC,GACxC,MAAM,8BAA8B,CAAC;AAEtC,MAAM,kCAAkC,GAAG,CACzC,kBAA8C,EAC1B,EAAE;IACtB,IAAI,iBAAiB,GAAuB,kBAAkB,CAAC;IAC/D,OAAO,iBAAiB,YAAY,0BAA0B,EAAE;QAC9D,iBAAiB,GAAG,oBAAoB,CACtC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CACtC,CAAC;QACF,oGAAoG;QACpG,kDAAkD;QAClD,OACE,iBAAiB,YAAY,wBAAwB;YACrD,iBAAiB,CACf,iBAAiB,CAAC,YAAY,EAC9B,iCAAiC,CAAC,OAAO,CAC1C,EACD;YACA,iBAAiB,GAAG,oBAAoB,CACtC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CACtC,CAAC;SACH;KACF;IACD,OAAO,aAAa,CAAC,iBAAiB,EAAE,kBAAkB,CAAC,CAAC;AAC9D,CAAC,CAAC;AAEF,MAAM,iBAAiB,GAAG,CACxB,UAAoC,EACpC,WAAoC,EACpC,kBAAsC,EAChC,EAAE;IACR,MAAM,UAAU,GAAG,kBAAkB;QACnC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC;QACzC,CAAC,CAAC,SAAS,CAAC;IACd,IACE,iBAAiB,CAAC,UAAU,CAAC,YAAY,EAAE;QACzC,iCAAiC,CAAC,GAAG;QACrC,iCAAiC,CAAC,EAAE;KACrC,CAAC,EACF;QACA,MAAM,SAAS,GAAG,IAAI,mCAAmC,CACvD,kBAAkB,EAClB,gBAAgB,CAAC,UAAU,CAAC,YAAY,CAAC,CAC1C,CAAC;QACF,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,UAAU,EAAE;YACd,SAAS,CAAC,mBAAmB,GAAG,aAAa,CAC3C,UAAU,EACV,uCAAuC,CACxC,CAAC,mBAAmB,CAAC;SACvB;QACD,UAAU,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,EAAE,CACvD,iBAAiB,CACf,aAAa,CACX,gBAAgB,EAChB,wBAAwB,EACxB,4FAA4F,CAC7F,EACD,WAAW,EACX,SAAS,CAAC,EAAE,CACb,CACF,CAAC;QACF,WAAW,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;KACpD;SAAM,IACL,iBAAiB,CAAC,UAAU,CAAC,YAAY,EAAE;QACzC,iCAAiC,CAAC,MAAM;KACzC,CAAC,EACF;QACA,MAAM,kBAAkB,GAAG,aAAa,CACtC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAC9B,0BAA0B,CAC3B,CAAC;QACF,IACE,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,KAAK,SAAS;YACnE,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,GAAG,CAAC,EACzD;YACA,MAAM,UAAU,GAAG,IAAI,oCAAoC,CACzD,kBAAkB,CACnB,CAAC;YACF,MAAM,sBAAsB,GAAG,aAAa,CAC1C,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAC9B,2BAA2B,EAC3B,2GAA2G,CAC5G,CAAC;YACF,MAAM,cAAc,GAAG,aAAa,CAClC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,EAChC,cAAc,CACf,CAAC;YACF,MAAM,gBAAgB,GAAG,aAAa,CACpC,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAC,EACpC,wBAAwB,CACzB,CAAC;YACF,UAAU,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;YACrD,UAAU,CAAC,mBAAmB;gBAC5B,cAAc,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC;YAClD,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;YACjD,iBAAiB,CAAC,gBAAgB,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;YAChE,WAAW,CAAC,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;SACrD;aAAM;YACL,uFAAuF;YACvF,uFAAuF;YACvF,4BAA4B;YAE5B,yEAAyE;YACzE,MAAM,0BAA0B,GAAa,EAAE,CAAC;YAEhD,MAAM,uBAAuB,GAAiC,EAAE,CAAC;YACjE,IAAI,oBAAoB,GAA6B,UAAU,CAAC;YAChE,OACE,iBAAiB,CACf,oBAAoB,CAAC,YAAY,EACjC,iCAAiC,CAAC,MAAM,CACzC,EACD;gBACA,MAAM,YAAY,GAAG,oBAAoB,CACvC,aAAa,CACX,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC,EACxC,2BAA2B,CAC5B,CAAC,MAAM,CAAC,CAAC,CAAC,EACX,+DAA+D,CAChE,CAAC;gBACF,UAAU,CACR,YAAY,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAC5C,mFAAmF,CACpF,CAAC;gBACF,oBAAoB,GAAG,aAAa,CAClC,YAAY,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAClC,wBAAwB,EACxB,mFAAmF,CACpF,CAAC;gBAEF,mCAAmC;gBACnC,UAAU,CACR,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EACjD,4EAA4E,CAC7E,CAAC;gBACF,0BAA0B,CAAC,IAAI,CAC7B,aAAa,CACX,YAAY,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EACvC,kBAAkB,EAClB,4EAA4E,CAC7E,CAAC,IAAI,CACP,CAAC;gBAEF,wCAAwC;gBACxC,IACE,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC;oBACtC,0BAA0B;oBAC5B,CAAC,CACC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY;yBAC7D,UAAU,KAAK,SAAS;wBAC3B,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY;6BAC7D,UAAU,GAAG,CAAC,CAClB,EACD;oBACA,uBAAuB,CAAC,IAAI,CAC1B,oBAAoB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CACzC,CAAC;iBACH;qBAAM;oBACL,MAAM;iBACP;aACF;YAED,mCAAmC;YACnC,MAAM,yBAAyB,GAAG,aAAa,CAC7C,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAC9B,0BAA0B,CAC3B,CAAC;YACF,IAAI,gCAAgC,GAAG,IAAI,0BAA0B,CAAC,EAAE,CAAC,CAAC;YAC1E,gCAAgC,CAAC,IAAI,GAAG,yBAAyB,CAAC,IAAI,CAAC;YACvE,gCAAgC,CAAC,gBAAgB,GAAG;gBAClD,GAAG,yBAAyB,CAAC,gBAAgB;aAC9C,CAAC;YACF,KAAK,MAAM,GAAG,IAAI,uBAAuB,EAAE;gBACzC,sGAAsG;gBACtG,MAAM,WAAW,GAGX,EAAE,CAAC;gBACT,IAAI,iBAAiB,GAAuB,GAAG,CAAC;gBAChD,OACE,iBAAiB,YAAY,0BAA0B;oBACvD,CAAC,iBAAiB,YAAY,wBAAwB;wBACpD,iBAAiB,CACf,iBAAiB,CAAC,YAAY,EAC9B,iCAAiC,CAAC,OAAO,CAC1C,CAAC,EACJ;oBACA,IAAI,iBAAiB,YAAY,wBAAwB,EAAE;wBACzD,MAAM,kBAAkB,GAAG,IAAI,wBAAwB,CACrD,0BAA0B,CACxB,iCAAiC,CAAC,OAAO,CAC1C,CACF,CAAC;wBACF,kBAAkB,CAAC,gBAAgB,CAAC,OAAO,CACzC,oBAAoB,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAC5D,CAAC;wBACF,WAAW,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;qBACtC;yBAAM,IAAI,iBAAiB,YAAY,0BAA0B,EAAE;wBAClE,MAAM,WAAW,GAAG,IAAI,0BAA0B,CAAC,EAAE,CAAC,CAAC;wBACvD,WAAW,CAAC,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC;wBAC1C,2FAA2F;wBAC3F,WAAW,CAAC,gBAAgB;4BAC1B,iBAAiB,CAAC,gBAAgB,CAAC,MAAM,GAAG,CAAC;gCAC3C,CAAC,CAAC,iBAAiB,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC;gCAC7C,CAAC,CAAC,EAAE,CAAC;wBACT,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;qBAC/B;oBACD,iBAAiB,GAAG,oBAAoB,CACtC,iBAAiB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CACtC,CAAC;iBACH;gBACD,UAAU,CACR,WAAW,CAAC,MAAM,GAAG,CAAC,EACtB,uGAAuG,CACxG,CAAC;gBACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE;oBAE7C,WAAW,CAAC,CAAC,CAGd,CAAC,gBAAgB,CAAC,OAAO,CACxB,WAAW,CAAC,CAAC,GAAG,CAAC,CAEW,CAC7B,CAAC;iBACH;gBAEC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAGnC,CAAC,gBAAgB,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;gBAC7D,gCAAgC,GAAG,aAAa,CAC9C,WAAW,CAAC,CAAC,CAAC,EACd,0BAA0B,EAC1B,2EAA2E,CAC5E,CAAC;aACH;YACD,oBAAoB,CAAC,gBAAgB;gBACnC,oBAAoB,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;oBAC9C,IACE,CAAC,YAAY,wBAAwB;wBACrC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,YAAY,0BAA0B,EAC3D;wBACA,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;4BACvC,gCAAgC,CAAC;qBACpC;yBAAM,IAAI,CAAC,YAAY,0BAA0B,EAAE;wBAClD,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAC1C,gCAAgC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CACrD,CAAC;qBACH;yBAAM,IAAI,CAAC,YAAY,kBAAkB,EAAE;wBAC1C,OAAO,gCAAgC,CAAC;qBACzC;oBACD,OAAO,CAAC,CAAC;gBACX,CAAC,CAAC,CAAC;YACL,iBAAiB,CAAC,oBAAoB,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;SAC1E;KACF;SAAM;QACL,MAAM,kBAAkB,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC1D,IAAI,kBAAkB,YAAY,0BAA0B,EAAE;YAC5D,MAAM,yBAAyB,GAAG,kBAAkB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;YACzE,IAAI,yBAAyB,YAAY,0BAA0B,EAAE;gBACnE,+BAA+B,CAC7B,yBAAyB,EACzB,WAAW,CAAC,iBAAiB,CAAC,iBAAiB,CAAC,KAAK,CACtD,CAAC;aACH;SACF;QACD,KAAK,MAAM,QAAQ,IAAI,WAAW,CAAC,SAAS,EAAE;YAC5C,6EAA6E;YAC7E,6EAA6E;YAC7E,2CAA2C;YAC3C,MAAM,oBAAoB,GAAG,kBAAkB,CAAC,GAAG,EAAE,CACnD,QAAQ,CAAC,yBAAyB,CAAC,WAAW,EAAE,UAAU,CAAC,CAC5D,CAAC;YACF,IAAI,oBAAoB,EAAE;gBACxB,MAAM,YAAY,GAAG,kCAAkC,CACrD,oBAAoB,CAAC,uBAAuB,CAAC,kBAAkB,CAChE,CAAC,IAAI,CAAC;gBACP,MAAM,wBAAwB,GAC5B,UAAU,YAAY,uCAAuC;oBAC7D,UAAU,CAAC,mBAAmB;oBAC5B,CAAC,CAAC,UAAU,CAAC,mBAAmB;oBAChC,CAAC,CAAC,WAAW,CAAC,mBAAmB,CAAC;gBACtC,UAAU,CACR,wBAAwB,KAAK,YAAY,EACzC,iBAAiB,0BAA0B,CACzC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAC7D,wDAAwD,YAAY,gCAAgC,wBAAwB,GAAG,CACjI,CAAC;gBACF,WAAW,CAAC,eAAe,CACzB,IAAI,uCAAuC,CACzC,SAAS,EACT,oBAAoB,CACrB,EACD,UAAU,CACX,CAAC;gBACF,OAAO;aACR;SACF;QACD,MAAM,IAAI,yBAAyB,CACjC,mGAAmG,CACpG,CAAC;KACH;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CACrC,UAAoC,EACpC,iBAAoC,EAC9B,EAAE;IACR,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC;IAClD,MAAM,YAAY,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IACpD,UAAU,CACR,YAAY,EACZ,2BAA2B,EAC3B,yFAAyF,CAC1F,CAAC;IAEF,MAAM,UAAU,GAAG,oBAAoB,CACrC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EACtB,oEAAoE,CACrE,CAAC;IACF,UAAU,CACR,UAAU,CAAC,kBAAkB,CAAC,MAAM,KAAK,CAAC,EAC1C,oFAAoF,CACrF,CAAC;IACF,MAAM,cAAc,GAAG,aAAa,CAClC,UAAU,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAChC,wBAAwB,EACxB,oFAAoF,CACrF,CAAC;IAEF,UAAU,CACR,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAC/C,8EAA8E,CAC/E,CAAC;IACF,WAAW,CAAC,sBAAsB,CAChC,aAAa,CACX,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,EACrC,kBAAkB,EAClB,8EAA8E,CAC/E,CAAC,IAAI,CACP,CAAC;IAEF,iBAAiB,CAAC,cAAc,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAE1D;;;;;OAKG;IACH,WAAW,CAAC,YAAY,EAAE,CAAC;AAC7B,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBuilderFilterValueSpecificationBuilder.d.ts","sourceRoot":"","sources":["../../../src/stores/filter/QueryBuilderFilterValueSpecificationBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"QueryBuilderFilterValueSpecificationBuilder.d.ts","sourceRoot":"","sources":["../../../src/stores/filter/QueryBuilderFilterValueSpecificationBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAOH,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,KAAK,uBAAuB,EAM7B,MAAM,8BAA8B,CAAC;AA0ItC,eAAO,MAAM,qBAAqB,gBACnB,uBAAuB,kBACpB,cAAc,KAC7B,IA4BF,CAAC"}
|
|
@@ -13,15 +13,19 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { isNonNullable, guaranteeNonNullable } from '@finos/legend-shared';
|
|
16
|
+
import { isNonNullable, guaranteeNonNullable, guaranteeType, } from '@finos/legend-shared';
|
|
17
17
|
import { extractElementNameFromPath, SimpleFunctionExpression, } from '@finos/legend-graph';
|
|
18
18
|
import { buildGenericLambdaFunctionInstanceValue } from '../QueryBuilderValueSpecificationHelper.js';
|
|
19
19
|
import { fromGroupOperation } from '../QueryBuilderGroupOperationHelper.js';
|
|
20
|
-
import { QueryBuilderFilterTreeConditionNodeData, QueryBuilderFilterTreeGroupNodeData, } from './QueryBuilderFilterState.js';
|
|
20
|
+
import { QueryBuilderFilterTreeConditionNodeData, QueryBuilderFilterTreeGroupNodeData, QueryBuilderFilterTreeExistsNodeData, QueryBuilderFilterTreeOperationNodeData, } from './QueryBuilderFilterState.js';
|
|
21
21
|
import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../graph/QueryBuilderMetaModelConst.js';
|
|
22
|
+
import { DEFAULT_LAMBDA_VARIABLE_NAME } from '../QueryBuilderConfig.js';
|
|
22
23
|
const buildFilterConditionExpression = (filterState, node) => {
|
|
23
24
|
if (node instanceof QueryBuilderFilterTreeConditionNodeData) {
|
|
24
|
-
|
|
25
|
+
const parentNode = node.parentId
|
|
26
|
+
? guaranteeType(filterState.nodes.get(node.parentId), QueryBuilderFilterTreeOperationNodeData)
|
|
27
|
+
: undefined;
|
|
28
|
+
return node.condition.operator.buildFilterConditionExpression(node.condition, parentNode?.lambdaParameterName);
|
|
25
29
|
}
|
|
26
30
|
else if (node instanceof QueryBuilderFilterTreeGroupNodeData) {
|
|
27
31
|
const func = new SimpleFunctionExpression(extractElementNameFromPath(fromGroupOperation(node.groupOperation)));
|
|
@@ -55,6 +59,61 @@ const buildFilterConditionExpression = (filterState, node) => {
|
|
|
55
59
|
}
|
|
56
60
|
return func.parametersValues.length ? func : undefined;
|
|
57
61
|
}
|
|
62
|
+
else if (node instanceof QueryBuilderFilterTreeExistsNodeData) {
|
|
63
|
+
const func = new SimpleFunctionExpression(extractElementNameFromPath(QUERY_BUILDER_SUPPORTED_FUNCTIONS.EXISTS));
|
|
64
|
+
let parentNode = node.parentId
|
|
65
|
+
? guaranteeType(filterState.nodes.get(guaranteeNonNullable(node.parentId)), QueryBuilderFilterTreeOperationNodeData)
|
|
66
|
+
: undefined;
|
|
67
|
+
while (parentNode &&
|
|
68
|
+
!(parentNode instanceof QueryBuilderFilterTreeGroupNodeData)) {
|
|
69
|
+
parentNode = parentNode.parentId
|
|
70
|
+
? guaranteeType(filterState.nodes.get(guaranteeNonNullable(parentNode.parentId)), QueryBuilderFilterTreeOperationNodeData)
|
|
71
|
+
: undefined;
|
|
72
|
+
}
|
|
73
|
+
const propertyExpression = guaranteeNonNullable(node.propertyExpression);
|
|
74
|
+
const clauses = node.childrenIds
|
|
75
|
+
.map((e) => filterState.nodes.get(e))
|
|
76
|
+
.filter(isNonNullable)
|
|
77
|
+
.map((e) => buildFilterConditionExpression(filterState, e))
|
|
78
|
+
.filter(isNonNullable);
|
|
79
|
+
/**
|
|
80
|
+
* NOTE: Due to a limitation (or perhaps design decision) in the engine, group operations
|
|
81
|
+
* like and/or do not take more than 2 parameters, as such, if we have more than 2, we need
|
|
82
|
+
* to create a chain of this operation to accomondate.
|
|
83
|
+
*
|
|
84
|
+
* This means that in the read direction, we might need to flatten the chains down to group with
|
|
85
|
+
* multiple clauses. This means user's intended grouping will not be kept.
|
|
86
|
+
*/
|
|
87
|
+
let parametersValues;
|
|
88
|
+
if (clauses.length > 2) {
|
|
89
|
+
const firstClause = clauses[0];
|
|
90
|
+
let currentClause = clauses[clauses.length - 1];
|
|
91
|
+
for (let i = clauses.length - 2; i > 0; --i) {
|
|
92
|
+
const clause1 = clauses[i];
|
|
93
|
+
const clause2 = currentClause;
|
|
94
|
+
const groupClause = new SimpleFunctionExpression(guaranteeNonNullable(parentNode).groupOperation);
|
|
95
|
+
groupClause.parametersValues = [clause1, clause2];
|
|
96
|
+
currentClause = groupClause;
|
|
97
|
+
}
|
|
98
|
+
parametersValues = [firstClause, currentClause];
|
|
99
|
+
}
|
|
100
|
+
else if (clauses.length === 1) {
|
|
101
|
+
const lambdaFunctionInstanceValue = buildGenericLambdaFunctionInstanceValue(node.lambdaParameterName ?? DEFAULT_LAMBDA_VARIABLE_NAME, clauses, filterState.queryBuilderState.graphManagerState.graph);
|
|
102
|
+
func.parametersValues = [propertyExpression, lambdaFunctionInstanceValue];
|
|
103
|
+
return func;
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
parametersValues = clauses;
|
|
107
|
+
}
|
|
108
|
+
if (!parametersValues.length) {
|
|
109
|
+
return undefined;
|
|
110
|
+
}
|
|
111
|
+
const simp = new SimpleFunctionExpression(extractElementNameFromPath(fromGroupOperation(guaranteeNonNullable(parentNode).groupOperation)));
|
|
112
|
+
simp.parametersValues = parametersValues;
|
|
113
|
+
const lambdaFunctionInstanceValue = buildGenericLambdaFunctionInstanceValue(node.lambdaParameterName ?? DEFAULT_LAMBDA_VARIABLE_NAME, [simp], filterState.queryBuilderState.graphManagerState.graph);
|
|
114
|
+
func.parametersValues = [propertyExpression, lambdaFunctionInstanceValue];
|
|
115
|
+
return func;
|
|
116
|
+
}
|
|
58
117
|
return undefined;
|
|
59
118
|
};
|
|
60
119
|
export const buildFilterExpression = (filterState, lambdaFunction) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBuilderFilterValueSpecificationBuilder.js","sourceRoot":"","sources":["../../../src/stores/filter/QueryBuilderFilterValueSpecificationBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"QueryBuilderFilterValueSpecificationBuilder.js","sourceRoot":"","sources":["../../../src/stores/filter/QueryBuilderFilterValueSpecificationBuilder.ts"],"names":[],"mappings":"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"}
|
package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.d.ts
CHANGED
|
@@ -16,6 +16,6 @@
|
|
|
16
16
|
import { type ValueSpecification, SimpleFunctionExpression } from '@finos/legend-graph';
|
|
17
17
|
import { FilterConditionState, type QueryBuilderFilterState } from '../QueryBuilderFilterState.js';
|
|
18
18
|
import type { QueryBuilderFilterOperator } from '../QueryBuilderFilterOperator.js';
|
|
19
|
-
export declare const buildFilterConditionExpression: (filterConditionState: FilterConditionState, operatorFunctionFullPath: string) => ValueSpecification;
|
|
19
|
+
export declare const buildFilterConditionExpression: (filterConditionState: FilterConditionState, operatorFunctionFullPath: string, lambdaParameterName?: string | undefined) => ValueSpecification;
|
|
20
20
|
export declare const buildFilterConditionState: (filterState: QueryBuilderFilterState, expression: SimpleFunctionExpression, operatorFunctionFullPath: string, operator: QueryBuilderFilterOperator, hasNoValue?: boolean) => FilterConditionState | undefined;
|
|
21
21
|
//# sourceMappingURL=QueryBuilderFilterOperatorValueSpecificationBuilder.d.ts.map
|
package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBuilderFilterOperatorValueSpecificationBuilder.d.ts","sourceRoot":"","sources":["../../../../src/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,KAAK,kBAAkB,
|
|
1
|
+
{"version":3,"file":"QueryBuilderFilterOperatorValueSpecificationBuilder.d.ts","sourceRoot":"","sources":["../../../../src/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,KAAK,kBAAkB,EAKvB,wBAAwB,EAEzB,MAAM,qBAAqB,CAAC;AAM7B,OAAO,EACL,oBAAoB,EACpB,KAAK,uBAAuB,EAC7B,MAAM,+BAA+B,CAAC;AAGvC,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAGnF,eAAO,MAAM,8BAA8B,yBACnB,oBAAoB,4BAChB,MAAM,wBACV,MAAM,GAAG,SAAS,KACvC,kBAeF,CAAC;AAEF,eAAO,MAAM,yBAAyB,gBACvB,uBAAuB,cACxB,wBAAwB,4BACV,MAAM,YACtB,0BAA0B,2BAOnC,oBAAoB,GAAG,SAuGzB,CAAC"}
|
|
@@ -13,114 +13,15 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { extractElementNameFromPath, matchFunctionName, LambdaFunctionInstanceValue,
|
|
17
|
-
import { guaranteeType, guaranteeNonNullable, assertTrue,
|
|
16
|
+
import { extractElementNameFromPath, matchFunctionName, LambdaFunctionInstanceValue, AbstractPropertyExpression, SimpleFunctionExpression, LambdaFunction, } from '@finos/legend-graph';
|
|
17
|
+
import { guaranteeType, guaranteeNonNullable, assertTrue, } from '@finos/legend-shared';
|
|
18
18
|
import { FilterConditionState, } from '../QueryBuilderFilterState.js';
|
|
19
19
|
import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../../graph/QueryBuilderMetaModelConst.js';
|
|
20
|
-
import {
|
|
20
|
+
import { simplifyValueExpression } from '../../QueryBuilderValueSpecificationHelper.js';
|
|
21
21
|
import { buildPropertyExpressionChain } from '../../QueryBuilderValueSpecificationBuilderHelper.js';
|
|
22
|
-
const
|
|
23
|
-
let currentExpression = propertyExpression;
|
|
24
|
-
while (currentExpression instanceof AbstractPropertyExpression) {
|
|
25
|
-
currentExpression = guaranteeNonNullable(currentExpression.parametersValues[0]);
|
|
26
|
-
// Take care of chains of subtype (a pattern that is not useful, but we want to support and rectify)
|
|
27
|
-
// $x.employees->subType(@Person)->subType(@Staff)
|
|
28
|
-
while (currentExpression instanceof SimpleFunctionExpression &&
|
|
29
|
-
matchFunctionName(currentExpression.functionName, QUERY_BUILDER_SUPPORTED_FUNCTIONS.SUBTYPE)) {
|
|
30
|
-
currentExpression = guaranteeNonNullable(currentExpression.parametersValues[0]);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
return guaranteeType(currentExpression, VariableExpression);
|
|
34
|
-
};
|
|
35
|
-
const buildFilterConditionExpressionWithExists = (filterConditionState, operatorFunctionFullPath) => {
|
|
36
|
-
assertTrue(filterConditionState.propertyExpressionState.requiresExistsHandling);
|
|
37
|
-
// 1. Decompose property expression
|
|
38
|
-
const expressions = [];
|
|
39
|
-
let currentPropertyExpression = buildPropertyExpressionChain(filterConditionState.propertyExpressionState.propertyExpression, filterConditionState.propertyExpressionState.queryBuilderState, filterConditionState.filterState.lambdaParameterName);
|
|
40
|
-
while (currentPropertyExpression instanceof AbstractPropertyExpression ||
|
|
41
|
-
(currentPropertyExpression instanceof SimpleFunctionExpression &&
|
|
42
|
-
matchFunctionName(currentPropertyExpression.functionName, QUERY_BUILDER_SUPPORTED_FUNCTIONS.SUBTYPE))) {
|
|
43
|
-
let exp;
|
|
44
|
-
if (currentPropertyExpression instanceof SimpleFunctionExpression) {
|
|
45
|
-
exp = new SimpleFunctionExpression(extractElementNameFromPath(QUERY_BUILDER_SUPPORTED_FUNCTIONS.SUBTYPE));
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
exp = new AbstractPropertyExpression('');
|
|
49
|
-
exp.func = currentPropertyExpression.func;
|
|
50
|
-
}
|
|
51
|
-
// NOTE: we must retain the rest of the parameters as those are derived property parameters
|
|
52
|
-
exp.parametersValues =
|
|
53
|
-
currentPropertyExpression.parametersValues.length > 1
|
|
54
|
-
? currentPropertyExpression.parametersValues.slice(1)
|
|
55
|
-
: [];
|
|
56
|
-
expressions.push(exp);
|
|
57
|
-
currentPropertyExpression = guaranteeNonNullable(currentPropertyExpression.parametersValues[0]);
|
|
58
|
-
}
|
|
59
|
-
const rootVariable = guaranteeType(currentPropertyExpression, VariableExpression);
|
|
60
|
-
// 2. Traverse the list of decomposed property expression backward, every time we encounter a property of
|
|
61
|
-
// multiplicity many, create a new property expression and keep track of it to later form the lambda chain
|
|
62
|
-
const existsLambdaParamNames = [
|
|
63
|
-
...filterConditionState.existsLambdaParamNames,
|
|
64
|
-
];
|
|
65
|
-
const existsLambdaPropertyChains = [rootVariable];
|
|
66
|
-
let currentParamNameIndex = 0;
|
|
67
|
-
for (let i = expressions.length - 1; i >= 0; --i) {
|
|
68
|
-
const exp = expressions[i];
|
|
69
|
-
// just keep adding to the property chain
|
|
70
|
-
exp.parametersValues.unshift(existsLambdaPropertyChains[existsLambdaPropertyChains.length - 1]);
|
|
71
|
-
existsLambdaPropertyChains[existsLambdaPropertyChains.length - 1] = exp;
|
|
72
|
-
// ... but if the property is of multiplicity multiple, start a new property chain
|
|
73
|
-
if (exp instanceof AbstractPropertyExpression &&
|
|
74
|
-
(exp.func.value.multiplicity.upperBound === undefined ||
|
|
75
|
-
exp.func.value.multiplicity.upperBound > 1)) {
|
|
76
|
-
// NOTE: we need to find/generate the property chain variable name
|
|
77
|
-
// here, by doing this, we try our best to respect original/user-input variable name
|
|
78
|
-
if (currentParamNameIndex > existsLambdaParamNames.length - 1) {
|
|
79
|
-
existsLambdaParamNames.push(generateEnumerableNameFromToken(existsLambdaParamNames, filterConditionState.filterState.lambdaParameterName));
|
|
80
|
-
assertTrue(currentParamNameIndex === existsLambdaParamNames.length - 1);
|
|
81
|
-
}
|
|
82
|
-
existsLambdaPropertyChains.push(new VariableExpression(existsLambdaParamNames[currentParamNameIndex], Multiplicity.ONE));
|
|
83
|
-
currentParamNameIndex++;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
// 3. Build each property chain into an exists() simple function expression
|
|
87
|
-
const simpleFunctionExpressions = [];
|
|
88
|
-
for (let i = 0; i < existsLambdaPropertyChains.length - 1; ++i) {
|
|
89
|
-
const simpleFunctionExpression = new SimpleFunctionExpression(extractElementNameFromPath(QUERY_BUILDER_SUPPORTED_FUNCTIONS.EXISTS));
|
|
90
|
-
simpleFunctionExpression.parametersValues.push(existsLambdaPropertyChains[i]);
|
|
91
|
-
simpleFunctionExpressions.push(simpleFunctionExpression);
|
|
92
|
-
}
|
|
93
|
-
// build the leaf simple function expression which uses the operator
|
|
94
|
-
const operatorEpression = new SimpleFunctionExpression(extractElementNameFromPath(operatorFunctionFullPath));
|
|
95
|
-
operatorEpression.parametersValues.push(existsLambdaPropertyChains[existsLambdaPropertyChains.length - 1]);
|
|
96
|
-
// NOTE: there are simple operators which do not require any params (e.g. isEmpty)
|
|
97
|
-
if (filterConditionState.value) {
|
|
98
|
-
operatorEpression.parametersValues.push(filterConditionState.value);
|
|
99
|
-
}
|
|
100
|
-
simpleFunctionExpressions.push(operatorEpression);
|
|
101
|
-
// 4. Build the exists() lambda chain
|
|
102
|
-
assertTrue(simpleFunctionExpressions.length >= 2);
|
|
103
|
-
for (let i = simpleFunctionExpressions.length - 2; i >= 0; --i) {
|
|
104
|
-
const currentSFE = simpleFunctionExpressions[i];
|
|
105
|
-
const childSFE = simpleFunctionExpressions[i + 1];
|
|
106
|
-
// build child SFE lambda
|
|
107
|
-
const _existsLambdaVariable = childSFE.parametersValues[0];
|
|
108
|
-
const existsLambdaVariable = _existsLambdaVariable instanceof AbstractPropertyExpression
|
|
109
|
-
? getPropertyExpressionChainVariable(_existsLambdaVariable)
|
|
110
|
-
: guaranteeType(_existsLambdaVariable, VariableExpression);
|
|
111
|
-
const existsLambda = buildGenericLambdaFunctionInstanceValue(existsLambdaVariable.name, [childSFE], filterConditionState.filterState.queryBuilderState.graphManagerState
|
|
112
|
-
.graph);
|
|
113
|
-
// add the child SFE lambda to the current SFE parameters
|
|
114
|
-
currentSFE.parametersValues.push(existsLambda);
|
|
115
|
-
}
|
|
116
|
-
return simpleFunctionExpressions[0];
|
|
117
|
-
};
|
|
118
|
-
export const buildFilterConditionExpression = (filterConditionState, operatorFunctionFullPath) => {
|
|
119
|
-
if (filterConditionState.propertyExpressionState.requiresExistsHandling) {
|
|
120
|
-
return buildFilterConditionExpressionWithExists(filterConditionState, operatorFunctionFullPath);
|
|
121
|
-
}
|
|
22
|
+
export const buildFilterConditionExpression = (filterConditionState, operatorFunctionFullPath, lambdaParameterName) => {
|
|
122
23
|
const expression = new SimpleFunctionExpression(extractElementNameFromPath(operatorFunctionFullPath));
|
|
123
|
-
const propertyExpression = buildPropertyExpressionChain(filterConditionState.propertyExpressionState.propertyExpression, filterConditionState.propertyExpressionState.queryBuilderState, filterConditionState.filterState.lambdaParameterName);
|
|
24
|
+
const propertyExpression = buildPropertyExpressionChain(filterConditionState.propertyExpressionState.propertyExpression, filterConditionState.propertyExpressionState.queryBuilderState, lambdaParameterName ?? filterConditionState.filterState.lambdaParameterName);
|
|
124
25
|
expression.parametersValues.push(guaranteeNonNullable(propertyExpression));
|
|
125
26
|
// NOTE: there are simple operators which do not require any params (e.g. isEmpty)
|
|
126
27
|
if (filterConditionState.value) {
|
|
@@ -128,90 +29,6 @@ export const buildFilterConditionExpression = (filterConditionState, operatorFun
|
|
|
128
29
|
}
|
|
129
30
|
return expression;
|
|
130
31
|
};
|
|
131
|
-
/**
|
|
132
|
-
* Handling exists() lambda found in the filter condition expression.
|
|
133
|
-
* The general approach for handling exists() is we will flat out the chain
|
|
134
|
-
* of exists() expressions into a normal filter condition state.
|
|
135
|
-
*
|
|
136
|
-
* When we build the condition function expression from the filter condition state,
|
|
137
|
-
* we walk the property expression chain, find property with multiplitiy upper bound
|
|
138
|
-
* other than 1 and create an exists() lambda there
|
|
139
|
-
*
|
|
140
|
-
* NOTE: to ensure we respect user's choice of variable name, as we build the state
|
|
141
|
-
* we record the lambda parameter names, so we can use those while re-building the function
|
|
142
|
-
* If for some reason, this list is stale, we can start adding our own parameter names
|
|
143
|
-
*/
|
|
144
|
-
const buildFilterConditionStateWithExists = (filterState, parentExpression, operatorFunctionFullPath) => {
|
|
145
|
-
if (matchFunctionName(parentExpression.functionName, QUERY_BUILDER_SUPPORTED_FUNCTIONS.EXISTS)) {
|
|
146
|
-
// 1. Decompose the exists() lambda chain into property expression chains
|
|
147
|
-
const existsLambdaParameterNames = [];
|
|
148
|
-
// `existsLambdaExpressions` should be a list of `AbstractPropertyExpression`
|
|
149
|
-
// e.g. |Firm.all()->filter(x|$x.employees->exists(x_1|$x_1->subType(@Develper).id->exists(x_2|$x_2 == 1))
|
|
150
|
-
// In the first exists() lambda, `$x_1->subType(@Develper).id` is an `AbstractPropertyExpression`.
|
|
151
|
-
const existsLambdaExpressions = [];
|
|
152
|
-
let mainFilterExpression = parentExpression;
|
|
153
|
-
while (matchFunctionName(mainFilterExpression.functionName, QUERY_BUILDER_SUPPORTED_FUNCTIONS.EXISTS)) {
|
|
154
|
-
const existsLambda = guaranteeNonNullable(guaranteeType(mainFilterExpression.parametersValues[1], LambdaFunctionInstanceValue).values[0], `Can't process exists() expression: exists() lambda is missing`);
|
|
155
|
-
assertTrue(existsLambda.expressionSequence.length === 1, `Can't process exists() expression: exists() lambda body should hold an expression`);
|
|
156
|
-
mainFilterExpression = guaranteeType(existsLambda.expressionSequence[0], SimpleFunctionExpression, `Can't process exists() expression: exists() lambda body should hold an expression`);
|
|
157
|
-
// record the lambda parameter name
|
|
158
|
-
assertTrue(existsLambda.functionType.parameters.length === 1, `Can't process exists() expression: exists() lambda should have 1 parameter`);
|
|
159
|
-
existsLambdaParameterNames.push(guaranteeType(existsLambda.functionType.parameters[0], VariableExpression, `Can't process exists() expression: exists() lambda should have 1 parameter`).name);
|
|
160
|
-
// record the lambda property expression
|
|
161
|
-
if (mainFilterExpression.parametersValues[0] instanceof
|
|
162
|
-
AbstractPropertyExpression) {
|
|
163
|
-
existsLambdaExpressions.push(mainFilterExpression.parametersValues[0]);
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
// NOTE: make sure that the inner most function expression is the one we support
|
|
167
|
-
if (!matchFunctionName(mainFilterExpression.functionName, operatorFunctionFullPath)) {
|
|
168
|
-
return [undefined, undefined];
|
|
169
|
-
}
|
|
170
|
-
// 2. Build the property expression
|
|
171
|
-
const initialPropertyExpression = guaranteeType(parentExpression.parametersValues[0], AbstractPropertyExpression);
|
|
172
|
-
let flattenedPropertyExpressionChain = new AbstractPropertyExpression('');
|
|
173
|
-
flattenedPropertyExpressionChain.func = initialPropertyExpression.func;
|
|
174
|
-
flattenedPropertyExpressionChain.parametersValues = [
|
|
175
|
-
...initialPropertyExpression.parametersValues,
|
|
176
|
-
];
|
|
177
|
-
for (const expression of existsLambdaExpressions) {
|
|
178
|
-
// when rebuilding the property expression chain, disregard the initial variable that starts the chain
|
|
179
|
-
const expressions = [];
|
|
180
|
-
let currentExpression = expression;
|
|
181
|
-
while (currentExpression instanceof AbstractPropertyExpression ||
|
|
182
|
-
(currentExpression instanceof SimpleFunctionExpression &&
|
|
183
|
-
matchFunctionName(currentExpression.functionName, QUERY_BUILDER_SUPPORTED_FUNCTIONS.SUBTYPE))) {
|
|
184
|
-
if (currentExpression instanceof SimpleFunctionExpression) {
|
|
185
|
-
const functionExpression = new SimpleFunctionExpression(extractElementNameFromPath(QUERY_BUILDER_SUPPORTED_FUNCTIONS.SUBTYPE));
|
|
186
|
-
functionExpression.parametersValues.unshift(guaranteeNonNullable(currentExpression.parametersValues[1]));
|
|
187
|
-
expressions.push(functionExpression);
|
|
188
|
-
}
|
|
189
|
-
else if (currentExpression instanceof AbstractPropertyExpression) {
|
|
190
|
-
const propertyExpression = new AbstractPropertyExpression('');
|
|
191
|
-
propertyExpression.func = currentExpression.func;
|
|
192
|
-
// NOTE: we must retain the rest of the parameters as those are derived property parameters
|
|
193
|
-
propertyExpression.parametersValues =
|
|
194
|
-
currentExpression.parametersValues.length > 1
|
|
195
|
-
? currentExpression.parametersValues.slice(1)
|
|
196
|
-
: [];
|
|
197
|
-
expressions.push(propertyExpression);
|
|
198
|
-
}
|
|
199
|
-
currentExpression = guaranteeNonNullable(currentExpression.parametersValues[0]);
|
|
200
|
-
}
|
|
201
|
-
assertTrue(expressions.length > 0, `Can't process exists() expression: exists() usage with non-chain property expression is not supported`);
|
|
202
|
-
for (let i = 0; i < expressions.length - 1; ++i) {
|
|
203
|
-
expressions[i].parametersValues.unshift(expressions[i + 1]);
|
|
204
|
-
}
|
|
205
|
-
expressions[expressions.length - 1].parametersValues.unshift(flattenedPropertyExpressionChain);
|
|
206
|
-
flattenedPropertyExpressionChain = guaranteeType(expressions[0], AbstractPropertyExpression, `Can't process exists() expression: can't flatten to a property expression`);
|
|
207
|
-
}
|
|
208
|
-
// 3. Build the filter condition state with the simplified property expression
|
|
209
|
-
const filterConditionState = new FilterConditionState(filterState, flattenedPropertyExpressionChain);
|
|
210
|
-
existsLambdaParameterNames.forEach((paramName) => filterConditionState.addExistsLambdaParamNames(paramName));
|
|
211
|
-
return [filterConditionState, mainFilterExpression];
|
|
212
|
-
}
|
|
213
|
-
return [undefined, undefined];
|
|
214
|
-
};
|
|
215
32
|
export const buildFilterConditionState = (filterState, expression, operatorFunctionFullPath, operator,
|
|
216
33
|
/**
|
|
217
34
|
* Use this flag for operator that does not require any param (e.g. isEmpty)
|
|
@@ -227,14 +44,17 @@ hasNoValue = false) => {
|
|
|
227
44
|
if (matchFunctionName(expression.functionName, operatorFunctionFullPath)) {
|
|
228
45
|
assertTrue(expression.parametersValues.length === (hasNoValue ? 1 : 2), `Can't process ${extractElementNameFromPath(operatorFunctionFullPath)}() expression: ${extractElementNameFromPath(operatorFunctionFullPath)}() expects ${hasNoValue ? 'no argument' : '1 argument'}`);
|
|
229
46
|
const propertyExpression = guaranteeType(expression.parametersValues[0], AbstractPropertyExpression, `Can't process ${extractElementNameFromPath(operatorFunctionFullPath)}() expression: expects property expression in lambda body`);
|
|
230
|
-
const variableName = getPropertyExpressionChainVariable(propertyExpression).name;
|
|
231
|
-
assertTrue(filterState.lambdaParameterName === variableName, `Can't process ${extractElementNameFromPath(operatorFunctionFullPath)}() expression: expects variable used in lambda body '${variableName}' to match lambda parameter '${filterState.lambdaParameterName}'`);
|
|
232
47
|
filterConditionState = new FilterConditionState(filterState, propertyExpression);
|
|
233
48
|
mainExpressionWithOperator = expression;
|
|
234
49
|
}
|
|
235
50
|
else if (matchFunctionName(expression.functionName, QUERY_BUILDER_SUPPORTED_FUNCTIONS.EXISTS)) {
|
|
236
|
-
[
|
|
237
|
-
|
|
51
|
+
const lambdaFunctionInstance = guaranteeType(expression.parametersValues[1], LambdaFunctionInstanceValue);
|
|
52
|
+
const lambdaFunction = guaranteeType(lambdaFunctionInstance.values[0], LambdaFunction);
|
|
53
|
+
const filterExpression = guaranteeType(lambdaFunction.expressionSequence[0], SimpleFunctionExpression);
|
|
54
|
+
assertTrue(filterExpression.parametersValues.length === (hasNoValue ? 1 : 2), `Can't process ${extractElementNameFromPath(operatorFunctionFullPath)}() expression: ${extractElementNameFromPath(operatorFunctionFullPath)}() expects ${hasNoValue ? 'no argument' : '1 argument'}`);
|
|
55
|
+
const propertyExpression = guaranteeType(filterExpression.parametersValues[0], AbstractPropertyExpression, `Can't process ${extractElementNameFromPath(operatorFunctionFullPath)}() expression: expects property expression in lambda body`);
|
|
56
|
+
filterConditionState = new FilterConditionState(filterState, propertyExpression);
|
|
57
|
+
mainExpressionWithOperator = filterExpression;
|
|
238
58
|
}
|
|
239
59
|
// Post-build check: make sure the simple filter condition LHS, RHS, and operator are compatible
|
|
240
60
|
// and set the value of the condition in the state accordingly.
|
package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBuilderFilterOperatorValueSpecificationBuilder.js","sourceRoot":"","sources":["../../../../src/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QueryBuilderFilterOperatorValueSpecificationBuilder.js","sourceRoot":"","sources":["../../../../src/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,13 +22,13 @@ export declare class QueryBuilderFilterOperator_Contain extends QueryBuilderFilt
|
|
|
22
22
|
isCompatibleWithFilterConditionProperty(filterConditionState: FilterConditionState): boolean;
|
|
23
23
|
isCompatibleWithFilterConditionValue(filterConditionState: FilterConditionState): boolean;
|
|
24
24
|
getDefaultFilterConditionValue(filterConditionState: FilterConditionState): ValueSpecification | undefined;
|
|
25
|
-
buildFilterConditionExpression(filterConditionState: FilterConditionState): ValueSpecification;
|
|
25
|
+
buildFilterConditionExpression(filterConditionState: FilterConditionState, lambdaParameterName?: string | undefined): ValueSpecification;
|
|
26
26
|
buildFilterConditionState(filterState: QueryBuilderFilterState, expression: SimpleFunctionExpression): FilterConditionState | undefined;
|
|
27
27
|
get hashCode(): string;
|
|
28
28
|
}
|
|
29
29
|
export declare class QueryBuilderFilterOperator_NotContain extends QueryBuilderFilterOperator_Contain {
|
|
30
30
|
getLabel(filterConditionState: FilterConditionState): string;
|
|
31
|
-
buildFilterConditionExpression(filterConditionState: FilterConditionState): ValueSpecification;
|
|
31
|
+
buildFilterConditionExpression(filterConditionState: FilterConditionState, lambdaParameterName?: string | undefined): ValueSpecification;
|
|
32
32
|
buildFilterConditionState(filterState: QueryBuilderFilterState, expression: SimpleFunctionExpression): FilterConditionState | undefined;
|
|
33
33
|
get hashCode(): string;
|
|
34
34
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QueryBuilderFilterOperator_Contain.d.ts","sourceRoot":"","sources":["../../../../src/stores/filter/operators/QueryBuilderFilterOperator_Contain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAE9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,QAAQ,EAGd,MAAM,sBAAsB,CAAC;AAe9B,qBAAa,kCACX,SAAQ,0BACR,YAAW,QAAQ;IAEnB,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,MAAM;IAI5D,uCAAuC,CACrC,oBAAoB,EAAE,oBAAoB,GACzC,OAAO;IAQV,oCAAoC,CAClC,oBAAoB,EAAE,oBAAoB,GACzC,OAAO;IAOV,8BAA8B,CAC5B,oBAAoB,EAAE,oBAAoB,GACzC,kBAAkB,GAAG,SAAS;IAuBjC,8BAA8B,CAC5B,oBAAoB,EAAE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"QueryBuilderFilterOperator_Contain.d.ts","sourceRoot":"","sources":["../../../../src/stores/filter/operators/QueryBuilderFilterOperator_Contain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EACV,uBAAuB,EACvB,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,0BAA0B,EAAE,MAAM,kCAAkC,CAAC;AAC9E,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAE9B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,QAAQ,EAGd,MAAM,sBAAsB,CAAC;AAe9B,qBAAa,kCACX,SAAQ,0BACR,YAAW,QAAQ;IAEnB,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,MAAM;IAI5D,uCAAuC,CACrC,oBAAoB,EAAE,oBAAoB,GACzC,OAAO;IAQV,oCAAoC,CAClC,oBAAoB,EAAE,oBAAoB,GACzC,OAAO;IAOV,8BAA8B,CAC5B,oBAAoB,EAAE,oBAAoB,GACzC,kBAAkB,GAAG,SAAS;IAuBjC,8BAA8B,CAC5B,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,GACvC,kBAAkB;IAQrB,yBAAyB,CACvB,WAAW,EAAE,uBAAuB,EACpC,UAAU,EAAE,wBAAwB,GACnC,oBAAoB,GAAG,SAAS;IASnC,IAAI,QAAQ,IAAI,MAAM,CAIrB;CACF;AAED,qBAAa,qCAAsC,SAAQ,kCAAkC;IAClF,QAAQ,CAAC,oBAAoB,EAAE,oBAAoB,GAAG,MAAM;IAI5D,8BAA8B,CACrC,oBAAoB,EAAE,oBAAoB,EAC1C,mBAAmB,CAAC,EAAE,MAAM,GAAG,SAAS,GACvC,kBAAkB;IASZ,yBAAyB,CAChC,WAAW,EAAE,uBAAuB,EACpC,UAAU,EAAE,wBAAwB,GACnC,oBAAoB,GAAG,SAAS;IAOnC,IAAa,QAAQ,IAAI,MAAM,CAI9B;CACF"}
|