@itwin/core-common 4.1.0-dev.7 → 4.1.0-dev.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/CHANGELOG.md +83 -1
  2. package/lib/cjs/BriefcaseTypes.d.ts +13 -1
  3. package/lib/cjs/BriefcaseTypes.d.ts.map +1 -1
  4. package/lib/cjs/BriefcaseTypes.js.map +1 -1
  5. package/lib/cjs/ChangedElements.d.ts +2 -0
  6. package/lib/cjs/ChangedElements.d.ts.map +1 -1
  7. package/lib/cjs/ChangedElements.js +2 -0
  8. package/lib/cjs/ChangedElements.js.map +1 -1
  9. package/lib/cjs/ConcurrentQuery.d.ts +26 -2
  10. package/lib/cjs/ConcurrentQuery.d.ts.map +1 -1
  11. package/lib/cjs/ConcurrentQuery.js +29 -3
  12. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  13. package/lib/cjs/DisplayStyleSettings.d.ts +1 -15
  14. package/lib/cjs/DisplayStyleSettings.d.ts.map +1 -1
  15. package/lib/cjs/DisplayStyleSettings.js +1 -15
  16. package/lib/cjs/DisplayStyleSettings.js.map +1 -1
  17. package/lib/cjs/ECSqlReader.d.ts +164 -7
  18. package/lib/cjs/ECSqlReader.d.ts.map +1 -1
  19. package/lib/cjs/ECSqlReader.js +124 -12
  20. package/lib/cjs/ECSqlReader.js.map +1 -1
  21. package/lib/cjs/ElementProps.d.ts +2 -2
  22. package/lib/cjs/ElementProps.js.map +1 -1
  23. package/lib/cjs/EntityProps.js +2 -2
  24. package/lib/cjs/EntityProps.js.map +1 -1
  25. package/lib/cjs/FeatureIndex.d.ts +50 -4
  26. package/lib/cjs/FeatureIndex.d.ts.map +1 -1
  27. package/lib/cjs/FeatureIndex.js +44 -4
  28. package/lib/cjs/FeatureIndex.js.map +1 -1
  29. package/lib/cjs/FeatureTable.d.ts +44 -20
  30. package/lib/cjs/FeatureTable.d.ts.map +1 -1
  31. package/lib/cjs/FeatureTable.js +17 -2
  32. package/lib/cjs/FeatureTable.js.map +1 -1
  33. package/lib/cjs/IModel.d.ts +1 -1
  34. package/lib/cjs/IModel.d.ts.map +1 -1
  35. package/lib/cjs/IModel.js +1 -1
  36. package/lib/cjs/IModel.js.map +1 -1
  37. package/lib/cjs/IpcAppProps.d.ts +6 -6
  38. package/lib/cjs/IpcAppProps.d.ts.map +1 -1
  39. package/lib/cjs/IpcAppProps.js +8 -9
  40. package/lib/cjs/IpcAppProps.js.map +1 -1
  41. package/lib/cjs/NativeAppProps.d.ts +4 -3
  42. package/lib/cjs/NativeAppProps.d.ts.map +1 -1
  43. package/lib/cjs/NativeAppProps.js +5 -4
  44. package/lib/cjs/NativeAppProps.js.map +1 -1
  45. package/lib/cjs/QPoint.d.ts +3 -3
  46. package/lib/cjs/QPoint.js +3 -3
  47. package/lib/cjs/QPoint.js.map +1 -1
  48. package/lib/cjs/Render.d.ts +27 -35
  49. package/lib/cjs/Render.d.ts.map +1 -1
  50. package/lib/cjs/Render.js +4 -67
  51. package/lib/cjs/Render.js.map +1 -1
  52. package/lib/cjs/RpcInterface.d.ts +1 -1
  53. package/lib/cjs/RpcInterface.d.ts.map +1 -1
  54. package/lib/cjs/RpcInterface.js +26 -25
  55. package/lib/cjs/RpcInterface.js.map +1 -1
  56. package/lib/cjs/SkyBox.d.ts +3 -3
  57. package/lib/cjs/SkyBox.d.ts.map +1 -1
  58. package/lib/cjs/SkyBox.js +3 -3
  59. package/lib/cjs/SkyBox.js.map +1 -1
  60. package/lib/cjs/ViewFlags.d.ts +4 -4
  61. package/lib/cjs/ViewFlags.d.ts.map +1 -1
  62. package/lib/cjs/ViewFlags.js +4 -4
  63. package/lib/cjs/ViewFlags.js.map +1 -1
  64. package/lib/cjs/ViewProps.d.ts +429 -5
  65. package/lib/cjs/ViewProps.d.ts.map +1 -1
  66. package/lib/cjs/ViewProps.js +16 -0
  67. package/lib/cjs/ViewProps.js.map +1 -1
  68. package/lib/cjs/geometry/AreaPattern.js +2 -2
  69. package/lib/cjs/geometry/AreaPattern.js.map +1 -1
  70. package/lib/cjs/geometry/ElementGeometry.d.ts +6 -6
  71. package/lib/cjs/geometry/ElementGeometry.js +1 -1
  72. package/lib/cjs/geometry/ElementGeometry.js.map +1 -1
  73. package/lib/cjs/ipc/IpcSession.d.ts +4 -0
  74. package/lib/cjs/ipc/IpcSession.d.ts.map +1 -1
  75. package/lib/cjs/ipc/IpcSession.js +6 -6
  76. package/lib/cjs/ipc/IpcSession.js.map +1 -1
  77. package/lib/cjs/rpc/IModelReadRpcInterface.d.ts +4 -2
  78. package/lib/cjs/rpc/IModelReadRpcInterface.d.ts.map +1 -1
  79. package/lib/cjs/rpc/IModelReadRpcInterface.js +6 -4
  80. package/lib/cjs/rpc/IModelReadRpcInterface.js.map +1 -1
  81. package/lib/cjs/rpc/core/RpcInvocation.d.ts +2 -0
  82. package/lib/cjs/rpc/core/RpcInvocation.d.ts.map +1 -1
  83. package/lib/cjs/rpc/core/RpcInvocation.js +1 -0
  84. package/lib/cjs/rpc/core/RpcInvocation.js.map +1 -1
  85. package/lib/cjs/rpc/core/RpcMarshaling.js +2 -2
  86. package/lib/cjs/rpc/core/RpcMarshaling.js.map +1 -1
  87. package/lib/cjs/rpc/web/WebAppRpcProtocol.js +1 -1
  88. package/lib/cjs/rpc/web/WebAppRpcProtocol.js.map +1 -1
  89. package/lib/cjs/tile/GltfTileIO.d.ts.map +1 -1
  90. package/lib/cjs/tile/GltfTileIO.js +2 -0
  91. package/lib/cjs/tile/GltfTileIO.js.map +1 -1
  92. package/lib/cjs/tile/IModelTileIO.d.ts +2 -2
  93. package/lib/cjs/tile/IModelTileIO.js +2 -2
  94. package/lib/cjs/tile/IModelTileIO.js.map +1 -1
  95. package/lib/cjs/tile/TileMetadata.d.ts +14 -13
  96. package/lib/cjs/tile/TileMetadata.d.ts.map +1 -1
  97. package/lib/cjs/tile/TileMetadata.js +56 -44
  98. package/lib/cjs/tile/TileMetadata.js.map +1 -1
  99. package/lib/esm/BriefcaseTypes.d.ts +13 -1
  100. package/lib/esm/BriefcaseTypes.d.ts.map +1 -1
  101. package/lib/esm/BriefcaseTypes.js.map +1 -1
  102. package/lib/esm/ChangedElements.d.ts +2 -0
  103. package/lib/esm/ChangedElements.d.ts.map +1 -1
  104. package/lib/esm/ChangedElements.js +2 -0
  105. package/lib/esm/ChangedElements.js.map +1 -1
  106. package/lib/esm/ConcurrentQuery.d.ts +26 -2
  107. package/lib/esm/ConcurrentQuery.d.ts.map +1 -1
  108. package/lib/esm/ConcurrentQuery.js +29 -3
  109. package/lib/esm/ConcurrentQuery.js.map +1 -1
  110. package/lib/esm/DisplayStyleSettings.d.ts +1 -15
  111. package/lib/esm/DisplayStyleSettings.d.ts.map +1 -1
  112. package/lib/esm/DisplayStyleSettings.js +1 -15
  113. package/lib/esm/DisplayStyleSettings.js.map +1 -1
  114. package/lib/esm/ECSqlReader.d.ts +164 -7
  115. package/lib/esm/ECSqlReader.d.ts.map +1 -1
  116. package/lib/esm/ECSqlReader.js +124 -12
  117. package/lib/esm/ECSqlReader.js.map +1 -1
  118. package/lib/esm/ElementProps.d.ts +2 -2
  119. package/lib/esm/ElementProps.js.map +1 -1
  120. package/lib/esm/EntityProps.js +2 -2
  121. package/lib/esm/EntityProps.js.map +1 -1
  122. package/lib/esm/FeatureIndex.d.ts +50 -4
  123. package/lib/esm/FeatureIndex.d.ts.map +1 -1
  124. package/lib/esm/FeatureIndex.js +44 -4
  125. package/lib/esm/FeatureIndex.js.map +1 -1
  126. package/lib/esm/FeatureTable.d.ts +44 -20
  127. package/lib/esm/FeatureTable.d.ts.map +1 -1
  128. package/lib/esm/FeatureTable.js +17 -2
  129. package/lib/esm/FeatureTable.js.map +1 -1
  130. package/lib/esm/IModel.d.ts +1 -1
  131. package/lib/esm/IModel.d.ts.map +1 -1
  132. package/lib/esm/IModel.js +1 -1
  133. package/lib/esm/IModel.js.map +1 -1
  134. package/lib/esm/IpcAppProps.d.ts +6 -6
  135. package/lib/esm/IpcAppProps.d.ts.map +1 -1
  136. package/lib/esm/IpcAppProps.js +7 -8
  137. package/lib/esm/IpcAppProps.js.map +1 -1
  138. package/lib/esm/NativeAppProps.d.ts +4 -3
  139. package/lib/esm/NativeAppProps.d.ts.map +1 -1
  140. package/lib/esm/NativeAppProps.js +4 -3
  141. package/lib/esm/NativeAppProps.js.map +1 -1
  142. package/lib/esm/QPoint.d.ts +3 -3
  143. package/lib/esm/QPoint.js +3 -3
  144. package/lib/esm/QPoint.js.map +1 -1
  145. package/lib/esm/Render.d.ts +27 -35
  146. package/lib/esm/Render.d.ts.map +1 -1
  147. package/lib/esm/Render.js +3 -64
  148. package/lib/esm/Render.js.map +1 -1
  149. package/lib/esm/RpcInterface.d.ts +1 -1
  150. package/lib/esm/RpcInterface.d.ts.map +1 -1
  151. package/lib/esm/RpcInterface.js +26 -25
  152. package/lib/esm/RpcInterface.js.map +1 -1
  153. package/lib/esm/SkyBox.d.ts +3 -3
  154. package/lib/esm/SkyBox.d.ts.map +1 -1
  155. package/lib/esm/SkyBox.js +3 -3
  156. package/lib/esm/SkyBox.js.map +1 -1
  157. package/lib/esm/ViewFlags.d.ts +4 -4
  158. package/lib/esm/ViewFlags.d.ts.map +1 -1
  159. package/lib/esm/ViewFlags.js +4 -4
  160. package/lib/esm/ViewFlags.js.map +1 -1
  161. package/lib/esm/ViewProps.d.ts +429 -5
  162. package/lib/esm/ViewProps.d.ts.map +1 -1
  163. package/lib/esm/ViewProps.js +15 -1
  164. package/lib/esm/ViewProps.js.map +1 -1
  165. package/lib/esm/geometry/AreaPattern.js +2 -2
  166. package/lib/esm/geometry/AreaPattern.js.map +1 -1
  167. package/lib/esm/geometry/ElementGeometry.d.ts +6 -6
  168. package/lib/esm/geometry/ElementGeometry.js +1 -1
  169. package/lib/esm/geometry/ElementGeometry.js.map +1 -1
  170. package/lib/esm/ipc/IpcSession.d.ts +4 -0
  171. package/lib/esm/ipc/IpcSession.d.ts.map +1 -1
  172. package/lib/esm/ipc/IpcSession.js +5 -5
  173. package/lib/esm/ipc/IpcSession.js.map +1 -1
  174. package/lib/esm/rpc/IModelReadRpcInterface.d.ts +4 -2
  175. package/lib/esm/rpc/IModelReadRpcInterface.d.ts.map +1 -1
  176. package/lib/esm/rpc/IModelReadRpcInterface.js +6 -4
  177. package/lib/esm/rpc/IModelReadRpcInterface.js.map +1 -1
  178. package/lib/esm/rpc/core/RpcInvocation.d.ts +2 -0
  179. package/lib/esm/rpc/core/RpcInvocation.d.ts.map +1 -1
  180. package/lib/esm/rpc/core/RpcInvocation.js +1 -0
  181. package/lib/esm/rpc/core/RpcInvocation.js.map +1 -1
  182. package/lib/esm/rpc/core/RpcMarshaling.js +2 -2
  183. package/lib/esm/rpc/core/RpcMarshaling.js.map +1 -1
  184. package/lib/esm/rpc/web/WebAppRpcProtocol.js +1 -1
  185. package/lib/esm/rpc/web/WebAppRpcProtocol.js.map +1 -1
  186. package/lib/esm/tile/GltfTileIO.d.ts.map +1 -1
  187. package/lib/esm/tile/GltfTileIO.js +2 -0
  188. package/lib/esm/tile/GltfTileIO.js.map +1 -1
  189. package/lib/esm/tile/IModelTileIO.d.ts +2 -2
  190. package/lib/esm/tile/IModelTileIO.js +2 -2
  191. package/lib/esm/tile/IModelTileIO.js.map +1 -1
  192. package/lib/esm/tile/TileMetadata.d.ts +14 -13
  193. package/lib/esm/tile/TileMetadata.d.ts.map +1 -1
  194. package/lib/esm/tile/TileMetadata.js +57 -45
  195. package/lib/esm/tile/TileMetadata.js.map +1 -1
  196. package/package.json +11 -29
