@finos/legend-query-builder 4.18.2 → 4.18.4
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/QueryBuilder.d.ts.map +1 -1
- package/lib/components/QueryBuilder.js +0 -1
- package/lib/components/QueryBuilder.js.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.d.ts.map +1 -1
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js +5 -3
- package/lib/components/fetch-structure/QueryBuilderTDSPanel.js.map +1 -1
- package/lib/components/filter/QueryBuilderFilterPanel.d.ts.map +1 -1
- package/lib/components/filter/QueryBuilderFilterPanel.js +74 -36
- package/lib/components/filter/QueryBuilderFilterPanel.js.map +1 -1
- package/lib/components/result/tds/QueryBuilderTDSResultShared.d.ts.map +1 -1
- package/lib/components/result/tds/QueryBuilderTDSResultShared.js +5 -3
- package/lib/components/result/tds/QueryBuilderTDSResultShared.js.map +1 -1
- package/lib/data-access-overview.css +1 -1
- package/lib/index.css +1 -1
- package/lib/index.d.ts +2 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +2 -1
- package/lib/index.js.map +1 -1
- package/lib/package.json +1 -1
- package/lib/stores/QueryBuilderState.d.ts.map +1 -1
- package/lib/stores/QueryBuilderState.js +3 -4
- package/lib/stores/QueryBuilderState.js.map +1 -1
- package/lib/stores/QueryBuilderStateBuilder.d.ts +1 -1
- package/lib/stores/QueryBuilderStateBuilder.d.ts.map +1 -1
- package/lib/stores/QueryBuilderStateBuilder.js +10 -2
- package/lib/stores/QueryBuilderStateBuilder.js.map +1 -1
- package/lib/stores/QueryBuilderStateHashUtils.d.ts +2 -0
- package/lib/stores/QueryBuilderStateHashUtils.d.ts.map +1 -1
- package/lib/stores/QueryBuilderStateHashUtils.js +2 -0
- package/lib/stores/QueryBuilderStateHashUtils.js.map +1 -1
- package/lib/stores/__test-utils__/TEST_DATA__QueryBuilder_Accessors.d.ts +98 -0
- package/lib/stores/__test-utils__/TEST_DATA__QueryBuilder_Accessors.d.ts.map +1 -1
- package/lib/stores/__test-utils__/TEST_DATA__QueryBuilder_Accessors.js +156 -0
- package/lib/stores/__test-utils__/TEST_DATA__QueryBuilder_Accessors.js.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterState.d.ts +50 -4
- package/lib/stores/filter/QueryBuilderFilterState.d.ts.map +1 -1
- package/lib/stores/filter/QueryBuilderFilterState.js +112 -11
- 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 +17 -3
- package/lib/stores/filter/QueryBuilderFilterStateBuilder.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.d.ts +6 -0
- package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.js +35 -9
- package/lib/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.js +2 -4
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Contain.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.js +2 -4
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_EndWith.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.js +7 -11
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_Equal.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.js +7 -11
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.js +7 -11
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.js +3 -6
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_In.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.d.ts +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.js +5 -3
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.js +7 -11
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThan.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.js +7 -11
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.js.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.d.ts.map +1 -1
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.js +2 -4
- package/lib/stores/filter/operators/QueryBuilderFilterOperator_StartWith.js.map +1 -1
- package/lib/stores/milestoning/QueryBuilderMilestoningState.d.ts.map +1 -1
- package/lib/stores/milestoning/QueryBuilderMilestoningState.js +9 -6
- package/lib/stores/milestoning/QueryBuilderMilestoningState.js.map +1 -1
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.d.ts +3 -3
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.d.ts.map +1 -1
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.js +12 -4
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.js.map +1 -1
- package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.d.ts +2 -1
- package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.d.ts.map +1 -1
- package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js +36 -6
- package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js.map +1 -1
- package/package.json +5 -5
- package/src/components/QueryBuilder.tsx +0 -1
- package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +7 -2
- package/src/components/filter/QueryBuilderFilterPanel.tsx +138 -69
- package/src/components/result/tds/QueryBuilderTDSResultShared.tsx +4 -1
- package/src/index.ts +2 -1
- package/src/stores/QueryBuilderState.ts +3 -6
- package/src/stores/QueryBuilderStateBuilder.ts +15 -2
- package/src/stores/QueryBuilderStateHashUtils.ts +2 -0
- package/src/stores/__test-utils__/TEST_DATA__QueryBuilder_Accessors.ts +157 -0
- package/src/stores/filter/QueryBuilderFilterState.ts +175 -14
- package/src/stores/filter/QueryBuilderFilterStateBuilder.ts +24 -3
- package/src/stores/filter/operators/QueryBuilderFilterOperatorValueSpecificationBuilder.ts +55 -24
- package/src/stores/filter/operators/QueryBuilderFilterOperator_Contain.ts +2 -5
- package/src/stores/filter/operators/QueryBuilderFilterOperator_EndWith.ts +2 -5
- package/src/stores/filter/operators/QueryBuilderFilterOperator_Equal.ts +7 -13
- package/src/stores/filter/operators/QueryBuilderFilterOperator_GreaterThan.ts +7 -13
- package/src/stores/filter/operators/QueryBuilderFilterOperator_GreaterThanEqual.ts +7 -13
- package/src/stores/filter/operators/QueryBuilderFilterOperator_In.ts +3 -9
- package/src/stores/filter/operators/QueryBuilderFilterOperator_IsEmpty.ts +9 -6
- package/src/stores/filter/operators/QueryBuilderFilterOperator_LessThan.ts +7 -13
- package/src/stores/filter/operators/QueryBuilderFilterOperator_LessThanEqual.ts +7 -13
- package/src/stores/filter/operators/QueryBuilderFilterOperator_StartWith.ts +2 -5
- package/src/stores/milestoning/QueryBuilderMilestoningState.ts +13 -7
- package/src/stores/workflows/accessor/AccessorQueryBuilderState.ts +17 -3
- package/src/stores/workflows/dataProduct/DataProductQueryBuilderState.ts +84 -19
|
@@ -69,10 +69,13 @@ import {
|
|
|
69
69
|
isCollectionProperty,
|
|
70
70
|
type QueryBuilderFilterValueDropTarget,
|
|
71
71
|
isExistsNodeChild,
|
|
72
|
+
FilterPropertyExpressionSourceState,
|
|
73
|
+
FilterRelationColumnSourceState,
|
|
72
74
|
} from '../../stores/filter/QueryBuilderFilterState.js';
|
|
73
75
|
import { useDrag, useDragLayer, useDrop } from 'react-dnd';
|
|
74
76
|
import {
|
|
75
77
|
type QueryBuilderExplorerTreeDragSource,
|
|
78
|
+
type QueryBuilderExplorerTreeRelationColumnDragSource,
|
|
76
79
|
buildPropertyExpressionFromExplorerTreeNodeData,
|
|
77
80
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE,
|
|
78
81
|
} from '../../stores/explorer/QueryBuilderExplorerState.js';
|
|
@@ -146,11 +149,13 @@ export const CAN_DROP_MAIN_GROUP_DND_TYPES_FETCH_SUPPORTED = [
|
|
|
146
149
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.ENUM_PROPERTY,
|
|
147
150
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.PRIMITIVE_PROPERTY,
|
|
148
151
|
QUERY_BUILDER_PROJECTION_COLUMN_DND_TYPE,
|
|
152
|
+
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.RELATION_COLUMN,
|
|
149
153
|
];
|
|
150
154
|
|
|
151
155
|
export const CAN_DROP_MAIN_GROUP_DND_TYPES = [
|
|
152
156
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.ENUM_PROPERTY,
|
|
153
157
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.PRIMITIVE_PROPERTY,
|
|
158
|
+
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.RELATION_COLUMN,
|
|
154
159
|
];
|
|
155
160
|
|
|
156
161
|
export const CAN_DROP_FILTER_NODE_DND_TYPES_FETCH_SUPPORTED = [
|
|
@@ -158,12 +163,14 @@ export const CAN_DROP_FILTER_NODE_DND_TYPES_FETCH_SUPPORTED = [
|
|
|
158
163
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.ENUM_PROPERTY,
|
|
159
164
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.PRIMITIVE_PROPERTY,
|
|
160
165
|
QUERY_BUILDER_PROJECTION_COLUMN_DND_TYPE,
|
|
166
|
+
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.RELATION_COLUMN,
|
|
161
167
|
];
|
|
162
168
|
|
|
163
169
|
export const CAN_DROP_FILTER_NODE_DND_TYPES = [
|
|
164
170
|
QUERY_BUILDER_FILTER_DND_TYPE.CONDITION,
|
|
165
171
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.ENUM_PROPERTY,
|
|
166
172
|
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.PRIMITIVE_PROPERTY,
|
|
173
|
+
QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.RELATION_COLUMN,
|
|
167
174
|
];
|
|
168
175
|
|
|
169
176
|
export const CAN_DROP_FILTER_VALUE_DND_TYPES = [
|
|
@@ -810,9 +817,7 @@ const canDropTypeOntoNodeValue = (
|
|
|
810
817
|
condition: FilterConditionState,
|
|
811
818
|
): boolean => {
|
|
812
819
|
const conditionOperator = condition.operator;
|
|
813
|
-
const conditionValueType =
|
|
814
|
-
condition.propertyExpressionState.propertyExpression.func.value.genericType
|
|
815
|
-
.value.rawType;
|
|
820
|
+
const conditionValueType = condition.leftConditionType;
|
|
816
821
|
return (
|
|
817
822
|
!(conditionOperator instanceof QueryBuilderFilterOperator_In) &&
|
|
818
823
|
!(conditionOperator instanceof QueryBuilderFilterOperator_NotIn) &&
|
|
@@ -922,9 +927,7 @@ const QueryBuilderFilterConditionEditor = observer(
|
|
|
922
927
|
return;
|
|
923
928
|
}
|
|
924
929
|
} else {
|
|
925
|
-
const conditionValueType =
|
|
926
|
-
node.condition.propertyExpressionState.propertyExpression.func.value
|
|
927
|
-
.genericType.value.rawType;
|
|
930
|
+
const conditionValueType = node.condition.leftConditionType;
|
|
928
931
|
applicationStore.notificationService.notifyWarning(
|
|
929
932
|
`Incompatible parameter type ${itemType?.name}. ${itemType?.name} is not compatible with type ${conditionValueType.name}.`,
|
|
930
933
|
);
|
|
@@ -1041,9 +1044,7 @@ const QueryBuilderFilterConditionEditor = observer(
|
|
|
1041
1044
|
graph={graph}
|
|
1042
1045
|
observerContext={queryBuilderState.observerContext}
|
|
1043
1046
|
typeCheckOption={{
|
|
1044
|
-
expectedType:
|
|
1045
|
-
node.condition.propertyExpressionState.propertyExpression
|
|
1046
|
-
.func.value.genericType.value.rawType,
|
|
1047
|
+
expectedType: node.condition.leftConditionType,
|
|
1047
1048
|
}}
|
|
1048
1049
|
resetValue={resetNode}
|
|
1049
1050
|
selectorSearchConfig={selectorConfig}
|
|
@@ -1097,9 +1098,18 @@ const QueryBuilderFilterConditionEditor = observer(
|
|
|
1097
1098
|
>
|
|
1098
1099
|
<div className="query-builder-filter-tree__condition-node">
|
|
1099
1100
|
<div className="query-builder-filter-tree__condition-node__property">
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1101
|
+
{node.condition.sourceState instanceof
|
|
1102
|
+
FilterPropertyExpressionSourceState ? (
|
|
1103
|
+
<QueryBuilderPropertyExpressionBadge
|
|
1104
|
+
propertyExpressionState={
|
|
1105
|
+
node.condition.sourceState.propertyExpressionState
|
|
1106
|
+
}
|
|
1107
|
+
/>
|
|
1108
|
+
) : (
|
|
1109
|
+
<div className="query-builder-filter-tree__condition-node__property__label">
|
|
1110
|
+
{node.condition.sourceState.label}
|
|
1111
|
+
</div>
|
|
1112
|
+
)}
|
|
1103
1113
|
</div>
|
|
1104
1114
|
<ControlledDropdownMenu
|
|
1105
1115
|
className="query-builder-filter-tree__condition-node__operator"
|
|
@@ -1260,36 +1270,50 @@ const QueryBuilderFilterTreeNodeContainer = observer(
|
|
|
1260
1270
|
} else {
|
|
1261
1271
|
let filterConditionState: FilterConditionState;
|
|
1262
1272
|
try {
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1273
|
+
if (type === QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.RELATION_COLUMN) {
|
|
1274
|
+
const columnNode = (
|
|
1275
|
+
item as QueryBuilderExplorerTreeRelationColumnDragSource
|
|
1276
|
+
).node;
|
|
1277
|
+
const sourceState = new FilterRelationColumnSourceState(
|
|
1278
|
+
columnNode.column.name,
|
|
1279
|
+
columnNode.type,
|
|
1280
|
+
);
|
|
1281
|
+
filterConditionState = new FilterConditionState(
|
|
1282
|
+
filterState,
|
|
1283
|
+
sourceState,
|
|
1284
|
+
);
|
|
1285
|
+
} else {
|
|
1286
|
+
let propertyExpression;
|
|
1287
|
+
if (type === QUERY_BUILDER_PROJECTION_COLUMN_DND_TYPE) {
|
|
1288
|
+
if (
|
|
1289
|
+
(item as QueryBuilderProjectionColumnDragSource)
|
|
1290
|
+
.columnState instanceof
|
|
1291
|
+
QueryBuilderSimpleProjectionColumnState
|
|
1292
|
+
) {
|
|
1293
|
+
propertyExpression = cloneAbstractPropertyExpression(
|
|
1294
|
+
(
|
|
1295
|
+
(item as QueryBuilderProjectionColumnDragSource)
|
|
1296
|
+
.columnState as QueryBuilderSimpleProjectionColumnState
|
|
1297
|
+
).propertyExpressionState.propertyExpression,
|
|
1298
|
+
queryBuilderState.observerContext,
|
|
1299
|
+
);
|
|
1300
|
+
} else {
|
|
1301
|
+
throw new UnsupportedOperationError(
|
|
1302
|
+
`Dragging and Dropping derivation projection column is not supported.`,
|
|
1303
|
+
);
|
|
1304
|
+
}
|
|
1277
1305
|
} else {
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1306
|
+
propertyExpression =
|
|
1307
|
+
buildPropertyExpressionFromExplorerTreeNodeData(
|
|
1308
|
+
(item as QueryBuilderExplorerTreeDragSource).node,
|
|
1309
|
+
filterState.queryBuilderState.explorerState,
|
|
1310
|
+
);
|
|
1281
1311
|
}
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
filterState.queryBuilderState.explorerState,
|
|
1287
|
-
);
|
|
1312
|
+
filterConditionState = new FilterConditionState(
|
|
1313
|
+
filterState,
|
|
1314
|
+
propertyExpression,
|
|
1315
|
+
);
|
|
1288
1316
|
}
|
|
1289
|
-
filterConditionState = new FilterConditionState(
|
|
1290
|
-
filterState,
|
|
1291
|
-
propertyExpression,
|
|
1292
|
-
);
|
|
1293
1317
|
} catch (error) {
|
|
1294
1318
|
assertErrorThrown(error);
|
|
1295
1319
|
applicationStore.notificationService.notifyWarning(error.message);
|
|
@@ -1300,11 +1324,34 @@ const QueryBuilderFilterTreeNodeContainer = observer(
|
|
|
1300
1324
|
node instanceof QueryBuilderFilterTreeConditionNodeData ||
|
|
1301
1325
|
node instanceof QueryBuilderFilterTreeBlankConditionNodeData
|
|
1302
1326
|
) {
|
|
1303
|
-
|
|
1304
|
-
filterConditionState.
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1327
|
+
if (
|
|
1328
|
+
filterConditionState.sourceState instanceof
|
|
1329
|
+
FilterRelationColumnSourceState
|
|
1330
|
+
) {
|
|
1331
|
+
// Relation columns don't support exists handling, just add directly
|
|
1332
|
+
const treeNode = new QueryBuilderFilterTreeConditionNodeData(
|
|
1333
|
+
undefined,
|
|
1334
|
+
filterConditionState,
|
|
1335
|
+
);
|
|
1336
|
+
treeNode.setIsNewlyAdded(true);
|
|
1337
|
+
if (
|
|
1338
|
+
node instanceof QueryBuilderFilterTreeBlankConditionNodeData
|
|
1339
|
+
) {
|
|
1340
|
+
filterState.replaceBlankNodeWithNode(treeNode, node);
|
|
1341
|
+
} else if (
|
|
1342
|
+
node instanceof QueryBuilderFilterTreeConditionNodeData
|
|
1343
|
+
) {
|
|
1344
|
+
filterState.newGroupWithConditionFromNode(treeNode, node);
|
|
1345
|
+
} else {
|
|
1346
|
+
filterState.addNodeFromNode(treeNode, node);
|
|
1347
|
+
}
|
|
1348
|
+
} else {
|
|
1349
|
+
buildFilterTree(
|
|
1350
|
+
filterConditionState.propertyExpressionState.propertyExpression,
|
|
1351
|
+
filterState,
|
|
1352
|
+
node,
|
|
1353
|
+
);
|
|
1354
|
+
}
|
|
1308
1355
|
}
|
|
1309
1356
|
}
|
|
1310
1357
|
},
|
|
@@ -1652,34 +1699,56 @@ export const QueryBuilderFilterPanel = observer(
|
|
|
1652
1699
|
const handleDrop = useCallback(
|
|
1653
1700
|
(item: QueryBuilderFilterNodeDropTarget, type: string): void => {
|
|
1654
1701
|
try {
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1702
|
+
if (type === QUERY_BUILDER_EXPLORER_TREE_DND_TYPE.RELATION_COLUMN) {
|
|
1703
|
+
const columnNode = (
|
|
1704
|
+
item as QueryBuilderExplorerTreeRelationColumnDragSource
|
|
1705
|
+
).node;
|
|
1706
|
+
const sourceState = new FilterRelationColumnSourceState(
|
|
1707
|
+
columnNode.column.name,
|
|
1708
|
+
columnNode.type,
|
|
1709
|
+
);
|
|
1710
|
+
const filterConditionState = new FilterConditionState(
|
|
1711
|
+
filterState,
|
|
1712
|
+
sourceState,
|
|
1713
|
+
);
|
|
1714
|
+
const treeNode = new QueryBuilderFilterTreeConditionNodeData(
|
|
1715
|
+
undefined,
|
|
1716
|
+
filterConditionState,
|
|
1717
|
+
);
|
|
1718
|
+
treeNode.setIsNewlyAdded(true);
|
|
1719
|
+
filterState.setSelectedNode(undefined);
|
|
1720
|
+
filterState.addNodeFromNode(treeNode, undefined);
|
|
1721
|
+
} else {
|
|
1722
|
+
let propertyExpression;
|
|
1723
|
+
if (type === QUERY_BUILDER_PROJECTION_COLUMN_DND_TYPE) {
|
|
1724
|
+
if (
|
|
1725
|
+
(item as QueryBuilderProjectionColumnDragSource)
|
|
1726
|
+
.columnState instanceof
|
|
1727
|
+
QueryBuilderSimpleProjectionColumnState
|
|
1728
|
+
) {
|
|
1729
|
+
propertyExpression = cloneAbstractPropertyExpression(
|
|
1730
|
+
(
|
|
1731
|
+
(item as QueryBuilderProjectionColumnDragSource)
|
|
1732
|
+
.columnState as QueryBuilderSimpleProjectionColumnState
|
|
1733
|
+
).propertyExpressionState.propertyExpression,
|
|
1734
|
+
queryBuilderState.observerContext,
|
|
1735
|
+
);
|
|
1736
|
+
} else {
|
|
1737
|
+
throw new UnsupportedOperationError(
|
|
1738
|
+
`Dragging and Dropping derivation projection column is not supported.`,
|
|
1739
|
+
);
|
|
1740
|
+
}
|
|
1668
1741
|
} else {
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1742
|
+
propertyExpression =
|
|
1743
|
+
buildPropertyExpressionFromExplorerTreeNodeData(
|
|
1744
|
+
(item as QueryBuilderExplorerTreeDragSource).node,
|
|
1745
|
+
filterState.queryBuilderState.explorerState,
|
|
1746
|
+
);
|
|
1672
1747
|
}
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
(item as QueryBuilderExplorerTreeDragSource).node,
|
|
1677
|
-
filterState.queryBuilderState.explorerState,
|
|
1678
|
-
);
|
|
1748
|
+
// NOTE: unfocus the current node when DnD a new node to the tree
|
|
1749
|
+
filterState.setSelectedNode(undefined);
|
|
1750
|
+
buildFilterTree(propertyExpression, filterState);
|
|
1679
1751
|
}
|
|
1680
|
-
// NOTE: unfocus the current node when DnD a new node to the tree
|
|
1681
|
-
filterState.setSelectedNode(undefined);
|
|
1682
|
-
buildFilterTree(propertyExpression, filterState);
|
|
1683
1752
|
} catch (error) {
|
|
1684
1753
|
assertErrorThrown(error);
|
|
1685
1754
|
applicationStore.notificationService.notifyWarning(error.message);
|
|
@@ -88,6 +88,7 @@ import {
|
|
|
88
88
|
FilterValueSpecConditionValueState,
|
|
89
89
|
isCollectionProperty,
|
|
90
90
|
QueryBuilderFilterTreeConditionNodeData,
|
|
91
|
+
FilterPropertyExpressionSourceState,
|
|
91
92
|
} from '../../../stores/filter/QueryBuilderFilterState.js';
|
|
92
93
|
import { QueryBuilderAggregateColumnState } from '../../../stores/fetch-structure/tds/aggregation/QueryBuilderAggregationState.js';
|
|
93
94
|
import type { QueryBuilderFilterOperator } from '../../../stores/filter/QueryBuilderFilterOperator.js';
|
|
@@ -188,7 +189,9 @@ const getExistingFilterNode = (
|
|
|
188
189
|
.filter(filterByType(QueryBuilderFilterTreeConditionNodeData))
|
|
189
190
|
.filter(
|
|
190
191
|
(node) =>
|
|
191
|
-
node.condition.
|
|
192
|
+
node.condition.sourceState instanceof
|
|
193
|
+
FilterPropertyExpressionSourceState &&
|
|
194
|
+
node.condition.sourceState.propertyExpressionState.path ===
|
|
192
195
|
propertyExpressionState?.path &&
|
|
193
196
|
operators
|
|
194
197
|
.map((op) => op.getLabel())
|
package/src/index.ts
CHANGED
|
@@ -67,7 +67,7 @@ export {
|
|
|
67
67
|
type ModelAccessPointGroupOption,
|
|
68
68
|
buildModelAccessPointGroupOption,
|
|
69
69
|
type ExecutionIdOption,
|
|
70
|
-
|
|
70
|
+
resolveDataProductAccessor,
|
|
71
71
|
NativeModelDataProductExecutionState,
|
|
72
72
|
ModelAccessPointDataProductExecutionState,
|
|
73
73
|
LakehouseDataProductExecutionState,
|
|
@@ -91,6 +91,7 @@ export {
|
|
|
91
91
|
TEST__LegendApplicationPluginManager,
|
|
92
92
|
TEST__getGenericApplicationConfig,
|
|
93
93
|
} from './stores/__test-utils__/QueryBuilderStateTestUtils.js';
|
|
94
|
+
export { TEST_DATA__QueryBuilder_Accessors } from './stores/__test-utils__/TEST_DATA__QueryBuilder_Accessors.js';
|
|
94
95
|
export { getQueryBuilderGraphManagerExtension } from './graph-manager/protocol/pure/QueryBuilder_PureGraphManagerExtension.js';
|
|
95
96
|
export type { ServiceExecutionAnalysisResult } from './graph-manager/action/analytics/ServiceExecutionAnalysis.js';
|
|
96
97
|
export type { MappingRuntimeCompatibilityAnalysisResult } from './graph-manager/action/analytics/MappingRuntimeCompatibilityAnalysis.js';
|
|
@@ -809,13 +809,10 @@ export abstract class QueryBuilderState implements CommandRegistrar {
|
|
|
809
809
|
if (
|
|
810
810
|
this.fetchStructureState.implementation instanceof QueryBuilderTDSState
|
|
811
811
|
) {
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
812
|
+
return this.useRelation
|
|
813
|
+
? this.graphManagerState.graph.getType(QUERY_BUILDER_PURE_PATH.RELATION)
|
|
814
|
+
: this.graphManagerState.graph.getClass(
|
|
815
815
|
QUERY_BUILDER_PURE_PATH.TDS_TABULAR_DATASET,
|
|
816
|
-
)
|
|
817
|
-
: this.graphManagerState.graph.getType(
|
|
818
|
-
QUERY_BUILDER_PURE_PATH.RELATION,
|
|
819
816
|
);
|
|
820
817
|
}
|
|
821
818
|
return PrimitiveType.STRING;
|
|
@@ -55,7 +55,7 @@ import {
|
|
|
55
55
|
PackageableElementExplicitReference,
|
|
56
56
|
MILESTONING_STEREOTYPE,
|
|
57
57
|
type ColSpecInstanceValue,
|
|
58
|
-
|
|
58
|
+
AccessorInstanceValue,
|
|
59
59
|
RelationColumn,
|
|
60
60
|
} from '@finos/legend-graph';
|
|
61
61
|
import { processTDSPostFilterExpression } from './fetch-structure/tds/post-filter/QueryBuilderPostFilterStateBuilder.js';
|
|
@@ -606,8 +606,21 @@ export class QueryBuilderValueSpecificationProcessor
|
|
|
606
606
|
);
|
|
607
607
|
|
|
608
608
|
// check preceding expression
|
|
609
|
+
// For accessor queries, the preceding expression is an AccessorInstanceValue (table reference),
|
|
610
|
+
// not a SimpleFunctionExpression
|
|
611
|
+
const precedingValueSpec = valueSpecification.parametersValues[0];
|
|
612
|
+
if (precedingValueSpec instanceof AccessorInstanceValue) {
|
|
613
|
+
QueryBuilderValueSpecificationProcessor.process(
|
|
614
|
+
precedingValueSpec,
|
|
615
|
+
this.parentLambda,
|
|
616
|
+
this.queryBuilderState,
|
|
617
|
+
);
|
|
618
|
+
processFilterExpression(valueSpecification, this.queryBuilderState);
|
|
619
|
+
return;
|
|
620
|
+
}
|
|
621
|
+
|
|
609
622
|
const precedingExpression = guaranteeType(
|
|
610
|
-
|
|
623
|
+
precedingValueSpec,
|
|
611
624
|
SimpleFunctionExpression,
|
|
612
625
|
`Can't process filter() expression: only support filter() immediately following an expression`,
|
|
613
626
|
);
|
|
@@ -94,6 +94,8 @@ export enum QUERY_BUILDER_STATE_HASH_STRUCTURE {
|
|
|
94
94
|
FILTER_TREE_CONDIITION_NODE_DATA = 'FILTER_TREE_CONDITION_NODE_DATA',
|
|
95
95
|
FILTER_TREE_BLANK_CONDITION_NODE_DATA = 'FILTER_TREE_BLANK_CONDITION_NODE_DATA',
|
|
96
96
|
FILTER_CONDITION_STATE = 'FILTER_CONDITION_STATE',
|
|
97
|
+
FILTER_CONDITION_SOURCE_PROPERTY_EXPRESSION = 'FILTER_CONDITION_SOURCE_PROPERTY_EXPRESSION',
|
|
98
|
+
FILTER_CONDITION_SOURCE_RELATION_COLUMN = 'FILTER_CONDITION_SOURCE_RELATION_COLUMN',
|
|
97
99
|
FILTER_CONDITION_RIGHT_VALUE = 'FILTER_CONDITION_RIGHT_VALUE',
|
|
98
100
|
FILTER_CONDITION_RIGHT_VALUE_SPEC = 'FILTER_CONDITION_RIGHT_VALUE_SPEC',
|
|
99
101
|
FILTER_OPERATOR_CONTAIN = 'FILTER_OPERATOR_CONTAIN',
|
|
@@ -14,6 +14,163 @@
|
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
|
+
export const TEST_DATA__QueryBuilder_Accessors_SimpleProjection_WithFilter = {
|
|
18
|
+
_type: 'lambda',
|
|
19
|
+
body: [
|
|
20
|
+
{
|
|
21
|
+
_type: 'func',
|
|
22
|
+
function: 'from',
|
|
23
|
+
parameters: [
|
|
24
|
+
{
|
|
25
|
+
_type: 'func',
|
|
26
|
+
function: 'project',
|
|
27
|
+
parameters: [
|
|
28
|
+
{
|
|
29
|
+
_type: 'func',
|
|
30
|
+
function: 'filter',
|
|
31
|
+
parameters: [
|
|
32
|
+
{
|
|
33
|
+
_type: 'classInstance',
|
|
34
|
+
multiplicity: {
|
|
35
|
+
lowerBound: 1,
|
|
36
|
+
upperBound: 1,
|
|
37
|
+
},
|
|
38
|
+
type: '>',
|
|
39
|
+
value: {
|
|
40
|
+
path: ['database::TestDatabase', 'default', 'TEST0'],
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
_type: 'lambda',
|
|
45
|
+
body: [
|
|
46
|
+
{
|
|
47
|
+
_type: 'func',
|
|
48
|
+
function: 'and',
|
|
49
|
+
parameters: [
|
|
50
|
+
{
|
|
51
|
+
_type: 'func',
|
|
52
|
+
function: 'equal',
|
|
53
|
+
parameters: [
|
|
54
|
+
{
|
|
55
|
+
_type: 'property',
|
|
56
|
+
parameters: [
|
|
57
|
+
{
|
|
58
|
+
_type: 'var',
|
|
59
|
+
name: 'x',
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
property: 'FIRSTNAME',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
_type: 'string',
|
|
66
|
+
value: 'John',
|
|
67
|
+
},
|
|
68
|
+
],
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
_type: 'func',
|
|
72
|
+
function: 'equal',
|
|
73
|
+
parameters: [
|
|
74
|
+
{
|
|
75
|
+
_type: 'property',
|
|
76
|
+
parameters: [
|
|
77
|
+
{
|
|
78
|
+
_type: 'var',
|
|
79
|
+
name: 'x',
|
|
80
|
+
},
|
|
81
|
+
],
|
|
82
|
+
property: 'LASTNAME',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
_type: 'string',
|
|
86
|
+
value: 'Doe',
|
|
87
|
+
},
|
|
88
|
+
],
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
},
|
|
92
|
+
],
|
|
93
|
+
parameters: [
|
|
94
|
+
{
|
|
95
|
+
_type: 'var',
|
|
96
|
+
name: 'x',
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
_type: 'classInstance',
|
|
104
|
+
multiplicity: {
|
|
105
|
+
lowerBound: 1,
|
|
106
|
+
upperBound: 1,
|
|
107
|
+
},
|
|
108
|
+
type: 'colSpecArray',
|
|
109
|
+
value: {
|
|
110
|
+
colSpecs: [
|
|
111
|
+
{
|
|
112
|
+
function1: {
|
|
113
|
+
_type: 'lambda',
|
|
114
|
+
body: [
|
|
115
|
+
{
|
|
116
|
+
_type: 'property',
|
|
117
|
+
parameters: [
|
|
118
|
+
{
|
|
119
|
+
_type: 'var',
|
|
120
|
+
name: 'x',
|
|
121
|
+
},
|
|
122
|
+
],
|
|
123
|
+
property: 'FIRSTNAME',
|
|
124
|
+
},
|
|
125
|
+
],
|
|
126
|
+
parameters: [
|
|
127
|
+
{
|
|
128
|
+
_type: 'var',
|
|
129
|
+
name: 'x',
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
},
|
|
133
|
+
name: 'Firstname',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
function1: {
|
|
137
|
+
_type: 'lambda',
|
|
138
|
+
body: [
|
|
139
|
+
{
|
|
140
|
+
_type: 'property',
|
|
141
|
+
parameters: [
|
|
142
|
+
{
|
|
143
|
+
_type: 'var',
|
|
144
|
+
name: 'x',
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
property: 'LASTNAME',
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
parameters: [
|
|
151
|
+
{
|
|
152
|
+
_type: 'var',
|
|
153
|
+
name: 'x',
|
|
154
|
+
},
|
|
155
|
+
],
|
|
156
|
+
},
|
|
157
|
+
name: 'Lastname',
|
|
158
|
+
},
|
|
159
|
+
],
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
_type: 'packageableElementPtr',
|
|
166
|
+
fullPath: 'runtime::TestRuntime',
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
],
|
|
171
|
+
parameters: [],
|
|
172
|
+
};
|
|
173
|
+
|
|
17
174
|
export const TEST_DATA__QueryBuilder_Accessors_SimpleProjection_WithPostFilter =
|
|
18
175
|
{
|
|
19
176
|
_type: 'lambda',
|