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

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 (500) 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.js.map +1 -1
  145. package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  146. package/lib/cjs/rpc/multipart.js.map +1 -1
  147. package/lib/cjs/rpc/tracing.js.map +1 -1
  148. package/lib/cjs/rpc/web/logging.js.map +1 -1
  149. package/lib/cjs/rpc/web/request.js.map +1 -1
  150. package/lib/cjs/rpc/web/response.js.map +1 -1
  151. package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  152. package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  153. package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  154. package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  155. package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  156. package/lib/cjs/workspace/Settings.js.map +1 -1
  157. package/lib/cjs/workspace/SettingsDb.js.map +1 -1
  158. package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
  159. package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
  160. package/lib/cjs/workspace/Workspace.js.map +1 -1
  161. package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
  162. package/lib/esm/BackendHubAccess.js.map +1 -1
  163. package/lib/esm/BackendLoggerCategory.js.map +1 -1
  164. package/lib/esm/BisCoreSchema.js.map +1 -1
  165. package/lib/esm/BlobContainerService.js.map +1 -1
  166. package/lib/esm/BriefcaseManager.js.map +1 -1
  167. package/lib/esm/CatalogDb.js.map +1 -1
  168. package/lib/esm/Category.js.map +1 -1
  169. package/lib/esm/ChangeSummaryManager.js +2 -2
  170. package/lib/esm/ChangeSummaryManager.js.map +1 -1
  171. package/lib/esm/ChangedElementsDb.js.map +1 -1
  172. package/lib/esm/ChangesetECAdaptor.js +248 -248
  173. package/lib/esm/ChangesetECAdaptor.js.map +1 -1
  174. package/lib/esm/ChangesetReader.js +3 -3
  175. package/lib/esm/ChangesetReader.js.map +1 -1
  176. package/lib/esm/ChangesetReaderTypes.js.map +1 -1
  177. package/lib/esm/ChannelControl.js.map +1 -1
  178. package/lib/esm/CheckpointManager.js.map +1 -1
  179. package/lib/esm/ClassRegistry.d.ts.map +1 -1
  180. package/lib/esm/ClassRegistry.js +6 -7
  181. package/lib/esm/ClassRegistry.js.map +1 -1
  182. package/lib/esm/CloudSqlite.js.map +1 -1
  183. package/lib/esm/CodeService.js.map +1 -1
  184. package/lib/esm/CodeSpecs.js.map +1 -1
  185. package/lib/esm/ConcurrentQuery.js.map +1 -1
  186. package/lib/esm/CustomViewState3dCreator.js.map +1 -1
  187. package/lib/esm/DevTools.js.map +1 -1
  188. package/lib/esm/DisplayStyle.js.map +1 -1
  189. package/lib/esm/ECDb.d.ts.map +1 -1
  190. package/lib/esm/ECDb.js +9 -4
  191. package/lib/esm/ECDb.js.map +1 -1
  192. package/lib/esm/ECSchemaXmlContext.js.map +1 -1
  193. package/lib/esm/ECSqlRowExecutor.d.ts +23 -10
  194. package/lib/esm/ECSqlRowExecutor.d.ts.map +1 -1
  195. package/lib/esm/ECSqlRowExecutor.js +77 -16
  196. package/lib/esm/ECSqlRowExecutor.js.map +1 -1
  197. package/lib/esm/ECSqlStatement.js.map +1 -1
  198. package/lib/esm/ECSqlSyncReader.js.map +1 -1
  199. package/lib/esm/EditTxn.js.map +1 -1
  200. package/lib/esm/Element.js.map +1 -1
  201. package/lib/esm/ElementAspect.js.map +1 -1
  202. package/lib/esm/ElementGraphics.js.map +1 -1
  203. package/lib/esm/ElementTreeWalker.js.map +1 -1
  204. package/lib/esm/Entity.js.map +1 -1
  205. package/lib/esm/EntityReferences.js.map +1 -1
  206. package/lib/esm/ExportGraphics.js.map +1 -1
  207. package/lib/esm/ExternalSource.js.map +1 -1
  208. package/lib/esm/FontFile.js.map +1 -1
  209. package/lib/esm/GeoCoordConfig.js.map +1 -1
  210. package/lib/esm/GeographicCRSServices.js.map +1 -1
  211. package/lib/esm/GeometrySummary.js +47 -47
  212. package/lib/esm/GeometrySummary.js.map +1 -1
  213. package/lib/esm/IModelDb.d.ts +20 -8
  214. package/lib/esm/IModelDb.d.ts.map +1 -1
  215. package/lib/esm/IModelDb.js +93 -64
  216. package/lib/esm/IModelDb.js.map +1 -1
  217. package/lib/esm/IModelDbFonts.js.map +1 -1
  218. package/lib/esm/IModelElementCloneContext.js.map +1 -1
  219. package/lib/esm/IModelHost.js.map +1 -1
  220. package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
  221. package/lib/esm/IModelJsFs.js.map +1 -1
  222. package/lib/esm/ImageSourceConversion.js.map +1 -1
  223. package/lib/esm/IpcHost.d.ts +26 -0
  224. package/lib/esm/IpcHost.d.ts.map +1 -1
  225. package/lib/esm/IpcHost.js +70 -63
  226. package/lib/esm/IpcHost.js.map +1 -1
  227. package/lib/esm/LineStyle.js.map +1 -1
  228. package/lib/esm/LocalHub.js +1 -1
  229. package/lib/esm/LocalHub.js.map +1 -1
  230. package/lib/esm/LocalhostIpcHost.js.map +1 -1
  231. package/lib/esm/LockControl.js.map +1 -1
  232. package/lib/esm/Material.js.map +1 -1
  233. package/lib/esm/Model.js.map +1 -1
  234. package/lib/esm/NativeAppStorage.js.map +1 -1
  235. package/lib/esm/NativeHost.js.map +1 -1
  236. package/lib/esm/NavigationRelationship.js.map +1 -1
  237. package/lib/esm/PartialChangeUnifier.js +7 -7
  238. package/lib/esm/PartialChangeUnifier.js.map +1 -1
  239. package/lib/esm/PromiseMemoizer.js.map +1 -1
  240. package/lib/esm/PropertyStore.js.map +1 -1
  241. package/lib/esm/Relationship.d.ts.map +1 -1
  242. package/lib/esm/Relationship.js +13 -7
  243. package/lib/esm/Relationship.js.map +1 -1
  244. package/lib/esm/RpcBackend.js.map +1 -1
  245. package/lib/esm/SQLiteDb.d.ts +43 -0
  246. package/lib/esm/SQLiteDb.d.ts.map +1 -1
  247. package/lib/esm/SQLiteDb.js +51 -0
  248. package/lib/esm/SQLiteDb.js.map +1 -1
  249. package/lib/esm/Schema.js.map +1 -1
  250. package/lib/esm/SchemaSync.js.map +1 -1
  251. package/lib/esm/SchemaUtils.js.map +1 -1
  252. package/lib/esm/SheetIndex.js.map +1 -1
  253. package/lib/esm/SqliteChangesetReader.js.map +1 -1
  254. package/lib/esm/SqliteStatement.js.map +1 -1
  255. package/lib/esm/StashManager.js.map +1 -1
  256. package/lib/esm/Texture.js.map +1 -1
  257. package/lib/esm/TileStorage.js.map +1 -1
  258. package/lib/esm/TxnManager.js.map +1 -1
  259. package/lib/esm/ViewDefinition.js.map +1 -1
  260. package/lib/esm/ViewStateHydrator.js.map +1 -1
  261. package/lib/esm/ViewStore.js +1 -1
  262. package/lib/esm/ViewStore.js.map +1 -1
  263. package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
  264. package/lib/esm/annotations/FrameGeometry.js.map +1 -1
  265. package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
  266. package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
  267. package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
  268. package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
  269. package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
  270. package/lib/esm/core-backend.js.map +1 -1
  271. package/lib/esm/domains/FunctionalElements.js.map +1 -1
  272. package/lib/esm/domains/FunctionalSchema.js.map +1 -1
  273. package/lib/esm/domains/GenericElements.js.map +1 -1
  274. package/lib/esm/domains/GenericSchema.js.map +1 -1
  275. package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
  276. package/lib/esm/internal/ChannelAdmin.js.map +1 -1
  277. package/lib/esm/internal/ECSqlInstanceReshaper.d.ts +23 -0
  278. package/lib/esm/internal/ECSqlInstanceReshaper.d.ts.map +1 -0
  279. package/lib/esm/internal/ECSqlInstanceReshaper.js +120 -0
  280. package/lib/esm/internal/ECSqlInstanceReshaper.js.map +1 -0
  281. package/lib/esm/internal/ElementLRUCache.js.map +1 -1
  282. package/lib/esm/internal/FontFileImpl.js.map +1 -1
  283. package/lib/esm/internal/HubMock.js.map +1 -1
  284. package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
  285. package/lib/esm/internal/IntegrityCheck.js.map +1 -1
  286. package/lib/esm/internal/NativePlatform.js.map +1 -1
  287. package/lib/esm/internal/NoLocks.js.map +1 -1
  288. package/lib/esm/internal/OnlineStatus.js.map +1 -1
  289. package/lib/esm/internal/ServerBasedLocks.js +33 -33
  290. package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
  291. package/lib/esm/internal/Symbols.js.map +1 -1
  292. package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
  293. package/lib/esm/internal/annotations/fields.js +9 -4
  294. package/lib/esm/internal/annotations/fields.js.map +1 -1
  295. package/lib/esm/internal/cross-package.js.map +1 -1
  296. package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
  297. package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
  298. package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
  299. package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
  300. package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
  301. package/lib/esm/rpc/multipart.js.map +1 -1
  302. package/lib/esm/rpc/tracing.js.map +1 -1
  303. package/lib/esm/rpc/web/logging.js.map +1 -1
  304. package/lib/esm/rpc/web/request.js.map +1 -1
  305. package/lib/esm/rpc/web/response.js.map +1 -1
  306. package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
  307. package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
  308. package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
  309. package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
  310. package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
  311. package/lib/esm/test/AdvancedEqual.js.map +1 -1
  312. package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
  313. package/lib/esm/test/AttachDb.test.js +11 -11
  314. package/lib/esm/test/AttachDb.test.js.map +1 -1
  315. package/lib/esm/test/ElementDrivesElement.test.js +23 -23
  316. package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
  317. package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
  318. package/lib/esm/test/GeometryTestUtil.js.map +1 -1
  319. package/lib/esm/test/IModelHost.test.js.map +1 -1
  320. package/lib/esm/test/IModelTestUtils.js.map +1 -1
  321. package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
  322. package/lib/esm/test/IpcHost.test.js +232 -1
  323. package/lib/esm/test/IpcHost.test.js.map +1 -1
  324. package/lib/esm/test/KnownTestLocations.js.map +1 -1
  325. package/lib/esm/test/PrintElementTree.js.map +1 -1
  326. package/lib/esm/test/PropertyDb.test.js.map +1 -1
  327. package/lib/esm/test/RevisionUtility.js.map +1 -1
  328. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js +51 -51
  329. package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -1
  330. package/lib/esm/test/SchemaUtils.test.js +25 -25
  331. package/lib/esm/test/SchemaUtils.test.js.map +1 -1
  332. package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
  333. package/lib/esm/test/SquashSchemaAndDataChanges.test.js +129 -129
  334. package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
  335. package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
  336. package/lib/esm/test/TestEditTxn.js.map +1 -1
  337. package/lib/esm/test/TestUtils.js.map +1 -1
  338. package/lib/esm/test/annotations/Fields.test.js +53 -53
  339. package/lib/esm/test/annotations/Fields.test.js.map +1 -1
  340. package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
  341. package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
  342. package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
  343. package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
  344. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
  345. package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
  346. package/lib/esm/test/categories/Category.test.js.map +1 -1
  347. package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
  348. package/lib/esm/test/ecdb/CTE.test.js +88 -88
  349. package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
  350. package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
  351. package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
  352. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
  353. package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
  354. package/lib/esm/test/ecdb/ECDb.test.js +72 -72
  355. package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
  356. package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
  357. package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
  358. package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
  359. package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
  360. package/lib/esm/test/ecdb/ECSqlQuery.test.js +4 -4
  361. package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
  362. package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
  363. package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
  364. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +139 -1
  365. package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
  366. package/lib/esm/test/ecdb/QueryReaders.test.js +31 -31
  367. package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -1
  368. package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
  369. package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
  370. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
  371. package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
  372. package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
  373. package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
  374. package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
  375. package/lib/esm/test/element/ElementAspect.test.js +22 -22
  376. package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
  377. package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
  378. package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
  379. package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
  380. package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
  381. package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
  382. package/lib/esm/test/element/NullStructArray.test.js +13 -13
  383. package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
  384. package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
  385. package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
  386. package/lib/esm/test/element/UrlLink.test.js.map +1 -1
  387. package/lib/esm/test/font/FontFile.test.js.map +1 -1
  388. package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
  389. package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
  390. package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
  391. package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
  392. package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
  393. package/lib/esm/test/hubaccess/CodeSwap.test.js.map +1 -1
  394. package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
  395. package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
  396. package/lib/esm/test/hubaccess/SemanticRebase.test.js +345 -345
  397. package/lib/esm/test/hubaccess/SemanticRebase.test.js.map +1 -1
  398. package/lib/esm/test/imageData.js.map +1 -1
  399. package/lib/esm/test/imodel/Code.test.js.map +1 -1
  400. package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
  401. package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
  402. package/lib/esm/test/imodel/IModel.test.js +64 -44
  403. package/lib/esm/test/imodel/IModel.test.js.map +1 -1
  404. package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
  405. package/lib/esm/test/imodel/SchemaXmlImport.test.js +21 -21
  406. package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
  407. package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
  408. package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
  409. package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
  410. package/lib/esm/test/index.js.map +1 -1
  411. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.d.ts +2 -0
  412. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.d.ts.map +1 -0
  413. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js +289 -0
  414. package/lib/esm/test/internal/ECSqlInstanceReshaper.test.js.map +1 -0
  415. package/lib/esm/test/misc/DevTools.test.js.map +1 -1
  416. package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
  417. package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
  418. package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
  419. package/lib/esm/test/rpc/response.test.js.map +1 -1
  420. package/lib/esm/test/schema/ClassRegistry.test.js +101 -101
  421. package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
  422. package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
  423. package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
  424. package/lib/esm/test/schema/IModelSchemaContext.test.js +9 -9
  425. package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
  426. package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
  427. package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
  428. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.d.ts +2 -0
  429. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.d.ts.map +1 -0
  430. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.js +546 -0
  431. package/lib/esm/test/schema/SchemaViewFragmentLoading.test.js.map +1 -0
  432. package/lib/esm/test/schema/SchemaViewHidden.test.js +109 -109
  433. package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -1
  434. package/lib/esm/test/schema/SchemaViewKoQ.test.js +13 -13
  435. package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -1
  436. package/lib/esm/test/schema/SchemaViewLifecycle.test.js +17 -17
  437. package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -1
  438. package/lib/esm/test/schema/SchemaViewValidation.test.js +8 -8
  439. package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -1
  440. package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
  441. package/lib/esm/test/standalone/ChangeElementParentModel.test.js.map +1 -1
  442. package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
  443. package/lib/esm/test/standalone/ChangesetReader.test.js +313 -313
  444. package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
  445. package/lib/esm/test/standalone/CloudSqlite.test.js.map +1 -1
  446. package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
  447. package/lib/esm/test/standalone/DeleteElements.test.js.map +1 -1
  448. package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
  449. package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
  450. package/lib/esm/test/standalone/EditTxn.test.js.map +1 -1
  451. package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
  452. package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
  453. package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
  454. package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
  455. package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
  456. package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
  457. package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
  458. package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
  459. package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
  460. package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
  461. package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
  462. package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
  463. package/lib/esm/test/standalone/IntegrityCheck.test.js.map +1 -1
  464. package/lib/esm/test/standalone/MergeConflict.test.js +1 -1
  465. package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
  466. package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
  467. package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
  468. package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
  469. package/lib/esm/test/standalone/SQLiteDb.test.d.ts +1 -1
  470. package/lib/esm/test/standalone/SQLiteDb.test.d.ts.map +1 -1
  471. package/lib/esm/test/standalone/SQLiteDb.test.js +93 -1
  472. package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
  473. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js +135 -135
  474. package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.test.js.map +1 -1
  475. package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
  476. package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
  477. package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
  478. package/lib/esm/test/standalone/Setting.test.js.map +1 -1
  479. package/lib/esm/test/standalone/Settings.test.js.map +1 -1
  480. package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
  481. package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
  482. package/lib/esm/test/standalone/StandaloneDb.test.js +20 -20
  483. package/lib/esm/test/standalone/StandaloneDb.test.js.map +1 -1
  484. package/lib/esm/test/standalone/Texture.test.js.map +1 -1
  485. package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
  486. package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
  487. package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
  488. package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
  489. package/lib/esm/test/standalone/ViewStoreDb.test.js +30 -0
  490. package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
  491. package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
  492. package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
  493. package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
  494. package/lib/esm/workspace/Settings.js.map +1 -1
  495. package/lib/esm/workspace/SettingsDb.js.map +1 -1
  496. package/lib/esm/workspace/SettingsEditor.js.map +1 -1
  497. package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
  498. package/lib/esm/workspace/Workspace.js.map +1 -1
  499. package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
  500. package/package.json +13 -13