@@ -13,27 +13,99 @@ export declare class PropertyMetaDataMap implements Iterable<QueryPropertyMetaDa
13
13
  findByNoCase(name: string): QueryPropertyMetaData | undefined;
14
14
  }
15
15
  /**
16
+ * The format for rows returned by [[ECSqlReader]].
16
17
  * @beta
17
- */
18
+ */
18
19
  export type QueryValueType = any;
19
- /** @beta */
20
+ /**
21
+ * Methods and ways of accessing values from rows returned by [[ECSqlReader]].
22
+ * @beta
23
+ */
20
24
  export interface QueryRowProxy {
25
+ /**
26
+ * Get the current row as a JavaScript `object`.
27
+ *
28
+ * @returns The current row as a JavaScript `object`.
29
+ */
21
30
  toRow(): any;
31
+ /**
32
+ * Get all remaining rows from the query result.
33
+ * If called on the current row ([[ECSqlReader.current]]), only that row is returned.
34
+ *
35
+ * @returns All remaining rows from the query result.
36
+ */
22
37
  toArray(): QueryValueType[];
38
+ /**
39
+ * Get the metadata for each column in the query result.
40
+ *
41
+ * @returns The metadata for each column in the query result.
42
+ */
23
43
  getMetaData(): QueryPropertyMetaData[];
44
+ /**
45
+ * Access a property using its name.
46
+ *
47
+ * @returns The value from the row whose key (ECSQL column name) is `propertyName`.
48
+ *
49
+ * @example
50
+ * The following lines will all return the same result:
51
+ * ```ts
52
+ * reader.current.ECInstanceId;
53
+ * reader.current.ecinstanceid;
54
+ * reader.current.["ECInstanceId"];
55
+ * ```
56
+ */
24
57
  [propertyName: string]: QueryValueType;
58
+ /**
59
+ * Access a property using its index.
60
+ * The index is relative to the order of the columns returned by the query that produced the row.
61
+ *
62
+ * @returns The value from the column at `propertyIndex`.
63
+ *
64
+ * @example reader.current[0]
65
+ */
25
66
  [propertyIndex: number]: QueryValueType;
26
67
  }
