@itwin/ecschema-metadata 5.1.0-dev.9 → 5.2.0-dev.2

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