@@ -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"}
@@ -5,10 +5,46 @@
5
5
  *--------------------------------------------------------------------------------------------*/
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  exports.ECSqlRowExecutor = void 0;
8
+ exports.releaseECSqlStatement = releaseECSqlStatement;
8
9
  const core_common_1 = require("@itwin/core-common");
9
- const ECSqlStatement_1 = require("./ECSqlStatement");
10
10
  const core_bentley_1 = require("@itwin/core-bentley");
11
11
  const Symbols_1 = require("./internal/Symbols");
12
+ 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.";
13
+ function logStatementCleanupError(loggerCategory, message, error) {
14
+ try {
15
+ core_bentley_1.Logger.logTrace(loggerCategory, message, () => ({ error: core_bentley_1.BentleyError.getErrorMessage(error) }));
16
+ }
17
+ catch {
18
+ // Cleanup diagnostics must not replace the original query error.
19
+ }
20
+ }
21
+ /** Returns a statement to its cache, falling back to direct disposal without throwing.
22
+ * @internal
23
+ */
24
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
25
+ function releaseECSqlStatement(stmt, cache, loggerCategory, canCache) {
26
+ if (!canCache || !stmt.isPrepared) {
27
+ try {
28
+ stmt[Symbol.dispose]();
29
+ }
30
+ catch (error) {
31
+ logStatementCleanupError(loggerCategory, "Failed to dispose an ECSQL statement that could not be cached.", error);
32
+ }
33
+ return;
34
+ }
35
+ try {
36
+ cache.addOrDispose(stmt);
37
+ }
38
+ catch (error) {
39
+ try {
40
+ stmt[Symbol.dispose]();
41
+ }
42
+ catch (disposeError) {
43
+ logStatementCleanupError(loggerCategory, "Failed to dispose an ECSQL statement after it could not be returned to the statement cache.", disposeError);
44
+ }
45
+ logStatementCleanupError(loggerCategory, "Failed to return an ECSQL statement to the statement cache; attempted direct disposal instead.", error);
46
+ }
47
+ }
12
48
  // --------------------------------------------------------------------------------------------
