@itwin/ecschema-metadata 5.2.0-dev.23 → 5.2.0-dev.25

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,6 +1,16 @@
1
1
  # Change Log - @itwin/ecschema-metadata
2
2
 
3
- This log was last generated on Thu, 04 Sep 2025 13:55:58 GMT and should not be manually modified.
3
+ This log was last generated on Tue, 09 Sep 2025 19:33:20 GMT and should not be manually modified.
4
+
5
+ ## 5.1.7
6
+ Tue, 09 Sep 2025 19:28:04 GMT
7
+
8
+ _Version update only_
9
+
10
+ ## 5.1.6
11
+ Mon, 08 Sep 2025 13:53:47 GMT
12
+
13
+ _Version update only_
4
14
 
5
15
  ## 5.1.5
6
16
  Thu, 04 Sep 2025 13:51:09 GMT
@@ -1 +1 @@
1
- {"version":3,"file":"ECSqlSchemaLocater.d.ts","sourceRoot":"","sources":["../../../src/IncrementalLoading/ECSqlSchemaLocater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ECSqlSchemaLocater.d.ts","sourceRoot":"","sources":["../../../src/IncrementalLoading/ECSqlSchemaLocater.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,UAAU,EACvI,eAAe,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,qBAAqB,EAAmB,mBAAmB,EAAE,WAAW,EACxI,gBAAgB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE1E,OAAO,EAAE,UAAU,EAAiB,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,4BAA4B,CAAC;AA0D5F,UAAU,eAAe;IACvB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CAC1C;AAID;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,MAAM,WAAW,yBAA0B,SAAQ,oBAAoB;IACrE,mEAAmE;IACnE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC;CACvC;AAED;;;;GAIG;AACH,8BAAsB,kBAAmB,SAAQ,wBAAwB;IACvE;;OAEG;IACH,cAAuB,OAAO,IAAI,yBAAyB,CAE1D;IAED;;;OAGG;gBACS,OAAO,CAAC,EAAE,yBAAyB;IAI/C;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAE/G;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAEzF;;;;;;OAMG;cACa,aAAa,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;IAsB7G;;;;;;OAMG;YACW,gBAAgB;IAW9B;;;;OAIG;cACa,2BAA2B,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC;IAMrF;;;;;;OAMG;cACa,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAKxH;;;;;;OAMG;cACa,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAKhH;;;;;;OAMG;cACa,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAKnI;;;;;;OAMG;cACa,yBAAyB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAM/I;;;;;;OAMG;cACa,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAKvH;;;;;;OAMG;cACa,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAI3G;;;;;;OAMG;cACa,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAI/G;;;;;;OAMG;cACa,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAIpG;;;;;;OAMG;cACa,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC;IAIhG;;;;;;OAMG;cACa,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC;IAItG;;;;;;OAMG;cACa,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAI9F;;;;;;OAMG;cACa,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAIlG;;;;;;OAMG;cACa,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAIjG;;;;;;OAMG;cACa,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;IAIpG;;;OAGG;cACa,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;IAarE;;;;;;OAMG;cACa,iBAAiB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;YA8DlH,eAAe;YAuBf,aAAa;YAgBb,4BAA4B;CAmC3C"}
@@ -239,6 +239,8 @@ class ECSqlSchemaLocater extends IncrementalSchemaLocater_1.IncrementalSchemaLoc
239
239
  const schemaRows = await this.executeQuery(SchemaStubQueries_1.ecsqlQueries.schemaInfoQuery);
240
240
  return schemaRows.map((schemaRow) => ({
241
241
  alias: schemaRow.alias,
242
+ description: schemaRow.description,
243
+ label: schemaRow.label,
242
244
  schemaKey: SchemaKey_1.SchemaKey.parseString(`${schemaRow.name}.${schemaRow.version}`),
243
245
  references: Array.from(JSON.parse(schemaRow.references), parseSchemaReference),
244
246
  }));
@@ -252,16 +254,16 @@ class ECSqlSchemaLocater extends IncrementalSchemaLocater_1.IncrementalSchemaLoc
252
254
  */
253
255
  async getSchemaPartials(schemaKey, context) {
254
256
  const queryStart = Date.now();
255
- const [schemaRow] = await this.executeQuery(SchemaStubQueries_1.ecsqlQueries.schemaStubQuery, {
256
- parameters: { schemaName: schemaKey.name },
257
- limit: 1
257
+ const itemRows = await this.executeQuery(SchemaStubQueries_1.ecsqlQueries.schemaStubQuery, {
258
+ parameters: { schemaName: schemaKey.name }
258
259
  });
259
260
  const queryDuration = Date.now() - queryStart;
260
261
  core_bentley_1.Logger.logTrace(LOGGER_CATEGORY, `Recieved PartialSchema for ${schemaKey.name} in ${queryDuration}ms`, {
261
262
  schemaName: schemaKey.name,
263
+ itemCount: itemRows.length,
262
264
  duration: queryDuration,
263
265
  });
264
- if (!schemaRow)
266
+ if (itemRows.length === 0)
265
267
  return undefined;
266
268
  const schemaPartials = [];
267
269
  const addSchema = async (key) => {
@@ -289,14 +291,14 @@ class ECSqlSchemaLocater extends IncrementalSchemaLocater_1.IncrementalSchemaLoc
289
291
  Object.assign(items, { [itemInfo.name]: Object.assign(existingItem, itemInfo) });
290
292
  };
291
293
  const reviver = (_key, value) => {
292
- if (value === null) {
293
- return undefined;
294
- }
295
- return value;
294
+ return value === null ? undefined : value;
296
295
  };
297
296
  await addSchema(schemaKey);
298
297
  const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];
299
- await parseSchemaItemStubs(schemaKey.name, JSON.parse(schemaRow.items, reviver), addItems, schemaInfos);
298
+ const stubItems = itemRows.map((itemRow) => {
299
+ return JSON.parse(itemRow.item, reviver);
300
+ });
301
+ await parseSchemaItemStubs(schemaKey.name, stubItems, addItems, schemaInfos);
300
302
  return schemaPartials;
301
303
  }
302
304
  async querySchemaItem(context, schemaName, query, schemaType) {
@@ -1 +1 @@
1
- {"version":3,"file":"ECSqlSchemaLocater.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/ECSqlSchemaLocater.ts"],"names":[],"mappings":";;;AAAA;;;gGAGgG;AAChG,sDAA6C;AAK7C,4CAA+D;AAE/D,4CAAyC;AACzC,2DAAwD;AACxD,yEAA4F;AAC5F,2DAAwD;AACxD,iDAA8C;AAC9C,2DAAmD;AA+DnD,MAAM,eAAe,GAAG,sCAAsC,CAAC;AAqB/D;;;;GAIG;AACH,MAAsB,kBAAmB,SAAQ,mDAAwB;IACvE;;OAEG;IACH,IAAuB,OAAO;QAC5B,OAAO,KAAK,CAAC,OAAoC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,YAAY,OAAmC;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAgBD;;;;;;OAMG;IACO,KAAK,CAAC,aAAa,CAAC,SAAoB,EAAE,OAAsB;QACxE,gHAAgH;QAChH,gHAAgH;QAChH,kCAAkC;QAClC,IAAI,CAAC,MAAM,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC;YAClD,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB;YACjD,CAAC,CAAC,MAAM,IAAI,CAAC,4BAA4B,CAAC,SAAS,EAAE,OAAO,CAAC;YAC7D,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEjD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;QAC9C,qBAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,4BAA4B,SAAS,CAAC,IAAI,OAAO,aAAa,IAAI,EAAE;YACnG,UAAU,EAAE,SAAS,CAAC,IAAI;YAC1B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;YAClE,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC;IACrB,CAAC;IAAA,CAAC;IAEF;;;;;;OAMG;IACK,KAAK,CAAC,gBAAgB,CAAC,UAAkB,EAAE,OAAsB;QACvE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAY,qCAAiB,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAC5H,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,SAAS,KAAK,SAAS;YACzB,OAAO,SAAS,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAgB,CAAC;QAC3D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnF,OAAO,2BAAY,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,2BAA2B,CAAC,OAAsB;QAChE,MAAM,aAAa,GAAG,IAAI,qBAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACzD,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,2BAAe,CAAC,qBAAqB,CAAC,CAAC;QACzG,OAAO,cAAc,KAAK,SAAS,CAAC;IACtC,CAAC;IAAA,CAAC;IAEF;;;;;;OAMG;IACO,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,OAAsB,EAAE,aAAsB;QACxF,MAAM,KAAK,GAAG,aAAa,IAAI,qCAAiB,CAAC,WAAW,CAAC;QAC7D,OAAO,IAAI,CAAC,eAAe,CAAmB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACvF,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,OAAsB,EAAE,aAAsB;QACtF,MAAM,KAAK,GAAG,aAAa,IAAI,qCAAiB,CAAC,UAAU,CAAC;QAC5D,OAAO,IAAI,CAAC,eAAe,CAAa,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,OAAsB,EAAE,aAAsB;QAC7F,MAAM,KAAK,GAAG,aAAa,IAAI,qCAAiB,CAAC,sBAAsB,CAAC;QACxE,OAAO,IAAI,CAAC,eAAe,CAAyB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;IACnG,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,yBAAyB,CAAC,MAAc,EAAE,OAAsB,EAAE,aAAsB;QACtG,MAAM,KAAK,GAAG,aAAa,IAAI,qCAAiB,CAAC,oBAAoB,CAAC;QACtE,OAAO,IAAI,CAAC,eAAe,CAA4B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;IACzG,CAAC;IAGD;;;;;;OAMG;IACO,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,OAAsB,EAAE,aAAsB;QACvF,MAAM,KAAK,GAAG,aAAa,IAAI,qCAAiB,CAAC,WAAW,CAAC;QAC7D,OAAO,IAAI,CAAC,eAAe,CAAmB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACvF,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,mBAAmB,CAAC,MAAc,EAAE,OAAsB;QACxE,OAAO,IAAI,CAAC,eAAe,CAAsB,OAAO,EAAE,MAAM,EAAE,qCAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC9H,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,qBAAqB,CAAC,MAAc,EAAE,OAAsB;QAC1E,OAAO,IAAI,CAAC,eAAe,CAAwB,OAAO,EAAE,MAAM,EAAE,qCAAiB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACpI,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,eAAe,CAAC,MAAc,EAAE,OAAsB;QACpE,OAAO,IAAI,CAAC,eAAe,CAAmB,OAAO,EAAE,MAAM,EAAE,qCAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;IACrH,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,OAAsB;QAC7D,OAAO,IAAI,CAAC,eAAe,CAAsB,OAAO,EAAE,MAAM,EAAE,qCAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1G,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,OAAsB;QACrE,OAAO,IAAI,CAAC,eAAe,CAAoB,OAAO,EAAE,MAAM,EAAE,qCAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC;IACxH,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,OAAsB;QACjE,OAAO,IAAI,CAAC,eAAe,CAAgB,OAAO,EAAE,MAAM,EAAE,qCAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IAC5G,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,OAAsB;QACnE,OAAO,IAAI,CAAC,eAAe,CAAkB,OAAO,EAAE,MAAM,EAAE,qCAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;IAClH,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,aAAa,CAAC,MAAc,EAAE,OAAsB;QAClE,OAAO,IAAI,CAAC,eAAe,CAAkB,OAAO,EAAE,MAAM,EAAE,qCAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;IAClH,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,OAAsB;QAC/D,OAAO,IAAI,CAAC,eAAe,CAAwB,OAAO,EAAE,MAAM,EAAE,qCAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;IAChH,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,eAAe;QAC7B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAgB,gCAAY,CAAC,eAAe,CAAC,CAAC;QACxF,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CACnC;YACE,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,SAAS,EAAE,qBAAS,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YAC1E,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;SAC/E,CACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,iBAAiB,CAAC,SAAoB,EAAE,OAAsB;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC,YAAY,CAAgB,gCAAY,CAAC,eAAe,EAAE;YACtF,UAAU,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE;YAC1C,KAAK,EAAE,CAAC;SACV,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;QAC9C,qBAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,8BAA8B,SAAS,CAAC,IAAI,OAAO,aAAa,IAAI,EAAE;YACrG,UAAU,EAAE,SAAS,CAAC,IAAI;YAC1B,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS;YACZ,OAAO,SAAS,CAAC;QAEnB,MAAM,cAAc,GAAuB,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,KAAK,EAAE,GAAc,EAAE,EAAE;YACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACxD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE1B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC1E,MAAM,SAAS,CAAC,qBAAS,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,IAAI,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAC7F,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,UAAkB,EAAE,QAAwB,EAAE,EAAE;YACtE,IAAI,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YAC7E,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,UAAU,GAAG,MAAM,SAAS,CAAC,qBAAS,CAAC,WAAW,CAAC,GAAG,UAAU,QAAQ,CAAC,CAAC,CAAC;YAC7E,CAAC;YAED,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;YAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,KAAU,EAAE,EAAE;YAC3C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;QAE3B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnF,MAAM,oBAAoB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAExG,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,eAAe,CAA+B,OAAsB,EAAE,UAAkB,EAAE,KAAa,EAAE,UAAkB;QACvI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAgB,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAE/F,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACzC,qBAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,oBAAoB,UAAU,cAAc,UAAU,OAAO,aAAa,IAAI,EAAE;YAC/G,UAAU;YACV,SAAS,EAAE,QAAQ,CAAC,MAAM;YAC1B,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YACvB,OAAO,EAAE,CAAC;QAEZ,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAsB,EAAE,EAAE;YACpD,OAAO,QAAQ,KAAK,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnF,OAAO,MAAM,2BAAY,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAgB,IAAI,EAAE,CAAA;IACjG,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,SAAoB,EAAE,OAAsB;QACtE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAY,qCAAiB,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrI,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,SAAS,KAAK,SAAS;YACzB,OAAO,SAAS,CAAC;QAEnB,mFAAmF;QACnF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAgB,CAAC;QAC3D,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAChB,MAAc,CAAC,KAAK,GAAI,MAAM,CAAC,KAAa,CAAC,GAAG,CAAC,CAAC,OAAsB,EAAE,EAAE,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1G,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnF,OAAO,2BAAY,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,4BAA4B,CAAC,SAAoB,EAAE,OAAsB;QACrF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAuB,CAAC;QAC1F,IAAI,CAAC,MAAM;YACT,OAAO,SAAS,CAAC;QAEnB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACxC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YAC9C,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACvD,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACjD,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACnD,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACtC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YAC9C,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YAC5C,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YAC1C,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YAC3C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;SACzC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE;YACtB,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC7E,YAAY,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBAClC,IAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;oBACpB,iHAAiH;oBACjH,yEAAyE;oBACzE,MAAM,IAAI,KAAK,CAAC,iDAAiD,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrF,CAAC;gBACD,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAtZD,gDAsZC;AAED,SAAS,oBAAoB,CAAC,aAAqB;IACjD,OAAO,EAAE,SAAS,EAAE,qBAAS,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,UAAkB,EAAE,QAAkC,EAAE,eAAqC,EAAE,WAAiC;IAClK,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,EAAE,WAAgD,EAAE,EAAE;QAClF,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;YACxC,OAAO;QAET,KAAK,IAAI,KAAK,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC;YACrD,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;YACzC,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAElG,MAAM,UAAU,GAAG,MAAM,2BAAY,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC9F,MAAM,eAAe,CAAC,WAAW,CAAC,MAAM,EAAE;gBACxC,GAAG,UAAU;gBACb,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,cAAc,EAAE,UAAU,CAAC,cAAc;gBACzC,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,MAAM,2BAAY,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAClF,MAAM,eAAe,CAAC,UAAU,EAAE;YAChC,GAAG,UAAU;YACb,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,cAAc,EAAE,UAAU,CAAC,cAAc;YACzC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACpB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1E,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;QAEH,MAAM,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE5C,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,MAAM,2BAAY,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACvF,MAAM,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE;gBACrC,GAAG,SAAS;gBACZ,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,cAAc,EAAE,SAAS,CAAC,cAAc;aACzC,CAAC,CAAC;YACH,MAAM,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { SchemaContext } from \"../Context\";\r\nimport { ConstantProps, CustomAttributeClassProps, EntityClassProps, EnumerationProps, InvertedUnitProps, KindOfQuantityProps, MixinProps,\r\n PhenomenonProps, PropertyCategoryProps, RelationshipClassProps, SchemaItemFormatProps, SchemaItemProps, SchemaItemUnitProps, SchemaProps,\r\n StructClassProps, UnitSystemProps } from \"../Deserialization/JsonProps\";\r\nimport { SchemaItemType, SchemaMatchType } from \"../ECObjects\";\r\nimport { SchemaInfo, WithSchemaKey } from \"../Interfaces\";\r\nimport { SchemaKey } from \"../SchemaKey\";\r\nimport { FullSchemaQueries } from \"./FullSchemaQueries\";\r\nimport { IncrementalSchemaLocater, SchemaLocaterOptions } from \"./IncrementalSchemaLocater\";\r\nimport { SchemaItemQueries } from \"./SchemaItemQueries\";\r\nimport { SchemaParser } from \"./SchemaParser\";\r\nimport { ecsqlQueries } from \"./SchemaStubQueries\";\r\n\r\ninterface SchemaItemInfo {\r\n readonly name: string;\r\n readonly schemaItemType: SchemaItemType;\r\n}\r\n\r\ninterface SchemaInfoRow {\r\n readonly name: string;\r\n readonly version: string;\r\n readonly alias: string;\r\n readonly references: string;\r\n}\r\n\r\ninterface SchemaStubRow {\r\n readonly name: string;\r\n readonly version: string;\r\n readonly alias: string;\r\n readonly displayLabel: string;\r\n readonly description: string;\r\n readonly references: string;\r\n readonly items: string;\r\n}\r\n\r\ninterface BaseClassStubRow {\r\n readonly schema: string;\r\n readonly name: string;\r\n readonly schemaItemType: string;\r\n readonly modifier: number;\r\n}\r\n\r\ninterface SchemaItemStubRow {\r\n readonly name: string;\r\n readonly schemaItemType: string;\r\n readonly modifier?: number;\r\n readonly baseClasses?: Array<BaseClassStubRow>;\r\n readonly mixins?: Array<{\r\n readonly schema: string,\r\n readonly name: string;\r\n readonly schemaItemType: string;\r\n readonly modifier: number;\r\n readonly baseClasses?: Array<BaseClassStubRow>\r\n }>;\r\n}\r\n\r\ninterface SchemaRow {\r\n schema: string\r\n}\r\n\r\ninterface SchemaItemRow {\r\n item: string | SchemaItemProps;\r\n}\r\n\r\ntype AddSchemaItemHandler = <T extends SchemaItemInfo>(schemaName: string, itemStub: T) => Promise<void>;\r\n\r\ntype MutableSchemaProps = {\r\n -readonly [K in keyof SchemaProps]: SchemaProps[K];\r\n};\r\n\r\ninterface QueryParameters {\r\n [parameterName: string]: string | number;\r\n}\r\n\r\nconst LOGGER_CATEGORY = \"IncrementalSchemaLoading.Performance\";\r\n\r\n/**\r\n * Query options used by the ECSqlSchemaLocater.\r\n * @internal\r\n */\r\nexport interface ECSqlQueryOptions {\r\n parameters?: QueryParameters;\r\n limit?: number;\r\n}\r\n\r\n/**\r\n * Defines the [[ECSqlSchemaLocater]] options which determine how each\r\n * schema is to be loaded. All options are optional.\r\n * @internal\r\n */\r\nexport interface ECSqlSchemaLocaterOptions extends SchemaLocaterOptions {\r\n /** Query for Schemas using multiple queries. Defaults to false. */\r\n readonly useMultipleQueries?: boolean;\r\n}\r\n\r\n/**\r\n * An abstract [[IncrementalSchemaLocater]] implementation for loading\r\n * EC [Schema] instances from an iModelDb using ECSql queries.\r\n * @internal\r\n */\r\nexport abstract class ECSqlSchemaLocater extends IncrementalSchemaLocater {\r\n /**\r\n * Gets the [[ECSqlSchemaLocaterOptions]] used by this locater.\r\n */\r\n protected override get options(): ECSqlSchemaLocaterOptions {\r\n return super.options as ECSqlSchemaLocaterOptions;\r\n }\r\n\r\n /**\r\n * Initializes a new ECSqlSchemaLocater instance.\r\n * @param options The options used by this Schema locater.\r\n */\r\n constructor(options?: ECSqlSchemaLocaterOptions) {\r\n super(options);\r\n }\r\n\r\n /**\r\n * Executes the given ECSql query and returns the resulting rows.\r\n * @param query The ECSql query to execute.\r\n * @param options Optional arguments to control the query result.\r\n * @returns A promise that resolves to the resulting rows.\r\n */\r\n protected abstract executeQuery<TRow>(query: string, options?: ECSqlQueryOptions): Promise<ReadonlyArray<TRow>>;\r\n\r\n /**\r\n * Gets the [[SchemaProps]] for the given schema key.\r\n * @param schemaKey The schema key of the schema to be resolved.\r\n */\r\n protected abstract getSchemaProps(schemaKey: SchemaKey): Promise<SchemaProps | undefined>\r\n\r\n /**\r\n * Gets the [[SchemaProps]] for the given schema key. This is the full schema json with all elements that are defined\r\n * in the schema. The schema locater calls this after the stub has been loaded to fully load the schema in the background.\r\n * @param schemaKey The [[SchemaKey]] of the schema to be resolved.\r\n * @param context The [[SchemaContext]] to use for resolving references.\r\n * @internal\r\n */\r\n protected async getSchemaJson(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n // If the meta schema is an earlier version than 4.0.3, we can't use the ECSql query interface to get the schema\r\n // information required to load the schema entirely. In this case, we fallback to use the ECSchema RPC interface\r\n // to fetch the whole schema json.\r\n if (!await this.supportPartialSchemaLoading(context))\r\n return this.getSchemaProps(schemaKey);\r\n\r\n const queryStart = Date.now();\r\n const schemaProps = this.options.useMultipleQueries\r\n ? await this.getFullSchemaMultipleQueries(schemaKey, context)\r\n : await this.getFullSchema(schemaKey, context);\r\n\r\n const queryDuration = Date.now() - queryStart;\r\n Logger.logTrace(LOGGER_CATEGORY, `Recieved SchemaProps for ${schemaKey.name} in ${queryDuration}ms`, {\r\n schemaName: schemaKey.name,\r\n queryMode: this.options.useMultipleQueries ? \"parallel\" : \"single\",\r\n duration: queryDuration,\r\n });\r\n\r\n return schemaProps;\r\n };\r\n\r\n /**\r\n * Gets the [[SchemaProps]] without schemaItems for the given schema name.\r\n * @param schemaName The name of the Schema.\r\n * @param context The [[SchemaContext]] to use for resolving references.\r\n * @returns\r\n * @internal\r\n */\r\n private async getSchemaNoItems(schemaName: string, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n const schemaRows = await this.executeQuery<SchemaRow>(FullSchemaQueries.schemaNoItemsQuery, { parameters: { schemaName } });\r\n const schemaRow = schemaRows[0];\r\n if (schemaRow === undefined)\r\n return undefined;\r\n\r\n const schema = JSON.parse(schemaRow.schema) as SchemaProps;\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n return SchemaParser.parse(schema, schemaInfos);\r\n }\r\n\r\n /**\r\n * Checks if the [[SchemaContext]] has the right Meta Schema version to support the incremental schema loading.\r\n * @param context The schema context to lookup the meta schema.\r\n * @returns true if the context has a supported meta schema version, false otherwise.\r\n */\r\n protected async supportPartialSchemaLoading(context: SchemaContext): Promise<boolean> {\r\n const metaSchemaKey = new SchemaKey(\"ECDbMeta\", 4, 0, 3);\r\n const metaSchemaInfo = await context.getSchemaInfo(metaSchemaKey, SchemaMatchType.LatestWriteCompatible);\r\n return metaSchemaInfo !== undefined;\r\n };\r\n\r\n /**\r\n * Gets all the Schema's Entity classes as [[EntityClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The [[SchemaContext]] to which the schema belongs.\r\n * @returns A promise that resolves to a EntityClassProps array. Maybe empty of no entities are found.\r\n * @internal\r\n */\r\n protected async getEntities(schema: string, context: SchemaContext, queryOverride?: string): Promise<EntityClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.entityQuery;\r\n return this.querySchemaItem<EntityClassProps>(context, schema, query, \"EntityClass\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Mixin classes as [[MixinProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a MixinProps array. Maybe empty of no entities are found.\r\n * @internal\r\n */\r\n protected async getMixins(schema: string, context: SchemaContext, queryOverride?: string): Promise<MixinProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.mixinQuery;\r\n return this.querySchemaItem<MixinProps>(context, schema, query, \"Mixin\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Relationship classes as [[RelationshipClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a RelationshipClassProps array. Maybe empty if no items are found.\r\n * @internal\r\n */\r\n protected async getRelationships(schema: string, context: SchemaContext, queryOverride?: string): Promise<RelationshipClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.relationshipClassQuery;\r\n return this.querySchemaItem<RelationshipClassProps>(context, schema, query, \"RelationshipClass\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's CustomAttributeClass items as [[CustomAttributeClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a CustomAttributeClassProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getCustomAttributeClasses(schema: string, context: SchemaContext, queryOverride?: string): Promise<CustomAttributeClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.customAttributeQuery;\r\n return this.querySchemaItem<CustomAttributeClassProps>(context, schema, query, \"CustomAttributeClass\");\r\n }\r\n\r\n\r\n /**\r\n * Gets all the Schema's StructClass items as [[StructClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a StructClassProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getStructs(schema: string, context: SchemaContext, queryOverride?: string): Promise<StructClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.structQuery;\r\n return this.querySchemaItem<StructClassProps>(context, schema, query, \"StructClass\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's KindOfQuantity items as [[KindOfQuantityProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a KindOfQuantityProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getKindOfQuantities(schema: string, context: SchemaContext): Promise<KindOfQuantityProps[]> {\r\n return this.querySchemaItem<KindOfQuantityProps>(context, schema, SchemaItemQueries.kindOfQuantity(true), \"KindOfQuantity\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's PropertyCategory items as [[PropertyCategoryProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a PropertyCategoryProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getPropertyCategories(schema: string, context: SchemaContext): Promise<PropertyCategoryProps[]> {\r\n return this.querySchemaItem<PropertyCategoryProps>(context, schema, SchemaItemQueries.propertyCategory(true), \"PropertyCategory\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Enumeration items as [[EnumerationProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a EnumerationProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getEnumerations(schema: string, context: SchemaContext): Promise<EnumerationProps[]> {\r\n return this.querySchemaItem<EnumerationProps>(context, schema, SchemaItemQueries.enumeration(true), \"Enumeration\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Unit items as [[SchemaItemUnitProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a SchemaItemUnitProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getUnits(schema: string, context: SchemaContext): Promise<SchemaItemUnitProps[]> {\r\n return this.querySchemaItem<SchemaItemUnitProps>(context, schema, SchemaItemQueries.unit(true), \"Unit\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's InvertedUnit items as [[InvertedUnitProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a InvertedUnitProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getInvertedUnits(schema: string, context: SchemaContext): Promise<InvertedUnitProps[]> {\r\n return this.querySchemaItem<InvertedUnitProps>(context, schema, SchemaItemQueries.invertedUnit(true), \"InvertedUnit\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Constant items as [[ConstantProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a ConstantProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getConstants(schema: string, context: SchemaContext): Promise<ConstantProps[]> {\r\n return this.querySchemaItem<ConstantProps>(context, schema, SchemaItemQueries.constant(true), \"Constant\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's UnitSystem items as [[UnitSystemProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a UnitSystemProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getUnitSystems(schema: string, context: SchemaContext): Promise<UnitSystemProps[]> {\r\n return this.querySchemaItem<UnitSystemProps>(context, schema, SchemaItemQueries.unitSystem(true), \"UnitSystem\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Phenomenon items as [[PhenomenonProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a PhenomenonProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getPhenomenon(schema: string, context: SchemaContext): Promise<PhenomenonProps[]> {\r\n return this.querySchemaItem<PhenomenonProps>(context, schema, SchemaItemQueries.phenomenon(true), \"Phenomenon\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Format items as [[SchemaItemFormatProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a SchemaItemFormatProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getFormats(schema: string, context: SchemaContext): Promise<SchemaItemFormatProps[]> {\r\n return this.querySchemaItem<SchemaItemFormatProps>(context, schema, SchemaItemQueries.format(true), \"Format\");\r\n }\r\n\r\n /**\r\n * Gets [[SchemaInfo]] objects for all schemas including their direct schema references.\r\n * @internal\r\n */\r\n protected async loadSchemaInfos(): Promise<ReadonlyArray<SchemaInfo>> {\r\n const schemaRows = await this.executeQuery<SchemaInfoRow>(ecsqlQueries.schemaInfoQuery);\r\n return schemaRows.map((schemaRow) => (\r\n {\r\n alias: schemaRow.alias,\r\n schemaKey: SchemaKey.parseString(`${schemaRow.name}.${schemaRow.version}`),\r\n references: Array.from(JSON.parse(schemaRow.references), parseSchemaReference),\r\n }\r\n ));\r\n }\r\n\r\n /**\r\n * Gets the [[SchemaProps]] to create the basic schema skeleton. Depending on which options are set, the schema items or class hierarchy\r\n * can be included in the initial fetch.\r\n * @param schemaKey The [[SchemaKey]] of the schema to be resolved.\r\n * @returns A promise that resolves to the schema partials, which is an array of [[SchemaProps]].\r\n * @internal\r\n */\r\n protected async getSchemaPartials(schemaKey: SchemaKey, context: SchemaContext): Promise<ReadonlyArray<SchemaProps> | undefined> {\r\n const queryStart = Date.now();\r\n const [schemaRow] = await this.executeQuery<SchemaStubRow>(ecsqlQueries.schemaStubQuery, {\r\n parameters: { schemaName: schemaKey.name },\r\n limit: 1\r\n });\r\n\r\n const queryDuration = Date.now() - queryStart;\r\n Logger.logTrace(LOGGER_CATEGORY, `Recieved PartialSchema for ${schemaKey.name} in ${queryDuration}ms`, {\r\n schemaName: schemaKey.name,\r\n duration: queryDuration,\r\n });\r\n\r\n if (!schemaRow)\r\n return undefined;\r\n\r\n const schemaPartials: Array<SchemaProps> = [];\r\n const addSchema = async (key: SchemaKey) => {\r\n const stub = await this.createSchemaProps(key, context);\r\n schemaPartials.push(stub);\r\n\r\n if (stub.references) {\r\n for (const referenceProps of stub.references) {\r\n if (!schemaPartials.some((schema) => schema.name === referenceProps.name)) {\r\n await addSchema(SchemaKey.parseString(`${referenceProps.name}.${referenceProps.version}`));\r\n }\r\n }\r\n }\r\n\r\n return stub;\r\n };\r\n\r\n const addItems = async (schemaName: string, itemInfo: SchemaItemInfo) => {\r\n let schemaStub = schemaPartials.find((schema) => schema.name === schemaName);\r\n if (!schemaStub) {\r\n schemaStub = await addSchema(SchemaKey.parseString(`${schemaName}.0.0.0`));\r\n }\r\n\r\n let items = schemaStub.items;\r\n if (!items) {\r\n Object.assign(schemaStub, items = { items: {} });\r\n }\r\n\r\n const existingItem = items[itemInfo.name] || {};\r\n Object.assign(items, { [itemInfo.name]: Object.assign(existingItem, itemInfo) });\r\n };\r\n\r\n const reviver = (_key: string, value: any) => {\r\n if (value === null) {\r\n return undefined;\r\n }\r\n return value;\r\n };\r\n\r\n await addSchema(schemaKey);\r\n\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n await parseSchemaItemStubs(schemaKey.name, JSON.parse(schemaRow.items, reviver), addItems, schemaInfos);\r\n\r\n return schemaPartials;\r\n }\r\n\r\n private async querySchemaItem<TRow extends SchemaItemProps>(context: SchemaContext, schemaName: string, query: string, schemaType: string): Promise<Array<TRow>> {\r\n const start = Date.now();\r\n const itemRows = await this.executeQuery<SchemaItemRow>(query, { parameters: { schemaName } });\r\n\r\n const queryDuration = Date.now() - start;\r\n Logger.logTrace(LOGGER_CATEGORY, `Recieved rows of ${schemaType} items for ${schemaName} in ${queryDuration}ms`, {\r\n schemaName,\r\n itemCount: itemRows.length,\r\n itemType: schemaType,\r\n duration: queryDuration,\r\n });\r\n\r\n if (itemRows.length === 0)\r\n return [];\r\n\r\n const items = itemRows.map((itemRow: SchemaItemRow) => {\r\n return \"string\" === typeof itemRow.item ? JSON.parse(itemRow.item) : itemRow.item;\r\n });\r\n\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n return await SchemaParser.parseSchemaItems(items, schemaName, schemaInfos) as Array<TRow> ?? []\r\n }\r\n\r\n private async getFullSchema(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n const schemaRows = await this.executeQuery<SchemaRow>(FullSchemaQueries.schemaQuery, { parameters: { schemaName: schemaKey.name } });\r\n const schemaRow = schemaRows[0];\r\n if (schemaRow === undefined)\r\n return undefined;\r\n\r\n // Map SchemaItemRow array, [{item: SchemaItemProps}], to array of SchemaItemProps.\r\n const schema = JSON.parse(schemaRow.schema) as SchemaProps;\r\n if (schema.items) {\r\n (schema as any).items = (schema.items as any).map((itemRow: SchemaItemRow) => { return itemRow.item; });\r\n }\r\n\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n return SchemaParser.parse(schema, schemaInfos);\r\n }\r\n\r\n private async getFullSchemaMultipleQueries(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n const schema = await this.getSchemaNoItems(schemaKey.name, context) as MutableSchemaProps;\r\n if (!schema)\r\n return undefined;\r\n\r\n const items = schema.items || (schema.items = {});\r\n await Promise.all([\r\n this.getEntities(schemaKey.name, context),\r\n this.getMixins(schemaKey.name, context),\r\n this.getStructs(schemaKey.name, context),\r\n this.getRelationships(schemaKey.name, context),\r\n this.getCustomAttributeClasses(schemaKey.name, context),\r\n this.getKindOfQuantities(schemaKey.name, context),\r\n this.getPropertyCategories(schemaKey.name, context),\r\n this.getEnumerations(schemaKey.name, context),\r\n this.getUnits(schemaKey.name, context),\r\n this.getInvertedUnits(schemaKey.name, context),\r\n this.getUnitSystems(schemaKey.name, context),\r\n this.getConstants(schemaKey.name, context),\r\n this.getPhenomenon(schemaKey.name, context),\r\n this.getFormats(schemaKey.name, context)\r\n ]).then((itemResults) => {\r\n const flatItemList = itemResults.reduce((acc, result) => acc.concat(result));\r\n flatItemList.forEach((schemaItem) => {\r\n if(!schemaItem.name) {\r\n // This should never be happen, as we query the schema items by name from the database, but since the SchemaProps\r\n // have name optional, we need the check here to make the compiler happy.\r\n throw new Error(`SchemaItem with no name encountered in schema ${schemaKey.name}`);\r\n }\r\n items[schemaItem.name] = schemaItem;\r\n });\r\n });\r\n\r\n return schema;\r\n }\r\n}\r\n\r\nfunction parseSchemaReference(referenceName: string): WithSchemaKey {\r\n return { schemaKey: SchemaKey.parseString(referenceName) };\r\n}\r\n\r\nasync function parseSchemaItemStubs(schemaName: string, itemRows: Array<SchemaItemStubRow>, addItemsHandler: AddSchemaItemHandler, schemaInfos: Iterable<SchemaInfo>) {\r\n if (!itemRows || itemRows.length === 0) {\r\n return;\r\n }\r\n\r\n const parseBaseClasses = async (baseClasses: Array<BaseClassStubRow> | undefined) => {\r\n if (!baseClasses || baseClasses.length < 2)\r\n return;\r\n\r\n for (let index = baseClasses.length - 1; index >= 0;) {\r\n const currentItem = baseClasses[index--];\r\n const baseClassItem = baseClasses[index];\r\n const baseClassName = baseClassItem ? `${baseClassItem.schema}.${baseClassItem.name}` : undefined;\r\n\r\n const schemaItem = await SchemaParser.parseItem(currentItem, currentItem.schema, schemaInfos);\r\n await addItemsHandler(currentItem.schema, {\r\n ...schemaItem,\r\n name: schemaItem.name,\r\n schemaItemType: schemaItem.schemaItemType,\r\n baseClass: baseClassName,\r\n });\r\n }\r\n };\r\n\r\n for (const itemRow of itemRows) {\r\n const schemaItem = await SchemaParser.parseItem(itemRow, schemaName, schemaInfos);\r\n await addItemsHandler(schemaName, {\r\n ...schemaItem,\r\n name: schemaItem.name,\r\n schemaItemType: schemaItem.schemaItemType,\r\n mixins: itemRow.mixins\r\n ? itemRow.mixins.map(mixin => { return `${mixin.schema}.${mixin.name}`; })\r\n : undefined,\r\n });\r\n\r\n await parseBaseClasses(itemRow.baseClasses);\r\n\r\n for (const mixinRow of itemRow.mixins || []) {\r\n const mixinItem = await SchemaParser.parseItem(mixinRow, mixinRow.schema, schemaInfos);\r\n await addItemsHandler(mixinRow.schema, {\r\n ...mixinItem,\r\n name: mixinItem.name,\r\n schemaItemType: mixinItem.schemaItemType,\r\n });\r\n await parseBaseClasses(mixinRow.baseClasses);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ECSqlSchemaLocater.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/ECSqlSchemaLocater.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { SchemaContext } from \"../Context\";\r\nimport { ConstantProps, CustomAttributeClassProps, EntityClassProps, EnumerationProps, InvertedUnitProps, KindOfQuantityProps, MixinProps,\r\n PhenomenonProps, PropertyCategoryProps, RelationshipClassProps, SchemaItemFormatProps, SchemaItemProps, SchemaItemUnitProps, SchemaProps,\r\n StructClassProps, UnitSystemProps } from \"../Deserialization/JsonProps\";\r\nimport { SchemaItemType, SchemaMatchType } from \"../ECObjects\";\r\nimport { SchemaInfo, WithSchemaKey } from \"../Interfaces\";\r\nimport { SchemaKey } from \"../SchemaKey\";\r\nimport { FullSchemaQueries } from \"./FullSchemaQueries\";\r\nimport { IncrementalSchemaLocater, SchemaLocaterOptions } from \"./IncrementalSchemaLocater\";\r\nimport { SchemaItemQueries } from \"./SchemaItemQueries\";\r\nimport { SchemaParser } from \"./SchemaParser\";\r\nimport { ecsqlQueries } from \"./SchemaStubQueries\";\r\n\r\ninterface SchemaItemInfo {\r\n readonly name: string;\r\n readonly schemaItemType: SchemaItemType;\r\n}\r\n\r\ninterface SchemaInfoRow {\r\n readonly name: string;\r\n readonly version: string;\r\n readonly alias: string;\r\n readonly label: string;\r\n readonly description: string; \r\n readonly references: string;\r\n}\r\n\r\ninterface SchemaStubRow {\r\n readonly item: string;\r\n}\r\n\r\ninterface BaseClassStubRow {\r\n readonly schema: string;\r\n readonly name: string;\r\n readonly schemaItemType: string;\r\n readonly modifier: number;\r\n}\r\n\r\ninterface SchemaItemStubRow {\r\n readonly name: string;\r\n readonly schemaItemType: string;\r\n readonly modifier?: number;\r\n readonly baseClasses?: Array<BaseClassStubRow>;\r\n readonly mixins?: Array<{\r\n readonly schema: string,\r\n readonly name: string;\r\n readonly schemaItemType: string;\r\n readonly modifier: number;\r\n readonly baseClasses?: Array<BaseClassStubRow>\r\n }>;\r\n}\r\n\r\ninterface SchemaRow {\r\n schema: string\r\n}\r\n\r\ninterface SchemaItemRow {\r\n item: string | SchemaItemProps;\r\n}\r\n\r\ntype AddSchemaItemHandler = <T extends SchemaItemInfo>(schemaName: string, itemStub: T) => Promise<void>;\r\n\r\ntype MutableSchemaProps = {\r\n -readonly [K in keyof SchemaProps]: SchemaProps[K];\r\n};\r\n\r\ninterface QueryParameters {\r\n [parameterName: string]: string | number;\r\n}\r\n\r\nconst LOGGER_CATEGORY = \"IncrementalSchemaLoading.Performance\";\r\n\r\n/**\r\n * Query options used by the ECSqlSchemaLocater.\r\n * @internal\r\n */\r\nexport interface ECSqlQueryOptions {\r\n parameters?: QueryParameters;\r\n limit?: number;\r\n}\r\n\r\n/**\r\n * Defines the [[ECSqlSchemaLocater]] options which determine how each\r\n * schema is to be loaded. All options are optional.\r\n * @internal\r\n */\r\nexport interface ECSqlSchemaLocaterOptions extends SchemaLocaterOptions {\r\n /** Query for Schemas using multiple queries. Defaults to false. */\r\n readonly useMultipleQueries?: boolean;\r\n}\r\n\r\n/**\r\n * An abstract [[IncrementalSchemaLocater]] implementation for loading\r\n * EC [Schema] instances from an iModelDb using ECSql queries.\r\n * @internal\r\n */\r\nexport abstract class ECSqlSchemaLocater extends IncrementalSchemaLocater {\r\n /**\r\n * Gets the [[ECSqlSchemaLocaterOptions]] used by this locater.\r\n */\r\n protected override get options(): ECSqlSchemaLocaterOptions {\r\n return super.options as ECSqlSchemaLocaterOptions;\r\n }\r\n\r\n /**\r\n * Initializes a new ECSqlSchemaLocater instance.\r\n * @param options The options used by this Schema locater.\r\n */\r\n constructor(options?: ECSqlSchemaLocaterOptions) {\r\n super(options);\r\n }\r\n\r\n /**\r\n * Executes the given ECSql query and returns the resulting rows.\r\n * @param query The ECSql query to execute.\r\n * @param options Optional arguments to control the query result.\r\n * @returns A promise that resolves to the resulting rows.\r\n */\r\n protected abstract executeQuery<TRow>(query: string, options?: ECSqlQueryOptions): Promise<ReadonlyArray<TRow>>;\r\n\r\n /**\r\n * Gets the [[SchemaProps]] for the given schema key.\r\n * @param schemaKey The schema key of the schema to be resolved.\r\n */\r\n protected abstract getSchemaProps(schemaKey: SchemaKey): Promise<SchemaProps | undefined>\r\n\r\n /**\r\n * Gets the [[SchemaProps]] for the given schema key. This is the full schema json with all elements that are defined\r\n * in the schema. The schema locater calls this after the stub has been loaded to fully load the schema in the background.\r\n * @param schemaKey The [[SchemaKey]] of the schema to be resolved.\r\n * @param context The [[SchemaContext]] to use for resolving references.\r\n * @internal\r\n */\r\n protected async getSchemaJson(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n // If the meta schema is an earlier version than 4.0.3, we can't use the ECSql query interface to get the schema\r\n // information required to load the schema entirely. In this case, we fallback to use the ECSchema RPC interface\r\n // to fetch the whole schema json.\r\n if (!await this.supportPartialSchemaLoading(context))\r\n return this.getSchemaProps(schemaKey);\r\n\r\n const queryStart = Date.now();\r\n const schemaProps = this.options.useMultipleQueries\r\n ? await this.getFullSchemaMultipleQueries(schemaKey, context)\r\n : await this.getFullSchema(schemaKey, context);\r\n\r\n const queryDuration = Date.now() - queryStart;\r\n Logger.logTrace(LOGGER_CATEGORY, `Recieved SchemaProps for ${schemaKey.name} in ${queryDuration}ms`, {\r\n schemaName: schemaKey.name,\r\n queryMode: this.options.useMultipleQueries ? \"parallel\" : \"single\",\r\n duration: queryDuration,\r\n });\r\n\r\n return schemaProps;\r\n };\r\n\r\n /**\r\n * Gets the [[SchemaProps]] without schemaItems for the given schema name.\r\n * @param schemaName The name of the Schema.\r\n * @param context The [[SchemaContext]] to use for resolving references.\r\n * @returns\r\n * @internal\r\n */\r\n private async getSchemaNoItems(schemaName: string, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n const schemaRows = await this.executeQuery<SchemaRow>(FullSchemaQueries.schemaNoItemsQuery, { parameters: { schemaName } });\r\n const schemaRow = schemaRows[0];\r\n if (schemaRow === undefined)\r\n return undefined;\r\n\r\n const schema = JSON.parse(schemaRow.schema) as SchemaProps;\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n return SchemaParser.parse(schema, schemaInfos);\r\n }\r\n\r\n /**\r\n * Checks if the [[SchemaContext]] has the right Meta Schema version to support the incremental schema loading.\r\n * @param context The schema context to lookup the meta schema.\r\n * @returns true if the context has a supported meta schema version, false otherwise.\r\n */\r\n protected async supportPartialSchemaLoading(context: SchemaContext): Promise<boolean> {\r\n const metaSchemaKey = new SchemaKey(\"ECDbMeta\", 4, 0, 3);\r\n const metaSchemaInfo = await context.getSchemaInfo(metaSchemaKey, SchemaMatchType.LatestWriteCompatible);\r\n return metaSchemaInfo !== undefined;\r\n };\r\n\r\n /**\r\n * Gets all the Schema's Entity classes as [[EntityClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The [[SchemaContext]] to which the schema belongs.\r\n * @returns A promise that resolves to a EntityClassProps array. Maybe empty of no entities are found.\r\n * @internal\r\n */\r\n protected async getEntities(schema: string, context: SchemaContext, queryOverride?: string): Promise<EntityClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.entityQuery;\r\n return this.querySchemaItem<EntityClassProps>(context, schema, query, \"EntityClass\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Mixin classes as [[MixinProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a MixinProps array. Maybe empty of no entities are found.\r\n * @internal\r\n */\r\n protected async getMixins(schema: string, context: SchemaContext, queryOverride?: string): Promise<MixinProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.mixinQuery;\r\n return this.querySchemaItem<MixinProps>(context, schema, query, \"Mixin\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Relationship classes as [[RelationshipClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a RelationshipClassProps array. Maybe empty if no items are found.\r\n * @internal\r\n */\r\n protected async getRelationships(schema: string, context: SchemaContext, queryOverride?: string): Promise<RelationshipClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.relationshipClassQuery;\r\n return this.querySchemaItem<RelationshipClassProps>(context, schema, query, \"RelationshipClass\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's CustomAttributeClass items as [[CustomAttributeClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a CustomAttributeClassProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getCustomAttributeClasses(schema: string, context: SchemaContext, queryOverride?: string): Promise<CustomAttributeClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.customAttributeQuery;\r\n return this.querySchemaItem<CustomAttributeClassProps>(context, schema, query, \"CustomAttributeClass\");\r\n }\r\n\r\n\r\n /**\r\n * Gets all the Schema's StructClass items as [[StructClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a StructClassProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getStructs(schema: string, context: SchemaContext, queryOverride?: string): Promise<StructClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.structQuery;\r\n return this.querySchemaItem<StructClassProps>(context, schema, query, \"StructClass\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's KindOfQuantity items as [[KindOfQuantityProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a KindOfQuantityProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getKindOfQuantities(schema: string, context: SchemaContext): Promise<KindOfQuantityProps[]> {\r\n return this.querySchemaItem<KindOfQuantityProps>(context, schema, SchemaItemQueries.kindOfQuantity(true), \"KindOfQuantity\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's PropertyCategory items as [[PropertyCategoryProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a PropertyCategoryProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getPropertyCategories(schema: string, context: SchemaContext): Promise<PropertyCategoryProps[]> {\r\n return this.querySchemaItem<PropertyCategoryProps>(context, schema, SchemaItemQueries.propertyCategory(true), \"PropertyCategory\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Enumeration items as [[EnumerationProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a EnumerationProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getEnumerations(schema: string, context: SchemaContext): Promise<EnumerationProps[]> {\r\n return this.querySchemaItem<EnumerationProps>(context, schema, SchemaItemQueries.enumeration(true), \"Enumeration\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Unit items as [[SchemaItemUnitProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a SchemaItemUnitProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getUnits(schema: string, context: SchemaContext): Promise<SchemaItemUnitProps[]> {\r\n return this.querySchemaItem<SchemaItemUnitProps>(context, schema, SchemaItemQueries.unit(true), \"Unit\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's InvertedUnit items as [[InvertedUnitProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a InvertedUnitProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getInvertedUnits(schema: string, context: SchemaContext): Promise<InvertedUnitProps[]> {\r\n return this.querySchemaItem<InvertedUnitProps>(context, schema, SchemaItemQueries.invertedUnit(true), \"InvertedUnit\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Constant items as [[ConstantProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a ConstantProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getConstants(schema: string, context: SchemaContext): Promise<ConstantProps[]> {\r\n return this.querySchemaItem<ConstantProps>(context, schema, SchemaItemQueries.constant(true), \"Constant\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's UnitSystem items as [[UnitSystemProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a UnitSystemProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getUnitSystems(schema: string, context: SchemaContext): Promise<UnitSystemProps[]> {\r\n return this.querySchemaItem<UnitSystemProps>(context, schema, SchemaItemQueries.unitSystem(true), \"UnitSystem\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Phenomenon items as [[PhenomenonProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a PhenomenonProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getPhenomenon(schema: string, context: SchemaContext): Promise<PhenomenonProps[]> {\r\n return this.querySchemaItem<PhenomenonProps>(context, schema, SchemaItemQueries.phenomenon(true), \"Phenomenon\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Format items as [[SchemaItemFormatProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a SchemaItemFormatProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getFormats(schema: string, context: SchemaContext): Promise<SchemaItemFormatProps[]> {\r\n return this.querySchemaItem<SchemaItemFormatProps>(context, schema, SchemaItemQueries.format(true), \"Format\");\r\n }\r\n\r\n /**\r\n * Gets [[SchemaInfo]] objects for all schemas including their direct schema references.\r\n * @internal\r\n */\r\n protected async loadSchemaInfos(): Promise<ReadonlyArray<SchemaInfo>> {\r\n const schemaRows = await this.executeQuery<SchemaInfoRow>(ecsqlQueries.schemaInfoQuery);\r\n return schemaRows.map((schemaRow) => (\r\n {\r\n alias: schemaRow.alias,\r\n description: schemaRow.description,\r\n label: schemaRow.label,\r\n schemaKey: SchemaKey.parseString(`${schemaRow.name}.${schemaRow.version}`),\r\n references: Array.from(JSON.parse(schemaRow.references), parseSchemaReference),\r\n }\r\n ));\r\n }\r\n\r\n /**\r\n * Gets the [[SchemaProps]] to create the basic schema skeleton. Depending on which options are set, the schema items or class hierarchy\r\n * can be included in the initial fetch.\r\n * @param schemaKey The [[SchemaKey]] of the schema to be resolved.\r\n * @returns A promise that resolves to the schema partials, which is an array of [[SchemaProps]].\r\n * @internal\r\n */\r\n protected async getSchemaPartials(schemaKey: SchemaKey, context: SchemaContext): Promise<ReadonlyArray<SchemaProps> | undefined> {\r\n const queryStart = Date.now();\r\n const itemRows = await this.executeQuery<SchemaStubRow>(ecsqlQueries.schemaStubQuery, {\r\n parameters: { schemaName: schemaKey.name }\r\n });\r\n\r\n const queryDuration = Date.now() - queryStart;\r\n Logger.logTrace(LOGGER_CATEGORY, `Recieved PartialSchema for ${schemaKey.name} in ${queryDuration}ms`, {\r\n schemaName: schemaKey.name,\r\n itemCount: itemRows.length,\r\n duration: queryDuration,\r\n });\r\n\r\n if (itemRows.length === 0)\r\n return undefined;\r\n\r\n const schemaPartials: Array<SchemaProps> = [];\r\n const addSchema = async (key: SchemaKey) => {\r\n const stub = await this.createSchemaProps(key, context);\r\n schemaPartials.push(stub);\r\n\r\n if (stub.references) {\r\n for (const referenceProps of stub.references) {\r\n if (!schemaPartials.some((schema) => schema.name === referenceProps.name)) {\r\n await addSchema(SchemaKey.parseString(`${referenceProps.name}.${referenceProps.version}`));\r\n }\r\n }\r\n }\r\n\r\n return stub;\r\n };\r\n\r\n const addItems = async (schemaName: string, itemInfo: SchemaItemInfo) => {\r\n let schemaStub = schemaPartials.find((schema) => schema.name === schemaName);\r\n if (!schemaStub) {\r\n schemaStub = await addSchema(SchemaKey.parseString(`${schemaName}.0.0.0`));\r\n }\r\n\r\n let items = schemaStub.items;\r\n if (!items) {\r\n Object.assign(schemaStub, items = { items: {} });\r\n }\r\n\r\n const existingItem = items[itemInfo.name] || {};\r\n Object.assign(items, { [itemInfo.name]: Object.assign(existingItem, itemInfo) });\r\n };\r\n\r\n const reviver = (_key: string, value: any) => {\r\n return value === null ? undefined : value;\r\n };\r\n\r\n await addSchema(schemaKey);\r\n\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n const stubItems = itemRows.map((itemRow) => {\r\n return JSON.parse(itemRow.item, reviver) as SchemaItemStubRow;\r\n });\r\n await parseSchemaItemStubs(schemaKey.name, stubItems, addItems, schemaInfos);\r\n\r\n return schemaPartials;\r\n }\r\n\r\n private async querySchemaItem<TRow extends SchemaItemProps>(context: SchemaContext, schemaName: string, query: string, schemaType: string): Promise<Array<TRow>> {\r\n const start = Date.now();\r\n const itemRows = await this.executeQuery<SchemaItemRow>(query, { parameters: { schemaName } });\r\n\r\n const queryDuration = Date.now() - start;\r\n Logger.logTrace(LOGGER_CATEGORY, `Recieved rows of ${schemaType} items for ${schemaName} in ${queryDuration}ms`, {\r\n schemaName,\r\n itemCount: itemRows.length,\r\n itemType: schemaType,\r\n duration: queryDuration,\r\n });\r\n\r\n if (itemRows.length === 0)\r\n return [];\r\n\r\n const items = itemRows.map((itemRow: SchemaItemRow) => {\r\n return \"string\" === typeof itemRow.item ? JSON.parse(itemRow.item) : itemRow.item;\r\n });\r\n\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n return await SchemaParser.parseSchemaItems(items, schemaName, schemaInfos) as Array<TRow> ?? []\r\n }\r\n\r\n private async getFullSchema(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n const schemaRows = await this.executeQuery<SchemaRow>(FullSchemaQueries.schemaQuery, { parameters: { schemaName: schemaKey.name } });\r\n const schemaRow = schemaRows[0];\r\n if (schemaRow === undefined)\r\n return undefined;\r\n\r\n // Map SchemaItemRow array, [{item: SchemaItemProps}], to array of SchemaItemProps.\r\n const schema = JSON.parse(schemaRow.schema) as SchemaProps;\r\n if (schema.items) {\r\n (schema as any).items = (schema.items as any).map((itemRow: SchemaItemRow) => { return itemRow.item; });\r\n }\r\n\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n return SchemaParser.parse(schema, schemaInfos);\r\n }\r\n\r\n private async getFullSchemaMultipleQueries(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n const schema = await this.getSchemaNoItems(schemaKey.name, context) as MutableSchemaProps;\r\n if (!schema)\r\n return undefined;\r\n\r\n const items = schema.items || (schema.items = {});\r\n await Promise.all([\r\n this.getEntities(schemaKey.name, context),\r\n this.getMixins(schemaKey.name, context),\r\n this.getStructs(schemaKey.name, context),\r\n this.getRelationships(schemaKey.name, context),\r\n this.getCustomAttributeClasses(schemaKey.name, context),\r\n this.getKindOfQuantities(schemaKey.name, context),\r\n this.getPropertyCategories(schemaKey.name, context),\r\n this.getEnumerations(schemaKey.name, context),\r\n this.getUnits(schemaKey.name, context),\r\n this.getInvertedUnits(schemaKey.name, context),\r\n this.getUnitSystems(schemaKey.name, context),\r\n this.getConstants(schemaKey.name, context),\r\n this.getPhenomenon(schemaKey.name, context),\r\n this.getFormats(schemaKey.name, context)\r\n ]).then((itemResults) => {\r\n const flatItemList = itemResults.reduce((acc, result) => acc.concat(result));\r\n flatItemList.forEach((schemaItem) => {\r\n if(!schemaItem.name) {\r\n // This should never be happen, as we query the schema items by name from the database, but since the SchemaProps\r\n // have name optional, we need the check here to make the compiler happy.\r\n throw new Error(`SchemaItem with no name encountered in schema ${schemaKey.name}`);\r\n }\r\n items[schemaItem.name] = schemaItem;\r\n });\r\n });\r\n\r\n return schema;\r\n }\r\n}\r\n\r\nfunction parseSchemaReference(referenceName: string): WithSchemaKey {\r\n return { schemaKey: SchemaKey.parseString(referenceName) };\r\n}\r\n\r\nasync function parseSchemaItemStubs(schemaName: string, itemRows: Array<SchemaItemStubRow>, addItemsHandler: AddSchemaItemHandler, schemaInfos: Iterable<SchemaInfo>) {\r\n if (!itemRows || itemRows.length === 0) {\r\n return;\r\n }\r\n\r\n const parseBaseClasses = async (baseClasses: Array<BaseClassStubRow> | undefined) => {\r\n if (!baseClasses || baseClasses.length < 2)\r\n return;\r\n\r\n for (let index = baseClasses.length - 1; index >= 0;) {\r\n const currentItem = baseClasses[index--];\r\n const baseClassItem = baseClasses[index];\r\n const baseClassName = baseClassItem ? `${baseClassItem.schema}.${baseClassItem.name}` : undefined;\r\n\r\n const schemaItem = await SchemaParser.parseItem(currentItem, currentItem.schema, schemaInfos);\r\n await addItemsHandler(currentItem.schema, {\r\n ...schemaItem,\r\n name: schemaItem.name,\r\n schemaItemType: schemaItem.schemaItemType,\r\n baseClass: baseClassName,\r\n });\r\n }\r\n };\r\n\r\n for (const itemRow of itemRows) {\r\n const schemaItem = await SchemaParser.parseItem(itemRow, schemaName, schemaInfos);\r\n await addItemsHandler(schemaName, {\r\n ...schemaItem,\r\n name: schemaItem.name,\r\n schemaItemType: schemaItem.schemaItemType,\r\n mixins: itemRow.mixins\r\n ? itemRow.mixins.map(mixin => { return `${mixin.schema}.${mixin.name}`; })\r\n : undefined,\r\n });\r\n\r\n await parseBaseClasses(itemRow.baseClasses);\r\n\r\n for (const mixinRow of itemRow.mixins || []) {\r\n const mixinItem = await SchemaParser.parseItem(mixinRow, mixinRow.schema, schemaInfos);\r\n await addItemsHandler(mixinRow.schema, {\r\n ...mixinItem,\r\n name: mixinItem.name,\r\n schemaItemType: mixinItem.schemaItemType,\r\n });\r\n await parseBaseClasses(mixinRow.baseClasses);\r\n }\r\n }\r\n}\r\n"]}
@@ -4,6 +4,10 @@ import { SchemaMatchType } from "../ECObjects";
4
4
  import { SchemaInfo } from "../Interfaces";
5
5
  import { Schema } from "../Metadata/Schema";
6
6
  import { SchemaKey } from "../SchemaKey";
7
+ interface IncrementalSchemaInfo extends SchemaInfo {
8
+ readonly description?: string;
9
+ readonly label?: string;
10
+ }
7
11
  type LoadSchemaInfoHandler = (context: SchemaContext) => Promise<Iterable<SchemaInfo>>;
8
12
  /**
9
13
  * Defines the SchemaLocater Options which determine how each schema is to be loaded.
@@ -114,8 +118,8 @@ declare class SchemaInfoCache {
114
118
  private readonly _schemaInfoCache;
115
119
  private readonly _schemaInfoLoader;
116
120
  constructor(schemaInfoLoader: LoadSchemaInfoHandler);
117
- getSchemasByContext(context: SchemaContext): Promise<SchemaInfo[] | undefined>;
118
- lookup(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<SchemaInfo | undefined>;
121
+ getSchemasByContext(context: SchemaContext): Promise<IncrementalSchemaInfo[] | undefined>;
122
+ lookup(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<IncrementalSchemaInfo | undefined>;
119
123
  remove(schemaKey: SchemaKey, context: SchemaContext): void;
120
124
  }
121
125
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"IncrementalSchemaLocater.d.ts","sourceRoot":"","sources":["../../../src/IncrementalLoading/IncrementalSchemaLocater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IncrementalSchemaLocater.d.ts","sourceRoot":"","sources":["../../../src/IncrementalLoading/IncrementalSchemaLocater.ts"],"names":[],"mappings":"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"}
@@ -127,6 +127,8 @@ class IncrementalSchemaLocater {
127
127
  name: schemaKey.name,
128
128
  alias: schemaInfo.alias,
129
129
  version: schemaInfo.schemaKey.version.toString(),
130
+ description: schemaInfo.description,
131
+ label: schemaInfo.label,
130
132
  references: schemaReferences,
131
133
  items: {}
132
134
  };
@@ -1 +1 @@
1
- {"version":3,"file":"IncrementalSchemaLocater.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/IncrementalSchemaLocater.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { ECSchemaNamespaceUris } from \"../Constants\";\r\nimport { ISchemaLocater, SchemaContext } from \"../Context\";\r\nimport { SchemaProps, SchemaReferenceProps } from \"../Deserialization/JsonProps\";\r\nimport { SchemaGraphUtil } from \"../Deserialization/SchemaGraphUtil\";\r\nimport { SchemaMatchType } from \"../ECObjects\";\r\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\r\nimport { SchemaInfo } from \"../Interfaces\";\r\nimport { Schema } from \"../Metadata/Schema\";\r\nimport { SchemaKey } from \"../SchemaKey\";\r\nimport { SchemaLoadingController } from \"../utils/SchemaLoadingController\";\r\nimport { IncrementalSchemaReader } from \"./IncrementalSchemaReader\";\r\n\r\ntype LoadSchemaInfoHandler = (context: SchemaContext) => Promise<Iterable<SchemaInfo>>;\r\n\r\n/**\r\n * Defines the SchemaLocater Options which determine how each schema is to be loaded.\r\n * All options are optional.\r\n * @beta\r\n */\r\nexport interface SchemaLocaterOptions {\r\n /** Only load partial schemas. Full schema information will not be retrieved. Defaults to false. */\r\n readonly loadPartialSchemaOnly?: boolean;\r\n}\r\n\r\n/**\r\n * A [[ISchemaLocater]] implementation for locating and retrieving EC [[Schema]]\r\n * objects incrementally instead of the full schema and it's references at once. This is useful for large schemas that\r\n * take a long time to load, but clients need a rough skeleton of the schema as fast as possible.\r\n *\r\n * The IncrementalSchemaLocater is a locater around the [[IncrementalSchemaLocater]] to be used in a\r\n * [[SchemaContext]].\r\n * @internal\r\n */\r\nexport abstract class IncrementalSchemaLocater implements ISchemaLocater {\r\n private readonly _options: SchemaLocaterOptions;\r\n protected readonly _schemaInfoCache: SchemaInfoCache;\r\n\r\n /**\r\n * Initializes a new instance of the IncrementalSchemaLocater class.\r\n * @param options The [[SchemaLocaterOptions]] that control the loading of the schema.\r\n */\r\n constructor(options?: SchemaLocaterOptions) {\r\n this._options = options || {};\r\n\r\n this._schemaInfoCache = new SchemaInfoCache(async (context) => {\r\n return this.loadSchemaInfos(context);\r\n });\r\n }\r\n\r\n /** Gets the options how the schema locater load the schemas. */\r\n protected get options(): SchemaLocaterOptions {\r\n return this._options;\r\n }\r\n\r\n /**\r\n * Gets the [[SchemaInfo]] which matches the provided SchemaKey. The SchemaInfo may be returned\r\n * before the schema is fully loaded. May return the entire Schema so long as it is completely loaded as it satisfies\r\n * the SchemaInfo interface.\r\n * @param schemaKey The [[SchemaKey]] to look up.\r\n * @param matchType The [[SchemaMatchType]] to use against candidate schemas.\r\n * @param context The [[SchemaContext]] for loading schema references.\r\n */\r\n public async getSchemaInfo(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<SchemaInfo | undefined> {\r\n return this._schemaInfoCache.lookup(schemaKey, matchType, context);\r\n }\r\n\r\n /**\r\n * Attempts to get a [[Schema]] from the locater. Yields undefined if no matching schema is found.\r\n * For schemas that may have references, construct and call through a SchemaContext instead.\r\n * @param schemaKey The [[SchemaKey]] to look up.\r\n * @param matchType The [[SchemaMatchType]] to use against candidate schemas.\r\n * @param context The [[SchemaContext]] for loading schema references.\r\n */\r\n public async getSchema(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<Schema | undefined> {\r\n const schemaInfo = await this.getSchemaInfo(schemaKey, matchType, context);\r\n return schemaInfo\r\n ? this.loadSchema(schemaInfo, context)\r\n : undefined;\r\n }\r\n\r\n /**\r\n * Attempts to get a [[Schema]] from the locater. Yields undefined if no matching schema is found.\r\n * For schemas that may have references, construct and call through a SchemaContext instead.\r\n * NOT IMPLEMENTED IN THIS LOCATER - ALWAYS RETURNS UNDEFINED.\r\n * @param schemaKey The [[SchemaKey]] to look up.\r\n * @param matchType The [[SchemaMatchType]] to use against candidate schemas.\r\n * @param context The [[SchemaContext]] for loading schema references.\r\n * @returns Incremental schema loading does not work synchronously, this will always return undefined.\r\n */\r\n public getSchemaSync(_schemaKey: Readonly<SchemaKey>, _matchType: SchemaMatchType, _context: SchemaContext): Schema | undefined {\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Gets the schema partials for the given schema key. The first item in the array is the\r\n * actual schema props of the schema to load, the following items are partial schema props\r\n * of referenced schemas.\r\n * @param schemaKey The schema key of the requested schema.\r\n * @param context The schema context.\r\n */\r\n protected abstract getSchemaPartials(schemaKey: SchemaKey, context: SchemaContext): Promise<ReadonlyArray<SchemaProps> | undefined>;\r\n\r\n /**\r\n * Gets the full schema json for the requested schema key.\r\n * @param schemaKey The schema key of the requested schema.\r\n * @param context The schema context.\r\n */\r\n protected abstract getSchemaJson(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined>;\r\n\r\n /**\r\n * Loads the schema info objects for the given context.\r\n * @param context The schema context to load the schema infos for.\r\n * @returns A promise that resolves to an iterable of schema infos.\r\n */\r\n protected abstract loadSchemaInfos(context: SchemaContext): Promise<Iterable<SchemaInfo>>;\r\n\r\n /**\r\n * Checks if the context contains the right schemas to support incremental schema loading.\r\n * @param context The schema context to check.\r\n * @returns true if incremental schema loading is supported, false otherwise.\r\n */\r\n protected abstract supportPartialSchemaLoading(context: SchemaContext): Promise<boolean>;\r\n\r\n /**\r\n * Start loading the schema for the given schema info incrementally. The schema is returned\r\n * as soon as the schema stub is loaded while the schema fully resolves in the background. It should\r\n * only be called by the IncrementalSchemaLocater if a schema has not been loaded or started to\r\n * load yet.\r\n * @param schemaInfo The schema info of the schema to load.\r\n * @param schemaContext The schema context to load the schema into.\r\n */\r\n protected async loadSchema(schemaInfo: SchemaInfo, schemaContext: SchemaContext): Promise<Schema> {\r\n // If the meta schema is an earlier version than 4.0.3, we can't use the ECSql query interface to get the schema\r\n // information required to load the schema entirely. In this case, we fallback to use the ECSchema RPC interface\r\n // to fetch the whole schema json.\r\n if (!await this.supportPartialSchemaLoading(schemaContext)) {\r\n const schemaJson = await this.getSchemaJson(schemaInfo.schemaKey, schemaContext);\r\n if(schemaJson === undefined)\r\n throw new ECSchemaError(ECSchemaStatus.UnableToLocateSchema, `Could not locate the schema, ${schemaInfo.schemaKey.name}.${schemaInfo.schemaKey.version.toString()}`);\r\n\r\n return Schema.fromJson(schemaJson, schemaContext);\r\n }\r\n\r\n // Fetches the schema partials for the given schema key. The first item in the array is the\r\n // actual schema props of the schema to load, the following items are schema props of referenced\r\n // schema items that are needed to resolve the schema properly.\r\n const schemaPartials = await this.getSchemaPartials(schemaInfo.schemaKey, schemaContext);\r\n if (schemaPartials === undefined)\r\n throw new ECSchemaError(ECSchemaStatus.UnableToLocateSchema, `Could not locate the schema, ${schemaInfo.schemaKey.name}.${schemaInfo.schemaKey.version.toString()}`);\r\n\r\n // Sort the partials in dependency order to ensure referenced schemas exist in the schema context\r\n // when they get requested. Otherwise the context would call this method again and for referenced\r\n // schemas, we would not want to request the whole schema props.\r\n const sortedPartials = await this.sortSchemaPartials(schemaPartials, schemaContext);\r\n for (const schemaProps of sortedPartials) {\r\n await this.startLoadingPartialSchema(schemaProps, schemaContext);\r\n }\r\n\r\n const schema = await schemaContext.getCachedSchema(schemaInfo.schemaKey);\r\n if (!schema)\r\n throw new Error(`Schema ${schemaInfo.schemaKey.name} could not be found.`);\r\n\r\n return schema;\r\n }\r\n\r\n /**\r\n * Creates a SchemaProps object by loading the Schema information from the given SchemaContext.\r\n * @param schemaKey The SchemaKey of the Schema whose props are to be retrieved.\r\n * @param schemaContext The SchemaContext holding the Schema.\r\n * @returns The SchemaProps object.\r\n */\r\n protected async createSchemaProps(schemaKey: SchemaKey, schemaContext: SchemaContext): Promise<SchemaProps> {\r\n const schemaInfo = await schemaContext.getSchemaInfo(schemaKey, SchemaMatchType.Latest);\r\n if (!schemaInfo)\r\n throw new Error(`Schema ${schemaKey.name} could not be found.`);\r\n\r\n const schemaReferences: Array<SchemaReferenceProps> = [];\r\n const schemaProps: SchemaProps = {\r\n $schema: ECSchemaNamespaceUris.SCHEMAURL3_2_JSON,\r\n name: schemaKey.name,\r\n alias: schemaInfo.alias,\r\n version: schemaInfo.schemaKey.version.toString(),\r\n references: schemaReferences,\r\n items: {}\r\n };\r\n\r\n schemaInfo.references.forEach((ref) => {\r\n schemaReferences.push({ name: ref.schemaKey.name, version: ref.schemaKey.version.toString() });\r\n });\r\n\r\n return schemaProps;\r\n }\r\n\r\n private async startLoadingPartialSchema(schemaProps: SchemaProps, schemaContext: SchemaContext): Promise<void> {\r\n if (schemaContext.schemaExists(SchemaKey.parseString(`${schemaProps.name}.${schemaProps.version}`))) {\r\n return;\r\n }\r\n\r\n const controller = new SchemaLoadingController();\r\n const schemaReader = new IncrementalSchemaReader(schemaContext, true);\r\n const schema = new Schema(schemaContext);\r\n schema.setLoadingController(controller);\r\n\r\n await schemaReader.readSchema(schema, schemaProps);\r\n\r\n if (!this._options.loadPartialSchemaOnly)\r\n controller.start(this.startLoadingFullSchema(schema));\r\n }\r\n\r\n private async loadFullSchema(schema: Schema): Promise<void> {\r\n const fullSchemaProps = await this.getSchemaJson(schema.schemaKey, schema.context)\r\n const reader = new IncrementalSchemaReader(schema.context, false);\r\n await reader.readSchema(schema, fullSchemaProps, false);\r\n }\r\n\r\n private async startLoadingFullSchema(schema: Schema): Promise<void> {\r\n if (!schema.loadingController)\r\n return;\r\n\r\n // If the schema is already resolved, return it directly.\r\n if (schema.loadingController.isComplete || schema.loadingController.inProgress) {\r\n return;\r\n }\r\n\r\n // Since the schema relies on it's references, they get triggered to be resolved\r\n // first by recursively calling this method. After all references has been resolved\r\n // the schema itself gets resolved.\r\n await Promise.all(schema.references.map(async (referenceSchema) => {\r\n if (referenceSchema.loadingController && referenceSchema.loadingController.inProgress)\r\n return referenceSchema.loadingController.wait();\r\n else\r\n return this.startLoadingFullSchema(referenceSchema);\r\n }));\r\n\r\n return this.loadFullSchema(schema);\r\n }\r\n\r\n private async sortSchemaPartials(schemaPartials: ReadonlyArray<SchemaProps>, schemaContext: SchemaContext): Promise<ReadonlyArray<SchemaProps>> {\r\n const schemaInfos: Array<SchemaInfo & { props: SchemaProps }> = [];\r\n for (const schemaProps of schemaPartials) {\r\n const schemaKey = SchemaKey.parseString(`${schemaProps.name}.${schemaProps.version}`);\r\n const schemaInfo = await schemaContext.getSchemaInfo(schemaKey, SchemaMatchType.Latest);\r\n if (!schemaInfo)\r\n throw new Error(`Schema ${schemaKey.name} could not be found.`);\r\n\r\n schemaInfos.push({ ...schemaInfo, props: schemaProps });\r\n }\r\n\r\n const orderedSchemaInfos = SchemaGraphUtil.buildDependencyOrderedSchemaInfoList(schemaInfos) as Array<SchemaInfo & { props: SchemaProps }>;\r\n return orderedSchemaInfos.map((schemaInfo) => schemaInfo.props);\r\n }\r\n}\r\n\r\n/**\r\n * Helper class to manage schema infos for a schema context.\r\n */\r\nclass SchemaInfoCache {\r\n private readonly _schemaInfoCache: WeakMap<SchemaContext, Array<SchemaInfo>>;\r\n private readonly _schemaInfoLoader: LoadSchemaInfoHandler;\r\n\r\n constructor(schemaInfoLoader: LoadSchemaInfoHandler) {\r\n this._schemaInfoCache = new WeakMap<SchemaContext, Array<SchemaInfo>>();\r\n this._schemaInfoLoader = schemaInfoLoader;\r\n }\r\n\r\n public async getSchemasByContext(context: SchemaContext): Promise<SchemaInfo[] | undefined> {\r\n if (!this._schemaInfoCache.has(context)) {\r\n const schemaInfos = await this._schemaInfoLoader(context);\r\n this._schemaInfoCache.set(context, Array.from(schemaInfos));\r\n }\r\n return this._schemaInfoCache.get(context);\r\n }\r\n\r\n public async lookup(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<SchemaInfo | undefined> {\r\n const contextSchemaInfos = await this.getSchemasByContext(context);\r\n return contextSchemaInfos\r\n ? contextSchemaInfos.find((schemaInfo) => schemaInfo.schemaKey.matches(schemaKey, matchType))\r\n : undefined;\r\n }\r\n\r\n public remove(schemaKey: SchemaKey, context: SchemaContext): void {\r\n const contextSchemaInfos = this._schemaInfoCache.get(context);\r\n if (!contextSchemaInfos)\r\n return;\r\n\r\n const index = contextSchemaInfos.findIndex((schemaInfo) => schemaInfo.schemaKey.name === schemaKey.name);\r\n if (index !== -1) {\r\n contextSchemaInfos.splice(index, 1);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"IncrementalSchemaLocater.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/IncrementalSchemaLocater.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { ECSchemaNamespaceUris } from \"../Constants\";\r\nimport { ISchemaLocater, SchemaContext } from \"../Context\";\r\nimport { SchemaProps, SchemaReferenceProps } from \"../Deserialization/JsonProps\";\r\nimport { SchemaGraphUtil } from \"../Deserialization/SchemaGraphUtil\";\r\nimport { SchemaMatchType } from \"../ECObjects\";\r\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\r\nimport { SchemaInfo } from \"../Interfaces\";\r\nimport { Schema } from \"../Metadata/Schema\";\r\nimport { SchemaKey } from \"../SchemaKey\";\r\nimport { SchemaLoadingController } from \"../utils/SchemaLoadingController\";\r\nimport { IncrementalSchemaReader } from \"./IncrementalSchemaReader\";\r\n\r\ninterface IncrementalSchemaInfo extends SchemaInfo {\r\n readonly description?: string;\r\n readonly label?: string;\r\n}\r\n\r\ntype LoadSchemaInfoHandler = (context: SchemaContext) => Promise<Iterable<SchemaInfo>>;\r\n\r\n/**\r\n * Defines the SchemaLocater Options which determine how each schema is to be loaded.\r\n * All options are optional.\r\n * @beta\r\n */\r\nexport interface SchemaLocaterOptions {\r\n /** Only load partial schemas. Full schema information will not be retrieved. Defaults to false. */\r\n readonly loadPartialSchemaOnly?: boolean;\r\n}\r\n\r\n/**\r\n * A [[ISchemaLocater]] implementation for locating and retrieving EC [[Schema]]\r\n * objects incrementally instead of the full schema and it's references at once. This is useful for large schemas that\r\n * take a long time to load, but clients need a rough skeleton of the schema as fast as possible.\r\n *\r\n * The IncrementalSchemaLocater is a locater around the [[IncrementalSchemaLocater]] to be used in a\r\n * [[SchemaContext]].\r\n * @internal\r\n */\r\nexport abstract class IncrementalSchemaLocater implements ISchemaLocater {\r\n private readonly _options: SchemaLocaterOptions;\r\n protected readonly _schemaInfoCache: SchemaInfoCache;\r\n\r\n /**\r\n * Initializes a new instance of the IncrementalSchemaLocater class.\r\n * @param options The [[SchemaLocaterOptions]] that control the loading of the schema.\r\n */\r\n constructor(options?: SchemaLocaterOptions) {\r\n this._options = options || {};\r\n\r\n this._schemaInfoCache = new SchemaInfoCache(async (context) => {\r\n return this.loadSchemaInfos(context);\r\n });\r\n }\r\n\r\n /** Gets the options how the schema locater load the schemas. */\r\n protected get options(): SchemaLocaterOptions {\r\n return this._options;\r\n }\r\n\r\n /**\r\n * Gets the [[SchemaInfo]] which matches the provided SchemaKey. The SchemaInfo may be returned\r\n * before the schema is fully loaded. May return the entire Schema so long as it is completely loaded as it satisfies\r\n * the SchemaInfo interface.\r\n * @param schemaKey The [[SchemaKey]] to look up.\r\n * @param matchType The [[SchemaMatchType]] to use against candidate schemas.\r\n * @param context The [[SchemaContext]] for loading schema references.\r\n */\r\n public async getSchemaInfo(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<SchemaInfo | undefined> {\r\n return this._schemaInfoCache.lookup(schemaKey, matchType, context);\r\n }\r\n\r\n /**\r\n * Attempts to get a [[Schema]] from the locater. Yields undefined if no matching schema is found.\r\n * For schemas that may have references, construct and call through a SchemaContext instead.\r\n * @param schemaKey The [[SchemaKey]] to look up.\r\n * @param matchType The [[SchemaMatchType]] to use against candidate schemas.\r\n * @param context The [[SchemaContext]] for loading schema references.\r\n */\r\n public async getSchema(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<Schema | undefined> {\r\n const schemaInfo = await this.getSchemaInfo(schemaKey, matchType, context);\r\n return schemaInfo\r\n ? this.loadSchema(schemaInfo, context)\r\n : undefined;\r\n }\r\n\r\n /**\r\n * Attempts to get a [[Schema]] from the locater. Yields undefined if no matching schema is found.\r\n * For schemas that may have references, construct and call through a SchemaContext instead.\r\n * NOT IMPLEMENTED IN THIS LOCATER - ALWAYS RETURNS UNDEFINED.\r\n * @param schemaKey The [[SchemaKey]] to look up.\r\n * @param matchType The [[SchemaMatchType]] to use against candidate schemas.\r\n * @param context The [[SchemaContext]] for loading schema references.\r\n * @returns Incremental schema loading does not work synchronously, this will always return undefined.\r\n */\r\n public getSchemaSync(_schemaKey: Readonly<SchemaKey>, _matchType: SchemaMatchType, _context: SchemaContext): Schema | undefined {\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Gets the schema partials for the given schema key. The first item in the array is the\r\n * actual schema props of the schema to load, the following items are partial schema props\r\n * of referenced schemas.\r\n * @param schemaKey The schema key of the requested schema.\r\n * @param context The schema context.\r\n */\r\n protected abstract getSchemaPartials(schemaKey: SchemaKey, context: SchemaContext): Promise<ReadonlyArray<SchemaProps> | undefined>;\r\n\r\n /**\r\n * Gets the full schema json for the requested schema key.\r\n * @param schemaKey The schema key of the requested schema.\r\n * @param context The schema context.\r\n */\r\n protected abstract getSchemaJson(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined>;\r\n\r\n /**\r\n * Loads the schema info objects for the given context.\r\n * @param context The schema context to load the schema infos for.\r\n * @returns A promise that resolves to an iterable of schema infos.\r\n */\r\n protected abstract loadSchemaInfos(context: SchemaContext): Promise<Iterable<SchemaInfo>>;\r\n\r\n /**\r\n * Checks if the context contains the right schemas to support incremental schema loading.\r\n * @param context The schema context to check.\r\n * @returns true if incremental schema loading is supported, false otherwise.\r\n */\r\n protected abstract supportPartialSchemaLoading(context: SchemaContext): Promise<boolean>;\r\n\r\n /**\r\n * Start loading the schema for the given schema info incrementally. The schema is returned\r\n * as soon as the schema stub is loaded while the schema fully resolves in the background. It should\r\n * only be called by the IncrementalSchemaLocater if a schema has not been loaded or started to\r\n * load yet.\r\n * @param schemaInfo The schema info of the schema to load.\r\n * @param schemaContext The schema context to load the schema into.\r\n */\r\n protected async loadSchema(schemaInfo: SchemaInfo, schemaContext: SchemaContext): Promise<Schema> {\r\n // If the meta schema is an earlier version than 4.0.3, we can't use the ECSql query interface to get the schema\r\n // information required to load the schema entirely. In this case, we fallback to use the ECSchema RPC interface\r\n // to fetch the whole schema json.\r\n if (!await this.supportPartialSchemaLoading(schemaContext)) {\r\n const schemaJson = await this.getSchemaJson(schemaInfo.schemaKey, schemaContext);\r\n if(schemaJson === undefined)\r\n throw new ECSchemaError(ECSchemaStatus.UnableToLocateSchema, `Could not locate the schema, ${schemaInfo.schemaKey.name}.${schemaInfo.schemaKey.version.toString()}`);\r\n\r\n return Schema.fromJson(schemaJson, schemaContext);\r\n }\r\n\r\n // Fetches the schema partials for the given schema key. The first item in the array is the\r\n // actual schema props of the schema to load, the following items are schema props of referenced\r\n // schema items that are needed to resolve the schema properly.\r\n const schemaPartials = await this.getSchemaPartials(schemaInfo.schemaKey, schemaContext);\r\n if (schemaPartials === undefined)\r\n throw new ECSchemaError(ECSchemaStatus.UnableToLocateSchema, `Could not locate the schema, ${schemaInfo.schemaKey.name}.${schemaInfo.schemaKey.version.toString()}`);\r\n\r\n // Sort the partials in dependency order to ensure referenced schemas exist in the schema context\r\n // when they get requested. Otherwise the context would call this method again and for referenced\r\n // schemas, we would not want to request the whole schema props.\r\n const sortedPartials = await this.sortSchemaPartials(schemaPartials, schemaContext);\r\n for (const schemaProps of sortedPartials) {\r\n await this.startLoadingPartialSchema(schemaProps, schemaContext);\r\n }\r\n\r\n const schema = await schemaContext.getCachedSchema(schemaInfo.schemaKey);\r\n if (!schema)\r\n throw new Error(`Schema ${schemaInfo.schemaKey.name} could not be found.`);\r\n\r\n return schema;\r\n }\r\n\r\n /**\r\n * Creates a SchemaProps object by loading the Schema information from the given SchemaContext.\r\n * @param schemaKey The SchemaKey of the Schema whose props are to be retrieved.\r\n * @param schemaContext The SchemaContext holding the Schema.\r\n * @returns The SchemaProps object.\r\n */\r\n protected async createSchemaProps(schemaKey: SchemaKey, schemaContext: SchemaContext): Promise<SchemaProps> {\r\n const schemaInfo = await schemaContext.getSchemaInfo(schemaKey, SchemaMatchType.Latest) as IncrementalSchemaInfo | undefined;\r\n if (!schemaInfo)\r\n throw new Error(`Schema ${schemaKey.name} could not be found.`);\r\n\r\n const schemaReferences: Array<SchemaReferenceProps> = [];\r\n const schemaProps: SchemaProps = {\r\n $schema: ECSchemaNamespaceUris.SCHEMAURL3_2_JSON,\r\n name: schemaKey.name,\r\n alias: schemaInfo.alias,\r\n version: schemaInfo.schemaKey.version.toString(),\r\n description: schemaInfo.description,\r\n label: schemaInfo.label,\r\n references: schemaReferences,\r\n items: {}\r\n };\r\n\r\n schemaInfo.references.forEach((ref) => {\r\n schemaReferences.push({ name: ref.schemaKey.name, version: ref.schemaKey.version.toString() });\r\n });\r\n\r\n return schemaProps;\r\n }\r\n\r\n private async startLoadingPartialSchema(schemaProps: SchemaProps, schemaContext: SchemaContext): Promise<void> {\r\n if (schemaContext.schemaExists(SchemaKey.parseString(`${schemaProps.name}.${schemaProps.version}`))) {\r\n return;\r\n }\r\n\r\n const controller = new SchemaLoadingController();\r\n const schemaReader = new IncrementalSchemaReader(schemaContext, true);\r\n const schema = new Schema(schemaContext);\r\n schema.setLoadingController(controller);\r\n\r\n await schemaReader.readSchema(schema, schemaProps);\r\n\r\n if (!this._options.loadPartialSchemaOnly)\r\n controller.start(this.startLoadingFullSchema(schema));\r\n }\r\n\r\n private async loadFullSchema(schema: Schema): Promise<void> {\r\n const fullSchemaProps = await this.getSchemaJson(schema.schemaKey, schema.context)\r\n const reader = new IncrementalSchemaReader(schema.context, false);\r\n await reader.readSchema(schema, fullSchemaProps, false);\r\n }\r\n\r\n private async startLoadingFullSchema(schema: Schema): Promise<void> {\r\n if (!schema.loadingController)\r\n return;\r\n\r\n // If the schema is already resolved, return it directly.\r\n if (schema.loadingController.isComplete || schema.loadingController.inProgress) {\r\n return;\r\n }\r\n\r\n // Since the schema relies on it's references, they get triggered to be resolved\r\n // first by recursively calling this method. After all references has been resolved\r\n // the schema itself gets resolved.\r\n await Promise.all(schema.references.map(async (referenceSchema) => {\r\n if (referenceSchema.loadingController && referenceSchema.loadingController.inProgress)\r\n return referenceSchema.loadingController.wait();\r\n else\r\n return this.startLoadingFullSchema(referenceSchema);\r\n }));\r\n\r\n return this.loadFullSchema(schema);\r\n }\r\n\r\n private async sortSchemaPartials(schemaPartials: ReadonlyArray<SchemaProps>, schemaContext: SchemaContext): Promise<ReadonlyArray<SchemaProps>> {\r\n const schemaInfos: Array<SchemaInfo & { props: SchemaProps }> = [];\r\n for (const schemaProps of schemaPartials) {\r\n const schemaKey = SchemaKey.parseString(`${schemaProps.name}.${schemaProps.version}`);\r\n const schemaInfo = await schemaContext.getSchemaInfo(schemaKey, SchemaMatchType.Latest);\r\n if (!schemaInfo)\r\n throw new Error(`Schema ${schemaKey.name} could not be found.`);\r\n\r\n schemaInfos.push({ ...schemaInfo, props: schemaProps });\r\n }\r\n\r\n const orderedSchemaInfos = SchemaGraphUtil.buildDependencyOrderedSchemaInfoList(schemaInfos) as Array<SchemaInfo & { props: SchemaProps }>;\r\n return orderedSchemaInfos.map((schemaInfo) => schemaInfo.props);\r\n }\r\n}\r\n\r\n/**\r\n * Helper class to manage schema infos for a schema context.\r\n */\r\nclass SchemaInfoCache {\r\n private readonly _schemaInfoCache: WeakMap<SchemaContext, Array<IncrementalSchemaInfo>>;\r\n private readonly _schemaInfoLoader: LoadSchemaInfoHandler;\r\n\r\n constructor(schemaInfoLoader: LoadSchemaInfoHandler) {\r\n this._schemaInfoCache = new WeakMap<SchemaContext, Array<IncrementalSchemaInfo>>();\r\n this._schemaInfoLoader = schemaInfoLoader;\r\n }\r\n\r\n public async getSchemasByContext(context: SchemaContext): Promise<IncrementalSchemaInfo[] | undefined> {\r\n if (!this._schemaInfoCache.has(context)) {\r\n const schemaInfos = await this._schemaInfoLoader(context);\r\n this._schemaInfoCache.set(context, Array.from(schemaInfos));\r\n }\r\n return this._schemaInfoCache.get(context);\r\n }\r\n\r\n public async lookup(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<IncrementalSchemaInfo | undefined> {\r\n const contextSchemaInfos = await this.getSchemasByContext(context);\r\n return contextSchemaInfos\r\n ? contextSchemaInfos.find((schemaInfo) => schemaInfo.schemaKey.matches(schemaKey, matchType))\r\n : undefined;\r\n }\r\n\r\n public remove(schemaKey: SchemaKey, context: SchemaContext): void {\r\n const contextSchemaInfos = this._schemaInfoCache.get(context);\r\n if (!contextSchemaInfos)\r\n return;\r\n\r\n const index = contextSchemaInfos.findIndex((schemaInfo) => schemaInfo.schemaKey.name === schemaKey.name);\r\n if (index !== -1) {\r\n contextSchemaInfos.splice(index, 1);\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaStubQueries.d.ts","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaStubQueries.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,QAAQ,UAAW,MAAM,WASrC,CAAC;AAEF,eAAO,MAAM,QAAQ,UAAW,MAAM,WASrC,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAAW,MAAM,WAQ9C,CAAC;AAwUF;;;GAGG;AACH,eAAO,MAAM,YAAY;;;CAGxB,CAAC"}
1
+ {"version":3,"file":"SchemaStubQueries.d.ts","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaStubQueries.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,QAAQ,UAAW,MAAM,WASrC,CAAC;AAEF,eAAO,MAAM,QAAQ,UAAW,MAAM,WASrC,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAAW,MAAM,WAQ9C,CAAC;AAuTF;;;GAGG;AACH,eAAO,MAAM,YAAY;;;CAGxB,CAAC"}
@@ -307,34 +307,15 @@ SchemaItems AS (
307
307
  `;
308
308
  const schemaStubQuery = `
309
309
  WITH
310
- ${withSchemaReferences},
311
310
  ${withAppliesTo},
312
311
  ${withSchemaItems}
313
312
  SELECT
314
- [Name] as [name],
315
- CONCAT('',[VersionMajor],'.',[VersionWrite],'.',[VersionMinor]) AS [version],
316
- [Alias] as [alias],
317
- [DisplayLabel] as [displayLabel],
318
- [Description] as [description],
319
- (
320
- SELECT
321
- json_group_array([schemaReferences].[fullName])
322
- FROM
323
- [SchemaReferences] [schemaReferences]
324
- WHERE
325
- [schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]
326
- ) AS [references],
327
- (
328
- SELECT
329
- json_group_array(json([items].[item]))
330
- FROM
331
- [SchemaItems] [items]
332
- WHERE
333
- [items].[SchemaId] = [schemaDef].[ECInstanceId]
334
- ) AS [items]
313
+ [items].[item]
335
314
  FROM
336
- [meta].[ECSchemaDef] [schemaDef]
337
- WHERE [Name] = :schemaName
315
+ [SchemaItems] [items]
316
+ JOIN [meta].[ECSchemaDef] [schemaDef]
317
+ ON [schemaDef].[ECInstanceId] = [items].[SchemaId]
318
+ WHERE [schemaDef].[Name] = :schemaName
338
319
  `;
339
320
  const schemaInfoQuery = `
340
321
  WITH
@@ -343,6 +324,8 @@ const schemaInfoQuery = `
343
324
  [Name] as [name],
344
325
  CONCAT('',[VersionMajor],'.',[VersionWrite],'.',[VersionMinor]) AS [version],
345
326
  [Alias] as [alias],
327
+ [DisplayLabel] as [label],
328
+ [Description] as [description],
346
329
  (
347
330
  SELECT
348
331
  json_group_array([schemaReferences].[fullName])
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaStubQueries.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaStubQueries.ts"],"names":[],"mappings":";;;AAAA;;;gGAGgG;AAChG,2DAAwD;AAEjD,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;IACxC,OAAO;;cAEK,KAAK;cACL,KAAK;cACL,KAAK;;;GAGhB,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,QAAQ,YASnB;AAEK,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;IACxC,OAAO;;cAEK,KAAK;cACL,KAAK;cACL,KAAK;;;GAGhB,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,QAAQ,YASnB;AAEK,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAE,EAAE;IACjD,OAAO;;cAEK,KAAK;cACL,KAAK;;;GAGhB,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,iBAAiB,qBAQ5B;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;CAcrB,CAAC;AAEF,MAAM,oBAAoB,GAAG;;;;;;;;;;CAU5B,CAAC;AAEF,MAAM,oBAAoB,GAAG;;;;;;oBAMT,IAAA,gBAAQ,EAAC,OAAO,CAAC;;;;;;;;;;0BAUX,IAAA,gBAAQ,EAAC,WAAW,CAAC;;;;;;;;;;;;;;CAc9C,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;oBAMA,IAAA,gBAAQ,EAAC,OAAO,CAAC;;;;;;;;;0BASX,IAAA,gBAAQ,EAAC,WAAW,CAAC;;;;;;;;;;;;;CAa9C,CAAC;AAEF,MAAM,iBAAiB,GAAG;;;;;;oBAMN,IAAA,gBAAQ,EAAC,OAAO,CAAC;;;oBAGjB,IAAA,gBAAQ,EAAC,OAAO,CAAC;6BACR,IAAA,yBAAiB,EAAC,OAAO,CAAC;;;;;;;0BAO7B,IAAA,gBAAQ,EAAC,WAAW,CAAC;;;0BAGrB,IAAA,gBAAQ,EAAC,WAAW,CAAC;mCACZ,IAAA,yBAAiB,EAAC,WAAW,CAAC;;;;;;;;;;;CAWhE,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;oBAMA,IAAA,gBAAQ,EAAC,OAAO,CAAC;;;;;;;;;0BASX,IAAA,gBAAQ,EAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;0BAkBrB,IAAA,gBAAQ,EAAC,WAAW,CAAC;;;;;;;;;;;;;;gCAcf,IAAA,gBAAQ,EAAC,gBAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BzD,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;oBAMC,IAAA,gBAAQ,EAAC,OAAO,CAAC;;;;;;;;;;;;;;0BAcX,IAAA,gBAAQ,EAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;CAmB9C,CAAC;AAEF,MAAM,eAAe,GAAG;;IAEpB,oBAAoB;;IAEpB,WAAW;;IAEX,iBAAiB;;IAEjB,WAAW;;IAEX,UAAU;;IAEV,qCAAiB,CAAC,WAAW,EAAE;;IAE/B,qCAAiB,CAAC,cAAc,EAAE;;IAElC,qCAAiB,CAAC,gBAAgB,EAAE;;IAEpC,qCAAiB,CAAC,IAAI,EAAE;;IAExB,qCAAiB,CAAC,YAAY,EAAE;;IAEhC,qCAAiB,CAAC,QAAQ,EAAE;;IAE5B,qCAAiB,CAAC,UAAU,EAAE;;IAE9B,qCAAiB,CAAC,UAAU,EAAE;;IAE9B,qCAAiB,CAAC,MAAM,EAAE;;CAE7B,CAAC;AAEF,MAAM,eAAe,GAAG;;MAElB,oBAAoB;MACpB,aAAa;MACb,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BpB,CAAC;AAEF,MAAM,eAAe,GAAG;;MAElB,oBAAoB;;;;;;;;;;;;;;;CAezB,CAAC;AAEF;;;GAGG;AACU,QAAA,YAAY,GAAG;IAC1B,eAAe;IACf,eAAe;CAChB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { SchemaItemQueries } from \"./SchemaItemQueries\";\r\n\r\nexport const modifier = (alias: string) => {\r\n return `\r\n CASE\r\n WHEN [${alias}].[modifier] = 0 THEN 'None'\r\n WHEN [${alias}].[modifier] = 1 THEN 'Abstract'\r\n WHEN [${alias}].[modifier] = 2 THEN 'Sealed'\r\n ELSE NULL\r\n END\r\n `;\r\n};\r\n\r\nexport const strength = (alias: string) => {\r\n return `\r\n CASE\r\n WHEN [${alias}].[RelationshipStrength] = 0 THEN 'Referencing'\r\n WHEN [${alias}].[RelationshipStrength] = 1 THEN 'Holding'\r\n WHEN [${alias}].[RelationshipStrength] = 2 THEN 'Embedding'\r\n ELSE NULL\r\n END\r\n `;\r\n};\r\n\r\nexport const strengthDirection = (alias: string) => {\r\n return `\r\n CASE\r\n WHEN [${alias}].[RelationshipStrengthDirection] = 1 THEN 'Forward'\r\n WHEN [${alias}].[RelationshipStrengthDirection] = 2 THEN 'Backward'\r\n ELSE NULL\r\n END\r\n `;\r\n};\r\n\r\nconst withAppliesTo = `\r\n AppliesToCTE AS (\r\n SELECT\r\n [mixinAppliesTo].[ECInstanceId] AS [AppliesToId],\r\n [appliesToSchema].[name] as [AppliesToSchema],\r\n json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.IsMixin.AppliesToEntityClass') AS [AppliesTo]\r\n FROM [meta].[CustomAttribute] [ca]\r\n JOIN [meta].[ECClassDef] [mixinAppliesTo]\r\n ON [mixinAppliesTo].[ECInstanceId] = [ca].[ContainerId]\r\n JOIN [meta].[ECSchemaDef] [appliesToSchema]\r\n ON [appliesToSchema].[ECInstanceId] = [mixinAppliesTo].[Schema].[Id]\r\n WHERE [ca].[ContainerType] = 30\r\n AND json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.ecClass') = 'IsMixin'\r\n )\r\n`;\r\n\r\nconst withSchemaReferences = `\r\n SchemaReferences AS (\r\n SELECT\r\n [ref].[SourceECInstanceId] AS [SchemaId],\r\n CONCAT([Name],'.',[VersionMajor],'.',[VersionWrite],'.',[VersionMinor]) AS [fullName]\r\n FROM\r\n [meta].[ECSchemaDef] AS [refSchema]\r\n INNER JOIN [meta].[SchemaHasSchemaReferences] [ref]\r\n ON [ref].[TargetECInstanceId] = [refSchema].[ECInstanceId]\r\n )\r\n`;\r\n\r\nconst customAttributeQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'CustomAttributeClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'appliesTo', [class].[CustomAttributeContainerType],\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'CustomAttributeClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'appliesTo', [baseClass].[CustomAttributeContainerType]\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 3\r\n`;\r\n\r\nconst structQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'StructClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'StructClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description]\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 2\r\n`;\r\n\r\nconst relationshipQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'RelationshipClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'strength', ${strength(\"class\")},\r\n 'strengthDirection', ${strengthDirection(\"class\")},\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'RelationshipClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'strength', ${strength(\"baseClass\")},\r\n 'strengthDirection', ${strengthDirection(\"baseClass\")}\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 1\r\n`;\r\n\r\nconst entityQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'EntityClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'EntityClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description]\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n AND NOT EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [baseClass].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n ),\r\n 'mixins', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [baseClass].[ECInstanceId]\r\n ),\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([mixinBaseClass].[ECInstanceId], 's'),\r\n 'name', [mixinBaseClass].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"mixinBaseClass\")},\r\n 'label', [mixinBaseClass].[DisplayLabel],\r\n 'description', [mixinBaseClass].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [mixinBaseClass].[ECInstanceId]\r\n )\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [mixinBaseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [mixinBaseClassMap]\r\n ON [mixinBaseClassMap].[TargetECInstanceId] = [mixinBaseClass].[ECInstanceId]\r\n WHERE [mixinBaseClassMap].[SourceECInstanceId] = [baseClass].[ECInstanceId]\r\n )\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n AND EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [baseClass].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 0\r\n AND NOT EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n`;\r\n\r\nconst mixinQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [class].[ECInstanceId]\r\n ),\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [baseClass].[ECInstanceId]\r\n )\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 0 AND EXISTS (SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n`;\r\n\r\nconst withSchemaItems = `\r\nSchemaItems AS (\r\n ${customAttributeQuery}\r\n UNION ALL\r\n ${structQuery}\r\n UNION ALL\r\n ${relationshipQuery}\r\n UNION ALL\r\n ${entityQuery}\r\n UNION ALL\r\n ${mixinQuery}\r\n UNION ALL\r\n ${SchemaItemQueries.enumeration()}\r\n UNION ALL\r\n ${SchemaItemQueries.kindOfQuantity()}\r\n UNION ALL\r\n ${SchemaItemQueries.propertyCategory()}\r\n UNION ALL\r\n ${SchemaItemQueries.unit()}\r\n UNION ALL\r\n ${SchemaItemQueries.invertedUnit()}\r\n UNION ALL\r\n ${SchemaItemQueries.constant()}\r\n UNION ALL\r\n ${SchemaItemQueries.phenomenon()}\r\n UNION ALL\r\n ${SchemaItemQueries.unitSystem()}\r\n UNION ALL\r\n ${SchemaItemQueries.format()}\r\n )\r\n`;\r\n\r\nconst schemaStubQuery = `\r\n WITH\r\n ${withSchemaReferences},\r\n ${withAppliesTo},\r\n ${withSchemaItems}\r\n SELECT\r\n [Name] as [name],\r\n CONCAT('',[VersionMajor],'.',[VersionWrite],'.',[VersionMinor]) AS [version],\r\n [Alias] as [alias],\r\n [DisplayLabel] as [displayLabel],\r\n [Description] as [description],\r\n (\r\n SELECT\r\n json_group_array([schemaReferences].[fullName])\r\n FROM\r\n [SchemaReferences] [schemaReferences]\r\n WHERE\r\n [schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]\r\n ) AS [references],\r\n (\r\n SELECT\r\n json_group_array(json([items].[item]))\r\n FROM\r\n [SchemaItems] [items]\r\n WHERE\r\n [items].[SchemaId] = [schemaDef].[ECInstanceId]\r\n ) AS [items]\r\n FROM\r\n [meta].[ECSchemaDef] [schemaDef]\r\n WHERE [Name] = :schemaName\r\n`;\r\n\r\nconst schemaInfoQuery = `\r\n WITH\r\n ${withSchemaReferences}\r\n SELECT\r\n [Name] as [name],\r\n CONCAT('',[VersionMajor],'.',[VersionWrite],'.',[VersionMinor]) AS [version],\r\n [Alias] as [alias],\r\n (\r\n SELECT\r\n json_group_array([schemaReferences].[fullName])\r\n FROM\r\n [SchemaReferences] [schemaReferences]\r\n WHERE\r\n [schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]\r\n ) AS [references]\r\n FROM\r\n [meta].[ECSchemaDef] [schemaDef]\r\n`;\r\n\r\n/**\r\n * Partial Schema queries.\r\n * @internal\r\n */\r\nexport const ecsqlQueries = {\r\n schemaStubQuery,\r\n schemaInfoQuery,\r\n};\r\n"]}
1
+ {"version":3,"file":"SchemaStubQueries.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaStubQueries.ts"],"names":[],"mappings":";;;AAAA;;;gGAGgG;AAChG,2DAAwD;AAEjD,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;IACxC,OAAO;;cAEK,KAAK;cACL,KAAK;cACL,KAAK;;;GAGhB,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,QAAQ,YASnB;AAEK,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;IACxC,OAAO;;cAEK,KAAK;cACL,KAAK;cACL,KAAK;;;GAGhB,CAAC;AACJ,CAAC,CAAC;AATW,QAAA,QAAQ,YASnB;AAEK,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAE,EAAE;IACjD,OAAO;;cAEK,KAAK;cACL,KAAK;;;GAGhB,CAAC;AACJ,CAAC,CAAC;AARW,QAAA,iBAAiB,qBAQ5B;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;CAcrB,CAAC;AAEF,MAAM,oBAAoB,GAAG;;;;;;;;;;CAU5B,CAAC;AAEF,MAAM,oBAAoB,GAAG;;;;;;oBAMT,IAAA,gBAAQ,EAAC,OAAO,CAAC;;;;;;;;;;0BAUX,IAAA,gBAAQ,EAAC,WAAW,CAAC;;;;;;;;;;;;;;CAc9C,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;oBAMA,IAAA,gBAAQ,EAAC,OAAO,CAAC;;;;;;;;;0BASX,IAAA,gBAAQ,EAAC,WAAW,CAAC;;;;;;;;;;;;;CAa9C,CAAC;AAEF,MAAM,iBAAiB,GAAG;;;;;;oBAMN,IAAA,gBAAQ,EAAC,OAAO,CAAC;;;oBAGjB,IAAA,gBAAQ,EAAC,OAAO,CAAC;6BACR,IAAA,yBAAiB,EAAC,OAAO,CAAC;;;;;;;0BAO7B,IAAA,gBAAQ,EAAC,WAAW,CAAC;;;0BAGrB,IAAA,gBAAQ,EAAC,WAAW,CAAC;mCACZ,IAAA,yBAAiB,EAAC,WAAW,CAAC;;;;;;;;;;;CAWhE,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;oBAMA,IAAA,gBAAQ,EAAC,OAAO,CAAC;;;;;;;;;0BASX,IAAA,gBAAQ,EAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;0BAkBrB,IAAA,gBAAQ,EAAC,WAAW,CAAC;;;;;;;;;;;;;;gCAcf,IAAA,gBAAQ,EAAC,gBAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BzD,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;oBAMC,IAAA,gBAAQ,EAAC,OAAO,CAAC;;;;;;;;;;;;;;0BAcX,IAAA,gBAAQ,EAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;CAmB9C,CAAC;AAEF,MAAM,eAAe,GAAG;;IAEpB,oBAAoB;;IAEpB,WAAW;;IAEX,iBAAiB;;IAEjB,WAAW;;IAEX,UAAU;;IAEV,qCAAiB,CAAC,WAAW,EAAE;;IAE/B,qCAAiB,CAAC,cAAc,EAAE;;IAElC,qCAAiB,CAAC,gBAAgB,EAAE;;IAEpC,qCAAiB,CAAC,IAAI,EAAE;;IAExB,qCAAiB,CAAC,YAAY,EAAE;;IAEhC,qCAAiB,CAAC,QAAQ,EAAE;;IAE5B,qCAAiB,CAAC,UAAU,EAAE;;IAE9B,qCAAiB,CAAC,UAAU,EAAE;;IAE9B,qCAAiB,CAAC,MAAM,EAAE;;CAE7B,CAAC;AAEF,MAAM,eAAe,GAAG;;MAElB,aAAa;MACb,eAAe;;;;;;;;CAQpB,CAAC;AAEF,MAAM,eAAe,GAAG;;MAElB,oBAAoB;;;;;;;;;;;;;;;;;CAiBzB,CAAC;AAEF;;;GAGG;AACU,QAAA,YAAY,GAAG;IAC1B,eAAe;IACf,eAAe;CAChB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { SchemaItemQueries } from \"./SchemaItemQueries\";\r\n\r\nexport const modifier = (alias: string) => {\r\n return `\r\n CASE\r\n WHEN [${alias}].[modifier] = 0 THEN 'None'\r\n WHEN [${alias}].[modifier] = 1 THEN 'Abstract'\r\n WHEN [${alias}].[modifier] = 2 THEN 'Sealed'\r\n ELSE NULL\r\n END\r\n `;\r\n};\r\n\r\nexport const strength = (alias: string) => {\r\n return `\r\n CASE\r\n WHEN [${alias}].[RelationshipStrength] = 0 THEN 'Referencing'\r\n WHEN [${alias}].[RelationshipStrength] = 1 THEN 'Holding'\r\n WHEN [${alias}].[RelationshipStrength] = 2 THEN 'Embedding'\r\n ELSE NULL\r\n END\r\n `;\r\n};\r\n\r\nexport const strengthDirection = (alias: string) => {\r\n return `\r\n CASE\r\n WHEN [${alias}].[RelationshipStrengthDirection] = 1 THEN 'Forward'\r\n WHEN [${alias}].[RelationshipStrengthDirection] = 2 THEN 'Backward'\r\n ELSE NULL\r\n END\r\n `;\r\n};\r\n\r\nconst withAppliesTo = `\r\n AppliesToCTE AS (\r\n SELECT\r\n [mixinAppliesTo].[ECInstanceId] AS [AppliesToId],\r\n [appliesToSchema].[name] as [AppliesToSchema],\r\n json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.IsMixin.AppliesToEntityClass') AS [AppliesTo]\r\n FROM [meta].[CustomAttribute] [ca]\r\n JOIN [meta].[ECClassDef] [mixinAppliesTo]\r\n ON [mixinAppliesTo].[ECInstanceId] = [ca].[ContainerId]\r\n JOIN [meta].[ECSchemaDef] [appliesToSchema]\r\n ON [appliesToSchema].[ECInstanceId] = [mixinAppliesTo].[Schema].[Id]\r\n WHERE [ca].[ContainerType] = 30\r\n AND json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.ecClass') = 'IsMixin'\r\n )\r\n`;\r\n\r\nconst withSchemaReferences = `\r\n SchemaReferences AS (\r\n SELECT\r\n [ref].[SourceECInstanceId] AS [SchemaId],\r\n CONCAT([Name],'.',[VersionMajor],'.',[VersionWrite],'.',[VersionMinor]) AS [fullName]\r\n FROM\r\n [meta].[ECSchemaDef] AS [refSchema]\r\n INNER JOIN [meta].[SchemaHasSchemaReferences] [ref]\r\n ON [ref].[TargetECInstanceId] = [refSchema].[ECInstanceId]\r\n )\r\n`;\r\n\r\nconst customAttributeQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'CustomAttributeClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'appliesTo', [class].[CustomAttributeContainerType],\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'CustomAttributeClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'appliesTo', [baseClass].[CustomAttributeContainerType]\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 3\r\n`;\r\n\r\nconst structQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'StructClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'StructClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description]\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 2\r\n`;\r\n\r\nconst relationshipQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'RelationshipClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'strength', ${strength(\"class\")},\r\n 'strengthDirection', ${strengthDirection(\"class\")},\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'RelationshipClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'strength', ${strength(\"baseClass\")},\r\n 'strengthDirection', ${strengthDirection(\"baseClass\")}\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 1\r\n`;\r\n\r\nconst entityQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'EntityClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'EntityClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description]\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n AND NOT EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [baseClass].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n ),\r\n 'mixins', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [baseClass].[ECInstanceId]\r\n ),\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([mixinBaseClass].[ECInstanceId], 's'),\r\n 'name', [mixinBaseClass].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"mixinBaseClass\")},\r\n 'label', [mixinBaseClass].[DisplayLabel],\r\n 'description', [mixinBaseClass].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [mixinBaseClass].[ECInstanceId]\r\n )\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [mixinBaseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [mixinBaseClassMap]\r\n ON [mixinBaseClassMap].[TargetECInstanceId] = [mixinBaseClass].[ECInstanceId]\r\n WHERE [mixinBaseClassMap].[SourceECInstanceId] = [baseClass].[ECInstanceId]\r\n )\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n AND EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [baseClass].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 0\r\n AND NOT EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n`;\r\n\r\nconst mixinQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [class].[ECInstanceId]\r\n ),\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [baseClass].[ECInstanceId]\r\n )\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 0 AND EXISTS (SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n`;\r\n\r\nconst withSchemaItems = `\r\nSchemaItems AS (\r\n ${customAttributeQuery}\r\n UNION ALL\r\n ${structQuery}\r\n UNION ALL\r\n ${relationshipQuery}\r\n UNION ALL\r\n ${entityQuery}\r\n UNION ALL\r\n ${mixinQuery}\r\n UNION ALL\r\n ${SchemaItemQueries.enumeration()}\r\n UNION ALL\r\n ${SchemaItemQueries.kindOfQuantity()}\r\n UNION ALL\r\n ${SchemaItemQueries.propertyCategory()}\r\n UNION ALL\r\n ${SchemaItemQueries.unit()}\r\n UNION ALL\r\n ${SchemaItemQueries.invertedUnit()}\r\n UNION ALL\r\n ${SchemaItemQueries.constant()}\r\n UNION ALL\r\n ${SchemaItemQueries.phenomenon()}\r\n UNION ALL\r\n ${SchemaItemQueries.unitSystem()}\r\n UNION ALL\r\n ${SchemaItemQueries.format()}\r\n )\r\n`;\r\n\r\nconst schemaStubQuery = `\r\n WITH\r\n ${withAppliesTo},\r\n ${withSchemaItems}\r\n SELECT\r\n [items].[item]\r\n FROM\r\n [SchemaItems] [items]\r\n JOIN [meta].[ECSchemaDef] [schemaDef]\r\n ON [schemaDef].[ECInstanceId] = [items].[SchemaId]\r\n WHERE [schemaDef].[Name] = :schemaName\r\n`;\r\n\r\nconst schemaInfoQuery = `\r\n WITH\r\n ${withSchemaReferences}\r\n SELECT\r\n [Name] as [name],\r\n CONCAT('',[VersionMajor],'.',[VersionWrite],'.',[VersionMinor]) AS [version],\r\n [Alias] as [alias],\r\n [DisplayLabel] as [label],\r\n [Description] as [description],\r\n (\r\n SELECT\r\n json_group_array([schemaReferences].[fullName])\r\n FROM\r\n [SchemaReferences] [schemaReferences]\r\n WHERE\r\n [schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]\r\n ) AS [references]\r\n FROM\r\n [meta].[ECSchemaDef] [schemaDef]\r\n`;\r\n\r\n/**\r\n * Partial Schema queries.\r\n * @internal\r\n */\r\nexport const ecsqlQueries = {\r\n schemaStubQuery,\r\n schemaInfoQuery,\r\n};\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"ECSqlSchemaLocater.d.ts","sourceRoot":"","sources":["../../../src/IncrementalLoading/ECSqlSchemaLocater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ECSqlSchemaLocater.d.ts","sourceRoot":"","sources":["../../../src/IncrementalLoading/ECSqlSchemaLocater.ts"],"names":[],"mappings":"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"}
@@ -236,6 +236,8 @@ export class ECSqlSchemaLocater extends IncrementalSchemaLocater {
236
236
  const schemaRows = await this.executeQuery(ecsqlQueries.schemaInfoQuery);
237
237
  return schemaRows.map((schemaRow) => ({
238
238
  alias: schemaRow.alias,
239
+ description: schemaRow.description,
240
+ label: schemaRow.label,
239
241
  schemaKey: SchemaKey.parseString(`${schemaRow.name}.${schemaRow.version}`),
240
242
  references: Array.from(JSON.parse(schemaRow.references), parseSchemaReference),
241
243
  }));
@@ -249,16 +251,16 @@ export class ECSqlSchemaLocater extends IncrementalSchemaLocater {
249
251
  */
250
252
  async getSchemaPartials(schemaKey, context) {
251
253
  const queryStart = Date.now();
252
- const [schemaRow] = await this.executeQuery(ecsqlQueries.schemaStubQuery, {
253
- parameters: { schemaName: schemaKey.name },
254
- limit: 1
254
+ const itemRows = await this.executeQuery(ecsqlQueries.schemaStubQuery, {
255
+ parameters: { schemaName: schemaKey.name }
255
256
  });
256
257
  const queryDuration = Date.now() - queryStart;
257
258
  Logger.logTrace(LOGGER_CATEGORY, `Recieved PartialSchema for ${schemaKey.name} in ${queryDuration}ms`, {
258
259
  schemaName: schemaKey.name,
260
+ itemCount: itemRows.length,
259
261
  duration: queryDuration,
260
262
  });
261
- if (!schemaRow)
263
+ if (itemRows.length === 0)
262
264
  return undefined;
263
265
  const schemaPartials = [];
264
266
  const addSchema = async (key) => {
@@ -286,14 +288,14 @@ export class ECSqlSchemaLocater extends IncrementalSchemaLocater {
286
288
  Object.assign(items, { [itemInfo.name]: Object.assign(existingItem, itemInfo) });
287
289
  };
288
290
  const reviver = (_key, value) => {
289
- if (value === null) {
290
- return undefined;
291
- }
292
- return value;
291
+ return value === null ? undefined : value;
293
292
  };
294
293
  await addSchema(schemaKey);
295
294
  const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];
296
- await parseSchemaItemStubs(schemaKey.name, JSON.parse(schemaRow.items, reviver), addItems, schemaInfos);
295
+ const stubItems = itemRows.map((itemRow) => {
296
+ return JSON.parse(itemRow.item, reviver);
297
+ });
298
+ await parseSchemaItemStubs(schemaKey.name, stubItems, addItems, schemaInfos);
297
299
  return schemaPartials;
298
300
  }
299
301
  async querySchemaItem(context, schemaName, query, schemaType) {
@@ -1 +1 @@
1
- {"version":3,"file":"ECSqlSchemaLocater.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/ECSqlSchemaLocater.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAK7C,OAAO,EAAkB,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,wBAAwB,EAAwB,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AA+DnD,MAAM,eAAe,GAAG,sCAAsC,CAAC;AAqB/D;;;;GAIG;AACH,MAAM,OAAgB,kBAAmB,SAAQ,wBAAwB;IACvE;;OAEG;IACH,IAAuB,OAAO;QAC5B,OAAO,KAAK,CAAC,OAAoC,CAAC;IACpD,CAAC;IAED;;;OAGG;IACH,YAAY,OAAmC;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;IACjB,CAAC;IAgBD;;;;;;OAMG;IACO,KAAK,CAAC,aAAa,CAAC,SAAoB,EAAE,OAAsB;QACxE,gHAAgH;QAChH,gHAAgH;QAChH,kCAAkC;QAClC,IAAI,CAAC,MAAM,IAAI,CAAC,2BAA2B,CAAC,OAAO,CAAC;YAClD,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QAExC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB;YACjD,CAAC,CAAC,MAAM,IAAI,CAAC,4BAA4B,CAAC,SAAS,EAAE,OAAO,CAAC;YAC7D,CAAC,CAAC,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEjD,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,4BAA4B,SAAS,CAAC,IAAI,OAAO,aAAa,IAAI,EAAE;YACnG,UAAU,EAAE,SAAS,CAAC,IAAI;YAC1B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;YAClE,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;QAEH,OAAO,WAAW,CAAC;IACrB,CAAC;IAAA,CAAC;IAEF;;;;;;OAMG;IACK,KAAK,CAAC,gBAAgB,CAAC,UAAkB,EAAE,OAAsB;QACvE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAY,iBAAiB,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAC5H,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,SAAS,KAAK,SAAS;YACzB,OAAO,SAAS,CAAC;QAEnB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAgB,CAAC;QAC3D,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnF,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjD,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,2BAA2B,CAAC,OAAsB;QAChE,MAAM,aAAa,GAAG,IAAI,SAAS,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACzD,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,aAAa,EAAE,eAAe,CAAC,qBAAqB,CAAC,CAAC;QACzG,OAAO,cAAc,KAAK,SAAS,CAAC;IACtC,CAAC;IAAA,CAAC;IAEF;;;;;;OAMG;IACO,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,OAAsB,EAAE,aAAsB;QACxF,MAAM,KAAK,GAAG,aAAa,IAAI,iBAAiB,CAAC,WAAW,CAAC;QAC7D,OAAO,IAAI,CAAC,eAAe,CAAmB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACvF,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,OAAsB,EAAE,aAAsB;QACtF,MAAM,KAAK,GAAG,aAAa,IAAI,iBAAiB,CAAC,UAAU,CAAC;QAC5D,OAAO,IAAI,CAAC,eAAe,CAAa,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,OAAsB,EAAE,aAAsB;QAC7F,MAAM,KAAK,GAAG,aAAa,IAAI,iBAAiB,CAAC,sBAAsB,CAAC;QACxE,OAAO,IAAI,CAAC,eAAe,CAAyB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,CAAC,CAAC;IACnG,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,yBAAyB,CAAC,MAAc,EAAE,OAAsB,EAAE,aAAsB;QACtG,MAAM,KAAK,GAAG,aAAa,IAAI,iBAAiB,CAAC,oBAAoB,CAAC;QACtE,OAAO,IAAI,CAAC,eAAe,CAA4B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,sBAAsB,CAAC,CAAC;IACzG,CAAC;IAGD;;;;;;OAMG;IACO,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,OAAsB,EAAE,aAAsB;QACvF,MAAM,KAAK,GAAG,aAAa,IAAI,iBAAiB,CAAC,WAAW,CAAC;QAC7D,OAAO,IAAI,CAAC,eAAe,CAAmB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IACvF,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,mBAAmB,CAAC,MAAc,EAAE,OAAsB;QACxE,OAAO,IAAI,CAAC,eAAe,CAAsB,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC9H,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,qBAAqB,CAAC,MAAc,EAAE,OAAsB;QAC1E,OAAO,IAAI,CAAC,eAAe,CAAwB,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,kBAAkB,CAAC,CAAC;IACpI,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,eAAe,CAAC,MAAc,EAAE,OAAsB;QACpE,OAAO,IAAI,CAAC,eAAe,CAAmB,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,CAAC;IACrH,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,QAAQ,CAAC,MAAc,EAAE,OAAsB;QAC7D,OAAO,IAAI,CAAC,eAAe,CAAsB,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1G,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,gBAAgB,CAAC,MAAc,EAAE,OAAsB;QACrE,OAAO,IAAI,CAAC,eAAe,CAAoB,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,cAAc,CAAC,CAAC;IACxH,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,YAAY,CAAC,MAAc,EAAE,OAAsB;QACjE,OAAO,IAAI,CAAC,eAAe,CAAgB,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,CAAC;IAC5G,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,cAAc,CAAC,MAAc,EAAE,OAAsB;QACnE,OAAO,IAAI,CAAC,eAAe,CAAkB,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;IAClH,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,aAAa,CAAC,MAAc,EAAE,OAAsB;QAClE,OAAO,IAAI,CAAC,eAAe,CAAkB,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,CAAC;IAClH,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,UAAU,CAAC,MAAc,EAAE,OAAsB;QAC/D,OAAO,IAAI,CAAC,eAAe,CAAwB,OAAO,EAAE,MAAM,EAAE,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;IAChH,CAAC;IAED;;;OAGG;IACO,KAAK,CAAC,eAAe;QAC7B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAgB,YAAY,CAAC,eAAe,CAAC,CAAC;QACxF,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,CACnC;YACE,KAAK,EAAE,SAAS,CAAC,KAAK;YACtB,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YAC1E,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,oBAAoB,CAAC;SAC/E,CACF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACO,KAAK,CAAC,iBAAiB,CAAC,SAAoB,EAAE,OAAsB;QAC5E,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC9B,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,IAAI,CAAC,YAAY,CAAgB,YAAY,CAAC,eAAe,EAAE;YACtF,UAAU,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE;YAC1C,KAAK,EAAE,CAAC;SACV,CAAC,CAAC;QAEH,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC;QAC9C,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,8BAA8B,SAAS,CAAC,IAAI,OAAO,aAAa,IAAI,EAAE;YACrG,UAAU,EAAE,SAAS,CAAC,IAAI;YAC1B,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS;YACZ,OAAO,SAAS,CAAC;QAEnB,MAAM,cAAc,GAAuB,EAAE,CAAC;QAC9C,MAAM,SAAS,GAAG,KAAK,EAAE,GAAc,EAAE,EAAE;YACzC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACxD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE1B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,KAAK,MAAM,cAAc,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;oBAC7C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;wBAC1E,MAAM,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,cAAc,CAAC,IAAI,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBAC7F,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC,CAAC;QAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,UAAkB,EAAE,QAAwB,EAAE,EAAE;YACtE,IAAI,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YAC7E,IAAI,CAAC,UAAU,EAAE,CAAC;gBAChB,UAAU,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,UAAU,QAAQ,CAAC,CAAC,CAAC;YAC7E,CAAC;YAED,IAAI,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC;YAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;gBACX,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;YACnD,CAAC;YAED,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAChD,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC,CAAC;QAEF,MAAM,OAAO,GAAG,CAAC,IAAY,EAAE,KAAU,EAAE,EAAE;YAC3C,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;gBACnB,OAAO,SAAS,CAAC;YACnB,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC;QAEF,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC;QAE3B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnF,MAAM,oBAAoB,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAExG,OAAO,cAAc,CAAC;IACxB,CAAC;IAEO,KAAK,CAAC,eAAe,CAA+B,OAAsB,EAAE,UAAkB,EAAE,KAAa,EAAE,UAAkB;QACvI,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAgB,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;QAE/F,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE,oBAAoB,UAAU,cAAc,UAAU,OAAO,aAAa,IAAI,EAAE;YAC/G,UAAU;YACV,SAAS,EAAE,QAAQ,CAAC,MAAM;YAC1B,QAAQ,EAAE,UAAU;YACpB,QAAQ,EAAE,aAAa;SACxB,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YACvB,OAAO,EAAE,CAAC;QAEZ,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAsB,EAAE,EAAE;YACpD,OAAO,QAAQ,KAAK,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnF,OAAO,MAAM,YAAY,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,EAAE,WAAW,CAAgB,IAAI,EAAE,CAAA;IACjG,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,SAAoB,EAAE,OAAsB;QACtE,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,YAAY,CAAY,iBAAiB,CAAC,WAAW,EAAE,EAAE,UAAU,EAAE,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACrI,MAAM,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,SAAS,KAAK,SAAS;YACzB,OAAO,SAAS,CAAC;QAEnB,mFAAmF;QACnF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAgB,CAAC;QAC3D,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAChB,MAAc,CAAC,KAAK,GAAI,MAAM,CAAC,KAAa,CAAC,GAAG,CAAC,CAAC,OAAsB,EAAE,EAAE,GAAG,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1G,CAAC;QAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACnF,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACjD,CAAC;IAEO,KAAK,CAAC,4BAA4B,CAAC,SAAoB,EAAE,OAAsB;QACrF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAuB,CAAC;QAC1F,IAAI,CAAC,MAAM;YACT,OAAO,SAAS,CAAC;QAEnB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;QAClD,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACzC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACvC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACxC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YAC9C,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACvD,IAAI,CAAC,mBAAmB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACjD,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACnD,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YAC7C,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YACtC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YAC9C,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YAC5C,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YAC1C,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;YAC3C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC;SACzC,CAAC,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE;YACtB,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YAC7E,YAAY,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;gBAClC,IAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;oBACpB,iHAAiH;oBACjH,yEAAyE;oBACzE,MAAM,IAAI,KAAK,CAAC,iDAAiD,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrF,CAAC;gBACD,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;YACtC,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AAED,SAAS,oBAAoB,CAAC,aAAqB;IACjD,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,aAAa,CAAC,EAAE,CAAC;AAC7D,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,UAAkB,EAAE,QAAkC,EAAE,eAAqC,EAAE,WAAiC;IAClK,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO;IACT,CAAC;IAED,MAAM,gBAAgB,GAAG,KAAK,EAAE,WAAgD,EAAE,EAAE;QAClF,IAAI,CAAC,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC;YACxC,OAAO;QAET,KAAK,IAAI,KAAK,GAAG,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC;YACrD,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;YACzC,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YACzC,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAElG,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YAC9F,MAAM,eAAe,CAAC,WAAW,CAAC,MAAM,EAAE;gBACxC,GAAG,UAAU;gBACb,IAAI,EAAE,UAAU,CAAC,IAAI;gBACrB,cAAc,EAAE,UAAU,CAAC,cAAc;gBACzC,SAAS,EAAE,aAAa;aACzB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAClF,MAAM,eAAe,CAAC,UAAU,EAAE;YAChC,GAAG,UAAU;YACb,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,cAAc,EAAE,UAAU,CAAC,cAAc;YACzC,MAAM,EAAE,OAAO,CAAC,MAAM;gBACpB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,OAAO,GAAG,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC1E,CAAC,CAAC,SAAS;SACd,CAAC,CAAC;QAEH,MAAM,gBAAgB,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QAE5C,KAAK,MAAM,QAAQ,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;YAC5C,MAAM,SAAS,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;YACvF,MAAM,eAAe,CAAC,QAAQ,CAAC,MAAM,EAAE;gBACrC,GAAG,SAAS;gBACZ,IAAI,EAAE,SAAS,CAAC,IAAI;gBACpB,cAAc,EAAE,SAAS,CAAC,cAAc;aACzC,CAAC,CAAC;YACH,MAAM,gBAAgB,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { SchemaContext } from \"../Context\";\r\nimport { ConstantProps, CustomAttributeClassProps, EntityClassProps, EnumerationProps, InvertedUnitProps, KindOfQuantityProps, MixinProps,\r\n PhenomenonProps, PropertyCategoryProps, RelationshipClassProps, SchemaItemFormatProps, SchemaItemProps, SchemaItemUnitProps, SchemaProps,\r\n StructClassProps, UnitSystemProps } from \"../Deserialization/JsonProps\";\r\nimport { SchemaItemType, SchemaMatchType } from \"../ECObjects\";\r\nimport { SchemaInfo, WithSchemaKey } from \"../Interfaces\";\r\nimport { SchemaKey } from \"../SchemaKey\";\r\nimport { FullSchemaQueries } from \"./FullSchemaQueries\";\r\nimport { IncrementalSchemaLocater, SchemaLocaterOptions } from \"./IncrementalSchemaLocater\";\r\nimport { SchemaItemQueries } from \"./SchemaItemQueries\";\r\nimport { SchemaParser } from \"./SchemaParser\";\r\nimport { ecsqlQueries } from \"./SchemaStubQueries\";\r\n\r\ninterface SchemaItemInfo {\r\n readonly name: string;\r\n readonly schemaItemType: SchemaItemType;\r\n}\r\n\r\ninterface SchemaInfoRow {\r\n readonly name: string;\r\n readonly version: string;\r\n readonly alias: string;\r\n readonly references: string;\r\n}\r\n\r\ninterface SchemaStubRow {\r\n readonly name: string;\r\n readonly version: string;\r\n readonly alias: string;\r\n readonly displayLabel: string;\r\n readonly description: string;\r\n readonly references: string;\r\n readonly items: string;\r\n}\r\n\r\ninterface BaseClassStubRow {\r\n readonly schema: string;\r\n readonly name: string;\r\n readonly schemaItemType: string;\r\n readonly modifier: number;\r\n}\r\n\r\ninterface SchemaItemStubRow {\r\n readonly name: string;\r\n readonly schemaItemType: string;\r\n readonly modifier?: number;\r\n readonly baseClasses?: Array<BaseClassStubRow>;\r\n readonly mixins?: Array<{\r\n readonly schema: string,\r\n readonly name: string;\r\n readonly schemaItemType: string;\r\n readonly modifier: number;\r\n readonly baseClasses?: Array<BaseClassStubRow>\r\n }>;\r\n}\r\n\r\ninterface SchemaRow {\r\n schema: string\r\n}\r\n\r\ninterface SchemaItemRow {\r\n item: string | SchemaItemProps;\r\n}\r\n\r\ntype AddSchemaItemHandler = <T extends SchemaItemInfo>(schemaName: string, itemStub: T) => Promise<void>;\r\n\r\ntype MutableSchemaProps = {\r\n -readonly [K in keyof SchemaProps]: SchemaProps[K];\r\n};\r\n\r\ninterface QueryParameters {\r\n [parameterName: string]: string | number;\r\n}\r\n\r\nconst LOGGER_CATEGORY = \"IncrementalSchemaLoading.Performance\";\r\n\r\n/**\r\n * Query options used by the ECSqlSchemaLocater.\r\n * @internal\r\n */\r\nexport interface ECSqlQueryOptions {\r\n parameters?: QueryParameters;\r\n limit?: number;\r\n}\r\n\r\n/**\r\n * Defines the [[ECSqlSchemaLocater]] options which determine how each\r\n * schema is to be loaded. All options are optional.\r\n * @internal\r\n */\r\nexport interface ECSqlSchemaLocaterOptions extends SchemaLocaterOptions {\r\n /** Query for Schemas using multiple queries. Defaults to false. */\r\n readonly useMultipleQueries?: boolean;\r\n}\r\n\r\n/**\r\n * An abstract [[IncrementalSchemaLocater]] implementation for loading\r\n * EC [Schema] instances from an iModelDb using ECSql queries.\r\n * @internal\r\n */\r\nexport abstract class ECSqlSchemaLocater extends IncrementalSchemaLocater {\r\n /**\r\n * Gets the [[ECSqlSchemaLocaterOptions]] used by this locater.\r\n */\r\n protected override get options(): ECSqlSchemaLocaterOptions {\r\n return super.options as ECSqlSchemaLocaterOptions;\r\n }\r\n\r\n /**\r\n * Initializes a new ECSqlSchemaLocater instance.\r\n * @param options The options used by this Schema locater.\r\n */\r\n constructor(options?: ECSqlSchemaLocaterOptions) {\r\n super(options);\r\n }\r\n\r\n /**\r\n * Executes the given ECSql query and returns the resulting rows.\r\n * @param query The ECSql query to execute.\r\n * @param options Optional arguments to control the query result.\r\n * @returns A promise that resolves to the resulting rows.\r\n */\r\n protected abstract executeQuery<TRow>(query: string, options?: ECSqlQueryOptions): Promise<ReadonlyArray<TRow>>;\r\n\r\n /**\r\n * Gets the [[SchemaProps]] for the given schema key.\r\n * @param schemaKey The schema key of the schema to be resolved.\r\n */\r\n protected abstract getSchemaProps(schemaKey: SchemaKey): Promise<SchemaProps | undefined>\r\n\r\n /**\r\n * Gets the [[SchemaProps]] for the given schema key. This is the full schema json with all elements that are defined\r\n * in the schema. The schema locater calls this after the stub has been loaded to fully load the schema in the background.\r\n * @param schemaKey The [[SchemaKey]] of the schema to be resolved.\r\n * @param context The [[SchemaContext]] to use for resolving references.\r\n * @internal\r\n */\r\n protected async getSchemaJson(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n // If the meta schema is an earlier version than 4.0.3, we can't use the ECSql query interface to get the schema\r\n // information required to load the schema entirely. In this case, we fallback to use the ECSchema RPC interface\r\n // to fetch the whole schema json.\r\n if (!await this.supportPartialSchemaLoading(context))\r\n return this.getSchemaProps(schemaKey);\r\n\r\n const queryStart = Date.now();\r\n const schemaProps = this.options.useMultipleQueries\r\n ? await this.getFullSchemaMultipleQueries(schemaKey, context)\r\n : await this.getFullSchema(schemaKey, context);\r\n\r\n const queryDuration = Date.now() - queryStart;\r\n Logger.logTrace(LOGGER_CATEGORY, `Recieved SchemaProps for ${schemaKey.name} in ${queryDuration}ms`, {\r\n schemaName: schemaKey.name,\r\n queryMode: this.options.useMultipleQueries ? \"parallel\" : \"single\",\r\n duration: queryDuration,\r\n });\r\n\r\n return schemaProps;\r\n };\r\n\r\n /**\r\n * Gets the [[SchemaProps]] without schemaItems for the given schema name.\r\n * @param schemaName The name of the Schema.\r\n * @param context The [[SchemaContext]] to use for resolving references.\r\n * @returns\r\n * @internal\r\n */\r\n private async getSchemaNoItems(schemaName: string, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n const schemaRows = await this.executeQuery<SchemaRow>(FullSchemaQueries.schemaNoItemsQuery, { parameters: { schemaName } });\r\n const schemaRow = schemaRows[0];\r\n if (schemaRow === undefined)\r\n return undefined;\r\n\r\n const schema = JSON.parse(schemaRow.schema) as SchemaProps;\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n return SchemaParser.parse(schema, schemaInfos);\r\n }\r\n\r\n /**\r\n * Checks if the [[SchemaContext]] has the right Meta Schema version to support the incremental schema loading.\r\n * @param context The schema context to lookup the meta schema.\r\n * @returns true if the context has a supported meta schema version, false otherwise.\r\n */\r\n protected async supportPartialSchemaLoading(context: SchemaContext): Promise<boolean> {\r\n const metaSchemaKey = new SchemaKey(\"ECDbMeta\", 4, 0, 3);\r\n const metaSchemaInfo = await context.getSchemaInfo(metaSchemaKey, SchemaMatchType.LatestWriteCompatible);\r\n return metaSchemaInfo !== undefined;\r\n };\r\n\r\n /**\r\n * Gets all the Schema's Entity classes as [[EntityClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The [[SchemaContext]] to which the schema belongs.\r\n * @returns A promise that resolves to a EntityClassProps array. Maybe empty of no entities are found.\r\n * @internal\r\n */\r\n protected async getEntities(schema: string, context: SchemaContext, queryOverride?: string): Promise<EntityClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.entityQuery;\r\n return this.querySchemaItem<EntityClassProps>(context, schema, query, \"EntityClass\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Mixin classes as [[MixinProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a MixinProps array. Maybe empty of no entities are found.\r\n * @internal\r\n */\r\n protected async getMixins(schema: string, context: SchemaContext, queryOverride?: string): Promise<MixinProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.mixinQuery;\r\n return this.querySchemaItem<MixinProps>(context, schema, query, \"Mixin\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Relationship classes as [[RelationshipClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a RelationshipClassProps array. Maybe empty if no items are found.\r\n * @internal\r\n */\r\n protected async getRelationships(schema: string, context: SchemaContext, queryOverride?: string): Promise<RelationshipClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.relationshipClassQuery;\r\n return this.querySchemaItem<RelationshipClassProps>(context, schema, query, \"RelationshipClass\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's CustomAttributeClass items as [[CustomAttributeClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a CustomAttributeClassProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getCustomAttributeClasses(schema: string, context: SchemaContext, queryOverride?: string): Promise<CustomAttributeClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.customAttributeQuery;\r\n return this.querySchemaItem<CustomAttributeClassProps>(context, schema, query, \"CustomAttributeClass\");\r\n }\r\n\r\n\r\n /**\r\n * Gets all the Schema's StructClass items as [[StructClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a StructClassProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getStructs(schema: string, context: SchemaContext, queryOverride?: string): Promise<StructClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.structQuery;\r\n return this.querySchemaItem<StructClassProps>(context, schema, query, \"StructClass\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's KindOfQuantity items as [[KindOfQuantityProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a KindOfQuantityProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getKindOfQuantities(schema: string, context: SchemaContext): Promise<KindOfQuantityProps[]> {\r\n return this.querySchemaItem<KindOfQuantityProps>(context, schema, SchemaItemQueries.kindOfQuantity(true), \"KindOfQuantity\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's PropertyCategory items as [[PropertyCategoryProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a PropertyCategoryProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getPropertyCategories(schema: string, context: SchemaContext): Promise<PropertyCategoryProps[]> {\r\n return this.querySchemaItem<PropertyCategoryProps>(context, schema, SchemaItemQueries.propertyCategory(true), \"PropertyCategory\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Enumeration items as [[EnumerationProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a EnumerationProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getEnumerations(schema: string, context: SchemaContext): Promise<EnumerationProps[]> {\r\n return this.querySchemaItem<EnumerationProps>(context, schema, SchemaItemQueries.enumeration(true), \"Enumeration\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Unit items as [[SchemaItemUnitProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a SchemaItemUnitProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getUnits(schema: string, context: SchemaContext): Promise<SchemaItemUnitProps[]> {\r\n return this.querySchemaItem<SchemaItemUnitProps>(context, schema, SchemaItemQueries.unit(true), \"Unit\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's InvertedUnit items as [[InvertedUnitProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a InvertedUnitProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getInvertedUnits(schema: string, context: SchemaContext): Promise<InvertedUnitProps[]> {\r\n return this.querySchemaItem<InvertedUnitProps>(context, schema, SchemaItemQueries.invertedUnit(true), \"InvertedUnit\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Constant items as [[ConstantProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a ConstantProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getConstants(schema: string, context: SchemaContext): Promise<ConstantProps[]> {\r\n return this.querySchemaItem<ConstantProps>(context, schema, SchemaItemQueries.constant(true), \"Constant\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's UnitSystem items as [[UnitSystemProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a UnitSystemProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getUnitSystems(schema: string, context: SchemaContext): Promise<UnitSystemProps[]> {\r\n return this.querySchemaItem<UnitSystemProps>(context, schema, SchemaItemQueries.unitSystem(true), \"UnitSystem\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Phenomenon items as [[PhenomenonProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a PhenomenonProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getPhenomenon(schema: string, context: SchemaContext): Promise<PhenomenonProps[]> {\r\n return this.querySchemaItem<PhenomenonProps>(context, schema, SchemaItemQueries.phenomenon(true), \"Phenomenon\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Format items as [[SchemaItemFormatProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a SchemaItemFormatProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getFormats(schema: string, context: SchemaContext): Promise<SchemaItemFormatProps[]> {\r\n return this.querySchemaItem<SchemaItemFormatProps>(context, schema, SchemaItemQueries.format(true), \"Format\");\r\n }\r\n\r\n /**\r\n * Gets [[SchemaInfo]] objects for all schemas including their direct schema references.\r\n * @internal\r\n */\r\n protected async loadSchemaInfos(): Promise<ReadonlyArray<SchemaInfo>> {\r\n const schemaRows = await this.executeQuery<SchemaInfoRow>(ecsqlQueries.schemaInfoQuery);\r\n return schemaRows.map((schemaRow) => (\r\n {\r\n alias: schemaRow.alias,\r\n schemaKey: SchemaKey.parseString(`${schemaRow.name}.${schemaRow.version}`),\r\n references: Array.from(JSON.parse(schemaRow.references), parseSchemaReference),\r\n }\r\n ));\r\n }\r\n\r\n /**\r\n * Gets the [[SchemaProps]] to create the basic schema skeleton. Depending on which options are set, the schema items or class hierarchy\r\n * can be included in the initial fetch.\r\n * @param schemaKey The [[SchemaKey]] of the schema to be resolved.\r\n * @returns A promise that resolves to the schema partials, which is an array of [[SchemaProps]].\r\n * @internal\r\n */\r\n protected async getSchemaPartials(schemaKey: SchemaKey, context: SchemaContext): Promise<ReadonlyArray<SchemaProps> | undefined> {\r\n const queryStart = Date.now();\r\n const [schemaRow] = await this.executeQuery<SchemaStubRow>(ecsqlQueries.schemaStubQuery, {\r\n parameters: { schemaName: schemaKey.name },\r\n limit: 1\r\n });\r\n\r\n const queryDuration = Date.now() - queryStart;\r\n Logger.logTrace(LOGGER_CATEGORY, `Recieved PartialSchema for ${schemaKey.name} in ${queryDuration}ms`, {\r\n schemaName: schemaKey.name,\r\n duration: queryDuration,\r\n });\r\n\r\n if (!schemaRow)\r\n return undefined;\r\n\r\n const schemaPartials: Array<SchemaProps> = [];\r\n const addSchema = async (key: SchemaKey) => {\r\n const stub = await this.createSchemaProps(key, context);\r\n schemaPartials.push(stub);\r\n\r\n if (stub.references) {\r\n for (const referenceProps of stub.references) {\r\n if (!schemaPartials.some((schema) => schema.name === referenceProps.name)) {\r\n await addSchema(SchemaKey.parseString(`${referenceProps.name}.${referenceProps.version}`));\r\n }\r\n }\r\n }\r\n\r\n return stub;\r\n };\r\n\r\n const addItems = async (schemaName: string, itemInfo: SchemaItemInfo) => {\r\n let schemaStub = schemaPartials.find((schema) => schema.name === schemaName);\r\n if (!schemaStub) {\r\n schemaStub = await addSchema(SchemaKey.parseString(`${schemaName}.0.0.0`));\r\n }\r\n\r\n let items = schemaStub.items;\r\n if (!items) {\r\n Object.assign(schemaStub, items = { items: {} });\r\n }\r\n\r\n const existingItem = items[itemInfo.name] || {};\r\n Object.assign(items, { [itemInfo.name]: Object.assign(existingItem, itemInfo) });\r\n };\r\n\r\n const reviver = (_key: string, value: any) => {\r\n if (value === null) {\r\n return undefined;\r\n }\r\n return value;\r\n };\r\n\r\n await addSchema(schemaKey);\r\n\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n await parseSchemaItemStubs(schemaKey.name, JSON.parse(schemaRow.items, reviver), addItems, schemaInfos);\r\n\r\n return schemaPartials;\r\n }\r\n\r\n private async querySchemaItem<TRow extends SchemaItemProps>(context: SchemaContext, schemaName: string, query: string, schemaType: string): Promise<Array<TRow>> {\r\n const start = Date.now();\r\n const itemRows = await this.executeQuery<SchemaItemRow>(query, { parameters: { schemaName } });\r\n\r\n const queryDuration = Date.now() - start;\r\n Logger.logTrace(LOGGER_CATEGORY, `Recieved rows of ${schemaType} items for ${schemaName} in ${queryDuration}ms`, {\r\n schemaName,\r\n itemCount: itemRows.length,\r\n itemType: schemaType,\r\n duration: queryDuration,\r\n });\r\n\r\n if (itemRows.length === 0)\r\n return [];\r\n\r\n const items = itemRows.map((itemRow: SchemaItemRow) => {\r\n return \"string\" === typeof itemRow.item ? JSON.parse(itemRow.item) : itemRow.item;\r\n });\r\n\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n return await SchemaParser.parseSchemaItems(items, schemaName, schemaInfos) as Array<TRow> ?? []\r\n }\r\n\r\n private async getFullSchema(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n const schemaRows = await this.executeQuery<SchemaRow>(FullSchemaQueries.schemaQuery, { parameters: { schemaName: schemaKey.name } });\r\n const schemaRow = schemaRows[0];\r\n if (schemaRow === undefined)\r\n return undefined;\r\n\r\n // Map SchemaItemRow array, [{item: SchemaItemProps}], to array of SchemaItemProps.\r\n const schema = JSON.parse(schemaRow.schema) as SchemaProps;\r\n if (schema.items) {\r\n (schema as any).items = (schema.items as any).map((itemRow: SchemaItemRow) => { return itemRow.item; });\r\n }\r\n\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n return SchemaParser.parse(schema, schemaInfos);\r\n }\r\n\r\n private async getFullSchemaMultipleQueries(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n const schema = await this.getSchemaNoItems(schemaKey.name, context) as MutableSchemaProps;\r\n if (!schema)\r\n return undefined;\r\n\r\n const items = schema.items || (schema.items = {});\r\n await Promise.all([\r\n this.getEntities(schemaKey.name, context),\r\n this.getMixins(schemaKey.name, context),\r\n this.getStructs(schemaKey.name, context),\r\n this.getRelationships(schemaKey.name, context),\r\n this.getCustomAttributeClasses(schemaKey.name, context),\r\n this.getKindOfQuantities(schemaKey.name, context),\r\n this.getPropertyCategories(schemaKey.name, context),\r\n this.getEnumerations(schemaKey.name, context),\r\n this.getUnits(schemaKey.name, context),\r\n this.getInvertedUnits(schemaKey.name, context),\r\n this.getUnitSystems(schemaKey.name, context),\r\n this.getConstants(schemaKey.name, context),\r\n this.getPhenomenon(schemaKey.name, context),\r\n this.getFormats(schemaKey.name, context)\r\n ]).then((itemResults) => {\r\n const flatItemList = itemResults.reduce((acc, result) => acc.concat(result));\r\n flatItemList.forEach((schemaItem) => {\r\n if(!schemaItem.name) {\r\n // This should never be happen, as we query the schema items by name from the database, but since the SchemaProps\r\n // have name optional, we need the check here to make the compiler happy.\r\n throw new Error(`SchemaItem with no name encountered in schema ${schemaKey.name}`);\r\n }\r\n items[schemaItem.name] = schemaItem;\r\n });\r\n });\r\n\r\n return schema;\r\n }\r\n}\r\n\r\nfunction parseSchemaReference(referenceName: string): WithSchemaKey {\r\n return { schemaKey: SchemaKey.parseString(referenceName) };\r\n}\r\n\r\nasync function parseSchemaItemStubs(schemaName: string, itemRows: Array<SchemaItemStubRow>, addItemsHandler: AddSchemaItemHandler, schemaInfos: Iterable<SchemaInfo>) {\r\n if (!itemRows || itemRows.length === 0) {\r\n return;\r\n }\r\n\r\n const parseBaseClasses = async (baseClasses: Array<BaseClassStubRow> | undefined) => {\r\n if (!baseClasses || baseClasses.length < 2)\r\n return;\r\n\r\n for (let index = baseClasses.length - 1; index >= 0;) {\r\n const currentItem = baseClasses[index--];\r\n const baseClassItem = baseClasses[index];\r\n const baseClassName = baseClassItem ? `${baseClassItem.schema}.${baseClassItem.name}` : undefined;\r\n\r\n const schemaItem = await SchemaParser.parseItem(currentItem, currentItem.schema, schemaInfos);\r\n await addItemsHandler(currentItem.schema, {\r\n ...schemaItem,\r\n name: schemaItem.name,\r\n schemaItemType: schemaItem.schemaItemType,\r\n baseClass: baseClassName,\r\n });\r\n }\r\n };\r\n\r\n for (const itemRow of itemRows) {\r\n const schemaItem = await SchemaParser.parseItem(itemRow, schemaName, schemaInfos);\r\n await addItemsHandler(schemaName, {\r\n ...schemaItem,\r\n name: schemaItem.name,\r\n schemaItemType: schemaItem.schemaItemType,\r\n mixins: itemRow.mixins\r\n ? itemRow.mixins.map(mixin => { return `${mixin.schema}.${mixin.name}`; })\r\n : undefined,\r\n });\r\n\r\n await parseBaseClasses(itemRow.baseClasses);\r\n\r\n for (const mixinRow of itemRow.mixins || []) {\r\n const mixinItem = await SchemaParser.parseItem(mixinRow, mixinRow.schema, schemaInfos);\r\n await addItemsHandler(mixinRow.schema, {\r\n ...mixinItem,\r\n name: mixinItem.name,\r\n schemaItemType: mixinItem.schemaItemType,\r\n });\r\n await parseBaseClasses(mixinRow.baseClasses);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"ECSqlSchemaLocater.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/ECSqlSchemaLocater.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { Logger } from \"@itwin/core-bentley\";\r\nimport { SchemaContext } from \"../Context\";\r\nimport { ConstantProps, CustomAttributeClassProps, EntityClassProps, EnumerationProps, InvertedUnitProps, KindOfQuantityProps, MixinProps,\r\n PhenomenonProps, PropertyCategoryProps, RelationshipClassProps, SchemaItemFormatProps, SchemaItemProps, SchemaItemUnitProps, SchemaProps,\r\n StructClassProps, UnitSystemProps } from \"../Deserialization/JsonProps\";\r\nimport { SchemaItemType, SchemaMatchType } from \"../ECObjects\";\r\nimport { SchemaInfo, WithSchemaKey } from \"../Interfaces\";\r\nimport { SchemaKey } from \"../SchemaKey\";\r\nimport { FullSchemaQueries } from \"./FullSchemaQueries\";\r\nimport { IncrementalSchemaLocater, SchemaLocaterOptions } from \"./IncrementalSchemaLocater\";\r\nimport { SchemaItemQueries } from \"./SchemaItemQueries\";\r\nimport { SchemaParser } from \"./SchemaParser\";\r\nimport { ecsqlQueries } from \"./SchemaStubQueries\";\r\n\r\ninterface SchemaItemInfo {\r\n readonly name: string;\r\n readonly schemaItemType: SchemaItemType;\r\n}\r\n\r\ninterface SchemaInfoRow {\r\n readonly name: string;\r\n readonly version: string;\r\n readonly alias: string;\r\n readonly label: string;\r\n readonly description: string; \r\n readonly references: string;\r\n}\r\n\r\ninterface SchemaStubRow {\r\n readonly item: string;\r\n}\r\n\r\ninterface BaseClassStubRow {\r\n readonly schema: string;\r\n readonly name: string;\r\n readonly schemaItemType: string;\r\n readonly modifier: number;\r\n}\r\n\r\ninterface SchemaItemStubRow {\r\n readonly name: string;\r\n readonly schemaItemType: string;\r\n readonly modifier?: number;\r\n readonly baseClasses?: Array<BaseClassStubRow>;\r\n readonly mixins?: Array<{\r\n readonly schema: string,\r\n readonly name: string;\r\n readonly schemaItemType: string;\r\n readonly modifier: number;\r\n readonly baseClasses?: Array<BaseClassStubRow>\r\n }>;\r\n}\r\n\r\ninterface SchemaRow {\r\n schema: string\r\n}\r\n\r\ninterface SchemaItemRow {\r\n item: string | SchemaItemProps;\r\n}\r\n\r\ntype AddSchemaItemHandler = <T extends SchemaItemInfo>(schemaName: string, itemStub: T) => Promise<void>;\r\n\r\ntype MutableSchemaProps = {\r\n -readonly [K in keyof SchemaProps]: SchemaProps[K];\r\n};\r\n\r\ninterface QueryParameters {\r\n [parameterName: string]: string | number;\r\n}\r\n\r\nconst LOGGER_CATEGORY = \"IncrementalSchemaLoading.Performance\";\r\n\r\n/**\r\n * Query options used by the ECSqlSchemaLocater.\r\n * @internal\r\n */\r\nexport interface ECSqlQueryOptions {\r\n parameters?: QueryParameters;\r\n limit?: number;\r\n}\r\n\r\n/**\r\n * Defines the [[ECSqlSchemaLocater]] options which determine how each\r\n * schema is to be loaded. All options are optional.\r\n * @internal\r\n */\r\nexport interface ECSqlSchemaLocaterOptions extends SchemaLocaterOptions {\r\n /** Query for Schemas using multiple queries. Defaults to false. */\r\n readonly useMultipleQueries?: boolean;\r\n}\r\n\r\n/**\r\n * An abstract [[IncrementalSchemaLocater]] implementation for loading\r\n * EC [Schema] instances from an iModelDb using ECSql queries.\r\n * @internal\r\n */\r\nexport abstract class ECSqlSchemaLocater extends IncrementalSchemaLocater {\r\n /**\r\n * Gets the [[ECSqlSchemaLocaterOptions]] used by this locater.\r\n */\r\n protected override get options(): ECSqlSchemaLocaterOptions {\r\n return super.options as ECSqlSchemaLocaterOptions;\r\n }\r\n\r\n /**\r\n * Initializes a new ECSqlSchemaLocater instance.\r\n * @param options The options used by this Schema locater.\r\n */\r\n constructor(options?: ECSqlSchemaLocaterOptions) {\r\n super(options);\r\n }\r\n\r\n /**\r\n * Executes the given ECSql query and returns the resulting rows.\r\n * @param query The ECSql query to execute.\r\n * @param options Optional arguments to control the query result.\r\n * @returns A promise that resolves to the resulting rows.\r\n */\r\n protected abstract executeQuery<TRow>(query: string, options?: ECSqlQueryOptions): Promise<ReadonlyArray<TRow>>;\r\n\r\n /**\r\n * Gets the [[SchemaProps]] for the given schema key.\r\n * @param schemaKey The schema key of the schema to be resolved.\r\n */\r\n protected abstract getSchemaProps(schemaKey: SchemaKey): Promise<SchemaProps | undefined>\r\n\r\n /**\r\n * Gets the [[SchemaProps]] for the given schema key. This is the full schema json with all elements that are defined\r\n * in the schema. The schema locater calls this after the stub has been loaded to fully load the schema in the background.\r\n * @param schemaKey The [[SchemaKey]] of the schema to be resolved.\r\n * @param context The [[SchemaContext]] to use for resolving references.\r\n * @internal\r\n */\r\n protected async getSchemaJson(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n // If the meta schema is an earlier version than 4.0.3, we can't use the ECSql query interface to get the schema\r\n // information required to load the schema entirely. In this case, we fallback to use the ECSchema RPC interface\r\n // to fetch the whole schema json.\r\n if (!await this.supportPartialSchemaLoading(context))\r\n return this.getSchemaProps(schemaKey);\r\n\r\n const queryStart = Date.now();\r\n const schemaProps = this.options.useMultipleQueries\r\n ? await this.getFullSchemaMultipleQueries(schemaKey, context)\r\n : await this.getFullSchema(schemaKey, context);\r\n\r\n const queryDuration = Date.now() - queryStart;\r\n Logger.logTrace(LOGGER_CATEGORY, `Recieved SchemaProps for ${schemaKey.name} in ${queryDuration}ms`, {\r\n schemaName: schemaKey.name,\r\n queryMode: this.options.useMultipleQueries ? \"parallel\" : \"single\",\r\n duration: queryDuration,\r\n });\r\n\r\n return schemaProps;\r\n };\r\n\r\n /**\r\n * Gets the [[SchemaProps]] without schemaItems for the given schema name.\r\n * @param schemaName The name of the Schema.\r\n * @param context The [[SchemaContext]] to use for resolving references.\r\n * @returns\r\n * @internal\r\n */\r\n private async getSchemaNoItems(schemaName: string, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n const schemaRows = await this.executeQuery<SchemaRow>(FullSchemaQueries.schemaNoItemsQuery, { parameters: { schemaName } });\r\n const schemaRow = schemaRows[0];\r\n if (schemaRow === undefined)\r\n return undefined;\r\n\r\n const schema = JSON.parse(schemaRow.schema) as SchemaProps;\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n return SchemaParser.parse(schema, schemaInfos);\r\n }\r\n\r\n /**\r\n * Checks if the [[SchemaContext]] has the right Meta Schema version to support the incremental schema loading.\r\n * @param context The schema context to lookup the meta schema.\r\n * @returns true if the context has a supported meta schema version, false otherwise.\r\n */\r\n protected async supportPartialSchemaLoading(context: SchemaContext): Promise<boolean> {\r\n const metaSchemaKey = new SchemaKey(\"ECDbMeta\", 4, 0, 3);\r\n const metaSchemaInfo = await context.getSchemaInfo(metaSchemaKey, SchemaMatchType.LatestWriteCompatible);\r\n return metaSchemaInfo !== undefined;\r\n };\r\n\r\n /**\r\n * Gets all the Schema's Entity classes as [[EntityClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The [[SchemaContext]] to which the schema belongs.\r\n * @returns A promise that resolves to a EntityClassProps array. Maybe empty of no entities are found.\r\n * @internal\r\n */\r\n protected async getEntities(schema: string, context: SchemaContext, queryOverride?: string): Promise<EntityClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.entityQuery;\r\n return this.querySchemaItem<EntityClassProps>(context, schema, query, \"EntityClass\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Mixin classes as [[MixinProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a MixinProps array. Maybe empty of no entities are found.\r\n * @internal\r\n */\r\n protected async getMixins(schema: string, context: SchemaContext, queryOverride?: string): Promise<MixinProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.mixinQuery;\r\n return this.querySchemaItem<MixinProps>(context, schema, query, \"Mixin\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Relationship classes as [[RelationshipClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a RelationshipClassProps array. Maybe empty if no items are found.\r\n * @internal\r\n */\r\n protected async getRelationships(schema: string, context: SchemaContext, queryOverride?: string): Promise<RelationshipClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.relationshipClassQuery;\r\n return this.querySchemaItem<RelationshipClassProps>(context, schema, query, \"RelationshipClass\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's CustomAttributeClass items as [[CustomAttributeClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a CustomAttributeClassProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getCustomAttributeClasses(schema: string, context: SchemaContext, queryOverride?: string): Promise<CustomAttributeClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.customAttributeQuery;\r\n return this.querySchemaItem<CustomAttributeClassProps>(context, schema, query, \"CustomAttributeClass\");\r\n }\r\n\r\n\r\n /**\r\n * Gets all the Schema's StructClass items as [[StructClassProps]] JSON objects.\r\n * @param schemaName The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a StructClassProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getStructs(schema: string, context: SchemaContext, queryOverride?: string): Promise<StructClassProps[]> {\r\n const query = queryOverride ?? FullSchemaQueries.structQuery;\r\n return this.querySchemaItem<StructClassProps>(context, schema, query, \"StructClass\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's KindOfQuantity items as [[KindOfQuantityProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a KindOfQuantityProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getKindOfQuantities(schema: string, context: SchemaContext): Promise<KindOfQuantityProps[]> {\r\n return this.querySchemaItem<KindOfQuantityProps>(context, schema, SchemaItemQueries.kindOfQuantity(true), \"KindOfQuantity\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's PropertyCategory items as [[PropertyCategoryProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a PropertyCategoryProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getPropertyCategories(schema: string, context: SchemaContext): Promise<PropertyCategoryProps[]> {\r\n return this.querySchemaItem<PropertyCategoryProps>(context, schema, SchemaItemQueries.propertyCategory(true), \"PropertyCategory\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Enumeration items as [[EnumerationProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a EnumerationProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getEnumerations(schema: string, context: SchemaContext): Promise<EnumerationProps[]> {\r\n return this.querySchemaItem<EnumerationProps>(context, schema, SchemaItemQueries.enumeration(true), \"Enumeration\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Unit items as [[SchemaItemUnitProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a SchemaItemUnitProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getUnits(schema: string, context: SchemaContext): Promise<SchemaItemUnitProps[]> {\r\n return this.querySchemaItem<SchemaItemUnitProps>(context, schema, SchemaItemQueries.unit(true), \"Unit\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's InvertedUnit items as [[InvertedUnitProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a InvertedUnitProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getInvertedUnits(schema: string, context: SchemaContext): Promise<InvertedUnitProps[]> {\r\n return this.querySchemaItem<InvertedUnitProps>(context, schema, SchemaItemQueries.invertedUnit(true), \"InvertedUnit\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Constant items as [[ConstantProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a ConstantProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getConstants(schema: string, context: SchemaContext): Promise<ConstantProps[]> {\r\n return this.querySchemaItem<ConstantProps>(context, schema, SchemaItemQueries.constant(true), \"Constant\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's UnitSystem items as [[UnitSystemProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a UnitSystemProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getUnitSystems(schema: string, context: SchemaContext): Promise<UnitSystemProps[]> {\r\n return this.querySchemaItem<UnitSystemProps>(context, schema, SchemaItemQueries.unitSystem(true), \"UnitSystem\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Phenomenon items as [[PhenomenonProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a PhenomenonProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getPhenomenon(schema: string, context: SchemaContext): Promise<PhenomenonProps[]> {\r\n return this.querySchemaItem<PhenomenonProps>(context, schema, SchemaItemQueries.phenomenon(true), \"Phenomenon\");\r\n }\r\n\r\n /**\r\n * Gets all the Schema's Format items as [[SchemaItemFormatProps]] JSON objects.\r\n * @param schema The name of the Schema.\r\n * @param context The SchemaContext to which the schema belongs.\r\n * @returns A promise that resolves to a SchemaItemFormatProps array. Maybe empty if not items are found.\r\n * @internal\r\n */\r\n protected async getFormats(schema: string, context: SchemaContext): Promise<SchemaItemFormatProps[]> {\r\n return this.querySchemaItem<SchemaItemFormatProps>(context, schema, SchemaItemQueries.format(true), \"Format\");\r\n }\r\n\r\n /**\r\n * Gets [[SchemaInfo]] objects for all schemas including their direct schema references.\r\n * @internal\r\n */\r\n protected async loadSchemaInfos(): Promise<ReadonlyArray<SchemaInfo>> {\r\n const schemaRows = await this.executeQuery<SchemaInfoRow>(ecsqlQueries.schemaInfoQuery);\r\n return schemaRows.map((schemaRow) => (\r\n {\r\n alias: schemaRow.alias,\r\n description: schemaRow.description,\r\n label: schemaRow.label,\r\n schemaKey: SchemaKey.parseString(`${schemaRow.name}.${schemaRow.version}`),\r\n references: Array.from(JSON.parse(schemaRow.references), parseSchemaReference),\r\n }\r\n ));\r\n }\r\n\r\n /**\r\n * Gets the [[SchemaProps]] to create the basic schema skeleton. Depending on which options are set, the schema items or class hierarchy\r\n * can be included in the initial fetch.\r\n * @param schemaKey The [[SchemaKey]] of the schema to be resolved.\r\n * @returns A promise that resolves to the schema partials, which is an array of [[SchemaProps]].\r\n * @internal\r\n */\r\n protected async getSchemaPartials(schemaKey: SchemaKey, context: SchemaContext): Promise<ReadonlyArray<SchemaProps> | undefined> {\r\n const queryStart = Date.now();\r\n const itemRows = await this.executeQuery<SchemaStubRow>(ecsqlQueries.schemaStubQuery, {\r\n parameters: { schemaName: schemaKey.name }\r\n });\r\n\r\n const queryDuration = Date.now() - queryStart;\r\n Logger.logTrace(LOGGER_CATEGORY, `Recieved PartialSchema for ${schemaKey.name} in ${queryDuration}ms`, {\r\n schemaName: schemaKey.name,\r\n itemCount: itemRows.length,\r\n duration: queryDuration,\r\n });\r\n\r\n if (itemRows.length === 0)\r\n return undefined;\r\n\r\n const schemaPartials: Array<SchemaProps> = [];\r\n const addSchema = async (key: SchemaKey) => {\r\n const stub = await this.createSchemaProps(key, context);\r\n schemaPartials.push(stub);\r\n\r\n if (stub.references) {\r\n for (const referenceProps of stub.references) {\r\n if (!schemaPartials.some((schema) => schema.name === referenceProps.name)) {\r\n await addSchema(SchemaKey.parseString(`${referenceProps.name}.${referenceProps.version}`));\r\n }\r\n }\r\n }\r\n\r\n return stub;\r\n };\r\n\r\n const addItems = async (schemaName: string, itemInfo: SchemaItemInfo) => {\r\n let schemaStub = schemaPartials.find((schema) => schema.name === schemaName);\r\n if (!schemaStub) {\r\n schemaStub = await addSchema(SchemaKey.parseString(`${schemaName}.0.0.0`));\r\n }\r\n\r\n let items = schemaStub.items;\r\n if (!items) {\r\n Object.assign(schemaStub, items = { items: {} });\r\n }\r\n\r\n const existingItem = items[itemInfo.name] || {};\r\n Object.assign(items, { [itemInfo.name]: Object.assign(existingItem, itemInfo) });\r\n };\r\n\r\n const reviver = (_key: string, value: any) => {\r\n return value === null ? undefined : value;\r\n };\r\n\r\n await addSchema(schemaKey);\r\n\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n const stubItems = itemRows.map((itemRow) => {\r\n return JSON.parse(itemRow.item, reviver) as SchemaItemStubRow;\r\n });\r\n await parseSchemaItemStubs(schemaKey.name, stubItems, addItems, schemaInfos);\r\n\r\n return schemaPartials;\r\n }\r\n\r\n private async querySchemaItem<TRow extends SchemaItemProps>(context: SchemaContext, schemaName: string, query: string, schemaType: string): Promise<Array<TRow>> {\r\n const start = Date.now();\r\n const itemRows = await this.executeQuery<SchemaItemRow>(query, { parameters: { schemaName } });\r\n\r\n const queryDuration = Date.now() - start;\r\n Logger.logTrace(LOGGER_CATEGORY, `Recieved rows of ${schemaType} items for ${schemaName} in ${queryDuration}ms`, {\r\n schemaName,\r\n itemCount: itemRows.length,\r\n itemType: schemaType,\r\n duration: queryDuration,\r\n });\r\n\r\n if (itemRows.length === 0)\r\n return [];\r\n\r\n const items = itemRows.map((itemRow: SchemaItemRow) => {\r\n return \"string\" === typeof itemRow.item ? JSON.parse(itemRow.item) : itemRow.item;\r\n });\r\n\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n return await SchemaParser.parseSchemaItems(items, schemaName, schemaInfos) as Array<TRow> ?? []\r\n }\r\n\r\n private async getFullSchema(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n const schemaRows = await this.executeQuery<SchemaRow>(FullSchemaQueries.schemaQuery, { parameters: { schemaName: schemaKey.name } });\r\n const schemaRow = schemaRows[0];\r\n if (schemaRow === undefined)\r\n return undefined;\r\n\r\n // Map SchemaItemRow array, [{item: SchemaItemProps}], to array of SchemaItemProps.\r\n const schema = JSON.parse(schemaRow.schema) as SchemaProps;\r\n if (schema.items) {\r\n (schema as any).items = (schema.items as any).map((itemRow: SchemaItemRow) => { return itemRow.item; });\r\n }\r\n\r\n const schemaInfos = await this._schemaInfoCache.getSchemasByContext(context) ?? [];\r\n return SchemaParser.parse(schema, schemaInfos);\r\n }\r\n\r\n private async getFullSchemaMultipleQueries(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined> {\r\n const schema = await this.getSchemaNoItems(schemaKey.name, context) as MutableSchemaProps;\r\n if (!schema)\r\n return undefined;\r\n\r\n const items = schema.items || (schema.items = {});\r\n await Promise.all([\r\n this.getEntities(schemaKey.name, context),\r\n this.getMixins(schemaKey.name, context),\r\n this.getStructs(schemaKey.name, context),\r\n this.getRelationships(schemaKey.name, context),\r\n this.getCustomAttributeClasses(schemaKey.name, context),\r\n this.getKindOfQuantities(schemaKey.name, context),\r\n this.getPropertyCategories(schemaKey.name, context),\r\n this.getEnumerations(schemaKey.name, context),\r\n this.getUnits(schemaKey.name, context),\r\n this.getInvertedUnits(schemaKey.name, context),\r\n this.getUnitSystems(schemaKey.name, context),\r\n this.getConstants(schemaKey.name, context),\r\n this.getPhenomenon(schemaKey.name, context),\r\n this.getFormats(schemaKey.name, context)\r\n ]).then((itemResults) => {\r\n const flatItemList = itemResults.reduce((acc, result) => acc.concat(result));\r\n flatItemList.forEach((schemaItem) => {\r\n if(!schemaItem.name) {\r\n // This should never be happen, as we query the schema items by name from the database, but since the SchemaProps\r\n // have name optional, we need the check here to make the compiler happy.\r\n throw new Error(`SchemaItem with no name encountered in schema ${schemaKey.name}`);\r\n }\r\n items[schemaItem.name] = schemaItem;\r\n });\r\n });\r\n\r\n return schema;\r\n }\r\n}\r\n\r\nfunction parseSchemaReference(referenceName: string): WithSchemaKey {\r\n return { schemaKey: SchemaKey.parseString(referenceName) };\r\n}\r\n\r\nasync function parseSchemaItemStubs(schemaName: string, itemRows: Array<SchemaItemStubRow>, addItemsHandler: AddSchemaItemHandler, schemaInfos: Iterable<SchemaInfo>) {\r\n if (!itemRows || itemRows.length === 0) {\r\n return;\r\n }\r\n\r\n const parseBaseClasses = async (baseClasses: Array<BaseClassStubRow> | undefined) => {\r\n if (!baseClasses || baseClasses.length < 2)\r\n return;\r\n\r\n for (let index = baseClasses.length - 1; index >= 0;) {\r\n const currentItem = baseClasses[index--];\r\n const baseClassItem = baseClasses[index];\r\n const baseClassName = baseClassItem ? `${baseClassItem.schema}.${baseClassItem.name}` : undefined;\r\n\r\n const schemaItem = await SchemaParser.parseItem(currentItem, currentItem.schema, schemaInfos);\r\n await addItemsHandler(currentItem.schema, {\r\n ...schemaItem,\r\n name: schemaItem.name,\r\n schemaItemType: schemaItem.schemaItemType,\r\n baseClass: baseClassName,\r\n });\r\n }\r\n };\r\n\r\n for (const itemRow of itemRows) {\r\n const schemaItem = await SchemaParser.parseItem(itemRow, schemaName, schemaInfos);\r\n await addItemsHandler(schemaName, {\r\n ...schemaItem,\r\n name: schemaItem.name,\r\n schemaItemType: schemaItem.schemaItemType,\r\n mixins: itemRow.mixins\r\n ? itemRow.mixins.map(mixin => { return `${mixin.schema}.${mixin.name}`; })\r\n : undefined,\r\n });\r\n\r\n await parseBaseClasses(itemRow.baseClasses);\r\n\r\n for (const mixinRow of itemRow.mixins || []) {\r\n const mixinItem = await SchemaParser.parseItem(mixinRow, mixinRow.schema, schemaInfos);\r\n await addItemsHandler(mixinRow.schema, {\r\n ...mixinItem,\r\n name: mixinItem.name,\r\n schemaItemType: mixinItem.schemaItemType,\r\n });\r\n await parseBaseClasses(mixinRow.baseClasses);\r\n }\r\n }\r\n}\r\n"]}
@@ -4,6 +4,10 @@ import { SchemaMatchType } from "../ECObjects";
4
4
  import { SchemaInfo } from "../Interfaces";
5
5
  import { Schema } from "../Metadata/Schema";
6
6
  import { SchemaKey } from "../SchemaKey";
7
+ interface IncrementalSchemaInfo extends SchemaInfo {
8
+ readonly description?: string;
9
+ readonly label?: string;
10
+ }
7
11
  type LoadSchemaInfoHandler = (context: SchemaContext) => Promise<Iterable<SchemaInfo>>;
8
12
  /**
9
13
  * Defines the SchemaLocater Options which determine how each schema is to be loaded.
@@ -114,8 +118,8 @@ declare class SchemaInfoCache {
114
118
  private readonly _schemaInfoCache;
115
119
  private readonly _schemaInfoLoader;
116
120
  constructor(schemaInfoLoader: LoadSchemaInfoHandler);
117
- getSchemasByContext(context: SchemaContext): Promise<SchemaInfo[] | undefined>;
118
- lookup(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<SchemaInfo | undefined>;
121
+ getSchemasByContext(context: SchemaContext): Promise<IncrementalSchemaInfo[] | undefined>;
122
+ lookup(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<IncrementalSchemaInfo | undefined>;
119
123
  remove(schemaKey: SchemaKey, context: SchemaContext): void;
120
124
  }
121
125
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"IncrementalSchemaLocater.d.ts","sourceRoot":"","sources":["../../../src/IncrementalLoading/IncrementalSchemaLocater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IncrementalSchemaLocater.d.ts","sourceRoot":"","sources":["../../../src/IncrementalLoading/IncrementalSchemaLocater.ts"],"names":[],"mappings":"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"}
@@ -124,6 +124,8 @@ export class IncrementalSchemaLocater {
124
124
  name: schemaKey.name,
125
125
  alias: schemaInfo.alias,
126
126
  version: schemaInfo.schemaKey.version.toString(),
127
+ description: schemaInfo.description,
128
+ label: schemaInfo.label,
127
129
  references: schemaReferences,
128
130
  items: {}
129
131
  };
@@ -1 +1 @@
1
- {"version":3,"file":"IncrementalSchemaLocater.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/IncrementalSchemaLocater.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { ECSchemaNamespaceUris } from \"../Constants\";\r\nimport { ISchemaLocater, SchemaContext } from \"../Context\";\r\nimport { SchemaProps, SchemaReferenceProps } from \"../Deserialization/JsonProps\";\r\nimport { SchemaGraphUtil } from \"../Deserialization/SchemaGraphUtil\";\r\nimport { SchemaMatchType } from \"../ECObjects\";\r\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\r\nimport { SchemaInfo } from \"../Interfaces\";\r\nimport { Schema } from \"../Metadata/Schema\";\r\nimport { SchemaKey } from \"../SchemaKey\";\r\nimport { SchemaLoadingController } from \"../utils/SchemaLoadingController\";\r\nimport { IncrementalSchemaReader } from \"./IncrementalSchemaReader\";\r\n\r\ntype LoadSchemaInfoHandler = (context: SchemaContext) => Promise<Iterable<SchemaInfo>>;\r\n\r\n/**\r\n * Defines the SchemaLocater Options which determine how each schema is to be loaded.\r\n * All options are optional.\r\n * @beta\r\n */\r\nexport interface SchemaLocaterOptions {\r\n /** Only load partial schemas. Full schema information will not be retrieved. Defaults to false. */\r\n readonly loadPartialSchemaOnly?: boolean;\r\n}\r\n\r\n/**\r\n * A [[ISchemaLocater]] implementation for locating and retrieving EC [[Schema]]\r\n * objects incrementally instead of the full schema and it's references at once. This is useful for large schemas that\r\n * take a long time to load, but clients need a rough skeleton of the schema as fast as possible.\r\n *\r\n * The IncrementalSchemaLocater is a locater around the [[IncrementalSchemaLocater]] to be used in a\r\n * [[SchemaContext]].\r\n * @internal\r\n */\r\nexport abstract class IncrementalSchemaLocater implements ISchemaLocater {\r\n private readonly _options: SchemaLocaterOptions;\r\n protected readonly _schemaInfoCache: SchemaInfoCache;\r\n\r\n /**\r\n * Initializes a new instance of the IncrementalSchemaLocater class.\r\n * @param options The [[SchemaLocaterOptions]] that control the loading of the schema.\r\n */\r\n constructor(options?: SchemaLocaterOptions) {\r\n this._options = options || {};\r\n\r\n this._schemaInfoCache = new SchemaInfoCache(async (context) => {\r\n return this.loadSchemaInfos(context);\r\n });\r\n }\r\n\r\n /** Gets the options how the schema locater load the schemas. */\r\n protected get options(): SchemaLocaterOptions {\r\n return this._options;\r\n }\r\n\r\n /**\r\n * Gets the [[SchemaInfo]] which matches the provided SchemaKey. The SchemaInfo may be returned\r\n * before the schema is fully loaded. May return the entire Schema so long as it is completely loaded as it satisfies\r\n * the SchemaInfo interface.\r\n * @param schemaKey The [[SchemaKey]] to look up.\r\n * @param matchType The [[SchemaMatchType]] to use against candidate schemas.\r\n * @param context The [[SchemaContext]] for loading schema references.\r\n */\r\n public async getSchemaInfo(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<SchemaInfo | undefined> {\r\n return this._schemaInfoCache.lookup(schemaKey, matchType, context);\r\n }\r\n\r\n /**\r\n * Attempts to get a [[Schema]] from the locater. Yields undefined if no matching schema is found.\r\n * For schemas that may have references, construct and call through a SchemaContext instead.\r\n * @param schemaKey The [[SchemaKey]] to look up.\r\n * @param matchType The [[SchemaMatchType]] to use against candidate schemas.\r\n * @param context The [[SchemaContext]] for loading schema references.\r\n */\r\n public async getSchema(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<Schema | undefined> {\r\n const schemaInfo = await this.getSchemaInfo(schemaKey, matchType, context);\r\n return schemaInfo\r\n ? this.loadSchema(schemaInfo, context)\r\n : undefined;\r\n }\r\n\r\n /**\r\n * Attempts to get a [[Schema]] from the locater. Yields undefined if no matching schema is found.\r\n * For schemas that may have references, construct and call through a SchemaContext instead.\r\n * NOT IMPLEMENTED IN THIS LOCATER - ALWAYS RETURNS UNDEFINED.\r\n * @param schemaKey The [[SchemaKey]] to look up.\r\n * @param matchType The [[SchemaMatchType]] to use against candidate schemas.\r\n * @param context The [[SchemaContext]] for loading schema references.\r\n * @returns Incremental schema loading does not work synchronously, this will always return undefined.\r\n */\r\n public getSchemaSync(_schemaKey: Readonly<SchemaKey>, _matchType: SchemaMatchType, _context: SchemaContext): Schema | undefined {\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Gets the schema partials for the given schema key. The first item in the array is the\r\n * actual schema props of the schema to load, the following items are partial schema props\r\n * of referenced schemas.\r\n * @param schemaKey The schema key of the requested schema.\r\n * @param context The schema context.\r\n */\r\n protected abstract getSchemaPartials(schemaKey: SchemaKey, context: SchemaContext): Promise<ReadonlyArray<SchemaProps> | undefined>;\r\n\r\n /**\r\n * Gets the full schema json for the requested schema key.\r\n * @param schemaKey The schema key of the requested schema.\r\n * @param context The schema context.\r\n */\r\n protected abstract getSchemaJson(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined>;\r\n\r\n /**\r\n * Loads the schema info objects for the given context.\r\n * @param context The schema context to load the schema infos for.\r\n * @returns A promise that resolves to an iterable of schema infos.\r\n */\r\n protected abstract loadSchemaInfos(context: SchemaContext): Promise<Iterable<SchemaInfo>>;\r\n\r\n /**\r\n * Checks if the context contains the right schemas to support incremental schema loading.\r\n * @param context The schema context to check.\r\n * @returns true if incremental schema loading is supported, false otherwise.\r\n */\r\n protected abstract supportPartialSchemaLoading(context: SchemaContext): Promise<boolean>;\r\n\r\n /**\r\n * Start loading the schema for the given schema info incrementally. The schema is returned\r\n * as soon as the schema stub is loaded while the schema fully resolves in the background. It should\r\n * only be called by the IncrementalSchemaLocater if a schema has not been loaded or started to\r\n * load yet.\r\n * @param schemaInfo The schema info of the schema to load.\r\n * @param schemaContext The schema context to load the schema into.\r\n */\r\n protected async loadSchema(schemaInfo: SchemaInfo, schemaContext: SchemaContext): Promise<Schema> {\r\n // If the meta schema is an earlier version than 4.0.3, we can't use the ECSql query interface to get the schema\r\n // information required to load the schema entirely. In this case, we fallback to use the ECSchema RPC interface\r\n // to fetch the whole schema json.\r\n if (!await this.supportPartialSchemaLoading(schemaContext)) {\r\n const schemaJson = await this.getSchemaJson(schemaInfo.schemaKey, schemaContext);\r\n if(schemaJson === undefined)\r\n throw new ECSchemaError(ECSchemaStatus.UnableToLocateSchema, `Could not locate the schema, ${schemaInfo.schemaKey.name}.${schemaInfo.schemaKey.version.toString()}`);\r\n\r\n return Schema.fromJson(schemaJson, schemaContext);\r\n }\r\n\r\n // Fetches the schema partials for the given schema key. The first item in the array is the\r\n // actual schema props of the schema to load, the following items are schema props of referenced\r\n // schema items that are needed to resolve the schema properly.\r\n const schemaPartials = await this.getSchemaPartials(schemaInfo.schemaKey, schemaContext);\r\n if (schemaPartials === undefined)\r\n throw new ECSchemaError(ECSchemaStatus.UnableToLocateSchema, `Could not locate the schema, ${schemaInfo.schemaKey.name}.${schemaInfo.schemaKey.version.toString()}`);\r\n\r\n // Sort the partials in dependency order to ensure referenced schemas exist in the schema context\r\n // when they get requested. Otherwise the context would call this method again and for referenced\r\n // schemas, we would not want to request the whole schema props.\r\n const sortedPartials = await this.sortSchemaPartials(schemaPartials, schemaContext);\r\n for (const schemaProps of sortedPartials) {\r\n await this.startLoadingPartialSchema(schemaProps, schemaContext);\r\n }\r\n\r\n const schema = await schemaContext.getCachedSchema(schemaInfo.schemaKey);\r\n if (!schema)\r\n throw new Error(`Schema ${schemaInfo.schemaKey.name} could not be found.`);\r\n\r\n return schema;\r\n }\r\n\r\n /**\r\n * Creates a SchemaProps object by loading the Schema information from the given SchemaContext.\r\n * @param schemaKey The SchemaKey of the Schema whose props are to be retrieved.\r\n * @param schemaContext The SchemaContext holding the Schema.\r\n * @returns The SchemaProps object.\r\n */\r\n protected async createSchemaProps(schemaKey: SchemaKey, schemaContext: SchemaContext): Promise<SchemaProps> {\r\n const schemaInfo = await schemaContext.getSchemaInfo(schemaKey, SchemaMatchType.Latest);\r\n if (!schemaInfo)\r\n throw new Error(`Schema ${schemaKey.name} could not be found.`);\r\n\r\n const schemaReferences: Array<SchemaReferenceProps> = [];\r\n const schemaProps: SchemaProps = {\r\n $schema: ECSchemaNamespaceUris.SCHEMAURL3_2_JSON,\r\n name: schemaKey.name,\r\n alias: schemaInfo.alias,\r\n version: schemaInfo.schemaKey.version.toString(),\r\n references: schemaReferences,\r\n items: {}\r\n };\r\n\r\n schemaInfo.references.forEach((ref) => {\r\n schemaReferences.push({ name: ref.schemaKey.name, version: ref.schemaKey.version.toString() });\r\n });\r\n\r\n return schemaProps;\r\n }\r\n\r\n private async startLoadingPartialSchema(schemaProps: SchemaProps, schemaContext: SchemaContext): Promise<void> {\r\n if (schemaContext.schemaExists(SchemaKey.parseString(`${schemaProps.name}.${schemaProps.version}`))) {\r\n return;\r\n }\r\n\r\n const controller = new SchemaLoadingController();\r\n const schemaReader = new IncrementalSchemaReader(schemaContext, true);\r\n const schema = new Schema(schemaContext);\r\n schema.setLoadingController(controller);\r\n\r\n await schemaReader.readSchema(schema, schemaProps);\r\n\r\n if (!this._options.loadPartialSchemaOnly)\r\n controller.start(this.startLoadingFullSchema(schema));\r\n }\r\n\r\n private async loadFullSchema(schema: Schema): Promise<void> {\r\n const fullSchemaProps = await this.getSchemaJson(schema.schemaKey, schema.context)\r\n const reader = new IncrementalSchemaReader(schema.context, false);\r\n await reader.readSchema(schema, fullSchemaProps, false);\r\n }\r\n\r\n private async startLoadingFullSchema(schema: Schema): Promise<void> {\r\n if (!schema.loadingController)\r\n return;\r\n\r\n // If the schema is already resolved, return it directly.\r\n if (schema.loadingController.isComplete || schema.loadingController.inProgress) {\r\n return;\r\n }\r\n\r\n // Since the schema relies on it's references, they get triggered to be resolved\r\n // first by recursively calling this method. After all references has been resolved\r\n // the schema itself gets resolved.\r\n await Promise.all(schema.references.map(async (referenceSchema) => {\r\n if (referenceSchema.loadingController && referenceSchema.loadingController.inProgress)\r\n return referenceSchema.loadingController.wait();\r\n else\r\n return this.startLoadingFullSchema(referenceSchema);\r\n }));\r\n\r\n return this.loadFullSchema(schema);\r\n }\r\n\r\n private async sortSchemaPartials(schemaPartials: ReadonlyArray<SchemaProps>, schemaContext: SchemaContext): Promise<ReadonlyArray<SchemaProps>> {\r\n const schemaInfos: Array<SchemaInfo & { props: SchemaProps }> = [];\r\n for (const schemaProps of schemaPartials) {\r\n const schemaKey = SchemaKey.parseString(`${schemaProps.name}.${schemaProps.version}`);\r\n const schemaInfo = await schemaContext.getSchemaInfo(schemaKey, SchemaMatchType.Latest);\r\n if (!schemaInfo)\r\n throw new Error(`Schema ${schemaKey.name} could not be found.`);\r\n\r\n schemaInfos.push({ ...schemaInfo, props: schemaProps });\r\n }\r\n\r\n const orderedSchemaInfos = SchemaGraphUtil.buildDependencyOrderedSchemaInfoList(schemaInfos) as Array<SchemaInfo & { props: SchemaProps }>;\r\n return orderedSchemaInfos.map((schemaInfo) => schemaInfo.props);\r\n }\r\n}\r\n\r\n/**\r\n * Helper class to manage schema infos for a schema context.\r\n */\r\nclass SchemaInfoCache {\r\n private readonly _schemaInfoCache: WeakMap<SchemaContext, Array<SchemaInfo>>;\r\n private readonly _schemaInfoLoader: LoadSchemaInfoHandler;\r\n\r\n constructor(schemaInfoLoader: LoadSchemaInfoHandler) {\r\n this._schemaInfoCache = new WeakMap<SchemaContext, Array<SchemaInfo>>();\r\n this._schemaInfoLoader = schemaInfoLoader;\r\n }\r\n\r\n public async getSchemasByContext(context: SchemaContext): Promise<SchemaInfo[] | undefined> {\r\n if (!this._schemaInfoCache.has(context)) {\r\n const schemaInfos = await this._schemaInfoLoader(context);\r\n this._schemaInfoCache.set(context, Array.from(schemaInfos));\r\n }\r\n return this._schemaInfoCache.get(context);\r\n }\r\n\r\n public async lookup(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<SchemaInfo | undefined> {\r\n const contextSchemaInfos = await this.getSchemasByContext(context);\r\n return contextSchemaInfos\r\n ? contextSchemaInfos.find((schemaInfo) => schemaInfo.schemaKey.matches(schemaKey, matchType))\r\n : undefined;\r\n }\r\n\r\n public remove(schemaKey: SchemaKey, context: SchemaContext): void {\r\n const contextSchemaInfos = this._schemaInfoCache.get(context);\r\n if (!contextSchemaInfos)\r\n return;\r\n\r\n const index = contextSchemaInfos.findIndex((schemaInfo) => schemaInfo.schemaKey.name === schemaKey.name);\r\n if (index !== -1) {\r\n contextSchemaInfos.splice(index, 1);\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"IncrementalSchemaLocater.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/IncrementalSchemaLocater.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { ECSchemaNamespaceUris } from \"../Constants\";\r\nimport { ISchemaLocater, SchemaContext } from \"../Context\";\r\nimport { SchemaProps, SchemaReferenceProps } from \"../Deserialization/JsonProps\";\r\nimport { SchemaGraphUtil } from \"../Deserialization/SchemaGraphUtil\";\r\nimport { SchemaMatchType } from \"../ECObjects\";\r\nimport { ECSchemaError, ECSchemaStatus } from \"../Exception\";\r\nimport { SchemaInfo } from \"../Interfaces\";\r\nimport { Schema } from \"../Metadata/Schema\";\r\nimport { SchemaKey } from \"../SchemaKey\";\r\nimport { SchemaLoadingController } from \"../utils/SchemaLoadingController\";\r\nimport { IncrementalSchemaReader } from \"./IncrementalSchemaReader\";\r\n\r\ninterface IncrementalSchemaInfo extends SchemaInfo {\r\n readonly description?: string;\r\n readonly label?: string;\r\n}\r\n\r\ntype LoadSchemaInfoHandler = (context: SchemaContext) => Promise<Iterable<SchemaInfo>>;\r\n\r\n/**\r\n * Defines the SchemaLocater Options which determine how each schema is to be loaded.\r\n * All options are optional.\r\n * @beta\r\n */\r\nexport interface SchemaLocaterOptions {\r\n /** Only load partial schemas. Full schema information will not be retrieved. Defaults to false. */\r\n readonly loadPartialSchemaOnly?: boolean;\r\n}\r\n\r\n/**\r\n * A [[ISchemaLocater]] implementation for locating and retrieving EC [[Schema]]\r\n * objects incrementally instead of the full schema and it's references at once. This is useful for large schemas that\r\n * take a long time to load, but clients need a rough skeleton of the schema as fast as possible.\r\n *\r\n * The IncrementalSchemaLocater is a locater around the [[IncrementalSchemaLocater]] to be used in a\r\n * [[SchemaContext]].\r\n * @internal\r\n */\r\nexport abstract class IncrementalSchemaLocater implements ISchemaLocater {\r\n private readonly _options: SchemaLocaterOptions;\r\n protected readonly _schemaInfoCache: SchemaInfoCache;\r\n\r\n /**\r\n * Initializes a new instance of the IncrementalSchemaLocater class.\r\n * @param options The [[SchemaLocaterOptions]] that control the loading of the schema.\r\n */\r\n constructor(options?: SchemaLocaterOptions) {\r\n this._options = options || {};\r\n\r\n this._schemaInfoCache = new SchemaInfoCache(async (context) => {\r\n return this.loadSchemaInfos(context);\r\n });\r\n }\r\n\r\n /** Gets the options how the schema locater load the schemas. */\r\n protected get options(): SchemaLocaterOptions {\r\n return this._options;\r\n }\r\n\r\n /**\r\n * Gets the [[SchemaInfo]] which matches the provided SchemaKey. The SchemaInfo may be returned\r\n * before the schema is fully loaded. May return the entire Schema so long as it is completely loaded as it satisfies\r\n * the SchemaInfo interface.\r\n * @param schemaKey The [[SchemaKey]] to look up.\r\n * @param matchType The [[SchemaMatchType]] to use against candidate schemas.\r\n * @param context The [[SchemaContext]] for loading schema references.\r\n */\r\n public async getSchemaInfo(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<SchemaInfo | undefined> {\r\n return this._schemaInfoCache.lookup(schemaKey, matchType, context);\r\n }\r\n\r\n /**\r\n * Attempts to get a [[Schema]] from the locater. Yields undefined if no matching schema is found.\r\n * For schemas that may have references, construct and call through a SchemaContext instead.\r\n * @param schemaKey The [[SchemaKey]] to look up.\r\n * @param matchType The [[SchemaMatchType]] to use against candidate schemas.\r\n * @param context The [[SchemaContext]] for loading schema references.\r\n */\r\n public async getSchema(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<Schema | undefined> {\r\n const schemaInfo = await this.getSchemaInfo(schemaKey, matchType, context);\r\n return schemaInfo\r\n ? this.loadSchema(schemaInfo, context)\r\n : undefined;\r\n }\r\n\r\n /**\r\n * Attempts to get a [[Schema]] from the locater. Yields undefined if no matching schema is found.\r\n * For schemas that may have references, construct and call through a SchemaContext instead.\r\n * NOT IMPLEMENTED IN THIS LOCATER - ALWAYS RETURNS UNDEFINED.\r\n * @param schemaKey The [[SchemaKey]] to look up.\r\n * @param matchType The [[SchemaMatchType]] to use against candidate schemas.\r\n * @param context The [[SchemaContext]] for loading schema references.\r\n * @returns Incremental schema loading does not work synchronously, this will always return undefined.\r\n */\r\n public getSchemaSync(_schemaKey: Readonly<SchemaKey>, _matchType: SchemaMatchType, _context: SchemaContext): Schema | undefined {\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Gets the schema partials for the given schema key. The first item in the array is the\r\n * actual schema props of the schema to load, the following items are partial schema props\r\n * of referenced schemas.\r\n * @param schemaKey The schema key of the requested schema.\r\n * @param context The schema context.\r\n */\r\n protected abstract getSchemaPartials(schemaKey: SchemaKey, context: SchemaContext): Promise<ReadonlyArray<SchemaProps> | undefined>;\r\n\r\n /**\r\n * Gets the full schema json for the requested schema key.\r\n * @param schemaKey The schema key of the requested schema.\r\n * @param context The schema context.\r\n */\r\n protected abstract getSchemaJson(schemaKey: SchemaKey, context: SchemaContext): Promise<SchemaProps | undefined>;\r\n\r\n /**\r\n * Loads the schema info objects for the given context.\r\n * @param context The schema context to load the schema infos for.\r\n * @returns A promise that resolves to an iterable of schema infos.\r\n */\r\n protected abstract loadSchemaInfos(context: SchemaContext): Promise<Iterable<SchemaInfo>>;\r\n\r\n /**\r\n * Checks if the context contains the right schemas to support incremental schema loading.\r\n * @param context The schema context to check.\r\n * @returns true if incremental schema loading is supported, false otherwise.\r\n */\r\n protected abstract supportPartialSchemaLoading(context: SchemaContext): Promise<boolean>;\r\n\r\n /**\r\n * Start loading the schema for the given schema info incrementally. The schema is returned\r\n * as soon as the schema stub is loaded while the schema fully resolves in the background. It should\r\n * only be called by the IncrementalSchemaLocater if a schema has not been loaded or started to\r\n * load yet.\r\n * @param schemaInfo The schema info of the schema to load.\r\n * @param schemaContext The schema context to load the schema into.\r\n */\r\n protected async loadSchema(schemaInfo: SchemaInfo, schemaContext: SchemaContext): Promise<Schema> {\r\n // If the meta schema is an earlier version than 4.0.3, we can't use the ECSql query interface to get the schema\r\n // information required to load the schema entirely. In this case, we fallback to use the ECSchema RPC interface\r\n // to fetch the whole schema json.\r\n if (!await this.supportPartialSchemaLoading(schemaContext)) {\r\n const schemaJson = await this.getSchemaJson(schemaInfo.schemaKey, schemaContext);\r\n if(schemaJson === undefined)\r\n throw new ECSchemaError(ECSchemaStatus.UnableToLocateSchema, `Could not locate the schema, ${schemaInfo.schemaKey.name}.${schemaInfo.schemaKey.version.toString()}`);\r\n\r\n return Schema.fromJson(schemaJson, schemaContext);\r\n }\r\n\r\n // Fetches the schema partials for the given schema key. The first item in the array is the\r\n // actual schema props of the schema to load, the following items are schema props of referenced\r\n // schema items that are needed to resolve the schema properly.\r\n const schemaPartials = await this.getSchemaPartials(schemaInfo.schemaKey, schemaContext);\r\n if (schemaPartials === undefined)\r\n throw new ECSchemaError(ECSchemaStatus.UnableToLocateSchema, `Could not locate the schema, ${schemaInfo.schemaKey.name}.${schemaInfo.schemaKey.version.toString()}`);\r\n\r\n // Sort the partials in dependency order to ensure referenced schemas exist in the schema context\r\n // when they get requested. Otherwise the context would call this method again and for referenced\r\n // schemas, we would not want to request the whole schema props.\r\n const sortedPartials = await this.sortSchemaPartials(schemaPartials, schemaContext);\r\n for (const schemaProps of sortedPartials) {\r\n await this.startLoadingPartialSchema(schemaProps, schemaContext);\r\n }\r\n\r\n const schema = await schemaContext.getCachedSchema(schemaInfo.schemaKey);\r\n if (!schema)\r\n throw new Error(`Schema ${schemaInfo.schemaKey.name} could not be found.`);\r\n\r\n return schema;\r\n }\r\n\r\n /**\r\n * Creates a SchemaProps object by loading the Schema information from the given SchemaContext.\r\n * @param schemaKey The SchemaKey of the Schema whose props are to be retrieved.\r\n * @param schemaContext The SchemaContext holding the Schema.\r\n * @returns The SchemaProps object.\r\n */\r\n protected async createSchemaProps(schemaKey: SchemaKey, schemaContext: SchemaContext): Promise<SchemaProps> {\r\n const schemaInfo = await schemaContext.getSchemaInfo(schemaKey, SchemaMatchType.Latest) as IncrementalSchemaInfo | undefined;\r\n if (!schemaInfo)\r\n throw new Error(`Schema ${schemaKey.name} could not be found.`);\r\n\r\n const schemaReferences: Array<SchemaReferenceProps> = [];\r\n const schemaProps: SchemaProps = {\r\n $schema: ECSchemaNamespaceUris.SCHEMAURL3_2_JSON,\r\n name: schemaKey.name,\r\n alias: schemaInfo.alias,\r\n version: schemaInfo.schemaKey.version.toString(),\r\n description: schemaInfo.description,\r\n label: schemaInfo.label,\r\n references: schemaReferences,\r\n items: {}\r\n };\r\n\r\n schemaInfo.references.forEach((ref) => {\r\n schemaReferences.push({ name: ref.schemaKey.name, version: ref.schemaKey.version.toString() });\r\n });\r\n\r\n return schemaProps;\r\n }\r\n\r\n private async startLoadingPartialSchema(schemaProps: SchemaProps, schemaContext: SchemaContext): Promise<void> {\r\n if (schemaContext.schemaExists(SchemaKey.parseString(`${schemaProps.name}.${schemaProps.version}`))) {\r\n return;\r\n }\r\n\r\n const controller = new SchemaLoadingController();\r\n const schemaReader = new IncrementalSchemaReader(schemaContext, true);\r\n const schema = new Schema(schemaContext);\r\n schema.setLoadingController(controller);\r\n\r\n await schemaReader.readSchema(schema, schemaProps);\r\n\r\n if (!this._options.loadPartialSchemaOnly)\r\n controller.start(this.startLoadingFullSchema(schema));\r\n }\r\n\r\n private async loadFullSchema(schema: Schema): Promise<void> {\r\n const fullSchemaProps = await this.getSchemaJson(schema.schemaKey, schema.context)\r\n const reader = new IncrementalSchemaReader(schema.context, false);\r\n await reader.readSchema(schema, fullSchemaProps, false);\r\n }\r\n\r\n private async startLoadingFullSchema(schema: Schema): Promise<void> {\r\n if (!schema.loadingController)\r\n return;\r\n\r\n // If the schema is already resolved, return it directly.\r\n if (schema.loadingController.isComplete || schema.loadingController.inProgress) {\r\n return;\r\n }\r\n\r\n // Since the schema relies on it's references, they get triggered to be resolved\r\n // first by recursively calling this method. After all references has been resolved\r\n // the schema itself gets resolved.\r\n await Promise.all(schema.references.map(async (referenceSchema) => {\r\n if (referenceSchema.loadingController && referenceSchema.loadingController.inProgress)\r\n return referenceSchema.loadingController.wait();\r\n else\r\n return this.startLoadingFullSchema(referenceSchema);\r\n }));\r\n\r\n return this.loadFullSchema(schema);\r\n }\r\n\r\n private async sortSchemaPartials(schemaPartials: ReadonlyArray<SchemaProps>, schemaContext: SchemaContext): Promise<ReadonlyArray<SchemaProps>> {\r\n const schemaInfos: Array<SchemaInfo & { props: SchemaProps }> = [];\r\n for (const schemaProps of schemaPartials) {\r\n const schemaKey = SchemaKey.parseString(`${schemaProps.name}.${schemaProps.version}`);\r\n const schemaInfo = await schemaContext.getSchemaInfo(schemaKey, SchemaMatchType.Latest);\r\n if (!schemaInfo)\r\n throw new Error(`Schema ${schemaKey.name} could not be found.`);\r\n\r\n schemaInfos.push({ ...schemaInfo, props: schemaProps });\r\n }\r\n\r\n const orderedSchemaInfos = SchemaGraphUtil.buildDependencyOrderedSchemaInfoList(schemaInfos) as Array<SchemaInfo & { props: SchemaProps }>;\r\n return orderedSchemaInfos.map((schemaInfo) => schemaInfo.props);\r\n }\r\n}\r\n\r\n/**\r\n * Helper class to manage schema infos for a schema context.\r\n */\r\nclass SchemaInfoCache {\r\n private readonly _schemaInfoCache: WeakMap<SchemaContext, Array<IncrementalSchemaInfo>>;\r\n private readonly _schemaInfoLoader: LoadSchemaInfoHandler;\r\n\r\n constructor(schemaInfoLoader: LoadSchemaInfoHandler) {\r\n this._schemaInfoCache = new WeakMap<SchemaContext, Array<IncrementalSchemaInfo>>();\r\n this._schemaInfoLoader = schemaInfoLoader;\r\n }\r\n\r\n public async getSchemasByContext(context: SchemaContext): Promise<IncrementalSchemaInfo[] | undefined> {\r\n if (!this._schemaInfoCache.has(context)) {\r\n const schemaInfos = await this._schemaInfoLoader(context);\r\n this._schemaInfoCache.set(context, Array.from(schemaInfos));\r\n }\r\n return this._schemaInfoCache.get(context);\r\n }\r\n\r\n public async lookup(schemaKey: SchemaKey, matchType: SchemaMatchType, context: SchemaContext): Promise<IncrementalSchemaInfo | undefined> {\r\n const contextSchemaInfos = await this.getSchemasByContext(context);\r\n return contextSchemaInfos\r\n ? contextSchemaInfos.find((schemaInfo) => schemaInfo.schemaKey.matches(schemaKey, matchType))\r\n : undefined;\r\n }\r\n\r\n public remove(schemaKey: SchemaKey, context: SchemaContext): void {\r\n const contextSchemaInfos = this._schemaInfoCache.get(context);\r\n if (!contextSchemaInfos)\r\n return;\r\n\r\n const index = contextSchemaInfos.findIndex((schemaInfo) => schemaInfo.schemaKey.name === schemaKey.name);\r\n if (index !== -1) {\r\n contextSchemaInfos.splice(index, 1);\r\n }\r\n }\r\n}\r\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaStubQueries.d.ts","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaStubQueries.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,QAAQ,UAAW,MAAM,WASrC,CAAC;AAEF,eAAO,MAAM,QAAQ,UAAW,MAAM,WASrC,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAAW,MAAM,WAQ9C,CAAC;AAwUF;;;GAGG;AACH,eAAO,MAAM,YAAY;;;CAGxB,CAAC"}
1
+ {"version":3,"file":"SchemaStubQueries.d.ts","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaStubQueries.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,QAAQ,UAAW,MAAM,WASrC,CAAC;AAEF,eAAO,MAAM,QAAQ,UAAW,MAAM,WASrC,CAAC;AAEF,eAAO,MAAM,iBAAiB,UAAW,MAAM,WAQ9C,CAAC;AAuTF;;;GAGG;AACH,eAAO,MAAM,YAAY;;;CAGxB,CAAC"}
@@ -301,34 +301,15 @@ SchemaItems AS (
301
301
  `;
302
302
  const schemaStubQuery = `
303
303
  WITH
304
- ${withSchemaReferences},
305
304
  ${withAppliesTo},
306
305
  ${withSchemaItems}
307
306
  SELECT
308
- [Name] as [name],
309
- CONCAT('',[VersionMajor],'.',[VersionWrite],'.',[VersionMinor]) AS [version],
310
- [Alias] as [alias],
311
- [DisplayLabel] as [displayLabel],
312
- [Description] as [description],
313
- (
314
- SELECT
315
- json_group_array([schemaReferences].[fullName])
316
- FROM
317
- [SchemaReferences] [schemaReferences]
318
- WHERE
319
- [schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]
320
- ) AS [references],
321
- (
322
- SELECT
323
- json_group_array(json([items].[item]))
324
- FROM
325
- [SchemaItems] [items]
326
- WHERE
327
- [items].[SchemaId] = [schemaDef].[ECInstanceId]
328
- ) AS [items]
307
+ [items].[item]
329
308
  FROM
330
- [meta].[ECSchemaDef] [schemaDef]
331
- WHERE [Name] = :schemaName
309
+ [SchemaItems] [items]
310
+ JOIN [meta].[ECSchemaDef] [schemaDef]
311
+ ON [schemaDef].[ECInstanceId] = [items].[SchemaId]
312
+ WHERE [schemaDef].[Name] = :schemaName
332
313
  `;
333
314
  const schemaInfoQuery = `
334
315
  WITH
@@ -337,6 +318,8 @@ const schemaInfoQuery = `
337
318
  [Name] as [name],
338
319
  CONCAT('',[VersionMajor],'.',[VersionWrite],'.',[VersionMinor]) AS [version],
339
320
  [Alias] as [alias],
321
+ [DisplayLabel] as [label],
322
+ [Description] as [description],
340
323
  (
341
324
  SELECT
342
325
  json_group_array([schemaReferences].[fullName])
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaStubQueries.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaStubQueries.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;IACxC,OAAO;;cAEK,KAAK;cACL,KAAK;cACL,KAAK;;;GAGhB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;IACxC,OAAO;;cAEK,KAAK;cACL,KAAK;cACL,KAAK;;;GAGhB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAE,EAAE;IACjD,OAAO;;cAEK,KAAK;cACL,KAAK;;;GAGhB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;CAcrB,CAAC;AAEF,MAAM,oBAAoB,GAAG;;;;;;;;;;CAU5B,CAAC;AAEF,MAAM,oBAAoB,GAAG;;;;;;oBAMT,QAAQ,CAAC,OAAO,CAAC;;;;;;;;;;0BAUX,QAAQ,CAAC,WAAW,CAAC;;;;;;;;;;;;;;CAc9C,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;oBAMA,QAAQ,CAAC,OAAO,CAAC;;;;;;;;;0BASX,QAAQ,CAAC,WAAW,CAAC;;;;;;;;;;;;;CAa9C,CAAC;AAEF,MAAM,iBAAiB,GAAG;;;;;;oBAMN,QAAQ,CAAC,OAAO,CAAC;;;oBAGjB,QAAQ,CAAC,OAAO,CAAC;6BACR,iBAAiB,CAAC,OAAO,CAAC;;;;;;;0BAO7B,QAAQ,CAAC,WAAW,CAAC;;;0BAGrB,QAAQ,CAAC,WAAW,CAAC;mCACZ,iBAAiB,CAAC,WAAW,CAAC;;;;;;;;;;;CAWhE,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;oBAMA,QAAQ,CAAC,OAAO,CAAC;;;;;;;;;0BASX,QAAQ,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;0BAkBrB,QAAQ,CAAC,WAAW,CAAC;;;;;;;;;;;;;;gCAcf,QAAQ,CAAC,gBAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BzD,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;oBAMC,QAAQ,CAAC,OAAO,CAAC;;;;;;;;;;;;;;0BAcX,QAAQ,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;CAmB9C,CAAC;AAEF,MAAM,eAAe,GAAG;;IAEpB,oBAAoB;;IAEpB,WAAW;;IAEX,iBAAiB;;IAEjB,WAAW;;IAEX,UAAU;;IAEV,iBAAiB,CAAC,WAAW,EAAE;;IAE/B,iBAAiB,CAAC,cAAc,EAAE;;IAElC,iBAAiB,CAAC,gBAAgB,EAAE;;IAEpC,iBAAiB,CAAC,IAAI,EAAE;;IAExB,iBAAiB,CAAC,YAAY,EAAE;;IAEhC,iBAAiB,CAAC,QAAQ,EAAE;;IAE5B,iBAAiB,CAAC,UAAU,EAAE;;IAE9B,iBAAiB,CAAC,UAAU,EAAE;;IAE9B,iBAAiB,CAAC,MAAM,EAAE;;CAE7B,CAAC;AAEF,MAAM,eAAe,GAAG;;MAElB,oBAAoB;MACpB,aAAa;MACb,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BpB,CAAC;AAEF,MAAM,eAAe,GAAG;;MAElB,oBAAoB;;;;;;;;;;;;;;;CAezB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,eAAe;IACf,eAAe;CAChB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { SchemaItemQueries } from \"./SchemaItemQueries\";\r\n\r\nexport const modifier = (alias: string) => {\r\n return `\r\n CASE\r\n WHEN [${alias}].[modifier] = 0 THEN 'None'\r\n WHEN [${alias}].[modifier] = 1 THEN 'Abstract'\r\n WHEN [${alias}].[modifier] = 2 THEN 'Sealed'\r\n ELSE NULL\r\n END\r\n `;\r\n};\r\n\r\nexport const strength = (alias: string) => {\r\n return `\r\n CASE\r\n WHEN [${alias}].[RelationshipStrength] = 0 THEN 'Referencing'\r\n WHEN [${alias}].[RelationshipStrength] = 1 THEN 'Holding'\r\n WHEN [${alias}].[RelationshipStrength] = 2 THEN 'Embedding'\r\n ELSE NULL\r\n END\r\n `;\r\n};\r\n\r\nexport const strengthDirection = (alias: string) => {\r\n return `\r\n CASE\r\n WHEN [${alias}].[RelationshipStrengthDirection] = 1 THEN 'Forward'\r\n WHEN [${alias}].[RelationshipStrengthDirection] = 2 THEN 'Backward'\r\n ELSE NULL\r\n END\r\n `;\r\n};\r\n\r\nconst withAppliesTo = `\r\n AppliesToCTE AS (\r\n SELECT\r\n [mixinAppliesTo].[ECInstanceId] AS [AppliesToId],\r\n [appliesToSchema].[name] as [AppliesToSchema],\r\n json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.IsMixin.AppliesToEntityClass') AS [AppliesTo]\r\n FROM [meta].[CustomAttribute] [ca]\r\n JOIN [meta].[ECClassDef] [mixinAppliesTo]\r\n ON [mixinAppliesTo].[ECInstanceId] = [ca].[ContainerId]\r\n JOIN [meta].[ECSchemaDef] [appliesToSchema]\r\n ON [appliesToSchema].[ECInstanceId] = [mixinAppliesTo].[Schema].[Id]\r\n WHERE [ca].[ContainerType] = 30\r\n AND json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.ecClass') = 'IsMixin'\r\n )\r\n`;\r\n\r\nconst withSchemaReferences = `\r\n SchemaReferences AS (\r\n SELECT\r\n [ref].[SourceECInstanceId] AS [SchemaId],\r\n CONCAT([Name],'.',[VersionMajor],'.',[VersionWrite],'.',[VersionMinor]) AS [fullName]\r\n FROM\r\n [meta].[ECSchemaDef] AS [refSchema]\r\n INNER JOIN [meta].[SchemaHasSchemaReferences] [ref]\r\n ON [ref].[TargetECInstanceId] = [refSchema].[ECInstanceId]\r\n )\r\n`;\r\n\r\nconst customAttributeQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'CustomAttributeClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'appliesTo', [class].[CustomAttributeContainerType],\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'CustomAttributeClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'appliesTo', [baseClass].[CustomAttributeContainerType]\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 3\r\n`;\r\n\r\nconst structQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'StructClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'StructClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description]\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 2\r\n`;\r\n\r\nconst relationshipQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'RelationshipClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'strength', ${strength(\"class\")},\r\n 'strengthDirection', ${strengthDirection(\"class\")},\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'RelationshipClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'strength', ${strength(\"baseClass\")},\r\n 'strengthDirection', ${strengthDirection(\"baseClass\")}\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 1\r\n`;\r\n\r\nconst entityQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'EntityClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'EntityClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description]\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n AND NOT EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [baseClass].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n ),\r\n 'mixins', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [baseClass].[ECInstanceId]\r\n ),\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([mixinBaseClass].[ECInstanceId], 's'),\r\n 'name', [mixinBaseClass].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"mixinBaseClass\")},\r\n 'label', [mixinBaseClass].[DisplayLabel],\r\n 'description', [mixinBaseClass].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [mixinBaseClass].[ECInstanceId]\r\n )\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [mixinBaseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [mixinBaseClassMap]\r\n ON [mixinBaseClassMap].[TargetECInstanceId] = [mixinBaseClass].[ECInstanceId]\r\n WHERE [mixinBaseClassMap].[SourceECInstanceId] = [baseClass].[ECInstanceId]\r\n )\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n AND EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [baseClass].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 0\r\n AND NOT EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n`;\r\n\r\nconst mixinQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [class].[ECInstanceId]\r\n ),\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [baseClass].[ECInstanceId]\r\n )\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 0 AND EXISTS (SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n`;\r\n\r\nconst withSchemaItems = `\r\nSchemaItems AS (\r\n ${customAttributeQuery}\r\n UNION ALL\r\n ${structQuery}\r\n UNION ALL\r\n ${relationshipQuery}\r\n UNION ALL\r\n ${entityQuery}\r\n UNION ALL\r\n ${mixinQuery}\r\n UNION ALL\r\n ${SchemaItemQueries.enumeration()}\r\n UNION ALL\r\n ${SchemaItemQueries.kindOfQuantity()}\r\n UNION ALL\r\n ${SchemaItemQueries.propertyCategory()}\r\n UNION ALL\r\n ${SchemaItemQueries.unit()}\r\n UNION ALL\r\n ${SchemaItemQueries.invertedUnit()}\r\n UNION ALL\r\n ${SchemaItemQueries.constant()}\r\n UNION ALL\r\n ${SchemaItemQueries.phenomenon()}\r\n UNION ALL\r\n ${SchemaItemQueries.unitSystem()}\r\n UNION ALL\r\n ${SchemaItemQueries.format()}\r\n )\r\n`;\r\n\r\nconst schemaStubQuery = `\r\n WITH\r\n ${withSchemaReferences},\r\n ${withAppliesTo},\r\n ${withSchemaItems}\r\n SELECT\r\n [Name] as [name],\r\n CONCAT('',[VersionMajor],'.',[VersionWrite],'.',[VersionMinor]) AS [version],\r\n [Alias] as [alias],\r\n [DisplayLabel] as [displayLabel],\r\n [Description] as [description],\r\n (\r\n SELECT\r\n json_group_array([schemaReferences].[fullName])\r\n FROM\r\n [SchemaReferences] [schemaReferences]\r\n WHERE\r\n [schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]\r\n ) AS [references],\r\n (\r\n SELECT\r\n json_group_array(json([items].[item]))\r\n FROM\r\n [SchemaItems] [items]\r\n WHERE\r\n [items].[SchemaId] = [schemaDef].[ECInstanceId]\r\n ) AS [items]\r\n FROM\r\n [meta].[ECSchemaDef] [schemaDef]\r\n WHERE [Name] = :schemaName\r\n`;\r\n\r\nconst schemaInfoQuery = `\r\n WITH\r\n ${withSchemaReferences}\r\n SELECT\r\n [Name] as [name],\r\n CONCAT('',[VersionMajor],'.',[VersionWrite],'.',[VersionMinor]) AS [version],\r\n [Alias] as [alias],\r\n (\r\n SELECT\r\n json_group_array([schemaReferences].[fullName])\r\n FROM\r\n [SchemaReferences] [schemaReferences]\r\n WHERE\r\n [schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]\r\n ) AS [references]\r\n FROM\r\n [meta].[ECSchemaDef] [schemaDef]\r\n`;\r\n\r\n/**\r\n * Partial Schema queries.\r\n * @internal\r\n */\r\nexport const ecsqlQueries = {\r\n schemaStubQuery,\r\n schemaInfoQuery,\r\n};\r\n"]}
1
+ {"version":3,"file":"SchemaStubQueries.js","sourceRoot":"","sources":["../../../src/IncrementalLoading/SchemaStubQueries.ts"],"names":[],"mappings":"AAAA;;;gGAGgG;AAChG,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;IACxC,OAAO;;cAEK,KAAK;cACL,KAAK;cACL,KAAK;;;GAGhB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAE,EAAE;IACxC,OAAO;;cAEK,KAAK;cACL,KAAK;cACL,KAAK;;;GAGhB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,KAAa,EAAE,EAAE;IACjD,OAAO;;cAEK,KAAK;cACL,KAAK;;;GAGhB,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG;;;;;;;;;;;;;;CAcrB,CAAC;AAEF,MAAM,oBAAoB,GAAG;;;;;;;;;;CAU5B,CAAC;AAEF,MAAM,oBAAoB,GAAG;;;;;;oBAMT,QAAQ,CAAC,OAAO,CAAC;;;;;;;;;;0BAUX,QAAQ,CAAC,WAAW,CAAC;;;;;;;;;;;;;;CAc9C,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;oBAMA,QAAQ,CAAC,OAAO,CAAC;;;;;;;;;0BASX,QAAQ,CAAC,WAAW,CAAC;;;;;;;;;;;;;CAa9C,CAAC;AAEF,MAAM,iBAAiB,GAAG;;;;;;oBAMN,QAAQ,CAAC,OAAO,CAAC;;;oBAGjB,QAAQ,CAAC,OAAO,CAAC;6BACR,iBAAiB,CAAC,OAAO,CAAC;;;;;;;0BAO7B,QAAQ,CAAC,WAAW,CAAC;;;0BAGrB,QAAQ,CAAC,WAAW,CAAC;mCACZ,iBAAiB,CAAC,WAAW,CAAC;;;;;;;;;;;CAWhE,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;oBAMA,QAAQ,CAAC,OAAO,CAAC;;;;;;;;;0BASX,QAAQ,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;0BAkBrB,QAAQ,CAAC,WAAW,CAAC;;;;;;;;;;;;;;gCAcf,QAAQ,CAAC,gBAAgB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6BzD,CAAC;AAEF,MAAM,UAAU,GAAG;;;;;;oBAMC,QAAQ,CAAC,OAAO,CAAC;;;;;;;;;;;;;;0BAcX,QAAQ,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;CAmB9C,CAAC;AAEF,MAAM,eAAe,GAAG;;IAEpB,oBAAoB;;IAEpB,WAAW;;IAEX,iBAAiB;;IAEjB,WAAW;;IAEX,UAAU;;IAEV,iBAAiB,CAAC,WAAW,EAAE;;IAE/B,iBAAiB,CAAC,cAAc,EAAE;;IAElC,iBAAiB,CAAC,gBAAgB,EAAE;;IAEpC,iBAAiB,CAAC,IAAI,EAAE;;IAExB,iBAAiB,CAAC,YAAY,EAAE;;IAEhC,iBAAiB,CAAC,QAAQ,EAAE;;IAE5B,iBAAiB,CAAC,UAAU,EAAE;;IAE9B,iBAAiB,CAAC,UAAU,EAAE;;IAE9B,iBAAiB,CAAC,MAAM,EAAE;;CAE7B,CAAC;AAEF,MAAM,eAAe,GAAG;;MAElB,aAAa;MACb,eAAe;;;;;;;;CAQpB,CAAC;AAEF,MAAM,eAAe,GAAG;;MAElB,oBAAoB;;;;;;;;;;;;;;;;;CAiBzB,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,eAAe;IACf,eAAe;CAChB,CAAC","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n * See LICENSE.md in the project root for license terms and full copyright notice.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport { SchemaItemQueries } from \"./SchemaItemQueries\";\r\n\r\nexport const modifier = (alias: string) => {\r\n return `\r\n CASE\r\n WHEN [${alias}].[modifier] = 0 THEN 'None'\r\n WHEN [${alias}].[modifier] = 1 THEN 'Abstract'\r\n WHEN [${alias}].[modifier] = 2 THEN 'Sealed'\r\n ELSE NULL\r\n END\r\n `;\r\n};\r\n\r\nexport const strength = (alias: string) => {\r\n return `\r\n CASE\r\n WHEN [${alias}].[RelationshipStrength] = 0 THEN 'Referencing'\r\n WHEN [${alias}].[RelationshipStrength] = 1 THEN 'Holding'\r\n WHEN [${alias}].[RelationshipStrength] = 2 THEN 'Embedding'\r\n ELSE NULL\r\n END\r\n `;\r\n};\r\n\r\nexport const strengthDirection = (alias: string) => {\r\n return `\r\n CASE\r\n WHEN [${alias}].[RelationshipStrengthDirection] = 1 THEN 'Forward'\r\n WHEN [${alias}].[RelationshipStrengthDirection] = 2 THEN 'Backward'\r\n ELSE NULL\r\n END\r\n `;\r\n};\r\n\r\nconst withAppliesTo = `\r\n AppliesToCTE AS (\r\n SELECT\r\n [mixinAppliesTo].[ECInstanceId] AS [AppliesToId],\r\n [appliesToSchema].[name] as [AppliesToSchema],\r\n json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.IsMixin.AppliesToEntityClass') AS [AppliesTo]\r\n FROM [meta].[CustomAttribute] [ca]\r\n JOIN [meta].[ECClassDef] [mixinAppliesTo]\r\n ON [mixinAppliesTo].[ECInstanceId] = [ca].[ContainerId]\r\n JOIN [meta].[ECSchemaDef] [appliesToSchema]\r\n ON [appliesToSchema].[ECInstanceId] = [mixinAppliesTo].[Schema].[Id]\r\n WHERE [ca].[ContainerType] = 30\r\n AND json_extract(XmlCAToJson([ca].[Class].[Id], [ca].[Instance]), '$.ecClass') = 'IsMixin'\r\n )\r\n`;\r\n\r\nconst withSchemaReferences = `\r\n SchemaReferences AS (\r\n SELECT\r\n [ref].[SourceECInstanceId] AS [SchemaId],\r\n CONCAT([Name],'.',[VersionMajor],'.',[VersionWrite],'.',[VersionMinor]) AS [fullName]\r\n FROM\r\n [meta].[ECSchemaDef] AS [refSchema]\r\n INNER JOIN [meta].[SchemaHasSchemaReferences] [ref]\r\n ON [ref].[TargetECInstanceId] = [refSchema].[ECInstanceId]\r\n )\r\n`;\r\n\r\nconst customAttributeQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'CustomAttributeClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'appliesTo', [class].[CustomAttributeContainerType],\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'CustomAttributeClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'appliesTo', [baseClass].[CustomAttributeContainerType]\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 3\r\n`;\r\n\r\nconst structQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'StructClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'StructClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description]\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 2\r\n`;\r\n\r\nconst relationshipQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'RelationshipClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'strength', ${strength(\"class\")},\r\n 'strengthDirection', ${strengthDirection(\"class\")},\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'RelationshipClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'strength', ${strength(\"baseClass\")},\r\n 'strengthDirection', ${strengthDirection(\"baseClass\")}\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 1\r\n`;\r\n\r\nconst entityQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'EntityClass',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'EntityClass',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description]\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n AND NOT EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [baseClass].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n ),\r\n 'mixins', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [baseClass].[ECInstanceId]\r\n ),\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([mixinBaseClass].[ECInstanceId], 's'),\r\n 'name', [mixinBaseClass].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"mixinBaseClass\")},\r\n 'label', [mixinBaseClass].[DisplayLabel],\r\n 'description', [mixinBaseClass].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [mixinBaseClass].[ECInstanceId]\r\n )\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [mixinBaseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [mixinBaseClassMap]\r\n ON [mixinBaseClassMap].[TargetECInstanceId] = [mixinBaseClass].[ECInstanceId]\r\n WHERE [mixinBaseClassMap].[SourceECInstanceId] = [baseClass].[ECInstanceId]\r\n )\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n AND EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [baseClass].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 0\r\n AND NOT EXISTS(SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n`;\r\n\r\nconst mixinQuery = `\r\n SELECT\r\n [Schema].[Id] AS [SchemaId],\r\n json_object(\r\n 'name', [class].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"class\")},\r\n 'label', [class].[DisplayLabel],\r\n 'description', [class].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [class].[ECInstanceId]\r\n ),\r\n 'baseClasses', (\r\n SELECT\r\n json_group_array(json(json_object(\r\n 'schema', ec_classname([baseClass].[ECInstanceId], 's'),\r\n 'name', [baseClass].[Name],\r\n 'schemaItemType', 'Mixin',\r\n 'modifier', ${modifier(\"baseClass\")},\r\n 'label', [baseClass].[DisplayLabel],\r\n 'description', [baseClass].[Description],\r\n 'appliesTo', (\r\n SELECT IIF(instr([atCTE].[AppliesTo], ':') > 1, ec_classname(ec_classId([atCTE].[AppliesTo]), 's.c'), CONCAT([atCTE].[AppliesToSchema], '.', [atCTE].[AppliesTo]))\r\n FROM [AppliesToCTE] [atCTE]\r\n WHERE [atCTE].[AppliesToId] = [baseClass].[ECInstanceId]\r\n )\r\n )))\r\n FROM\r\n [meta].[ECClassDef] [baseClass]\r\n INNER JOIN [meta].[ClassHasAllBaseClasses] [baseClassMap]\r\n ON [baseClassMap].[TargetECInstanceId] = [baseclass].[ECInstanceId]\r\n WHERE [baseClassMap].[SourceECInstanceId] = [class].[ECInstanceId]\r\n )\r\n ) AS [item]\r\n FROM [meta].[ECClassDef] [class]\r\n WHERE [class].[Type] = 0 AND EXISTS (SELECT 1 FROM [meta].[ClassCustomAttribute] [ca] WHERE [class].[ECInstanceId] = [ca].[Class].[Id]\r\n AND [ca].[CustomAttributeClass].[Id] Is ([CoreCA].[IsMixin]))\r\n`;\r\n\r\nconst withSchemaItems = `\r\nSchemaItems AS (\r\n ${customAttributeQuery}\r\n UNION ALL\r\n ${structQuery}\r\n UNION ALL\r\n ${relationshipQuery}\r\n UNION ALL\r\n ${entityQuery}\r\n UNION ALL\r\n ${mixinQuery}\r\n UNION ALL\r\n ${SchemaItemQueries.enumeration()}\r\n UNION ALL\r\n ${SchemaItemQueries.kindOfQuantity()}\r\n UNION ALL\r\n ${SchemaItemQueries.propertyCategory()}\r\n UNION ALL\r\n ${SchemaItemQueries.unit()}\r\n UNION ALL\r\n ${SchemaItemQueries.invertedUnit()}\r\n UNION ALL\r\n ${SchemaItemQueries.constant()}\r\n UNION ALL\r\n ${SchemaItemQueries.phenomenon()}\r\n UNION ALL\r\n ${SchemaItemQueries.unitSystem()}\r\n UNION ALL\r\n ${SchemaItemQueries.format()}\r\n )\r\n`;\r\n\r\nconst schemaStubQuery = `\r\n WITH\r\n ${withAppliesTo},\r\n ${withSchemaItems}\r\n SELECT\r\n [items].[item]\r\n FROM\r\n [SchemaItems] [items]\r\n JOIN [meta].[ECSchemaDef] [schemaDef]\r\n ON [schemaDef].[ECInstanceId] = [items].[SchemaId]\r\n WHERE [schemaDef].[Name] = :schemaName\r\n`;\r\n\r\nconst schemaInfoQuery = `\r\n WITH\r\n ${withSchemaReferences}\r\n SELECT\r\n [Name] as [name],\r\n CONCAT('',[VersionMajor],'.',[VersionWrite],'.',[VersionMinor]) AS [version],\r\n [Alias] as [alias],\r\n [DisplayLabel] as [label],\r\n [Description] as [description],\r\n (\r\n SELECT\r\n json_group_array([schemaReferences].[fullName])\r\n FROM\r\n [SchemaReferences] [schemaReferences]\r\n WHERE\r\n [schemaReferences].[SchemaId] = [schemaDef].[ECInstanceId]\r\n ) AS [references]\r\n FROM\r\n [meta].[ECSchemaDef] [schemaDef]\r\n`;\r\n\r\n/**\r\n * Partial Schema queries.\r\n * @internal\r\n */\r\nexport const ecsqlQueries = {\r\n schemaStubQuery,\r\n schemaInfoQuery,\r\n};\r\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@itwin/ecschema-metadata",
3
- "version": "5.2.0-dev.23",
3
+ "version": "5.2.0-dev.25",
4
4
  "description": "ECObjects core concepts in typescript",
5
5
  "license": "MIT",
6
6
  "main": "lib/cjs/ecschema-metadata.js",
@@ -48,13 +48,13 @@
48
48
  "rimraf": "^6.0.1",
49
49
  "sinon": "^17.0.2",
50
50
  "typescript": "~5.6.2",
51
- "@itwin/build-tools": "5.2.0-dev.23",
52
- "@itwin/core-quantity": "5.2.0-dev.23",
53
- "@itwin/core-bentley": "5.2.0-dev.23"
51
+ "@itwin/build-tools": "5.2.0-dev.25",
52
+ "@itwin/core-bentley": "5.2.0-dev.25",
53
+ "@itwin/core-quantity": "5.2.0-dev.25"
54
54
  },
55
55
  "peerDependencies": {
56
- "@itwin/core-bentley": "5.2.0-dev.23",
57
- "@itwin/core-quantity": "5.2.0-dev.23"
56
+ "@itwin/core-bentley": "5.2.0-dev.25",
57
+ "@itwin/core-quantity": "5.2.0-dev.25"
58
58
  },
59
59
  "nyc": {
60
60
  "extends": "./node_modules/@itwin/build-tools/.nycrc"