@itwin/ecschema-metadata 5.2.0-dev.8 → 5.2.0

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