@itwin/core-backend 5.12.0-dev.9 → 5.13.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (513) hide show
  1. package/CHANGELOG.md +6 -1
  2. package/lib/cjs/BackendHubAccess.js.map +1 -1
  3. package/lib/cjs/BackendLoggerCategory.js.map +1 -1
  4. package/lib/cjs/BisCoreSchema.js.map +1 -1
  5. package/lib/cjs/BlobContainerService.js.map +1 -1
  6. package/lib/cjs/BriefcaseManager.js.map +1 -1
  7. package/lib/cjs/CatalogDb.js.map +1 -1
  8. package/lib/cjs/Category.js.map +1 -1
  9. package/lib/cjs/ChangeSummaryManager.js +2 -2
  10. package/lib/cjs/ChangeSummaryManager.js.map +1 -1
  11. package/lib/cjs/ChangedElementsDb.js.map +1 -1
  12. package/lib/cjs/ChangesetECAdaptor.js +248 -248
  13. package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
  14. package/lib/cjs/ChangesetReader.js +3 -3
  15. package/lib/cjs/ChangesetReader.js.map +1 -1
  16. package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
  17. package/lib/cjs/ChannelControl.js.map +1 -1
  18. package/lib/cjs/CheckpointManager.js.map +1 -1
  19. package/lib/cjs/ClassRegistry.d.ts.map +1 -1
  20. package/lib/cjs/ClassRegistry.js +6 -7
  21. package/lib/cjs/ClassRegistry.js.map +1 -1
  22. package/lib/cjs/CloudSqlite.js.map +1 -1
  23. package/lib/cjs/CodeService.js.map +1 -1
  24. package/lib/cjs/CodeSpecs.js.map +1 -1
  25. package/lib/cjs/ConcurrentQuery.js.map +1 -1
  26. package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
  27. package/lib/cjs/DevTools.js.map +1 -1
  28. package/lib/cjs/DisplayStyle.js.map +1 -1
  29. package/lib/cjs/ECDb.d.ts.map +1 -1
  30. package/lib/cjs/ECDb.js +8 -3
  31. package/lib/cjs/ECDb.js.map +1 -1
  32. package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
  33. package/lib/cjs/ECSqlRowExecutor.d.ts +23 -10
  34. package/lib/cjs/ECSqlRowExecutor.d.ts.map +1 -1
  35. package/lib/cjs/ECSqlRowExecutor.js +77 -15
  36. package/lib/cjs/ECSqlRowExecutor.js.map +1 -1
  37. package/lib/cjs/ECSqlStatement.js.map +1 -1
  38. package/lib/cjs/ECSqlSyncReader.js.map +1 -1
  39. package/lib/cjs/EditTxn.js.map +1 -1
  40. package/lib/cjs/Element.js.map +1 -1
  41. package/lib/cjs/ElementAspect.js.map +1 -1
  42. package/lib/cjs/ElementGraphics.js.map +1 -1
  43. package/lib/cjs/ElementTreeWalker.js.map +1 -1
  44. package/lib/cjs/Entity.js.map +1 -1
  45. package/lib/cjs/EntityReferences.js.map +1 -1
  46. package/lib/cjs/ExportGraphics.js.map +1 -1
  47. package/lib/cjs/ExternalSource.js.map +1 -1
  48. package/lib/cjs/FontFile.js.map +1 -1
  49. package/lib/cjs/GeoCoordConfig.js.map +1 -1
  50. package/lib/cjs/GeographicCRSServices.js.map +1 -1
  51. package/lib/cjs/GeometrySummary.js +47 -47
  52. package/lib/cjs/GeometrySummary.js.map +1 -1
  53. package/lib/cjs/IModelDb.d.ts +20 -8
  54. package/lib/cjs/IModelDb.d.ts.map +1 -1
  55. package/lib/cjs/IModelDb.js +91 -62
  56. package/lib/cjs/IModelDb.js.map +1 -1
  57. package/lib/cjs/IModelDbFonts.js.map +1 -1
  58. package/lib/cjs/IModelElementCloneContext.js.map +1 -1
  59. package/lib/cjs/IModelHost.js.map +1 -1
  60. package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
  61. package/lib/cjs/IModelJsFs.js.map +1 -1
  62. package/lib/cjs/ImageSourceConversion.js.map +1 -1
  63. package/lib/cjs/IpcHost.d.ts +26 -0
  64. package/lib/cjs/IpcHost.d.ts.map +1 -1
  65. package/lib/cjs/IpcHost.js +68 -61
  66. package/lib/cjs/IpcHost.js.map +1 -1
  67. package/lib/cjs/LineStyle.js.map +1 -1
  68. package/lib/cjs/LocalHub.js +1 -1
  69. package/lib/cjs/LocalHub.js.map +1 -1
  70. package/lib/cjs/LocalhostIpcHost.js.map +1 -1
  71. package/lib/cjs/LockControl.js.map +1 -1
  72. package/lib/cjs/Material.js.map +1 -1
  73. package/lib/cjs/Model.js.map +1 -1
  74. package/lib/cjs/NativeAppStorage.js.map +1 -1
  75. package/lib/cjs/NativeHost.js.map +1 -1
  76. package/lib/cjs/NavigationRelationship.js.map +1 -1
  77. package/lib/cjs/PartialChangeUnifier.js +7 -7
  78. package/lib/cjs/PartialChangeUnifier.js.map +1 -1
  79. package/lib/cjs/PromiseMemoizer.js.map +1 -1
  80. package/lib/cjs/PropertyStore.js.map +1 -1
  81. package/lib/cjs/Relationship.d.ts.map +1 -1
  82. package/lib/cjs/Relationship.js +13 -7
  83. package/lib/cjs/Relationship.js.map +1 -1
  84. package/lib/cjs/RpcBackend.js.map +1 -1
  85. package/lib/cjs/SQLiteDb.d.ts +43 -0
  86. package/lib/cjs/SQLiteDb.d.ts.map +1 -1
  87. package/lib/cjs/SQLiteDb.js +51 -0
  88. package/lib/cjs/SQLiteDb.js.map +1 -1
  89. package/lib/cjs/Schema.js.map +1 -1
  90. package/lib/cjs/SchemaSync.js.map +1 -1
  91. package/lib/cjs/SchemaUtils.js.map +1 -1
  92. package/lib/cjs/SheetIndex.js.map +1 -1
  93. package/lib/cjs/SqliteChangesetReader.js.map +1 -1
  94. package/lib/cjs/SqliteStatement.js.map +1 -1
  95. package/lib/cjs/StashManager.js.map +1 -1
  96. package/lib/cjs/Texture.js.map +1 -1
  97. package/lib/cjs/TileStorage.js.map +1 -1
  98. package/lib/cjs/TxnManager.js.map +1 -1
  99. package/lib/cjs/ViewDefinition.js.map +1 -1
  100. package/lib/cjs/ViewStateHydrator.js.map +1 -1
  101. package/lib/cjs/ViewStore.js +1 -1
  102. package/lib/cjs/ViewStore.js.map +1 -1
  103. package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  104. package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
  105. package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
  106. package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
  107. package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
  108. package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
  109. package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
  110. package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
  111. package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +36 -36
  112. package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +28 -28
  113. package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
  114. package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
  115. package/lib/cjs/core-backend.js.map +1 -1
  116. package/lib/cjs/domains/FunctionalElements.js.map +1 -1
  117. package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
  118. package/lib/cjs/domains/GenericElements.js.map +1 -1
  119. package/lib/cjs/domains/GenericSchema.js.map +1 -1
  120. package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
  121. package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
  122. package/lib/cjs/internal/ECSqlInstanceReshaper.d.ts +23 -0
  123. package/lib/cjs/internal/ECSqlInstanceReshaper.d.ts.map +1 -0
  124. package/lib/cjs/internal/ECSqlInstanceReshaper.js +125 -0
  125. package/lib/cjs/internal/ECSqlInstanceReshaper.js.map +1 -0
  126. package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
  127. package/lib/cjs/internal/FontFileImpl.js.map +1 -1
  128. package/lib/cjs/internal/HubMock.js.map +1 -1
  129. package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
  130. package/lib/cjs/internal/IntegrityCheck.js.map +1 -1
  131. package/lib/cjs/internal/NativePlatform.js.map +1 -1
  132. package/lib/cjs/internal/NoLocks.js.map +1 -1
  133. package/lib/cjs/internal/OnlineStatus.js.map +1 -1
  134. package/lib/cjs/internal/ServerBasedLocks.js +33 -33
  135. package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
  136. package/lib/cjs/internal/Symbols.js.map +1 -1
  137. package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
  138. package/lib/cjs/internal/annotations/fields.js +9 -4
  139. package/lib/cjs/internal/annotations/fields.js.map +1 -1
  140. package/lib/cjs/internal/cross-package.js.map +1 -1
  141. package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
  142. package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
  143. package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  144. package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  145. package/lib/cjs/internal/workspace/WorkspaceImpl.js +12 -1
  146. package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
  147. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  148. package/lib/cjs/rpc/multipart.js.map +1 -1
  149. package/lib/cjs/rpc/tracing.js.map +1 -1
  150. package/lib/cjs/rpc/web/logging.js.map +1 -1
  151. package/lib/cjs/rpc/web/request.js.map +1 -1
  152. package/lib/cjs/rpc/web/response.js.map +1 -1
  153. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  154. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  155. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  156. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  157. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  158. package/lib/cjs/workspace/Settings.js.map +1 -1
  159. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  160. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  161. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  162. package/lib/cjs/workspace/Workspace.d.ts +2 -0
  163. package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
  164. package/lib/cjs/workspace/Workspace.js.map +1 -1
  165. package/lib/cjs/workspace/WorkspaceEditor.d.ts +3 -0
  166. package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
  167. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  168. package/lib/esm/BackendHubAccess.js.map +1 -1
  169. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  170. package/lib/esm/BisCoreSchema.js.map +1 -1
  171. package/lib/esm/BlobContainerService.js.map +1 -1
  172. package/lib/esm/BriefcaseManager.js.map +1 -1
  173. package/lib/esm/CatalogDb.js.map +1 -1
  174. package/lib/esm/Category.js.map +1 -1
  175. package/lib/esm/ChangeSummaryManager.js +2 -2
  176. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  177. package/lib/esm/ChangedElementsDb.js.map +1 -1
  178. package/lib/esm/ChangesetECAdaptor.js +248 -248
  179. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  180. package/lib/esm/ChangesetReader.js +3 -3
  181. package/lib/esm/ChangesetReader.js.map +1 -1
  182. package/lib/esm/ChangesetReaderTypes.js.map +1 -1
  183. package/lib/esm/ChannelControl.js.map +1 -1
  184. package/lib/esm/CheckpointManager.js.map +1 -1
  185. package/lib/esm/ClassRegistry.d.ts.map +1 -1
  186. package/lib/esm/ClassRegistry.js +6 -7
  187. package/lib/esm/ClassRegistry.js.map +1 -1
  188. package/lib/esm/CloudSqlite.js.map +1 -1
  189. package/lib/esm/CodeService.js.map +1 -1
  190. package/lib/esm/CodeSpecs.js.map +1 -1
  191. package/lib/esm/ConcurrentQuery.js.map +1 -1
  192. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  193. package/lib/esm/DevTools.js.map +1 -1
  194. package/lib/esm/DisplayStyle.js.map +1 -1
  195. package/lib/esm/ECDb.d.ts.map +1 -1
  196. package/lib/esm/ECDb.js +9 -4
  197. package/lib/esm/ECDb.js.map +1 -1
  198. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  199. package/lib/esm/ECSqlRowExecutor.d.ts +23 -10
  200. package/lib/esm/ECSqlRowExecutor.d.ts.map +1 -1
  201. package/lib/esm/ECSqlRowExecutor.js +77 -16
  202. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  203. package/lib/esm/ECSqlStatement.js.map +1 -1
  204. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  205. package/lib/esm/EditTxn.js.map +1 -1
  206. package/lib/esm/Element.js.map +1 -1
  207. package/lib/esm/ElementAspect.js.map +1 -1
  208. package/lib/esm/ElementGraphics.js.map +1 -1
  209. package/lib/esm/ElementTreeWalker.js.map +1 -1
  210. package/lib/esm/Entity.js.map +1 -1
  211. package/lib/esm/EntityReferences.js.map +1 -1
  212. package/lib/esm/ExportGraphics.js.map +1 -1
  213. package/lib/esm/ExternalSource.js.map +1 -1
  214. package/lib/esm/FontFile.js.map +1 -1
  215. package/lib/esm/GeoCoordConfig.js.map +1 -1
  216. package/lib/esm/GeographicCRSServices.js.map +1 -1
  217. package/lib/esm/GeometrySummary.js +47 -47
  218. package/lib/esm/GeometrySummary.js.map +1 -1
  219. package/lib/esm/IModelDb.d.ts +20 -8
  220. package/lib/esm/IModelDb.d.ts.map +1 -1
  221. package/lib/esm/IModelDb.js +93 -64
  222. package/lib/esm/IModelDb.js.map +1 -1
  223. package/lib/esm/IModelDbFonts.js.map +1 -1
  224. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  225. package/lib/esm/IModelHost.js.map +1 -1
  226. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  227. package/lib/esm/IModelJsFs.js.map +1 -1
  228. package/lib/esm/ImageSourceConversion.js.map +1 -1
  229. package/lib/esm/IpcHost.d.ts +26 -0
  230. package/lib/esm/IpcHost.d.ts.map +1 -1
  231. package/lib/esm/IpcHost.js +70 -63
  232. package/lib/esm/IpcHost.js.map +1 -1
  233. package/lib/esm/LineStyle.js.map +1 -1
  234. package/lib/esm/LocalHub.js +1 -1
  235. package/lib/esm/LocalHub.js.map +1 -1
  236. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  237. package/lib/esm/LockControl.js.map +1 -1
  238. package/lib/esm/Material.js.map +1 -1
  239. package/lib/esm/Model.js.map +1 -1
  240. package/lib/esm/NativeAppStorage.js.map +1 -1
  241. package/lib/esm/NativeHost.js.map +1 -1
  242. package/lib/esm/NavigationRelationship.js.map +1 -1
  243. package/lib/esm/PartialChangeUnifier.js +7 -7
  244. package/lib/esm/PartialChangeUnifier.js.map +1 -1
  245. package/lib/esm/PromiseMemoizer.js.map +1 -1
  246. package/lib/esm/PropertyStore.js.map +1 -1
  247. package/lib/esm/Relationship.d.ts.map +1 -1
  248. package/lib/esm/Relationship.js +13 -7
  249. package/lib/esm/Relationship.js.map +1 -1
  250. package/lib/esm/RpcBackend.js.map +1 -1
  251. package/lib/esm/SQLiteDb.d.ts +43 -0
  252. package/lib/esm/SQLiteDb.d.ts.map +1 -1
  253. package/lib/esm/SQLiteDb.js +51 -0
  254. package/lib/esm/SQLiteDb.js.map +1 -1
  255. package/lib/esm/Schema.js.map +1 -1
  256. package/lib/esm/SchemaSync.js.map +1 -1
  257. package/lib/esm/SchemaUtils.js.map +1 -1
  258. package/lib/esm/SheetIndex.js.map +1 -1
  259. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  260. package/lib/esm/SqliteStatement.js.map +1 -1
  261. package/lib/esm/StashManager.js.map +1 -1
  262. package/lib/esm/Texture.js.map +1 -1
  263. package/lib/esm/TileStorage.js.map +1 -1
  264. package/lib/esm/TxnManager.js.map +1 -1
  265. package/lib/esm/ViewDefinition.js.map +1 -1
  266. package/lib/esm/ViewStateHydrator.js.map +1 -1
  267. package/lib/esm/ViewStore.js +1 -1
  268. package/lib/esm/ViewStore.js.map +1 -1
  269. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  270. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  271. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  272. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  273. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  274. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  275. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  276. package/lib/esm/core-backend.js.map +1 -1
  277. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  278. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  279. package/lib/esm/domains/GenericElements.js.map +1 -1
  280. package/lib/esm/domains/GenericSchema.js.map +1 -1
  281. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  282. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  283. package/lib/esm/internal/ECSqlInstanceReshaper.d.ts +23 -0
  284. package/lib/esm/internal/ECSqlInstanceReshaper.d.ts.map +1 -0
  285. package/lib/esm/internal/ECSqlInstanceReshaper.js +120 -0
  286. package/lib/esm/internal/ECSqlInstanceReshaper.js.map +1 -0
  287. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  288. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  289. package/lib/esm/internal/HubMock.js.map +1 -1
  290. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  291. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  292. package/lib/esm/internal/NativePlatform.js.map +1 -1
  293. package/lib/esm/internal/NoLocks.js.map +1 -1
  294. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  295. package/lib/esm/internal/ServerBasedLocks.js +33 -33
  296. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  297. package/lib/esm/internal/Symbols.js.map +1 -1
  298. package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
  299. package/lib/esm/internal/annotations/fields.js +9 -4
  300. package/lib/esm/internal/annotations/fields.js.map +1 -1
  301. package/lib/esm/internal/cross-package.js.map +1 -1
  302. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  303. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  304. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  305. package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
  306. package/lib/esm/internal/workspace/WorkspaceImpl.js +12 -1
  307. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  308. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  309. package/lib/esm/rpc/multipart.js.map +1 -1
  310. package/lib/esm/rpc/tracing.js.map +1 -1
  311. package/lib/esm/rpc/web/logging.js.map +1 -1
  312. package/lib/esm/rpc/web/request.js.map +1 -1
  313. package/lib/esm/rpc/web/response.js.map +1 -1
  314. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  315. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  316. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  317. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  318. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  319. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  320. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  321. package/lib/esm/test/AttachDb.test.js +11 -11
  322. package/lib/esm/test/AttachDb.test.js.map +1 -1
  323. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  324. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  325. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  326. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  327. package/lib/esm/test/IModelHost.test.js.map +1 -1
  328. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  329. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  330. package/lib/esm/test/IpcHost.test.js +232 -1
  331. package/lib/esm/test/IpcHost.test.js.map +1 -1
  332. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  333. package/lib/esm/test/PrintElementTree.js.map +1 -1
  334. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  335. package/lib/esm/test/RevisionUtility.js.map +1 -1
  336. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js +51 -51
  337. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -1
  338. package/lib/esm/test/SchemaUtils.test.js +25 -25
  339. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  340. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  341. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  342. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  343. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  344. package/lib/esm/test/TestEditTxn.js.map +1 -1
  345. package/lib/esm/test/TestUtils.js.map +1 -1
  346. package/lib/esm/test/annotations/Fields.test.js +53 -53
  347. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  348. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  349. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  350. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  351. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  352. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  353. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  354. package/lib/esm/test/categories/Category.test.js.map +1 -1
  355. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  356. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  357. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  358. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  359. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  360. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  361. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  362. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  363. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  364. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  365. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  366. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  367. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  368. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  369. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  370. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  371. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  372. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +139 -1
  373. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  374. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  375. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  376. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  377. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  378. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  379. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  380. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  381. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  382. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  383. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  384. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  385. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  386. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  387. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  388. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  389. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  390. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  391. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  392. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  393. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  394. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  395. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  396. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  397. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  398. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  399. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  400. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  401. package/lib/esm/test/hubaccess/CodeSwap.test.js.map +1 -1
  402. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  403. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  404. package/lib/esm/test/hubaccess/SemanticRebase.test.js +345 -345
  405. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  406. package/lib/esm/test/imageData.js.map +1 -1
  407. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  408. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  409. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  410. package/lib/esm/test/imodel/IModel.test.js +64 -44
  411. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  412. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  413. package/lib/esm/test/imodel/SchemaXmlImport.test.js +21 -21
  414. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  415. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  416. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  417. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  418. package/lib/esm/test/index.js.map +1 -1
  419. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.d.ts +2 -0
  420. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.d.ts.map +1 -0
  421. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js +289 -0
  422. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js.map +1 -0
  423. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  424. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  425. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  426. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  427. package/lib/esm/test/rpc/response.test.js.map +1 -1
  428. package/lib/esm/test/schema/ClassRegistry.test.js +101 -101
  429. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  430. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  431. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  432. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  433. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  434. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  435. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  436. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.d.ts +2 -0
  437. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.d.ts.map +1 -0
  438. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.js +546 -0
  439. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.js.map +1 -0
  440. package/lib/esm/test/schema/SchemaViewHidden.test.js +109 -109
  441. package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -1
  442. package/lib/esm/test/schema/SchemaViewKoQ.test.js +13 -13
  443. package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -1
  444. package/lib/esm/test/schema/SchemaViewLifecycle.test.js +17 -17
  445. package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -1
  446. package/lib/esm/test/schema/SchemaViewValidation.test.js +8 -8
  447. package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -1
  448. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  449. package/lib/esm/test/standalone/ChangeElementParentModel.test.js.map +1 -1
  450. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  451. package/lib/esm/test/standalone/ChangesetReader.test.js +313 -313
  452. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  453. package/lib/esm/test/standalone/CloudSqlite.test.js.map +1 -1
  454. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  455. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  456. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  457. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  458. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  459. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  460. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  461. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  462. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  463. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  464. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  465. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  466. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  467. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  468. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  469. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  470. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  471. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  472. package/lib/esm/test/standalone/MergeConflict.test.js +1 -1
  473. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  474. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  475. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  476. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  477. package/lib/esm/test/standalone/SQLiteDb.test.d.ts +1 -1
  478. package/lib/esm/test/standalone/SQLiteDb.test.d.ts.map +1 -1
  479. package/lib/esm/test/standalone/SQLiteDb.test.js +93 -1
  480. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  481. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +135 -135
  482. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
  483. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  484. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  485. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  486. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  487. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  488. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  489. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  490. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  491. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  492. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  493. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  494. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  495. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  496. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  497. package/lib/esm/test/standalone/ViewStoreDb.test.js +30 -0
  498. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  499. package/lib/esm/test/standalone/Workspace.test.js +63 -1
  500. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  501. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  502. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  503. package/lib/esm/workspace/Settings.js.map +1 -1
  504. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  505. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  506. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  507. package/lib/esm/workspace/Workspace.d.ts +2 -0
  508. package/lib/esm/workspace/Workspace.d.ts.map +1 -1
  509. package/lib/esm/workspace/Workspace.js.map +1 -1
  510. package/lib/esm/workspace/WorkspaceEditor.d.ts +3 -0
  511. package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
  512. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  513. package/package.json +14 -15
