@itwin/core-common 4.1.0-dev.2 → 4.1.0-dev.20
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 +28 -1
- package/lib/cjs/ChangedElements.d.ts +2 -0
- package/lib/cjs/ChangedElements.d.ts.map +1 -1
- package/lib/cjs/ChangedElements.js +2 -0
- package/lib/cjs/ChangedElements.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.d.ts +26 -2
- package/lib/cjs/ConcurrentQuery.d.ts.map +1 -1
- package/lib/cjs/ConcurrentQuery.js +29 -3
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/ECSqlReader.d.ts +163 -6
- package/lib/cjs/ECSqlReader.d.ts.map +1 -1
- package/lib/cjs/ECSqlReader.js +122 -10
- package/lib/cjs/ECSqlReader.js.map +1 -1
- package/lib/cjs/FeatureTable.d.ts +4 -5
- package/lib/cjs/FeatureTable.d.ts.map +1 -1
- package/lib/cjs/FeatureTable.js +7 -12
- package/lib/cjs/FeatureTable.js.map +1 -1
- package/lib/cjs/IpcAppProps.d.ts +6 -6
- package/lib/cjs/IpcAppProps.d.ts.map +1 -1
- package/lib/cjs/IpcAppProps.js +8 -9
- package/lib/cjs/IpcAppProps.js.map +1 -1
- package/lib/cjs/NativeAppProps.d.ts +4 -3
- package/lib/cjs/NativeAppProps.d.ts.map +1 -1
- package/lib/cjs/NativeAppProps.js +5 -4
- package/lib/cjs/NativeAppProps.js.map +1 -1
- package/lib/cjs/QPoint.d.ts +18 -0
- package/lib/cjs/QPoint.d.ts.map +1 -1
- package/lib/cjs/QPoint.js +22 -0
- package/lib/cjs/QPoint.js.map +1 -1
- package/lib/cjs/ipc/IpcSession.d.ts +4 -0
- package/lib/cjs/ipc/IpcSession.d.ts.map +1 -1
- package/lib/cjs/ipc/IpcSession.js +6 -6
- package/lib/cjs/ipc/IpcSession.js.map +1 -1
- package/lib/cjs/rpc/core/RpcRequest.d.ts.map +1 -1
- package/lib/cjs/rpc/core/RpcRequest.js.map +1 -1
- package/lib/cjs/rpc/web/BentleyCloudRpcProtocol.js +1 -1
- package/lib/cjs/rpc/web/BentleyCloudRpcProtocol.js.map +1 -1
- package/lib/esm/ChangedElements.d.ts +2 -0
- package/lib/esm/ChangedElements.d.ts.map +1 -1
- package/lib/esm/ChangedElements.js +2 -0
- package/lib/esm/ChangedElements.js.map +1 -1
- package/lib/esm/ConcurrentQuery.d.ts +26 -2
- package/lib/esm/ConcurrentQuery.d.ts.map +1 -1
- package/lib/esm/ConcurrentQuery.js +29 -3
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/ECSqlReader.d.ts +163 -6
- package/lib/esm/ECSqlReader.d.ts.map +1 -1
- package/lib/esm/ECSqlReader.js +122 -10
- package/lib/esm/ECSqlReader.js.map +1 -1
- package/lib/esm/FeatureTable.d.ts +4 -5
- package/lib/esm/FeatureTable.d.ts.map +1 -1
- package/lib/esm/FeatureTable.js +7 -12
- package/lib/esm/FeatureTable.js.map +1 -1
- package/lib/esm/IpcAppProps.d.ts +6 -6
- package/lib/esm/IpcAppProps.d.ts.map +1 -1
- package/lib/esm/IpcAppProps.js +7 -8
- package/lib/esm/IpcAppProps.js.map +1 -1
- package/lib/esm/NativeAppProps.d.ts +4 -3
- package/lib/esm/NativeAppProps.d.ts.map +1 -1
- package/lib/esm/NativeAppProps.js +4 -3
- package/lib/esm/NativeAppProps.js.map +1 -1
- package/lib/esm/QPoint.d.ts +18 -0
- package/lib/esm/QPoint.d.ts.map +1 -1
- package/lib/esm/QPoint.js +22 -0
- package/lib/esm/QPoint.js.map +1 -1
- package/lib/esm/ipc/IpcSession.d.ts +4 -0
- package/lib/esm/ipc/IpcSession.d.ts.map +1 -1
- package/lib/esm/ipc/IpcSession.js +5 -5
- package/lib/esm/ipc/IpcSession.js.map +1 -1
- package/lib/esm/rpc/core/RpcRequest.d.ts.map +1 -1
- package/lib/esm/rpc/core/RpcRequest.js.map +1 -1
- package/lib/esm/rpc/web/BentleyCloudRpcProtocol.js +1 -1
- package/lib/esm/rpc/web/BentleyCloudRpcProtocol.js.map +1 -1
- package/package.json +6 -6
package/lib/cjs/ECSqlReader.js
CHANGED
|
@@ -24,7 +24,9 @@ class PropertyMetaDataMap {
|
|
|
24
24
|
this._byNoCase.set(property.jsonName.toLowerCase(), property.index);
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
|
-
get length() {
|
|
27
|
+
get length() {
|
|
28
|
+
return this.properties.length;
|
|
29
|
+
}
|
|
28
30
|
[Symbol.iterator]() {
|
|
29
31
|
return this.properties[Symbol.iterator]();
|
|
30
32
|
}
|
|
@@ -51,9 +53,33 @@ class PropertyMetaDataMap {
|
|
|
51
53
|
}
|
|
52
54
|
}
|
|
53
55
|
exports.PropertyMetaDataMap = PropertyMetaDataMap;
|
|
54
|
-
/**
|
|
56
|
+
/**
|
|
57
|
+
* Execute ECSQL statements and read the results.
|
|
58
|
+
*
|
|
59
|
+
* The query results are returned one row at a time. The format of the row is dictated by the
|
|
60
|
+
* [[QueryOptions.rowFormat]] specified in the `options` parameter of the constructed ECSqlReader object. Defaults to
|
|
61
|
+
* [[QueryRowFormat.UseECSqlPropertyIndexes]] when no `rowFormat` is defined.
|
|
62
|
+
*
|
|
63
|
+
* There are three primary ways to interact with and read the results:
|
|
64
|
+
* - Stream them using ECSqlReader as an asynchronous iterator.
|
|
65
|
+
* - Iterator over them manually using [[ECSqlReader.step]].
|
|
66
|
+
* - Capture all of the results at once in an array using [[QueryRowProxy.toArray]].
|
|
67
|
+
*
|
|
68
|
+
* @see
|
|
69
|
+
* - [ECSQL Overview]($docs/learning/backend/ExecutingECSQL)
|
|
70
|
+
* - [ECSQL Row Formats]($docs/learning/ECSQLRowFormat) for more details on how rows are formatted.
|
|
71
|
+
* - [ECSQL Code Examples]($docs/learning/ECSQLCodeExamples#iterating-over-query-results) for examples of each
|
|
72
|
+
* of the above ways of interacting with ECSqlReader.
|
|
73
|
+
*
|
|
74
|
+
* @note When iterating over the results, the current row will be a [[QueryRowProxy]] object. To get the row as a basic
|
|
75
|
+
* JavaScript object, call [[QueryRowProxy.toRow]] on it.
|
|
76
|
+
*
|
|
77
|
+
* @beta
|
|
78
|
+
*/
|
|
55
79
|
class ECSqlReader {
|
|
56
|
-
/**
|
|
80
|
+
/**
|
|
81
|
+
* @internal
|
|
82
|
+
*/
|
|
57
83
|
constructor(_executor, query, param, options) {
|
|
58
84
|
this._executor = _executor;
|
|
59
85
|
this.query = query;
|
|
@@ -67,6 +93,7 @@ class ECSqlReader {
|
|
|
67
93
|
this._param = new ConcurrentQuery_1.QueryBinder().serialize();
|
|
68
94
|
this._lockArgs = false;
|
|
69
95
|
this._stats = { backendCpuTime: 0, backendTotalTime: 0, backendMemUsed: 0, backendRowsReturned: 0, totalTime: 0, retryCount: 0 };
|
|
96
|
+
this._options = new ConcurrentQuery_1.QueryOptionsBuilder().getOptions();
|
|
70
97
|
this._rowProxy = new Proxy(this, {
|
|
71
98
|
get: (target, key) => {
|
|
72
99
|
if (typeof key === "string") {
|
|
@@ -101,7 +128,6 @@ class ECSqlReader {
|
|
|
101
128
|
return keys;
|
|
102
129
|
},
|
|
103
130
|
});
|
|
104
|
-
this._options = new ConcurrentQuery_1.QueryOptionsBuilder().getOptions();
|
|
105
131
|
if (query.trim().length === 0) {
|
|
106
132
|
throw new Error("expecting non-empty ecsql statement");
|
|
107
133
|
}
|
|
@@ -148,21 +174,70 @@ class ECSqlReader {
|
|
|
148
174
|
}
|
|
149
175
|
this._done = false;
|
|
150
176
|
}
|
|
151
|
-
|
|
152
|
-
|
|
177
|
+
/**
|
|
178
|
+
* Get the current row from the query result. The current row is the one most recently stepped-to
|
|
179
|
+
* (by step() or during iteration).
|
|
180
|
+
*
|
|
181
|
+
* Each value from the row can be accessed by index or by name.
|
|
182
|
+
*
|
|
183
|
+
* The format of the row is dictated by the [[QueryOptions.rowFormat]] specified in the `options` parameter of the
|
|
184
|
+
* constructed ECSqlReader object.
|
|
185
|
+
*
|
|
186
|
+
* @see
|
|
187
|
+
* - [[QueryRowFormat]]
|
|
188
|
+
* - [ECSQL Row Formats]($docs/learning/ECSQLRowFormat)
|
|
189
|
+
*
|
|
190
|
+
* @note The current row is be a [[QueryRowProxy]] object. To get the row as a basic JavaScript object, call
|
|
191
|
+
* [[QueryRowProxy.toRow]] on it.
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```ts
|
|
195
|
+
* const reader = iModel.createQueryReader("SELECT ECInstanceId FROM bis.Element");
|
|
196
|
+
* while (await reader.step()) {
|
|
197
|
+
* // Both lines below print the same value
|
|
198
|
+
* console.log(reader.current[0]);
|
|
199
|
+
* console.log(reader.current.ecinstanceid);
|
|
200
|
+
* }
|
|
201
|
+
* ```
|
|
202
|
+
*
|
|
203
|
+
* @return The current row as a [[QueryRowProxy]].
|
|
204
|
+
*/
|
|
205
|
+
get current() {
|
|
206
|
+
return this._rowProxy;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Clear all bindings.
|
|
210
|
+
*/
|
|
153
211
|
resetBindings() {
|
|
154
212
|
this._param = new ConcurrentQuery_1.QueryBinder().serialize();
|
|
155
213
|
this._lockArgs = false;
|
|
156
214
|
}
|
|
157
|
-
|
|
158
|
-
|
|
215
|
+
/**
|
|
216
|
+
* Returns if there are more rows available.
|
|
217
|
+
*
|
|
218
|
+
* @returns `true` if all rows have been stepped through already.<br/>
|
|
219
|
+
* `false` if there are any yet unaccessed rows.
|
|
220
|
+
*/
|
|
221
|
+
get done() {
|
|
222
|
+
return this._done;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
*
|
|
226
|
+
*/
|
|
159
227
|
getRowInternal() {
|
|
160
228
|
if (this._localRows.length <= this._localOffset)
|
|
161
229
|
throw new Error("no current row");
|
|
162
230
|
return this._localRows[this._localOffset];
|
|
163
231
|
}
|
|
164
|
-
|
|
165
|
-
|
|
232
|
+
/**
|
|
233
|
+
* Get performance-related statistics for the current query.
|
|
234
|
+
*/
|
|
235
|
+
get stats() {
|
|
236
|
+
return this._stats;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
*
|
|
240
|
+
*/
|
|
166
241
|
async readRows() {
|
|
167
242
|
if (this._globalDone) {
|
|
168
243
|
return [];
|
|
@@ -193,6 +268,9 @@ class ECSqlReader {
|
|
|
193
268
|
}
|
|
194
269
|
return resp.data;
|
|
195
270
|
}
|
|
271
|
+
/**
|
|
272
|
+
*
|
|
273
|
+
*/
|
|
196
274
|
async runWithRetry(request) {
|
|
197
275
|
const needRetry = (rs) => (rs.status === ConcurrentQuery_1.DbResponseStatus.Partial || rs.status === ConcurrentQuery_1.DbResponseStatus.QueueFull || rs.status === ConcurrentQuery_1.DbResponseStatus.Timeout) && (rs.data.length === 0);
|
|
198
276
|
const updateStats = (rs) => {
|
|
@@ -223,6 +301,9 @@ class ECSqlReader {
|
|
|
223
301
|
updateStats(resp);
|
|
224
302
|
return resp;
|
|
225
303
|
}
|
|
304
|
+
/**
|
|
305
|
+
*
|
|
306
|
+
*/
|
|
226
307
|
formatCurrentRow(onlyReturnObject = false) {
|
|
227
308
|
if (!onlyReturnObject && this._options.rowFormat === ConcurrentQuery_1.QueryRowFormat.UseECSqlPropertyIndexes) {
|
|
228
309
|
return this.getRowInternal();
|
|
@@ -240,12 +321,20 @@ class ECSqlReader {
|
|
|
240
321
|
}
|
|
241
322
|
return formattedRow;
|
|
242
323
|
}
|
|
324
|
+
/**
|
|
325
|
+
* Get the metadata for each column in the query result.
|
|
326
|
+
*
|
|
327
|
+
* @returns An array of [[QueryPropertyMetaData]].
|
|
328
|
+
*/
|
|
243
329
|
async getMetaData() {
|
|
244
330
|
if (this._props.length === 0) {
|
|
245
331
|
await this.fetchRows();
|
|
246
332
|
}
|
|
247
333
|
return this._props.properties;
|
|
248
334
|
}
|
|
335
|
+
/**
|
|
336
|
+
*
|
|
337
|
+
*/
|
|
249
338
|
async fetchRows() {
|
|
250
339
|
this._localOffset = -1;
|
|
251
340
|
this._localRows = await this.readRows();
|
|
@@ -253,6 +342,12 @@ class ECSqlReader {
|
|
|
253
342
|
this._done = true;
|
|
254
343
|
}
|
|
255
344
|
}
|
|
345
|
+
/**
|
|
346
|
+
* Step to the next row of the query result.
|
|
347
|
+
*
|
|
348
|
+
* @returns `true` if a row can be read from `current`.<br/>
|
|
349
|
+
* `false` if there are no more rows; i.e., all rows have been stepped through already.
|
|
350
|
+
*/
|
|
256
351
|
async step() {
|
|
257
352
|
if (this._done) {
|
|
258
353
|
return false;
|
|
@@ -268,6 +363,11 @@ class ECSqlReader {
|
|
|
268
363
|
}
|
|
269
364
|
return true;
|
|
270
365
|
}
|
|
366
|
+
/**
|
|
367
|
+
* Get all remaining rows from the query result.
|
|
368
|
+
*
|
|
369
|
+
* @returns An array of all remaining rows from the query result.
|
|
370
|
+
*/
|
|
271
371
|
async toArray() {
|
|
272
372
|
const rows = [];
|
|
273
373
|
while (await this.step()) {
|
|
@@ -275,9 +375,21 @@ class ECSqlReader {
|
|
|
275
375
|
}
|
|
276
376
|
return rows;
|
|
277
377
|
}
|
|
378
|
+
/**
|
|
379
|
+
* Accessor for using ECSqlReader as an asynchronous iterator.
|
|
380
|
+
*
|
|
381
|
+
* @returns An asynchronous iterator over the rows returned by the executed ECSQL query.
|
|
382
|
+
*/
|
|
278
383
|
[Symbol.asyncIterator]() {
|
|
279
384
|
return this;
|
|
280
385
|
}
|
|
386
|
+
/**
|
|
387
|
+
* Calls step when called as an iterator.
|
|
388
|
+
*
|
|
389
|
+
* Returns the row alongside a `done` boolean to indicate if there are any more rows for an iterator to step to.
|
|
390
|
+
*
|
|
391
|
+
* @returns An object with the keys: `value` which contains the row and `done` which contains a boolean.
|
|
392
|
+
*/
|
|
281
393
|
async next() {
|
|
282
394
|
if (await this.step()) {
|
|
283
395
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECSqlReader.js","sourceRoot":"","sources":["../../src/ECSqlReader.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\n/** @packageDocumentation\r\n * @module iModels\r\n */\r\nimport { Base64EncodedString } from \"./Base64EncodedString\";\r\nimport {\r\n DbQueryError, DbQueryRequest, DbQueryResponse, DbRequestExecutor, DbRequestKind, DbResponseStatus, DbValueFormat, QueryBinder, QueryOptions, QueryOptionsBuilder,\r\n QueryPropertyMetaData, QueryRowFormat,\r\n} from \"./ConcurrentQuery\";\r\n\r\n/** @beta */\r\nexport class PropertyMetaDataMap implements Iterable<QueryPropertyMetaData> {\r\n private _byPropName = new Map<string, number>();\r\n private _byJsonName = new Map<string, number>();\r\n private _byNoCase = new Map<string, number>();\r\n public constructor(public readonly properties: QueryPropertyMetaData[]) {\r\n for (const property of this.properties) {\r\n this._byPropName.set(property.name, property.index);\r\n this._byJsonName.set(property.jsonName, property.index);\r\n this._byNoCase.set(property.name.toLowerCase(), property.index);\r\n this._byNoCase.set(property.jsonName.toLowerCase(), property.index);\r\n }\r\n }\r\n public get length(): number { return this.properties.length; }\r\n\r\n public [Symbol.iterator](): Iterator<QueryPropertyMetaData, any, undefined> {\r\n return this.properties[Symbol.iterator]();\r\n }\r\n public findByName(name: string): QueryPropertyMetaData | undefined {\r\n const index = this._byPropName.get(name);\r\n if (typeof index === \"number\") {\r\n return this.properties[index];\r\n }\r\n return undefined;\r\n }\r\n public findByJsonName(name: string): QueryPropertyMetaData | undefined {\r\n const index = this._byJsonName.get(name);\r\n if (typeof index === \"number\") {\r\n return this.properties[index];\r\n }\r\n return undefined;\r\n }\r\n public findByNoCase(name: string): QueryPropertyMetaData | undefined {\r\n const index = this._byNoCase.get(name.toLowerCase());\r\n if (typeof index === \"number\") {\r\n return this.properties[index];\r\n }\r\n return undefined;\r\n }\r\n}\r\n/**\r\n * @beta\r\n*/\r\nexport type QueryValueType = any;\r\n\r\n/** @beta */\r\nexport interface QueryRowProxy {\r\n toRow(): any;\r\n toArray(): QueryValueType[];\r\n getMetaData(): QueryPropertyMetaData[];\r\n [propertyName: string]: QueryValueType;\r\n [propertyIndex: number]: QueryValueType;\r\n}\r\n\r\n/** @beta */\r\nexport interface QueryStats {\r\n backendCpuTime: number; // Time spent running the query. It exclude query time in queue. Time is in microseconds.\r\n backendTotalTime: number; // backend total time spent running the query. Time is in milliseconds.\r\n backendMemUsed: number; // Estimated m emory used for query. Time is in milliseconds.\r\n backendRowsReturned: number; // Total rows returned by backend.\r\n totalTime: number; // Round trip time from client perspective.Time is in milliseconds.\r\n retryCount: number;\r\n}\r\n\r\n/** @beta */\r\nexport class ECSqlReader implements AsyncIterableIterator<QueryRowProxy> {\r\n private static readonly _maxRetryCount = 10;\r\n private _localRows: any[] = [];\r\n private _localOffset: number = 0;\r\n private _globalOffset: number = -1;\r\n private _globalCount: number = -1;\r\n private _done: boolean = false;\r\n private _globalDone: boolean = false;\r\n private _props = new PropertyMetaDataMap([]);\r\n private _param = new QueryBinder().serialize();\r\n private _lockArgs: boolean = false;\r\n private _stats = { backendCpuTime: 0, backendTotalTime: 0, backendMemUsed: 0, backendRowsReturned: 0, totalTime: 0, retryCount: 0 };\r\n private _rowProxy = new Proxy<ECSqlReader>(this, {\r\n get: (target: ECSqlReader, key: string | Symbol) => {\r\n if (typeof key === \"string\") {\r\n const idx = Number.parseInt(key, 10);\r\n if (!Number.isNaN(idx)) {\r\n return target.getRowInternal()[idx];\r\n }\r\n const prop = target._props.findByNoCase(key);\r\n if (prop) {\r\n return target.getRowInternal()[prop.index];\r\n }\r\n if (key === \"getMetaData\") {\r\n return () => target._props.properties;\r\n }\r\n if (key === \"toRow\") {\r\n return () => target.formatCurrentRow(true);\r\n }\r\n if (key === \"toArray\") {\r\n return () => this.getRowInternal();\r\n }\r\n }\r\n return undefined;\r\n },\r\n has: (target: ECSqlReader, p: string | symbol) => {\r\n return !target._props.findByNoCase(p as string);\r\n },\r\n ownKeys: (target: ECSqlReader) => {\r\n const keys = [];\r\n for (const prop of target._props) {\r\n keys.push(prop.name);\r\n }\r\n return keys;\r\n },\r\n });\r\n private _options: QueryOptions = new QueryOptionsBuilder().getOptions();\r\n /** @internal */\r\n public constructor(private _executor: DbRequestExecutor<DbQueryRequest, DbQueryResponse>, public readonly query: string, param?: QueryBinder, options?: QueryOptions) {\r\n if (query.trim().length === 0) {\r\n throw new Error(\"expecting non-empty ecsql statement\");\r\n }\r\n if (param) {\r\n this._param = param.serialize();\r\n }\r\n this.reset(options);\r\n }\r\n private static replaceBase64WithUint8Array(row: any) {\r\n for (const key of Object.keys(row)) {\r\n const val = row[key];\r\n if (typeof val === \"string\") {\r\n if (Base64EncodedString.hasPrefix(val)) {\r\n row[key] = Base64EncodedString.toUint8Array(val);\r\n }\r\n } else if (typeof val === \"object\" && val !== null) {\r\n this.replaceBase64WithUint8Array(val);\r\n }\r\n }\r\n }\r\n public setParams(param: QueryBinder) {\r\n if (this._lockArgs) {\r\n throw new Error(\"call resetBindings() before setting or changing parameters\");\r\n }\r\n this._param = param.serialize();\r\n }\r\n public reset(options?: QueryOptions) {\r\n if (options) {\r\n this._options = options;\r\n }\r\n this._props = new PropertyMetaDataMap([]);\r\n this._localRows = [];\r\n this._globalDone = false;\r\n this._globalOffset = 0;\r\n this._globalCount = -1;\r\n if (typeof this._options.rowFormat === \"undefined\")\r\n this._options.rowFormat = QueryRowFormat.UseECSqlPropertyIndexes;\r\n if (this._options.limit) {\r\n if (typeof this._options.limit.offset === \"number\" && this._options.limit.offset > 0)\r\n this._globalOffset = this._options.limit.offset;\r\n if (typeof this._options.limit.count === \"number\" && this._options.limit.count > 0)\r\n this._globalCount = this._options.limit.count;\r\n }\r\n this._done = false;\r\n }\r\n public get current(): QueryRowProxy { return (this._rowProxy as any); }\r\n // clear all bindings\r\n public resetBindings() {\r\n this._param = new QueryBinder().serialize();\r\n this._lockArgs = false;\r\n }\r\n // return if there is any more rows available\r\n public get done(): boolean { return this._done; }\r\n public getRowInternal(): any[] {\r\n if (this._localRows.length <= this._localOffset)\r\n throw new Error(\"no current row\");\r\n return this._localRows[this._localOffset] as any[];\r\n }\r\n // return performance related statistics for current query.\r\n public get stats(): QueryStats { return this._stats; }\r\n private async readRows(): Promise<any[]> {\r\n if (this._globalDone) {\r\n return [];\r\n }\r\n this._lockArgs = true;\r\n this._globalOffset += this._localRows.length;\r\n this._globalCount -= this._localRows.length;\r\n if (this._globalCount === 0) {\r\n return [];\r\n }\r\n const valueFormat = this._options.rowFormat === QueryRowFormat.UseJsPropertyNames ? DbValueFormat.JsNames : DbValueFormat.ECSqlNames;\r\n const request: DbQueryRequest = {\r\n ... this._options,\r\n kind: DbRequestKind.ECSql,\r\n valueFormat,\r\n query: this.query,\r\n args: this._param,\r\n };\r\n request.includeMetaData = this._props.length > 0 ? false : true;\r\n request.limit = { offset: this._globalOffset, count: this._globalCount < 1 ? -1 : this._globalCount };\r\n const resp = await this.runWithRetry(request);\r\n this._globalDone = resp.status === DbResponseStatus.Done;\r\n if (this._props.length === 0 && resp.meta.length > 0) {\r\n this._props = new PropertyMetaDataMap(resp.meta);\r\n }\r\n for (const row of resp.data) {\r\n ECSqlReader.replaceBase64WithUint8Array(row);\r\n }\r\n return resp.data;\r\n }\r\n private async runWithRetry(request: DbQueryRequest) {\r\n const needRetry = (rs: DbQueryResponse) => (rs.status === DbResponseStatus.Partial || rs.status === DbResponseStatus.QueueFull || rs.status === DbResponseStatus.Timeout) && (rs.data.length === 0);\r\n const updateStats = (rs: DbQueryResponse) => {\r\n this._stats.backendCpuTime += rs.stats.cpuTime;\r\n this._stats.backendTotalTime += rs.stats.totalTime;\r\n this._stats.backendMemUsed += rs.stats.memUsed;\r\n this._stats.backendRowsReturned += rs.data.length;\r\n };\r\n const execQuery = async (req: DbQueryRequest) => {\r\n const startTime = Date.now();\r\n const rs = await this._executor.execute(req);\r\n this.stats.totalTime += (Date.now() - startTime);\r\n return rs;\r\n };\r\n let retry = ECSqlReader._maxRetryCount;\r\n let resp = await execQuery(request);\r\n DbQueryError.throwIfError(resp, request);\r\n while (--retry > 0 && needRetry(resp)) {\r\n resp = await execQuery(request);\r\n this._stats.retryCount += 1;\r\n if (needRetry(resp)) {\r\n updateStats(resp);\r\n }\r\n }\r\n if (retry === 0 && needRetry(resp)) {\r\n throw new Error(\"query too long to execute or server is too busy\");\r\n }\r\n updateStats(resp);\r\n return resp;\r\n }\r\n public formatCurrentRow(onlyReturnObject: boolean = false): any[] | object {\r\n if (!onlyReturnObject && this._options.rowFormat === QueryRowFormat.UseECSqlPropertyIndexes) {\r\n return this.getRowInternal();\r\n }\r\n const formattedRow = {};\r\n for (const prop of this._props) {\r\n const propName = this._options.rowFormat === QueryRowFormat.UseJsPropertyNames ? prop.jsonName : prop.name;\r\n const val = this.getRowInternal()[prop.index];\r\n if (typeof val !== \"undefined\" && val !== null) {\r\n Object.defineProperty(formattedRow, propName, {\r\n value: val,\r\n enumerable: true,\r\n });\r\n }\r\n }\r\n return formattedRow;\r\n }\r\n public async getMetaData(): Promise<QueryPropertyMetaData[]> {\r\n if (this._props.length === 0) {\r\n await this.fetchRows();\r\n }\r\n return this._props.properties;\r\n }\r\n private async fetchRows() {\r\n this._localOffset = -1;\r\n this._localRows = await this.readRows();\r\n if (this._localRows.length === 0) {\r\n this._done = true;\r\n }\r\n }\r\n public async step(): Promise<boolean> {\r\n if (this._done) {\r\n return false;\r\n }\r\n const cachedRows = this._localRows.length;\r\n if (this._localOffset < cachedRows - 1) {\r\n ++this._localOffset;\r\n } else {\r\n await this.fetchRows();\r\n this._localOffset = 0;\r\n return !this._done;\r\n }\r\n return true;\r\n }\r\n public async toArray(): Promise<any[]> {\r\n const rows = [];\r\n while (await this.step()) {\r\n rows.push(this.formatCurrentRow());\r\n }\r\n return rows;\r\n }\r\n public [Symbol.asyncIterator](): AsyncIterableIterator<QueryRowProxy> {\r\n return this;\r\n }\r\n public async next(): Promise<IteratorResult<QueryRowProxy, any>> {\r\n if (await this.step()) {\r\n return {\r\n done: false,\r\n value: this.current,\r\n };\r\n } else {\r\n return {\r\n done: true,\r\n value: this.current,\r\n };\r\n }\r\n }\r\n}\r\n\r\n"]}
|
|
1
|
+
{"version":3,"file":"ECSqlReader.js","sourceRoot":"","sources":["../../src/ECSqlReader.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\n/** @packageDocumentation\r\n * @module iModels\r\n */\r\nimport { Base64EncodedString } from \"./Base64EncodedString\";\r\nimport {\r\n DbQueryError, DbQueryRequest, DbQueryResponse, DbRequestExecutor, DbRequestKind, DbResponseStatus, DbValueFormat, QueryBinder, QueryOptions, QueryOptionsBuilder,\r\n QueryPropertyMetaData, QueryRowFormat,\r\n} from \"./ConcurrentQuery\";\r\n\r\n/** @beta */\r\nexport class PropertyMetaDataMap implements Iterable<QueryPropertyMetaData> {\r\n private _byPropName = new Map<string, number>();\r\n private _byJsonName = new Map<string, number>();\r\n private _byNoCase = new Map<string, number>();\r\n\r\n public constructor(public readonly properties: QueryPropertyMetaData[]) {\r\n for (const property of this.properties) {\r\n this._byPropName.set(property.name, property.index);\r\n this._byJsonName.set(property.jsonName, property.index);\r\n this._byNoCase.set(property.name.toLowerCase(), property.index);\r\n this._byNoCase.set(property.jsonName.toLowerCase(), property.index);\r\n }\r\n }\r\n\r\n public get length(): number {\r\n return this.properties.length;\r\n }\r\n\r\n public [Symbol.iterator](): Iterator<QueryPropertyMetaData, any, undefined> {\r\n return this.properties[Symbol.iterator]();\r\n }\r\n\r\n public findByName(name: string): QueryPropertyMetaData | undefined {\r\n const index = this._byPropName.get(name);\r\n if (typeof index === \"number\") {\r\n return this.properties[index];\r\n }\r\n return undefined;\r\n }\r\n\r\n public findByJsonName(name: string): QueryPropertyMetaData | undefined {\r\n const index = this._byJsonName.get(name);\r\n if (typeof index === \"number\") {\r\n return this.properties[index];\r\n }\r\n return undefined;\r\n }\r\n\r\n public findByNoCase(name: string): QueryPropertyMetaData | undefined {\r\n const index = this._byNoCase.get(name.toLowerCase());\r\n if (typeof index === \"number\") {\r\n return this.properties[index];\r\n }\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * The format for rows returned by [[ECSqlReader]].\r\n * @beta\r\n */\r\nexport type QueryValueType = any;\r\n\r\n/**\r\n * Methods and ways of accessing values from rows returned by [[ECSqlReader]].\r\n * @beta\r\n */\r\nexport interface QueryRowProxy {\r\n /**\r\n * Get the current row as a JavaScript `object`.\r\n *\r\n * @returns The current row as a JavaScript `object`.\r\n */\r\n toRow(): any;\r\n\r\n /**\r\n * Get all remaining rows from the query result.\r\n * If called on the current row ([[ECSqlReader.current]]), only that row is returned.\r\n *\r\n * @returns All remaining rows from the query result.\r\n */\r\n toArray(): QueryValueType[];\r\n\r\n /**\r\n * Get the metadata for each column in the query result.\r\n *\r\n * @returns The metadata for each column in the query result.\r\n */\r\n getMetaData(): QueryPropertyMetaData[];\r\n\r\n /**\r\n * Access a property using its name.\r\n *\r\n * @returns The value from the row whose key (ECSQL column name) is `propertyName`.\r\n *\r\n * @example\r\n * The following lines will all return the same result:\r\n * ```ts\r\n * reader.current.ECInstanceId;\r\n * reader.current.ecinstanceid;\r\n * reader.current.[\"ECInstanceId\"];\r\n * ```\r\n */\r\n [propertyName: string]: QueryValueType;\r\n\r\n /**\r\n * Access a property using its index.\r\n * The index is relative to the order of the columns returned by the query that produced the row.\r\n *\r\n * @returns The value from the column at `propertyIndex`.\r\n *\r\n * @example reader.current[0]\r\n */\r\n [propertyIndex: number]: QueryValueType;\r\n}\r\n\r\n/**\r\n * Performance-related statistics for [[ECSqlReader]].\r\n * @beta\r\n */\r\nexport interface QueryStats {\r\n /** Time spent running the query; not including time spent queued. Time is in microseconds */\r\n backendCpuTime: number;\r\n /** Total time it took the backend to run the query. Time is in milliseconds. */\r\n backendTotalTime: number;\r\n /** Estimated memory used for the query. */\r\n backendMemUsed: number;\r\n /** Total number of rows returned by the backend. */\r\n backendRowsReturned: number;\r\n /** The total round trip time from the client's perspective. Time is in milliseconds. */\r\n totalTime: number;\r\n /** The number of retries attempted to execute the query. */\r\n retryCount: number;\r\n}\r\n\r\n/**\r\n * Execute ECSQL statements and read the results.\r\n *\r\n * The query results are returned one row at a time. The format of the row is dictated by the\r\n * [[QueryOptions.rowFormat]] specified in the `options` parameter of the constructed ECSqlReader object. Defaults to\r\n * [[QueryRowFormat.UseECSqlPropertyIndexes]] when no `rowFormat` is defined.\r\n *\r\n * There are three primary ways to interact with and read the results:\r\n * - Stream them using ECSqlReader as an asynchronous iterator.\r\n * - Iterator over them manually using [[ECSqlReader.step]].\r\n * - Capture all of the results at once in an array using [[QueryRowProxy.toArray]].\r\n *\r\n * @see\r\n * - [ECSQL Overview]($docs/learning/backend/ExecutingECSQL)\r\n * - [ECSQL Row Formats]($docs/learning/ECSQLRowFormat) for more details on how rows are formatted.\r\n * - [ECSQL Code Examples]($docs/learning/ECSQLCodeExamples#iterating-over-query-results) for examples of each\r\n * of the above ways of interacting with ECSqlReader.\r\n *\r\n * @note When iterating over the results, the current row will be a [[QueryRowProxy]] object. To get the row as a basic\r\n * JavaScript object, call [[QueryRowProxy.toRow]] on it.\r\n *\r\n * @beta\r\n */\r\nexport class ECSqlReader implements AsyncIterableIterator<QueryRowProxy> {\r\n private static readonly _maxRetryCount = 10;\r\n\r\n private _localRows: any[] = [];\r\n private _localOffset: number = 0;\r\n private _globalOffset: number = -1;\r\n private _globalCount: number = -1;\r\n private _done: boolean = false;\r\n private _globalDone: boolean = false;\r\n private _props = new PropertyMetaDataMap([]);\r\n private _param = new QueryBinder().serialize();\r\n private _lockArgs: boolean = false;\r\n private _stats = { backendCpuTime: 0, backendTotalTime: 0, backendMemUsed: 0, backendRowsReturned: 0, totalTime: 0, retryCount: 0 };\r\n private _options: QueryOptions = new QueryOptionsBuilder().getOptions();\r\n\r\n private _rowProxy = new Proxy<ECSqlReader>(this, {\r\n get: (target: ECSqlReader, key: string | Symbol) => {\r\n if (typeof key === \"string\") {\r\n const idx = Number.parseInt(key, 10);\r\n if (!Number.isNaN(idx)) {\r\n return target.getRowInternal()[idx];\r\n }\r\n const prop = target._props.findByNoCase(key);\r\n if (prop) {\r\n return target.getRowInternal()[prop.index];\r\n }\r\n if (key === \"getMetaData\") {\r\n return () => target._props.properties;\r\n }\r\n if (key === \"toRow\") {\r\n return () => target.formatCurrentRow(true);\r\n }\r\n if (key === \"toArray\") {\r\n return () => this.getRowInternal();\r\n }\r\n }\r\n return undefined;\r\n },\r\n has: (target: ECSqlReader, p: string | symbol) => {\r\n return !target._props.findByNoCase(p as string);\r\n },\r\n ownKeys: (target: ECSqlReader) => {\r\n const keys = [];\r\n for (const prop of target._props) {\r\n keys.push(prop.name);\r\n }\r\n return keys;\r\n },\r\n });\r\n\r\n /**\r\n * @internal\r\n */\r\n public constructor(private _executor: DbRequestExecutor<DbQueryRequest, DbQueryResponse>, public readonly query: string, param?: QueryBinder, options?: QueryOptions) {\r\n if (query.trim().length === 0) {\r\n throw new Error(\"expecting non-empty ecsql statement\");\r\n }\r\n if (param) {\r\n this._param = param.serialize();\r\n }\r\n this.reset(options);\r\n }\r\n\r\n private static replaceBase64WithUint8Array(row: any) {\r\n for (const key of Object.keys(row)) {\r\n const val = row[key];\r\n if (typeof val === \"string\") {\r\n if (Base64EncodedString.hasPrefix(val)) {\r\n row[key] = Base64EncodedString.toUint8Array(val);\r\n }\r\n } else if (typeof val === \"object\" && val !== null) {\r\n this.replaceBase64WithUint8Array(val);\r\n }\r\n }\r\n }\r\n\r\n public setParams(param: QueryBinder) {\r\n if (this._lockArgs) {\r\n throw new Error(\"call resetBindings() before setting or changing parameters\");\r\n }\r\n this._param = param.serialize();\r\n }\r\n\r\n public reset(options?: QueryOptions) {\r\n if (options) {\r\n this._options = options;\r\n }\r\n this._props = new PropertyMetaDataMap([]);\r\n this._localRows = [];\r\n this._globalDone = false;\r\n this._globalOffset = 0;\r\n this._globalCount = -1;\r\n if (typeof this._options.rowFormat === \"undefined\")\r\n this._options.rowFormat = QueryRowFormat.UseECSqlPropertyIndexes;\r\n if (this._options.limit) {\r\n if (typeof this._options.limit.offset === \"number\" && this._options.limit.offset > 0)\r\n this._globalOffset = this._options.limit.offset;\r\n if (typeof this._options.limit.count === \"number\" && this._options.limit.count > 0)\r\n this._globalCount = this._options.limit.count;\r\n }\r\n this._done = false;\r\n }\r\n\r\n /**\r\n * Get the current row from the query result. The current row is the one most recently stepped-to\r\n * (by step() or during iteration).\r\n *\r\n * Each value from the row can be accessed by index or by name.\r\n *\r\n * The format of the row is dictated by the [[QueryOptions.rowFormat]] specified in the `options` parameter of the\r\n * constructed ECSqlReader object.\r\n *\r\n * @see\r\n * - [[QueryRowFormat]]\r\n * - [ECSQL Row Formats]($docs/learning/ECSQLRowFormat)\r\n *\r\n * @note The current row is be a [[QueryRowProxy]] object. To get the row as a basic JavaScript object, call\r\n * [[QueryRowProxy.toRow]] on it.\r\n *\r\n * @example\r\n * ```ts\r\n * const reader = iModel.createQueryReader(\"SELECT ECInstanceId FROM bis.Element\");\r\n * while (await reader.step()) {\r\n * // Both lines below print the same value\r\n * console.log(reader.current[0]);\r\n * console.log(reader.current.ecinstanceid);\r\n * }\r\n * ```\r\n *\r\n * @return The current row as a [[QueryRowProxy]].\r\n */\r\n public get current(): QueryRowProxy {\r\n return this._rowProxy as any;\r\n }\r\n\r\n /**\r\n * Clear all bindings.\r\n */\r\n public resetBindings() {\r\n this._param = new QueryBinder().serialize();\r\n this._lockArgs = false;\r\n }\r\n\r\n /**\r\n * Returns if there are more rows available.\r\n *\r\n * @returns `true` if all rows have been stepped through already.<br/>\r\n * `false` if there are any yet unaccessed rows.\r\n */\r\n public get done(): boolean {\r\n return this._done;\r\n }\r\n\r\n /**\r\n *\r\n */\r\n public getRowInternal(): any[] {\r\n if (this._localRows.length <= this._localOffset)\r\n throw new Error(\"no current row\");\r\n return this._localRows[this._localOffset] as any[];\r\n }\r\n\r\n /**\r\n * Get performance-related statistics for the current query.\r\n */\r\n public get stats(): QueryStats {\r\n return this._stats;\r\n }\r\n\r\n /**\r\n *\r\n */\r\n private async readRows(): Promise<any[]> {\r\n if (this._globalDone) {\r\n return [];\r\n }\r\n this._lockArgs = true;\r\n this._globalOffset += this._localRows.length;\r\n this._globalCount -= this._localRows.length;\r\n if (this._globalCount === 0) {\r\n return [];\r\n }\r\n const valueFormat = this._options.rowFormat === QueryRowFormat.UseJsPropertyNames ? DbValueFormat.JsNames : DbValueFormat.ECSqlNames;\r\n const request: DbQueryRequest = {\r\n ... this._options,\r\n kind: DbRequestKind.ECSql,\r\n valueFormat,\r\n query: this.query,\r\n args: this._param,\r\n };\r\n request.includeMetaData = this._props.length > 0 ? false : true;\r\n request.limit = { offset: this._globalOffset, count: this._globalCount < 1 ? -1 : this._globalCount };\r\n const resp = await this.runWithRetry(request);\r\n this._globalDone = resp.status === DbResponseStatus.Done;\r\n if (this._props.length === 0 && resp.meta.length > 0) {\r\n this._props = new PropertyMetaDataMap(resp.meta);\r\n }\r\n for (const row of resp.data) {\r\n ECSqlReader.replaceBase64WithUint8Array(row);\r\n }\r\n return resp.data;\r\n }\r\n\r\n /**\r\n *\r\n */\r\n private async runWithRetry(request: DbQueryRequest) {\r\n const needRetry = (rs: DbQueryResponse) => (rs.status === DbResponseStatus.Partial || rs.status === DbResponseStatus.QueueFull || rs.status === DbResponseStatus.Timeout) && (rs.data.length === 0);\r\n const updateStats = (rs: DbQueryResponse) => {\r\n this._stats.backendCpuTime += rs.stats.cpuTime;\r\n this._stats.backendTotalTime += rs.stats.totalTime;\r\n this._stats.backendMemUsed += rs.stats.memUsed;\r\n this._stats.backendRowsReturned += rs.data.length;\r\n };\r\n const execQuery = async (req: DbQueryRequest) => {\r\n const startTime = Date.now();\r\n const rs = await this._executor.execute(req);\r\n this.stats.totalTime += (Date.now() - startTime);\r\n return rs;\r\n };\r\n let retry = ECSqlReader._maxRetryCount;\r\n let resp = await execQuery(request);\r\n DbQueryError.throwIfError(resp, request);\r\n while (--retry > 0 && needRetry(resp)) {\r\n resp = await execQuery(request);\r\n this._stats.retryCount += 1;\r\n if (needRetry(resp)) {\r\n updateStats(resp);\r\n }\r\n }\r\n if (retry === 0 && needRetry(resp)) {\r\n throw new Error(\"query too long to execute or server is too busy\");\r\n }\r\n updateStats(resp);\r\n return resp;\r\n }\r\n\r\n /**\r\n *\r\n */\r\n public formatCurrentRow(onlyReturnObject: boolean = false): any[] | object {\r\n if (!onlyReturnObject && this._options.rowFormat === QueryRowFormat.UseECSqlPropertyIndexes) {\r\n return this.getRowInternal();\r\n }\r\n const formattedRow = {};\r\n for (const prop of this._props) {\r\n const propName = this._options.rowFormat === QueryRowFormat.UseJsPropertyNames ? prop.jsonName : prop.name;\r\n const val = this.getRowInternal()[prop.index];\r\n if (typeof val !== \"undefined\" && val !== null) {\r\n Object.defineProperty(formattedRow, propName, {\r\n value: val,\r\n enumerable: true,\r\n });\r\n }\r\n }\r\n return formattedRow;\r\n }\r\n\r\n /**\r\n * Get the metadata for each column in the query result.\r\n *\r\n * @returns An array of [[QueryPropertyMetaData]].\r\n */\r\n public async getMetaData(): Promise<QueryPropertyMetaData[]> {\r\n if (this._props.length === 0) {\r\n await this.fetchRows();\r\n }\r\n return this._props.properties;\r\n }\r\n\r\n /**\r\n *\r\n */\r\n private async fetchRows() {\r\n this._localOffset = -1;\r\n this._localRows = await this.readRows();\r\n if (this._localRows.length === 0) {\r\n this._done = true;\r\n }\r\n }\r\n\r\n /**\r\n * Step to the next row of the query result.\r\n *\r\n * @returns `true` if a row can be read from `current`.<br/>\r\n * `false` if there are no more rows; i.e., all rows have been stepped through already.\r\n */\r\n public async step(): Promise<boolean> {\r\n if (this._done) {\r\n return false;\r\n }\r\n const cachedRows = this._localRows.length;\r\n if (this._localOffset < cachedRows - 1) {\r\n ++this._localOffset;\r\n } else {\r\n await this.fetchRows();\r\n this._localOffset = 0;\r\n return !this._done;\r\n }\r\n return true;\r\n }\r\n\r\n /**\r\n * Get all remaining rows from the query result.\r\n *\r\n * @returns An array of all remaining rows from the query result.\r\n */\r\n public async toArray(): Promise<any[]> {\r\n const rows = [];\r\n while (await this.step()) {\r\n rows.push(this.formatCurrentRow());\r\n }\r\n return rows;\r\n }\r\n\r\n /**\r\n * Accessor for using ECSqlReader as an asynchronous iterator.\r\n *\r\n * @returns An asynchronous iterator over the rows returned by the executed ECSQL query.\r\n */\r\n public [Symbol.asyncIterator](): AsyncIterableIterator<QueryRowProxy> {\r\n return this;\r\n }\r\n\r\n /**\r\n * Calls step when called as an iterator.\r\n *\r\n * Returns the row alongside a `done` boolean to indicate if there are any more rows for an iterator to step to.\r\n *\r\n * @returns An object with the keys: `value` which contains the row and `done` which contains a boolean.\r\n */\r\n public async next(): Promise<IteratorResult<QueryRowProxy, any>> {\r\n if (await this.step()) {\r\n return {\r\n done: false,\r\n value: this.current,\r\n };\r\n } else {\r\n return {\r\n done: true,\r\n value: this.current,\r\n };\r\n }\r\n }\r\n}\r\n\r\n"]}
|
|
@@ -134,6 +134,7 @@ export interface RenderFeatureTable {
|
|
|
134
134
|
/** Strictly for reporting memory usage. */
|
|
135
135
|
readonly byteLength: number;
|
|
136
136
|
readonly type: BatchType;
|
|
137
|
+
animationNodeIds?: UintArray;
|
|
137
138
|
/** Get the feature at the specified index. Caller is responsible for validating featureIndex less than numFeatures. */
|
|
138
139
|
getFeature(featureIndex: number, result: ModelFeature): ModelFeature;
|
|
139
140
|
/** Find the specified feature. Returns undefined if featureIndex >= numFeatures. */
|
|
@@ -161,11 +162,8 @@ export declare class PackedFeatureTable implements RenderFeatureTable {
|
|
|
161
162
|
readonly numFeatures: number;
|
|
162
163
|
readonly anyDefined: boolean;
|
|
163
164
|
readonly type: BatchType;
|
|
164
|
-
|
|
165
|
+
animationNodeIds?: UintArray;
|
|
165
166
|
get byteLength(): number;
|
|
166
|
-
get animationNodeIds(): Readonly<UintArray> | undefined;
|
|
167
|
-
/** @internal for use by MultiModelPackedFeatureTable */
|
|
168
|
-
setAnimationNodeIds(nodeIds: UintArray | undefined): void;
|
|
169
167
|
/** Construct a PackedFeatureTable from the packed binary data.
|
|
170
168
|
* This is used internally when deserializing Tiles in iMdl format.
|
|
171
169
|
* @internal
|
|
@@ -240,7 +238,8 @@ export declare class MultiModelPackedFeatureTable implements RenderFeatureTable
|
|
|
240
238
|
get batchModelIdPair(): Id64.Uint32Pair;
|
|
241
239
|
get numFeatures(): number;
|
|
242
240
|
get type(): BatchType;
|
|
243
|
-
get animationNodeIds():
|
|
241
|
+
get animationNodeIds(): UintArray | undefined;
|
|
242
|
+
set animationNodeIds(ids: UintArray | undefined);
|
|
244
243
|
get byteLength(): number;
|
|
245
244
|
getPackedFeature(featureIndex: number, result: PackedFeature): PackedFeature;
|
|
246
245
|
getFeature(featureIndex: number, result: ModelFeature): ModelFeature;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FeatureTable.d.ts","sourceRoot":"","sources":["../../src/FeatureTable.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"FeatureTable.d.ts","sourceRoot":"","sources":["../../src/FeatureTable.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/FeatureTable.js
CHANGED
|
@@ -187,12 +187,6 @@ function populateAnimationNodeIds(table, computeNodeId, maxNodeId) {
|
|
|
187
187
|
*/
|
|
188
188
|
class PackedFeatureTable {
|
|
189
189
|
get byteLength() { return this._data.byteLength; }
|
|
190
|
-
get animationNodeIds() { return this._animationNodeIds; }
|
|
191
|
-
/** @internal for use by MultiModelPackedFeatureTable */
|
|
192
|
-
setAnimationNodeIds(nodeIds) {
|
|
193
|
-
(0, core_bentley_1.assert)(undefined === this._animationNodeIds);
|
|
194
|
-
this._animationNodeIds = nodeIds;
|
|
195
|
-
}
|
|
196
190
|
/** Construct a PackedFeatureTable from the packed binary data.
|
|
197
191
|
* This is used internally when deserializing Tiles in iMdl format.
|
|
198
192
|
* @internal
|
|
@@ -203,7 +197,7 @@ class PackedFeatureTable {
|
|
|
203
197
|
this.batchModelIdPair = core_bentley_1.Id64.getUint32Pair(modelId);
|
|
204
198
|
this.numFeatures = numFeatures;
|
|
205
199
|
this.type = type;
|
|
206
|
-
this.
|
|
200
|
+
this.animationNodeIds = animationNodeIds;
|
|
207
201
|
switch (this.numFeatures) {
|
|
208
202
|
case 0:
|
|
209
203
|
this.anyDefined = false;
|
|
@@ -216,7 +210,7 @@ class PackedFeatureTable {
|
|
|
216
210
|
break;
|
|
217
211
|
}
|
|
218
212
|
(0, core_bentley_1.assert)(this._data.length >= this._subCategoriesOffset);
|
|
219
|
-
(0, core_bentley_1.assert)(undefined === this.
|
|
213
|
+
(0, core_bentley_1.assert)(undefined === this.animationNodeIds || this.animationNodeIds.length === this.numFeatures);
|
|
220
214
|
}
|
|
221
215
|
/** Create a packed feature table from a [[FeatureTable]]. */
|
|
222
216
|
static pack(featureTable) {
|
|
@@ -279,7 +273,7 @@ class PackedFeatureTable {
|
|
|
279
273
|
}
|
|
280
274
|
/** @internal */
|
|
281
275
|
getAnimationNodeId(featureIndex) {
|
|
282
|
-
return undefined !== this.
|
|
276
|
+
return undefined !== this.animationNodeIds && featureIndex < this.numFeatures ? this.animationNodeIds[featureIndex] : 0;
|
|
283
277
|
}
|
|
284
278
|
/** @internal */
|
|
285
279
|
getPackedFeature(featureIndex, result) {
|
|
@@ -325,8 +319,8 @@ class PackedFeatureTable {
|
|
|
325
319
|
return table;
|
|
326
320
|
}
|
|
327
321
|
populateAnimationNodeIds(computeNodeId, maxNodeId) {
|
|
328
|
-
(0, core_bentley_1.assert)(undefined === this.
|
|
329
|
-
this.
|
|
322
|
+
(0, core_bentley_1.assert)(undefined === this.animationNodeIds);
|
|
323
|
+
this.animationNodeIds = populateAnimationNodeIds(this, computeNodeId, maxNodeId);
|
|
330
324
|
}
|
|
331
325
|
*iterator(output) {
|
|
332
326
|
for (let i = 0; i < this.numFeatures; i++) {
|
|
@@ -434,6 +428,7 @@ class MultiModelPackedFeatureTable {
|
|
|
434
428
|
get numFeatures() { return this._features.numFeatures; }
|
|
435
429
|
get type() { return this._features.type; }
|
|
436
430
|
get animationNodeIds() { return this._features.animationNodeIds; }
|
|
431
|
+
set animationNodeIds(ids) { this._features.animationNodeIds = ids; }
|
|
437
432
|
get byteLength() {
|
|
438
433
|
return this._features.byteLength + this._models.byteLength;
|
|
439
434
|
}
|
|
@@ -478,7 +473,7 @@ class MultiModelPackedFeatureTable {
|
|
|
478
473
|
return this._features.getAnimationNodeId(featureIndex);
|
|
479
474
|
}
|
|
480
475
|
populateAnimationNodeIds(computeNodeId, maxNodeId) {
|
|
481
|
-
this._features.
|
|
476
|
+
this._features.animationNodeIds = populateAnimationNodeIds(this, computeNodeId, maxNodeId);
|
|
482
477
|
}
|
|
483
478
|
}
|
|
484
479
|
exports.MultiModelPackedFeatureTable = MultiModelPackedFeatureTable;
|