@finos/legend-query-builder 1.0.5 → 2.0.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/application/QueryBuilderEvent.d.ts +7 -7
- package/lib/application/QueryBuilderEvent.d.ts.map +1 -1
- package/lib/application/QueryBuilderEvent.js +7 -7
- package/lib/application/QueryBuilderEvent.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderFetchStructurePanel.js +2 -2
- package/lib/components/fetch-structure/QueryBuilderFetchStructurePanel.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderGraphFetchTreePanel.d.ts +3 -2
- package/lib/components/fetch-structure/QueryBuilderGraphFetchTreePanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderGraphFetchTreePanel.js +53 -13
- package/lib/components/fetch-structure/QueryBuilderGraphFetchTreePanel.js.map +1 -1
- package/lib/graphManager/QueryBuilderSupportedFunctions.d.ts +1 -0
- package/lib/graphManager/QueryBuilderSupportedFunctions.d.ts.map +1 -1
- package/lib/graphManager/QueryBuilderSupportedFunctions.js +1 -0
- package/lib/graphManager/QueryBuilderSupportedFunctions.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/QueryBuilderStateBuilder.d.ts +2 -1
- package/lib/stores/QueryBuilderStateBuilder.d.ts.map +1 -1
- package/lib/stores/QueryBuilderStateBuilder.js +8 -1
- package/lib/stores/QueryBuilderStateBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts +1 -0
- package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.js.map +1 -1
- package/lib/stores/fetch-structure/QueryBuilderFetchStructureState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/QueryBuilderFetchStructureState.js +3 -2
- package/lib/stores/fetch-structure/QueryBuilderFetchStructureState.js.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts +49 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js +126 -0
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.js.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.d.ts +1 -0
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.d.ts.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.js +85 -4
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeValueSpecificationBuilder.d.ts +3 -2
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeValueSpecificationBuilder.d.ts.map +1 -1
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeValueSpecificationBuilder.js +96 -14
- package/lib/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeValueSpecificationBuilder.js.map +1 -1
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts +1 -0
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.d.ts.map +1 -1
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js +6 -0
- package/lib/stores/fetch-structure/tds/QueryBuilderTDSState.js.map +1 -1
- package/package.json +13 -13
- package/src/application/QueryBuilderEvent.ts +7 -7
- package/src/components/fetch-structure/QueryBuilderFetchStructurePanel.tsx +2 -2
- package/src/components/fetch-structure/QueryBuilderGraphFetchTreePanel.tsx +240 -5
- package/src/graphManager/QueryBuilderSupportedFunctions.ts +1 -0
- package/src/stores/QueryBuilderStateBuilder.ts +20 -0
- package/src/stores/fetch-structure/QueryBuilderFetchStructureImplementationState.ts +2 -0
- package/src/stores/fetch-structure/QueryBuilderFetchStructureState.ts +3 -2
- package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeState.ts +158 -0
- package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeStateBuilder.ts +258 -4
- package/src/stores/fetch-structure/graph-fetch/QueryBuilderGraphFetchTreeValueSpecificationBuilder.ts +166 -24
- package/src/stores/fetch-structure/tds/QueryBuilderTDSState.ts +7 -0
@@ -15,19 +15,45 @@
|
|
15
15
|
*/
|
16
16
|
|
17
17
|
import {
|
18
|
+
PrimitiveInstanceValue,
|
19
|
+
type KeyExpression,
|
20
|
+
PRIMITIVE_TYPE,
|
18
21
|
type LambdaFunction,
|
19
22
|
GraphFetchTreeInstanceValue,
|
20
23
|
matchFunctionName,
|
21
24
|
RootGraphFetchTree,
|
22
25
|
SimpleFunctionExpression,
|
26
|
+
InstanceValue,
|
27
|
+
PackageableElementReference,
|
28
|
+
Binding,
|
29
|
+
SUPPORTED_FUNCTIONS,
|
30
|
+
Class,
|
31
|
+
PURE_SERIALIZE_CONFIG_CLASS,
|
32
|
+
KeyExpressionInstanceValue,
|
33
|
+
CollectionInstanceValue,
|
34
|
+
getClassProperty,
|
35
|
+
PrimitiveType,
|
23
36
|
} from '@finos/legend-graph';
|
24
|
-
import {
|
37
|
+
import {
|
38
|
+
assertIsBoolean,
|
39
|
+
assertIsString,
|
40
|
+
assertTrue,
|
41
|
+
guaranteeIsString,
|
42
|
+
guaranteeNonNullable,
|
43
|
+
guaranteeType,
|
44
|
+
} from '@finos/legend-shared';
|
25
45
|
import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../../graphManager/QueryBuilderSupportedFunctions.js';
|
26
46
|
import type { QueryBuilderState } from '../../QueryBuilderState.js';
|
27
47
|
import { QueryBuilderValueSpecificationProcessor } from '../../QueryBuilderStateBuilder.js';
|
28
48
|
import { FETCH_STRUCTURE_IMPLEMENTATION } from '../QueryBuilderFetchStructureImplementationState.js';
|
29
|
-
import {
|
49
|
+
import {
|
50
|
+
GraphFetchExternalFormatSerializationState,
|
51
|
+
GraphFetchPureSerializationState,
|
52
|
+
PureSerializationConfig,
|
53
|
+
QueryBuilderGraphFetchTreeState,
|
54
|
+
} from './QueryBuilderGraphFetchTreeState.js';
|
30
55
|
import { buildGraphFetchTreeData } from './QueryBuilderGraphFetchTreeUtil.js';
|
56
|
+
import {} from 'mobx';
|
31
57
|
|
32
58
|
export const processGraphFetchExpression = (
|
33
59
|
expression: SimpleFunctionExpression,
|
@@ -77,6 +103,67 @@ export const processGraphFetchExpression = (
|
|
77
103
|
}
|
78
104
|
};
|
79
105
|
|
106
|
+
type PropertyValue = object | string | number | boolean;
|
107
|
+
|
108
|
+
// Dynamically sets key values of config
|
109
|
+
// TODO we can further enhance this by making configInstance just a list of key value pairs and using class config definition to render in query builder
|
110
|
+
const processKeyExpressionValueOnSerializationConfig = (
|
111
|
+
keyExpression: KeyExpression,
|
112
|
+
configInstance: Record<PropertyKey, PropertyValue>,
|
113
|
+
configClassDef: Class,
|
114
|
+
idx: number,
|
115
|
+
): void => {
|
116
|
+
// initial checks
|
117
|
+
const expressionKey = guaranteeType(
|
118
|
+
keyExpression.key,
|
119
|
+
PrimitiveInstanceValue,
|
120
|
+
`Can't process serialize() expression: serialization config key expression ${idx} key expected to be a primitive value`,
|
121
|
+
);
|
122
|
+
assertTrue(
|
123
|
+
expressionKey.genericType.value.rawType.path === PRIMITIVE_TYPE.STRING,
|
124
|
+
`Can't process serialize() expression: serialization config key expression ${idx} key expected to be a primitive string value`,
|
125
|
+
);
|
126
|
+
const keyValue = guaranteeIsString(
|
127
|
+
expressionKey.values[0],
|
128
|
+
`Can't process serialize() expression: serialization config key expression ${idx} expected to be a non-nullable primitive string value`,
|
129
|
+
);
|
130
|
+
// check instance
|
131
|
+
const properties = Object.getOwnPropertyNames(configInstance);
|
132
|
+
guaranteeNonNullable(
|
133
|
+
properties.find((prop) => prop === keyValue),
|
134
|
+
`Property name '${keyValue}' not defined in serialization config, accepted properties are ${properties.join(
|
135
|
+
',',
|
136
|
+
)}`,
|
137
|
+
);
|
138
|
+
// check class
|
139
|
+
const _classProperty = getClassProperty(configClassDef, keyValue);
|
140
|
+
const _classType = guaranteeType(
|
141
|
+
_classProperty.genericType.value.rawType,
|
142
|
+
PrimitiveType,
|
143
|
+
`Only primitive types suppported for config. Property ${keyValue} for class ${PURE_SERIALIZE_CONFIG_CLASS} is of type ${_classProperty.genericType.value.rawType.path}`,
|
144
|
+
);
|
145
|
+
const expressionValue = guaranteeNonNullable(
|
146
|
+
guaranteeType(
|
147
|
+
keyExpression.expression,
|
148
|
+
PrimitiveInstanceValue,
|
149
|
+
`Can't process serialize() expression: config key expression's value expected to be a primitive instance value`,
|
150
|
+
).values[0],
|
151
|
+
`Can't process serialize() expression: config key expression's value expected to be a non nullable primitive value`,
|
152
|
+
);
|
153
|
+
// TODO move to separate method and make it more robust
|
154
|
+
switch (_classType.path) {
|
155
|
+
case PRIMITIVE_TYPE.STRING:
|
156
|
+
assertIsString(expressionValue);
|
157
|
+
break;
|
158
|
+
case PRIMITIVE_TYPE.BOOLEAN:
|
159
|
+
assertIsBoolean(expressionValue);
|
160
|
+
break;
|
161
|
+
default:
|
162
|
+
return;
|
163
|
+
}
|
164
|
+
configInstance[keyValue] = expressionValue as PropertyValue;
|
165
|
+
};
|
166
|
+
|
80
167
|
export const processGraphFetchSerializeExpression = (
|
81
168
|
expression: SimpleFunctionExpression,
|
82
169
|
queryBuilderState: QueryBuilderState,
|
@@ -89,8 +176,9 @@ export const processGraphFetchSerializeExpression = (
|
|
89
176
|
|
90
177
|
// check parameters
|
91
178
|
assertTrue(
|
92
|
-
expression.parametersValues.length === 2
|
93
|
-
|
179
|
+
expression.parametersValues.length === 2 ||
|
180
|
+
expression.parametersValues.length === 3,
|
181
|
+
`Can't process serialize() expression: serialize() expects 1 or 2 argument`,
|
94
182
|
);
|
95
183
|
|
96
184
|
// check preceding expression
|
@@ -132,5 +220,171 @@ export const processGraphFetchSerializeExpression = (
|
|
132
220
|
graphFetchTreeState.setGraphFetchTree(
|
133
221
|
buildGraphFetchTreeData(graphFetchTreeRoot),
|
134
222
|
);
|
223
|
+
|
224
|
+
const serializeConfigParameter = expression.parametersValues[2];
|
225
|
+
if (serializeConfigParameter) {
|
226
|
+
const pureConfigFunction = guaranteeType(
|
227
|
+
serializeConfigParameter,
|
228
|
+
SimpleFunctionExpression,
|
229
|
+
`Can't process serialize() expression: serialize() function expects a function to configure custom serialization`,
|
230
|
+
);
|
231
|
+
assertTrue(
|
232
|
+
matchFunctionName(pureConfigFunction.functionName, [
|
233
|
+
SUPPORTED_FUNCTIONS.NEW,
|
234
|
+
]),
|
235
|
+
`Can't process serialize() expression: config expects 'new' function instaniate new config class`,
|
236
|
+
);
|
237
|
+
|
238
|
+
const pureSerializationState = guaranteeType(
|
239
|
+
graphFetchTreeState.serializationState,
|
240
|
+
GraphFetchPureSerializationState,
|
241
|
+
`Can't process serialize() expression: serialization state expected to be of type pure with serialize()`,
|
242
|
+
);
|
243
|
+
// first para: config class
|
244
|
+
const configClass = guaranteeType(
|
245
|
+
guaranteeType(
|
246
|
+
guaranteeType(
|
247
|
+
pureConfigFunction.parametersValues[0],
|
248
|
+
InstanceValue,
|
249
|
+
`Can't process serialize() expression: serialization config expects first param to be an instance value`,
|
250
|
+
).values[0],
|
251
|
+
PackageableElementReference,
|
252
|
+
`Can't process serialize() expression: serialization config expects first param to be a packageable element`,
|
253
|
+
).value,
|
254
|
+
Class,
|
255
|
+
`Can't process serialize() expression: serialization config expects first param to be a class`,
|
256
|
+
);
|
257
|
+
assertTrue(
|
258
|
+
configClass.path === PURE_SERIALIZE_CONFIG_CLASS,
|
259
|
+
`Can't process serialize() expression: serialiaztion config class expected to be ${PURE_SERIALIZE_CONFIG_CLASS}, got : ${configClass.path}`,
|
260
|
+
);
|
261
|
+
// 2nd param: empty string
|
262
|
+
// TODO: Investigate why `new` function as the second input as empty string
|
263
|
+
|
264
|
+
// 2rd param: key expression values representing property values of config
|
265
|
+
const collectionInstanceValue = guaranteeType(
|
266
|
+
pureConfigFunction.parametersValues[2],
|
267
|
+
CollectionInstanceValue,
|
268
|
+
`Can't process serialize() expression: serialization config expects third param to be a collection instance of key expressions`,
|
269
|
+
);
|
270
|
+
const serializationConfig = new PureSerializationConfig();
|
271
|
+
collectionInstanceValue.values.forEach((val, idx) => {
|
272
|
+
const keyExpInstance = guaranteeType(
|
273
|
+
val,
|
274
|
+
KeyExpressionInstanceValue,
|
275
|
+
`Can't process serialize() expression: collection instance value expects value ${
|
276
|
+
idx + 1
|
277
|
+
} to be key expression instance `,
|
278
|
+
);
|
279
|
+
const keyExpression = guaranteeNonNullable(
|
280
|
+
keyExpInstance.values[0],
|
281
|
+
`Can't process serialize() expression: serialization config key expression ${idx} expected to non null`,
|
282
|
+
);
|
283
|
+
processKeyExpressionValueOnSerializationConfig(
|
284
|
+
keyExpression,
|
285
|
+
serializationConfig as unknown as Record<PropertyKey, PropertyValue>,
|
286
|
+
configClass,
|
287
|
+
idx,
|
288
|
+
);
|
289
|
+
});
|
290
|
+
pureSerializationState.setConfig(serializationConfig);
|
291
|
+
}
|
292
|
+
}
|
293
|
+
};
|
294
|
+
|
295
|
+
export const processGraphFetchExternalizeExpression = (
|
296
|
+
expression: SimpleFunctionExpression,
|
297
|
+
queryBuilderState: QueryBuilderState,
|
298
|
+
parentLambda: LambdaFunction,
|
299
|
+
): void => {
|
300
|
+
// update fetch-structure
|
301
|
+
queryBuilderState.fetchStructureState.changeImplementation(
|
302
|
+
FETCH_STRUCTURE_IMPLEMENTATION.GRAPH_FETCH,
|
303
|
+
);
|
304
|
+
|
305
|
+
// check parameters
|
306
|
+
assertTrue(
|
307
|
+
expression.parametersValues.length === 3,
|
308
|
+
`Can't process externalize() expression: externalize() expects 2 argument`,
|
309
|
+
);
|
310
|
+
|
311
|
+
const precedingExpression = guaranteeType(
|
312
|
+
expression.parametersValues[0],
|
313
|
+
SimpleFunctionExpression,
|
314
|
+
`Can't process externalize() expression: only support externalize() immediately following an expression`,
|
315
|
+
);
|
316
|
+
|
317
|
+
// build preceding expression
|
318
|
+
assertTrue(
|
319
|
+
matchFunctionName(precedingExpression.functionName, [
|
320
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.GRAPH_FETCH,
|
321
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.GRAPH_FETCH_CHECKED,
|
322
|
+
]),
|
323
|
+
`Can't process externalize() expression: only support externalize() in graph-fetch expression`,
|
324
|
+
);
|
325
|
+
QueryBuilderValueSpecificationProcessor.process(
|
326
|
+
precedingExpression,
|
327
|
+
parentLambda,
|
328
|
+
queryBuilderState,
|
329
|
+
);
|
330
|
+
|
331
|
+
// build state
|
332
|
+
if (
|
333
|
+
queryBuilderState.fetchStructureState.implementation instanceof
|
334
|
+
QueryBuilderGraphFetchTreeState
|
335
|
+
) {
|
336
|
+
const graphFetchTreeState =
|
337
|
+
queryBuilderState.fetchStructureState.implementation;
|
338
|
+
// TODO: move to graph fetch processing once we completely deattach serialize graph fetch from main graphfetch tree
|
339
|
+
const mainGraphFetchTree = guaranteeType(
|
340
|
+
precedingExpression.parametersValues[1],
|
341
|
+
GraphFetchTreeInstanceValue,
|
342
|
+
`Can't process graphfetch() expression: externalize() graph-fetch is missing`,
|
343
|
+
);
|
344
|
+
const mainGraphFetchTreeRoot = guaranteeType(
|
345
|
+
mainGraphFetchTree.values[0],
|
346
|
+
RootGraphFetchTree,
|
347
|
+
`Can't process graphfetch() expression: graph-fetch tree root is missing`,
|
348
|
+
);
|
349
|
+
graphFetchTreeState.setGraphFetchTree(
|
350
|
+
buildGraphFetchTreeData(mainGraphFetchTreeRoot),
|
351
|
+
);
|
352
|
+
|
353
|
+
// build externalizeState
|
354
|
+
const instanceExpression = guaranteeType(
|
355
|
+
expression.parametersValues[1],
|
356
|
+
InstanceValue,
|
357
|
+
`Can't process externalize() expression: only support externalize() with 1st parameter as instance value`,
|
358
|
+
);
|
359
|
+
const binding = guaranteeType(
|
360
|
+
guaranteeType(
|
361
|
+
instanceExpression.values[0],
|
362
|
+
PackageableElementReference,
|
363
|
+
`Can't process externalize() expression: only support externalize() with 1st parameter as packagableElement value`,
|
364
|
+
).value,
|
365
|
+
Binding,
|
366
|
+
`Can't process externalize() expression: only support externalize() with 1st parameter as binding value`,
|
367
|
+
);
|
368
|
+
|
369
|
+
const externalizeState = new GraphFetchExternalFormatSerializationState(
|
370
|
+
graphFetchTreeState,
|
371
|
+
binding,
|
372
|
+
undefined,
|
373
|
+
);
|
374
|
+
graphFetchTreeState.setSerializationState(externalizeState);
|
375
|
+
|
376
|
+
const graphFetchTree = guaranteeType(
|
377
|
+
expression.parametersValues[2],
|
378
|
+
GraphFetchTreeInstanceValue,
|
379
|
+
`Can't process externalize() expression: externalize() graph-fetch is missing`,
|
380
|
+
);
|
381
|
+
const graphFetchTreeRoot = guaranteeType(
|
382
|
+
graphFetchTree.values[0],
|
383
|
+
RootGraphFetchTree,
|
384
|
+
`Can't process externalize() expression: externalize() graph-fetch tree root is missing`,
|
385
|
+
);
|
386
|
+
externalizeState.setGraphFetchTree(
|
387
|
+
buildGraphFetchTreeData(graphFetchTreeRoot),
|
388
|
+
);
|
135
389
|
}
|
136
390
|
};
|
@@ -15,20 +15,37 @@
|
|
15
15
|
*/
|
16
16
|
|
17
17
|
import {
|
18
|
+
type ValueSpecification,
|
19
|
+
type LambdaFunction,
|
20
|
+
type PureModel,
|
18
21
|
extractElementNameFromPath,
|
19
22
|
GenericType,
|
20
23
|
GenericTypeExplicitReference,
|
21
24
|
matchFunctionName,
|
22
25
|
PrimitiveInstanceValue,
|
23
26
|
SimpleFunctionExpression,
|
24
|
-
type ValueSpecification,
|
25
|
-
type LambdaFunction,
|
26
27
|
GraphFetchTreeInstanceValue,
|
27
28
|
PrimitiveType,
|
29
|
+
InstanceValue,
|
30
|
+
Multiplicity,
|
31
|
+
PackageableElementExplicitReference,
|
32
|
+
SUPPORTED_FUNCTIONS,
|
33
|
+
PURE_SERIALIZE_CONFIG_CLASS,
|
34
|
+
CollectionInstanceValue,
|
35
|
+
KeyExpressionInstanceValue,
|
36
|
+
KeyExpression,
|
28
37
|
} from '@finos/legend-graph';
|
29
|
-
import {
|
38
|
+
import {
|
39
|
+
UnsupportedOperationError,
|
40
|
+
guaranteeNonNullable,
|
41
|
+
guaranteeType,
|
42
|
+
} from '@finos/legend-shared';
|
30
43
|
import { QUERY_BUILDER_SUPPORTED_FUNCTIONS } from '../../../graphManager/QueryBuilderSupportedFunctions.js';
|
31
|
-
import
|
44
|
+
import {
|
45
|
+
GraphFetchExternalFormatSerializationState,
|
46
|
+
GraphFetchPureSerializationState,
|
47
|
+
type QueryBuilderGraphFetchTreeState,
|
48
|
+
} from './QueryBuilderGraphFetchTreeState.js';
|
32
49
|
import { isGraphFetchTreeDataEmpty } from './QueryBuilderGraphFetchTreeUtil.js';
|
33
50
|
|
34
51
|
const appendTakeLimit = (
|
@@ -79,6 +96,67 @@ const appendTakeLimit = (
|
|
79
96
|
return lambda;
|
80
97
|
};
|
81
98
|
|
99
|
+
export const buildPureSerializationConfig = (
|
100
|
+
config: Record<PropertyKey, boolean>,
|
101
|
+
graph: PureModel,
|
102
|
+
): SimpleFunctionExpression => {
|
103
|
+
const configClass = graph.getClass(PURE_SERIALIZE_CONFIG_CLASS);
|
104
|
+
const newFunction = new SimpleFunctionExpression(
|
105
|
+
extractElementNameFromPath(SUPPORTED_FUNCTIONS.NEW),
|
106
|
+
);
|
107
|
+
// build instance
|
108
|
+
const instance = new InstanceValue(Multiplicity.ONE, undefined);
|
109
|
+
instance.values[0] = PackageableElementExplicitReference.create(configClass);
|
110
|
+
// build values
|
111
|
+
const primitiveInstance = new PrimitiveInstanceValue(
|
112
|
+
GenericTypeExplicitReference.create(new GenericType(PrimitiveType.STRING)),
|
113
|
+
);
|
114
|
+
primitiveInstance.values = [''];
|
115
|
+
const pureConfigCollection = new CollectionInstanceValue(
|
116
|
+
Multiplicity.ONE,
|
117
|
+
undefined,
|
118
|
+
);
|
119
|
+
configClass.properties.forEach((classProperty) => {
|
120
|
+
const property = Object.getOwnPropertyNames(config).find(
|
121
|
+
(p) => p === classProperty.name,
|
122
|
+
);
|
123
|
+
if (property) {
|
124
|
+
const keyExpressionInstance = new KeyExpressionInstanceValue();
|
125
|
+
// key expression
|
126
|
+
const keyInstance = new PrimitiveInstanceValue(
|
127
|
+
GenericTypeExplicitReference.create(
|
128
|
+
new GenericType(PrimitiveType.STRING),
|
129
|
+
),
|
130
|
+
);
|
131
|
+
keyInstance.values = [property];
|
132
|
+
// primitive
|
133
|
+
const keyPrimitiveInstance = new PrimitiveInstanceValue(
|
134
|
+
GenericTypeExplicitReference.create(
|
135
|
+
new GenericType(classProperty.genericType.value.rawType),
|
136
|
+
),
|
137
|
+
);
|
138
|
+
keyPrimitiveInstance.values = [config[property]];
|
139
|
+
const keyExpression = new KeyExpression(
|
140
|
+
keyInstance,
|
141
|
+
keyPrimitiveInstance,
|
142
|
+
false,
|
143
|
+
);
|
144
|
+
keyExpressionInstance.values = [keyExpression];
|
145
|
+
pureConfigCollection.values.push(keyExpressionInstance);
|
146
|
+
}
|
147
|
+
});
|
148
|
+
pureConfigCollection.multiplicity = new Multiplicity(
|
149
|
+
pureConfigCollection.values.length,
|
150
|
+
pureConfigCollection.values.length,
|
151
|
+
);
|
152
|
+
newFunction.parametersValues = [
|
153
|
+
instance,
|
154
|
+
primitiveInstance,
|
155
|
+
pureConfigCollection,
|
156
|
+
];
|
157
|
+
return newFunction;
|
158
|
+
};
|
159
|
+
|
82
160
|
export const appendGraphFetch = (
|
83
161
|
graphFetchTreeState: QueryBuilderGraphFetchTreeState,
|
84
162
|
lambdaFunction: LambdaFunction,
|
@@ -97,30 +175,94 @@ export const appendGraphFetch = (
|
|
97
175
|
`Can't build graph-fetch tree expression: preceding expression is not defined`,
|
98
176
|
);
|
99
177
|
|
100
|
-
|
101
|
-
if (
|
102
|
-
|
103
|
-
|
178
|
+
const seriaizationState = graphFetchTreeState.serializationState;
|
179
|
+
if (seriaizationState instanceof GraphFetchPureSerializationState) {
|
180
|
+
// build graph-fetch tree
|
181
|
+
if (
|
182
|
+
graphFetchTreeState.treeData &&
|
183
|
+
!isGraphFetchTreeDataEmpty(graphFetchTreeState.treeData)
|
184
|
+
) {
|
185
|
+
const graphFetchInstance = new GraphFetchTreeInstanceValue();
|
186
|
+
graphFetchInstance.values = [graphFetchTreeState.treeData.tree];
|
187
|
+
const serializeFunction = new SimpleFunctionExpression(
|
188
|
+
extractElementNameFromPath(QUERY_BUILDER_SUPPORTED_FUNCTIONS.SERIALIZE),
|
189
|
+
);
|
190
|
+
const graphFetchFunc = new SimpleFunctionExpression(
|
191
|
+
graphFetchTreeState.isChecked
|
192
|
+
? extractElementNameFromPath(
|
193
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.GRAPH_FETCH_CHECKED,
|
194
|
+
)
|
195
|
+
: extractElementNameFromPath(
|
196
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.GRAPH_FETCH,
|
197
|
+
),
|
198
|
+
);
|
199
|
+
graphFetchFunc.parametersValues = [
|
200
|
+
precedingExpression,
|
201
|
+
graphFetchInstance,
|
202
|
+
];
|
203
|
+
serializeFunction.parametersValues = [graphFetchFunc, graphFetchInstance];
|
204
|
+
if (seriaizationState.config) {
|
205
|
+
const configFunction = buildPureSerializationConfig(
|
206
|
+
seriaizationState.config as unknown as Record<PropertyKey, boolean>,
|
207
|
+
graphFetchTreeState.queryBuilderState.graphManagerState.graph,
|
208
|
+
);
|
209
|
+
serializeFunction.parametersValues.push(configFunction);
|
210
|
+
}
|
211
|
+
lambdaFunction.expressionSequence[0] = serializeFunction;
|
212
|
+
}
|
213
|
+
} else if (
|
214
|
+
seriaizationState instanceof GraphFetchExternalFormatSerializationState
|
104
215
|
) {
|
105
|
-
const
|
106
|
-
|
107
|
-
const serializeFunction = new SimpleFunctionExpression(
|
108
|
-
extractElementNameFromPath(QUERY_BUILDER_SUPPORTED_FUNCTIONS.SERIALIZE),
|
216
|
+
const externalizeFunction = new SimpleFunctionExpression(
|
217
|
+
extractElementNameFromPath(QUERY_BUILDER_SUPPORTED_FUNCTIONS.EXTERNALIZE),
|
109
218
|
);
|
110
|
-
const
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
219
|
+
const mainGraphTree = graphFetchTreeState.treeData;
|
220
|
+
const externalizeTree = seriaizationState.treeData;
|
221
|
+
if (
|
222
|
+
mainGraphTree &&
|
223
|
+
externalizeTree &&
|
224
|
+
!isGraphFetchTreeDataEmpty(mainGraphTree) &&
|
225
|
+
!isGraphFetchTreeDataEmpty(externalizeTree)
|
226
|
+
) {
|
227
|
+
// 0th param
|
228
|
+
const graphFetchInstance = new GraphFetchTreeInstanceValue();
|
229
|
+
graphFetchInstance.values = [mainGraphTree.tree];
|
230
|
+
const graphFetchFunc = new SimpleFunctionExpression(
|
231
|
+
graphFetchTreeState.isChecked
|
232
|
+
? extractElementNameFromPath(
|
233
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.GRAPH_FETCH_CHECKED,
|
234
|
+
)
|
235
|
+
: extractElementNameFromPath(
|
236
|
+
QUERY_BUILDER_SUPPORTED_FUNCTIONS.GRAPH_FETCH,
|
237
|
+
),
|
238
|
+
);
|
239
|
+
graphFetchFunc.parametersValues = [
|
240
|
+
precedingExpression,
|
241
|
+
graphFetchInstance,
|
242
|
+
];
|
243
|
+
// 1st param
|
244
|
+
const bindingInstance = new InstanceValue(Multiplicity.ONE, undefined);
|
245
|
+
bindingInstance.values = [
|
246
|
+
PackageableElementExplicitReference.create(
|
247
|
+
seriaizationState.targetBinding,
|
248
|
+
),
|
249
|
+
];
|
250
|
+
// 2nd parameter
|
251
|
+
const xtGraphFetchInstance = new GraphFetchTreeInstanceValue();
|
252
|
+
xtGraphFetchInstance.values = [externalizeTree.tree];
|
253
|
+
// build externalize
|
254
|
+
externalizeFunction.parametersValues = [
|
255
|
+
graphFetchFunc,
|
256
|
+
bindingInstance,
|
257
|
+
xtGraphFetchInstance,
|
258
|
+
];
|
259
|
+
lambdaFunction.expressionSequence[0] = externalizeFunction;
|
260
|
+
}
|
261
|
+
} else {
|
262
|
+
throw new UnsupportedOperationError(
|
263
|
+
`Unsupported serialization state ${seriaizationState.getLabel()}`,
|
118
264
|
);
|
119
|
-
graphFetchFunc.parametersValues = [precedingExpression, graphFetchInstance];
|
120
|
-
serializeFunction.parametersValues = [graphFetchFunc, graphFetchInstance];
|
121
|
-
lambdaFunction.expressionSequence[0] = serializeFunction;
|
122
265
|
}
|
123
|
-
|
124
266
|
// build result set modifier: i.e. preview limit
|
125
267
|
if (options?.isBuildingExecutionQuery) {
|
126
268
|
appendTakeLimit(lambdaFunction, queryBuilderState.resultState.previewLimit);
|
@@ -135,6 +135,7 @@ export class QueryBuilderTDSState
|
|
135
135
|
addColumn: action,
|
136
136
|
moveColumn: action,
|
137
137
|
replaceColumn: action,
|
138
|
+
initialize: action,
|
138
139
|
setShowPostFilterPanel: action,
|
139
140
|
setShowWindowFuncPanel: action,
|
140
141
|
convertDerivationProjectionObjects: flow,
|
@@ -294,6 +295,12 @@ export class QueryBuilderTDSState
|
|
294
295
|
);
|
295
296
|
}
|
296
297
|
|
298
|
+
override initialize(): void {
|
299
|
+
this.queryBuilderState.filterState.setShowPanel(true);
|
300
|
+
this.setShowPostFilterPanel(false);
|
301
|
+
this.setShowWindowFuncPanel(false);
|
302
|
+
}
|
303
|
+
|
297
304
|
isColumnInUse(tdsCol: QueryBuilderTDSColumnState): boolean {
|
298
305
|
return Boolean(
|
299
306
|
[
|