27
- /** @beta */
68
+ /**
69
+ * Performance-related statistics for [[ECSqlReader]].
70
+ * @beta
71
+ */
28
72
  export interface QueryStats {
73
+ /** Time spent running the query; not including time spent queued. Time is in microseconds */
29
74
  backendCpuTime: number;
75
+ /** Total time it took the backend to run the query. Time is in milliseconds. */
30
76
  backendTotalTime: number;
77
+ /** Estimated memory used for the query. */
31
78
  backendMemUsed: number;
79
+ /** Total number of rows returned by the backend. */
32
80
  backendRowsReturned: number;
81
+ /** The total round trip time from the client's perspective. Time is in milliseconds. */
33
82
  totalTime: number;
83
+ /** The number of retries attempted to execute the query. */
34
84
  retryCount: number;
35
85
  }
36
- /** @beta */
86
+ /**
87
+ * Execute ECSQL statements and read the results.
88
+ *
89
+ * The query results are returned one row at a time. The format of the row is dictated by the
90
+ * [[QueryOptions.rowFormat]] specified in the `options` parameter of the constructed ECSqlReader object. Defaults to
91
+ * [[QueryRowFormat.UseECSqlPropertyIndexes]] when no `rowFormat` is defined.
92
+ *
93
+ * There are three primary ways to interact with and read the results:
94
+ * - Stream them using ECSqlReader as an asynchronous iterator.
95
+ * - Iterator over them manually using [[ECSqlReader.step]].
96
+ * - Capture all of the results at once in an array using [[QueryRowProxy.toArray]].
97
+ *
98
+ * @see
99
+ * - [ECSQL Overview]($docs/learning/backend/ExecutingECSQL)
100
+ * - [ECSQL Row Formats]($docs/learning/ECSQLRowFormat) for more details on how rows are formatted.
101
+ * - [ECSQL Code Examples]($docs/learning/ECSQLCodeExamples#iterating-over-query-results) for examples of each
102
+ * of the above ways of interacting with ECSqlReader.
103
+ *
104
+ * @note When iterating over the results, the current row will be a [[QueryRowProxy]] object. To get the row as a basic
105
+ * JavaScript object, call [[QueryRowProxy.toRow]] on it.
106
+ *
107
+ * @beta
108
+ */
37
109
  export declare class ECSqlReader implements AsyncIterableIterator<QueryRowProxy> {
38
110
  private _executor;
39
111
  readonly query: string;
@@ -48,26 +120,111 @@ export declare class ECSqlReader implements AsyncIterableIterator<QueryRowProxy>
48
120
  private _param;
49
121
  private _lockArgs;
50
122
  private _stats;
51
- private _rowProxy;
52
123
  private _options;
53
- /** @internal */
124
+ private _rowProxy;
125
+ /**
126
+ * @internal
127
+ */
54
128
  constructor(_executor: DbRequestExecutor<DbQueryRequest, DbQueryResponse>, query: string, param?: QueryBinder, options?: QueryOptions);
55
129
  private static replaceBase64WithUint8Array;
56
130
  setParams(param: QueryBinder): void;
57
131
  reset(options?: QueryOptions): void;
132
+ /**
133
+ * Get the current row from the query result. The current row is the one most recently stepped-to
134
+ * (by step() or during iteration).
135
+ *
136
+ * Each value from the row can be accessed by index or by name.
137
+ *
138
+ * The format of the row is dictated by the [[QueryOptions.rowFormat]] specified in the `options` parameter of the
139
+ * constructed ECSqlReader object.
140
+ *
141
+ * @see
142
+ * - [[QueryRowFormat]]
143
+ * - [ECSQL Row Formats]($docs/learning/ECSQLRowFormat)
144
+ *
145
+ * @note The current row is be a [[QueryRowProxy]] object. To get the row as a basic JavaScript object, call
146
+ * [[QueryRowProxy.toRow]] on it.
147
+ *
148
+ * @example
149
+ * ```ts
150
+ * const reader = iModel.createQueryReader("SELECT ECInstanceId FROM bis.Element");
151
+ * while (await reader.step()) {
152
+ * // Both lines below print the same value
153
+ * console.log(reader.current[0]);
154
+ * console.log(reader.current.ecinstanceid);
155
+ * }
156
+ * ```
157
+ *
158
+ * @return The current row as a [[QueryRowProxy]].
159
+ */
58
160
  get current(): QueryRowProxy;
161
+ /**
162
+ * Clear all bindings.
163
+ */
59
164
  resetBindings(): void;
165
+ /**
166
+ * Returns if there are more rows available.
167
+ *
168
+ * @returns `true` if all rows have been stepped through already.<br/>
169
+ * `false` if there are any yet unaccessed rows.
170
+ */
60
171
  get done(): boolean;
172
+ /**
173
+ *
174
+ */
61
175
  getRowInternal(): any[];
176
+ /**
177
+ * Get performance-related statistics for the current query.
178
+ */
62
179
  get stats(): QueryStats;
180
+ /**
181
+ *
182
+ */
63
183
  private readRows;
64
- private runWithRetry;
184
+ /**
185
+ * @internal
186
+ */
187
+ protected runWithRetry(request: DbQueryRequest): Promise<DbQueryResponse>;
188
+ /**
189
+ *
190
+ */
65
191
  formatCurrentRow(onlyReturnObject?: boolean): any[] | object;
192
+ /**
193
+ * Get the metadata for each column in the query result.
194
+ *
195
+ * @returns An array of [[QueryPropertyMetaData]].
196
+ */
66
197
  getMetaData(): Promise<QueryPropertyMetaData[]>;
198
+ /**
199
+ *
200
+ */
67
201
  private fetchRows;
202
+ /**
203
+ * Step to the next row of the query result.
204
+ *
205
+ * @returns `true` if a row can be read from `current`.<br/>
206
+ * `false` if there are no more rows; i.e., all rows have been stepped through already.
207
+ */
68
208
  step(): Promise<boolean>;
209
+ /**
210
+ * Get all remaining rows from the query result.
211
+ *
212
+ * @returns An array of all remaining rows from the query result.
213
+ */
69
214
  toArray(): Promise<any[]>;
215
+ /**
216
+ * Accessor for using ECSqlReader as an asynchronous iterator.
217
+ *
218
+ * @returns An asynchronous iterator over the rows returned by the executed ECSQL query.
219
+ */
70
220
  [Symbol.asyncIterator](): AsyncIterableIterator<QueryRowProxy>;
221
+ /**
222
+ * Calls step when called as an iterator.
223
+ *
224
+ * Returns the row alongside a `done` boolean to indicate if there are any more rows for an iterator to step to.
225
+ *
226
+ * @returns An object with the keys: `value` which contains the row and `done` which contains a boolean.
227
+ */
71
228
  next(): Promise<IteratorResult<QueryRowProxy, any>>;
72
229
  }
