@finos/legend-query-builder 4.18.1 → 4.18.3
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/QueryBuilderSideBar.d.ts.map +1 -1
- package/lib/components/QueryBuilderSideBar.js +10 -2
- package/lib/components/QueryBuilderSideBar.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/QueryBuilderTDSCellSelectionStatsBar.d.ts.map +1 -1
- package/lib/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.js +15 -3
- package/lib/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.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/components/sql-playground/SQLPlaygroundPanel.d.ts.map +1 -1
- package/lib/components/sql-playground/SQLPlaygroundPanel.js +9 -5
- package/lib/components/sql-playground/SQLPlaygroundPanel.js.map +1 -1
- package/lib/data-access-overview.css +1 -1
- package/lib/index.css +1 -17
- package/lib/index.css.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +1 -1
- package/lib/index.js.map +1 -1
- package/lib/package.json +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 +1 -2
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.d.ts.map +1 -1
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.js +1 -3
- package/lib/stores/workflows/accessor/AccessorQueryBuilderState.js.map +1 -1
- package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.d.ts +11 -6
- package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.d.ts.map +1 -1
- package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js +150 -49
- package/lib/stores/workflows/dataProduct/DataProductQueryBuilderState.js.map +1 -1
- package/package.json +10 -10
- package/src/components/QueryBuilder.tsx +0 -1
- package/src/components/QueryBuilderSideBar.tsx +10 -7
- package/src/components/fetch-structure/QueryBuilderTDSPanel.tsx +7 -2
- package/src/components/filter/QueryBuilderFilterPanel.tsx +138 -69
- package/src/components/result/tds/QueryBuilderTDSCellSelectionStatsBar.tsx +33 -3
- package/src/components/result/tds/QueryBuilderTDSResultShared.tsx +4 -1
- package/src/components/sql-playground/SQLPlaygroundPanel.tsx +10 -5
- package/src/index.ts +1 -1
- 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 +1 -3
- package/src/stores/workflows/dataProduct/DataProductQueryBuilderState.ts +245 -76
|
@@ -126,6 +126,7 @@ import {
|
|
|
126
126
|
QUERY_BUILDER_FILTER_DND_TYPE,
|
|
127
127
|
QueryBuilderFilterTreeConditionNodeData,
|
|
128
128
|
type QueryBuilderFilterConditionDragSource,
|
|
129
|
+
FilterPropertyExpressionSourceState,
|
|
129
130
|
} from '../../stores/filter/QueryBuilderFilterState.js';
|
|
130
131
|
import { cloneAbstractPropertyExpression } from '../../stores/shared/ValueSpecificationEditorHelper.js';
|
|
131
132
|
import { buildPropertyExpressionFromExistsNode } from '../filter/QueryBuilderFilterPanel.js';
|
|
@@ -1368,7 +1369,11 @@ export const QueryBuilderTDSPanel = observer(
|
|
|
1368
1369
|
break;
|
|
1369
1370
|
}
|
|
1370
1371
|
case QUERY_BUILDER_FILTER_DND_TYPE.CONDITION:
|
|
1371
|
-
if (
|
|
1372
|
+
if (
|
|
1373
|
+
item.node instanceof QueryBuilderFilterTreeConditionNodeData &&
|
|
1374
|
+
item.node.condition.sourceState instanceof
|
|
1375
|
+
FilterPropertyExpressionSourceState
|
|
1376
|
+
) {
|
|
1372
1377
|
const propertyExpression = isExistsNodeChild(item.node)
|
|
1373
1378
|
? buildPropertyExpressionFromExistsNode(
|
|
1374
1379
|
tdsState.queryBuilderState.filterState,
|
|
@@ -1378,7 +1383,7 @@ export const QueryBuilderTDSPanel = observer(
|
|
|
1378
1383
|
item.node,
|
|
1379
1384
|
)
|
|
1380
1385
|
: cloneAbstractPropertyExpression(
|
|
1381
|
-
item.node.condition.propertyExpressionState
|
|
1386
|
+
item.node.condition.sourceState.propertyExpressionState
|
|
1382
1387
|
.propertyExpression,
|
|
1383
1388
|
tdsState.queryBuilderState.observerContext,
|
|
1384
1389
|
);
|
|
@@ -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);
|
|
@@ -280,7 +280,17 @@ export const QueryBuilderTDSCellSelectionStatsBar = observer(
|
|
|
280
280
|
<span className="query-builder__result__tds-grid__stats-bar__item__label">
|
|
281
281
|
Count:
|
|
282
282
|
</span>
|
|
283
|
-
<span
|
|
283
|
+
<span
|
|
284
|
+
className={clsx(
|
|
285
|
+
'query-builder__result__tds-grid__stats-bar__item__value',
|
|
286
|
+
{
|
|
287
|
+
'query-builder__result__tds-grid__stats-bar__item__value--with-chart':
|
|
288
|
+
!loading &&
|
|
289
|
+
stats.valueFrequencies !== undefined &&
|
|
290
|
+
stats.valueFrequencies.length > 0,
|
|
291
|
+
},
|
|
292
|
+
)}
|
|
293
|
+
>
|
|
284
294
|
{countReady ? cellCount : <StatsSpinner />}
|
|
285
295
|
</span>
|
|
286
296
|
{!loading &&
|
|
@@ -305,7 +315,17 @@ export const QueryBuilderTDSCellSelectionStatsBar = observer(
|
|
|
305
315
|
<span className="query-builder__result__tds-grid__stats-bar__item__label">
|
|
306
316
|
Unique Count:
|
|
307
317
|
</span>
|
|
308
|
-
<span
|
|
318
|
+
<span
|
|
319
|
+
className={clsx(
|
|
320
|
+
'query-builder__result__tds-grid__stats-bar__item__value',
|
|
321
|
+
{
|
|
322
|
+
'query-builder__result__tds-grid__stats-bar__item__value--with-chart':
|
|
323
|
+
!loading &&
|
|
324
|
+
stats.valueFrequencies !== undefined &&
|
|
325
|
+
stats.valueFrequencies.length > 0,
|
|
326
|
+
},
|
|
327
|
+
)}
|
|
328
|
+
>
|
|
309
329
|
{loading ? <StatsSpinner /> : stats.uniqueCount}
|
|
310
330
|
</span>
|
|
311
331
|
{!loading &&
|
|
@@ -330,7 +350,17 @@ export const QueryBuilderTDSCellSelectionStatsBar = observer(
|
|
|
330
350
|
<span className="query-builder__result__tds-grid__stats-bar__item__label">
|
|
331
351
|
Empty Count:
|
|
332
352
|
</span>
|
|
333
|
-
<span
|
|
353
|
+
<span
|
|
354
|
+
className={clsx(
|
|
355
|
+
'query-builder__result__tds-grid__stats-bar__item__value',
|
|
356
|
+
{
|
|
357
|
+
'query-builder__result__tds-grid__stats-bar__item__value--with-chart':
|
|
358
|
+
!loading &&
|
|
359
|
+
stats.valueFrequencies !== undefined &&
|
|
360
|
+
stats.valueFrequencies.length > 0,
|
|
361
|
+
},
|
|
362
|
+
)}
|
|
363
|
+
>
|
|
334
364
|
{loading ? <StatsSpinner /> : stats.nullCount}
|
|
335
365
|
</span>
|
|
336
366
|
{!loading &&
|
|
@@ -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())
|
|
@@ -26,6 +26,7 @@ import {
|
|
|
26
26
|
SquareIcon,
|
|
27
27
|
} from '@finos/legend-art';
|
|
28
28
|
import { prettyDuration } from '@finos/legend-shared';
|
|
29
|
+
import { useApplicationStore } from '@finos/legend-application';
|
|
29
30
|
import {
|
|
30
31
|
PlaygroundSQLCodeEditor,
|
|
31
32
|
type SQLPlaygroundPanelProps,
|
|
@@ -51,6 +52,10 @@ export const SQLPlaygroundEditorResultPanel = observer(
|
|
|
51
52
|
accessorExplorerState,
|
|
52
53
|
showAccessorExplorer = false,
|
|
53
54
|
} = props;
|
|
55
|
+
const applicationStore = useApplicationStore();
|
|
56
|
+
const isGlobalDarkMode =
|
|
57
|
+
!applicationStore.layoutService.TEMPORARY__isLightColorThemeEnabled;
|
|
58
|
+
const effectiveDarkMode = enableDarkMode || isGlobalDarkMode;
|
|
54
59
|
|
|
55
60
|
const executeRawSQL = (): void => {
|
|
56
61
|
playgroundState.executeRawSQL();
|
|
@@ -91,14 +96,14 @@ export const SQLPlaygroundEditorResultPanel = observer(
|
|
|
91
96
|
playgroundState={playgroundState}
|
|
92
97
|
advancedMode={advancedMode}
|
|
93
98
|
disableDragDrop={disableDragDrop}
|
|
94
|
-
enableDarkMode={
|
|
99
|
+
enableDarkMode={effectiveDarkMode}
|
|
95
100
|
/>
|
|
96
101
|
</ResizablePanel>
|
|
97
102
|
<ResizablePanelSplitter />
|
|
98
103
|
<ResizablePanel size={300}>
|
|
99
104
|
<div
|
|
100
105
|
className={clsx('panel__header', {
|
|
101
|
-
'panel__header--dark':
|
|
106
|
+
'panel__header--dark': effectiveDarkMode,
|
|
102
107
|
})}
|
|
103
108
|
>
|
|
104
109
|
<div className="panel__header__title">
|
|
@@ -115,7 +120,7 @@ export const SQLPlaygroundEditorResultPanel = observer(
|
|
|
115
120
|
(resultDescription ?? '')}
|
|
116
121
|
</div>
|
|
117
122
|
</div>
|
|
118
|
-
<div className={
|
|
123
|
+
<div className={clsx({ 'light-mode': !effectiveDarkMode })}>
|
|
119
124
|
<div className="panel__header__actions query-builder__result__header__actions">
|
|
120
125
|
{advancedMode && (
|
|
121
126
|
<div className="query-builder__result__advanced__mode">
|
|
@@ -166,7 +171,7 @@ export const SQLPlaygroundEditorResultPanel = observer(
|
|
|
166
171
|
result={playgroundState.sqlExecutionResult.value}
|
|
167
172
|
useAdvancedGrid={advancedMode}
|
|
168
173
|
useLocalMode={playgroundState.isLocalModeEnabled}
|
|
169
|
-
enableDarkMode={
|
|
174
|
+
enableDarkMode={effectiveDarkMode}
|
|
170
175
|
/>
|
|
171
176
|
)}
|
|
172
177
|
{playgroundState.sqlExecutionResult instanceof
|
|
@@ -177,7 +182,7 @@ export const SQLPlaygroundEditorResultPanel = observer(
|
|
|
177
182
|
result={playgroundState.sqlExecutionResult.result}
|
|
178
183
|
useAdvancedGrid={advancedMode}
|
|
179
184
|
useLocalMode={playgroundState.isLocalModeEnabled}
|
|
180
|
-
enableDarkMode={
|
|
185
|
+
enableDarkMode={effectiveDarkMode}
|
|
181
186
|
/>
|
|
182
187
|
)}
|
|
183
188
|
</ResizablePanel>
|
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,
|
|
@@ -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',
|