@itwin/ecschema-metadata 5.2.0-dev.25 → 5.2.0-dev.28
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.d.ts +2 -0
- package/lib/cjs/Deserialization/JsonProps.d.ts.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.js +465 -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.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.d.ts +2 -0
- package/lib/esm/Deserialization/JsonProps.d.ts.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.js +465 -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.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,212 @@ 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
|
-
LIMIT 1
|
|
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
|
+
LIMIT 1
|
|
74
74
|
`;
|
|
75
75
|
/**
|
|
76
76
|
* Selects class property data for each class type. ClassProperties
|
|
77
77
|
* is a common table expression (CTE or WITH clause) defined below.
|
|
78
78
|
*/
|
|
79
|
-
const selectProperties = `
|
|
80
|
-
SELECT
|
|
81
|
-
json_group_array(json([classProperties].[property]))
|
|
82
|
-
FROM
|
|
83
|
-
[ClassProperties] [classProperties]
|
|
84
|
-
WHERE
|
|
85
|
-
[classProperties].[ClassId] = [class].[ECInstanceId]
|
|
79
|
+
const selectProperties = `
|
|
80
|
+
SELECT
|
|
81
|
+
json_group_array(json([classProperties].[property]))
|
|
82
|
+
FROM
|
|
83
|
+
[ClassProperties] [classProperties]
|
|
84
|
+
WHERE
|
|
85
|
+
[classProperties].[ClassId] = [class].[ECInstanceId]
|
|
86
86
|
`;
|
|
87
87
|
/**
|
|
88
88
|
* A CTE used to select AppliesTo from IsMixin CustomAttributes for a given Mixin.
|
|
89
89
|
*/
|
|
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
|
-
)
|
|
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
|
+
)
|
|
104
104
|
`;
|
|
105
105
|
/**
|
|
106
106
|
* A CTE used to select Schema reference data for a given Schema.
|
|
107
107
|
*/
|
|
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
|
-
)
|
|
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
|
+
)
|
|
121
121
|
`;
|
|
122
122
|
/**
|
|
123
123
|
* A CTE used to select Relationship constraints for a given RelationshipClass.
|
|
124
124
|
*/
|
|
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
|
-
)
|
|
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
|
+
)
|
|
144
144
|
`;
|
|
145
145
|
/**
|
|
146
146
|
* A CTE used to select Class property data for a given Class.
|
|
147
147
|
*/
|
|
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
|
-
)
|
|
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
|
+
)
|
|
218
218
|
`;
|
|
219
219
|
/**
|
|
220
220
|
* Query that provides EntityClass data and is shared by two cases:
|
|
@@ -222,52 +222,52 @@ LEFT JOIN [meta].[ECSchemaDef] [navSchemaDef]
|
|
|
222
222
|
* 2. When querying a full schema with multiple schema item queries or
|
|
223
223
|
* when just querying for Entity classes.
|
|
224
224
|
*/
|
|
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]))
|
|
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]))
|
|
262
262
|
`;
|
|
263
263
|
/**
|
|
264
264
|
* EntityClass query used to when querying for EntityClass data only. Not used
|
|
265
265
|
* for full Schema load via single query.
|
|
266
266
|
*/
|
|
267
|
-
const entityQuery = `
|
|
268
|
-
WITH
|
|
269
|
-
${withClassProperties}
|
|
270
|
-
${baseEntityQuery}
|
|
267
|
+
const entityQuery = `
|
|
268
|
+
WITH
|
|
269
|
+
${withClassProperties}
|
|
270
|
+
${baseEntityQuery}
|
|
271
271
|
`;
|
|
272
272
|
/**
|
|
273
273
|
* Query that provides Mixin data and is shared by two cases:
|
|
@@ -275,56 +275,56 @@ const entityQuery = `
|
|
|
275
275
|
* 2. When querying a full schema with multiple schema item queries or
|
|
276
276
|
* when just querying for Mixin classes.
|
|
277
277
|
*/
|
|
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]))
|
|
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]))
|
|
318
318
|
`;
|
|
319
319
|
/**
|
|
320
320
|
* Mixin query used to when querying for Mixin data only. Not used
|
|
321
321
|
* for full Schema load via single query.
|
|
322
322
|
*/
|
|
323
|
-
const mixinQuery = `
|
|
324
|
-
WITH
|
|
325
|
-
${withAppliesTo},
|
|
326
|
-
${withClassProperties}
|
|
327
|
-
${baseMixinQuery}
|
|
323
|
+
const mixinQuery = `
|
|
324
|
+
WITH
|
|
325
|
+
${withAppliesTo},
|
|
326
|
+
${withClassProperties}
|
|
327
|
+
${baseMixinQuery}
|
|
328
328
|
`;
|
|
329
329
|
/**
|
|
330
330
|
* Query that provides RelationshipClass data and is shared by two cases:
|
|
@@ -332,82 +332,82 @@ ${baseMixinQuery}
|
|
|
332
332
|
* 2. When querying a full schema with multiple schema item queries or
|
|
333
333
|
* when just querying for Relationship classes.
|
|
334
334
|
*/
|
|
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
|
|
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
|
|
401
401
|
`;
|
|
402
402
|
/**
|
|
403
403
|
* RelationshipClass query used to when querying for RelationshipClass data only. Not used
|
|
404
404
|
* for full Schema load via single query.
|
|
405
405
|
*/
|
|
406
|
-
const relationshipClassQuery = `
|
|
407
|
-
WITH
|
|
408
|
-
${withClassProperties},
|
|
409
|
-
${withRelationshipConstraints}
|
|
410
|
-
${baseRelationshipClassQuery}
|
|
406
|
+
const relationshipClassQuery = `
|
|
407
|
+
WITH
|
|
408
|
+
${withClassProperties},
|
|
409
|
+
${withRelationshipConstraints}
|
|
410
|
+
${baseRelationshipClassQuery}
|
|
411
411
|
`;
|
|
412
412
|
/**
|
|
413
413
|
* Query that provides StructClass data and is shared by two cases:
|
|
@@ -415,37 +415,37 @@ ${baseRelationshipClassQuery}
|
|
|
415
415
|
* 2. When querying a full schema with multiple schema item queries or
|
|
416
416
|
* when just querying for Struct classes.
|
|
417
417
|
*/
|
|
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
|
|
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
|
|
440
440
|
`;
|
|
441
441
|
/**
|
|
442
442
|
* StructClass query used to when querying for StructClass data only. Not used
|
|
443
443
|
* for full Schema load via single query.
|
|
444
444
|
*/
|
|
445
|
-
const structQuery = `
|
|
446
|
-
WITH
|
|
447
|
-
${withClassProperties}
|
|
448
|
-
${baseStructQuery}
|
|
445
|
+
const structQuery = `
|
|
446
|
+
WITH
|
|
447
|
+
${withClassProperties}
|
|
448
|
+
${baseStructQuery}
|
|
449
449
|
`;
|
|
450
450
|
/**
|
|
451
451
|
* Query that provides CustomAttributeClass data and is shared by two cases:
|
|
@@ -453,141 +453,141 @@ ${baseStructQuery}
|
|
|
453
453
|
* 2. When querying a full schema with multiple schema item queries or
|
|
454
454
|
* when just querying for CustomAttribute classes.
|
|
455
455
|
*/
|
|
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
|
|
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
|
|
479
479
|
`;
|
|
480
480
|
/**
|
|
481
481
|
* CustomAttributeClass query used to when querying for CustomAttributeClass data only. Not used
|
|
482
482
|
* for full Schema load via single query.
|
|
483
483
|
*/
|
|
484
|
-
const customAttributeQuery = `
|
|
485
|
-
WITH
|
|
486
|
-
${withClassProperties}
|
|
487
|
-
${baseCustomAttributeQuery}
|
|
484
|
+
const customAttributeQuery = `
|
|
485
|
+
WITH
|
|
486
|
+
${withClassProperties}
|
|
487
|
+
${baseCustomAttributeQuery}
|
|
488
488
|
`;
|
|
489
489
|
/**
|
|
490
490
|
* Used by full schema load query via single query. Allows
|
|
491
491
|
* all SchemaItemTypes to be queried at once.
|
|
492
492
|
*/
|
|
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
|
-
)
|
|
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
|
+
)
|
|
523
523
|
`;
|
|
524
524
|
/**
|
|
525
525
|
* Query for Schema data without SchemaItems
|
|
526
526
|
*/
|
|
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
|
|
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
|
|
551
551
|
`;
|
|
552
552
|
/**
|
|
553
553
|
* Query to load a full Schema via a single query.
|
|
554
554
|
*/
|
|
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
|
|
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
|
|
591
591
|
`;
|
|
592
592
|
/**
|
|
593
593
|
* Queries for loading full Schema JSON.
|