@itwin/ecschema-metadata 5.2.0-dev.30 → 5.2.0-dev.32
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/cjs/Constants.js.map +1 -1
- package/lib/cjs/DelayedPromise.js.map +1 -1
- package/lib/cjs/Deserialization/AbstractParser.js.map +1 -1
- package/lib/cjs/Deserialization/Helper.js.map +1 -1
- package/lib/cjs/Deserialization/JsonParser.js.map +1 -1
- package/lib/cjs/Deserialization/JsonProps.js.map +1 -1
- package/lib/cjs/Deserialization/SchemaGraphUtil.js.map +1 -1
- package/lib/cjs/Deserialization/XmlParser.js.map +1 -1
- package/lib/cjs/Deserialization/XmlSerializationUtils.js.map +1 -1
- package/lib/cjs/ECName.js.map +1 -1
- package/lib/cjs/ECObjects.js.map +1 -1
- package/lib/cjs/Exception.js.map +1 -1
- package/lib/cjs/Formatting/FormatSetFormatsProvider.js.map +1 -1
- package/lib/cjs/Formatting/SchemaFormatsProvider.js.map +1 -1
- package/lib/cjs/IncrementalLoading/ClassParsers.js.map +1 -1
- package/lib/cjs/IncrementalLoading/ECSqlSchemaLocater.js.map +1 -1
- package/lib/cjs/IncrementalLoading/FullSchemaQueries.d.ts.map +1 -1
- package/lib/cjs/IncrementalLoading/FullSchemaQueries.js +466 -465
- package/lib/cjs/IncrementalLoading/FullSchemaQueries.js.map +1 -1
- package/lib/cjs/IncrementalLoading/IncrementalSchemaLocater.js.map +1 -1
- package/lib/cjs/IncrementalLoading/IncrementalSchemaReader.js.map +1 -1
- package/lib/cjs/IncrementalLoading/SchemaItemParsers.js +1 -1
- package/lib/cjs/IncrementalLoading/SchemaItemParsers.js.map +1 -1
- package/lib/cjs/IncrementalLoading/SchemaItemQueries.js +235 -235
- package/lib/cjs/IncrementalLoading/SchemaItemQueries.js.map +1 -1
- package/lib/cjs/IncrementalLoading/SchemaParser.js.map +1 -1
- package/lib/cjs/IncrementalLoading/SchemaStubQueries.js +309 -309
- package/lib/cjs/IncrementalLoading/SchemaStubQueries.js.map +1 -1
- package/lib/cjs/Interfaces.js.map +1 -1
- package/lib/cjs/Metadata/Class.js.map +1 -1
- package/lib/cjs/Metadata/Constant.js.map +1 -1
- package/lib/cjs/Metadata/CustomAttribute.js.map +1 -1
- package/lib/cjs/Metadata/CustomAttributeClass.js.map +1 -1
- package/lib/cjs/Metadata/EntityClass.js.map +1 -1
- package/lib/cjs/Metadata/Enumeration.js.map +1 -1
- package/lib/cjs/Metadata/Format.js.map +1 -1
- package/lib/cjs/Metadata/InvertedUnit.js.map +1 -1
- package/lib/cjs/Metadata/KindOfQuantity.js.map +1 -1
- package/lib/cjs/Metadata/Mixin.js.map +1 -1
- package/lib/cjs/Metadata/OverrideFormat.js.map +1 -1
- package/lib/cjs/Metadata/Phenomenon.js.map +1 -1
- package/lib/cjs/Metadata/Property.js.map +1 -1
- package/lib/cjs/Metadata/PropertyCategory.js.map +1 -1
- package/lib/cjs/Metadata/RelationshipClass.js.map +1 -1
- package/lib/cjs/Metadata/Schema.js.map +1 -1
- package/lib/cjs/Metadata/SchemaItem.js.map +1 -1
- package/lib/cjs/Metadata/UnitSystem.js.map +1 -1
- package/lib/cjs/PropertyTypes.js.map +1 -1
- package/lib/cjs/SchemaJsonLocater.js.map +1 -1
- package/lib/cjs/SchemaKey.js.map +1 -1
- package/lib/cjs/SchemaLoader.js.map +1 -1
- package/lib/cjs/SchemaPartVisitorDelegate.js.map +1 -1
- package/lib/cjs/UnitConversion/Graph.js.map +1 -1
- package/lib/cjs/UnitConversion/Parser.js.map +1 -1
- package/lib/cjs/UnitConversion/UnitConversion.js.map +1 -1
- package/lib/cjs/UnitConversion/UnitConverter.js.map +1 -1
- package/lib/cjs/UnitConversion/UnitTree.js.map +1 -1
- package/lib/cjs/UnitProvider/SchemaUnitProvider.js.map +1 -1
- package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
- package/lib/cjs/ecschema-metadata.js.map +1 -1
- package/lib/cjs/utils/SchemaGraph.js.map +1 -1
- package/lib/cjs/utils/SchemaLoadingController.js.map +1 -1
- package/lib/esm/Constants.js.map +1 -1
- package/lib/esm/DelayedPromise.js.map +1 -1
- package/lib/esm/Deserialization/AbstractParser.js.map +1 -1
- package/lib/esm/Deserialization/Helper.js.map +1 -1
- package/lib/esm/Deserialization/JsonParser.js.map +1 -1
- package/lib/esm/Deserialization/JsonProps.js.map +1 -1
- package/lib/esm/Deserialization/SchemaGraphUtil.js.map +1 -1
- package/lib/esm/Deserialization/XmlParser.js.map +1 -1
- package/lib/esm/Deserialization/XmlSerializationUtils.js.map +1 -1
- package/lib/esm/ECName.js.map +1 -1
- package/lib/esm/ECObjects.js.map +1 -1
- package/lib/esm/Exception.js.map +1 -1
- package/lib/esm/Formatting/FormatSetFormatsProvider.js.map +1 -1
- package/lib/esm/Formatting/SchemaFormatsProvider.js.map +1 -1
- package/lib/esm/IncrementalLoading/ClassParsers.js.map +1 -1
- package/lib/esm/IncrementalLoading/ECSqlSchemaLocater.js.map +1 -1
- package/lib/esm/IncrementalLoading/FullSchemaQueries.d.ts.map +1 -1
- package/lib/esm/IncrementalLoading/FullSchemaQueries.js +466 -465
- package/lib/esm/IncrementalLoading/FullSchemaQueries.js.map +1 -1
- package/lib/esm/IncrementalLoading/IncrementalSchemaLocater.js.map +1 -1
- package/lib/esm/IncrementalLoading/IncrementalSchemaReader.js.map +1 -1
- package/lib/esm/IncrementalLoading/SchemaItemParsers.js +1 -1
- package/lib/esm/IncrementalLoading/SchemaItemParsers.js.map +1 -1
- package/lib/esm/IncrementalLoading/SchemaItemQueries.js +235 -235
- package/lib/esm/IncrementalLoading/SchemaItemQueries.js.map +1 -1
- package/lib/esm/IncrementalLoading/SchemaParser.js.map +1 -1
- package/lib/esm/IncrementalLoading/SchemaStubQueries.js +309 -309
- package/lib/esm/IncrementalLoading/SchemaStubQueries.js.map +1 -1
- package/lib/esm/Interfaces.js.map +1 -1
- package/lib/esm/Metadata/Class.js.map +1 -1
- package/lib/esm/Metadata/Constant.js.map +1 -1
- package/lib/esm/Metadata/CustomAttribute.js.map +1 -1
- package/lib/esm/Metadata/CustomAttributeClass.js.map +1 -1
- package/lib/esm/Metadata/EntityClass.js.map +1 -1
- package/lib/esm/Metadata/Enumeration.js.map +1 -1
- package/lib/esm/Metadata/Format.js.map +1 -1
- package/lib/esm/Metadata/InvertedUnit.js.map +1 -1
- package/lib/esm/Metadata/KindOfQuantity.js.map +1 -1
- package/lib/esm/Metadata/Mixin.js.map +1 -1
- package/lib/esm/Metadata/OverrideFormat.js.map +1 -1
- package/lib/esm/Metadata/Phenomenon.js.map +1 -1
- package/lib/esm/Metadata/Property.js.map +1 -1
- package/lib/esm/Metadata/PropertyCategory.js.map +1 -1
- package/lib/esm/Metadata/RelationshipClass.js.map +1 -1
- package/lib/esm/Metadata/Schema.js.map +1 -1
- package/lib/esm/Metadata/SchemaItem.js.map +1 -1
- package/lib/esm/Metadata/UnitSystem.js.map +1 -1
- package/lib/esm/PropertyTypes.js.map +1 -1
- package/lib/esm/SchemaJsonLocater.js.map +1 -1
- package/lib/esm/SchemaKey.js.map +1 -1
- package/lib/esm/SchemaLoader.js.map +1 -1
- package/lib/esm/SchemaPartVisitorDelegate.js.map +1 -1
- package/lib/esm/UnitConversion/Graph.js.map +1 -1
- package/lib/esm/UnitConversion/Parser.js.map +1 -1
- package/lib/esm/UnitConversion/UnitConversion.js.map +1 -1
- package/lib/esm/UnitConversion/UnitConverter.js.map +1 -1
- package/lib/esm/UnitConversion/UnitTree.js.map +1 -1
- package/lib/esm/UnitProvider/SchemaUnitProvider.js.map +1 -1
- package/lib/esm/Validation/SchemaWalker.js.map +1 -1
- package/lib/esm/ecschema-metadata.js.map +1 -1
- package/lib/esm/utils/SchemaGraph.js.map +1 -1
- package/lib/esm/utils/SchemaLoadingController.js.map +1 -1
- package/package.json +6 -6
|
@@ -9,212 +9,213 @@ import { modifier, strength, strengthDirection } from "./SchemaStubQueries";
|
|
|
9
9
|
* WITH clauses are broken down into individual variables.
|
|
10
10
|
*/
|
|
11
11
|
const propertyType = (alias) => {
|
|
12
|
-
return `
|
|
13
|
-
CASE
|
|
14
|
-
WHEN [${alias}].[Kind] = 0 THEN 'PrimitiveProperty'
|
|
15
|
-
WHEN [${alias}].[Kind] = 1 THEN 'StructProperty'
|
|
16
|
-
WHEN [${alias}].[Kind] = 2 THEN 'PrimitiveArrayProperty'
|
|
17
|
-
WHEN [${alias}].[Kind] = 3 THEN 'StructArrayProperty'
|
|
18
|
-
WHEN [${alias}].[Kind] = 4 THEN 'NavigationProperty'
|
|
19
|
-
ELSE NULL
|
|
20
|
-
END
|
|
12
|
+
return `
|
|
13
|
+
CASE
|
|
14
|
+
WHEN [${alias}].[Kind] = 0 THEN 'PrimitiveProperty'
|
|
15
|
+
WHEN [${alias}].[Kind] = 1 THEN 'StructProperty'
|
|
16
|
+
WHEN [${alias}].[Kind] = 2 THEN 'PrimitiveArrayProperty'
|
|
17
|
+
WHEN [${alias}].[Kind] = 3 THEN 'StructArrayProperty'
|
|
18
|
+
WHEN [${alias}].[Kind] = 4 THEN 'NavigationProperty'
|
|
19
|
+
ELSE NULL
|
|
20
|
+
END
|
|
21
21
|
`;
|
|
22
22
|
};
|
|
23
23
|
const navigationDirection = (alias) => {
|
|
24
|
-
return `
|
|
25
|
-
CASE
|
|
26
|
-
WHEN [${alias}].[NavigationDirection] = 1 THEN 'Forward'
|
|
27
|
-
WHEN [${alias}].[NavigationDirection] = 2 THEN 'Backward'
|
|
28
|
-
ELSE NULL
|
|
29
|
-
END
|
|
24
|
+
return `
|
|
25
|
+
CASE
|
|
26
|
+
WHEN [${alias}].[NavigationDirection] = 1 THEN 'Forward'
|
|
27
|
+
WHEN [${alias}].[NavigationDirection] = 2 THEN 'Backward'
|
|
28
|
+
ELSE NULL
|
|
29
|
+
END
|
|
30
30
|
`;
|
|
31
31
|
};
|
|
32
32
|
const schemaCustomAttribute = (alias) => {
|
|
33
|
-
return `
|
|
34
|
-
SELECT
|
|
35
|
-
json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
|
|
36
|
-
FROM [meta].[CustomAttribute] [ca]
|
|
37
|
-
WHERE [ca].[ContainerId] = [${alias}].[ECInstanceId] AND [ca].[ContainerType] = 1
|
|
38
|
-
ORDER BY [ca].[Ordinal]
|
|
33
|
+
return `
|
|
34
|
+
SELECT
|
|
35
|
+
json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
|
|
36
|
+
FROM [meta].[CustomAttribute] [ca]
|
|
37
|
+
WHERE [ca].[ContainerId] = [${alias}].[ECInstanceId] AND [ca].[ContainerType] = 1
|
|
38
|
+
ORDER BY [ca].[Ordinal]
|
|
39
39
|
`;
|
|
40
40
|
};
|
|
41
41
|
/**
|
|
42
42
|
* Selects customAttribute data for each class type.
|
|
43
43
|
*/
|
|
44
44
|
const classCustomAttribute = (alias) => {
|
|
45
|
-
return `
|
|
46
|
-
SELECT
|
|
47
|
-
json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
|
|
48
|
-
FROM [meta].[CustomAttribute] [ca]
|
|
49
|
-
WHERE [ca].[ContainerId] = [${alias}].[ECInstanceId] AND [ca].[ContainerType] = 30
|
|
50
|
-
ORDER BY [ca].[Ordinal]
|
|
45
|
+
return `
|
|
46
|
+
SELECT
|
|
47
|
+
json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
|
|
48
|
+
FROM [meta].[CustomAttribute] [ca]
|
|
49
|
+
WHERE [ca].[ContainerId] = [${alias}].[ECInstanceId] AND [ca].[ContainerType] = 30
|
|
50
|
+
ORDER BY [ca].[Ordinal]
|
|
51
51
|
`;
|
|
52
52
|
};
|
|
53
53
|
const propertyCustomAttribute = (alias) => {
|
|
54
|
-
return `
|
|
55
|
-
SELECT
|
|
56
|
-
json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
|
|
57
|
-
FROM [meta].[CustomAttribute] [ca]
|
|
58
|
-
WHERE [ca].[ContainerId] = [${alias}].[ECInstanceId] AND [ca].[ContainerType] = 992
|
|
59
|
-
ORDER BY [ca].[Ordinal]
|
|
54
|
+
return `
|
|
55
|
+
SELECT
|
|
56
|
+
json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
|
|
57
|
+
FROM [meta].[CustomAttribute] [ca]
|
|
58
|
+
WHERE [ca].[ContainerId] = [${alias}].[ECInstanceId] AND [ca].[ContainerType] = 992
|
|
59
|
+
ORDER BY [ca].[Ordinal]
|
|
60
60
|
`;
|
|
61
61
|
};
|
|
62
62
|
/**
|
|
63
63
|
* Selects base class data for each class type.
|
|
64
64
|
*/
|
|
65
|
-
const selectBaseClasses = `
|
|
66
|
-
SELECT
|
|
67
|
-
ec_classname([baseClass].[ECInstanceId], 's.c')
|
|
68
|
-
FROM
|
|
69
|
-
[meta].[ECClassDef] [baseClass]
|
|
70
|
-
INNER JOIN [meta].[ClassHasBaseClasses] [baseClassMap]
|
|
71
|
-
ON [baseClassMap].[TargetECInstanceId] = [baseClass].[ECInstanceId]
|
|
72
|
-
WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]
|
|
73
|
-
|
|
65
|
+
const selectBaseClasses = `
|
|
66
|
+
SELECT
|
|
67
|
+
ec_classname([baseClass].[ECInstanceId], 's.c')
|
|
68
|
+
FROM
|
|
69
|
+
[meta].[ECClassDef] [baseClass]
|
|
70
|
+
INNER JOIN [meta].[ClassHasBaseClasses] [baseClassMap]
|
|
71
|
+
ON [baseClassMap].[TargetECInstanceId] = [baseClass].[ECInstanceId]
|
|
72
|
+
WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]
|
|
73
|
+
ORDER BY [baseClassMap].[Ordinal] ASC
|
|
74
|
+
LIMIT 1
|
|
74
75
|
`;
|
|
75
76
|
/**
|
|
76
77
|
* Selects class property data for each class type. ClassProperties
|
|
77
78
|
* is a common table expression (CTE or WITH clause) defined below.
|
|
78
79
|
*/
|
|
79
|
-
const selectProperties = `
|
|
80
|
-
SELECT
|
|
81
|
-
json_group_array(json([classProperties].[property]))
|
|
82
|
-
FROM
|
|
83
|
-
[ClassProperties] [classProperties]
|
|
84
|
-
WHERE
|
|
85
|
-
[classProperties].[ClassId] = [class].[ECInstanceId]
|
|
80
|
+
const selectProperties = `
|
|
81
|
+
SELECT
|
|
82
|
+
json_group_array(json([classProperties].[property]))
|
|
83
|
+
FROM
|
|
84
|
+
[ClassProperties] [classProperties]
|
|
85
|
+
WHERE
|
|
86
|
+
[classProperties].[ClassId] = [class].[ECInstanceId]
|
|
86
87
|
`;
|
|
87
88
|
/**
|
|
88
89
|
* A CTE used to select AppliesTo from IsMixin CustomAttributes for a given Mixin.
|
|
89
90
|
*/
|
|
90
|
-
const withAppliesTo = `
|
|
91
|
-
AppliesToCTE AS (
|
|
92
|
-
SELECT
|
|
93
|
-
[mixinAppliesTo].[ECInstanceId] AS [AppliesToId],
|
|
94
|
-
[appliesToSchema].[name] as [AppliesToSchema],
|
|
95
|
-
json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.IsMixin.AppliesToEntityClass') AS [AppliesTo]
|
|
96
|
-
FROM [meta].[CustomAttribute] [ca]
|
|
97
|
-
JOIN [meta].[ECClassDef] [mixinAppliesTo]
|
|
98
|
-
ON [mixinAppliesTo].[ECInstanceId] = [ca].[ContainerId]
|
|
99
|
-
JOIN [meta].[ECSchemaDef] [appliesToSchema]
|
|
100
|
-
ON [appliesToSchema].[ECInstanceId] = [mixinAppliesTo].[Schema].[Id]
|
|
101
|
-
WHERE [ca].[ContainerType] = 30
|
|
102
|
-
AND json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.ecClass') = 'IsMixin'
|
|
103
|
-
)
|
|
91
|
+
const withAppliesTo = `
|
|
92
|
+
AppliesToCTE AS (
|
|
93
|
+
SELECT
|
|
94
|
+
[mixinAppliesTo].[ECInstanceId] AS [AppliesToId],
|
|
95
|
+
[appliesToSchema].[name] as [AppliesToSchema],
|
|
96
|
+
json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.IsMixin.AppliesToEntityClass') AS [AppliesTo]
|
|
97
|
+
FROM [meta].[CustomAttribute] [ca]
|
|
98
|
+
JOIN [meta].[ECClassDef] [mixinAppliesTo]
|
|
99
|
+
ON [mixinAppliesTo].[ECInstanceId] = [ca].[ContainerId]
|
|
100
|
+
JOIN [meta].[ECSchemaDef] [appliesToSchema]
|
|
101
|
+
ON [appliesToSchema].[ECInstanceId] = [mixinAppliesTo].[Schema].[Id]
|
|
102
|
+
WHERE [ca].[ContainerType] = 30
|
|
103
|
+
AND json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.ecClass') = 'IsMixin'
|
|
104
|
+
)
|
|
104
105
|
`;
|
|
105
106
|
/**
|
|
106
107
|
* A CTE used to select Schema reference data for a given Schema.
|
|
107
108
|
*/
|
|
108
|
-
const withSchemaReferences = `
|
|
109
|
-
SchemaReferences as (
|
|
110
|
-
SELECT
|
|
111
|
-
[ref].[SourceECInstanceId] as [SchemaId],
|
|
112
|
-
json_object(
|
|
113
|
-
'name', [Name],
|
|
114
|
-
'version', CONCAT(printf('%02d', [VersionMajor]), '.', printf('%02d', [VersionWrite]), '.', printf('%02d', [VersionMinor]))
|
|
115
|
-
) as [reference]
|
|
116
|
-
FROM
|
|
117
|
-
[meta].[ECSchemaDef] as [refSchema]
|
|
118
|
-
INNER JOIN [meta].[SchemaHasSchemaReferences] [ref]
|
|
119
|
-
ON [ref].[TargetECInstanceId] = [refSchema].[ECInstanceId]
|
|
120
|
-
)
|
|
109
|
+
const withSchemaReferences = `
|
|
110
|
+
SchemaReferences as (
|
|
111
|
+
SELECT
|
|
112
|
+
[ref].[SourceECInstanceId] as [SchemaId],
|
|
113
|
+
json_object(
|
|
114
|
+
'name', [Name],
|
|
115
|
+
'version', CONCAT(printf('%02d', [VersionMajor]), '.', printf('%02d', [VersionWrite]), '.', printf('%02d', [VersionMinor]))
|
|
116
|
+
) as [reference]
|
|
117
|
+
FROM
|
|
118
|
+
[meta].[ECSchemaDef] as [refSchema]
|
|
119
|
+
INNER JOIN [meta].[SchemaHasSchemaReferences] [ref]
|
|
120
|
+
ON [ref].[TargetECInstanceId] = [refSchema].[ECInstanceId]
|
|
121
|
+
)
|
|
121
122
|
`;
|
|
122
123
|
/**
|
|
123
124
|
* A CTE used to select Relationship constraints for a given RelationshipClass.
|
|
124
125
|
*/
|
|
125
|
-
const withRelationshipConstraints = `
|
|
126
|
-
ClassRelationshipConstraints as (
|
|
127
|
-
SELECT
|
|
128
|
-
[rhc].[SourceECInstanceId] as [ClassId],
|
|
129
|
-
[constraintDef].[ECInstanceId] as [ConstraintId],
|
|
130
|
-
[RelationshipEnd],
|
|
131
|
-
CONCAT('(', [MultiplicityLowerLimit], '..', IIF([MultiplicityUpperLimit] IS NULL, '*', [MultiplicityUpperLimit]), ')') as [Multiplicity],
|
|
132
|
-
[IsPolyMorphic],
|
|
133
|
-
[RoleLabel],
|
|
134
|
-
IIF([constraintDef].[AbstractConstraintClass] IS NOT NULL, ec_classname([constraintDef].[AbstractConstraintClass].[Id], 's.c'), null) as [AbstractConstraint],
|
|
135
|
-
IIF ([rchc].[TargetECInstanceId] IS NOT NULL, JSON_GROUP_ARRAY(ec_classname([rchc].[TargetECInstanceId], 's.c')), null) as [ConstraintClasses]
|
|
136
|
-
FROM
|
|
137
|
-
[meta].[ECRelationshipConstraintDef] [constraintDef]
|
|
138
|
-
JOIN [meta].[RelationshipHasConstraints] [rhc]
|
|
139
|
-
ON [rhc].[TargetECInstanceId] = [constraintDef].[ECInstanceId]
|
|
140
|
-
JOIN [meta].[RelationshipConstraintHasClasses] [rchc]
|
|
141
|
-
ON [rchc].[SourceECInstanceId] = [constraintDef].[ECInstanceId]
|
|
142
|
-
GROUP BY [constraintDef].[ECInstanceId]
|
|
143
|
-
)
|
|
126
|
+
const withRelationshipConstraints = `
|
|
127
|
+
ClassRelationshipConstraints as (
|
|
128
|
+
SELECT
|
|
129
|
+
[rhc].[SourceECInstanceId] as [ClassId],
|
|
130
|
+
[constraintDef].[ECInstanceId] as [ConstraintId],
|
|
131
|
+
[RelationshipEnd],
|
|
132
|
+
CONCAT('(', [MultiplicityLowerLimit], '..', IIF([MultiplicityUpperLimit] IS NULL, '*', [MultiplicityUpperLimit]), ')') as [Multiplicity],
|
|
133
|
+
[IsPolyMorphic],
|
|
134
|
+
[RoleLabel],
|
|
135
|
+
IIF([constraintDef].[AbstractConstraintClass] IS NOT NULL, ec_classname([constraintDef].[AbstractConstraintClass].[Id], 's.c'), null) as [AbstractConstraint],
|
|
136
|
+
IIF ([rchc].[TargetECInstanceId] IS NOT NULL, JSON_GROUP_ARRAY(ec_classname([rchc].[TargetECInstanceId], 's.c')), null) as [ConstraintClasses]
|
|
137
|
+
FROM
|
|
138
|
+
[meta].[ECRelationshipConstraintDef] [constraintDef]
|
|
139
|
+
JOIN [meta].[RelationshipHasConstraints] [rhc]
|
|
140
|
+
ON [rhc].[TargetECInstanceId] = [constraintDef].[ECInstanceId]
|
|
141
|
+
JOIN [meta].[RelationshipConstraintHasClasses] [rchc]
|
|
142
|
+
ON [rchc].[SourceECInstanceId] = [constraintDef].[ECInstanceId]
|
|
143
|
+
GROUP BY [constraintDef].[ECInstanceId]
|
|
144
|
+
)
|
|
144
145
|
`;
|
|
145
146
|
/**
|
|
146
147
|
* A CTE used to select Class property data for a given Class.
|
|
147
148
|
*/
|
|
148
|
-
const withClassProperties = `
|
|
149
|
-
ClassProperties as (
|
|
150
|
-
SELECT
|
|
151
|
-
[cop].[SourceECInstanceId] as [ClassId],
|
|
152
|
-
json_object(
|
|
153
|
-
'name', [pd].[Name],
|
|
154
|
-
'label', [pd].[DisplayLabel],
|
|
155
|
-
'description', [pd].[Description],
|
|
156
|
-
'isReadOnly', IIF([pd].[IsReadOnly] = 1, json('true'), NULL),
|
|
157
|
-
'priority', [pd].[Priority],
|
|
158
|
-
'category', IIF([categoryDef].[Name] IS NULL, NULL, CONCAT([categorySchemaDef].[Name], '.', [categoryDef].[Name])),
|
|
159
|
-
'kindOfQuantity', IIF([koqDef].[Name] IS NULL, NULL, CONCAT([koqSchemaDef].[Name], '.', [koqDef].[Name])),
|
|
160
|
-
'typeName',
|
|
161
|
-
CASE
|
|
162
|
-
WHEN [pd].[Kind] = 0 OR [pd].[Kind] = 2 Then
|
|
163
|
-
CASE
|
|
164
|
-
WHEN [enumDef].[Name] IS NOT NULL Then CONCAT([enumSchemaDef].[Name], '.', [enumDef].[Name])
|
|
165
|
-
WHEN [pd].[PrimitiveType] = 257 Then 'binary'
|
|
166
|
-
WHEN [pd].[PrimitiveType] = 513 Then 'boolean'
|
|
167
|
-
WHEN [pd].[PrimitiveType] = 769 Then 'dateTime'
|
|
168
|
-
WHEN [pd].[PrimitiveType] = 1025 Then 'double'
|
|
169
|
-
WHEN [pd].[PrimitiveType] = 1281 Then 'int'
|
|
170
|
-
WHEN [pd].[PrimitiveType] = 1537 Then 'long'
|
|
171
|
-
WHEN [pd].[PrimitiveType] = 1793 Then 'point2d'
|
|
172
|
-
WHEN [pd].[PrimitiveType] = 2049 Then 'point3d'
|
|
173
|
-
WHEN [pd].[PrimitiveType] = 2305 Then 'string'
|
|
174
|
-
WHEN [pd].[PrimitiveType] = 2561 Then 'Bentley.Geometry.Common.IGeometry'
|
|
175
|
-
ELSE null
|
|
176
|
-
END
|
|
177
|
-
WHEN [pd].[Kind] = 1 OR [pd].[Kind] = 3 Then
|
|
178
|
-
CONCAT([structSchemaDef].[Name], '.', [structDef].[Name])
|
|
179
|
-
ELSE null
|
|
180
|
-
END,
|
|
181
|
-
'type', ${propertyType("pd")},
|
|
182
|
-
'minLength', [pd].[PrimitiveTypeMinLength],
|
|
183
|
-
'maxLength', [pd].[PrimitiveTypeMaxLength],
|
|
184
|
-
'minValue', [pd].[PrimitiveTypeMinValue],
|
|
185
|
-
'maxValue', [pd].[PrimitiveTypeMaxValue],
|
|
186
|
-
'extendedTypeName', [pd].[ExtendedTypeName],
|
|
187
|
-
'minOccurs', [pd].[ArrayMinOccurs],
|
|
188
|
-
'maxOccurs', [pd].[ArrayMaxOccurs],
|
|
189
|
-
'direction', ${navigationDirection("pd")},
|
|
190
|
-
'relationshipName', IIF([navRelDef].[Name] IS NULL, NULL, CONCAT([navSchemaDef].[Name], '.', [navRelDef].[Name])),
|
|
191
|
-
'customAttributes', (${propertyCustomAttribute("pd")})
|
|
192
|
-
) as [property]
|
|
193
|
-
FROM
|
|
194
|
-
[meta].[ECPropertyDef] as [pd]
|
|
195
|
-
JOIN [meta].[ClassOwnsLocalProperties] [cop]
|
|
196
|
-
ON cop.[TargetECInstanceId] = [pd].[ECInstanceId]
|
|
197
|
-
LEFT JOIN [meta].[ECEnumerationDef] [enumDef]
|
|
198
|
-
ON [enumDef].[ECInstanceId] = [pd].[Enumeration].[Id]
|
|
199
|
-
LEFT JOIN [meta].[ECSchemaDef] enumSchemaDef
|
|
200
|
-
ON [enumSchemaDef].[ECInstanceId] = [enumDef].[Schema].[Id]
|
|
201
|
-
LEFT JOIN [meta].[PropertyCategoryDef] [categoryDef]
|
|
202
|
-
ON [categoryDef].[ECInstanceId] = [pd].[Category].[Id]
|
|
203
|
-
LEFT JOIN [meta].[ECSchemaDef] [categorySchemaDef]
|
|
204
|
-
ON [categorySchemaDef].[ECInstanceId] = [categoryDef].[Schema].[Id]
|
|
205
|
-
LEFT JOIN [meta].[KindOfQuantityDef] [koqDef]
|
|
206
|
-
ON [koqDef].[ECInstanceId] = [pd].[KindOfQuantity].[Id]
|
|
207
|
-
LEFT JOIN [meta].[ECSchemaDef] [koqSchemaDef]
|
|
208
|
-
ON [koqSchemaDef].[ECInstanceId] = [koqDef].[Schema].[Id]
|
|
209
|
-
LEFT JOIN [meta].[ECClassDef] [structDef]
|
|
210
|
-
ON structDef.[ECInstanceId] = [pd].[StructClass].[Id]
|
|
211
|
-
LEFT JOIN [meta].[ECSchemaDef] [structSchemaDef]
|
|
212
|
-
ON [structSchemaDef].[ECInstanceId] = [structDef].[Schema].[Id]
|
|
213
|
-
LEFT JOIN [meta].[ECClassDef] [navRelDef]
|
|
214
|
-
ON [navRelDef].[ECInstanceId] = [pd].[NavigationRelationshipClass].[Id]
|
|
215
|
-
LEFT JOIN [meta].[ECSchemaDef] [navSchemaDef]
|
|
216
|
-
ON [navSchemaDef].[ECInstanceId] = [navRelDef].[Schema].[Id]
|
|
217
|
-
)
|
|
149
|
+
const withClassProperties = `
|
|
150
|
+
ClassProperties as (
|
|
151
|
+
SELECT
|
|
152
|
+
[cop].[SourceECInstanceId] as [ClassId],
|
|
153
|
+
json_object(
|
|
154
|
+
'name', [pd].[Name],
|
|
155
|
+
'label', [pd].[DisplayLabel],
|
|
156
|
+
'description', [pd].[Description],
|
|
157
|
+
'isReadOnly', IIF([pd].[IsReadOnly] = 1, json('true'), NULL),
|
|
158
|
+
'priority', [pd].[Priority],
|
|
159
|
+
'category', IIF([categoryDef].[Name] IS NULL, NULL, CONCAT([categorySchemaDef].[Name], '.', [categoryDef].[Name])),
|
|
160
|
+
'kindOfQuantity', IIF([koqDef].[Name] IS NULL, NULL, CONCAT([koqSchemaDef].[Name], '.', [koqDef].[Name])),
|
|
161
|
+
'typeName',
|
|
162
|
+
CASE
|
|
163
|
+
WHEN [pd].[Kind] = 0 OR [pd].[Kind] = 2 Then
|
|
164
|
+
CASE
|
|
165
|
+
WHEN [enumDef].[Name] IS NOT NULL Then CONCAT([enumSchemaDef].[Name], '.', [enumDef].[Name])
|
|
166
|
+
WHEN [pd].[PrimitiveType] = 257 Then 'binary'
|
|
167
|
+
WHEN [pd].[PrimitiveType] = 513 Then 'boolean'
|
|
168
|
+
WHEN [pd].[PrimitiveType] = 769 Then 'dateTime'
|
|
169
|
+
WHEN [pd].[PrimitiveType] = 1025 Then 'double'
|
|
170
|
+
WHEN [pd].[PrimitiveType] = 1281 Then 'int'
|
|
171
|
+
WHEN [pd].[PrimitiveType] = 1537 Then 'long'
|
|
172
|
+
WHEN [pd].[PrimitiveType] = 1793 Then 'point2d'
|
|
173
|
+
WHEN [pd].[PrimitiveType] = 2049 Then 'point3d'
|
|
174
|
+
WHEN [pd].[PrimitiveType] = 2305 Then 'string'
|
|
175
|
+
WHEN [pd].[PrimitiveType] = 2561 Then 'Bentley.Geometry.Common.IGeometry'
|
|
176
|
+
ELSE null
|
|
177
|
+
END
|
|
178
|
+
WHEN [pd].[Kind] = 1 OR [pd].[Kind] = 3 Then
|
|
179
|
+
CONCAT([structSchemaDef].[Name], '.', [structDef].[Name])
|
|
180
|
+
ELSE null
|
|
181
|
+
END,
|
|
182
|
+
'type', ${propertyType("pd")},
|
|
183
|
+
'minLength', [pd].[PrimitiveTypeMinLength],
|
|
184
|
+
'maxLength', [pd].[PrimitiveTypeMaxLength],
|
|
185
|
+
'minValue', [pd].[PrimitiveTypeMinValue],
|
|
186
|
+
'maxValue', [pd].[PrimitiveTypeMaxValue],
|
|
187
|
+
'extendedTypeName', [pd].[ExtendedTypeName],
|
|
188
|
+
'minOccurs', [pd].[ArrayMinOccurs],
|
|
189
|
+
'maxOccurs', [pd].[ArrayMaxOccurs],
|
|
190
|
+
'direction', ${navigationDirection("pd")},
|
|
191
|
+
'relationshipName', IIF([navRelDef].[Name] IS NULL, NULL, CONCAT([navSchemaDef].[Name], '.', [navRelDef].[Name])),
|
|
192
|
+
'customAttributes', (${propertyCustomAttribute("pd")})
|
|
193
|
+
) as [property]
|
|
194
|
+
FROM
|
|
195
|
+
[meta].[ECPropertyDef] as [pd]
|
|
196
|
+
JOIN [meta].[ClassOwnsLocalProperties] [cop]
|
|
197
|
+
ON cop.[TargetECInstanceId] = [pd].[ECInstanceId]
|
|
198
|
+
LEFT JOIN [meta].[ECEnumerationDef] [enumDef]
|
|
199
|
+
ON [enumDef].[ECInstanceId] = [pd].[Enumeration].[Id]
|
|
200
|
+
LEFT JOIN [meta].[ECSchemaDef] enumSchemaDef
|
|
201
|
+
ON [enumSchemaDef].[ECInstanceId] = [enumDef].[Schema].[Id]
|
|
202
|
+
LEFT JOIN [meta].[PropertyCategoryDef] [categoryDef]
|
|
203
|
+
ON [categoryDef].[ECInstanceId] = [pd].[Category].[Id]
|
|
204
|
+
LEFT JOIN [meta].[ECSchemaDef] [categorySchemaDef]
|
|
205
|
+
ON [categorySchemaDef].[ECInstanceId] = [categoryDef].[Schema].[Id]
|
|
206
|
+
LEFT JOIN [meta].[KindOfQuantityDef] [koqDef]
|
|
207
|
+
ON [koqDef].[ECInstanceId] = [pd].[KindOfQuantity].[Id]
|
|
208
|
+
LEFT JOIN [meta].[ECSchemaDef] [koqSchemaDef]
|
|
209
|
+
ON [koqSchemaDef].[ECInstanceId] = [koqDef].[Schema].[Id]
|
|
210
|
+
LEFT JOIN [meta].[ECClassDef] [structDef]
|
|
211
|
+
ON structDef.[ECInstanceId] = [pd].[StructClass].[Id]
|
|
212
|
+
LEFT JOIN [meta].[ECSchemaDef] [structSchemaDef]
|
|
213
|
+
ON [structSchemaDef].[ECInstanceId] = [structDef].[Schema].[Id]
|
|
214
|
+
LEFT JOIN [meta].[ECClassDef] [navRelDef]
|
|
215
|
+
ON [navRelDef].[ECInstanceId] = [pd].[NavigationRelationshipClass].[Id]
|
|
216
|
+
LEFT JOIN [meta].[ECSchemaDef] [navSchemaDef]
|
|
217
|
+
ON [navSchemaDef].[ECInstanceId] = [navRelDef].[Schema].[Id]
|
|
218
|
+
)
|
|
218
219
|
`;
|
|
219
220
|
/**
|
|
220
221
|
* Query that provides EntityClass data and is shared by two cases:
|
|
@@ -222,52 +223,52 @@ LEFT JOIN [meta].[ECSchemaDef] [navSchemaDef]
|
|
|
222
223
|
* 2. When querying a full schema with multiple schema item queries or
|
|
223
224
|
* when just querying for Entity classes.
|
|
224
225
|
*/
|
|
225
|
-
const baseEntityQuery = `
|
|
226
|
-
SELECT
|
|
227
|
-
[sd].[Name] as [schema],
|
|
228
|
-
json_object (
|
|
229
|
-
'schemaItemType', 'EntityClass',
|
|
230
|
-
'name', [class].[Name],
|
|
231
|
-
'label', [class].[DisplayLabel],
|
|
232
|
-
'description', [class].[Description],
|
|
233
|
-
'modifier', ${modifier("class")},
|
|
234
|
-
'baseClass', (
|
|
235
|
-
${selectBaseClasses}
|
|
236
|
-
),
|
|
237
|
-
'mixins', (
|
|
238
|
-
SELECT
|
|
239
|
-
json_group_array(
|
|
240
|
-
ec_classname([baseClass].[ECInstanceId], 's.c')
|
|
241
|
-
)
|
|
242
|
-
FROM
|
|
243
|
-
[meta].[ECClassDef] [baseClass]
|
|
244
|
-
INNER JOIN [meta].[ClassHasBaseClasses] [baseClassMap]
|
|
245
|
-
ON [baseClassMap].[TargetECInstanceId] = [baseClass].[ECInstanceId]
|
|
246
|
-
WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]
|
|
247
|
-
AND EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [baseClass].[ECInstanceId] = [ca].[Class].[Id]
|
|
248
|
-
AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))
|
|
249
|
-
),
|
|
250
|
-
'customAttributes', (${classCustomAttribute("class")}),
|
|
251
|
-
'properties', (
|
|
252
|
-
${selectProperties}
|
|
253
|
-
)
|
|
254
|
-
) AS [item]
|
|
255
|
-
FROM [meta].[ECClassDef] [class]
|
|
256
|
-
JOIN
|
|
257
|
-
[meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]
|
|
258
|
-
WHERE [class].[Type] = 0 AND
|
|
259
|
-
[sd].[Name] = :schemaName
|
|
260
|
-
AND NOT EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]
|
|
261
|
-
AND [ca].[CustomAttributeClass].Id Is ([CoreCA].[IsMixin]))
|
|
226
|
+
const baseEntityQuery = `
|
|
227
|
+
SELECT
|
|
228
|
+
[sd].[Name] as [schema],
|
|
229
|
+
json_object (
|
|
230
|
+
'schemaItemType', 'EntityClass',
|
|
231
|
+
'name', [class].[Name],
|
|
232
|
+
'label', [class].[DisplayLabel],
|
|
233
|
+
'description', [class].[Description],
|
|
234
|
+
'modifier', ${modifier("class")},
|
|
235
|
+
'baseClass', (
|
|
236
|
+
${selectBaseClasses}
|
|
237
|
+
),
|
|
238
|
+
'mixins', (
|
|
239
|
+
SELECT
|
|
240
|
+
json_group_array(
|
|
241
|
+
ec_classname([baseClass].[ECInstanceId], 's.c')
|
|
242
|
+
)
|
|
243
|
+
FROM
|
|
244
|
+
[meta].[ECClassDef] [baseClass]
|
|
245
|
+
INNER JOIN [meta].[ClassHasBaseClasses] [baseClassMap]
|
|
246
|
+
ON [baseClassMap].[TargetECInstanceId] = [baseClass].[ECInstanceId]
|
|
247
|
+
WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]
|
|
248
|
+
AND EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [baseClass].[ECInstanceId] = [ca].[Class].[Id]
|
|
249
|
+
AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))
|
|
250
|
+
),
|
|
251
|
+
'customAttributes', (${classCustomAttribute("class")}),
|
|
252
|
+
'properties', (
|
|
253
|
+
${selectProperties}
|
|
254
|
+
)
|
|
255
|
+
) AS [item]
|
|
256
|
+
FROM [meta].[ECClassDef] [class]
|
|
257
|
+
JOIN
|
|
258
|
+
[meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]
|
|
259
|
+
WHERE [class].[Type] = 0 AND
|
|
260
|
+
[sd].[Name] = :schemaName
|
|
261
|
+
AND NOT EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]
|
|
262
|
+
AND [ca].[CustomAttributeClass].Id Is ([CoreCA].[IsMixin]))
|
|
262
263
|
`;
|
|
263
264
|
/**
|
|
264
265
|
* EntityClass query used to when querying for EntityClass data only. Not used
|
|
265
266
|
* for full Schema load via single query.
|
|
266
267
|
*/
|
|
267
|
-
const entityQuery = `
|
|
268
|
-
WITH
|
|
269
|
-
${withClassProperties}
|
|
270
|
-
${baseEntityQuery}
|
|
268
|
+
const entityQuery = `
|
|
269
|
+
WITH
|
|
270
|
+
${withClassProperties}
|
|
271
|
+
${baseEntityQuery}
|
|
271
272
|
`;
|
|
272
273
|
/**
|
|
273
274
|
* Query that provides Mixin data and is shared by two cases:
|
|
@@ -275,56 +276,56 @@ const entityQuery = `
|
|
|
275
276
|
* 2. When querying a full schema with multiple schema item queries or
|
|
276
277
|
* when just querying for Mixin classes.
|
|
277
278
|
*/
|
|
278
|
-
const baseMixinQuery = `
|
|
279
|
-
SELECT
|
|
280
|
-
[sd].[Name] as [schema],
|
|
281
|
-
json_object (
|
|
282
|
-
'schemaItemType', 'Mixin',
|
|
283
|
-
'name', [class].[Name],
|
|
284
|
-
'label', [class].[DisplayLabel],
|
|
285
|
-
'description', [class].[Description],
|
|
286
|
-
'modifier', ${modifier("class")},
|
|
287
|
-
'baseClass', (
|
|
288
|
-
${selectBaseClasses}
|
|
289
|
-
),
|
|
290
|
-
'appliesTo', (
|
|
291
|
-
SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))
|
|
292
|
-
FROM [AppliesToCTE] [atCTE]
|
|
293
|
-
WHERE [atCTE].[AppliesToId] = [class].[ECInstanceId]
|
|
294
|
-
),
|
|
295
|
-
'customAttributes', (
|
|
296
|
-
SELECT
|
|
297
|
-
json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
|
|
298
|
-
FROM [meta].[CustomAttribute] [ca]
|
|
299
|
-
WHERE [ca].[ContainerId] = [class].[ECInstanceId] AND [ca].[ContainerType] = 30
|
|
300
|
-
AND json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.ecClass') <> 'IsMixin'
|
|
301
|
-
),
|
|
302
|
-
'properties', (
|
|
303
|
-
SELECT
|
|
304
|
-
json_group_array(json([classProperties].[property]))
|
|
305
|
-
FROM
|
|
306
|
-
[ClassProperties] [classProperties]
|
|
307
|
-
WHERE
|
|
308
|
-
[classProperties].[ClassId] = [class].[ECInstanceId]
|
|
309
|
-
)
|
|
310
|
-
) AS [item]
|
|
311
|
-
FROM [meta].[ECClassDef] [class]
|
|
312
|
-
JOIN
|
|
313
|
-
[meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]
|
|
314
|
-
WHERE [class].[Type] = 0 AND
|
|
315
|
-
[sd].[Name] = :schemaName
|
|
316
|
-
AND EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]
|
|
317
|
-
AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))
|
|
279
|
+
const baseMixinQuery = `
|
|
280
|
+
SELECT
|
|
281
|
+
[sd].[Name] as [schema],
|
|
282
|
+
json_object (
|
|
283
|
+
'schemaItemType', 'Mixin',
|
|
284
|
+
'name', [class].[Name],
|
|
285
|
+
'label', [class].[DisplayLabel],
|
|
286
|
+
'description', [class].[Description],
|
|
287
|
+
'modifier', ${modifier("class")},
|
|
288
|
+
'baseClass', (
|
|
289
|
+
${selectBaseClasses}
|
|
290
|
+
),
|
|
291
|
+
'appliesTo', (
|
|
292
|
+
SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))
|
|
293
|
+
FROM [AppliesToCTE] [atCTE]
|
|
294
|
+
WHERE [atCTE].[AppliesToId] = [class].[ECInstanceId]
|
|
295
|
+
),
|
|
296
|
+
'customAttributes', (
|
|
297
|
+
SELECT
|
|
298
|
+
json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
|
|
299
|
+
FROM [meta].[CustomAttribute] [ca]
|
|
300
|
+
WHERE [ca].[ContainerId] = [class].[ECInstanceId] AND [ca].[ContainerType] = 30
|
|
301
|
+
AND json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.ecClass') <> 'IsMixin'
|
|
302
|
+
),
|
|
303
|
+
'properties', (
|
|
304
|
+
SELECT
|
|
305
|
+
json_group_array(json([classProperties].[property]))
|
|
306
|
+
FROM
|
|
307
|
+
[ClassProperties] [classProperties]
|
|
308
|
+
WHERE
|
|
309
|
+
[classProperties].[ClassId] = [class].[ECInstanceId]
|
|
310
|
+
)
|
|
311
|
+
) AS [item]
|
|
312
|
+
FROM [meta].[ECClassDef] [class]
|
|
313
|
+
JOIN
|
|
314
|
+
[meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]
|
|
315
|
+
WHERE [class].[Type] = 0 AND
|
|
316
|
+
[sd].[Name] = :schemaName
|
|
317
|
+
AND EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]
|
|
318
|
+
AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))
|
|
318
319
|
`;
|
|
319
320
|
/**
|
|
320
321
|
* Mixin query used to when querying for Mixin data only. Not used
|
|
321
322
|
* for full Schema load via single query.
|
|
322
323
|
*/
|
|
323
|
-
const mixinQuery = `
|
|
324
|
-
WITH
|
|
325
|
-
${withAppliesTo},
|
|
326
|
-
${withClassProperties}
|
|
327
|
-
${baseMixinQuery}
|
|
324
|
+
const mixinQuery = `
|
|
325
|
+
WITH
|
|
326
|
+
${withAppliesTo},
|
|
327
|
+
${withClassProperties}
|
|
328
|
+
${baseMixinQuery}
|
|
328
329
|
`;
|
|
329
330
|
/**
|
|
330
331
|
* Query that provides RelationshipClass data and is shared by two cases:
|
|
@@ -332,82 +333,82 @@ ${baseMixinQuery}
|
|
|
332
333
|
* 2. When querying a full schema with multiple schema item queries or
|
|
333
334
|
* when just querying for Relationship classes.
|
|
334
335
|
*/
|
|
335
|
-
const baseRelationshipClassQuery = `
|
|
336
|
-
SELECT
|
|
337
|
-
[sd].Name as schema,
|
|
338
|
-
json_object (
|
|
339
|
-
'schemaItemType', 'RelationshipClass',
|
|
340
|
-
'name', [class].[Name],
|
|
341
|
-
'label', [class].[DisplayLabel],
|
|
342
|
-
'description', [class].[Description],
|
|
343
|
-
'strength', ${strength("class")},
|
|
344
|
-
'strengthDirection', ${strengthDirection("class")},
|
|
345
|
-
'modifier', ${modifier("class")},
|
|
346
|
-
'baseClass', (
|
|
347
|
-
${selectBaseClasses}
|
|
348
|
-
),
|
|
349
|
-
'customAttributes', (${classCustomAttribute("class")}),
|
|
350
|
-
'properties', (
|
|
351
|
-
${selectProperties}
|
|
352
|
-
),
|
|
353
|
-
'source', (
|
|
354
|
-
SELECT
|
|
355
|
-
json_object (
|
|
356
|
-
'multiplicity', [sourceConst].[Multiplicity],
|
|
357
|
-
'roleLabel', [sourceConst].[RoleLabel],
|
|
358
|
-
'polymorphic', IIF([sourceConst].[IsPolyMorphic] = 1, json('true'), json('false')),
|
|
359
|
-
'abstractConstraint', [sourceConst].[AbstractConstraint],
|
|
360
|
-
'constraintClasses', json([sourceConst].[ConstraintClasses]),
|
|
361
|
-
'customAttributes', (
|
|
362
|
-
SELECT
|
|
363
|
-
json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
|
|
364
|
-
FROM [meta].[CustomAttribute] [ca]
|
|
365
|
-
WHERE [ca].[ContainerId] = [sourceConst].[ConstraintId] AND [ca].[ContainerType] = 1024
|
|
366
|
-
ORDER BY [ca].[Ordinal]
|
|
367
|
-
)
|
|
368
|
-
)
|
|
369
|
-
FROM
|
|
370
|
-
[ClassRelationshipConstraints] [sourceConst]
|
|
371
|
-
WHERE [sourceConst].[relationshipEnd] = 0
|
|
372
|
-
AND [sourceConst].[ClassId] = [class].[ECInstanceId]
|
|
373
|
-
),
|
|
374
|
-
'target', (
|
|
375
|
-
SELECT
|
|
376
|
-
json_object (
|
|
377
|
-
'multiplicity', [targetConst].[Multiplicity],
|
|
378
|
-
'roleLabel', [targetConst].[RoleLabel],
|
|
379
|
-
'polymorphic', IIF([targetConst].[IsPolyMorphic] = 1, json('true'), json('false')),
|
|
380
|
-
'abstractConstraint', [targetConst].[AbstractConstraint],
|
|
381
|
-
'constraintClasses', json([targetConst].[ConstraintClasses]),
|
|
382
|
-
'customAttributes', (
|
|
383
|
-
SELECT
|
|
384
|
-
json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
|
|
385
|
-
FROM [meta].[CustomAttribute] [ca]
|
|
386
|
-
WHERE [ca].[ContainerId] = [targetConst].[ConstraintId] AND [ca].[ContainerType] = 2048
|
|
387
|
-
ORDER BY [ca].[Ordinal]
|
|
388
|
-
)
|
|
389
|
-
)
|
|
390
|
-
FROM
|
|
391
|
-
[ClassRelationshipConstraints] [targetConst]
|
|
392
|
-
WHERE [targetConst].[relationshipEnd] = 1
|
|
393
|
-
AND [targetConst].[ClassId] = [class].[ECInstanceId]
|
|
394
|
-
)
|
|
395
|
-
) AS [item]
|
|
396
|
-
FROM [meta].[ECClassDef] [class]
|
|
397
|
-
JOIN
|
|
398
|
-
[meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]
|
|
399
|
-
WHERE [class].[Type] = 1 AND
|
|
400
|
-
[sd].[Name] = :schemaName
|
|
336
|
+
const baseRelationshipClassQuery = `
|
|
337
|
+
SELECT
|
|
338
|
+
[sd].Name as schema,
|
|
339
|
+
json_object (
|
|
340
|
+
'schemaItemType', 'RelationshipClass',
|
|
341
|
+
'name', [class].[Name],
|
|
342
|
+
'label', [class].[DisplayLabel],
|
|
343
|
+
'description', [class].[Description],
|
|
344
|
+
'strength', ${strength("class")},
|
|
345
|
+
'strengthDirection', ${strengthDirection("class")},
|
|
346
|
+
'modifier', ${modifier("class")},
|
|
347
|
+
'baseClass', (
|
|
348
|
+
${selectBaseClasses}
|
|
349
|
+
),
|
|
350
|
+
'customAttributes', (${classCustomAttribute("class")}),
|
|
351
|
+
'properties', (
|
|
352
|
+
${selectProperties}
|
|
353
|
+
),
|
|
354
|
+
'source', (
|
|
355
|
+
SELECT
|
|
356
|
+
json_object (
|
|
357
|
+
'multiplicity', [sourceConst].[Multiplicity],
|
|
358
|
+
'roleLabel', [sourceConst].[RoleLabel],
|
|
359
|
+
'polymorphic', IIF([sourceConst].[IsPolyMorphic] = 1, json('true'), json('false')),
|
|
360
|
+
'abstractConstraint', [sourceConst].[AbstractConstraint],
|
|
361
|
+
'constraintClasses', json([sourceConst].[ConstraintClasses]),
|
|
362
|
+
'customAttributes', (
|
|
363
|
+
SELECT
|
|
364
|
+
json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
|
|
365
|
+
FROM [meta].[CustomAttribute] [ca]
|
|
366
|
+
WHERE [ca].[ContainerId] = [sourceConst].[ConstraintId] AND [ca].[ContainerType] = 1024
|
|
367
|
+
ORDER BY [ca].[Ordinal]
|
|
368
|
+
)
|
|
369
|
+
)
|
|
370
|
+
FROM
|
|
371
|
+
[ClassRelationshipConstraints] [sourceConst]
|
|
372
|
+
WHERE [sourceConst].[relationshipEnd] = 0
|
|
373
|
+
AND [sourceConst].[ClassId] = [class].[ECInstanceId]
|
|
374
|
+
),
|
|
375
|
+
'target', (
|
|
376
|
+
SELECT
|
|
377
|
+
json_object (
|
|
378
|
+
'multiplicity', [targetConst].[Multiplicity],
|
|
379
|
+
'roleLabel', [targetConst].[RoleLabel],
|
|
380
|
+
'polymorphic', IIF([targetConst].[IsPolyMorphic] = 1, json('true'), json('false')),
|
|
381
|
+
'abstractConstraint', [targetConst].[AbstractConstraint],
|
|
382
|
+
'constraintClasses', json([targetConst].[ConstraintClasses]),
|
|
383
|
+
'customAttributes', (
|
|
384
|
+
SELECT
|
|
385
|
+
json_group_array(json(XmlCAToJson([ca].[Class].[Id], [ca].[Instance])))
|
|
386
|
+
FROM [meta].[CustomAttribute] [ca]
|
|
387
|
+
WHERE [ca].[ContainerId] = [targetConst].[ConstraintId] AND [ca].[ContainerType] = 2048
|
|
388
|
+
ORDER BY [ca].[Ordinal]
|
|
389
|
+
)
|
|
390
|
+
)
|
|
391
|
+
FROM
|
|
392
|
+
[ClassRelationshipConstraints] [targetConst]
|
|
393
|
+
WHERE [targetConst].[relationshipEnd] = 1
|
|
394
|
+
AND [targetConst].[ClassId] = [class].[ECInstanceId]
|
|
395
|
+
)
|
|
396
|
+
) AS [item]
|
|
397
|
+
FROM [meta].[ECClassDef] [class]
|
|
398
|
+
JOIN
|
|
399
|
+
[meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]
|
|
400
|
+
WHERE [class].[Type] = 1 AND
|
|
401
|
+
[sd].[Name] = :schemaName
|
|
401
402
|
`;
|
|
402
403
|
/**
|
|
403
404
|
* RelationshipClass query used to when querying for RelationshipClass data only. Not used
|
|
404
405
|
* for full Schema load via single query.
|
|
405
406
|
*/
|
|
406
|
-
const relationshipClassQuery = `
|
|
407
|
-
WITH
|
|
408
|
-
${withClassProperties},
|
|
409
|
-
${withRelationshipConstraints}
|
|
410
|
-
${baseRelationshipClassQuery}
|
|
407
|
+
const relationshipClassQuery = `
|
|
408
|
+
WITH
|
|
409
|
+
${withClassProperties},
|
|
410
|
+
${withRelationshipConstraints}
|
|
411
|
+
${baseRelationshipClassQuery}
|
|
411
412
|
`;
|
|
412
413
|
/**
|
|
413
414
|
* Query that provides StructClass data and is shared by two cases:
|
|
@@ -415,37 +416,37 @@ ${baseRelationshipClassQuery}
|
|
|
415
416
|
* 2. When querying a full schema with multiple schema item queries or
|
|
416
417
|
* when just querying for Struct classes.
|
|
417
418
|
*/
|
|
418
|
-
const baseStructQuery = `
|
|
419
|
-
SELECT
|
|
420
|
-
[sd].Name as schema,
|
|
421
|
-
json_object (
|
|
422
|
-
'schemaItemType', 'StructClass',
|
|
423
|
-
'name', [class].[Name],
|
|
424
|
-
'label', [class].[DisplayLabel],
|
|
425
|
-
'description', [class].[Description],
|
|
426
|
-
'modifier', ${modifier("class")},
|
|
427
|
-
'baseClass', (
|
|
428
|
-
${selectBaseClasses}
|
|
429
|
-
),
|
|
430
|
-
'customAttributes', (${classCustomAttribute("class")}),
|
|
431
|
-
'properties', (
|
|
432
|
-
${selectProperties}
|
|
433
|
-
)
|
|
434
|
-
) AS item
|
|
435
|
-
FROM [meta].[ECClassDef] [class]
|
|
436
|
-
JOIN
|
|
437
|
-
[meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]
|
|
438
|
-
WHERE [class].[Type] = 2 AND
|
|
439
|
-
[sd].[Name] = :schemaName
|
|
419
|
+
const baseStructQuery = `
|
|
420
|
+
SELECT
|
|
421
|
+
[sd].Name as schema,
|
|
422
|
+
json_object (
|
|
423
|
+
'schemaItemType', 'StructClass',
|
|
424
|
+
'name', [class].[Name],
|
|
425
|
+
'label', [class].[DisplayLabel],
|
|
426
|
+
'description', [class].[Description],
|
|
427
|
+
'modifier', ${modifier("class")},
|
|
428
|
+
'baseClass', (
|
|
429
|
+
${selectBaseClasses}
|
|
430
|
+
),
|
|
431
|
+
'customAttributes', (${classCustomAttribute("class")}),
|
|
432
|
+
'properties', (
|
|
433
|
+
${selectProperties}
|
|
434
|
+
)
|
|
435
|
+
) AS item
|
|
436
|
+
FROM [meta].[ECClassDef] [class]
|
|
437
|
+
JOIN
|
|
438
|
+
[meta].[ECSchemaDef] [sd] ON [sd].[ECInstanceId] = [class].[Schema].[Id]
|
|
439
|
+
WHERE [class].[Type] = 2 AND
|
|
440
|
+
[sd].[Name] = :schemaName
|
|
440
441
|
`;
|
|
441
442
|
/**
|
|
442
443
|
* StructClass query used to when querying for StructClass data only. Not used
|
|
443
444
|
* for full Schema load via single query.
|
|
444
445
|
*/
|
|
445
|
-
const structQuery = `
|
|
446
|
-
WITH
|
|
447
|
-
${withClassProperties}
|
|
448
|
-
${baseStructQuery}
|
|
446
|
+
const structQuery = `
|
|
447
|
+
WITH
|
|
448
|
+
${withClassProperties}
|
|
449
|
+
${baseStructQuery}
|
|
449
450
|
`;
|
|
450
451
|
/**
|
|
451
452
|
* Query that provides CustomAttributeClass data and is shared by two cases:
|
|
@@ -453,141 +454,141 @@ ${baseStructQuery}
|
|
|
453
454
|
* 2. When querying a full schema with multiple schema item queries or
|
|
454
455
|
* when just querying for CustomAttribute classes.
|
|
455
456
|
*/
|
|
456
|
-
const baseCustomAttributeQuery = `
|
|
457
|
-
SELECT
|
|
458
|
-
[sd].Name as schema,
|
|
459
|
-
json_object (
|
|
460
|
-
'schemaItemType', 'CustomAttributeClass',
|
|
461
|
-
'name', [class].[Name],
|
|
462
|
-
'label', [class].[DisplayLabel],
|
|
463
|
-
'description', [class].[Description],
|
|
464
|
-
'appliesTo', [class].[CustomAttributeContainerType],
|
|
465
|
-
'modifier', ${modifier("class")},
|
|
466
|
-
'baseClass', (
|
|
467
|
-
${selectBaseClasses}
|
|
468
|
-
),
|
|
469
|
-
'customAttributes', (${classCustomAttribute("class")}),
|
|
470
|
-
'properties', (
|
|
471
|
-
${selectProperties}
|
|
472
|
-
)
|
|
473
|
-
) AS [item]
|
|
474
|
-
FROM [meta].[ECClassDef] [class]
|
|
475
|
-
JOIN
|
|
476
|
-
[meta].[ECSchemaDef] sd ON [sd].[ECInstanceId] = [class].[Schema].[Id]
|
|
477
|
-
WHERE [class].[Type] = 3 AND
|
|
478
|
-
[sd].[Name] = :schemaName
|
|
457
|
+
const baseCustomAttributeQuery = `
|
|
458
|
+
SELECT
|
|
459
|
+
[sd].Name as schema,
|
|
460
|
+
json_object (
|
|
461
|
+
'schemaItemType', 'CustomAttributeClass',
|
|
462
|
+
'name', [class].[Name],
|
|
463
|
+
'label', [class].[DisplayLabel],
|
|
464
|
+
'description', [class].[Description],
|
|
465
|
+
'appliesTo', [class].[CustomAttributeContainerType],
|
|
466
|
+
'modifier', ${modifier("class")},
|
|
467
|
+
'baseClass', (
|
|
468
|
+
${selectBaseClasses}
|
|
469
|
+
),
|
|
470
|
+
'customAttributes', (${classCustomAttribute("class")}),
|
|
471
|
+
'properties', (
|
|
472
|
+
${selectProperties}
|
|
473
|
+
)
|
|
474
|
+
) AS [item]
|
|
475
|
+
FROM [meta].[ECClassDef] [class]
|
|
476
|
+
JOIN
|
|
477
|
+
[meta].[ECSchemaDef] sd ON [sd].[ECInstanceId] = [class].[Schema].[Id]
|
|
478
|
+
WHERE [class].[Type] = 3 AND
|
|
479
|
+
[sd].[Name] = :schemaName
|
|
479
480
|
`;
|
|
480
481
|
/**
|
|
481
482
|
* CustomAttributeClass query used to when querying for CustomAttributeClass data only. Not used
|
|
482
483
|
* for full Schema load via single query.
|
|
483
484
|
*/
|
|
484
|
-
const customAttributeQuery = `
|
|
485
|
-
WITH
|
|
486
|
-
${withClassProperties}
|
|
487
|
-
${baseCustomAttributeQuery}
|
|
485
|
+
const customAttributeQuery = `
|
|
486
|
+
WITH
|
|
487
|
+
${withClassProperties}
|
|
488
|
+
${baseCustomAttributeQuery}
|
|
488
489
|
`;
|
|
489
490
|
/**
|
|
490
491
|
* Used by full schema load query via single query. Allows
|
|
491
492
|
* all SchemaItemTypes to be queried at once.
|
|
492
493
|
*/
|
|
493
|
-
const withSchemaItems = `
|
|
494
|
-
SchemaItems AS (
|
|
495
|
-
${baseEntityQuery}
|
|
496
|
-
UNION ALL
|
|
497
|
-
${baseRelationshipClassQuery}
|
|
498
|
-
UNION ALL
|
|
499
|
-
${baseStructQuery}
|
|
500
|
-
UNION ALL
|
|
501
|
-
${baseMixinQuery}
|
|
502
|
-
UNION ALL
|
|
503
|
-
${baseCustomAttributeQuery}
|
|
504
|
-
UNION ALL
|
|
505
|
-
${SchemaItemQueries.kindOfQuantity(true)}
|
|
506
|
-
UNION ALL
|
|
507
|
-
${SchemaItemQueries.enumeration(true)}
|
|
508
|
-
UNION ALL
|
|
509
|
-
${SchemaItemQueries.propertyCategory(true)}
|
|
510
|
-
UNION ALL
|
|
511
|
-
${SchemaItemQueries.unit(true)}
|
|
512
|
-
UNION ALL
|
|
513
|
-
${SchemaItemQueries.invertedUnit(true)}
|
|
514
|
-
UNION ALL
|
|
515
|
-
${SchemaItemQueries.unitSystem(true)}
|
|
516
|
-
UNION ALL
|
|
517
|
-
${SchemaItemQueries.constant(true)}
|
|
518
|
-
UNION ALL
|
|
519
|
-
${SchemaItemQueries.phenomenon(true)}
|
|
520
|
-
UNION ALL
|
|
521
|
-
${SchemaItemQueries.format(true)}
|
|
522
|
-
)
|
|
494
|
+
const withSchemaItems = `
|
|
495
|
+
SchemaItems AS (
|
|
496
|
+
${baseEntityQuery}
|
|
497
|
+
UNION ALL
|
|
498
|
+
${baseRelationshipClassQuery}
|
|
499
|
+
UNION ALL
|
|
500
|
+
${baseStructQuery}
|
|
501
|
+
UNION ALL
|
|
502
|
+
${baseMixinQuery}
|
|
503
|
+
UNION ALL
|
|
504
|
+
${baseCustomAttributeQuery}
|
|
505
|
+
UNION ALL
|
|
506
|
+
${SchemaItemQueries.kindOfQuantity(true)}
|
|
507
|
+
UNION ALL
|
|
508
|
+
${SchemaItemQueries.enumeration(true)}
|
|
509
|
+
UNION ALL
|
|
510
|
+
${SchemaItemQueries.propertyCategory(true)}
|
|
511
|
+
UNION ALL
|
|
512
|
+
${SchemaItemQueries.unit(true)}
|
|
513
|
+
UNION ALL
|
|
514
|
+
${SchemaItemQueries.invertedUnit(true)}
|
|
515
|
+
UNION ALL
|
|
516
|
+
${SchemaItemQueries.unitSystem(true)}
|
|
517
|
+
UNION ALL
|
|
518
|
+
${SchemaItemQueries.constant(true)}
|
|
519
|
+
UNION ALL
|
|
520
|
+
${SchemaItemQueries.phenomenon(true)}
|
|
521
|
+
UNION ALL
|
|
522
|
+
${SchemaItemQueries.format(true)}
|
|
523
|
+
)
|
|
523
524
|
`;
|
|
524
525
|
/**
|
|
525
526
|
* Query for Schema data without SchemaItems
|
|
526
527
|
*/
|
|
527
|
-
const schemaNoItemsQuery = `
|
|
528
|
-
WITH
|
|
529
|
-
${withSchemaReferences}
|
|
530
|
-
SELECT
|
|
531
|
-
json_object (
|
|
532
|
-
'name', [schemaDef].[Name],
|
|
533
|
-
'version', CONCAT(printf('%02d', [VersionMajor]), '.', printf('%02d', [VersionWrite]), '.', printf('%02d', [VersionMinor])),
|
|
534
|
-
'alias', [schemaDef].[Alias],
|
|
535
|
-
'label', [schemaDef].[DisplayLabel],
|
|
536
|
-
'description', [schemaDef].[Description],
|
|
537
|
-
'ecSpecMajorVersion', [schemaDef].[OriginalECXmlVersionMajor],
|
|
538
|
-
'ecSpecMinorVersion', [schemaDef].[OriginalECXmlVersionMinor],
|
|
539
|
-
'customAttributes', (${schemaCustomAttribute("schemaDef")}),
|
|
540
|
-
'references', (
|
|
541
|
-
SELECT
|
|
542
|
-
json_group_array(json([schemaReferences].[reference]))
|
|
543
|
-
FROM
|
|
544
|
-
[SchemaReferences] [schemaReferences]
|
|
545
|
-
WHERE
|
|
546
|
-
[schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]
|
|
547
|
-
)
|
|
548
|
-
) as [schema]
|
|
549
|
-
FROM
|
|
550
|
-
[meta].[ECSchemaDef] [schemaDef] WHERE [Name] = :schemaName
|
|
528
|
+
const schemaNoItemsQuery = `
|
|
529
|
+
WITH
|
|
530
|
+
${withSchemaReferences}
|
|
531
|
+
SELECT
|
|
532
|
+
json_object (
|
|
533
|
+
'name', [schemaDef].[Name],
|
|
534
|
+
'version', CONCAT(printf('%02d', [VersionMajor]), '.', printf('%02d', [VersionWrite]), '.', printf('%02d', [VersionMinor])),
|
|
535
|
+
'alias', [schemaDef].[Alias],
|
|
536
|
+
'label', [schemaDef].[DisplayLabel],
|
|
537
|
+
'description', [schemaDef].[Description],
|
|
538
|
+
'ecSpecMajorVersion', [schemaDef].[OriginalECXmlVersionMajor],
|
|
539
|
+
'ecSpecMinorVersion', [schemaDef].[OriginalECXmlVersionMinor],
|
|
540
|
+
'customAttributes', (${schemaCustomAttribute("schemaDef")}),
|
|
541
|
+
'references', (
|
|
542
|
+
SELECT
|
|
543
|
+
json_group_array(json([schemaReferences].[reference]))
|
|
544
|
+
FROM
|
|
545
|
+
[SchemaReferences] [schemaReferences]
|
|
546
|
+
WHERE
|
|
547
|
+
[schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]
|
|
548
|
+
)
|
|
549
|
+
) as [schema]
|
|
550
|
+
FROM
|
|
551
|
+
[meta].[ECSchemaDef] [schemaDef] WHERE [Name] = :schemaName
|
|
551
552
|
`;
|
|
552
553
|
/**
|
|
553
554
|
* Query to load a full Schema via a single query.
|
|
554
555
|
*/
|
|
555
|
-
const schemaQuery = `
|
|
556
|
-
WITH
|
|
557
|
-
${withAppliesTo},
|
|
558
|
-
${withSchemaReferences},
|
|
559
|
-
${withClassProperties},
|
|
560
|
-
${withRelationshipConstraints},
|
|
561
|
-
${withSchemaItems}
|
|
562
|
-
SELECT
|
|
563
|
-
json_object (
|
|
564
|
-
'name', [schemaDef].[Name],
|
|
565
|
-
'version', CONCAT(printf('%02d', [VersionMajor]), '.', printf('%02d', [VersionWrite]), '.', printf('%02d', [VersionMinor])),
|
|
566
|
-
'alias', [schemaDef].[Alias],
|
|
567
|
-
'label', [schemaDef].[DisplayLabel],
|
|
568
|
-
'description', [schemaDef].[Description],
|
|
569
|
-
'ecSpecMajorVersion', [schemaDef].[OriginalECXmlVersionMajor],
|
|
570
|
-
'ecSpecMinorVersion', [schemaDef].[OriginalECXmlVersionMinor],
|
|
571
|
-
'customAttributes', (${schemaCustomAttribute("schemaDef")}),
|
|
572
|
-
'references', (
|
|
573
|
-
SELECT
|
|
574
|
-
json_group_array(json([schemaReferences].[reference]))
|
|
575
|
-
FROM
|
|
576
|
-
[SchemaReferences] [schemaReferences]
|
|
577
|
-
WHERE
|
|
578
|
-
[schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]
|
|
579
|
-
),
|
|
580
|
-
'items', (
|
|
581
|
-
SELECT
|
|
582
|
-
json_group_array(json(json_object(
|
|
583
|
-
'item', json([items].[item])
|
|
584
|
-
)))
|
|
585
|
-
FROM
|
|
586
|
-
[SchemaItems] [items]
|
|
587
|
-
)
|
|
588
|
-
) as [schema]
|
|
589
|
-
FROM
|
|
590
|
-
[meta].[ECSchemaDef] [schemaDef] WHERE [Name] = :schemaName
|
|
556
|
+
const schemaQuery = `
|
|
557
|
+
WITH
|
|
558
|
+
${withAppliesTo},
|
|
559
|
+
${withSchemaReferences},
|
|
560
|
+
${withClassProperties},
|
|
561
|
+
${withRelationshipConstraints},
|
|
562
|
+
${withSchemaItems}
|
|
563
|
+
SELECT
|
|
564
|
+
json_object (
|
|
565
|
+
'name', [schemaDef].[Name],
|
|
566
|
+
'version', CONCAT(printf('%02d', [VersionMajor]), '.', printf('%02d', [VersionWrite]), '.', printf('%02d', [VersionMinor])),
|
|
567
|
+
'alias', [schemaDef].[Alias],
|
|
568
|
+
'label', [schemaDef].[DisplayLabel],
|
|
569
|
+
'description', [schemaDef].[Description],
|
|
570
|
+
'ecSpecMajorVersion', [schemaDef].[OriginalECXmlVersionMajor],
|
|
571
|
+
'ecSpecMinorVersion', [schemaDef].[OriginalECXmlVersionMinor],
|
|
572
|
+
'customAttributes', (${schemaCustomAttribute("schemaDef")}),
|
|
573
|
+
'references', (
|
|
574
|
+
SELECT
|
|
575
|
+
json_group_array(json([schemaReferences].[reference]))
|
|
576
|
+
FROM
|
|
577
|
+
[SchemaReferences] [schemaReferences]
|
|
578
|
+
WHERE
|
|
579
|
+
[schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]
|
|
580
|
+
),
|
|
581
|
+
'items', (
|
|
582
|
+
SELECT
|
|
583
|
+
json_group_array(json(json_object(
|
|
584
|
+
'item', json([items].[item])
|
|
585
|
+
)))
|
|
586
|
+
FROM
|
|
587
|
+
[SchemaItems] [items]
|
|
588
|
+
)
|
|
589
|
+
) as [schema]
|
|
590
|
+
FROM
|
|
591
|
+
[meta].[ECSchemaDef] [schemaDef] WHERE [Name] = :schemaName
|
|
591
592
|
`;
|
|
592
593
|
/**
|
|
593
594
|
* Queries for loading full Schema JSON.
|