13
49
  // ECSqlRowExecutor
14
50
  // --------------------------------------------------------------------------------------------
@@ -19,31 +55,45 @@ const Symbols_1 = require("./internal/Symbols");
19
55
  */
20
56
  class ECSqlRowExecutor {
21
57
  _db;
22
- // eslint-disable-next-line @typescript-eslint/no-deprecated
23
58
  _stmt;
59
+ _loggerCategory;
24
60
  _removeListener;
25
- constructor(_db) {
61
+ _isDisposed = false;
62
+ _canCacheStatement = true;
63
+ /** Whether the statement completed preparation and can be returned to its cache.
64
+ * @internal
65
+ */
66
+ get canCacheStatement() { return this._canCacheStatement; }
67
+ // eslint-disable-next-line @typescript-eslint/no-deprecated
68
+ constructor(_db, _stmt, _loggerCategory) {
26
69
  this._db = _db;
27
- // eslint-disable-next-line @typescript-eslint/no-deprecated
28
- this._stmt = new ECSqlStatement_1.ECSqlStatement();
70
+ this._stmt = _stmt;
71
+ this._loggerCategory = _loggerCategory;
29
72
  this._removeListener = this._db.onBeforeClose.addListener(() => this.cleanup());
30
73
  }
31
74
  // --------------------------------------------------------------------------------------------
32
75
  // Lifecycle
33
76
  // --------------------------------------------------------------------------------------------
34
- /** Disposes the current statement and resets all internal state.
35
- * Invoked when the db signals that the executor must be recycled.
77
+ /** Disposes the currently held statement without returning it to the cache.
78
+ * Invoked when the db signals it is closing (the statement cache is cleared on close, so the
79
+ * checked-out statement must be disposed directly to avoid a use-after-free or double dispose).
36
80
  * @internal
37
81
  */
38
82
  cleanup() {
39
- this._stmt[Symbol.dispose]();
83
+ this._isDisposed = true;
84
+ try {
85
+ this._stmt[Symbol.dispose]();
86
+ }
87
+ catch (error) {
88
+ logStatementCleanupError(this._loggerCategory, "Failed to dispose an ECSQL statement while closing its database.", error);
89
+ }
40
90
  }
41
- /** Call this function to dispose the row executor off.
91
+ /** Removes the database-close listener owned by this row executor.
42
92
  * @internal
43
93
  */
44
94
  [Symbol.dispose]() {
95
+ this._isDisposed = true;
45
96
  this._removeListener();
46
- this.cleanup();
47
97
  }
48
98
  // --------------------------------------------------------------------------------------------
49
99
  // Core execution
@@ -78,8 +128,8 @@ class ECSqlRowExecutor {
78
128
  * @internal
79
129
  */
80
130
  stepNextRow(options) {
81
- if (!this._stmt.isPrepared)
82
- throw new core_common_1.IModelError(core_bentley_1.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.");
131
+ if (this._isDisposed || !this._stmt.isPrepared)
132
+ throw new core_common_1.IModelError(core_bentley_1.DbResult.BE_SQLITE_ERROR, statementNotPreparedMessage);
83
133
  const stepResult = this._stmt.step();
84
134
  if (stepResult === core_bentley_1.DbResult.BE_SQLITE_ROW)
85
135
  return this._stmt.toRow(options).data;
@@ -94,27 +144,37 @@ class ECSqlRowExecutor {
94
144
  * @internal
95
145
  */
96
146
  fetchMetadata(options) {
147
+ if (this._isDisposed || !this._stmt.isPrepared)
148
+ throw new core_common_1.IModelError(core_bentley_1.DbResult.BE_SQLITE_ERROR, statementNotPreparedMessage);
97
149
  return this._stmt.getMetadata(options).properties;
98
150
  }
99
151
  // --------------------------------------------------------------------------------------------
100
152
  // Execution phases
101
153
  // --------------------------------------------------------------------------------------------
102
- /** Prepares the ECSql statement against the native database and records the elapsed preparation time.
154
+ /** Prepares the ECSql statement when the caller did not supply one from its cache.
103
155
  * @param ecsql - The ECSql text to prepare.
104
156
  * @returns An `OperationResult` indicating success or failure.
105
157
  * @internal
106
158
  */
107
159
  prepareStmt(ecsql) {
160
+ if (this._stmt.isPrepared)
161
+ return { isSuccessful: true };
108
162
  try {
109
163
  this._stmt.prepare(this._db[Symbols_1._nativeDb], ecsql);
110
164
  return { isSuccessful: true };
111
165
  }
112
166
  catch (error) {
167
+ this._canCacheStatement = false;
168
+ try {
169
+ this._stmt[Symbol.dispose]();
170
+ }
171
+ catch (disposeError) {
172
+ logStatementCleanupError(this._loggerCategory, "Failed to dispose an ECSQL statement after preparation failed.", disposeError);
173
+ }
113
174
  return { isSuccessful: false, message: error.message };
114
175
  }
115
176
  }
116
- /** Resets the statement and binds the given parameter values. Caches the arguments for later
117
- * comparison so that redundant rebinds can be skipped.
177
+ /** Binds the supplied parameter values to the prepared statement.
118
178
  * @param args - The parameter object to bind, or `undefined` when no parameters are needed.
119
179
  * @returns An `OperationResult` indicating success or failure.
120
180
  * @internal
@@ -123,6 +183,8 @@ class ECSqlRowExecutor {
123
183
  try {
124
184
  if (args === undefined)
125
185
  return { isSuccessful: true };
186
+ if (!this._stmt.isPrepared)
187
+ return { isSuccessful: false, message: statementNotPreparedMessage };
126
188
  this._stmt.bindParams(args);
127
189
  return { isSuccessful: true };
128
190
  }
@@ -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}"]}