73
230
  //# sourceMappingURL=ECSqlReader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ECSqlReader.d.ts","sourceRoot":"","sources":["../../src/ECSqlReader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ECSqlReader.d.ts","sourceRoot":"","sources":["../../src/ECSqlReader.ts"],"names":[],"mappings":"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"}
@@ -21,7 +21,9 @@ export class PropertyMetaDataMap {
21
21
  this._byNoCase.set(property.jsonName.toLowerCase(), property.index);
22
22
  }
23
23
  }
24
- get length() { return this.properties.length; }
24
+ get length() {
25
+ return this.properties.length;
26
+ }
25
27
  [Symbol.iterator]() {
26
28
  return this.properties[Symbol.iterator]();
27
29
  }
@@ -47,9 +49,33 @@ export class PropertyMetaDataMap {
47
49
  return undefined;
48
50
  }
49
51
  }
50
- /** @beta */
52
+ /**
53
+ * Execute ECSQL statements and read the results.
54
+ *
55
+ * The query results are returned one row at a time. The format of the row is dictated by the
56
+ * [[QueryOptions.rowFormat]] specified in the `options` parameter of the constructed ECSqlReader object. Defaults to
57
+ * [[QueryRowFormat.UseECSqlPropertyIndexes]] when no `rowFormat` is defined.
58
+ *
59
+ * There are three primary ways to interact with and read the results:
60
+ * - Stream them using ECSqlReader as an asynchronous iterator.
61
+ * - Iterator over them manually using [[ECSqlReader.step]].
62
+ * - Capture all of the results at once in an array using [[QueryRowProxy.toArray]].
63
+ *
64
+ * @see
65
+ * - [ECSQL Overview]($docs/learning/backend/ExecutingECSQL)
66
+ * - [ECSQL Row Formats]($docs/learning/ECSQLRowFormat) for more details on how rows are formatted.
67
+ * - [ECSQL Code Examples]($docs/learning/ECSQLCodeExamples#iterating-over-query-results) for examples of each
68
+ * of the above ways of interacting with ECSqlReader.
69
+ *
70
+ * @note When iterating over the results, the current row will be a [[QueryRowProxy]] object. To get the row as a basic
71
+ * JavaScript object, call [[QueryRowProxy.toRow]] on it.
72
+ *
73
+ * @beta
74
+ */
51
75
  class ECSqlReader {
52
- /** @internal */
76
+ /**
77
+ * @internal
78
+ */
53
79
  constructor(_executor, query, param, options) {
54
80
  this._executor = _executor;
55
81
  this.query = query;
@@ -63,6 +89,7 @@ class ECSqlReader {
63
89
  this._param = new QueryBinder().serialize();
64
90
  this._lockArgs = false;
65
91
  this._stats = { backendCpuTime: 0, backendTotalTime: 0, backendMemUsed: 0, backendRowsReturned: 0, totalTime: 0, retryCount: 0 };
92
+ this._options = new QueryOptionsBuilder().getOptions();
66
93
  this._rowProxy = new Proxy(this, {
67
94
  get: (target, key) => {
68
95
  if (typeof key === "string") {
@@ -97,7 +124,6 @@ class ECSqlReader {
97
124
  return keys;
98
125
  },
99
126
  });
100
- this._options = new QueryOptionsBuilder().getOptions();
101
127
  if (query.trim().length === 0) {
102
128
  throw new Error("expecting non-empty ecsql statement");
103
129
  }
@@ -144,21 +170,70 @@ class ECSqlReader {
144
170
  }
145
171
  this._done = false;
146
172
  }
147
- get current() { return this._rowProxy; }
148
- // clear all bindings
173
+ /**
174
+ * Get the current row from the query result. The current row is the one most recently stepped-to
175
+ * (by step() or during iteration).
176
+ *
177
+ * Each value from the row can be accessed by index or by name.
178
+ *
179
+ * The format of the row is dictated by the [[QueryOptions.rowFormat]] specified in the `options` parameter of the
180
+ * constructed ECSqlReader object.
181
+ *
182
+ * @see
183
+ * - [[QueryRowFormat]]
184
+ * - [ECSQL Row Formats]($docs/learning/ECSQLRowFormat)
185
+ *
186
+ * @note The current row is be a [[QueryRowProxy]] object. To get the row as a basic JavaScript object, call
187
+ * [[QueryRowProxy.toRow]] on it.
188
+ *
189
+ * @example
190
+ * ```ts
191
+ * const reader = iModel.createQueryReader("SELECT ECInstanceId FROM bis.Element");
192
+ * while (await reader.step()) {
193
+ * // Both lines below print the same value
194
+ * console.log(reader.current[0]);
195
+ * console.log(reader.current.ecinstanceid);
196
+ * }
197
+ * ```
198
+ *
199
+ * @return The current row as a [[QueryRowProxy]].
200
+ */
201
+ get current() {
202
+ return this._rowProxy;
203
+ }
204
+ /**
205
+ * Clear all bindings.
206
+ */
149
207
  resetBindings() {
150
208
  this._param = new QueryBinder().serialize();
151
209
  this._lockArgs = false;
152
210
  }
153
- // return if there is any more rows available
154
- get done() { return this._done; }
211
+ /**
212
+ * Returns if there are more rows available.
213
+ *
214
+ * @returns `true` if all rows have been stepped through already.<br/>
215
+ * `false` if there are any yet unaccessed rows.
216
+ */
217
+ get done() {
218
+ return this._done;
219
+ }
220
+ /**
221
+ *
222
+ */
155
223
  getRowInternal() {
156
224
  if (this._localRows.length <= this._localOffset)
157
225
  throw new Error("no current row");
158
226
  return this._localRows[this._localOffset];
159
227
  }
160
- // return performance related statistics for current query.
161
- get stats() { return this._stats; }
228
+ /**
229
+ * Get performance-related statistics for the current query.
230
+ */
231
+ get stats() {
232
+ return this._stats;
233
+ }
234
+ /**
235
+ *
236
+ */
162
237
  async readRows() {
163
238
  if (this._globalDone) {
164
239
  return [];
@@ -189,13 +264,16 @@ class ECSqlReader {
189
264
  }
190
265
  return resp.data;
191
266
  }
267
+ /**
268
+ * @internal
269
+ */
192
270
  async runWithRetry(request) {
193
- const needRetry = (rs) => (rs.status === DbResponseStatus.Partial || rs.status === DbResponseStatus.QueueFull || rs.status === DbResponseStatus.Timeout) && (rs.data.length === 0);
271
+ const needRetry = (rs) => (rs.status === DbResponseStatus.Partial || rs.status === DbResponseStatus.QueueFull || rs.status === DbResponseStatus.Timeout) && (rs.data === undefined || rs.data.length === 0);
194
272
  const updateStats = (rs) => {
195
273
  this._stats.backendCpuTime += rs.stats.cpuTime;
196
274
  this._stats.backendTotalTime += rs.stats.totalTime;
197
275
  this._stats.backendMemUsed += rs.stats.memUsed;
198
- this._stats.backendRowsReturned += rs.data.length;
276
+ this._stats.backendRowsReturned += (rs.data === undefined) ? 0 : rs.data.length;
199
277
  };
200
278
  const execQuery = async (req) => {
201
279
  const startTime = Date.now();
@@ -219,6 +297,9 @@ class ECSqlReader {
219
297
  updateStats(resp);
220
298
  return resp;
221
299
  }
300
+ /**
301
+ *
302
+ */
222
303
  formatCurrentRow(onlyReturnObject = false) {
223
304
  if (!onlyReturnObject && this._options.rowFormat === QueryRowFormat.UseECSqlPropertyIndexes) {
224
305
  return this.getRowInternal();
@@ -236,12 +317,20 @@ class ECSqlReader {
236
317
  }
237
318
  return formattedRow;
238
319
  }
320
+ /**
321
+ * Get the metadata for each column in the query result.
322
+ *
323
+ * @returns An array of [[QueryPropertyMetaData]].
324
+ */
239
325
  async getMetaData() {
240
326
  if (this._props.length === 0) {
241
327
  await this.fetchRows();
242
328
  }
243
329
  return this._props.properties;
244
330
  }
331
+ /**
332
+ *
333
+ */
245
334
  async fetchRows() {
246
335
  this._localOffset = -1;
247
336
  this._localRows = await this.readRows();
@@ -249,6 +338,12 @@ class ECSqlReader {
249
338
  this._done = true;
250
339
  }
251
340
  }
341
+ /**
342
+ * Step to the next row of the query result.
343
+ *
344
+ * @returns `true` if a row can be read from `current`.<br/>
345
+ * `false` if there are no more rows; i.e., all rows have been stepped through already.
346
+ */
252
347
  async step() {
253
348
  if (this._done) {
254
349
  return false;
@@ -264,6 +359,11 @@ class ECSqlReader {
264
359
  }
265
360
  return true;
266
361
  }
362
+ /**
363
+ * Get all remaining rows from the query result.
364
+ *
365
+ * @returns An array of all remaining rows from the query result.
366
+ */
267
367
  async toArray() {
268
368
  const rows = [];
269
369
  while (await this.step()) {
@@ -271,9 +371,21 @@ class ECSqlReader {
271
371
  }
272
372
  return rows;
273
373
  }
374
+ /**
375
+ * Accessor for using ECSqlReader as an asynchronous iterator.
376
+ *
377
+ * @returns An asynchronous iterator over the rows returned by the executed ECSQL query.
378
+ */
274
379
  [Symbol.asyncIterator]() {
275
380
  return this;
276
381
  }
382
+ /**
383
+ * Calls step when called as an iterator.
384
+ *
385
+ * Returns the row alongside a `done` boolean to indicate if there are any more rows for an iterator to step to.
386
+ *
387
+ * @returns An object with the keys: `value` which contains the row and `done` which contains a boolean.
388
+ */
277
389
  async next() {
278
390
  if (await this.step()) {
279
391
  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 * @internal\r\n */\r\n protected async runWithRetry(request: DbQueryRequest) {\r\n const needRetry = (rs: DbQueryResponse) => (rs.status === DbResponseStatus.Partial || rs.status === DbResponseStatus.QueueFull || rs.status === DbResponseStatus.Timeout) && (rs.data === undefined || 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 === undefined) ? 0 : 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"]}
@@ -70,7 +70,7 @@ export interface GeometricElementProps extends ElementProps {
70
70
  /** The geometry stream properties */
71
71
  geom?: GeometryStreamProps;
72
72
  /** How to build the element's GeometryStream. This is used for insert and update only. It is not a persistent property. It will be undefined in the properties returned by functions that read a persistent element. It may be specified as an alternative to `geom` when inserting or updating an element.
73
- * @alpha
73
+ * @beta
74
74
  */
75
75
  elementGeometryBuilderParams?: ElementGeometryBuilderParams;
76
76
  /** The placement properties */
@@ -178,7 +178,7 @@ export interface GeometricElement2dProps extends GeometricElementProps {
178
178
  export interface GeometryPartProps extends ElementProps {
179
179
  geom?: GeometryStreamProps;
180
180
  /** How to build the part's GeometryStream. This is used for insert and update only. It is not a persistent property. It will be undefined in the properties returned by functions that read a persistent element. It may be specified as an alternative to `geom` when inserting or updating an element.
181
- * @alpha
181
+ * @beta
182
182
  */
183
183
  elementGeometryBuilderParams?: ElementGeometryBuilderParamsForPart;
184
184
  bbox?: LowAndHighXYZ;