@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.
Files changed (125) hide show
  1. package/lib/cjs/Constants.js.map +1 -1
  2. package/lib/cjs/DelayedPromise.js.map +1 -1
  3. package/lib/cjs/Deserialization/AbstractParser.js.map +1 -1
  4. package/lib/cjs/Deserialization/Helper.js.map +1 -1
  5. package/lib/cjs/Deserialization/JsonParser.js.map +1 -1
  6. package/lib/cjs/Deserialization/JsonProps.d.ts +2 -0
  7. package/lib/cjs/Deserialization/JsonProps.d.ts.map +1 -1
  8. package/lib/cjs/Deserialization/JsonProps.js.map +1 -1
  9. package/lib/cjs/Deserialization/SchemaGraphUtil.js.map +1 -1
  10. package/lib/cjs/Deserialization/XmlParser.js.map +1 -1
  11. package/lib/cjs/Deserialization/XmlSerializationUtils.js.map +1 -1
  12. package/lib/cjs/ECName.js.map +1 -1
  13. package/lib/cjs/ECObjects.js.map +1 -1
  14. package/lib/cjs/Exception.js.map +1 -1
  15. package/lib/cjs/Formatting/FormatSetFormatsProvider.js.map +1 -1
  16. package/lib/cjs/Formatting/SchemaFormatsProvider.js.map +1 -1
  17. package/lib/cjs/IncrementalLoading/ClassParsers.js.map +1 -1
  18. package/lib/cjs/IncrementalLoading/ECSqlSchemaLocater.js.map +1 -1
  19. package/lib/cjs/IncrementalLoading/FullSchemaQueries.js +465 -465
  20. package/lib/cjs/IncrementalLoading/FullSchemaQueries.js.map +1 -1
  21. package/lib/cjs/IncrementalLoading/IncrementalSchemaLocater.js.map +1 -1
  22. package/lib/cjs/IncrementalLoading/IncrementalSchemaReader.js.map +1 -1
  23. package/lib/cjs/IncrementalLoading/SchemaItemParsers.js.map +1 -1
  24. package/lib/cjs/IncrementalLoading/SchemaItemQueries.js +235 -235
  25. package/lib/cjs/IncrementalLoading/SchemaItemQueries.js.map +1 -1
  26. package/lib/cjs/IncrementalLoading/SchemaParser.js.map +1 -1
  27. package/lib/cjs/IncrementalLoading/SchemaStubQueries.js +309 -309
  28. package/lib/cjs/IncrementalLoading/SchemaStubQueries.js.map +1 -1
  29. package/lib/cjs/Interfaces.js.map +1 -1
  30. package/lib/cjs/Metadata/Class.js.map +1 -1
  31. package/lib/cjs/Metadata/Constant.js.map +1 -1
  32. package/lib/cjs/Metadata/CustomAttribute.js.map +1 -1
  33. package/lib/cjs/Metadata/CustomAttributeClass.js.map +1 -1
  34. package/lib/cjs/Metadata/EntityClass.js.map +1 -1
  35. package/lib/cjs/Metadata/Enumeration.js.map +1 -1
  36. package/lib/cjs/Metadata/Format.js.map +1 -1
  37. package/lib/cjs/Metadata/InvertedUnit.js.map +1 -1
  38. package/lib/cjs/Metadata/KindOfQuantity.js.map +1 -1
  39. package/lib/cjs/Metadata/Mixin.js.map +1 -1
  40. package/lib/cjs/Metadata/OverrideFormat.js.map +1 -1
  41. package/lib/cjs/Metadata/Phenomenon.js.map +1 -1
  42. package/lib/cjs/Metadata/Property.js.map +1 -1
  43. package/lib/cjs/Metadata/PropertyCategory.js.map +1 -1
  44. package/lib/cjs/Metadata/RelationshipClass.js.map +1 -1
  45. package/lib/cjs/Metadata/Schema.js.map +1 -1
  46. package/lib/cjs/Metadata/SchemaItem.js.map +1 -1
  47. package/lib/cjs/Metadata/UnitSystem.js.map +1 -1
  48. package/lib/cjs/PropertyTypes.js.map +1 -1
  49. package/lib/cjs/SchemaJsonLocater.js.map +1 -1
  50. package/lib/cjs/SchemaKey.js.map +1 -1
  51. package/lib/cjs/SchemaLoader.js.map +1 -1
  52. package/lib/cjs/SchemaPartVisitorDelegate.js.map +1 -1
  53. package/lib/cjs/UnitConversion/Graph.js.map +1 -1
  54. package/lib/cjs/UnitConversion/Parser.js.map +1 -1
  55. package/lib/cjs/UnitConversion/UnitConversion.js.map +1 -1
  56. package/lib/cjs/UnitConversion/UnitConverter.js.map +1 -1
  57. package/lib/cjs/UnitConversion/UnitTree.js.map +1 -1
  58. package/lib/cjs/UnitProvider/SchemaUnitProvider.js.map +1 -1
  59. package/lib/cjs/Validation/SchemaWalker.js.map +1 -1
  60. package/lib/cjs/ecschema-metadata.js.map +1 -1
  61. package/lib/cjs/utils/SchemaGraph.js.map +1 -1
  62. package/lib/cjs/utils/SchemaLoadingController.js.map +1 -1
  63. package/lib/esm/Constants.js.map +1 -1
  64. package/lib/esm/DelayedPromise.js.map +1 -1
  65. package/lib/esm/Deserialization/AbstractParser.js.map +1 -1
  66. package/lib/esm/Deserialization/Helper.js.map +1 -1
  67. package/lib/esm/Deserialization/JsonParser.js.map +1 -1
  68. package/lib/esm/Deserialization/JsonProps.d.ts +2 -0
  69. package/lib/esm/Deserialization/JsonProps.d.ts.map +1 -1
  70. package/lib/esm/Deserialization/JsonProps.js.map +1 -1
  71. package/lib/esm/Deserialization/SchemaGraphUtil.js.map +1 -1
  72. package/lib/esm/Deserialization/XmlParser.js.map +1 -1
  73. package/lib/esm/Deserialization/XmlSerializationUtils.js.map +1 -1
  74. package/lib/esm/ECName.js.map +1 -1
  75. package/lib/esm/ECObjects.js.map +1 -1
  76. package/lib/esm/Exception.js.map +1 -1
  77. package/lib/esm/Formatting/FormatSetFormatsProvider.js.map +1 -1
  78. package/lib/esm/Formatting/SchemaFormatsProvider.js.map +1 -1
  79. package/lib/esm/IncrementalLoading/ClassParsers.js.map +1 -1
  80. package/lib/esm/IncrementalLoading/ECSqlSchemaLocater.js.map +1 -1
  81. package/lib/esm/IncrementalLoading/FullSchemaQueries.js +465 -465
  82. package/lib/esm/IncrementalLoading/FullSchemaQueries.js.map +1 -1
  83. package/lib/esm/IncrementalLoading/IncrementalSchemaLocater.js.map +1 -1
  84. package/lib/esm/IncrementalLoading/IncrementalSchemaReader.js.map +1 -1
  85. package/lib/esm/IncrementalLoading/SchemaItemParsers.js.map +1 -1
  86. package/lib/esm/IncrementalLoading/SchemaItemQueries.js +235 -235
  87. package/lib/esm/IncrementalLoading/SchemaItemQueries.js.map +1 -1
  88. package/lib/esm/IncrementalLoading/SchemaParser.js.map +1 -1
  89. package/lib/esm/IncrementalLoading/SchemaStubQueries.js +309 -309
  90. package/lib/esm/IncrementalLoading/SchemaStubQueries.js.map +1 -1
  91. package/lib/esm/Interfaces.js.map +1 -1
  92. package/lib/esm/Metadata/Class.js.map +1 -1
  93. package/lib/esm/Metadata/Constant.js.map +1 -1
  94. package/lib/esm/Metadata/CustomAttribute.js.map +1 -1
  95. package/lib/esm/Metadata/CustomAttributeClass.js.map +1 -1
  96. package/lib/esm/Metadata/EntityClass.js.map +1 -1
  97. package/lib/esm/Metadata/Enumeration.js.map +1 -1
  98. package/lib/esm/Metadata/Format.js.map +1 -1
  99. package/lib/esm/Metadata/InvertedUnit.js.map +1 -1
  100. package/lib/esm/Metadata/KindOfQuantity.js.map +1 -1
  101. package/lib/esm/Metadata/Mixin.js.map +1 -1
  102. package/lib/esm/Metadata/OverrideFormat.js.map +1 -1
  103. package/lib/esm/Metadata/Phenomenon.js.map +1 -1
  104. package/lib/esm/Metadata/Property.js.map +1 -1
  105. package/lib/esm/Metadata/PropertyCategory.js.map +1 -1
  106. package/lib/esm/Metadata/RelationshipClass.js.map +1 -1
  107. package/lib/esm/Metadata/Schema.js.map +1 -1
  108. package/lib/esm/Metadata/SchemaItem.js.map +1 -1
  109. package/lib/esm/Metadata/UnitSystem.js.map +1 -1
  110. package/lib/esm/PropertyTypes.js.map +1 -1
  111. package/lib/esm/SchemaJsonLocater.js.map +1 -1
  112. package/lib/esm/SchemaKey.js.map +1 -1
  113. package/lib/esm/SchemaLoader.js.map +1 -1
  114. package/lib/esm/SchemaPartVisitorDelegate.js.map +1 -1
  115. package/lib/esm/UnitConversion/Graph.js.map +1 -1
  116. package/lib/esm/UnitConversion/Parser.js.map +1 -1
  117. package/lib/esm/UnitConversion/UnitConversion.js.map +1 -1
  118. package/lib/esm/UnitConversion/UnitConverter.js.map +1 -1
  119. package/lib/esm/UnitConversion/UnitTree.js.map +1 -1
  120. package/lib/esm/UnitProvider/SchemaUnitProvider.js.map +1 -1
  121. package/lib/esm/Validation/SchemaWalker.js.map +1 -1
  122. package/lib/esm/ecschema-metadata.js.map +1 -1
  123. package/lib/esm/utils/SchemaGraph.js.map +1 -1
  124. package/lib/esm/utils/SchemaLoadingController.js.map +1 -1
  125. 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.