@itwin/presentation-shared 2.0.0-alpha.9 → 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/CHANGELOG.md +675 -0
- package/README.md +59 -27
- package/lib/presentation-shared.d.ts +24 -0
- package/lib/presentation-shared.d.ts.map +1 -0
- package/lib/presentation-shared.js +22 -0
- package/lib/presentation-shared.js.map +1 -0
- package/lib/shared/ConcatenatedValue.d.ts.map +1 -0
- package/lib/shared/ConcatenatedValue.js.map +1 -0
- package/lib/{cjs/shared → shared}/ECSqlCore.d.ts +16 -2
- package/lib/shared/ECSqlCore.d.ts.map +1 -0
- package/lib/shared/ECSqlCore.js +37 -0
- package/lib/shared/ECSqlCore.js.map +1 -0
- package/lib/shared/EachValueFrom.d.ts +30 -0
- package/lib/shared/EachValueFrom.d.ts.map +1 -0
- package/lib/shared/EachValueFrom.js +115 -0
- package/lib/shared/EachValueFrom.js.map +1 -0
- package/lib/shared/Event.d.ts.map +1 -0
- package/lib/{esm/shared → shared}/Event.js.map +1 -1
- package/lib/shared/Formatting.d.ts.map +1 -0
- package/lib/{esm/shared → shared}/Formatting.js +10 -6
- package/lib/shared/Formatting.js.map +1 -0
- package/lib/shared/HiddenClasses.d.ts +21 -0
- package/lib/shared/HiddenClasses.d.ts.map +1 -0
- package/lib/shared/HiddenClasses.js +52 -0
- package/lib/shared/HiddenClasses.js.map +1 -0
- package/lib/{cjs/shared → shared}/InstanceLabelSelectClauseFactory.d.ts +3 -63
- package/lib/shared/InstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/shared/InstanceLabelSelectClauseFactory.js +27 -0
- package/lib/shared/InstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/shared/Logging.d.ts.map +1 -0
- package/lib/{esm/shared → shared}/Logging.js +2 -1
- package/lib/shared/Logging.js.map +1 -0
- package/lib/shared/MappedTypes.d.ts +55 -0
- package/lib/shared/MappedTypes.d.ts.map +1 -0
- package/lib/shared/MappedTypes.js.map +1 -0
- package/lib/shared/Metadata.d.ts +572 -0
- package/lib/shared/Metadata.d.ts.map +1 -0
- package/lib/{esm/shared → shared}/Metadata.js +7 -3
- package/lib/shared/Metadata.js.map +1 -0
- package/lib/{cjs/shared → shared}/Utils.d.ts +0 -6
- package/lib/shared/Utils.d.ts.map +1 -0
- package/lib/{esm/shared → shared}/Utils.js +16 -21
- package/lib/shared/Utils.js.map +1 -0
- package/lib/shared/Values.d.ts +144 -0
- package/lib/shared/Values.d.ts.map +1 -0
- package/lib/shared/Values.js +121 -0
- package/lib/shared/Values.js.map +1 -0
- package/lib/shared/ecsql-snippets/ECSqlHiddenClassesSnippets.d.ts +40 -0
- package/lib/shared/ecsql-snippets/ECSqlHiddenClassesSnippets.d.ts.map +1 -0
- package/lib/shared/ecsql-snippets/ECSqlHiddenClassesSnippets.js +66 -0
- package/lib/shared/ecsql-snippets/ECSqlHiddenClassesSnippets.js.map +1 -0
- package/lib/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +174 -0
- package/lib/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +1 -0
- package/lib/shared/ecsql-snippets/ECSqlJoinSnippets.js +177 -0
- package/lib/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +1 -0
- package/lib/{cjs/shared → shared}/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts +9 -1
- package/lib/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +1 -0
- package/lib/{esm/shared → shared}/ecsql-snippets/ECSqlValueSelectorSnippets.js +22 -8
- package/lib/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +1 -0
- package/lib/shared/ecsql-snippets/index.d.ts +4 -0
- package/lib/shared/ecsql-snippets/index.d.ts.map +1 -0
- package/lib/shared/ecsql-snippets/index.js +8 -0
- package/lib/shared/ecsql-snippets/index.js.map +1 -0
- package/lib/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.d.ts +17 -0
- package/lib/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js +48 -0
- package/lib/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts +39 -0
- package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js +60 -0
- package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts +12 -0
- package/lib/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js +37 -0
- package/lib/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.d.ts +198 -0
- package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.d.ts.map +1 -0
- package/lib/{esm/shared/ECSqlCore.js → shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js} +4 -1
- package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.Rules.js.map +1 -0
- package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts +34 -0
- package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.d.ts.map +1 -0
- package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js +332 -0
- package/lib/shared/instance-label-factory-impls/IModelInstanceLabelSelectClauseFactory.js.map +1 -0
- package/lib/shared/instance-label-factory-impls/Utils.d.ts +7 -0
- package/lib/shared/instance-label-factory-impls/Utils.d.ts.map +1 -0
- package/lib/shared/instance-label-factory-impls/Utils.js +21 -0
- package/lib/shared/instance-label-factory-impls/Utils.js.map +1 -0
- package/package.json +22 -31
- package/lib/cjs/package.json +0 -1
- package/lib/cjs/presentation-shared.d.ts +0 -17
- package/lib/cjs/presentation-shared.d.ts.map +0 -1
- package/lib/cjs/presentation-shared.js +0 -71
- package/lib/cjs/presentation-shared.js.map +0 -1
- package/lib/cjs/shared/ConcatenatedValue.d.ts.map +0 -1
- package/lib/cjs/shared/ConcatenatedValue.js +0 -49
- package/lib/cjs/shared/ConcatenatedValue.js.map +0 -1
- package/lib/cjs/shared/ECSqlCore.d.ts.map +0 -1
- package/lib/cjs/shared/ECSqlCore.js +0 -7
- package/lib/cjs/shared/ECSqlCore.js.map +0 -1
- package/lib/cjs/shared/Event.d.ts.map +0 -1
- package/lib/cjs/shared/Event.js +0 -7
- package/lib/cjs/shared/Event.js.map +0 -1
- package/lib/cjs/shared/Formatting.d.ts.map +0 -1
- package/lib/cjs/shared/Formatting.js +0 -114
- package/lib/cjs/shared/Formatting.js.map +0 -1
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.d.ts.map +0 -1
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.js +0 -166
- package/lib/cjs/shared/InstanceLabelSelectClauseFactory.js.map +0 -1
- package/lib/cjs/shared/Logging.d.ts.map +0 -1
- package/lib/cjs/shared/Logging.js +0 -20
- package/lib/cjs/shared/Logging.js.map +0 -1
- package/lib/cjs/shared/MappedTypes.d.ts +0 -17
- package/lib/cjs/shared/MappedTypes.d.ts.map +0 -1
- package/lib/cjs/shared/MappedTypes.js +0 -7
- package/lib/cjs/shared/MappedTypes.js.map +0 -1
- package/lib/cjs/shared/Metadata.d.ts +0 -294
- package/lib/cjs/shared/Metadata.d.ts.map +0 -1
- package/lib/cjs/shared/Metadata.js +0 -53
- package/lib/cjs/shared/Metadata.js.map +0 -1
- package/lib/cjs/shared/Utils.d.ts.map +0 -1
- package/lib/cjs/shared/Utils.js +0 -113
- package/lib/cjs/shared/Utils.js.map +0 -1
- package/lib/cjs/shared/Values.d.ts +0 -107
- package/lib/cjs/shared/Values.d.ts.map +0 -1
- package/lib/cjs/shared/Values.js +0 -155
- package/lib/cjs/shared/Values.js.map +0 -1
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +0 -51
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +0 -1
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.js +0 -140
- package/lib/cjs/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +0 -1
- package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +0 -1
- package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js +0 -260
- package/lib/cjs/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +0 -1
- package/lib/cjs/shared/ecsql-snippets/index.d.ts +0 -3
- package/lib/cjs/shared/ecsql-snippets/index.d.ts.map +0 -1
- package/lib/cjs/shared/ecsql-snippets/index.js +0 -18
- package/lib/cjs/shared/ecsql-snippets/index.js.map +0 -1
- package/lib/esm/presentation-shared.d.ts +0 -17
- package/lib/esm/presentation-shared.d.ts.map +0 -1
- package/lib/esm/presentation-shared.js +0 -14
- package/lib/esm/presentation-shared.js.map +0 -1
- package/lib/esm/shared/ConcatenatedValue.d.ts +0 -46
- package/lib/esm/shared/ConcatenatedValue.d.ts.map +0 -1
- package/lib/esm/shared/ConcatenatedValue.js.map +0 -1
- package/lib/esm/shared/ECSqlCore.d.ts +0 -94
- package/lib/esm/shared/ECSqlCore.d.ts.map +0 -1
- package/lib/esm/shared/ECSqlCore.js.map +0 -1
- package/lib/esm/shared/Event.d.ts +0 -27
- package/lib/esm/shared/Event.d.ts.map +0 -1
- package/lib/esm/shared/Formatting.d.ts +0 -44
- package/lib/esm/shared/Formatting.d.ts.map +0 -1
- package/lib/esm/shared/Formatting.js.map +0 -1
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.d.ts +0 -133
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.d.ts.map +0 -1
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.js +0 -160
- package/lib/esm/shared/InstanceLabelSelectClauseFactory.js.map +0 -1
- package/lib/esm/shared/Logging.d.ts +0 -27
- package/lib/esm/shared/Logging.d.ts.map +0 -1
- package/lib/esm/shared/Logging.js.map +0 -1
- package/lib/esm/shared/MappedTypes.d.ts +0 -17
- package/lib/esm/shared/MappedTypes.d.ts.map +0 -1
- package/lib/esm/shared/MappedTypes.js.map +0 -1
- package/lib/esm/shared/Metadata.d.ts +0 -294
- package/lib/esm/shared/Metadata.d.ts.map +0 -1
- package/lib/esm/shared/Metadata.js.map +0 -1
- package/lib/esm/shared/Utils.d.ts +0 -66
- package/lib/esm/shared/Utils.d.ts.map +0 -1
- package/lib/esm/shared/Utils.js.map +0 -1
- package/lib/esm/shared/Values.d.ts +0 -107
- package/lib/esm/shared/Values.d.ts.map +0 -1
- package/lib/esm/shared/Values.js +0 -152
- package/lib/esm/shared/Values.js.map +0 -1
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts +0 -51
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.d.ts.map +0 -1
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.js +0 -137
- package/lib/esm/shared/ecsql-snippets/ECSqlJoinSnippets.js.map +0 -1
- package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts +0 -122
- package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.d.ts.map +0 -1
- package/lib/esm/shared/ecsql-snippets/ECSqlValueSelectorSnippets.js.map +0 -1
- package/lib/esm/shared/ecsql-snippets/index.d.ts +0 -3
- package/lib/esm/shared/ecsql-snippets/index.d.ts.map +0 -1
- package/lib/esm/shared/ecsql-snippets/index.js +0 -7
- package/lib/esm/shared/ecsql-snippets/index.js.map +0 -1
- /package/lib/{cjs/shared → shared}/ConcatenatedValue.d.ts +0 -0
- /package/lib/{esm/shared → shared}/ConcatenatedValue.js +0 -0
- /package/lib/{cjs/shared → shared}/Event.d.ts +0 -0
- /package/lib/{esm/shared → shared}/Event.js +0 -0
- /package/lib/{cjs/shared → shared}/Formatting.d.ts +0 -0
- /package/lib/{cjs/shared → shared}/Logging.d.ts +0 -0
- /package/lib/{esm/shared → shared}/MappedTypes.js +0 -0
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { getClass } from "../Metadata.js";
|
|
6
|
+
import { createClassSelector, createRawPropertyValueSelector } from "./ECSqlValueSelectorSnippets.js";
|
|
7
|
+
/**
|
|
8
|
+
* Resolves a relationship path into a `RelationshipPathJoinInfo` (schema-reading pass; produces no ECSQL).
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
export async function createRelationshipPathJoinInfo(props) {
|
|
12
|
+
if (props.path.length === 0) {
|
|
13
|
+
return { steps: [] };
|
|
14
|
+
}
|
|
15
|
+
let prev = {
|
|
16
|
+
alias: props.path[0].sourceAlias,
|
|
17
|
+
joinPropertyName: "ECInstanceId",
|
|
18
|
+
className: props.path[0].sourceClassName,
|
|
19
|
+
};
|
|
20
|
+
const steps = [];
|
|
21
|
+
const bindings = {};
|
|
22
|
+
for (const stepDef of props.path) {
|
|
23
|
+
const step = await getRelationshipPathStepClasses(props.schemaProvider, stepDef);
|
|
24
|
+
const navigationProperty = getNavigationProperty(step);
|
|
25
|
+
const filterCondition = resolveInstanceFilterCondition(step);
|
|
26
|
+
// Source/target `ECClassId` selectors are resolved the same way regardless of how the
|
|
27
|
+
// relationship is represented: read from the source/target aliases actually joined for this step.
|
|
28
|
+
const sourceClassIdSelector = createRawPropertyValueSelector(prev.alias, "ECClassId");
|
|
29
|
+
const targetClassIdSelector = createRawPropertyValueSelector(step.targetAlias, "ECClassId");
|
|
30
|
+
if (step.instanceFilter?.bindings) {
|
|
31
|
+
for (const [key, value] of Object.entries(step.instanceFilter.bindings)) {
|
|
32
|
+
if (key in bindings) {
|
|
33
|
+
throw new Error(`Binding key "${key}" is used in multiple steps of the relationship path. Each binding key must be unique across all steps.`);
|
|
34
|
+
}
|
|
35
|
+
bindings[key] = value;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
if (navigationProperty) {
|
|
39
|
+
const isNavigationPropertyForward = navigationProperty.direction === "Forward";
|
|
40
|
+
// The navigation value (`.Id` and `.RelECClassId`) lives on the same alias that holds the
|
|
41
|
+
// navigation property in the join condition below.
|
|
42
|
+
const navigationValueAlias = isNavigationPropertyForward === !step.relationshipReverse ? prev.alias : step.targetAlias;
|
|
43
|
+
const joinCondition = isNavigationPropertyForward === !step.relationshipReverse
|
|
44
|
+
? `${createRawPropertyValueSelector(step.targetAlias, "ECInstanceId")} = ${createRawPropertyValueSelector(prev.alias, navigationProperty.name, "Id")}${filterCondition}`
|
|
45
|
+
: `${createRawPropertyValueSelector(step.targetAlias, navigationProperty.name, "Id")} = ${createRawPropertyValueSelector(prev.alias, prev.joinPropertyName)}${filterCondition}`;
|
|
46
|
+
steps.push({
|
|
47
|
+
relationshipClassIdSelector: createRawPropertyValueSelector(navigationValueAlias, navigationProperty.name, "RelECClassId"),
|
|
48
|
+
sourceClassIdSelector,
|
|
49
|
+
targetClassIdSelector,
|
|
50
|
+
joins: [
|
|
51
|
+
{
|
|
52
|
+
joinType: step.joinType ?? "inner",
|
|
53
|
+
joinTarget: { kind: "class", className: step.target.fullName },
|
|
54
|
+
joinAlias: step.targetAlias,
|
|
55
|
+
joinCondition,
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const joins = [];
|
|
62
|
+
const relPropNames = !step.relationshipReverse
|
|
63
|
+
? { this: "SourceECInstanceId", next: "TargetECInstanceId" }
|
|
64
|
+
: { this: "TargetECInstanceId", next: "SourceECInstanceId" };
|
|
65
|
+
const targetJoinCondition = `${createRawPropertyValueSelector(step.targetAlias, "ECInstanceId")} = ${createRawPropertyValueSelector(step.relationshipAlias, relPropNames.next)}${filterCondition}`;
|
|
66
|
+
if (step.joinType === "outer") {
|
|
67
|
+
joins.push({
|
|
68
|
+
joinType: "outer",
|
|
69
|
+
joinTarget: {
|
|
70
|
+
kind: "relationship-select",
|
|
71
|
+
relationshipClassName: step.relationship.fullName,
|
|
72
|
+
relationshipAlias: step.relationshipAlias,
|
|
73
|
+
innerTarget: { kind: "class", className: step.target.fullName },
|
|
74
|
+
innerTargetAlias: step.targetAlias,
|
|
75
|
+
innerJoinCondition: targetJoinCondition,
|
|
76
|
+
},
|
|
77
|
+
joinAlias: step.relationshipAlias,
|
|
78
|
+
joinCondition: `${createRawPropertyValueSelector(step.relationshipAlias, relPropNames.this)} = ${createRawPropertyValueSelector(prev.alias, prev.joinPropertyName)}`,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
joins.push({
|
|
83
|
+
joinType: "inner",
|
|
84
|
+
joinTarget: { kind: "class", className: step.relationship.fullName },
|
|
85
|
+
joinAlias: step.relationshipAlias,
|
|
86
|
+
joinCondition: `${createRawPropertyValueSelector(step.relationshipAlias, relPropNames.this)} = ${createRawPropertyValueSelector(prev.alias, prev.joinPropertyName)}`,
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
joins.push({
|
|
90
|
+
joinType: step.joinType ?? "inner",
|
|
91
|
+
joinTarget: { kind: "class", className: step.target.fullName },
|
|
92
|
+
joinAlias: step.targetAlias,
|
|
93
|
+
joinCondition: targetJoinCondition,
|
|
94
|
+
});
|
|
95
|
+
steps.push({
|
|
96
|
+
relationshipClassIdSelector: createRawPropertyValueSelector(step.relationshipAlias, "ECClassId"),
|
|
97
|
+
sourceClassIdSelector,
|
|
98
|
+
targetClassIdSelector,
|
|
99
|
+
joins,
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
prev = { alias: step.targetAlias, className: step.target.fullName, joinPropertyName: "ECInstanceId" };
|
|
103
|
+
}
|
|
104
|
+
return { steps, bindings: Object.keys(bindings).length > 0 ? bindings : undefined };
|
|
105
|
+
}
|
|
106
|
+
export function createRelationshipPathJoinClause(props) {
|
|
107
|
+
if ("steps" in props) {
|
|
108
|
+
return renderRelationshipPathJoinClause(props);
|
|
109
|
+
}
|
|
110
|
+
return createRelationshipPathJoinInfo(props).then(renderRelationshipPathJoinClause);
|
|
111
|
+
}
|
|
112
|
+
function renderRelationshipPathJoinClause(props) {
|
|
113
|
+
let joins = "";
|
|
114
|
+
const flatJoins = props.steps.flatMap((step) => step.joins);
|
|
115
|
+
for (const entry of flatJoins) {
|
|
116
|
+
const joinKw = entry.joinType === "outer" ? "LEFT OUTER JOIN" : "INNER JOIN";
|
|
117
|
+
if (entry.joinTarget.kind === "class") {
|
|
118
|
+
joins += `
|
|
119
|
+
${joinKw} ${createClassSelector(entry.joinTarget.className)} [${entry.joinAlias}] ON ${entry.joinCondition}
|
|
120
|
+
`;
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
const t = entry.joinTarget;
|
|
124
|
+
joins += `
|
|
125
|
+
${joinKw} (
|
|
126
|
+
SELECT [${t.relationshipAlias}].*
|
|
127
|
+
FROM ${createClassSelector(t.relationshipClassName)} [${t.relationshipAlias}]
|
|
128
|
+
INNER JOIN ${createClassSelector(t.innerTarget.className)} [${t.innerTargetAlias}] ON ${t.innerJoinCondition}
|
|
129
|
+
) [${entry.joinAlias}] ON ${entry.joinCondition}
|
|
130
|
+
`;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return { joins, bindings: props.bindings };
|
|
134
|
+
}
|
|
135
|
+
function resolveInstanceFilterCondition(step) {
|
|
136
|
+
if (!step.instanceFilter) {
|
|
137
|
+
return "";
|
|
138
|
+
}
|
|
139
|
+
const { expression, targetAlias = "this", relationshipAlias = "rel" } = step.instanceFilter;
|
|
140
|
+
const resolvedExpression = expression
|
|
141
|
+
.replaceAll(`[${targetAlias}].`, `[${step.targetAlias}].`)
|
|
142
|
+
.replaceAll(`${targetAlias}.`, `[${step.targetAlias}].`)
|
|
143
|
+
.replaceAll(`[${relationshipAlias}].`, `[${step.relationshipAlias}].`)
|
|
144
|
+
.replaceAll(`${relationshipAlias}.`, `[${step.relationshipAlias}].`);
|
|
145
|
+
return ` AND (${resolvedExpression})`;
|
|
146
|
+
}
|
|
147
|
+
async function getRelationshipPathStepClasses(schemaProvider, step) {
|
|
148
|
+
const { sourceClassName, relationshipName, targetClassName, ...rest } = step;
|
|
149
|
+
return {
|
|
150
|
+
...rest,
|
|
151
|
+
source: await getClass(schemaProvider, sourceClassName),
|
|
152
|
+
relationship: (await getClass(schemaProvider, relationshipName)),
|
|
153
|
+
target: await getClass(schemaProvider, targetClassName),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function getNavigationProperty(step) {
|
|
157
|
+
const source = !step.relationshipReverse ? step.source : step.target;
|
|
158
|
+
const target = !step.relationshipReverse ? step.target : step.source;
|
|
159
|
+
for (const prop of source.getProperties()) {
|
|
160
|
+
/* v8 ignore else -- @preserve */
|
|
161
|
+
if (prop.isNavigation() &&
|
|
162
|
+
prop.direction === "Forward" &&
|
|
163
|
+
prop.relationshipClass.fullName === step.relationship.fullName) {
|
|
164
|
+
return prop;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
for (const prop of target.getProperties()) {
|
|
168
|
+
/* v8 ignore else -- @preserve */
|
|
169
|
+
if (prop.isNavigation() &&
|
|
170
|
+
prop.direction === "Backward" &&
|
|
171
|
+
prop.relationshipClass.fullName === step.relationship.fullName) {
|
|
172
|
+
return prop;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return undefined;
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=ECSqlJoinSnippets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ECSqlJoinSnippets.js","sourceRoot":"","sources":["../../../src/shared/ecsql-snippets/ECSqlJoinSnippets.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,7 +38,7 @@ export declare function createPrimitivePropertyValueSelectorProps({ schemaProvid
|
|
|
38
38
|
/** Access to schema information. */
|
|
39
39
|
schemaProvider: ECSchemaProvider;
|
|
40
40
|
/** Full class name of the property. Format: `SchemaName.ClassName`. */
|
|
41
|
-
propertyClassName: EC.
|
|
41
|
+
propertyClassName: EC.FullClassNameDotNotation;
|
|
42
42
|
/** Query alias of the class that contains the property. */
|
|
43
43
|
propertyClassAlias: string;
|
|
44
44
|
/** Name of the property to create `TypedPrimitiveValue` for. */
|
|
@@ -61,6 +61,14 @@ export declare function createRawPropertyValueSelector(classAlias: string, prope
|
|
|
61
61
|
* @public
|
|
62
62
|
*/
|
|
63
63
|
export declare function createRawPrimitiveValueSelector(value: PrimitiveValue | undefined): string;
|
|
64
|
+
/**
|
|
65
|
+
* Converts a full class name (`SchemaName.ClassName`) into a
|
|
66
|
+
* bracket-quoted ECSQL class selector: `[SchemaName].[ClassName]`.
|
|
67
|
+
*
|
|
68
|
+
* @throws Error if the provided full class name is not valid.
|
|
69
|
+
* @public
|
|
70
|
+
*/
|
|
71
|
+
export declare function createClassSelector(fullClassName: EC.FullClassNameDotNotation): string;
|
|
64
72
|
/**
|
|
65
73
|
* Creates an ECSQL selector that results in a stringified `InstanceKey` object.
|
|
66
74
|
* @public
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ECSqlValueSelectorSnippets.d.ts","sourceRoot":"","sources":["../../../src/shared/ecsql-snippets/ECSqlValueSelectorSnippets.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,EAAE,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAExD;;;GAGG;AACH,KAAK,gCAAgC,GAAG;IACtC,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,CACA;IACE,+CAA+C;IAC/C,IAAI,CAAC,EAAE,SAAS,CAAC;CAClB,GACD;IAAE,IAAI,EAAE,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACtE;IAAE,IAAI,EAAE,OAAO,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAC3F,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,2BAA2B,GAAG,mBAAmB,GAAG,gCAAgC,CAAC;AAEjG,cAAc;AAEd,yBAAiB,2BAA2B,CAAC;IAC3C,SAAgB,gBAAgB,CAAC,KAAK,EAAE,2BAA2B,GAAG,KAAK,IAAI,mBAAmB,CAEjG;IACD,SAAgB,wBAAwB,CACtC,KAAK,EAAE,2BAA2B,GACjC,KAAK,IAAI,gCAAgC,CAE3C;CACF;AAED;;;;GAIG;AACH,wBAAsB,yCAAyC,CAAC,EAC9D,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,GACb,EAAE;IACD,oCAAoC;IACpC,cAAc,EAAE,gBAAgB,CAAC;IACjC,uEAAuE;IACvE,iBAAiB,EAAE,EAAE,CAAC,wBAAwB,CAAC;IAC/C,2DAA2D;IAC3D,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,YAAY,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,gCAAgC,CAAC,CAsD5C;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,MAAM,EAClB,YAAY,EAAE,MAAM,EACpB,aAAa,CAAC,EAAE,MAAM,GACrB,MAAM,CAMR;AAED;;;;;;;;GAQG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,cAAc,GAAG,SAAS,UAqBhF;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,aAAa,EAAE,EAAE,CAAC,wBAAwB,GAAG,MAAM,CAGtF;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,UAIjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAEtG;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,mCAAmC,CAAC,SAAS,EAAE,2BAA2B,EAAE,EAAE,aAAa,CAAC,EAAE,MAAM,UAMnH;AA2CD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qCAAqC,CACnD,SAAS,EAAE,2BAA2B,EAAE,EACxC,aAAa,CAAC,EAAE,MAAM,UASvB"}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*--------------------------------------------------------------------------------------------*/
|
|
5
5
|
import { Id64 } from "@itwin/core-bentley";
|
|
6
6
|
import { getClass } from "../Metadata.js";
|
|
7
|
+
import { parseFullClassName } from "../Utils.js";
|
|
7
8
|
import { PrimitiveValue } from "../Values.js";
|
|
8
9
|
/** @public */
|
|
9
10
|
// eslint-disable-next-line @typescript-eslint/no-redeclare
|
|
@@ -25,7 +26,7 @@ export var TypedValueSelectClauseProps;
|
|
|
25
26
|
*/
|
|
26
27
|
export async function createPrimitivePropertyValueSelectorProps({ schemaProvider, propertyClassAlias, propertyClassName, propertyName, }) {
|
|
27
28
|
const ecClass = await getClass(schemaProvider, propertyClassName);
|
|
28
|
-
const property =
|
|
29
|
+
const property = ecClass.getProperty(propertyName);
|
|
29
30
|
if (!property) {
|
|
30
31
|
throw new Error(`The property "${propertyName}" not found in class "${propertyClassName}".`);
|
|
31
32
|
}
|
|
@@ -50,27 +51,27 @@ export async function createPrimitivePropertyValueSelectorProps({ schemaProvider
|
|
|
50
51
|
return {
|
|
51
52
|
selector: `json_object('x', ${propertySelector}.[x], 'y', ${propertySelector}.[y])`,
|
|
52
53
|
type: "Point2d",
|
|
53
|
-
...(extendedType ? { extendedType } : /*
|
|
54
|
+
...(extendedType ? { extendedType } : /* v8 ignore next */ {}),
|
|
54
55
|
};
|
|
55
56
|
case "Point3d":
|
|
56
57
|
return {
|
|
57
58
|
selector: `json_object('x', ${propertySelector}.[x], 'y', ${propertySelector}.[y], 'z', ${propertySelector}.[z])`,
|
|
58
59
|
type: "Point3d",
|
|
59
|
-
...(extendedType ? { extendedType } : /*
|
|
60
|
+
...(extendedType ? { extendedType } : /* v8 ignore next */ {}),
|
|
60
61
|
};
|
|
61
62
|
case "Double":
|
|
62
|
-
const koqName =
|
|
63
|
+
const koqName = property.kindOfQuantity?.fullName;
|
|
63
64
|
return {
|
|
64
65
|
selector: propertySelector,
|
|
65
66
|
type: "Double",
|
|
66
|
-
...(extendedType ? { extendedType } : /*
|
|
67
|
-
...(koqName ? { koqName } : /*
|
|
67
|
+
...(extendedType ? { extendedType } : /* v8 ignore next */ {}),
|
|
68
|
+
...(koqName ? { koqName } : /* v8 ignore next */ {}),
|
|
68
69
|
};
|
|
69
70
|
}
|
|
70
71
|
return {
|
|
71
72
|
selector: propertySelector,
|
|
72
73
|
type: propertyValueType,
|
|
73
|
-
...(extendedType ? { extendedType } : /*
|
|
74
|
+
...(extendedType ? { extendedType } : /* v8 ignore next */ {}),
|
|
74
75
|
};
|
|
75
76
|
}
|
|
76
77
|
/**
|
|
@@ -117,6 +118,17 @@ export function createRawPrimitiveValueSelector(value) {
|
|
|
117
118
|
return value ? "TRUE" : "FALSE";
|
|
118
119
|
}
|
|
119
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Converts a full class name (`SchemaName.ClassName`) into a
|
|
123
|
+
* bracket-quoted ECSQL class selector: `[SchemaName].[ClassName]`.
|
|
124
|
+
*
|
|
125
|
+
* @throws Error if the provided full class name is not valid.
|
|
126
|
+
* @public
|
|
127
|
+
*/
|
|
128
|
+
export function createClassSelector(fullClassName) {
|
|
129
|
+
const { schemaName, className } = parseFullClassName(fullClassName);
|
|
130
|
+
return `[${schemaName}].[${className}]`;
|
|
131
|
+
}
|
|
120
132
|
/**
|
|
121
133
|
* Creates an ECSQL selector that results in a stringified `InstanceKey` object.
|
|
122
134
|
* @public
|
|
@@ -223,7 +235,9 @@ function createPrimitiveValueJsonSelector(value) {
|
|
|
223
235
|
* @public
|
|
224
236
|
*/
|
|
225
237
|
export function createConcatenatedValueStringSelector(selectors, checkSelector) {
|
|
226
|
-
const combinedSelectors = selectors.length
|
|
238
|
+
const combinedSelectors = selectors.length
|
|
239
|
+
? selectors.map((sel) => createTypedValueStringSelector(sel)).join(" || ")
|
|
240
|
+
: "''";
|
|
227
241
|
if (checkSelector) {
|
|
228
242
|
return createNullableSelector({ checkSelector, valueSelector: combinedSelectors });
|
|
229
243
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ECSqlValueSelectorSnippets.js","sourceRoot":"","sources":["../../../src/shared/ecsql-snippets/ECSqlValueSelectorSnippets.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AA2B9C,cAAc;AACd,2DAA2D;AAC3D,MAAM,KAAW,2BAA2B,CAS3C;AATD,WAAiB,2BAA2B;IAC1C,SAAgB,gBAAgB,CAAC,KAAkC;QACjE,OAAO,OAAO,IAAI,KAAK,CAAC;IAC1B,CAAC;IAFe,4BAAA,gBAAgB,mBAE/B,CAAA;IACD,SAAgB,wBAAwB,CACtC,KAAkC;QAElC,OAAO,UAAU,IAAI,KAAK,CAAC;IAC7B,CAAC;IAJe,4BAAA,wBAAwB,2BAIvC,CAAA;AACH,CAAC,EATgB,2BAA2B,KAA3B,2BAA2B,QAS3C;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,yCAAyC,CAAC,EAC9D,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,YAAY,GAUb;IACC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAClE,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,iBAAiB,YAAY,yBAAyB,iBAAiB,IAAI,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,gBAAgB,GAAG,8BAA8B,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC;IAE1F,IAAI,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC;QAC5B,OAAO,EAAE,QAAQ,EAAE,GAAG,gBAAgB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,iBAAiB,YAAY,qDAAqD,CAAC,CAAC;IACtG,CAAC;IAED,MAAM,iBAAiB,GAAG,QAAQ,CAAC,aAAa,CAAC;IACjD,MAAM,YAAY,GAAG,QAAQ,CAAC,gBAAgB,CAAC;IAE/C,QAAQ,iBAAiB,EAAE,CAAC;QAC1B,KAAK,WAAW;YACd,MAAM,IAAI,KAAK,CAAC,iBAAiB,YAAY,yCAAyC,CAAC,CAAC;QAC1F,KAAK,QAAQ;YACX,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;gBAC9B,OAAO,EAAE,QAAQ,EAAE,aAAa,gBAAgB,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;YACxE,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,iBAAiB,YAAY,sCAAsC,CAAC,CAAC;QACvF,KAAK,SAAS;YACZ,OAAO;gBACL,QAAQ,EAAE,oBAAoB,gBAAgB,cAAc,gBAAgB,OAAO;gBACnF,IAAI,EAAE,SAAS;gBACf,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC;aAC/D,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,QAAQ,EAAE,oBAAoB,gBAAgB,cAAc,gBAAgB,cAAc,gBAAgB,OAAO;gBACjH,IAAI,EAAE,SAAS;gBACf,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC;aAC/D,CAAC;QACJ,KAAK,QAAQ;YACX,MAAM,OAAO,GAAG,QAAQ,CAAC,cAAc,EAAE,QAAQ,CAAC;YAClD,OAAO;gBACL,QAAQ,EAAE,gBAAgB;gBAC1B,IAAI,EAAE,QAAQ;gBACd,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC;gBAC9D,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC;aACrD,CAAC;IACN,CAAC;IACD,OAAO;QACL,QAAQ,EAAE,gBAAgB;QAC1B,IAAI,EAAE,iBAAiB;QACvB,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC;KAC/D,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,8BAA8B,CAC5C,UAAkB,EAClB,YAAoB,EACpB,aAAsB;IAEtB,IAAI,gBAAgB,GAAG,IAAI,UAAU,MAAM,YAAY,GAAG,CAAC;IAC3D,IAAI,aAAa,EAAE,CAAC;QAClB,gBAAgB,IAAI,KAAK,aAAa,GAAG,CAAC;IAC5C,CAAC;IACD,OAAO,gBAAgB,CAAC;AAC1B,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,+BAA+B,CAAC,KAAiC;IAC/E,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,OAAO,cAAc,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC;IAC/C,CAAC;IACD,IAAI,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,oBAAoB,KAAK,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,GAAG,CAAC;IAC1E,CAAC;IACD,IAAI,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,oBAAoB,KAAK,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,GAAG,CAAC;IACzD,CAAC;IACD,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;QACnD,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACpC,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,aAA0C;IAC5E,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACpE,OAAO,IAAI,UAAU,MAAM,SAAS,GAAG,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,KAAwB;IAChE,MAAM,eAAe,GAAG,IAAI,KAAK,CAAC,KAAK,eAAe,CAAC;IACvD,MAAM,qBAAqB,GAAG,YAAY,KAAK,CAAC,KAAK,mBAAmB,CAAC;IACzE,OAAO,yCAAyC,eAAe,mBAAmB,qBAAqB,GAAG,CAAC;AAC7G,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAuD;IAC5F,OAAO,OAAO,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,SAAS,CAAC;AACrE,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,mCAAmC,CAAC,SAAwC,EAAE,aAAsB;IAClH,MAAM,iBAAiB,GAAG,cAAc,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;IAChH,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,sBAAsB,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AACD,SAAS,4BAA4B,CAAC,KAAkC;IACtE,IAAI,aAAqB,CAAC;IAC1B,IAAI,2BAA2B,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QACxD,aAAa,GAAG,gCAAgC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC;SAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC;IACjC,CAAC;SAAM,CAAC;QACN,OAAO,KAAK,CAAC,QAAQ,CAAC;IACxB,CAAC;IAED,MAAM,IAAI,GAAG;QACX,KAAK,EAAE,aAAa;QACpB,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,GAAG;QACvB,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,KAAK,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvF,CAAC;IACF,OAAO;kBACS,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,KAAK,EAAE,CAAC;SAC3C,IAAI,CAAC,IAAI,CAAC;GACd,CAAC;AACJ,CAAC;AACD,SAAS,gCAAgC,CAAC,KAAqB;IAC7D,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,OAAO,IAAI,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC;IACpC,CAAC;IACD,IAAI,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,oBAAoB,KAAK,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,GAAG,CAAC;IAC1E,CAAC;IACD,IAAI,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,oBAAoB,KAAK,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,GAAG,CAAC;IACzD,CAAC;IACD,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC;QACnD,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;QAC1B,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IACpC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,qCAAqC,CACnD,SAAwC,EACxC,aAAsB;IAEtB,MAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM;QACxC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,8BAA8B,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAC1E,CAAC,CAAC,IAAI,CAAC;IACT,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,sBAAsB,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,iBAAiB,EAAE,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AACD,SAAS,8BAA8B,CAAC,KAAkC;IACxE,IAAI,2BAA2B,CAAC,wBAAwB,CAAC,KAAK,CAAC,EAAE,CAAC;QAChE,OAAO,QAAQ,KAAK,CAAC,QAAQ,WAAW,CAAC;IAC3C,CAAC;IACD,OAAO,kCAAkC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AACD,SAAS,kCAAkC,CAAC,KAAqB;IAC/D,IAAI,KAAK,YAAY,IAAI,EAAE,CAAC;QAC1B,OAAO,IAAI,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC;IACvC,CAAC;IACD,IAAI,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,KAAK,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;IACD,IAAI,cAAc,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;QACpC,OAAO,KAAK,KAAK,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,IAAI,CAAC;IACtC,CAAC;IACD,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { createClassSelector, createRawPropertyValueSelector, createRawPrimitiveValueSelector, createNullableSelector, createConcatenatedValueJsonSelector, createConcatenatedValueStringSelector, createInstanceKeySelector, createPrimitivePropertyValueSelectorProps, } from "./ECSqlValueSelectorSnippets.js";
|
|
2
|
+
export { createRelationshipPathJoinClause, createRelationshipPathJoinInfo } from "./ECSqlJoinSnippets.js";
|
|
3
|
+
export { createHiddenClassesFilter } from "./ECSqlHiddenClassesSnippets.js";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/ecsql-snippets/index.ts"],"names":[],"mappings":"AAKA,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,+BAA+B,EAC/B,sBAAsB,EACtB,mCAAmC,EACnC,qCAAqC,EACrC,yBAAyB,EACzB,yCAAyC,GAC1C,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAC1G,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
export { createClassSelector, createRawPropertyValueSelector, createRawPrimitiveValueSelector, createNullableSelector, createConcatenatedValueJsonSelector, createConcatenatedValueStringSelector, createInstanceKeySelector, createPrimitivePropertyValueSelectorProps, } from "./ECSqlValueSelectorSnippets.js";
|
|
6
|
+
export { createRelationshipPathJoinClause, createRelationshipPathJoinInfo } from "./ECSqlJoinSnippets.js";
|
|
7
|
+
export { createHiddenClassesFilter } from "./ECSqlHiddenClassesSnippets.js";
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/shared/ecsql-snippets/index.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EACL,mBAAmB,EACnB,8BAA8B,EAC9B,+BAA+B,EAC/B,sBAAsB,EACtB,mCAAmC,EACnC,qCAAqC,EACrC,yBAAyB,EACzB,yCAAyC,GAC1C,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,gCAAgC,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAC1G,OAAO,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { IInstanceLabelSelectClauseFactory } from "../InstanceLabelSelectClauseFactory.js";
|
|
2
|
+
import type { ECSchemaProvider } from "../Metadata.js";
|
|
3
|
+
/**
|
|
4
|
+
* Props for `createBisInstanceLabelSelectClauseFactory`.
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
interface BisInstanceLabelSelectClauseFactoryProps {
|
|
8
|
+
imodelAccess: Pick<ECSchemaProvider, "classDerivesFrom">;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Creates a label select clause according to BIS instance label rules.
|
|
12
|
+
* @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
|
|
13
|
+
* @public
|
|
14
|
+
*/
|
|
15
|
+
export declare function createBisInstanceLabelSelectClauseFactory(props: BisInstanceLabelSelectClauseFactoryProps): IInstanceLabelSelectClauseFactory;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=BisInstanceLabelSelectClauseFactory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BisInstanceLabelSelectClauseFactory.d.ts","sourceRoot":"","sources":["../../../src/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAChG,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGvD;;;GAGG;AACH,UAAU,wCAAwC;IAChD,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;CAC1D;AAED;;;;GAIG;AACH,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,wCAAwC,GAC9C,iCAAiC,CA0CnC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { createRawPropertyValueSelector } from "../ecsql-snippets/ECSqlValueSelectorSnippets.js";
|
|
6
|
+
import { createClassBasedInstanceLabelSelectClauseFactory } from "./ClassBasedInstanceLabelSelectClauseFactory.js";
|
|
7
|
+
import { ALIAS_PREFIX, concatenate, createECInstanceIdSuffixSelectors } from "./Utils.js";
|
|
8
|
+
/**
|
|
9
|
+
* Creates a label select clause according to BIS instance label rules.
|
|
10
|
+
* @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
|
|
11
|
+
* @public
|
|
12
|
+
*/
|
|
13
|
+
export function createBisInstanceLabelSelectClauseFactory(props) {
|
|
14
|
+
const clauses = [];
|
|
15
|
+
const factory = createClassBasedInstanceLabelSelectClauseFactory({ imodelAccess: props.imodelAccess, clauses });
|
|
16
|
+
clauses.push({
|
|
17
|
+
className: "BisCore.GeometricElement",
|
|
18
|
+
clause: async ({ classAlias, ...rest }) => `
|
|
19
|
+
COALESCE(
|
|
20
|
+
${createRawPropertyValueSelector(classAlias, "CodeValue")},
|
|
21
|
+
${concatenate(rest, [
|
|
22
|
+
{ selector: createRawPropertyValueSelector(classAlias, "UserLabel") },
|
|
23
|
+
...createECInstanceIdSuffixSelectors(classAlias),
|
|
24
|
+
], `${createRawPropertyValueSelector(classAlias, "UserLabel")} IS NOT NULL`)}
|
|
25
|
+
)
|
|
26
|
+
`,
|
|
27
|
+
}, {
|
|
28
|
+
className: "BisCore.Element",
|
|
29
|
+
clause: async ({ classAlias }) => `
|
|
30
|
+
COALESCE(
|
|
31
|
+
${createRawPropertyValueSelector(classAlias, "UserLabel")},
|
|
32
|
+
${createRawPropertyValueSelector(classAlias, "CodeValue")}
|
|
33
|
+
)
|
|
34
|
+
`,
|
|
35
|
+
}, {
|
|
36
|
+
className: "BisCore.Model",
|
|
37
|
+
clause: async ({ classAlias, ...rest }) => {
|
|
38
|
+
const elementAlias = `${ALIAS_PREFIX}e`;
|
|
39
|
+
return `(
|
|
40
|
+
SELECT ${await factory.createSelectClause({ ...rest, classAlias: elementAlias, className: "BisCore.Element" })}
|
|
41
|
+
FROM [bis].[Element] AS ${elementAlias}
|
|
42
|
+
WHERE ${elementAlias}.[ECInstanceId] = ${createRawPropertyValueSelector(classAlias, "ModeledElement", "Id")}
|
|
43
|
+
)`;
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
return factory;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=BisInstanceLabelSelectClauseFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BisInstanceLabelSelectClauseFactory.js","sourceRoot":"","sources":["../../../src/shared/instance-label-factory-impls/BisInstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC;AACjG,OAAO,EAAE,gDAAgD,EAAE,MAAM,iDAAiD,CAAC;AACnH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAc1F;;;;GAIG;AACH,MAAM,UAAU,yCAAyC,CACvD,KAA+C;IAE/C,MAAM,OAAO,GAAkC,EAAE,CAAC;IAClD,MAAM,OAAO,GAAG,gDAAgD,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC;IAChH,OAAO,CAAC,IAAI,CACV;QACE,SAAS,EAAE,0BAA0B;QACrC,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE,CAAC;;YAErC,8BAA8B,CAAC,UAAU,EAAE,WAAW,CAAC;YACvD,WAAW,CACX,IAAI,EACJ;YACE,EAAE,QAAQ,EAAE,8BAA8B,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE;YACrE,GAAG,iCAAiC,CAAC,UAAU,CAAC;SACjD,EACD,GAAG,8BAA8B,CAAC,UAAU,EAAE,WAAW,CAAC,cAAc,CACzE;;OAEJ;KACF,EACD;QACE,SAAS,EAAE,iBAAiB;QAC5B,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;;YAE5B,8BAA8B,CAAC,UAAU,EAAE,WAAW,CAAC;YACvD,8BAA8B,CAAC,UAAU,EAAE,WAAW,CAAC;;OAE5D;KACF,EACD;QACE,SAAS,EAAE,eAAe;QAC1B,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,EAAE,EAAE;YACxC,MAAM,YAAY,GAAG,GAAG,YAAY,GAAG,CAAC;YACxC,OAAO;iBACE,MAAM,OAAO,CAAC,kBAAkB,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAAC;kCACpF,YAAY;gBAC9B,YAAY,qBAAqB,8BAA8B,CAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,CAAC;QAC3G,CAAC;QACH,CAAC;KACF,CACF,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { CreateInstanceLabelSelectClauseProps, IInstanceLabelSelectClauseFactory } from "../InstanceLabelSelectClauseFactory.js";
|
|
2
|
+
import type { EC, ECSchemaProvider } from "../Metadata.js";
|
|
3
|
+
/**
|
|
4
|
+
* An association of a class and an instance label select clause factory method.
|
|
5
|
+
* @public
|
|
6
|
+
*/
|
|
7
|
+
export interface ClassBasedLabelSelectClause {
|
|
8
|
+
/** Full class name */
|
|
9
|
+
className: EC.FullClassNameDotNotation;
|
|
10
|
+
/** A factory method to create an instance label select clause */
|
|
11
|
+
clause: (props: CreateInstanceLabelSelectClauseProps) => Promise<string>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Props for `createClassBasedInstanceLabelSelectClauseFactory`.
|
|
15
|
+
* @public
|
|
16
|
+
*/
|
|
17
|
+
export interface ClassBasedInstanceLabelSelectClauseFactoryProps {
|
|
18
|
+
/** Access to ECClass hierarchy in the iModel. */
|
|
19
|
+
imodelAccess: Pick<ECSchemaProvider, "classDerivesFrom">;
|
|
20
|
+
/**
|
|
21
|
+
* A prioritized list of instance label selectors associated to classes they should be applied to.
|
|
22
|
+
*
|
|
23
|
+
* Because the list may contain clauses for classes in the same class hierarchy, and the factory
|
|
24
|
+
* handles them in given order, the order of clauses should be from the most specific class to the
|
|
25
|
+
* most general one.
|
|
26
|
+
*/
|
|
27
|
+
clauses: ClassBasedLabelSelectClause[];
|
|
28
|
+
/**
|
|
29
|
+
* A fallback label clause factory for when class-based factory doesn't produce a label.
|
|
30
|
+
* Defaults to the result of `createDefaultInstanceLabelSelectClauseFactory`.
|
|
31
|
+
*/
|
|
32
|
+
defaultClauseFactory?: IInstanceLabelSelectClauseFactory;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Creates an instance label select clause based on its class.
|
|
36
|
+
* @public
|
|
37
|
+
*/
|
|
38
|
+
export declare function createClassBasedInstanceLabelSelectClauseFactory(props: ClassBasedInstanceLabelSelectClauseFactoryProps): IInstanceLabelSelectClauseFactory;
|
|
39
|
+
//# sourceMappingURL=ClassBasedInstanceLabelSelectClauseFactory.d.ts.map
|
package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClassBasedInstanceLabelSelectClauseFactory.d.ts","sourceRoot":"","sources":["../../../src/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,oCAAoC,EACpC,iCAAiC,EAClC,MAAM,wCAAwC,CAAC;AAChD,OAAO,KAAK,EAAE,EAAE,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAE3D;;;GAGG;AACH,MAAM,WAAW,2BAA2B;IAC1C,sBAAsB;IACtB,SAAS,EAAE,EAAE,CAAC,wBAAwB,CAAC;IACvC,iEAAiE;IACjE,MAAM,EAAE,CAAC,KAAK,EAAE,oCAAoC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CAC1E;AAED;;;GAGG;AACH,MAAM,WAAW,+CAA+C;IAC9D,iDAAiD;IACjD,YAAY,EAAE,IAAI,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC;IAEzD;;;;;;OAMG;IACH,OAAO,EAAE,2BAA2B,EAAE,CAAC;IAEvC;;;OAGG;IACH,oBAAoB,CAAC,EAAE,iCAAiC,CAAC;CAC1D;AAED;;;GAGG;AACH,wBAAgB,gDAAgD,CAC9D,KAAK,EAAE,+CAA+C,GACrD,iCAAiC,CAyDnC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { createRawPropertyValueSelector } from "../ecsql-snippets/ECSqlValueSelectorSnippets.js";
|
|
6
|
+
import { createDefaultInstanceLabelSelectClauseFactory } from "./DefaultInstanceLabelSelectClauseFactory.js";
|
|
7
|
+
/**
|
|
8
|
+
* Creates an instance label select clause based on its class.
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
export function createClassBasedInstanceLabelSelectClauseFactory(props) {
|
|
12
|
+
const { imodelAccess, clauses: labelClausesByClass } = props;
|
|
13
|
+
const defaultClauseFactory = props.defaultClauseFactory ?? createDefaultInstanceLabelSelectClauseFactory();
|
|
14
|
+
async function getLabelClausesForClass(queryClassName) {
|
|
15
|
+
const matchingLabelClauses = await Promise.all(labelClausesByClass.map(async (entry) => {
|
|
16
|
+
if (await imodelAccess.classDerivesFrom(entry.className, queryClassName)) {
|
|
17
|
+
// label selector is intended for a more specific class than we're selecting from - need to include it
|
|
18
|
+
// as query results (on polymorphic select) are going to include more specific class instances too
|
|
19
|
+
return entry;
|
|
20
|
+
}
|
|
21
|
+
if (await imodelAccess.classDerivesFrom(queryClassName, entry.className)) {
|
|
22
|
+
// label selector is intended for a base class of what query is selecting - need to include it as
|
|
23
|
+
// we want base class label selectors to apply to subclass instances
|
|
24
|
+
return entry;
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}));
|
|
28
|
+
function filterNotUndefined(x) {
|
|
29
|
+
return !!x;
|
|
30
|
+
}
|
|
31
|
+
return matchingLabelClauses.filter(filterNotUndefined);
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
async createSelectClause(clauseProps) {
|
|
35
|
+
if (labelClausesByClass.length === 0) {
|
|
36
|
+
return defaultClauseFactory.createSelectClause(clauseProps);
|
|
37
|
+
}
|
|
38
|
+
const labelClausePromises = clauseProps.className
|
|
39
|
+
? await getLabelClausesForClass(clauseProps.className)
|
|
40
|
+
: labelClausesByClass;
|
|
41
|
+
if (labelClausePromises.length === 0) {
|
|
42
|
+
return defaultClauseFactory.createSelectClause(clauseProps);
|
|
43
|
+
}
|
|
44
|
+
const labelClauses = await Promise.all(labelClausePromises.map(async ({ className, clause }) => ({ className, clause: await clause(clauseProps) })));
|
|
45
|
+
return `COALESCE(
|
|
46
|
+
${labelClauses
|
|
47
|
+
.map(({ className, clause }) => `
|
|
48
|
+
IIF(
|
|
49
|
+
${createRawPropertyValueSelector(clauseProps.classAlias, "ECClassId")} IS (${className}),
|
|
50
|
+
${clause.trim()},
|
|
51
|
+
NULL
|
|
52
|
+
)
|
|
53
|
+
`.trim())
|
|
54
|
+
.join(", ")},
|
|
55
|
+
${await defaultClauseFactory.createSelectClause(clauseProps)}
|
|
56
|
+
)`;
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=ClassBasedInstanceLabelSelectClauseFactory.js.map
|
package/lib/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClassBasedInstanceLabelSelectClauseFactory.js","sourceRoot":"","sources":["../../../src/shared/instance-label-factory-impls/ClassBasedInstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC;AACjG,OAAO,EAAE,6CAA6C,EAAE,MAAM,8CAA8C,CAAC;AA2C7G;;;GAGG;AACH,MAAM,UAAU,gDAAgD,CAC9D,KAAsD;IAEtD,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,EAAE,GAAG,KAAK,CAAC;IAC7D,MAAM,oBAAoB,GAAG,KAAK,CAAC,oBAAoB,IAAI,6CAA6C,EAAE,CAAC;IAC3G,KAAK,UAAU,uBAAuB,CAAC,cAA2C;QAChF,MAAM,oBAAoB,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5C,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;YACtC,IAAI,MAAM,YAAY,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,CAAC;gBACzE,sGAAsG;gBACtG,kGAAkG;gBAClG,OAAO,KAAK,CAAC;YACf,CAAC;YACD,IAAI,MAAM,YAAY,CAAC,gBAAgB,CAAC,cAAc,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;gBACzE,iGAAiG;gBACjG,oEAAoE;gBACpE,OAAO,KAAK,CAAC;YACf,CAAC;YACD,OAAO,SAAS,CAAC;QACnB,CAAC,CAAC,CACH,CAAC;QACF,SAAS,kBAAkB,CAAI,CAAgB;YAC7C,OAAO,CAAC,CAAC,CAAC,CAAC;QACb,CAAC;QACD,OAAO,oBAAoB,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACzD,CAAC;IACD,OAAO;QACL,KAAK,CAAC,kBAAkB,CAAC,WAAiD;YACxE,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO,oBAAoB,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,mBAAmB,GAAG,WAAW,CAAC,SAAS;gBAC/C,CAAC,CAAC,MAAM,uBAAuB,CAAC,WAAW,CAAC,SAAS,CAAC;gBACtD,CAAC,CAAC,mBAAmB,CAAC;YACxB,IAAI,mBAAmB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,OAAO,oBAAoB,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;YAC9D,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,mBAAmB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAC7G,CAAC;YAEF,OAAO;UACH,YAAY;iBACX,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,CAC7B;;kBAEM,8BAA8B,CAAC,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,QAAQ,SAAS;kBACpF,MAAM,CAAC,IAAI,EAAE;;;aAGlB,CAAC,IAAI,EAAE,CACT;iBACA,IAAI,CAAC,IAAI,CAAC;UACX,MAAM,oBAAoB,CAAC,kBAAkB,CAAC,WAAW,CAAC;QAC5D,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { IInstanceLabelSelectClauseFactory } from "../InstanceLabelSelectClauseFactory.js";
|
|
2
|
+
/**
|
|
3
|
+
* Creates a label select clause in a format `Class label [base36(briefcase id)-base36(local id)]`, where
|
|
4
|
+
* local and briefcase IDs are calculated based on ECInstance ID:
|
|
5
|
+
* - `{briefcase id} = ECInstanceId >> 40`
|
|
6
|
+
* - `{local id} = ECInstanceId & (1 << 40 - 1)`
|
|
7
|
+
*
|
|
8
|
+
* @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
|
|
9
|
+
* @public
|
|
10
|
+
*/
|
|
11
|
+
export declare function createDefaultInstanceLabelSelectClauseFactory(): IInstanceLabelSelectClauseFactory;
|
|
12
|
+
//# sourceMappingURL=DefaultInstanceLabelSelectClauseFactory.d.ts.map
|
package/lib/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultInstanceLabelSelectClauseFactory.d.ts","sourceRoot":"","sources":["../../../src/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAEhG;;;;;;;;GAQG;AACH,wBAAgB,6CAA6C,IAAI,iCAAiC,CAoBjG"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/*---------------------------------------------------------------------------------------------
|
|
2
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
3
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
4
|
+
*--------------------------------------------------------------------------------------------*/
|
|
5
|
+
import { createRawPropertyValueSelector } from "../ecsql-snippets/ECSqlValueSelectorSnippets.js";
|
|
6
|
+
import { ALIAS_PREFIX, concatenate, createECInstanceIdSuffixSelectors } from "./Utils.js";
|
|
7
|
+
/**
|
|
8
|
+
* Creates a label select clause in a format `Class label [base36(briefcase id)-base36(local id)]`, where
|
|
9
|
+
* local and briefcase IDs are calculated based on ECInstance ID:
|
|
10
|
+
* - `{briefcase id} = ECInstanceId >> 40`
|
|
11
|
+
* - `{local id} = ECInstanceId & (1 << 40 - 1)`
|
|
12
|
+
*
|
|
13
|
+
* @see https://www.itwinjs.org/presentation/advanced/defaultbisrules/#label-overrides
|
|
14
|
+
* @public
|
|
15
|
+
*/
|
|
16
|
+
export function createDefaultInstanceLabelSelectClauseFactory() {
|
|
17
|
+
const alias = `${ALIAS_PREFIX}c`;
|
|
18
|
+
return {
|
|
19
|
+
async createSelectClause(props) {
|
|
20
|
+
return `(
|
|
21
|
+
SELECT
|
|
22
|
+
${concatenate(props, [
|
|
23
|
+
{
|
|
24
|
+
selector: `COALESCE(
|
|
25
|
+
${createRawPropertyValueSelector(alias, "DisplayLabel")},
|
|
26
|
+
${createRawPropertyValueSelector(alias, "Name")}
|
|
27
|
+
)`,
|
|
28
|
+
},
|
|
29
|
+
...createECInstanceIdSuffixSelectors(props.classAlias),
|
|
30
|
+
])}
|
|
31
|
+
FROM [meta].[ECClassDef] AS ${alias}
|
|
32
|
+
WHERE ${alias}.[ECInstanceId] = ${createRawPropertyValueSelector(props.classAlias, "ECClassId")}
|
|
33
|
+
)`;
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=DefaultInstanceLabelSelectClauseFactory.js.map
|
package/lib/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultInstanceLabelSelectClauseFactory.js","sourceRoot":"","sources":["../../../src/shared/instance-label-factory-impls/DefaultInstanceLabelSelectClauseFactory.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAEhG,OAAO,EAAE,8BAA8B,EAAE,MAAM,iDAAiD,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,iCAAiC,EAAE,MAAM,YAAY,CAAC;AAI1F;;;;;;;;GAQG;AACH,MAAM,UAAU,6CAA6C;IAC3D,MAAM,KAAK,GAAG,GAAG,YAAY,GAAG,CAAC;IACjC,OAAO;QACL,KAAK,CAAC,kBAAkB,CAAC,KAAK;YAC5B,OAAO;;YAED,WAAW,CAAC,KAAK,EAAE;gBACnB;oBACE,QAAQ,EAAE;kBACN,8BAA8B,CAAC,KAAK,EAAE,cAAc,CAAC;kBACrD,8BAA8B,CAAC,KAAK,EAAE,MAAM,CAAC;gBAC/C;iBACH;gBACD,GAAG,iCAAiC,CAAC,KAAK,CAAC,UAAU,CAAC;aACvD,CAAC;sCAC0B,KAAK;gBAC3B,KAAK,qBAAqB,8BAA8B,CAAC,KAAK,CAAC,UAAU,EAAE,WAAW,CAAC;QAC/F,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|