@@ -1,7 +1,13 @@
1
1
  import { QueryPropertyMetaData } from "@itwin/core-common";
2
- import { IModelDb } from "./IModelDb";
2
+ import type { IModelDb } from "./IModelDb";
3
+ import { ECSqlStatement } from "./ECSqlStatement";
3
4
  import { IModelJsNative } from "@bentley/imodeljs-native";
4
- import { ECDb } from "./ECDb";
5
+ import type { ECDb } from "./ECDb";
6
+ import type { StatementCache } from "./SqliteStatement";
7
+ /** Returns a statement to its cache, falling back to direct disposal without throwing.
8
+ * @internal
9
+ */
10
+ export declare function releaseECSqlStatement(stmt: ECSqlStatement, cache: StatementCache<ECSqlStatement>, loggerCategory: string, canCache: boolean): void;
5
11
  /**
6
12
  * Executes ECSql queries one row at a time against an IModelDb, maintaining statement state between
7
13
  * successive calls so the caller can page through results via offset-based requests.
@@ -9,15 +15,23 @@ import { ECDb } from "./ECDb";
9
15
  */
10
16
  export declare class ECSqlRowExecutor implements Disposable {
11
17
  private readonly _db;
12
- private _stmt;
18
+ private readonly _stmt;
19
+ private readonly _loggerCategory;
13
20
  private _removeListener;
14
- constructor(_db: IModelDb | ECDb);
15
- /** Disposes the current statement and resets all internal state.
16
- * Invoked when the db signals that the executor must be recycled.
21
+ private _isDisposed;
22
+ private _canCacheStatement;
23
+ /** Whether the statement completed preparation and can be returned to its cache.
24
+ * @internal
25
+ */
26
+ get canCacheStatement(): boolean;
27
+ constructor(_db: IModelDb | ECDb, _stmt: ECSqlStatement, _loggerCategory: string);
28
+ /** Disposes the currently held statement without returning it to the cache.
29
+ * Invoked when the db signals it is closing (the statement cache is cleared on close, so the
30
+ * checked-out statement must be disposed directly to avoid a use-after-free or double dispose).
17
31
  * @internal
18
32
  */
19
33
  private cleanup;
20
- /** Call this function to dispose the row executor off.
34
+ /** Removes the database-close listener owned by this row executor.
21
35
  * @internal
22
36
  */
23
37
  [Symbol.dispose](): void;
@@ -49,14 +63,13 @@ export declare class ECSqlRowExecutor implements Disposable {
49
63
  * @internal
50
64
  */
51
65
  fetchMetadata(options: IModelJsNative.ECSqlRowAdaptorOptions): QueryPropertyMetaData[];
52
- /** Prepares the ECSql statement against the native database and records the elapsed preparation time.
66
+ /** Prepares the ECSql statement when the caller did not supply one from its cache.
53
67
  * @param ecsql - The ECSql text to prepare.
54
68
  * @returns An `OperationResult` indicating success or failure.
55
69
  * @internal
56
70
  */
57
71
  private prepareStmt;
58
- /** Resets the statement and binds the given parameter values. Caches the arguments for later
59
- * comparison so that redundant rebinds can be skipped.
72
+ /** Binds the supplied parameter values to the prepared statement.
60
73
  * @param args - The parameter object to bind, or `undefined` when no parameters are needed.
61
74
  * @returns An `OperationResult` indicating success or failure.
62
75
  * @internal
@@ -1 +1 @@
1
- {"version":3,"file":"ECSqlRowExecutor.d.ts","sourceRoot":"","sources":["../../src/ECSqlRowExecutor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAe,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAkB9B;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IAK9B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAHvC,OAAO,CAAC,KAAK,CAAiB;IAC9B,OAAO,CAAC,eAAe,CAAa;gBAEA,GAAG,EAAE,QAAQ,GAAG,IAAI;IAUxD;;;OAGG;IACH,OAAO,CAAC,OAAO;IAIf;;OAEG;IACI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAS/B;;;;;;OAMG;IACI,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAazD;;;;;;;;;;;OAWG;IACI,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,sBAAsB,GAAG,GAAG;IAWvE;;;;;OAKG;IACI,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,sBAAsB,GAAG,qBAAqB,EAAE;IAQ7F;;;;OAIG;IACH,OAAO,CAAC,WAAW;IASnB;;;;;OAKG;IACH,OAAO,CAAC,UAAU;CAWnB"}
1
+ {"version":3,"file":"ECSqlRowExecutor.d.ts","sourceRoot":"","sources":["../../src/ECSqlRowExecutor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAe,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAYxD;;GAEG;AAEH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI,CAoBlJ;AAkBD;;;;GAIG;AACH,qBAAa,gBAAiB,YAAW,UAAU;IAW9B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAAmB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAkB,OAAO,CAAC,QAAQ,CAAC,eAAe;IAVlI,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,kBAAkB,CAAQ;IAElC;;OAEG;IACH,IAAW,iBAAiB,IAAI,OAAO,CAAoC;gBAGvC,GAAG,EAAE,QAAQ,GAAG,IAAI,EAAmB,KAAK,EAAE,cAAc,EAAmB,eAAe,EAAE,MAAM;IAQ1I;;;;OAIG;IACH,OAAO,CAAC,OAAO;IASf;;OAEG;IACI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI;IAS/B;;;;;;OAMG;IACI,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI;IAazD;;;;;;;;;;;OAWG;IACI,WAAW,CAAC,OAAO,EAAE,cAAc,CAAC,sBAAsB,GAAG,GAAG;IAWvE;;;;;OAKG;IACI,aAAa,CAAC,OAAO,EAAE,cAAc,CAAC,sBAAsB,GAAG,qBAAqB,EAAE;IAU7F;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAkBnB;;;;OAIG;IACH,OAAO,CAAC,UAAU;CAcnB"}
@@ -3,9 +3,44 @@
3
3
  * See LICENSE.md in the project root for license terms and full copyright notice.
4
4
  *--------------------------------------------------------------------------------------------*/
5
5
  import { IModelError } from "@itwin/core-common";
6
- import { ECSqlStatement } from "./ECSqlStatement";
7
- import { DbResult } from "@itwin/core-bentley";
6
+ import { BentleyError, DbResult, Logger } from "@itwin/core-bentley";
8
7
  import { _nativeDb } from "./internal/Symbols";
8
+ const statementNotPreparedMessage = "Statement is not prepared. Likely cause: the db was closed before step is called or the ECSqlSyncReader is used outside the context of the callback passed to withQueryReader.";
9
+ function logStatementCleanupError(loggerCategory, message, error) {
10
+ try {
11
+ Logger.logTrace(loggerCategory, message, () => ({ error: BentleyError.getErrorMessage(error) }));
12
+ }
13
+ catch {
14
+ // Cleanup diagnostics must not replace the original query error.
15
+ }
16
+ }
17
+ /** Returns a statement to its cache, falling back to direct disposal without throwing.
18
+ * @internal
19
+ */
20
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
21
+ export function releaseECSqlStatement(stmt, cache, loggerCategory, canCache) {
22
+ if (!canCache || !stmt.isPrepared) {
23
+ try {
24
+ stmt[Symbol.dispose]();
25
+ }
26
+ catch (error) {
27
+ logStatementCleanupError(loggerCategory, "Failed to dispose an ECSQL statement that could not be cached.", error);
28
+ }
29
+ return;
30
+ }
31
+ try {
32
+ cache.addOrDispose(stmt);
33
+ }
34
+ catch (error) {
35
+ try {
36
+ stmt[Symbol.dispose]();
37
+ }
38
+ catch (disposeError) {
39
+ logStatementCleanupError(loggerCategory, "Failed to dispose an ECSQL statement after it could not be returned to the statement cache.", disposeError);
40
+ }
41
+ logStatementCleanupError(loggerCategory, "Failed to return an ECSQL statement to the statement cache; attempted direct disposal instead.", error);
42
+ }
43
+ }
9
44
  // --------------------------------------------------------------------------------------------
10
45
  // ECSqlRowExecutor
11
46
  // --------------------------------------------------------------------------------------------
@@ -16,31 +51,45 @@ import { _nativeDb } from "./internal/Symbols";
16
51
  */
17
52
  export class ECSqlRowExecutor {
18
53
  _db;
19
- // eslint-disable-next-line @typescript-eslint/no-deprecated
20
54
  _stmt;
55
+ _loggerCategory;
21
56
  _removeListener;
22
- constructor(_db) {
57
+ _isDisposed = false;
58
+ _canCacheStatement = true;
59
+ /** Whether the statement completed preparation and can be returned to its cache.
60
+ * @internal
61
+ */
62
+ get canCacheStatement() { return this._canCacheStatement; }
63
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
64
+ constructor(_db, _stmt, _loggerCategory) {
23
65
  this._db = _db;
24
- // eslint-disable-next-line @typescript-eslint/no-deprecated
25
- this._stmt = new ECSqlStatement();
66
+ this._stmt = _stmt;
67
+ this._loggerCategory = _loggerCategory;
26
68
  this._removeListener = this._db.onBeforeClose.addListener(() => this.cleanup());
27
69
  }
28
70
  // --------------------------------------------------------------------------------------------
29
71
  // Lifecycle
30
72
  // --------------------------------------------------------------------------------------------
31
- /** Disposes the current statement and resets all internal state.
32
- * Invoked when the db signals that the executor must be recycled.
73
+ /** Disposes the currently held statement without returning it to the cache.
74
+ * Invoked when the db signals it is closing (the statement cache is cleared on close, so the
75
+ * checked-out statement must be disposed directly to avoid a use-after-free or double dispose).
33
76
  * @internal
34
77
  */
35
78
  cleanup() {
36
- this._stmt[Symbol.dispose]();
79
+ this._isDisposed = true;
80
+ try {
81
+ this._stmt[Symbol.dispose]();
82
+ }
83
+ catch (error) {
84
+ logStatementCleanupError(this._loggerCategory, "Failed to dispose an ECSQL statement while closing its database.", error);
85
+ }
37
86
  }
38
- /** Call this function to dispose the row executor off.
87
+ /** Removes the database-close listener owned by this row executor.
39
88
  * @internal
40
89
  */
41
90
  [Symbol.dispose]() {
91
+ this._isDisposed = true;
42
92
  this._removeListener();
43
- this.cleanup();
44
93
  }
45
94
  // --------------------------------------------------------------------------------------------
46
95
  // Core execution
@@ -75,8 +124,8 @@ export class ECSqlRowExecutor {
75
124
  * @internal
76
125
  */
77
126
  stepNextRow(options) {
78
- if (!this._stmt.isPrepared)
79
- throw new IModelError(DbResult.BE_SQLITE_ERROR, "Statement is not prepared. Likely cause: the db was closed before step is called or the ECSqlSyncReader is used outside the context of the callback passed to withQueryReader.");
127
+ if (this._isDisposed || !this._stmt.isPrepared)
128
+ throw new IModelError(DbResult.BE_SQLITE_ERROR, statementNotPreparedMessage);
80
129
  const stepResult = this._stmt.step();
81
130
  if (stepResult === DbResult.BE_SQLITE_ROW)
82
131
  return this._stmt.toRow(options).data;
@@ -91,27 +140,37 @@ export class ECSqlRowExecutor {
91
140
  * @internal
92
141
  */
93
142
  fetchMetadata(options) {
143
+ if (this._isDisposed || !this._stmt.isPrepared)
144
+ throw new IModelError(DbResult.BE_SQLITE_ERROR, statementNotPreparedMessage);
94
145
  return this._stmt.getMetadata(options).properties;
95
146
  }
96
147
  // --------------------------------------------------------------------------------------------
97
148
  // Execution phases
98
149
  // --------------------------------------------------------------------------------------------
99
- /** Prepares the ECSql statement against the native database and records the elapsed preparation time.
150
+ /** Prepares the ECSql statement when the caller did not supply one from its cache.
100
151
  * @param ecsql - The ECSql text to prepare.
101
152
  * @returns An `OperationResult` indicating success or failure.
102
153
  * @internal
103
154
  */
104
155
  prepareStmt(ecsql) {
156
+ if (this._stmt.isPrepared)
157
+ return { isSuccessful: true };
105
158
  try {
106
159
  this._stmt.prepare(this._db[_nativeDb], ecsql);
107
160
  return { isSuccessful: true };
108
161
  }
109
162
  catch (error) {
163
+ this._canCacheStatement = false;
164
+ try {
165
+ this._stmt[Symbol.dispose]();
166
+ }
167
+ catch (disposeError) {
168
+ logStatementCleanupError(this._loggerCategory, "Failed to dispose an ECSQL statement after preparation failed.", disposeError);
169
+ }
110
170
  return { isSuccessful: false, message: error.message };
111
171
  }
112
172
  }
113
- /** Resets the statement and binds the given parameter values. Caches the arguments for later
114
- * comparison so that redundant rebinds can be skipped.
173
+ /** Binds the supplied parameter values to the prepared statement.
115
174
  * @param args - The parameter object to bind, or `undefined` when no parameters are needed.
116
175
  * @returns An `OperationResult` indicating success or failure.
117
176
  * @internal
@@ -120,6 +179,8 @@ export class ECSqlRowExecutor {
120
179
  try {
121
180
  if (args === undefined)
122
181
  return { isSuccessful: true };
182
+ if (!this._stmt.isPrepared)
183
+ return { isSuccessful: false, message: statementNotPreparedMessage };
123
184
  this._stmt.bindParams(args);
124
185
  return { isSuccessful: true };
125
186
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ECSqlRowExecutor.js","sourceRoot":"","sources":["../../src/ECSqlRowExecutor.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\r\nimport { IModelError, QueryPropertyMetaData } from \"@itwin/core-common\";\r\nimport { IModelDb } from \"./IModelDb\";\r\nimport { ECSqlStatement } from \"./ECSqlStatement\";\r\nimport { DbResult } from \"@itwin/core-bentley\";\r\nimport { IModelJsNative } from \"@bentley/imodeljs-native\";\r\nimport { _nativeDb } from \"./internal/Symbols\";\r\nimport { ECDb } from \"./ECDb\";\r\n\r\n// --------------------------------------------------------------------------------------------\r\n// Internal result types\r\n// --------------------------------------------------------------------------------------------\r\n\r\n/** Result of an internal operation that may fail with a message.\r\n * @internal\r\n */\r\ninterface OperationResult {\r\n isSuccessful: boolean;\r\n message?: string;\r\n}\r\n\r\n// --------------------------------------------------------------------------------------------\r\n// ECSqlRowExecutor\r\n// --------------------------------------------------------------------------------------------\r\n\r\n/**\r\n * Executes ECSql queries one row at a time against an IModelDb, maintaining statement state between\r\n * successive calls so the caller can page through results via offset-based requests.\r\n * @internal\r\n */\r\nexport class ECSqlRowExecutor implements Disposable {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n private _stmt: ECSqlStatement;\r\n private _removeListener: () => void;\r\n\r\n public constructor(private readonly _db: IModelDb | ECDb) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this._stmt = new ECSqlStatement();\r\n this._removeListener = this._db.onBeforeClose.addListener(() => this.cleanup());\r\n }\r\n\r\n // --------------------------------------------------------------------------------------------\r\n // Lifecycle\r\n // --------------------------------------------------------------------------------------------\r\n\r\n /** Disposes the current statement and resets all internal state.\r\n * Invoked when the db signals that the executor must be recycled.\r\n * @internal\r\n */\r\n private cleanup(): void {\r\n this._stmt[Symbol.dispose]();\r\n }\r\n\r\n /** Call this function to dispose the row executor off.\r\n * @internal\r\n */\r\n public [Symbol.dispose](): void {\r\n this._removeListener();\r\n this.cleanup();\r\n }\r\n\r\n // --------------------------------------------------------------------------------------------\r\n // Core execution\r\n // --------------------------------------------------------------------------------------------\r\n\r\n /** Prepare the statement and bind parameters in one step.\r\n * Call once during reader initialization — avoids the per-row `ensureStatementReady` check.\r\n * @param query - The ECSql text to prepare.\r\n * @param args - Optional bind parameters.\r\n * @throws IModelError on preparation or binding failure.\r\n * @internal\r\n */\r\n public prepareAndBind(query: string, args?: object): void {\r\n\r\n const prepResult = this.prepareStmt(query);\r\n if (!prepResult.isSuccessful)\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, prepResult.message ?? `Failed to prepare statement: ${query}`);\r\n\r\n if (args) {\r\n const bindResult = this.bindValues(args);\r\n if (!bindResult.isSuccessful)\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, bindResult.message ?? `Failed to bind values: ${query}`);\r\n }\r\n }\r\n\r\n /** Fast-path: step the cursor once and return row data directly.\r\n *\r\n * Returns the row data array if a row is available.\r\n * Returns `undefined` if the result set is exhausted (DONE).\r\n *\r\n * This avoids all intermediate object allocations (StepResult, RowDataResult,\r\n * DbRuntimeStats, DbQueryResponse) that the general `execute()` path creates per row.\r\n *\r\n * @param options - Native row-adaptor options (should be cached and reused across rows).\r\n * @throws IModelError on step failure or row extraction failure.\r\n * @internal\r\n */\r\n public stepNextRow(options: IModelJsNative.ECSqlRowAdaptorOptions): any {\r\n if (!this._stmt.isPrepared)\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Statement is not prepared. Likely cause: the db was closed before step is called or the ECSqlSyncReader is used outside the context of the callback passed to withQueryReader.\");\r\n const stepResult = this._stmt.step();\r\n if (stepResult === DbResult.BE_SQLITE_ROW)\r\n return this._stmt.toRow(options).data;\r\n if (stepResult === DbResult.BE_SQLITE_DONE)\r\n return undefined;\r\n throw new IModelError(stepResult, `Step failed with code ${stepResult}`);\r\n }\r\n\r\n /** Get column metadata directly from the prepared statement.\r\n * Call once after `prepareAndBind` — the metadata does not change between rows.\r\n * @param options - Native row-adaptor options that influence property naming.\r\n * @returns Array of column metadata.\r\n * @internal\r\n */\r\n public fetchMetadata(options: IModelJsNative.ECSqlRowAdaptorOptions): QueryPropertyMetaData[] {\r\n return this._stmt.getMetadata(options).properties;\r\n }\r\n\r\n // --------------------------------------------------------------------------------------------\r\n // Execution phases\r\n // --------------------------------------------------------------------------------------------\r\n\r\n /** Prepares the ECSql statement against the native database and records the elapsed preparation time.\r\n * @param ecsql - The ECSql text to prepare.\r\n * @returns An `OperationResult` indicating success or failure.\r\n * @internal\r\n */\r\n private prepareStmt(ecsql: string): OperationResult {\r\n try {\r\n this._stmt.prepare(this._db[_nativeDb], ecsql);\r\n return { isSuccessful: true };\r\n } catch (error: any) {\r\n return { isSuccessful: false, message: error.message };\r\n }\r\n }\r\n\r\n /** Resets the statement and binds the given parameter values. Caches the arguments for later\r\n * comparison so that redundant rebinds can be skipped.\r\n * @param args - The parameter object to bind, or `undefined` when no parameters are needed.\r\n * @returns An `OperationResult` indicating success or failure.\r\n * @internal\r\n */\r\n private bindValues(args: object | undefined): OperationResult {\r\n try {\r\n if (args === undefined)\r\n return { isSuccessful: true };\r\n\r\n this._stmt.bindParams(args);\r\n return { isSuccessful: true };\r\n } catch (error: any) {\r\n return { isSuccessful: false, message: error.message };\r\n }\r\n }\r\n}"]}
1
+ {"version":3,"file":"ECSqlRowExecutor.js","sourceRoot":"","sources":["../../src/ECSqlRowExecutor.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { IModelError, QueryPropertyMetaData } from \"@itwin/core-common\";\nimport type { IModelDb } from \"./IModelDb\";\nimport { ECSqlStatement } from \"./ECSqlStatement\";\nimport { BentleyError, DbResult, Logger } from \"@itwin/core-bentley\";\nimport { IModelJsNative } from \"@bentley/imodeljs-native\";\nimport { _nativeDb } from \"./internal/Symbols\";\nimport type { ECDb } from \"./ECDb\";\nimport type { StatementCache } from \"./SqliteStatement\";\n\nconst statementNotPreparedMessage = \"Statement is not prepared. Likely cause: the db was closed before step is called or the ECSqlSyncReader is used outside the context of the callback passed to withQueryReader.\";\n\nfunction logStatementCleanupError(loggerCategory: string, message: string, error: unknown): void {\n try {\n Logger.logTrace(loggerCategory, message, () => ({ error: BentleyError.getErrorMessage(error) }));\n } catch {\n // Cleanup diagnostics must not replace the original query error.\n }\n}\n\n/** Returns a statement to its cache, falling back to direct disposal without throwing.\n * @internal\n */\n// eslint-disable-next-line @typescript-eslint/no-deprecated\nexport function releaseECSqlStatement(stmt: ECSqlStatement, cache: StatementCache<ECSqlStatement>, loggerCategory: string, canCache: boolean): void {\n if (!canCache || !stmt.isPrepared) {\n try {\n stmt[Symbol.dispose]();\n } catch (error) {\n logStatementCleanupError(loggerCategory, \"Failed to dispose an ECSQL statement that could not be cached.\", error);\n }\n return;\n }\n\n try {\n cache.addOrDispose(stmt);\n } catch (error) {\n try {\n stmt[Symbol.dispose]();\n } catch (disposeError) {\n logStatementCleanupError(loggerCategory, \"Failed to dispose an ECSQL statement after it could not be returned to the statement cache.\", disposeError);\n }\n logStatementCleanupError(loggerCategory, \"Failed to return an ECSQL statement to the statement cache; attempted direct disposal instead.\", error);\n }\n}\n\n// --------------------------------------------------------------------------------------------\n// Internal result types\n// --------------------------------------------------------------------------------------------\n\n/** Result of an internal operation that may fail with a message.\n * @internal\n */\ninterface OperationResult {\n isSuccessful: boolean;\n message?: string;\n}\n\n// --------------------------------------------------------------------------------------------\n// ECSqlRowExecutor\n// --------------------------------------------------------------------------------------------\n\n/**\n * Executes ECSql queries one row at a time against an IModelDb, maintaining statement state between\n * successive calls so the caller can page through results via offset-based requests.\n * @internal\n */\nexport class ECSqlRowExecutor implements Disposable {\n private _removeListener: () => void;\n private _isDisposed = false;\n private _canCacheStatement = true;\n\n /** Whether the statement completed preparation and can be returned to its cache.\n * @internal\n */\n public get canCacheStatement(): boolean { return this._canCacheStatement; }\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public constructor(private readonly _db: IModelDb | ECDb, private readonly _stmt: ECSqlStatement, private readonly _loggerCategory: string) {\n this._removeListener = this._db.onBeforeClose.addListener(() => this.cleanup());\n }\n\n // --------------------------------------------------------------------------------------------\n // Lifecycle\n // --------------------------------------------------------------------------------------------\n\n /** Disposes the currently held statement without returning it to the cache.\n * Invoked when the db signals it is closing (the statement cache is cleared on close, so the\n * checked-out statement must be disposed directly to avoid a use-after-free or double dispose).\n * @internal\n */\n private cleanup(): void {\n this._isDisposed = true;\n try {\n this._stmt[Symbol.dispose]();\n } catch (error) {\n logStatementCleanupError(this._loggerCategory, \"Failed to dispose an ECSQL statement while closing its database.\", error);\n }\n }\n\n /** Removes the database-close listener owned by this row executor.\n * @internal\n */\n public [Symbol.dispose](): void {\n this._isDisposed = true;\n this._removeListener();\n }\n\n // --------------------------------------------------------------------------------------------\n // Core execution\n // --------------------------------------------------------------------------------------------\n\n /** Prepare the statement and bind parameters in one step.\n * Call once during reader initialization — avoids the per-row `ensureStatementReady` check.\n * @param query - The ECSql text to prepare.\n * @param args - Optional bind parameters.\n * @throws IModelError on preparation or binding failure.\n * @internal\n */\n public prepareAndBind(query: string, args?: object): void {\n\n const prepResult = this.prepareStmt(query);\n if (!prepResult.isSuccessful)\n throw new IModelError(DbResult.BE_SQLITE_ERROR, prepResult.message ?? `Failed to prepare statement: ${query}`);\n\n if (args) {\n const bindResult = this.bindValues(args);\n if (!bindResult.isSuccessful)\n throw new IModelError(DbResult.BE_SQLITE_ERROR, bindResult.message ?? `Failed to bind values: ${query}`);\n }\n }\n\n /** Fast-path: step the cursor once and return row data directly.\n *\n * Returns the row data array if a row is available.\n * Returns `undefined` if the result set is exhausted (DONE).\n *\n * This avoids all intermediate object allocations (StepResult, RowDataResult,\n * DbRuntimeStats, DbQueryResponse) that the general `execute()` path creates per row.\n *\n * @param options - Native row-adaptor options (should be cached and reused across rows).\n * @throws IModelError on step failure or row extraction failure.\n * @internal\n */\n public stepNextRow(options: IModelJsNative.ECSqlRowAdaptorOptions): any {\n if (this._isDisposed || !this._stmt.isPrepared)\n throw new IModelError(DbResult.BE_SQLITE_ERROR, statementNotPreparedMessage);\n const stepResult = this._stmt.step();\n if (stepResult === DbResult.BE_SQLITE_ROW)\n return this._stmt.toRow(options).data;\n if (stepResult === DbResult.BE_SQLITE_DONE)\n return undefined;\n throw new IModelError(stepResult, `Step failed with code ${stepResult}`);\n }\n\n /** Get column metadata directly from the prepared statement.\n * Call once after `prepareAndBind` — the metadata does not change between rows.\n * @param options - Native row-adaptor options that influence property naming.\n * @returns Array of column metadata.\n * @internal\n */\n public fetchMetadata(options: IModelJsNative.ECSqlRowAdaptorOptions): QueryPropertyMetaData[] {\n if (this._isDisposed || !this._stmt.isPrepared)\n throw new IModelError(DbResult.BE_SQLITE_ERROR, statementNotPreparedMessage);\n return this._stmt.getMetadata(options).properties;\n }\n\n // --------------------------------------------------------------------------------------------\n // Execution phases\n // --------------------------------------------------------------------------------------------\n\n /** Prepares the ECSql statement when the caller did not supply one from its cache.\n * @param ecsql - The ECSql text to prepare.\n * @returns An `OperationResult` indicating success or failure.\n * @internal\n */\n private prepareStmt(ecsql: string): OperationResult {\n if (this._stmt.isPrepared)\n return { isSuccessful: true };\n\n try {\n this._stmt.prepare(this._db[_nativeDb], ecsql);\n return { isSuccessful: true };\n } catch (error: any) {\n this._canCacheStatement = false;\n try {\n this._stmt[Symbol.dispose]();\n } catch (disposeError) {\n logStatementCleanupError(this._loggerCategory, \"Failed to dispose an ECSQL statement after preparation failed.\", disposeError);\n }\n return { isSuccessful: false, message: error.message };\n }\n }\n\n /** Binds the supplied parameter values to the prepared statement.\n * @param args - The parameter object to bind, or `undefined` when no parameters are needed.\n * @returns An `OperationResult` indicating success or failure.\n * @internal\n */\n private bindValues(args: object | undefined): OperationResult {\n try {\n if (args === undefined)\n return { isSuccessful: true };\n\n if (!this._stmt.isPrepared)\n return { isSuccessful: false, message: statementNotPreparedMessage };\n\n this._stmt.bindParams(args);\n return { isSuccessful: true };\n } catch (error: any) {\n return { isSuccessful: false, message: error.message };\n }\n }\n}"]}