@itwin/core-backend 5.5.0-dev.2 → 5.5.0-dev.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +19 -1
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BisCoreSchema.js.map +1 -1
- package/lib/cjs/BlobContainerService.js.map +1 -1
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.js +2 -2
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +248 -248
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.js +5 -5
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/EntityReferences.js.map +1 -1
- package/lib/cjs/ExportGraphics.js.map +1 -1
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/FontFile.js.map +1 -1
- package/lib/cjs/GeoCoordConfig.js.map +1 -1
- package/lib/cjs/GeographicCRSServices.js.map +1 -1
- package/lib/cjs/GeometrySummary.js +47 -47
- package/lib/cjs/GeometrySummary.js.map +1 -1
- package/lib/cjs/IModelDb.js +8 -8
- package/lib/cjs/IModelDb.js.map +1 -1
- package/lib/cjs/IModelDbFonts.js.map +1 -1
- package/lib/cjs/IModelElementCloneContext.js.map +1 -1
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/cjs/IModelJsFs.js.map +1 -1
- package/lib/cjs/ImageSourceConversion.js.map +1 -1
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.js +1 -1
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/LockControl.js.map +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeAppStorage.js.map +1 -1
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/RpcBackend.js.map +1 -1
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/Schema.js.map +1 -1
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SchemaUtils.js.map +1 -1
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/StashManager.js.map +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
- package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
- package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/domains/GenericSchema.js.map +1 -1
- package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/OnlineStatus.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/cjs/rpc/multipart.js.map +1 -1
- package/lib/cjs/rpc/tracing.js.map +1 -1
- package/lib/cjs/rpc/web/logging.js.map +1 -1
- package/lib/cjs/rpc/web/request.js.map +1 -1
- package/lib/cjs/rpc/web/response.js.map +1 -1
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BackendLoggerCategory.js.map +1 -1
- package/lib/esm/BisCoreSchema.js.map +1 -1
- package/lib/esm/BlobContainerService.js.map +1 -1
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangeSummaryManager.js +2 -2
- package/lib/esm/ChangeSummaryManager.js.map +1 -1
- package/lib/esm/ChangedElementsDb.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +248 -248
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.js +5 -5
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeService.js.map +1 -1
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/CustomViewState3dCreator.js.map +1 -1
- package/lib/esm/DevTools.js.map +1 -1
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementGraphics.js.map +1 -1
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/EntityReferences.js.map +1 -1
- package/lib/esm/ExportGraphics.js.map +1 -1
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/FontFile.js.map +1 -1
- package/lib/esm/GeoCoordConfig.js.map +1 -1
- package/lib/esm/GeographicCRSServices.js.map +1 -1
- package/lib/esm/GeometrySummary.js +47 -47
- package/lib/esm/GeometrySummary.js.map +1 -1
- package/lib/esm/IModelDb.js +8 -8
- package/lib/esm/IModelDb.js.map +1 -1
- package/lib/esm/IModelDbFonts.js.map +1 -1
- package/lib/esm/IModelElementCloneContext.js.map +1 -1
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/esm/IModelJsFs.js.map +1 -1
- package/lib/esm/ImageSourceConversion.js.map +1 -1
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.js +1 -1
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/LocalhostIpcHost.js.map +1 -1
- package/lib/esm/LockControl.js.map +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/NativeAppStorage.js.map +1 -1
- package/lib/esm/NativeHost.js.map +1 -1
- package/lib/esm/NavigationRelationship.js.map +1 -1
- package/lib/esm/PromiseMemoizer.js.map +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/RpcBackend.js.map +1 -1
- package/lib/esm/SQLiteDb.js.map +1 -1
- package/lib/esm/Schema.js.map +1 -1
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SchemaUtils.js.map +1 -1
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/SqliteChangesetReader.js.map +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/StashManager.js.map +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/FunctionalSchema.js.map +1 -1
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/domains/GenericSchema.js.map +1 -1
- package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/OnlineStatus.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/esm/rpc/multipart.js.map +1 -1
- package/lib/esm/rpc/tracing.js.map +1 -1
- package/lib/esm/rpc/web/logging.js.map +1 -1
- package/lib/esm/rpc/web/request.js.map +1 -1
- package/lib/esm/rpc/web/response.js.map +1 -1
- package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/test/AdvancedEqual.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
- package/lib/esm/test/AttachDb.test.js +11 -11
- package/lib/esm/test/AttachDb.test.js.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.js +23 -23
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/GeometryTestUtil.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
- package/lib/esm/test/IpcHost.test.js.map +1 -1
- package/lib/esm/test/KnownTestLocations.js.map +1 -1
- package/lib/esm/test/PrintElementTree.js.map +1 -1
- package/lib/esm/test/PropertyDb.test.js.map +1 -1
- package/lib/esm/test/RevisionUtility.js.map +1 -1
- package/lib/esm/test/SchemaUtils.test.js +25 -25
- package/lib/esm/test/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +53 -53
- package/lib/esm/test/annotations/Fields.test.js.map +1 -1
- package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js +5 -5
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
- package/lib/esm/test/categories/Category.test.js.map +1 -1
- package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
- package/lib/esm/test/ecdb/CTE.test.js +88 -88
- package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +72 -72
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
- package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
- package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +22 -22
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +13 -13
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/FontFile.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js +40 -40
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/imageData.js.map +1 -1
- package/lib/esm/test/imodel/Code.test.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +44 -44
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js +432 -198
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js +272 -190
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/TestContext.d.ts +27 -0
- package/lib/esm/test/incrementalSchemaLocater/TestContext.d.ts.map +1 -0
- package/lib/esm/test/incrementalSchemaLocater/TestContext.js +136 -0
- package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -0
- package/lib/esm/test/index.js.map +1 -1
- package/lib/esm/test/misc/DevTools.test.js.map +1 -1
- package/lib/esm/test/misc/EntitySubClasses.test.js.map +1 -1
- package/lib/esm/test/misc/GeoServices.test.js.map +1 -1
- package/lib/esm/test/misc/PromiseMemoizer.test.js.map +1 -1
- package/lib/esm/test/native/DgnDbWorker.test.js.map +1 -1
- package/lib/esm/test/rpc/response.test.js.map +1 -1
- package/lib/esm/test/schema/ClassRegistry.test.js +99 -99
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +346 -127
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
- package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Setting.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +14 -14
- package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.d.ts +0 -11
- package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.d.ts.map +0 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js +0 -36
- package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +0 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.d.ts +0 -20
- package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.d.ts.map +0 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js +0 -126
- package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +0 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts +0 -24
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts.map +0 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js +0 -67
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js.map +0 -1
package/lib/cjs/IModelDb.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IModelDb.js","sourceRoot":"","sources":["../../src/IModelDb.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/** @packageDocumentation\n * @module iModels\n */\n\nimport * as fs from \"fs\";\nimport { join } from \"path\";\nimport * as touch from \"touch\";\nimport { IModelJsNative, SchemaWriteStatus } from \"@bentley/imodeljs-native\";\nimport {\n AccessToken, assert, BeEvent, BentleyStatus, ChangeSetStatus, DbChangeStage, DbConflictCause, DbConflictResolution, DbResult,\n Guid, GuidString, Id64, Id64Arg, Id64Array, Id64Set, Id64String, IModelStatus, JsonUtils, Logger, LogLevel, LRUMap, OpenMode\n} from \"@itwin/core-bentley\";\nimport {\n AxisAlignedBox3d, BRepGeometryCreate, BriefcaseId, BriefcaseIdValue, CategorySelectorProps, ChangesetHealthStats, ChangesetIdWithIndex, ChangesetIndexAndId, Code,\n CodeProps, CreateEmptySnapshotIModelProps, CreateEmptyStandaloneIModelProps, CreateSnapshotIModelProps, DbQueryRequest, DisplayStyleProps,\n DomainOptions, EcefLocation, ECJsNames, ECSchemaProps, ECSqlReader, ElementAspectProps, ElementGeometryCacheOperationRequestProps, ElementGeometryCacheRequestProps, ElementGeometryCacheResponseProps, ElementGeometryRequest, ElementGraphicsRequestProps, ElementLoadProps, ElementProps, EntityMetaData, EntityProps, EntityQueryParams, FilePropertyProps, FontMap,\n GeoCoordinatesRequestProps, GeoCoordinatesResponseProps, GeometryContainmentRequestProps, GeometryContainmentResponseProps, IModel,\n IModelCoordinatesRequestProps, IModelCoordinatesResponseProps, IModelError, IModelNotFoundResponse, IModelTileTreeProps, LocalFileName,\n MassPropertiesRequestProps, MassPropertiesResponseProps, ModelExtentsProps, ModelLoadProps, ModelProps, ModelSelectorProps, OpenBriefcaseProps,\n OpenCheckpointArgs, OpenSqliteArgs, ProfileOptions, PropertyCallback, QueryBinder, QueryOptions, QueryRowFormat, SchemaState,\n SheetProps, SnapRequestProps, SnapResponseProps, SnapshotOpenOptions, SpatialViewDefinitionProps, SubCategoryResultRow, TextureData,\n TextureLoadProps, ThumbnailProps, UpgradeOptions, ViewDefinition2dProps, ViewDefinitionProps, ViewIdString, ViewQueryParams, ViewStateLoadProps,\n ViewStateProps, ViewStoreError, ViewStoreRpc\n} from \"@itwin/core-common\";\nimport { Range2d, Range3d } from \"@itwin/core-geometry\";\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\nimport { BriefcaseManager, PullChangesArgs, PushChangesArgs, RevertChangesArgs } from \"./BriefcaseManager\";\nimport { ChannelControl } from \"./ChannelControl\";\nimport { createChannelControl } from \"./internal/ChannelAdmin\";\nimport { CheckpointManager, CheckpointProps, V2CheckpointManager } from \"./CheckpointManager\";\nimport { ClassRegistry, EntityJsClassMap, MetaDataRegistry } from \"./ClassRegistry\";\nimport { CloudSqlite } from \"./CloudSqlite\";\nimport { CodeService } from \"./CodeService\";\nimport { CodeSpecs } from \"./CodeSpecs\";\nimport { ConcurrentQuery } from \"./ConcurrentQuery\";\nimport { ECSchemaXmlContext } from \"./ECSchemaXmlContext\";\nimport { ECSqlStatement } from \"./ECSqlStatement\";\nimport { Element, SectionDrawing, Subject } from \"./Element\";\nimport { ElementAspect } from \"./ElementAspect\";\nimport { generateElementGraphics } from \"./ElementGraphics\";\nimport { ECSqlRow, Entity, EntityClassType } from \"./Entity\";\nimport { ExportGraphicsOptions, ExportPartGraphicsOptions } from \"./ExportGraphics\";\nimport { GeoCoordConfig } from \"./GeoCoordConfig\";\nimport { IModelHost } from \"./IModelHost\";\nimport { IModelJsFs } from \"./IModelJsFs\";\nimport { IpcHost } from \"./IpcHost\";\nimport { Model } from \"./Model\";\nimport { Relationships } from \"./Relationship\";\nimport { SchemaSync } from \"./SchemaSync\";\nimport { createServerBasedLocks } from \"./internal/ServerBasedLocks\";\nimport { SqliteStatement, StatementCache } from \"./SqliteStatement\";\nimport { ComputeRangesForTextLayoutArgs, TextLayoutRanges } from \"./annotations/TextBlockLayout\";\nimport { TxnManager } from \"./TxnManager\";\nimport { DrawingViewDefinition, SheetViewDefinition, ViewDefinition } from \"./ViewDefinition\";\nimport { ViewStore } from \"./ViewStore\";\nimport { Setting, SettingsContainer, SettingsDictionary, SettingsPriority } from \"./workspace/Settings\";\nimport { Workspace, WorkspaceDbLoadError, WorkspaceDbLoadErrors, WorkspaceDbSettingsProps, WorkspaceSettingNames } from \"./workspace/Workspace\";\nimport { constructWorkspace, OwnedWorkspace, throwWorkspaceDbLoadErrors } from \"./internal/workspace/WorkspaceImpl\";\nimport { SettingsImpl } from \"./internal/workspace/SettingsImpl\";\nimport { DbMergeChangesetConflictArgs } from \"./internal/ChangesetConflictArgs\";\nimport { LockControl } from \"./LockControl\";\nimport { IModelNative } from \"./internal/NativePlatform\";\nimport type { BlobContainer } from \"./BlobContainerService\";\nimport { createNoOpLockControl } from \"./internal/NoLocks\";\nimport { IModelDbFonts } from \"./IModelDbFonts\";\nimport { createIModelDbFonts } from \"./internal/IModelDbFontsImpl\";\nimport { _cache, _close, _hubAccess, _instanceKeyCache, _nativeDb, _releaseAllLocks, _resetIModelDb } from \"./internal/Symbols\";\nimport { ECVersion, SchemaContext, SchemaJsonLocater } from \"@itwin/ecschema-metadata\";\nimport { SchemaMap } from \"./Schema\";\nimport { ElementLRUCache, InstanceKeyLRUCache } from \"./internal/ElementLRUCache\";\nimport { IModelIncrementalSchemaLocater } from \"./IModelIncrementalSchemaLocater\";\n// spell:ignore fontid fontmap\n\nconst loggerCategory: string = BackendLoggerCategory.IModelDb;\n\n/**\n * Arguments for saving changes to the iModel.\n * @alpha\n */\nexport interface SaveChangesArgs {\n /**\n * Optional description of the changes being saved.\n */\n description?: string;\n /**\n * Optional source of the changes being saved.\n */\n source?: string;\n /**\n * Optional application-specific data to include with the changes.\n */\n appData?: { [key: string]: any };\n}\n\n/** Options for [[IModelDb.Models.updateModel]]\n * @note To mark *only* the geometry as changed, use [[IModelDb.Models.updateGeometryGuid]] instead.\n * @public\n */\nexport interface UpdateModelOptions extends ModelProps {\n /** If defined, update the last modify time of the Model */\n updateLastMod?: boolean;\n /** If defined, update the GeometryGuid of the Model */\n geometryChanged?: boolean;\n}\n\n/** Options supposed to [[IModelDb.Elements.insertElement]].\n * @public\n */\nexport interface InsertElementOptions {\n /** If true, instead of assigning a new, unique Id to the inserted element, the inserted element will use the Id specified by the supplied [ElementProps]($common).\n * This is chiefly useful when applying a filtering transformation - i.e., copying some elements from a source iModel to a target iModel and adding no new elements.\n * If this option is `true` then [ElementProps.id]($common) must be a valid Id that is not already used by an element in the iModel.\n * @beta\n */\n forceUseId?: boolean;\n}\n\n/** Options supplied to [[IModelDb.computeProjectExtents]].\n * @public\n */\nexport interface ComputeProjectExtentsOptions {\n /** If true, the result will include `extentsWithOutliers`. */\n reportExtentsWithOutliers?: boolean;\n /** If true, the result will include `outliers`. */\n reportOutliers?: boolean;\n}\n\n/** The result of [[IModelDb.computeProjectExtents]].\n * @public\n */\nexport interface ComputedProjectExtents {\n /** The computed extents, excluding any outlier elements. */\n extents: Range3d;\n /** If requested by caller, the computed extents, *including* any outlier elements. */\n extentsWithOutliers?: Range3d;\n /** If requested by caller, the Ids of outlier elements excluded from the computed extents. */\n outliers?: Id64Array;\n}\n\n/**\n * Options for the importing of schemas\n * @public\n */\nexport interface SchemaImportOptions {\n /**\n * An [[ECSchemaXmlContext]] to use instead of building a default one.\n * This can be useful in rare cases where custom schema location logic is necessary\n * @internal\n */\n ecSchemaXmlContext?: ECSchemaXmlContext;\n}\n\n/** @internal */\nexport enum BriefcaseLocalValue {\n StandaloneEdit = \"StandaloneEdit\",\n NoLocking = \"NoLocking\"\n}\n\n// function to open an briefcaseDb, perform an operation, and then close it.\nconst withBriefcaseDb = async (briefcase: OpenBriefcaseArgs, fn: (_db: BriefcaseDb) => Promise<any>) => {\n const db = await BriefcaseDb.open(briefcase);\n try {\n return await fn(db);\n } finally {\n db.close();\n }\n};\n\n/**\n * Settings for an individual iModel. May only include settings priority for iModel, iTwin and organization.\n * @note if there is more than one iModel for an iTwin or organization, they will *each* hold an independent copy of the settings for those priorities.\n */\nclass IModelSettings extends SettingsImpl {\n protected override verifyPriority(priority: SettingsPriority) {\n if (priority <= SettingsPriority.application)\n throw new Error(\"Use IModelHost.appSettings to access settings of priority 'application' or lower\");\n }\n\n public override * getSettingEntries<T extends Setting>(name: string): Iterable<{ value: T, dictionary: SettingsDictionary }> {\n yield* super.getSettingEntries(name);\n yield* IModelHost.appWorkspace.settings.getSettingEntries(name);\n }\n}\n\n/** Arguments supplied to [[IModelDb.exportSchema]] specifying which ECSchema to write to what location on the local file system.\n * @beta\n */\nexport interface ExportSchemaArgs {\n /** The name of the ECSchema to export. */\n schemaName: string;\n /** The directory in which to place the created schema file. */\n outputDirectory: LocalFileName;\n /** Optionally, the name of the file to create in [[outputDirectory]].\n * Defaults to <SchemaName>.<SchemaVersion>.ecschema.xml\n */\n outputFileName?: string;\n}\n\n/** Arguments supplied to [[IModelDb.simplifyElementGeometry]].\n * @beta\n */\nexport interface SimplifyElementGeometryArgs {\n /** The Id of the [[GeometricElement]] or [[GeometryPart]] whose geometry is to be simplified. */\n id: Id64String;\n /** If true, simplify by converting each [BRepEntity]($common) in the element's geometry stream to a high-resolution\n * mesh or curve geometry.\n */\n convertBReps?: boolean;\n}\n\n/** The output of [[IModelDb.inlineGeometryParts]].\n * If [[numCandidateParts]], [[numRefsInlined]], and [[numPartsDeleted ]] are all the same, the operation was fully successful.\n * Otherwise, some errors occurred inlining and/or deleting one or more parts.\n * A part will not be deleted unless it is first successfully inlined.\n * @beta\n */\nexport interface InlineGeometryPartsResult {\n /** The number of parts that were determined to have exactly one reference, making them candidates for inlining. */\n numCandidateParts: number;\n /** The number of part references successfully inlined. */\n numRefsInlined: number;\n /** The number of candidate parts that were successfully deleted after inlining. */\n numPartsDeleted: number;\n}\n\n/** An iModel database file. The database file can either be a briefcase or a snapshot.\n * @see [Accessing iModels]($docs/learning/backend/AccessingIModels.md)\n * @see [About IModelDb]($docs/learning/backend/IModelDb.md)\n * @public\n */\nexport abstract class IModelDb extends IModel {\n private _initialized = false;\n /** Keep track of open imodels to support `tryFind` for RPC purposes */\n private static readonly _openDbs = new Map<string, IModelDb>();\n\n public static readonly defaultLimit = 1000; // default limit for batching queries\n public static readonly maxLimit = 10000; // maximum limit for batching queries\n public readonly models = new IModelDb.Models(this);\n public readonly elements = new IModelDb.Elements(this);\n public readonly views = new IModelDb.Views(this);\n public readonly tiles = new IModelDb.Tiles(this);\n /** @beta */\n public readonly channels: ChannelControl = createChannelControl(this);\n private _relationships?: Relationships;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n private readonly _statementCache = new StatementCache<ECSqlStatement>();\n private readonly _sqliteStatementCache = new StatementCache<SqliteStatement>();\n private _codeSpecs?: CodeSpecs;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n private _classMetaDataRegistry?: MetaDataRegistry;\n private _jsClassMap?: EntityJsClassMap;\n private _schemaMap?: SchemaMap;\n private _schemaContext?: SchemaContext;\n /** @deprecated in 5.0.0 - will not be removed until after 2026-06-13. Use [[fonts]]. */\n protected _fontMap?: FontMap; // eslint-disable-line @typescript-eslint/no-deprecated\n private readonly _fonts: IModelDbFonts = createIModelDbFonts(this);\n private _workspace?: OwnedWorkspace;\n\n private readonly _snaps = new Map<string, IModelJsNative.SnapRequest>();\n private static _shutdownListener: VoidFunction | undefined; // so we only register listener once\n /** @internal */\n protected _locks?: LockControl = createNoOpLockControl();\n\n /** @internal */\n protected _codeService?: CodeService;\n\n /** @alpha */\n public get codeService() { return this._codeService; }\n\n /** The [[LockControl]] that orchestrates [concurrent editing]($docs/learning/backend/ConcurrencyControl.md) of this iModel. */\n public get locks(): LockControl { return this._locks!; } // eslint-disable-line @typescript-eslint/no-non-null-assertion\n\n /** Provides methods for interacting with [font-related information]($docs/learning/backend/Fonts.md) stored in this iModel.\n * @beta\n */\n public get fonts(): IModelDbFonts { return this._fonts; }\n\n /**\n * Get the [[Workspace]] for this iModel.\n * @beta\n */\n public get workspace(): Workspace {\n if (undefined === this._workspace)\n this._workspace = constructWorkspace(new IModelSettings());\n\n return this._workspace;\n }\n\n /**\n * get the cloud container for this iModel, if it was opened from one\n * @beta\n */\n public get cloudContainer(): CloudSqlite.CloudContainer | undefined {\n return this[_nativeDb].cloudContainer;\n }\n\n /** Acquire the exclusive schema lock on this iModel.\n * @note: To acquire the schema lock, all other briefcases must first release *all* their locks. No other briefcases\n * will be able to acquire *any* locks while the schema lock is held.\n */\n public async acquireSchemaLock(): Promise<void> {\n return this.locks.acquireLocks({ exclusive: IModel.repositoryModelId });\n }\n /** determine whether the schema lock is currently held for this iModel. */\n public get holdsSchemaLock() {\n return this.locks.holdsExclusiveLock(IModel.repositoryModelId);\n }\n\n /** Event called after a changeset is applied to this IModelDb. */\n public readonly onChangesetApplied = new BeEvent<() => void>();\n /** @internal */\n public notifyChangesetApplied() {\n this.changeset = this[_nativeDb].getCurrentChangeset();\n this.onChangesetApplied.raiseEvent();\n }\n\n /** @internal */\n public restartDefaultTxn() {\n this[_nativeDb].restartDefaultTxn();\n }\n\n /** @deprecated in 5.0.0 - will not be removed until after 2026-06-13. Use [[fonts]]. */\n public get fontMap(): FontMap { // eslint-disable-line @typescript-eslint/no-deprecated\n return this._fontMap ?? (this._fontMap = new FontMap(this[_nativeDb].readFontMap())); // eslint-disable-line @typescript-eslint/no-deprecated\n }\n\n /** @internal */\n public clearFontMap(): void {\n this._fontMap = undefined; // eslint-disable-line @typescript-eslint/no-deprecated\n this[_nativeDb].invalidateFontMap();\n }\n\n /** Check if this iModel has been opened read-only or not. */\n public get isReadonly(): boolean { return this.openMode === OpenMode.Readonly; }\n\n /** The Guid that identifies this iModel. */\n public override get iModelId(): GuidString {\n assert(undefined !== super.iModelId);\n return super.iModelId;\n } // GuidString | undefined for the IModel superclass, but required for all IModelDb subclasses\n\n /** @internal*/\n public readonly [_nativeDb]: IModelJsNative.DgnDb;\n\n /** Get the full path fileName of this iModelDb\n * @note this member is only valid while the iModel is opened.\n */\n public get pathName(): LocalFileName { return this[_nativeDb].getFilePath(); }\n\n /** Get the full path to this iModel's \"watch file\".\n * A read-only briefcase opened with `watchForChanges: true` creates this file next to the briefcase file on open, if it doesn't already exist.\n * A writable briefcase \"touches\" this file if it exists whenever it commits changes to the briefcase.\n * The read-only briefcase can use a file watcher to react when the writable briefcase makes changes to the briefcase.\n * This is more reliable than watching the sqlite WAL file.\n * @internal\n */\n public get watchFilePathName(): LocalFileName { return `${this.pathName}-watch`; }\n\n /** @internal */\n protected constructor(args: { nativeDb: IModelJsNative.DgnDb, key: string, changeset?: ChangesetIdWithIndex }) {\n super({ ...args, iTwinId: args.nativeDb.getITwinId(), iModelId: args.nativeDb.getIModelId() });\n this[_nativeDb] = args.nativeDb;\n\n // it is illegal to create an IModelDb unless the nativeDb has been opened. Throw otherwise.\n if (!this.isOpen)\n throw new Error(\"cannot create an IModelDb unless it has already been opened\");\n\n // PR https://github.com/iTwin/imodel-native/pull/558 renamed closeIModel to closeFile because it changed its behavior.\n // Ideally, nobody outside of core-backend would be calling it, but somebody important is.\n // Make closeIModel available so their code doesn't break.\n (this[_nativeDb] as any).closeIModel = () => {\n if (!this.isReadonly)\n this.saveChanges(); // preserve old behavior of closeIModel that was removed when renamed to closeFile\n\n this[_nativeDb].closeFile();\n };\n\n this[_nativeDb].setIModelDb(this);\n\n this[_resetIModelDb]();\n IModelDb._openDbs.set(this._fileKey, this);\n\n if (undefined === IModelDb._shutdownListener) { // the first time we create an IModelDb, add a listener to close any orphan files at shutdown.\n IModelDb._shutdownListener = IModelHost.onBeforeShutdown.addListener(() => {\n IModelDb._openDbs.forEach((db) => { // N.B.: db.close() removes from _openedDbs\n try {\n db.abandonChanges();\n db.close();\n } catch { }\n });\n });\n }\n }\n\n /** @internal */\n public [_resetIModelDb]() {\n this.loadIModelSettings();\n GeoCoordConfig.loadForImodel(this.workspace.settings); // load gcs data specified by iModel's settings dictionaries, must be done before calling initializeIModelDb\n this.initializeIModelDb();\n }\n\n /**\n * Attach an iModel file to this connection and load and register its schemas.\n * @note There are some reserve tablespace names that cannot be used. They are 'main', 'schema_sync_db', 'ecchange' & 'temp'\n * @param fileName IModel file name\n * @param alias identifier for the attached file. This identifier is used to access schema from the attached file. e.g. if alias is 'abc' then schema can be accessed using 'abc.MySchema.MyClass'\n *\n * *Example:*\n * ``` ts\n * [[include:IModelDb_attachDb.code]]\n * ```\n */\n public attachDb(fileName: string, alias: string): void {\n if (alias.toLowerCase() === \"main\" || alias.toLowerCase() === \"schema_sync_db\" || alias.toLowerCase() === \"ecchange\" || alias.toLowerCase() === \"temp\") {\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Reserved tablespace name cannot be used\");\n }\n this[_nativeDb].attachDb(fileName, alias);\n }\n /**\n * Detach the attached file from this connection. The attached file is closed and its schemas are unregistered.\n * @note There are some reserve tablespace names that cannot be used. They are 'main', 'schema_sync_db', 'ecchange' & 'temp'\n * @param alias identifer that was used in the call to [[attachDb]]\n *\n * *Example:*\n * ``` ts\n * [[include:IModelDb_attachDb.code]]\n * ```\n */\n public detachDb(alias: string): void {\n if (alias.toLowerCase() === \"main\" || alias.toLowerCase() === \"schema_sync_db\" || alias.toLowerCase() === \"ecchange\" || alias.toLowerCase() === \"temp\") {\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Reserved tablespace name cannot be used\");\n }\n this.clearCaches();\n this[_nativeDb].detachDb(alias);\n }\n /** Close this IModel, if it is currently open, and save changes if it was opened in ReadWrite mode. */\n public close(): void {\n if (!this.isOpen)\n return; // don't continue if already closed\n\n this.beforeClose();\n IModelDb._openDbs.delete(this._fileKey);\n this._workspace?.close();\n this.locks[_close]();\n this._locks = undefined;\n this._codeService?.close();\n this._codeService = undefined;\n if (!this.isReadonly)\n this.saveChanges();\n this[_nativeDb].closeFile();\n }\n\n /** @internal */\n public async refreshContainerForRpc(_userAccessToken: AccessToken): Promise<void> { }\n\n /** Event called when the iModel is about to be closed. */\n public readonly onBeforeClose = new BeEvent<() => void>();\n\n /**\n * Called by derived classes before closing the connection\n * @internal\n */\n protected beforeClose() {\n this.onBeforeClose.raiseEvent();\n this.clearCaches();\n }\n\n /** @internal */\n protected initializeIModelDb(when?: \"pullMerge\") {\n const props = this[_nativeDb].getIModelProps(when);\n super.initialize(props.rootSubject.name, props);\n if (this._initialized)\n return;\n\n this._initialized = true;\n const db = this.isBriefcaseDb() ? this : undefined;\n if (!db || !IpcHost.isValid)\n return;\n\n db.onNameChanged.addListener(() => IpcHost.notifyTxns(db, \"notifyIModelNameChanged\", db.name));\n db.onRootSubjectChanged.addListener(() => IpcHost.notifyTxns(db, \"notifyRootSubjectChanged\", db.rootSubject));\n\n db.onProjectExtentsChanged.addListener(() => IpcHost.notifyTxns(db, \"notifyProjectExtentsChanged\", db.projectExtents.toJSON()));\n db.onGlobalOriginChanged.addListener(() => IpcHost.notifyTxns(db, \"notifyGlobalOriginChanged\", db.globalOrigin.toJSON()));\n db.onEcefLocationChanged.addListener(() => IpcHost.notifyTxns(db, \"notifyEcefLocationChanged\", db.ecefLocation?.toJSON()));\n db.onGeographicCoordinateSystemChanged.addListener(() => IpcHost.notifyTxns(db, \"notifyGeographicCoordinateSystemChanged\", db.geographicCoordinateSystem?.toJSON()));\n }\n\n /** Returns true if this is a BriefcaseDb\n * @see [[BriefcaseDb.open]]\n */\n public get isBriefcase(): boolean { return false; }\n /** Type guard for instanceof [[BriefcaseDb]] */\n public isBriefcaseDb(): this is BriefcaseDb { return this.isBriefcase; }\n\n /** Returns true if this is a SnapshotDb\n * @see [[SnapshotDb.open]]\n */\n public get isSnapshot(): boolean { return false; }\n /** Type guard for instanceof [[SnapshotDb]] */\n public isSnapshotDb(): this is SnapshotDb { return this.isSnapshot; }\n\n /** Returns true if this is a *standalone* iModel\n * @see [[StandaloneDb.open]]\n * @internal\n */\n public get isStandalone(): boolean { return false; }\n /** Type guard for instanceof [[StandaloneDb]]. */\n public isStandaloneDb(): this is StandaloneDb { return this.isStandalone; }\n\n /** Return `true` if the underlying nativeDb is open and valid.\n * @internal\n */\n public get isOpen(): boolean { return this[_nativeDb].isOpen(); }\n\n /** Get the briefcase Id of this iModel */\n public getBriefcaseId(): BriefcaseId { return this.isOpen ? this[_nativeDb].getBriefcaseId() : BriefcaseIdValue.Illegal; }\n\n /**\n * Use a prepared ECSQL statement, potentially from the statement cache. If the requested statement doesn't exist\n * in the statement cache, a new statement is prepared. After the callback completes, the statement is reset and saved\n * in the statement cache so it can be reused in the future. Use this method for ECSQL statements that will be\n * reused often and are expensive to prepare. The statement cache holds the most recently used statements, discarding\n * the oldest statements as it fills. For statements you don't intend to reuse, instead use [[withStatement]].\n * @param sql The SQLite SQL statement to execute\n * @param callback the callback to invoke on the prepared statement\n * @param logErrors Determines if error will be logged if statement fail to prepare\n * @returns the value returned by `callback`.\n * @see [[withStatement]]\n * @public\n * @deprecated in 4.11 - will not be removed until after 2026-06-13. Use [[createQueryReader]] instead.\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public withPreparedStatement<T>(ecsql: string, callback: (stmt: ECSqlStatement) => T, logErrors = true): T {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const stmt = this._statementCache.findAndRemove(ecsql) ?? this.prepareStatement(ecsql, logErrors);\n const release = () => this._statementCache.addOrDispose(stmt);\n try {\n const val = callback(stmt);\n if (val instanceof Promise) {\n val.then(release, release);\n } else {\n release();\n }\n return val;\n } catch (err: any) {\n release();\n throw err;\n }\n }\n\n /**\n * Prepared and execute a callback on an ECSQL statement. After the callback completes the statement is disposed.\n * Use this method for ECSQL statements are either not expected to be reused, or are not expensive to prepare.\n * For statements that will be reused often, instead use [[withPreparedStatement]].\n * @param sql The SQLite SQL statement to execute\n * @param callback the callback to invoke on the prepared statement\n * @param logErrors Determines if error will be logged if statement fail to prepare\n * @returns the value returned by `callback`.\n * @see [[withPreparedStatement]]\n * @public\n * @deprecated in 4.11 - will not be removed until after 2026-06-13. Use [[createQueryReader]] instead.\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public withStatement<T>(ecsql: string, callback: (stmt: ECSqlStatement) => T, logErrors = true): T {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const stmt = this.prepareStatement(ecsql, logErrors);\n const release = () => stmt[Symbol.dispose]();\n try {\n const val = callback(stmt);\n if (val instanceof Promise) {\n val.then(release, release);\n } else {\n release();\n }\n return val;\n } catch (err: any) {\n release();\n throw err;\n }\n }\n /** Allow to execute query and read results along with meta data. The result are streamed.\n *\n * See also:\n * - [ECSQL Overview]($docs/learning/backend/ExecutingECSQL)\n * - [Code Examples]($docs/learning/backend/ECSQLCodeExamples)\n * - [ECSQL Row Format]($docs/learning/ECSQLRowFormat)\n *\n * @param params The values to bind to the parameters (if the ECSQL has any).\n * @param config Allow to specify certain flags which control how query is executed.\n * @returns Returns an [ECSqlReader]($common) which helps iterate over the result set and also give access to metadata.\n * @public\n * */\n public createQueryReader(ecsql: string, params?: QueryBinder, config?: QueryOptions): ECSqlReader {\n if (!this[_nativeDb].isOpen())\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"db not open\");\n\n const executor = {\n execute: async (request: DbQueryRequest) => {\n return ConcurrentQuery.executeQueryRequest(this[_nativeDb], request);\n },\n };\n return new ECSqlReader(executor, ecsql, params, config);\n }\n\n /**\n * Use a prepared SQL statement, potentially from the statement cache. If the requested statement doesn't exist\n * in the statement cache, a new statement is prepared. After the callback completes, the statement is reset and saved\n * in the statement cache so it can be reused in the future. Use this method for SQL statements that will be\n * reused often and are expensive to prepare. The statement cache holds the most recently used statements, discarding\n * the oldest statements as it fills. For statements you don't intend to reuse, instead use [[withSqliteStatement]].\n * @param sql The SQLite SQL statement to execute\n * @param callback the callback to invoke on the prepared statement\n * @param logErrors Determine if errors are logged or not\n * @returns the value returned by `callback`.\n * @see [[withPreparedStatement]]\n * @public\n */\n public withPreparedSqliteStatement<T>(sql: string, callback: (stmt: SqliteStatement) => T, logErrors = true): T {\n const stmt = this._sqliteStatementCache.findAndRemove(sql) ?? this.prepareSqliteStatement(sql, logErrors);\n const release = () => this._sqliteStatementCache.addOrDispose(stmt);\n try {\n const val: T = callback(stmt);\n if (val instanceof Promise) {\n val.then(release, release);\n } else {\n release();\n }\n return val;\n } catch (err: any) {\n release();\n throw err;\n }\n }\n\n /**\n * Prepared and execute a callback on a SQL statement. After the callback completes the statement is disposed.\n * Use this method for SQL statements are either not expected to be reused, or are not expensive to prepare.\n * For statements that will be reused often, instead use [[withPreparedSqliteStatement]].\n * @param sql The SQLite SQL statement to execute\n * @param callback the callback to invoke on the prepared statement\n * @param logErrors Determine if errors are logged or not\n * @returns the value returned by `callback`.\n * @public\n */\n public withSqliteStatement<T>(sql: string, callback: (stmt: SqliteStatement) => T, logErrors = true): T {\n const stmt = this.prepareSqliteStatement(sql, logErrors);\n const release = () => stmt[Symbol.dispose]();\n try {\n const val: T = callback(stmt);\n if (val instanceof Promise) {\n val.then(release, release);\n } else {\n release();\n }\n return val;\n } catch (err: any) {\n release();\n throw err;\n }\n }\n\n /** Prepare an SQL statement.\n * @param sql The SQL statement to prepare\n * @throws [[IModelError]] if there is a problem preparing the statement.\n * @internal\n */\n public prepareSqliteStatement(sql: string, logErrors = true): SqliteStatement {\n const stmt = new SqliteStatement(sql);\n stmt.prepare(this[_nativeDb], logErrors);\n return stmt;\n }\n\n /**\n * queries the BisCore.SubCategory table for entries that are children of used spatial categories and 3D elements.\n * @returns array of SubCategoryResultRow\n * @internal\n */\n public async queryAllUsedSpatialSubCategories(): Promise<SubCategoryResultRow[]> {\n const result: SubCategoryResultRow[] = [];\n const parentCategoriesQuery = `SELECT DISTINCT Category.Id AS id FROM BisCore.GeometricElement3d WHERE Category.Id IN (SELECT ECInstanceId FROM BisCore.SpatialCategory)`;\n const parentCategories: Id64Array = [];\n for await (const row of this.createQueryReader(parentCategoriesQuery)) {\n parentCategories.push(row.id);\n };\n const where = [...parentCategories].join(\",\");\n const query = `SELECT ECInstanceId as id, Parent.Id as parentId, Properties as appearance FROM BisCore.SubCategory WHERE Parent.Id IN (${where})`;\n\n try {\n for await (const row of this.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n result.push(row.toRow() as SubCategoryResultRow);\n }\n } catch {\n // We can ignore the error here, and just return whatever we were able to query.\n }\n return result;\n }\n\n /**\n * queries the BisCore.SubCategory table for the entries that are children of the passed categoryIds.\n * @param categoryIds categoryIds to query\n * @returns array of SubCategoryResultRow\n * @internal\n */\n public async querySubCategories(categoryIds: Iterable<Id64String>): Promise<SubCategoryResultRow[]> {\n const result: SubCategoryResultRow[] = [];\n\n const where = [...categoryIds].join(\",\");\n const query = `SELECT ECInstanceId as id, Parent.Id as parentId, Properties as appearance FROM BisCore.SubCategory WHERE Parent.Id IN (${where})`;\n try {\n for await (const row of this.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\n result.push(row.toRow() as SubCategoryResultRow);\n }\n } catch {\n // We can ignore the error here, and just return whatever we were able to query.\n }\n return result;\n }\n\n /** Query for a set of entity ids, given an EntityQueryParams\n * @param params The query parameters. The `limit` and `offset` members should be used to page results.\n * @returns an Id64Set with results of query\n * @throws [[IModelError]] if the generated statement is invalid or [IModelDb.maxLimit]($backend) exceeded when collecting ids.\n *\n * *Example:*\n * ``` ts\n * [[include:ECSQL-backend-queries.select-element-by-code-value-using-queryEntityIds]]\n * ```\n */\n public queryEntityIds(params: EntityQueryParams): Id64Set {\n let sql = \"SELECT ECInstanceId FROM \";\n if (params.only)\n sql += \"ONLY \";\n sql += params.from;\n if (params.where)\n sql += ` WHERE ${params.where}`;\n\n if (params.orderBy)\n sql += ` ORDER BY ${params.orderBy}`;\n\n if (typeof params.limit === \"number\" && params.limit > 0)\n sql += ` LIMIT ${params.limit}`;\n\n if (typeof params.offset === \"number\" && params.offset > 0)\n sql += ` OFFSET ${params.offset}`;\n\n const ids = new Set<string>();\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this.withPreparedStatement(sql, (stmt) => {\n if (params.bindings)\n stmt.bindValues(params.bindings);\n for (const row of stmt) {\n if (row.id !== undefined) {\n ids.add(row.id);\n if (ids.size > IModelDb.maxLimit) {\n throw new IModelError(IModelStatus.BadRequest, \"Max LIMIT exceeded in SELECT statement\");\n }\n }\n }\n });\n return ids;\n }\n\n /** Clear all in-memory caches held in this IModelDb. */\n public clearCaches() {\n this._statementCache.clear();\n this._sqliteStatementCache.clear();\n this._classMetaDataRegistry = undefined;\n this._jsClassMap = undefined;\n this._schemaMap = undefined;\n this._schemaContext = undefined;\n this.elements[_cache].clear();\n this.models[_cache].clear();\n this.elements[_instanceKeyCache].clear();\n this.models[_instanceKeyCache].clear();\n }\n\n /** Update the project extents for this iModel.\n * <p><em>Example:</em>\n * ``` ts\n * [[include:IModelDb.updateProjectExtents]]\n * ```\n */\n public updateProjectExtents(newExtents: AxisAlignedBox3d) {\n this.projectExtents = newExtents;\n this.updateIModelProps();\n }\n\n /** Compute an appropriate project extents for this iModel based on the ranges of all spatial elements.\n * Typically, the result is simply the union of the ranges of all spatial elements. However, the algorithm also detects \"outlier elements\",\n * whose placements locate them so far from the rest of the spatial geometry that they are considered statistically insignificant. The\n * range of an outlier element does not contribute to the computed extents.\n * @param options Specifies the level of detail desired in the return value.\n * @returns the computed extents.\n * @note This method does not modify the IModel's stored project extents. @see [[updateProjectExtents]].\n */\n public computeProjectExtents(options?: ComputeProjectExtentsOptions): ComputedProjectExtents {\n const wantFullExtents = true === options?.reportExtentsWithOutliers;\n const wantOutliers = true === options?.reportOutliers;\n const result = this[_nativeDb].computeProjectExtents(wantFullExtents, wantOutliers);\n return {\n extents: Range3d.fromJSON(result.extents),\n extentsWithOutliers: result.fullExtents ? Range3d.fromJSON(result.fullExtents) : undefined,\n outliers: result.outliers,\n };\n }\n\n /** Update the [EcefLocation]($docs/learning/glossary#eceflocation) of this iModel. */\n public updateEcefLocation(ecef: EcefLocation) {\n this.setEcefLocation(ecef);\n this.updateIModelProps();\n }\n\n /** Update the IModelProps of this iModel in the database. */\n public updateIModelProps(): void {\n this[_nativeDb].updateIModelProps(this.toJSON());\n }\n\n /** Commit unsaved changes in memory as a Txn to this iModelDb.\n * @param description Optional description of the changes.\n * @throws [[IModelError]] if there is a problem saving changes or if there are pending, un-processed lock or code requests.\n * @note This will not push changes to the iModelHub.\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync}, {TxnManager.withIndirectTxnMode} or {RebaseHandler.recompute}.\n * @see [[IModelDb.pushChanges]] to push changes to the iModelHub.\n */\n public saveChanges(description?: string): void;\n\n /** Commit unsaved changes in memory as a Txn to this iModelDb. This is preferable for case where application like to store additional structured information with the change that could be useful later when rebasing.\n * @alpha\n * @param args Provide [[SaveChangesArgs]] of the changes.\n * @throws [[IModelError]] if there is a problem saving changes or if there are pending, un-processed lock or code requests.\n * @note This will not push changes to the iModelHub.\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync}, {TxnManager.withIndirectTxnMode} or {RebaseHandler.recompute}.\n * @see [[IModelDb.pushChanges]] to push changes to the iModelHub.\n */\n public saveChanges(args: SaveChangesArgs): void;\n\n /** Commit unsaved changes in memory as a Txn to this iModelDb.\n * @internal\n * @param descriptionOrArgs Optionally provide description or [[SaveChangesArgs]] args for the changes.\n * @throws [[IModelError]] if there is a problem saving changes or if there are pending, un-processed lock or code requests.\n * @note This will not push changes to the iModelHub.\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync}, {TxnManager.withIndirectTxnMode} or {RebaseHandler.recompute}.\n * @see [[IModelDb.pushChanges]] to push changes to the iModelHub.\n */\n public saveChanges(descriptionOrArgs?: string | SaveChangesArgs): void {\n if (this.openMode === OpenMode.Readonly)\n throw new IModelError(IModelStatus.ReadOnly, \"IModelDb was opened read-only\");\n\n if (this instanceof BriefcaseDb) {\n if (this.txns.isIndirectChanges) {\n throw new IModelError(IModelStatus.BadRequest, \"Cannot save changes while in an indirect change scope\");\n }\n }\n const args = typeof descriptionOrArgs === \"string\" ? { description: descriptionOrArgs } : descriptionOrArgs;\n if (!this[_nativeDb].hasUnsavedChanges()) {\n Logger.logWarning(loggerCategory, \"there are no unsaved changes\", () => args);\n }\n\n const stat = this[_nativeDb].saveChanges(args ? JSON.stringify(args) : undefined);\n if (DbResult.BE_SQLITE_ERROR_PropagateChangesFailed === stat)\n throw new IModelError(stat, `Could not save changes due to propagation failure.`);\n\n if (DbResult.BE_SQLITE_OK !== stat)\n throw new IModelError(stat, `Could not save changes (${args?.description})`);\n }\n\n /** Abandon changes in memory that have not been saved as a Txn to this iModelDb.\n * @note This will not delete Txns that have already been saved, even if they have not yet been pushed.\n */\n public abandonChanges(): void {\n // Clears instanceKey caches only, instead of all of the backend caches, since the changes are not saved yet\n this.elements[_cache].clear();\n this.models[_cache].clear();\n this.elements[_instanceKeyCache].clear();\n this.models[_instanceKeyCache].clear();\n this[_nativeDb].abandonChanges();\n }\n\n /**\n * Save all changes and perform a [checkpoint](https://www.sqlite.org/c3ref/wal_checkpoint_v2.html) on this IModelDb.\n * This ensures that all changes to the database since it was opened are saved to its file and the WAL file is truncated.\n * @note Checkpoint automatically happens when IModelDbs are closed. However, the checkpoint\n * operation itself can take some time. It may be useful to call this method prior to closing so that the checkpoint \"penalty\" is paid earlier.\n * @note Another use for this function is to permit the file to be copied while it is open for write. iModel files should\n * rarely be copied, and even less so while they're opened. But this scenario is sometimes encountered for tests.\n */\n public performCheckpoint() {\n if (!this.isReadonly) {\n this.saveChanges();\n this.clearCaches();\n this[_nativeDb].concurrentQueryShutdown();\n this[_nativeDb].clearECDbCache();\n this[_nativeDb].performCheckpoint();\n }\n }\n\n /** @internal\n * @deprecated in 4.8 - will not be removed until after 2026-06-13. Use `txns.reverseTxns`.\n */\n public reverseTxns(numOperations: number): IModelStatus {\n return this[_nativeDb].reverseTxns(numOperations);\n }\n\n /** @internal */\n public reinstateTxn(): IModelStatus {\n return this[_nativeDb].reinstateTxn();\n }\n\n /** @internal */\n public restartTxnSession(): void {\n return this[_nativeDb].restartTxnSession();\n }\n\n /** Removes unused schemas from the database.\n *\n * If the removal was successful, the database is automatically saved to disk.\n * @param schemaNames Array of schema names to drop\n * @throws [IModelError]($common) if the database if the operation failed.\n * @alpha\n */\n public async dropSchemas(schemaNames: string[]): Promise<void> {\n if (schemaNames.length === 0)\n return;\n if (this[_nativeDb].schemaSyncEnabled())\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Cannot drop schemas when schema sync is enabled\");\n if (this[_nativeDb].hasUnsavedChanges())\n throw new IModelError(ChangeSetStatus.HasUncommittedChanges, \"Cannot drop schemas with unsaved changes\");\n if (this[_nativeDb].getITwinId() !== Guid.empty)\n await this.acquireSchemaLock();\n\n try {\n this[_nativeDb].dropSchemas(schemaNames);\n this.saveChanges(`dropped unused schemas`);\n } catch (error: any) {\n Logger.logError(loggerCategory, `Failed to drop schemas: ${error}`);\n this.abandonChanges();\n throw new IModelError(DbResult.BE_SQLITE_ERROR, `Failed to drop schemas: ${error}`);\n } finally {\n await this.locks.releaseAllLocks();\n this.clearCaches();\n }\n }\n\n /** Import an ECSchema. On success, the schema definition is stored in the iModel.\n * This method is asynchronous (must be awaited) because, in the case where this IModelDb is a briefcase, this method first obtains the schema lock from the iModel server.\n * You must import a schema into an iModel before you can insert instances of the classes in that schema. See [[Element]]\n * @param schemaFileName array of Full paths to ECSchema.xml files to be imported.\n * @param {SchemaImportOptions} options - options during schema import.\n * @throws [[IModelError]] if the schema lock cannot be obtained or there is a problem importing the schema.\n * @note Changes are saved if importSchemas is successful and abandoned if not successful.\n * - You can use NativeLoggerCategory to turn on the native logs. You can also control [what exactly is logged by the loggers](https://www.itwinjs.org/learning/common/logging/#controlling-what-is-logged).\n * - See [Schema Versioning]($docs/bis/guide/schema-evolution/schema-versioning-and-generations.md) for more information on acceptable changes to schemas.\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync} or {RebaseHandler.recompute}.\n * @see querySchemaVersion\n */\n public async importSchemas(schemaFileNames: LocalFileName[], options?: SchemaImportOptions): Promise<void> {\n if (schemaFileNames.length === 0)\n return;\n\n if (this instanceof BriefcaseDb) {\n if (this.txns.rebaser.isRebasing) {\n throw new IModelError(IModelStatus.BadRequest, \"Cannot import schemas while rebasing\");\n }\n if (this.txns.isIndirectChanges) {\n throw new IModelError(IModelStatus.BadRequest, \"Cannot import schemas while in an indirect change scope\");\n }\n }\n\n const maybeCustomNativeContext = options?.ecSchemaXmlContext?.nativeContext;\n if (this[_nativeDb].schemaSyncEnabled()) {\n\n await SchemaSync.withLockedAccess(this, { openMode: OpenMode.Readonly, operationName: \"schema sync\" }, async (syncAccess) => {\n const schemaSyncDbUri = syncAccess.getUri();\n this.saveChanges();\n\n try {\n this[_nativeDb].importSchemas(schemaFileNames, { schemaLockHeld: false, ecSchemaXmlContext: maybeCustomNativeContext, schemaSyncDbUri });\n } catch (outerErr: any) {\n if (DbResult.BE_SQLITE_ERROR_DataTransformRequired === outerErr.errorNumber) {\n this.abandonChanges();\n if (this[_nativeDb].getITwinId() !== Guid.empty)\n await this.acquireSchemaLock();\n try {\n this[_nativeDb].importSchemas(schemaFileNames, { schemaLockHeld: true, ecSchemaXmlContext: maybeCustomNativeContext, schemaSyncDbUri });\n } catch (innerErr: any) {\n throw new IModelError(innerErr.errorNumber, innerErr.message);\n }\n } else {\n throw new IModelError(outerErr.errorNumber, outerErr.message);\n }\n }\n });\n } else {\n const nativeImportOptions: IModelJsNative.SchemaImportOptions = {\n schemaLockHeld: true,\n ecSchemaXmlContext: maybeCustomNativeContext,\n };\n\n if (this[_nativeDb].getITwinId() !== Guid.empty) // if this iModel is associated with an iTwin, importing schema requires the schema lock\n await this.acquireSchemaLock();\n\n try {\n this[_nativeDb].importSchemas(schemaFileNames, nativeImportOptions);\n } catch (err: any) {\n throw new IModelError(err.errorNumber, err.message);\n }\n }\n this.clearCaches();\n }\n\n /** Import ECSchema(s) serialized to XML. On success, the schema definition is stored in the iModel.\n * This method is asynchronous (must be awaited) because, in the case where this IModelDb is a briefcase, this method first obtains the schema lock from the iModel server.\n * You must import a schema into an iModel before you can insert instances of the classes in that schema. See [[Element]]\n * @param serializedXmlSchemas The xml string(s) created from a serialized ECSchema.\n * @throws [[IModelError]] if the schema lock cannot be obtained or there is a problem importing the schema.\n * @note Changes are saved if importSchemaStrings is successful and abandoned if not successful.\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync} or {RebaseHandler.recompute}.\n * @see querySchemaVersion\n * @alpha\n */\n public async importSchemaStrings(serializedXmlSchemas: string[]): Promise<void> {\n if (serializedXmlSchemas.length === 0)\n return;\n\n if (this instanceof BriefcaseDb) {\n if (this.txns.rebaser.isRebasing) {\n throw new IModelError(IModelStatus.BadRequest, \"Cannot import schemas while rebasing\");\n }\n if (this.txns.isIndirectChanges) {\n throw new IModelError(IModelStatus.BadRequest, \"Cannot import schemas while in an indirect change scope\");\n }\n }\n\n if (this[_nativeDb].schemaSyncEnabled()) {\n await SchemaSync.withLockedAccess(this, { openMode: OpenMode.Readonly, operationName: \"schemaSync\" }, async (syncAccess) => {\n const schemaSyncDbUri = syncAccess.getUri();\n this.saveChanges();\n try {\n this[_nativeDb].importXmlSchemas(serializedXmlSchemas, { schemaLockHeld: false, schemaSyncDbUri });\n } catch (outerErr: any) {\n if (DbResult.BE_SQLITE_ERROR_DataTransformRequired === outerErr.errorNumber) {\n this.abandonChanges();\n if (this[_nativeDb].getITwinId() !== Guid.empty)\n await this.acquireSchemaLock();\n try {\n this[_nativeDb].importXmlSchemas(serializedXmlSchemas, { schemaLockHeld: true, schemaSyncDbUri });\n } catch (innerErr: any) {\n throw new IModelError(innerErr.errorNumber, innerErr.message);\n }\n } else {\n throw new IModelError(outerErr.errorNumber, outerErr.message);\n }\n }\n });\n } else {\n if (this.iTwinId && this.iTwinId !== Guid.empty) // if this iModel is associated with an iTwin, importing schema requires the schema lock\n await this.acquireSchemaLock();\n\n try {\n this[_nativeDb].importXmlSchemas(serializedXmlSchemas, { schemaLockHeld: true });\n } catch (err: any) {\n throw new IModelError(err.errorNumber, err.message);\n }\n }\n this.clearCaches();\n }\n\n /** Find an opened instance of any subclass of IModelDb, by filename\n * @note this method returns an IModelDb if the filename is open for *any* subclass of IModelDb\n */\n public static findByFilename(fileName: LocalFileName): IModelDb | undefined {\n for (const entry of this._openDbs) {\n // It shouldn't be possible for anything in _openDbs to not be open, but if so just skip them because `pathName` will throw an exception.\n if (entry[1].isOpen && entry[1].pathName === fileName)\n return entry[1];\n }\n return undefined;\n }\n\n /** Find an open IModelDb by its key.\n * @note This method is mainly for use by RPC implementations.\n * @throws [[IModelNotFoundResponse]] if an open IModelDb matching the key is not found.\n * @see [IModel.key]($common)\n */\n public static findByKey(key: string): IModelDb {\n const iModelDb = this.tryFindByKey(key);\n if (undefined === iModelDb) {\n // eslint-disable-next-line @typescript-eslint/only-throw-error\n throw new IModelNotFoundResponse(); // a very specific status for the RpcManager\n }\n return iModelDb;\n }\n\n /** Attempt to find an open IModelDb by key.\n * @returns The matching IModelDb or `undefined`.\n */\n public static tryFindByKey(key: string): IModelDb | undefined {\n return this._openDbs.get(key);\n }\n\n /** @internal */\n public static openDgnDb(file: { path: LocalFileName, key?: string }, openMode: OpenMode, upgradeOptions?: UpgradeOptions, props?: SnapshotOpenOptions & CloudContainerArgs & OpenSqliteArgs): IModelJsNative.DgnDb {\n file.key = file.key ?? Guid.createValue();\n if (this.tryFindByKey(file.key))\n throw new IModelError(IModelStatus.AlreadyOpen, `key [${file.key}] for file [${file.path}] is already in use`);\n\n const isUpgradeRequested = upgradeOptions?.domain === DomainOptions.Upgrade || upgradeOptions?.profile === ProfileOptions.Upgrade;\n if (isUpgradeRequested && openMode !== OpenMode.ReadWrite)\n throw new IModelError(IModelStatus.UpgradeFailed, \"Cannot upgrade a Readonly Db\");\n\n try {\n const nativeDb = new IModelNative.platform.DgnDb();\n const container = props?.container;\n if (container) {\n // temp files for cloud-based Dbs should be in the profileDir in a subdirectory named for their container\n const baseDir = join(IModelHost.profileDir, \"CloudDbTemp\", container.containerId);\n IModelJsFs.recursiveMkDirSync(baseDir);\n props = { ...props, tempFileBase: join(baseDir, file.path) };\n }\n nativeDb.openIModel(file.path, openMode, upgradeOptions, props, props?.container, props);\n return nativeDb;\n } catch (err: any) {\n throw new IModelError(err.errorNumber, `${err.message}, ${file.path}`);\n }\n }\n\n /**\n * Determines if the schemas in the Db must or can be upgraded by comparing them with those included in the\n * current version of the software.\n * @param filePath Full name of the briefcase including path\n * @param forReadWrite Pass true if validating for read-write scenarios - note that the schema version requirements\n * for opening the DgnDb read-write is more stringent than when opening the database read-only\n * @throws [[IModelError]] If the Db was in an invalid state and that causes a problem with validating schemas\n * @see [[BriefcaseDb.upgradeSchemas]] or [[StandaloneDb.upgradeSchemas]]\n * @see ($docs/learning/backend/IModelDb.md#upgrading-schemas-in-an-imodel)\n */\n public static validateSchemas(filePath: LocalFileName, forReadWrite: boolean): SchemaState {\n const openMode = forReadWrite ? OpenMode.ReadWrite : OpenMode.Readonly;\n const file = { path: filePath };\n let result = DbResult.BE_SQLITE_OK;\n try {\n const upgradeOptions: UpgradeOptions = {\n domain: DomainOptions.CheckRecommendedUpgrades,\n };\n const nativeDb = this.openDgnDb(file, openMode, upgradeOptions);\n nativeDb.closeFile();\n } catch (err: any) {\n result = err.errorNumber;\n }\n\n let schemaState: SchemaState = SchemaState.UpToDate;\n switch (result) {\n case DbResult.BE_SQLITE_OK:\n schemaState = SchemaState.UpToDate;\n break;\n case DbResult.BE_SQLITE_ERROR_ProfileTooOld:\n case DbResult.BE_SQLITE_ERROR_ProfileTooOldForReadWrite:\n case DbResult.BE_SQLITE_ERROR_SchemaTooOld:\n schemaState = SchemaState.TooOld;\n break;\n case DbResult.BE_SQLITE_ERROR_ProfileTooNew:\n case DbResult.BE_SQLITE_ERROR_ProfileTooNewForReadWrite:\n case DbResult.BE_SQLITE_ERROR_SchemaTooNew:\n schemaState = SchemaState.TooNew;\n break;\n case DbResult.BE_SQLITE_ERROR_SchemaUpgradeRecommended:\n schemaState = SchemaState.UpgradeRecommended;\n break;\n case DbResult.BE_SQLITE_ERROR_SchemaUpgradeRequired:\n schemaState = SchemaState.UpgradeRequired;\n break;\n case DbResult.BE_SQLITE_ERROR_InvalidProfileVersion:\n throw new IModelError(DbResult.BE_SQLITE_ERROR_InvalidProfileVersion, \"The profile of the Db is invalid. Cannot upgrade or open the Db.\");\n default:\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Error validating schemas. Cannot upgrade or open the Db.\");\n }\n return schemaState;\n }\n\n /** The registry of entity metadata for this iModel.\n * @internal\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `schemaContext` from the `iModel` instead.\n *\n * @example\n * ```typescript\n * // Current usage:\n * const classMetaData: EntityMetaData | undefined = iModel.classMetaDataRegistry.find(\"SchemaName:ClassName\");\n *\n * // Replacement:\n * const metaData: EntityClass | undefined = imodel.schemaContext.getSchemaItemSync(\"SchemaName.ClassName\", EntityClass);\n * ```\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public get classMetaDataRegistry(): MetaDataRegistry {\n if (this._classMetaDataRegistry === undefined)\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this._classMetaDataRegistry = new MetaDataRegistry();\n\n return this._classMetaDataRegistry;\n }\n\n /**\n * Allows registering js classes mapped to ECClasses\n */\n public get jsClassMap(): EntityJsClassMap {\n if (this._jsClassMap === undefined)\n this._jsClassMap = new EntityJsClassMap();\n\n return this._jsClassMap;\n }\n\n /**\n * Allows locally registering a schema for this imodel, in constrast to [Schemas.registerSchema] which is a global operation\n */\n public get schemaMap(): SchemaMap {\n if (this._schemaMap === undefined)\n this._schemaMap = new SchemaMap();\n\n return this._schemaMap;\n }\n\n /**\n * Gets the context that allows accessing the metadata (ecschema-metadata package) of this iModel\n * @public @preview\n */\n public get schemaContext(): SchemaContext {\n if (this._schemaContext === undefined) {\n const context = new SchemaContext();\n if(IModelHost.configuration && IModelHost.configuration.incrementalSchemaLoading === \"enabled\") {\n context.addLocater(new IModelIncrementalSchemaLocater(this));\n }\n context.addLocater(new SchemaJsonLocater((name) => this.getSchemaProps(name)));\n this._schemaContext = context;\n }\n\n return this._schemaContext;\n }\n\n /** Get the linkTableRelationships for this IModel */\n public get relationships(): Relationships {\n return this._relationships || (this._relationships = new Relationships(this));\n }\n\n /** Get the CodeSpecs in this IModel. */\n public get codeSpecs(): CodeSpecs {\n return (this._codeSpecs !== undefined) ? this._codeSpecs : (this._codeSpecs = new CodeSpecs(this));\n }\n /** Prepare an ECSQL statement.\n * @param sql The ECSQL statement to prepare\n * @param logErrors Determines if error will be logged if statement fail to prepare\n * @throws [[IModelError]] if there is a problem preparing the statement.\n * @deprecated in 4.11 - will not be removed until after 2026-06-13. Use [IModelDb.createQueryReader]($backend) or [ECDb.createQueryReader]($backend) to query.\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public prepareStatement(sql: string, logErrors = true): ECSqlStatement {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const stmt = new ECSqlStatement();\n stmt.prepare(this[_nativeDb], sql, logErrors);\n return stmt;\n }\n\n /** Prepare an ECSQL statement.\n * @param sql The ECSQL statement to prepare\n * @returns `undefined` if there is a problem preparing the statement.\n * @deprecated in 4.11 - will not be removed until after 2026-06-13. Use [IModelDb.createQueryReader]($backend) or [ECDb.createQueryReader]($backend) to query.\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public tryPrepareStatement(sql: string): ECSqlStatement | undefined {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const statement = new ECSqlStatement();\n const result = statement.tryPrepare(this[_nativeDb], sql);\n return DbResult.BE_SQLITE_OK === result.status ? statement : undefined;\n }\n\n /** Construct an entity (Element or Model) from an iModel.\n * @throws [[IModelError]] if the entity cannot be constructed.\n */\n public constructEntity<T extends Entity, P extends EntityProps = EntityProps>(props: P): T {\n const jsClass = this.getJsClass(props.classFullName);\n return Entity.instantiate(jsClass, props, this) as T;\n }\n\n /** Get the JavaScript class that handles a given entity class. */\n public getJsClass<T extends typeof Entity>(classFullName: string): T {\n try {\n return ClassRegistry.getClass(classFullName, this) as T;\n } catch (err) {\n if (!ClassRegistry.isNotFoundError(err)) {\n throw err;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this.loadMetaData(classFullName);\n return ClassRegistry.getClass(classFullName, this) as T;\n }\n }\n\n /** Constructs a ResolveInstanceKeyArgs from given parameters\n * @throws [[IModelError]] if the combination of supplied parameters is invalid.\n * @internal\n */\n public getInstanceArgs(instanceId?: Id64String, baseClassName?: string, federationGuid?: GuidString, code?: CodeProps): IModelJsNative.ResolveInstanceKeyArgs {\n if (instanceId && baseClassName) {\n return { partialKey: { id: instanceId, baseClassName } };\n } else if (federationGuid) {\n return { federationGuid };\n } else if (code) {\n return { code };\n } else {\n throw new IModelError(IModelStatus.InvalidId, \"Either instanceId and baseClassName or federationGuid or code must be specified\");\n }\n }\n\n /** Get metadata for a class. This method will load the metadata from the iModel into the cache as a side-effect, if necessary.\n * @throws [[IModelError]] if the metadata cannot be found nor loaded.\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `getSchemaItem` from `SchemaContext` class instead.\n *\n * @example\n * * ```typescript\n * // Current usage:\n * const metaData: EntityMetaData = imodel.getMetaData(\"SchemaName:ClassName\");\n *\n * // Replacement:\n * const metaData: EntityClass | undefined = imodel.schemaContext.getSchemaItemSync(\"SchemaName\", \"ClassName\", EntityClass);\n * ```\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public getMetaData(classFullName: string): EntityMetaData {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n let metadata = this.classMetaDataRegistry.find(classFullName);\n if (metadata === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this.loadMetaData(classFullName);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n metadata = this.classMetaDataRegistry.find(classFullName);\n if (metadata === undefined)\n throw ClassRegistry.makeMetaDataNotFoundError(classFullName); // do not log\n }\n return metadata;\n }\n\n /** Identical to [[getMetaData]], except it returns `undefined` instead of throwing an error if the metadata cannot be found nor loaded.\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `getSchemaItem` from `SchemaContext` class instead.\n *\n * @example\n * * ```typescript\n * // Current usage:\n * const metaData: EntityMetaData | undefined = imodel.tryGetMetaData(\"SchemaName:ClassName\");\n *\n * // Replacement:\n * const metaData: EntityClass | undefined = imodel.schemaContext.getSchemaItemSync(\"SchemaName.ClassName\", EntityClass);\n * ```\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public tryGetMetaData(classFullName: string): EntityMetaData | undefined {\n try {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return this.getMetaData(classFullName);\n } catch {\n return undefined;\n }\n }\n\n /** Invoke a callback on each property of the specified class, optionally including superclass properties.\n * @param iModel The IModel that contains the schema\n * @param classFullName The full class name to load the metadata, if necessary\n * @param wantSuper If true, superclass properties will also be processed\n * @param func The callback to be invoked on each property\n * @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.\n * @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `forEachProperty` instead.\n *\n * @example\n * ```typescript\n * // Current usage:\n * IModelDb.forEachMetaData(imodel, \"BisCore:Element\", true, (name: string, propMetaData: PropertyMetaData) => {\n * console.log(`Property name: ${name}, Property type: ${propMetaData.primitiveType}`);\n * }, false);\n *\n * // Replacement:\n * await IModelDb.forEachProperty(imodel, \"TestDomain.TestDomainClass\", true, (propName: string, property: Property) => {\n * console.log(`Property name: ${propName}, Property type: ${property.propertyType}`);\n * }, false);\n * ```\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public static forEachMetaData(iModel: IModelDb, classFullName: string, wantSuper: boolean, func: PropertyCallback, includeCustom: boolean = true) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n iModel.forEachMetaData(classFullName, wantSuper, func, includeCustom);\n }\n\n /** Invoke a callback on each property of the specified class, optionally including superclass properties.\n * @param classFullName The full class name to load the metadata, if necessary\n * @param wantSuper If true, superclass properties will also be processed\n * @param func The callback to be invoked on each property\n * @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.\n * @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `forEachProperty` from `SchemaContext` class instead.\n *\n * @example\n * ```typescript\n * // Current usage:\n * iModel.forEachMetaData(\"BisCore:Element\", true, (name: string, propMetaData: PropertyMetaData) => {\n * console.log(`Property name: ${name}, Property type: ${propMetaData.primitiveType}`);\n * });\n *\n * // Replacement:\n * imodel.schemaContext.forEachProperty(\"BisCore:Element\", true, (propName: string, property: Property) => {\n * console.log(`Property name: ${propName}, Property type: ${property.propertyType}`);\n * });\n * ```\n */\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n public forEachMetaData(classFullName: string, wantSuper: boolean, func: PropertyCallback, includeCustom: boolean = true) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const meta = this.getMetaData(classFullName); // will load if necessary\n for (const propName in meta.properties) { // eslint-disable-line guard-for-in\n const propMeta = meta.properties[propName];\n if (includeCustom || !propMeta.isCustomHandled || propMeta.isCustomHandledOrphan)\n func(propName, propMeta);\n }\n\n if (wantSuper && meta.baseClasses && meta.baseClasses.length > 0)\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n meta.baseClasses.forEach((baseClass) => this.forEachMetaData(baseClass, true, func, includeCustom));\n }\n\n /**\n * @internal\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `schemaContext` from `iModel` instead to get metadata.\n */\n private loadMetaData(classFullName: string) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n if (this.classMetaDataRegistry.find(classFullName))\n return;\n\n const className = classFullName.split(\":\");\n if (className.length !== 2)\n throw new IModelError(IModelStatus.BadArg, `Invalid classFullName: ${classFullName}`);\n\n const val = this[_nativeDb].getECClassMetaData(className[0], className[1]);\n if (val.error)\n throw new IModelError(val.error.status, `Error getting class meta data for: ${classFullName}`);\n\n assert(undefined !== val.result);\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const metaData = new EntityMetaData(JSON.parse(val.result));\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this.classMetaDataRegistry.add(classFullName, metaData);\n\n // Recursive, to make sure that base classes are cached.\n if (metaData.baseClasses !== undefined && metaData.baseClasses.length > 0)\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n metaData.baseClasses.forEach((baseClassName: string) => this.loadMetaData(baseClassName));\n }\n\n /** Returns the full schema for the input name.\n * @param name The name of the schema e.g. 'BisCore'\n * @returns The SchemaProps for the requested schema\n * @throws if the schema can not be found or loaded.\n */\n public getSchemaProps(name: string): ECSchemaProps {\n return this[_nativeDb].getSchemaProps(name);\n }\n\n /** Query if this iModel contains the definition of the specified class.\n * @param classFullName The full name of the class, for example, SomeSchema:SomeClass\n * @returns true if the iModel contains the class definition or false if not.\n * @see querySchemaVersion\n * @see importSchema\n */\n public containsClass(classFullName: string): boolean {\n const classNameParts = classFullName.replace(\".\", \":\").split(\":\");\n return classNameParts.length === 2 && this[_nativeDb].getECClassMetaData(classNameParts[0], classNameParts[1]).error === undefined;\n }\n\n /** Query the version of a schema of the specified name in this iModel.\n * @returns The schema version as a semver-compatible string or `undefined` if the schema has not been imported.\n */\n public querySchemaVersion(schemaName: string): string | undefined {\n const version = this.querySchemaVersionNumbers(schemaName);\n return version?.toString(false);\n }\n\n /** Query the version of a schema of the specified name in this iModel.\n * @returns the version numbers, or `undefined` if the schema has not been imported.\n */\n public querySchemaVersionNumbers(schemaName: string): ECVersion | undefined {\n const sql = `SELECT VersionMajor,VersionWrite,VersionMinor FROM ECDbMeta.ECSchemaDef WHERE Name=:schemaName LIMIT 1`;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return this.withPreparedStatement(sql, (statement: ECSqlStatement): ECVersion | undefined => {\n statement.bindString(\"schemaName\", schemaName);\n if (DbResult.BE_SQLITE_ROW === statement.step()) {\n const read: number = statement.getValue(0).getInteger(); // ECSchemaDef.VersionMajor --> semver.major\n const write: number = statement.getValue(1).getInteger(); // ECSchemaDef.VersionWrite --> semver.minor\n const minor: number = statement.getValue(2).getInteger(); // ECSchemaDef.VersionMinor --> semver.patch\n return new ECVersion(read, write, minor);\n }\n return undefined;\n });\n }\n\n /** Returns true if the specified schema exists in the iModel and is no older than the specified minimum version.\n * @beta\n */\n public meetsMinimumSchemaVersion(schemaName: string, minimumVersion: ECVersion): boolean {\n const actualVersion = this.querySchemaVersionNumbers(schemaName);\n return undefined !== actualVersion && actualVersion.compare(minimumVersion) >= 0;\n }\n\n /** Throws an error if the version of the schema specified by `schemaName` is older than `minimumVersion`.\n * The error will indicate the `featureName` that requires this minimum version.\n * Use this to produce more helpful errors when interacting with APIs that operate on classes introduced as\n * schemas evolve.\n * @beta\n */\n public requireMinimumSchemaVersion(schemaName: string, minimumVersion: ECVersion, featureName: string): void {\n if (!this.meetsMinimumSchemaVersion(schemaName, minimumVersion)) {\n throw new Error(`${featureName} requires ${schemaName} v${minimumVersion.toString()} or newer`);\n }\n }\n\n /** Retrieve a named texture image from this iModel, as a TextureData.\n * @param props the texture load properties which must include the name of the texture to load\n * @returns the TextureData or undefined if the texture image is not present.\n * @alpha\n */\n public async queryTextureData(props: TextureLoadProps): Promise<TextureData | undefined> {\n return this[_nativeDb].queryTextureData(props);\n }\n\n /** Query a \"file property\" from this iModel, as a string.\n * @returns the property string or undefined if the property is not present.\n */\n public queryFilePropertyString(prop: FilePropertyProps): string | undefined {\n return this[_nativeDb].queryFileProperty(prop, true) as string | undefined;\n }\n\n /** Query a \"file property\" from this iModel, as a blob.\n * @returns the property blob or undefined if the property is not present.\n */\n public queryFilePropertyBlob(prop: FilePropertyProps): Uint8Array | undefined {\n return this[_nativeDb].queryFileProperty(prop, false) as Uint8Array | undefined;\n }\n\n /** Save a \"file property\" to this iModel\n * @param prop the FilePropertyProps that describes the new property\n * @param value either a string or a blob to save as the file property\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync} or {TxnManager.withIndirectTxnMode}.\n */\n public saveFileProperty(prop: FilePropertyProps, strValue: string | undefined, blobVal?: Uint8Array): void {\n if (this instanceof BriefcaseDb) {\n if (this.txns.isIndirectChanges) {\n throw new IModelError(IModelStatus.BadRequest, \"Cannot save file property while in an indirect change scope\");\n }\n }\n this[_nativeDb].saveFileProperty(prop, strValue, blobVal);\n }\n\n /** delete a \"file property\" from this iModel\n * @param prop the FilePropertyProps that describes the property\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync} or {TxnManager.withIndirectTxnMode}.\n */\n public deleteFileProperty(prop: FilePropertyProps): void {\n if (this instanceof BriefcaseDb) {\n if (this.txns.isIndirectChanges) {\n throw new IModelError(IModelStatus.BadRequest, \"Cannot delete file property while in an indirect change scope\");\n }\n }\n this[_nativeDb].saveFileProperty(prop, undefined, undefined);\n }\n\n /** Query for the next available major id for a \"file property\" from this iModel.\n * @param prop the FilePropertyProps that describes the property\n * @returns the next available (that is, an unused) id for prop. If none are present, will return 0.\n */\n public queryNextAvailableFileProperty(prop: FilePropertyProps) { return this[_nativeDb].queryNextAvailableFileProperty(prop); }\n\n /** @internal */\n public async requestSnap(sessionId: string, props: SnapRequestProps): Promise<SnapResponseProps> {\n let request = this._snaps.get(sessionId);\n if (undefined === request) {\n request = new IModelNative.platform.SnapRequest();\n this._snaps.set(sessionId, request);\n } else\n request.cancelSnap();\n\n try {\n return await request.doSnap(this[_nativeDb], JsonUtils.toObject(props));\n } finally {\n this._snaps.delete(sessionId);\n }\n }\n\n /** Cancel a previously requested snap.\n * @internal\n */\n public cancelSnap(sessionId: string): void {\n const request = this._snaps.get(sessionId);\n if (undefined !== request) {\n request.cancelSnap();\n this._snaps.delete(sessionId);\n }\n }\n\n /** Get the clip containment status for the supplied elements. */\n public async getGeometryContainment(props: GeometryContainmentRequestProps): Promise<GeometryContainmentResponseProps> {\n return this[_nativeDb].getGeometryContainment(JsonUtils.toObject(props));\n }\n\n /** Get the mass properties for the supplied elements. */\n public async getMassProperties(props: MassPropertiesRequestProps): Promise<MassPropertiesResponseProps> {\n return this[_nativeDb].getMassProperties(JsonUtils.toObject(props));\n }\n\n /** Get the IModel coordinate corresponding to each GeoCoordinate point in the input */\n public async getIModelCoordinatesFromGeoCoordinates(props: IModelCoordinatesRequestProps): Promise<IModelCoordinatesResponseProps> {\n const response = this[_nativeDb].getIModelCoordinatesFromGeoCoordinates(props);\n\n // fromCache is only meaningful on the front-end; provide it for compatibility with return type.\n response.fromCache = 0;\n // Native omits the array if the input was empty.\n response.iModelCoords = response.iModelCoords ?? [];\n return response;\n }\n\n /** Get the GeoCoordinate (longitude, latitude, elevation) corresponding to each IModel Coordinate point in the input */\n public async getGeoCoordinatesFromIModelCoordinates(props: GeoCoordinatesRequestProps): Promise<GeoCoordinatesResponseProps> {\n const response = this[_nativeDb].getGeoCoordinatesFromIModelCoordinates(props);\n\n // fromCache is only meaningful on the front-end; provide it for compatibility with return type.\n response.fromCache = 0;\n // Native omits the array if the input was empty.\n response.geoCoords = response.geoCoords ?? [];\n return response;\n }\n\n /** Export meshes suitable for graphics APIs from arbitrary geometry in elements in this IModelDb.\n * * Requests can be slow when processing many elements so it is expected that this function be used on a dedicated backend,\n * or that shared backends export a limited number of elements at a time.\n * * Vertices are exported in the IModelDb's world coordinate system, which is right-handed with Z pointing up.\n * * The results of changing [ExportGraphicsOptions]($core-backend) during the [ExportGraphicsOptions.onGraphics]($core-backend) callback are not defined.\n *\n * Example that prints the mesh for element 1 to stdout in [OBJ format](https://en.wikipedia.org/wiki/Wavefront_.obj_file)\n * ```ts\n * const onGraphics: ExportGraphicsFunction = (info: ExportGraphicsInfo) => {\n * const mesh: ExportGraphicsMesh = info.mesh;\n * for (let i = 0; i < mesh.points.length; i += 3) {\n * process.stdout.write(`v ${mesh.points[i]} ${mesh.points[i + 1]} ${mesh.points[i + 2]}\\n`);\n * process.stdout.write(`vn ${mesh.normals[i]} ${mesh.normals[i + 1]} ${mesh.normals[i + 2]}\\n`);\n * }\n *\n * for (let i = 0; i < mesh.params.length; i += 2) {\n * process.stdout.write(`vt ${mesh.params[i]} ${mesh.params[i + 1]}\\n`);\n * }\n *\n * for (let i = 0; i < mesh.indices.length; i += 3) {\n * const p1 = mesh.indices[i];\n * const p2 = mesh.indices[i + 1];\n * const p3 = mesh.indices[i + 2];\n * process.stdout.write(`f ${p1}/${p1}/${p1} ${p2}/${p2}/${p2} ${p3}/${p3}/${p3}\\n`);\n * }\n * };\n *\n * iModel.exportGraphics(({ onGraphics, elementIdArray: [\"0x1\"] }));\n * ```\n * @returns 0 if successful, status otherwise\n * @public\n */\n public exportGraphics(exportProps: ExportGraphicsOptions): DbResult {\n return this[_nativeDb].exportGraphics(exportProps);\n }\n\n /**\n * Exports meshes suitable for graphics APIs from a specified [GeometryPart]($core-backend)\n * in this IModelDb.\n * The expected use case is to call [IModelDb.exportGraphics]($core-backend) and supply the\n * optional partInstanceArray argument, then call this function for each unique GeometryPart from\n * that list.\n * * The results of changing [ExportPartGraphicsOptions]($core-backend) during the\n * [ExportPartGraphicsOptions.onPartGraphics]($core-backend) callback are not defined.\n * * See export-gltf under test-apps in the iTwin.js monorepo for a working reference.\n * @returns 0 is successful, status otherwise\n * @public\n */\n public exportPartGraphics(exportProps: ExportPartGraphicsOptions): DbResult {\n return this[_nativeDb].exportPartGraphics(exportProps);\n }\n\n /** Request geometry stream information from an element in binary format instead of json.\n * @returns IModelStatus.Success if successful\n * @beta\n */\n public elementGeometryRequest(requestProps: ElementGeometryRequest): IModelStatus {\n return this[_nativeDb].processGeometryStream(requestProps);\n }\n\n /** Request the creation of a backend geometry cache for the specified geometric element.\n * @returns ElementGeometryCacheResponseProps\n * @beta\n */\n public async updateElementGeometryCache(requestProps: ElementGeometryCacheRequestProps): Promise<ElementGeometryCacheResponseProps> {\n return this[_nativeDb].updateElementGeometryCache(requestProps);\n }\n\n /** Request operation using the backend geometry cache populated by first calling elementGeometryRequest.\n * @returns SUCCESS if requested operation could be applied.\n * @beta\n */\n public elementGeometryCacheOperation(requestProps: ElementGeometryCacheOperationRequestProps): BentleyStatus {\n return this[_nativeDb].elementGeometryCacheOperation(requestProps);\n }\n\n /** Create brep geometry for inclusion in an element's geometry stream.\n * @returns IModelStatus.Success if successful\n * @throws [[IModelError]] to report issues with input geometry or parameters\n * @alpha\n */\n public createBRepGeometry(createProps: BRepGeometryCreate): IModelStatus {\n return this[_nativeDb].createBRepGeometry(createProps);\n }\n\n /** Generate graphics for an element or geometry stream.\n * @see [readElementGraphics]($frontend) to convert the result to a [RenderGraphic]($frontend) for display.\n */\n public async generateElementGraphics(request: ElementGraphicsRequestProps): Promise<Uint8Array | undefined> {\n return generateElementGraphics(request, this);\n }\n\n private static _settingPropNamespace = \"settings\";\n\n /** Save a `SettingDictionary` in this iModel that will be loaded into [[workspace.settings]] every time this iModel is opened in future sessions.\n * @param name The name for the SettingDictionary. If a dictionary by that name already exists in the iModel, its value is replaced.\n * @param dict The SettingDictionary object to stringify and save.\n * @note All saved `SettingDictionary`s are loaded into [[workspace.settings]] every time an iModel is opened.\n * @beta\n */\n public saveSettingDictionary(name: string, dict: SettingsContainer) {\n this.withSqliteStatement(\"REPLACE INTO be_Prop(id,SubId,TxnMode,Namespace,Name,strData) VALUES(0,0,0,?,?,?)\", (stmt) => {\n stmt.bindString(1, IModelDb._settingPropNamespace);\n stmt.bindString(2, name);\n stmt.bindString(3, JSON.stringify(dict));\n stmt.stepForWrite();\n });\n this.saveChanges(\"add settings\");\n }\n\n /** Delete a SettingDictionary, previously added with [[saveSettingDictionary]], from this iModel.\n * @param name The name of the dictionary to delete.\n * @beta\n */\n public deleteSettingDictionary(name: string) {\n this.withSqliteStatement(\"DELETE FROM be_Prop WHERE Namespace=? AND Name=?\", (stmt) => {\n stmt.bindString(1, IModelDb._settingPropNamespace);\n stmt.bindString(2, name);\n stmt.stepForWrite();\n });\n this.saveChanges(\"delete settings\");\n }\n\n /** Load all setting dictionaries in this iModel into `this.workspace.settings` */\n private loadIModelSettings() {\n if (!this[_nativeDb].isOpen())\n return;\n\n this.withSqliteStatement(\"SELECT Name,StrData FROM be_Prop WHERE Namespace=?\", (stmt) => {\n stmt.bindString(1, IModelDb._settingPropNamespace);\n while (stmt.nextRow()) {\n try {\n const settings = JSON.parse(stmt.getValueString(1));\n this.workspace.settings.addDictionary({ name: stmt.getValueString(0), priority: SettingsPriority.iModel }, settings);\n } catch (e) {\n Workspace.exceptionDiagnosticFn(e as WorkspaceDbLoadError);\n }\n }\n });\n }\n\n /** @internal */\n protected async loadWorkspaceSettings() {\n try {\n const problems: WorkspaceDbLoadError[] = [];\n const settingProps: WorkspaceDbSettingsProps[] = [];\n // Note: we can't use `getArray` here because we only look at dictionaries in the iModel's workspace, not appWorkspace.\n // Also, we must concatenate all entries in all of the dictionaries stored in the iModel into a single array *before*\n // calling `loadSettingsDictionary` since that function will add new dictionaries to the workspace.\n for (const dict of this.workspace.settings.dictionaries) {\n try {\n const props = dict.getSetting<WorkspaceDbSettingsProps[]>(WorkspaceSettingNames.settingsWorkspaces);\n if (props)\n settingProps.push(...IModelHost.settingsSchemas.validateSetting(props, WorkspaceSettingNames.settingsWorkspaces));\n } catch (e) {\n problems.push(e as WorkspaceDbLoadError); // something wrong with the setting stored in the iModel\n }\n }\n if (settingProps.length > 0)\n await this.workspace.loadSettingsDictionary(settingProps, problems);\n\n if (problems.length > 0)\n throwWorkspaceDbLoadErrors(`attempting to load workspace settings for iModel '${this.name}':`, problems);\n } catch (e) {\n // we don't want to throw exceptions when attempting to load Dictionaries. Call the diagnostics function instead.\n Workspace.exceptionDiagnosticFn(e as WorkspaceDbLoadErrors);\n }\n }\n\n /**\n * Controls how [Code]($common)s are copied from this iModel into another iModel, to work around problems with iModels\n * created by older connectors. The [imodel-transformer](https://github.com/iTwin/imodel-transformer) sets this appropriately\n * on your behalf - you should never need to set or interrogate this property yourself.\n * @public\n */\n public get codeValueBehavior(): \"exact\" | \"trim-unicode-whitespace\" {\n return this[_nativeDb].getCodeValueBehavior();\n }\n\n public set codeValueBehavior(newBehavior: \"exact\" | \"trim-unicode-whitespace\") {\n this[_nativeDb].setCodeValueBehavior(newBehavior);\n }\n\n /** @internal */\n public computeRangesForText(args: ComputeRangesForTextLayoutArgs): TextLayoutRanges {\n const props = this[_nativeDb].computeRangesForText(args.chars, args.fontId, args.bold, args.italic, args.widthFactor, args.textHeight);\n return {\n layout: Range2d.fromJSON(props.layout),\n justification: Range2d.fromJSON(props.justification),\n };\n }\n\n /** Writes the contents of a single ECSchema to a file on the local file system.\n * @beta\n */\n public exportSchema(args: ExportSchemaArgs): void {\n processSchemaWriteStatus(this[_nativeDb].exportSchema(args.schemaName, args.outputDirectory, args.outputFileName));\n }\n\n /** Writes the contents of all ECSchemas in this iModel to files in a directory on the local file system.\n * @beta\n */\n public exportSchemas(outputDirectory: LocalFileName): void {\n processSchemaWriteStatus(this[_nativeDb].exportSchemas(outputDirectory));\n }\n\n /** Attempt to simplify the geometry stream of a single [[GeometricElement]] or [[GeometryPart]] as specified by `args`.\n * @beta\n */\n public simplifyElementGeometry(args: SimplifyElementGeometryArgs): IModelStatus {\n return this[_nativeDb].simplifyElementGeometry(args);\n }\n\n /** Attempts to optimize all of the geometry in this iModel by identifying [[GeometryPart]]s that are referenced by exactly one\n * element's geometry stream. Each such reference is replaced by inserting the part's geometry directly into the element's geometry stream.\n * Then, the no-longer-used geometry part is deleted.\n * This can improve performance when a connector inadvertently creates large numbers of parts that are each only used once.\n * @beta\n */\n public inlineGeometryParts(): InlineGeometryPartsResult {\n return this[_nativeDb].inlineGeometryPartReferences();\n }\n\n /** Returns a string representation of the error that most recently arose during an operation on the underlying SQLite database.\n * If no errors have occurred, an empty string is returned.\n * Otherwise, a string of the format `message (code)` is returned, where `message` is a human-readable diagnostic string and `code` is an integer status code.\n * See [SQLite error codes and messages](https://www.sqlite.org/c3ref/errcode.html)\n * @note Do not rely upon this value or its specific contents in error handling logic. It is only intended for use in debugging.\n */\n public getLastError(): string {\n return this[_nativeDb].getLastError();\n }\n}\n\nfunction processSchemaWriteStatus(status: SchemaWriteStatus): void {\n switch (status) {\n case SchemaWriteStatus.Success: return;\n case SchemaWriteStatus.FailedToSaveXml: throw new Error(\"Failed to save schema XML\");\n case SchemaWriteStatus.FailedToCreateXml: throw new Error(\"Failed to create schema XML\");\n case SchemaWriteStatus.FailedToCreateJson: throw new Error(\"Failed to create schema JSON\");\n case SchemaWriteStatus.FailedToWriteFile: throw new Error(\"Failed to write schema file\");\n default: throw new Error(\"Unknown error while exporting schema\");\n }\n}\n\n/** @public */\nexport namespace IModelDb {\n\n /** The collection of models in an [[IModelDb]].\n * @public @preview\n */\n export class Models {\n private readonly _modelCacheSize = 10;\n /** @internal */\n public readonly [_cache] = new LRUMap<Id64String, ModelProps>(this._modelCacheSize);\n /** @internal */\n public readonly [_instanceKeyCache] = new InstanceKeyLRUCache(this._modelCacheSize);\n\n /** @internal */\n public constructor(private _iModel: IModelDb) { }\n\n /** Get the ModelProps with the specified identifier.\n * @param modelId The Model identifier.\n * @throws [[IModelError]] if the model is not found or cannot be loaded.\n * @see tryGetModelProps\n */\n public getModelProps<T extends ModelProps>(id: Id64String): T {\n const model = this.tryGetModelProps<T>(id);\n if (undefined === model)\n throw new IModelError(IModelStatus.NotFound, `Model=${id}`);\n return model;\n }\n\n /** Get the ModelProps with the specified identifier.\n * @param modelId The Model identifier.\n * @returns The ModelProps or `undefined` if the model is not found.\n * @throws [[IModelError]] if the model cannot be loaded.\n * @note Useful for cases when a model may or may not exist and throwing an `Error` would be overkill.\n * @see getModelProps\n */\n public tryGetModelProps<T extends ModelProps>(id: Id64String): T | undefined {\n try {\n if (IModelHost.configuration?.disableThinnedNativeInstanceWorkflow) {\n return this._iModel[_nativeDb].getModel({ id }) as T;\n }\n\n const cachedMdl = this[_cache].get(id);\n if (cachedMdl) {\n return cachedMdl as T;\n }\n\n const options = { useJsNames: true }\n const instanceKey = this.resolveModelKey({ id });\n const rawInstance = this._iModel[_nativeDb].readInstance(instanceKey, options) as ECSqlRow;\n const classDef = this._iModel.getJsClass<typeof Model>(rawInstance.classFullName);\n const modelProps = classDef.deserialize({ row: rawInstance, iModel: this._iModel }) as T;\n this[_cache].set(id, modelProps);\n return modelProps;\n } catch {\n return undefined;\n }\n }\n\n /** Query for the last modified time for a [[Model]].\n * @param modelId The Id of the model.\n * @throws IModelError if `modelId` does not identify a model in the iModel.\n */\n public queryLastModifiedTime(modelId: Id64String): string {\n const sql = `SELECT LastMod FROM ${Model.classFullName} WHERE ECInstanceId=:modelId`;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return this._iModel.withPreparedStatement(sql, (statement) => {\n statement.bindId(\"modelId\", modelId);\n if (DbResult.BE_SQLITE_ROW === statement.step()) {\n return statement.getValue(0).getDateTime();\n }\n throw new IModelError(IModelStatus.InvalidId, `Can't get lastMod time for Model ${modelId}`);\n });\n }\n\n /** Get the Model with the specified identifier.\n * @param modelId The Model identifier.\n * @param modelClass Optional class to validate instance against. This parameter can accept abstract or concrete classes, but should be the same as the template (`T`) parameter.\n * @throws [[IModelError]] if the model is not found, cannot be loaded, or fails validation when `modelClass` is specified.\n * @see tryGetModel\n */\n public getModel<T extends Model>(modelId: Id64String, modelClass?: EntityClassType<Model>): T {\n const model: T | undefined = this.tryGetModel(modelId, modelClass);\n if (undefined === model) {\n throw new IModelError(IModelStatus.NotFound, `Model=${modelId}`);\n }\n return model;\n }\n\n /** Get the Model with the specified identifier.\n * @param modelId The Model identifier.\n * @param modelClass Optional class to validate instance against. This parameter can accept abstract or concrete classes, but should be the same as the template (`T`) parameter.\n * @returns The Model or `undefined` if the model is not found or fails validation when `modelClass` is specified.\n * @throws [[IModelError]] if the model cannot be loaded.\n * @note Useful for cases when a model may or may not exist and throwing an `Error` would be overkill.\n * @see getModel\n */\n public tryGetModel<T extends Model>(modelId: Id64String, modelClass?: EntityClassType<Model>): T | undefined {\n const modelProps = this.tryGetModelProps<ModelProps>(modelId);\n if (undefined === modelProps)\n return undefined; // no Model with that modelId found\n\n const model = this._iModel.constructEntity<T>(modelProps);\n if (undefined === modelClass)\n return model; // modelClass was not specified, cannot call instanceof to validate\n\n return model instanceof modelClass ? model : undefined;\n }\n\n private resolveModelKey(modelIdArg: ModelLoadProps): IModelJsNative.ResolveInstanceKeyResult {\n const baseClassName = \"BisCore:Model\";\n let args: IModelJsNative.ResolveInstanceKeyArgs;\n if (modelIdArg.id) {\n args = { partialKey: { id: modelIdArg.id, baseClassName } };\n } else if (modelIdArg.code) {\n const modelId = this._iModel.elements.getElementProps<ElementProps>({ code: modelIdArg.code }).id;\n if (!modelId)\n throw new IModelError(IModelStatus.NotFound, `Model not found with code: [spec:${modelIdArg.code.spec}, scope:${modelIdArg.code.scope}, value:${modelIdArg.code.value}])`);\n args = { partialKey: { id: modelId, baseClassName } };\n } else {\n throw new IModelError(IModelStatus.InvalidId, `Invalid model identifier: ${JSON.stringify(modelIdArg)}`);\n }\n // Check the cache to avoid unnecessary native calls\n const cachedResult = this[_instanceKeyCache].get(args);\n if (cachedResult) {\n return cachedResult;\n } else {\n const instanceKey = this._iModel[_nativeDb].resolveInstanceKey(args);\n this[_instanceKeyCache].set(args, instanceKey);\n return instanceKey;\n }\n }\n\n /** Get the sub-model of the specified Element.\n * See [[IModelDb.Elements.queryElementIdByCode]] for more on how to find an element by Code.\n * @param modeledElementId Identifies the modeled element.\n * @param modelClass Optional class to validate instance against. This parameter can accept abstract or concrete classes, but should be the same as the template (`T`) parameter.\n * @throws [[IModelError]] if the sub-model is not found, cannot be loaded, or fails validation when `modelClass` is specified.\n * @see tryGetSubModel\n */\n public getSubModel<T extends Model>(modeledElementId: Id64String | GuidString | Code, modelClass?: EntityClassType<Model>): T {\n const modeledElementProps = this._iModel.elements.getElementProps<ElementProps>(modeledElementId);\n if (undefined === modeledElementProps.id || modeledElementProps.id === IModel.rootSubjectId)\n throw new IModelError(IModelStatus.NotFound, \"Root subject does not have a sub-model\");\n return this.getModel<T>(modeledElementProps.id, modelClass);\n }\n\n /** Get the sub-model of the specified Element.\n * See [[IModelDb.Elements.queryElementIdByCode]] for more on how to find an element by Code.\n * @param modeledElementId Identifies the modeled element.\n * @param modelClass Optional class to validate instance against. This parameter can accept abstract or concrete classes, but should be the same as the template (`T`) parameter.\n * @returns The sub-model or `undefined` if the specified element does not have a sub-model or fails validation when `modelClass` is specified.\n * @see getSubModel\n */\n public tryGetSubModel<T extends Model>(modeledElementId: Id64String | GuidString | Code, modelClass?: EntityClassType<Model>): T | undefined {\n const modeledElementProps = this._iModel.elements.tryGetElementProps(modeledElementId);\n if (undefined === modeledElementProps?.id || (IModel.rootSubjectId === modeledElementProps.id))\n return undefined;\n\n return this.tryGetModel<T>(modeledElementProps.id, modelClass);\n }\n\n /** Create a new model in memory.\n * See the example in [[InformationPartitionElement]].\n * @param modelProps The properties to use when creating the model.\n * @throws [[IModelError]] if there is a problem creating the model.\n */\n public createModel<T extends Model>(modelProps: ModelProps): T { return this._iModel.constructEntity<T>(modelProps); }\n\n /** Insert a new model.\n * @param props The data for the new model.\n * @returns The newly inserted model's Id.\n * @throws [[IModelError]] if unable to insert the model.\n */\n public insertModel(props: ModelProps): Id64String {\n try {\n return props.id = this._iModel[_nativeDb].insertModel(props);\n } catch (err: any) {\n const error = new IModelError(err.errorNumber, `Error inserting model [${err.message}], class=${props.classFullName}`);\n error.cause = err;\n throw error;\n }\n }\n\n /** Update an existing model.\n * @param props the properties of the model to change\n * @throws [[IModelError]] if unable to update the model.\n */\n public updateModel(props: UpdateModelOptions): void {\n try {\n if (props.id)\n this[_cache].delete(props.id);\n\n this._iModel[_nativeDb].updateModel(props);\n } catch (err: any) {\n const error = new IModelError(err.errorNumber, `Error updating model [${err.message}], id: ${props.id}`);\n error.cause = err;\n throw error;\n }\n }\n /** Mark the geometry of [[GeometricModel]] as having changed, by recording an indirect change to its GeometryGuid property.\n * Typically the GeometryGuid changes automatically when [[GeometricElement]]s within the model are modified, but\n * explicitly updating it is occasionally useful after modifying definition elements like line styles or materials that indirectly affect the appearance of\n * [[GeometricElement]]s that reference those definition elements in their geometry streams.\n * Cached [Tile]($frontend)s are only invalidated after the geometry guid of the model changes.\n * @note This will throw IModelError with [IModelStatus.VersionTooOld]($core-bentley) if a version of the BisCore schema older than 1.0.11 is present in the iModel.\n * @throws IModelError if unable to update the geometry guid.\n * @see [[TxnManager.onModelGeometryChanged]] for the event emitted in response to such a change.\n */\n public updateGeometryGuid(modelId: Id64String): void {\n this._iModel.models[_cache].delete(modelId);\n const error = this._iModel[_nativeDb].updateModelGeometryGuid(modelId);\n if (error !== IModelStatus.Success)\n throw new IModelError(error, `Error updating geometry guid for model ${modelId}`);\n }\n\n /** Delete one or more existing models.\n * @param ids The Ids of the models to be deleted\n * @throws [[IModelError]]\n */\n public deleteModel(ids: Id64Arg): void {\n Id64.toIdSet(ids).forEach((id) => {\n try {\n this[_cache].delete(id);\n this[_instanceKeyCache].deleteById(id);\n this._iModel[_nativeDb].deleteModel(id);\n } catch (err: any) {\n const error = new IModelError(err.errorNumber, `Error deleting model [${err.message}], id: ${id}`);\n error.cause = err;\n throw error;\n }\n });\n }\n\n /** For each specified [[GeometricModel]], attempts to obtain the union of the volumes of all geometric elements within that model.\n * @param ids The Id or Ids of the [[GeometricModel]]s for which to obtain the extents.\n * @returns An array of results, one per supplied Id, in the order in which the Ids were supplied. If the extents could not be obtained, the\n * corresponding results entry's `extents` will be a \"null\" range (@see [Range3d.isNull]($geometry)) and its `status` will indicate\n * why the extents could not be obtained (e.g., because the Id did not identify a [[GeometricModel]]).\n * @see [[queryRange]] to obtain the union of all of the models' extents.\n */\n public async queryExtents(ids: Id64String | Id64String[]): Promise<ModelExtentsProps[]> {\n ids = typeof ids === \"string\" ? [ids] : ids;\n if (ids.length === 0)\n return [];\n\n return this._iModel[_nativeDb].queryModelExtentsAsync(ids);\n }\n\n /** Computes the union of the volumes of all geometric elements within one or more [[GeometricModel]]s, specified by model Id.\n * @see [[queryExtents]] to obtain discrete volumes for each model.\n */\n public async queryRange(ids: Id64String | Id64String[]): Promise<AxisAlignedBox3d> {\n const results = await this.queryExtents(ids);\n const range = new Range3d();\n for (const result of results)\n range.union(Range3d.fromJSON(result.extents), range);\n\n return range;\n }\n }\n\n export interface GuidMapper {\n getFederationGuidFromId(id: Id64String): GuidString | undefined;\n getIdFromFederationGuid(guid?: GuidString): Id64String | undefined;\n }\n\n /** The collection of elements in an [[IModelDb]].\n * @public @preview\n */\n export class Elements implements GuidMapper {\n private readonly _elementCacheSize = 50;\n /** @internal */\n public readonly [_cache] = new ElementLRUCache(this._elementCacheSize);\n /** @internal */\n public readonly [_instanceKeyCache] = new InstanceKeyLRUCache(this._elementCacheSize);\n\n /** @internal */\n public constructor(private _iModel: IModelDb) { }\n\n public getFederationGuidFromId(id: Id64String): GuidString | undefined {\n return this._iModel.withPreparedSqliteStatement(`SELECT FederationGuid FROM bis_Element WHERE Id=?`, (stmt) => {\n stmt.bindId(1, id);\n return stmt.nextRow() ? stmt.getValueGuid(0) : undefined;\n });\n }\n\n public getIdFromFederationGuid(guid?: GuidString): Id64String | undefined {\n return guid ? this._iModel.withPreparedSqliteStatement(`SELECT Id FROM bis_Element WHERE FederationGuid=?`, (stmt) => {\n stmt.bindGuid(1, guid);\n return !stmt.nextRow() ? undefined : stmt.getValueId(0);\n }) : undefined;\n }\n\n /** Get properties of an Element by Id, FederationGuid, or Code\n * @throws [[IModelError]] if the element is not found or cannot be loaded.\n * @see tryGetElementProps\n */\n public getElementProps<T extends ElementProps>(props: Id64String | GuidString | Code | ElementLoadProps): T {\n const elProp = this.tryGetElementProps<T>(props);\n if (undefined === elProp)\n throw new IModelError(IModelStatus.NotFound, `element not found`);\n return elProp;\n }\n\n private resolveElementKey(props: Id64String | GuidString | Code | ElementLoadProps): IModelJsNative.ResolveInstanceKeyResult {\n const baseClassName = \"BisCore:Element\";\n let args: IModelJsNative.ResolveInstanceKeyArgs;\n if (typeof props === \"string\") {\n args = Id64.isId64(props) ? { partialKey: { id: props, baseClassName } } : { federationGuid: props };\n } else if (props instanceof Code) {\n args = { code: props };\n } else {\n if (props.id) {\n args = { partialKey: { id: props.id, baseClassName } };\n }\n else if (props.federationGuid) {\n args = { federationGuid: props.federationGuid };\n }\n else if (props.code) {\n args = { code: props.code };\n } else {\n throw new IModelError(IModelStatus.InvalidId, \"Element Id or FederationGuid or Code is required\");\n }\n }\n // Check the cache to avoid unnecessary native calls\n const cachedResult = this[_instanceKeyCache].get(args);\n if (cachedResult) {\n return cachedResult;\n } else {\n const instanceKey = this._iModel[_nativeDb].resolveInstanceKey(args);\n this[_instanceKeyCache].set(args, instanceKey);\n return instanceKey;\n }\n }\n\n /** Get properties of an Element by Id, FederationGuid, or Code\n * @returns The properties of the element or `undefined` if the element is not found.\n * @throws [[IModelError]] if the element exists, but cannot be loaded.\n * @note Useful for cases when an element may or may not exist and throwing an `Error` would be overkill.\n * @see getElementProps\n */\n public tryGetElementProps<T extends ElementProps>(props: Id64String | GuidString | Code | ElementLoadProps): T | undefined {\n if (typeof props === \"string\") {\n props = Id64.isId64(props) ? { id: props } : { federationGuid: props };\n } else if (props instanceof Code) {\n props = { code: props };\n }\n try {\n if (IModelHost.configuration?.disableThinnedNativeInstanceWorkflow) {\n return this._iModel[_nativeDb].getElement(props) as T;\n }\n\n const cachedElm = this[_cache].get(props);\n if (cachedElm) {\n return cachedElm.elProps as T;\n }\n\n const options = { ...props, useJsNames: true };\n const instanceKey = this.resolveElementKey(props);\n const rawInstance = this._iModel[_nativeDb].readInstance(instanceKey, options) as ECSqlRow;\n const classDef = this._iModel.getJsClass<typeof Element>(rawInstance.classFullName);\n const elementProps = classDef.deserialize({ row: rawInstance, iModel: this._iModel, options: { element: props } }) as T;\n this[_cache].set({ elProps: elementProps, loadOptions: props });\n return elementProps;\n } catch {\n return undefined;\n }\n }\n\n /** Get an element by Id, FederationGuid, or Code\n * @param elementId either the element's Id, Code, or FederationGuid, or an ElementLoadProps\n * @param elementClass Optional class to validate instance against. This parameter can accept abstract or concrete classes, but should be the same as the template (`T`) parameter.\n * @throws [[IModelError]] if the element is not found, cannot be loaded, or fails validation when `elementClass` is specified.\n * @see tryGetElement\n */\n public getElement<T extends Element>(elementId: Id64String | GuidString | Code | ElementLoadProps, elementClass?: EntityClassType<Element>): T {\n const element = this.tryGetElement<T>(elementId, elementClass);\n if (undefined === element) {\n if (typeof elementId === \"string\" || elementId instanceof Code)\n throw new IModelError(IModelStatus.NotFound, `Element=${elementId.toString()}`);\n else\n throw new IModelError(IModelStatus.NotFound, `Element={id: ${elementId.id} federationGuid: ${elementId.federationGuid}, code={spec: ${elementId.code?.spec}, scope: ${elementId.code?.scope}, value: ${elementId.code?.value}}}`);\n }\n return element;\n }\n\n /** Get an element by Id, FederationGuid, or Code\n * @param elementId either the element's Id, Code, or FederationGuid, or an ElementLoadProps\n * @param elementClass Optional class to validate instance against. This parameter can accept abstract or concrete classes, but should be the same as the template (`T`) parameter.\n * @returns The element or `undefined` if the element is not found or fails validation when `elementClass` is specified.\n * @throws [[IModelError]] if the element exists, but cannot be loaded.\n * @note Useful for cases when an element may or may not exist and throwing an `Error` would be overkill.\n * @see getElement\n */\n public tryGetElement<T extends Element>(elementId: Id64String | GuidString | Code | ElementLoadProps, elementClass?: EntityClassType<Element>): T | undefined {\n if (typeof elementId === \"string\")\n elementId = Id64.isId64(elementId) ? { id: elementId } : { federationGuid: elementId };\n else if (elementId instanceof Code)\n elementId = { code: elementId };\n else\n elementId.onlyBaseProperties = false; // we must load all properties to construct the element.\n\n const elementProps = this.tryGetElementProps<ElementProps>(elementId);\n if (undefined === elementProps)\n return undefined; // no Element with that elementId found\n\n const element = this._iModel.constructEntity<T>(elementProps);\n if (undefined === elementClass)\n return element; // elementClass was not specified, cannot call instanceof to validate\n\n return element instanceof elementClass ? element : undefined;\n }\n\n /** Query for the Id of the element that has a specified code.\n * This method is for the case where you know the element's Code.\n * If you only know the code *value*, then in the simplest case, you can query on that\n * and filter the results.\n * In the simple case, call [[IModelDb.queryEntityIds]], specifying the code value in the where clause of the query params.\n * Or, you can execute an ECSQL select statement. See\n * [frequently used ECSQL queries]($docs/learning/backend/ECSQL-queries.md) for an example.\n * @param code The code to look for\n * @returns The element that uses the code or undefined if the code is not used.\n * @throws IModelError if the code is invalid\n */\n public queryElementIdByCode(code: Required<CodeProps>): Id64String | undefined {\n if (Id64.isInvalid(code.spec))\n throw new IModelError(IModelStatus.InvalidCodeSpec, \"Invalid CodeSpec\");\n\n if (code.value === undefined)\n throw new IModelError(IModelStatus.InvalidCode, \"Invalid Code\");\n\n const codeToQuery = new Code(code);\n try {\n const elementKey = this.resolveElementKey(codeToQuery);\n return Id64.fromString(elementKey.id);\n } catch (err: any) {\n if (err.errorNumber === IModelStatus.NotFound)\n return undefined;\n throw err;\n }\n }\n\n /** Query for an [[Element]]'s last modified time.\n * @param elementId The Id of the element.\n * @throws IModelError if `elementId` does not identify an element in the iModel.\n */\n public queryLastModifiedTime(elementId: Id64String): string {\n const sql = \"SELECT LastMod FROM BisCore:Element WHERE ECInstanceId=:elementId\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return this._iModel.withPreparedStatement<string>(sql, (statement: ECSqlStatement): string => {\n statement.bindId(\"elementId\", elementId);\n if (DbResult.BE_SQLITE_ROW === statement.step())\n return statement.getValue(0).getDateTime();\n throw new IModelError(IModelStatus.InvalidId, `Can't get lastMod time for Element ${elementId}`);\n });\n }\n\n /** Create a new instance of an element.\n * @param elProps The properties of the new element.\n * @throws [[IModelError]] if there is a problem creating the element.\n */\n public createElement<T extends Element>(elProps: ElementProps): T { return this._iModel.constructEntity<T>(elProps); }\n\n /** Insert a new element into the iModel.\n * @param elProps The properties of the new element.\n * @returns The newly inserted element's Id.\n * @throws [[ITwinError]] if unable to insert the element.\n * @note For convenience, the value of `elProps.id` is updated to reflect the resultant element's id.\n * However when `elProps.federationGuid` is not present or undefined, a new Guid will be generated and stored on the resultant element. But\n * the value of `elProps.federationGuid` is *not* updated. Generally, it is best to re-read the element after inserting (e.g. via [[getElementProps]])\n * if you intend to continue working with it. That will ensure its values reflect the persistent state.\n */\n public insertElement(elProps: ElementProps, options?: InsertElementOptions): Id64String {\n try {\n this[_cache].delete({\n id: elProps.id,\n federationGuid: elProps.federationGuid,\n code: elProps.code,\n });\n return elProps.id = this._iModel[_nativeDb].insertElement(elProps, options);\n } catch (err: any) {\n err.message = `Error inserting element [${err.message}]`;\n err.metadata = { elProps };\n throw err;\n }\n }\n\n /**\n * Update some properties of an existing element.\n * All parts of `elProps` are optional *other than* `id`. If id is missing, an exception is thrown.\n *\n * To support clearing a property value, every property name that is present in the `elProps` object will be updated even if the value is `undefined`.\n * To keep an individual element property unchanged, it should either be excluded from the `elProps` parameter or set to its current value.\n * @param elProps the properties of the element to update.\n * @note The values of `classFullName` and `model` *may not be changed* by this method. Further, it will permute the `elProps` object by adding or\n * overwriting their values to the correct values.\n * @throws [[ITwinError]] if unable to update the element.\n */\n public updateElement<T extends ElementProps>(elProps: Partial<T>): void {\n try {\n if (elProps.id) {\n this[_instanceKeyCache].deleteById(elProps.id);\n } else {\n this[_instanceKeyCache].delete({\n federationGuid: elProps.federationGuid,\n code: elProps.code,\n });\n }\n this[_cache].delete({\n id: elProps.id,\n federationGuid: elProps.federationGuid,\n code: elProps.code,\n });\n this._iModel[_nativeDb].updateElement(elProps);\n } catch (err: any) {\n err.message = `Error updating element [${err.message}], id: ${elProps.id}`;\n err.metadata = { elProps };\n throw err;\n }\n }\n\n /** Delete one or more elements from this iModel.\n * @param ids The set of Ids of the element(s) to be deleted\n * @throws [[ITwinError]]\n * @see deleteDefinitionElements\n */\n public deleteElement(ids: Id64Arg): void {\n const iModel = this._iModel;\n Id64.toIdSet(ids).forEach((id) => {\n try {\n this[_cache].delete({ id });\n this[_instanceKeyCache].deleteById(id);\n iModel[_nativeDb].deleteElement(id);\n } catch (err: any) {\n err.message = `Error deleting element [${err.message}], id: ${id}`;\n err.metadata = { elementId: id };\n throw err;\n }\n });\n }\n\n /** DefinitionElements can only be deleted if it can be determined that they are not referenced by other Elements.\n * This *usage query* can be expensive since it may involve scanning the GeometryStreams of all GeometricElements.\n * Since [[deleteElement]] does not perform these additional checks, it fails in order to prevent potentially referenced DefinitionElements from being deleted.\n * This method performs those expensive checks and then calls *delete* if not referenced.\n * @param ids The Ids of the DefinitionElements to attempt to delete. To prevent multiple passes over the same GeometricElements, it is best to pass in the entire array of\n * DefinitionElements rather than calling this method separately for each one. Ids that are not valid DefinitionElements will be ignored.\n * @returns An IdSet of the DefinitionElements that are used and were therefore not deleted.\n * @see deleteElement\n * @beta\n */\n public deleteDefinitionElements(definitionElementIds: Id64Array): Id64Set {\n const usageInfo = this._iModel[_nativeDb].queryDefinitionElementUsage(definitionElementIds);\n if (!usageInfo) {\n throw new IModelError(IModelStatus.BadRequest, \"Error querying for DefinitionElement usage\");\n }\n\n const usedIdSet = usageInfo.usedIds ? Id64.toIdSet(usageInfo.usedIds) : new Set<Id64String>();\n const deleteIfUnused = (ids: Id64Array | undefined, used: Id64Set): void => {\n if (ids) {\n ids.forEach((id) => {\n if (!used.has(id))\n this._iModel.elements.deleteElement(id);\n });\n }\n };\n\n try {\n this._iModel[_nativeDb].beginPurgeOperation();\n deleteIfUnused(usageInfo.spatialCategoryIds, usedIdSet);\n deleteIfUnused(usageInfo.drawingCategoryIds, usedIdSet);\n deleteIfUnused(usageInfo.viewDefinitionIds, usedIdSet);\n deleteIfUnused(usageInfo.geometryPartIds, usedIdSet);\n deleteIfUnused(usageInfo.lineStyleIds, usedIdSet);\n deleteIfUnused(usageInfo.renderMaterialIds, usedIdSet);\n deleteIfUnused(usageInfo.subCategoryIds, usedIdSet);\n deleteIfUnused(usageInfo.textureIds, usedIdSet);\n deleteIfUnused(usageInfo.displayStyleIds, usedIdSet);\n deleteIfUnused(usageInfo.categorySelectorIds, usedIdSet);\n deleteIfUnused(usageInfo.modelSelectorIds, usedIdSet);\n if (usageInfo.otherDefinitionElementIds) {\n this._iModel.elements.deleteElement(usageInfo.otherDefinitionElementIds);\n }\n } finally {\n this._iModel[_nativeDb].endPurgeOperation();\n }\n\n if (usageInfo.viewDefinitionIds) {\n // take another pass in case a deleted ViewDefinition was the only usage of these view-related DefinitionElements\n let viewRelatedIds: Id64Array = [];\n if (usageInfo.displayStyleIds)\n viewRelatedIds = viewRelatedIds.concat(usageInfo.displayStyleIds.filter((id) => usedIdSet.has(id)));\n\n if (usageInfo.categorySelectorIds)\n viewRelatedIds = viewRelatedIds.concat(usageInfo.categorySelectorIds.filter((id) => usedIdSet.has(id)));\n\n if (usageInfo.modelSelectorIds)\n viewRelatedIds = viewRelatedIds.concat(usageInfo.modelSelectorIds.filter((id) => usedIdSet.has(id)));\n\n if (viewRelatedIds.length > 0) {\n const viewRelatedUsageInfo = this._iModel[_nativeDb].queryDefinitionElementUsage(viewRelatedIds);\n if (viewRelatedUsageInfo) {\n const usedViewRelatedIdSet: Id64Set = viewRelatedUsageInfo.usedIds ? Id64.toIdSet(viewRelatedUsageInfo.usedIds) : new Set<Id64String>();\n try {\n this._iModel[_nativeDb].beginPurgeOperation();\n deleteIfUnused(viewRelatedUsageInfo.displayStyleIds, usedViewRelatedIdSet);\n deleteIfUnused(viewRelatedUsageInfo.categorySelectorIds, usedViewRelatedIdSet);\n deleteIfUnused(viewRelatedUsageInfo.modelSelectorIds, usedViewRelatedIdSet);\n } finally {\n this._iModel[_nativeDb].endPurgeOperation();\n }\n\n viewRelatedIds.forEach((id) => {\n if (!usedViewRelatedIdSet.has(id))\n usedIdSet.delete(id);\n });\n }\n }\n }\n\n return usedIdSet;\n }\n\n /** Query for the child elements of the specified element.\n * @returns Returns an array of child element identifiers.\n * @throws [[IModelError]]\n */\n public queryChildren(elementId: Id64String): Id64String[] {\n const sql = \"SELECT ECInstanceId FROM BisCore:Element WHERE Parent.Id=:elementId\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return this._iModel.withPreparedStatement(sql, (statement: ECSqlStatement): Id64String[] => {\n statement.bindId(\"elementId\", elementId);\n const childIds: Id64String[] = [];\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n childIds.push(statement.getValue(0).getId());\n }\n return childIds;\n });\n }\n\n /** Query for the parent of the specified element.\n * @param elementId The element to check for a parent\n * @returns The identifier of the element's parent or undefined if the element has no parent\n * @throws [[IModelError]] if the element does not exist\n */\n public queryParent(elementId: Id64String): Id64String | undefined {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return this._iModel.withPreparedStatement(`select parent.id from ${Element.classFullName} where ecinstanceid=?`, (stmt) => {\n stmt.bindId(1, elementId);\n if (stmt.step() !== DbResult.BE_SQLITE_ROW)\n throw new IModelError(IModelStatus.NotFound, `Element=${elementId}`);\n const value = stmt.getValue(0);\n return value.isNull ? undefined : value.getId();\n });\n }\n\n /** Returns true if the specified Element has a sub-model.\n * @see [[IModelDb.Models.getSubModel]]\n */\n public hasSubModel(elementId: Id64String): boolean {\n if (IModel.rootSubjectId === elementId)\n return false; // Special case since the RepositoryModel does not sub-model the root Subject\n\n // A sub-model will have the same Id value as the element it is describing\n const sql = \"SELECT ECInstanceId FROM BisCore:Model WHERE ECInstanceId=:elementId\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return this._iModel.withPreparedStatement(sql, (statement: ECSqlStatement): boolean => {\n statement.bindId(\"elementId\", elementId);\n return DbResult.BE_SQLITE_ROW === statement.step();\n });\n }\n\n /** Get the root subject element. */\n public getRootSubject(): Subject { return this.getElement(IModel.rootSubjectId); }\n\n /** Query for aspects of a particular class (polymorphically) associated with this element.\n * @throws [[IModelError]]\n * @note Most cases should use the [[getAspects]] wrapper rather than calling this method directly.\n * @internal\n */\n public _queryAspects(elementId: Id64String, fromClassFullName: string, excludedClassFullNames?: Set<string>): ElementAspect[] { // eslint-disable-line @typescript-eslint/naming-convention\n const sql = `SELECT ECInstanceId,ECClassId FROM ${fromClassFullName} WHERE Element.Id=:elementId ORDER BY ECClassId,ECInstanceId`; // ORDER BY to maximize statement reuse\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return this._iModel.withPreparedStatement(sql, (statement: ECSqlStatement): ElementAspect[] => {\n statement.bindId(\"elementId\", elementId);\n const aspects: ElementAspect[] = [];\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const aspectInstanceId: Id64String = statement.getValue(0).getId();\n const aspectClassFullName: string = statement.getValue(1).getClassNameForClassId().replace(\".\", \":\");\n if ((undefined === excludedClassFullNames) || (!excludedClassFullNames.has(aspectClassFullName))) {\n aspects.push(this._queryAspect(aspectInstanceId, aspectClassFullName));\n }\n }\n return aspects;\n });\n }\n\n /** Query for aspect by ECInstanceId\n * @throws [[IModelError]]\n */\n private _queryAspect(aspectInstanceId: Id64String, aspectClassName: string): ElementAspect {\n const sql = `SELECT * FROM ${aspectClassName} WHERE ECInstanceId=:aspectInstanceId`;\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const aspect: ElementAspectProps | undefined = this._iModel.withPreparedStatement(sql, (statement: ECSqlStatement): ElementAspectProps | undefined => {\n statement.bindId(\"aspectInstanceId\", aspectInstanceId);\n if (DbResult.BE_SQLITE_ROW === statement.step()) {\n const aspectProps: ElementAspectProps = statement.getRow(); // start with everything that SELECT * returned\n aspectProps.classFullName = (aspectProps as any).className.replace(\".\", \":\"); // add in property required by EntityProps\n (aspectProps as any).className = undefined; // clear property from SELECT * that we don't want in the final instance\n return aspectProps;\n }\n return undefined;\n });\n if (undefined === aspect) {\n throw new IModelError(IModelStatus.NotFound, `ElementAspect not found ${aspectInstanceId}, ${aspectClassName}`);\n }\n return this._iModel.constructEntity<ElementAspect>(aspect);\n }\n\n /** Get a single ElementAspect by its instance Id.\n * @throws [[IModelError]]\n */\n public getAspect(aspectInstanceId: Id64String): ElementAspect {\n const sql = \"SELECT ECClassId FROM BisCore:ElementAspect WHERE ECInstanceId=:aspectInstanceId\";\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const aspectClassFullName = this._iModel.withPreparedStatement(sql, (statement: ECSqlStatement): string | undefined => {\n statement.bindId(\"aspectInstanceId\", aspectInstanceId);\n return (DbResult.BE_SQLITE_ROW === statement.step()) ? statement.getValue(0).getClassNameForClassId().replace(\".\", \":\") : undefined;\n });\n if (undefined === aspectClassFullName) {\n throw new IModelError(IModelStatus.NotFound, `ElementAspect not found ${aspectInstanceId}`);\n }\n return this._queryAspect(aspectInstanceId, aspectClassFullName);\n }\n\n private static classMap = new Map<string, string>();\n\n private runInstanceQuery(sql: string, elementId: Id64String, excludedClassFullNames?: Set<string>): ElementAspect[] {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return this._iModel.withPreparedStatement(sql, (statement: ECSqlStatement) => {\n statement.bindId(\"elementId\", elementId);\n const aspects: ElementAspect[] = [];\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\n const row: object = {};\n const parsedRow = JSON.parse(statement.getValue(0).getString());\n // eslint-disable-next-line guard-for-in\n for (const key in parsedRow) {\n const jsName = ECJsNames.toJsName(key[0].toUpperCase() + key.substring(1));\n Object.defineProperty(row, jsName, { enumerable: true, configurable: true, writable: true, value: parsedRow[key] });\n }\n const aspectProps: ElementAspectProps = row as any;\n aspectProps.classFullName = (aspectProps as any).className.replace(\".\", \":\"); // add in property required by EntityProps\n (aspectProps as any).className = undefined; // clear property from SELECT $ that we don't want in the final instance\n if ((undefined === excludedClassFullNames) || !excludedClassFullNames.has(aspectProps.classFullName))\n aspects.push(this._iModel.constructEntity<ElementAspect>(aspectProps));\n }\n return aspects;\n });\n }\n\n /** Get the ElementAspect instances that are owned by the specified element.\n * @param elementId Get ElementAspects associated with this Element\n * @param aspectClassFullName Optionally filter ElementAspects polymorphically by this class name\n * @param excludedClassFullNames Optional filter to exclude aspects from classes in the given set.\n * @throws [[IModelError]]\n */\n public getAspects(elementId: Id64String, aspectClassFullName?: string, excludedClassFullNames?: Set<string>): ElementAspect[] {\n if (aspectClassFullName === undefined) {\n const allAspects: ElementAspect[] = this.runInstanceQuery(`SELECT $ FROM (\n SELECT ECInstanceId, ECClassId FROM Bis.ElementMultiAspect WHERE Element.Id = :elementId\n UNION ALL\n SELECT ECInstanceId, ECClassId FROM Bis.ElementUniqueAspect WHERE Element.Id = :elementId) OPTIONS USE_JS_PROP_NAMES DO_NOT_TRUNCATE_BLOB`, elementId, excludedClassFullNames);\n if (allAspects.length === 0)\n Logger.logInfo(BackendLoggerCategory.ECDb, `No aspects found for class ${aspectClassFullName} and element ${elementId}`);\n return allAspects;\n }\n\n // Check if class is abstract\n const fullClassName = aspectClassFullName.replace(\".\", \":\").split(\":\");\n const val = this._iModel[_nativeDb].getECClassMetaData(fullClassName[0], fullClassName[1]);\n if (val.result !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n const metaData = new EntityMetaData(JSON.parse(val.result));\n if (metaData.modifier !== \"Abstract\") // Class is not abstract, use normal query to retrieve aspects\n return this._queryAspects(elementId, aspectClassFullName, excludedClassFullNames);\n }\n // If class specified is abstract, get the list of all classes derived from it\n let classIdList = IModelDb.Elements.classMap.get(aspectClassFullName);\n if (classIdList === undefined) {\n const classIds: string[] = [];\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n this._iModel.withPreparedStatement(`select SourceECInstanceId from meta.ClassHasAllBaseClasses where TargetECInstanceId = (select ECInstanceId from meta.ECClassDef where Name='${fullClassName[1]}'\n and Schema.Id = (select ECInstanceId from meta.ECSchemaDef where Name='${fullClassName[0]}')) and SourceECInstanceId != TargetECInstanceId`,\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n (statement: ECSqlStatement) => {\n while (statement.step() === DbResult.BE_SQLITE_ROW)\n classIds.push(statement.getValue(0).getId());\n });\n if (classIds.length > 0) {\n classIdList = classIds.join(\",\");\n IModelDb.Elements.classMap.set(aspectClassFullName, classIdList);\n }\n }\n if (classIdList === undefined) {\n Logger.logError(BackendLoggerCategory.ECDb, `No aspects found for the class ${aspectClassFullName}`);\n return [];\n }\n // Execute an instance query to retrieve all aspects from all the derived classes\n const aspects: ElementAspect[] = this.runInstanceQuery(`SELECT $ FROM (\n SELECT ECInstanceId, ECClassId FROM Bis.ElementMultiAspect WHERE Element.Id = :elementId AND ECClassId IN (${classIdList})\n UNION ALL\n SELECT ECInstanceId, ECClassId FROM Bis.ElementUniqueAspect WHERE Element.Id = :elementId AND ECClassId IN (${classIdList})\n ) OPTIONS USE_JS_PROP_NAMES DO_NOT_TRUNCATE_BLOB`, elementId, excludedClassFullNames);\n if (aspects.length === 0)\n Logger.logInfo(BackendLoggerCategory.ECDb, `No aspects found for class ${aspectClassFullName} and element ${elementId}`);\n return aspects;\n }\n\n /** Insert a new ElementAspect into the iModel.\n * @param aspectProps The properties of the new ElementAspect.\n * @throws [[IModelError]] if unable to insert the ElementAspect.\n * @returns the id of the newly inserted aspect.\n * @note Aspect Ids may collide with element Ids, so don't put both in a container like Set or Map\n * use [EntityReference]($common) for that instead.\n */\n public insertAspect(aspectProps: ElementAspectProps): Id64String {\n try {\n return this._iModel[_nativeDb].insertElementAspect(aspectProps);\n } catch (err: any) {\n const error = new IModelError(err.errorNumber, `Error inserting ElementAspect [${err.message}], class: ${aspectProps.classFullName}`, aspectProps);\n error.cause = err;\n throw error;\n }\n }\n\n /** Update an exist ElementAspect within the iModel.\n * @param aspectProps The properties to use to update the ElementAspect.\n * @throws [[IModelError]] if unable to update the ElementAspect.\n */\n public updateAspect(aspectProps: ElementAspectProps): void {\n try {\n this._iModel[_nativeDb].updateElementAspect(aspectProps);\n } catch (err: any) {\n const error = new IModelError(err.errorNumber, `Error updating ElementAspect [${err.message}], id: ${aspectProps.id}`, aspectProps);\n error.cause = err;\n throw error;\n }\n }\n\n /** Delete one or more ElementAspects from this iModel.\n * @param aspectInstanceIds The set of instance Ids of the ElementAspect(s) to be deleted\n * @throws [[IModelError]] if unable to delete the ElementAspect.\n */\n public deleteAspect(aspectInstanceIds: Id64Arg): void {\n const iModel = this._iModel;\n Id64.toIdSet(aspectInstanceIds).forEach((aspectInstanceId) => {\n try {\n iModel[_nativeDb].deleteElementAspect(aspectInstanceId);\n } catch (err: any) {\n const error = new IModelError(err.errorNumber, `Error deleting ElementAspect [${err.message}], id: ${aspectInstanceId}`);\n error.cause = err;\n throw error;\n }\n });\n }\n }\n\n /** The collection of views in an [[IModelDb]].\n * @public @preview\n */\n export class Views {\n /** @internal */\n public constructor(private _iModel: IModelDb) { }\n private static viewStoreProperty = { namespace: \"itwinjs\", name: \"DefaultViewStore\" };\n private _viewStore?: ViewStore.CloudAccess;\n public get hasViewStore(): boolean { return undefined !== this._viewStore; }\n\n /** @beta */\n public get viewStore(): ViewStore.CloudAccess {\n if (undefined === this._viewStore)\n throw new IModelError(IModelStatus.BadRequest, \"No ViewStore available\");\n return this._viewStore;\n }\n public set viewStore(viewStore: ViewStore.CloudAccess) {\n this._viewStore = viewStore;\n }\n /** @beta */\n public async accessViewStore(args: { props?: CloudSqlite.ContainerProps, accessLevel?: BlobContainer.RequestAccessLevel }): Promise<ViewStore.CloudAccess> {\n let props = args.props;\n if (undefined === props) {\n const propsString = this._iModel.queryFilePropertyString(Views.viewStoreProperty);\n if (!propsString)\n ViewStoreError.throwError(\"no-viewstore\", { message: \"iModel does not have a default ViewStore\" });\n\n props = JSON.parse(propsString) as CloudSqlite.ContainerProps;\n }\n const accessToken = await CloudSqlite.requestToken({\n ...props,\n accessLevel: args.accessLevel,\n });\n if (!this._viewStore)\n this._viewStore = new ViewStore.CloudAccess({ ...props, accessToken, iModel: this._iModel });\n\n this._viewStore.container.accessToken = accessToken;\n return this._viewStore;\n }\n\n /** @beta */\n public saveDefaultViewStore(arg: CloudSqlite.ContainerProps): void {\n const props = { baseUri: arg.baseUri, containerId: arg.containerId, storageType: arg.storageType }; // sanitize to only known properties\n this._iModel.saveFileProperty(Views.viewStoreProperty, JSON.stringify(props));\n this._iModel.saveChanges(\"update default ViewStore\");\n }\n\n /** Query for the array of ViewDefinitionProps of the specified class and matching the specified IsPrivate setting.\n * @param className Query for view definitions of this class.\n * @param wantPrivate If true, include private view definitions.\n */\n public queryViewDefinitionProps(className: string = \"BisCore.ViewDefinition\", limit = IModelDb.defaultLimit, offset = 0, wantPrivate: boolean = false): ViewDefinitionProps[] {\n const where = (wantPrivate === false) ? \"IsPrivate=FALSE\" : \"\";\n const ids = this._iModel.queryEntityIds({ from: className, limit, offset, where });\n\n const props: ViewDefinitionProps[] = [];\n const imodel = this._iModel;\n ids.forEach((id) => {\n try {\n props.push(imodel.elements.getElementProps<ViewDefinitionProps>(id));\n } catch { }\n });\n\n return props;\n }\n\n /** Default parameters for iterating/querying ViewDefinitions. Includes all subclasses of ViewDefinition, excluding only those marked 'private'. */\n public static readonly defaultQueryParams: ViewQueryParams = { from: \"BisCore.ViewDefinition\", where: \"IsPrivate=FALSE\" };\n\n /** Iterate all ViewDefinitions matching the supplied query.\n * @param params Specifies the query by which views are selected.\n * @param callback Function invoked for each ViewDefinition matching the query. Return false to terminate iteration, true to continue.\n * @returns true if all views were iterated, false if iteration was terminated early due to callback returning false.\n */\n public iterateViews(params: ViewQueryParams, callback: (view: ViewDefinition) => boolean): boolean {\n const ids = this._iModel.queryEntityIds(params);\n let finished = true;\n for (const id of ids) {\n try {\n const view = this._iModel.elements.getElement(id);\n if (undefined !== view && view instanceof ViewDefinition) {\n finished = callback(view);\n if (!finished)\n break;\n }\n } catch { }\n }\n\n return finished;\n }\n\n private loadViewData(viewId: ViewIdString, options?: ViewStateLoadProps): ViewStateProps {\n const iModel = this._iModel;\n const elements = iModel.elements;\n const loader = (() => {\n if (ViewStoreRpc.isViewStoreId(viewId)) {\n const reader = this.viewStore.reader;\n return {\n loadView: () => reader.getViewDefinitionSync({ viewId }),\n loadCategorySelector: (id: ViewIdString) => reader.getCategorySelectorSync({ id, bindings: options?.queryBindings?.categorySelector }),\n loadDisplayStyle: (id: ViewIdString) => reader.getDisplayStyleSync({ id, opts: options?.displayStyle }),\n loadModelSelector: (id: ViewIdString) => reader.getModelSelectorSync({ id, bindings: options?.queryBindings?.modelSelector }),\n };\n }\n return {\n loadView: () => elements.getElementProps<ViewDefinitionProps>(viewId),\n loadCategorySelector: (id: Id64String) => elements.getElementProps<CategorySelectorProps>(id),\n loadDisplayStyle: (id: Id64String) => elements.getElementProps<DisplayStyleProps>({ id, displayStyle: options?.displayStyle }),\n loadModelSelector: (id: Id64String) => elements.getElementProps<ModelSelectorProps>(id),\n };\n })();\n\n const props = {} as ViewStateProps;\n props.viewDefinitionProps = loader.loadView();\n props.categorySelectorProps = loader.loadCategorySelector(props.viewDefinitionProps.categorySelectorId);\n props.displayStyleProps = loader.loadDisplayStyle(props.viewDefinitionProps.displayStyleId);\n const modelSelectorId = (props.viewDefinitionProps as SpatialViewDefinitionProps).modelSelectorId;\n if (modelSelectorId !== undefined)\n props.modelSelectorProps = loader.loadModelSelector(modelSelectorId);\n\n const viewClass = iModel.getJsClass(props.viewDefinitionProps.classFullName);\n const baseModelId = (props.viewDefinitionProps as ViewDefinition2dProps).baseModelId;\n if (viewClass.is(SheetViewDefinition)) {\n props.sheetProps = elements.getElementProps<SheetProps>(baseModelId);\n props.sheetAttachments = Array.from(iModel.queryEntityIds({\n from: \"BisCore.ViewAttachment\",\n where: `Model.Id=${baseModelId}`,\n }));\n } else if (viewClass.is(DrawingViewDefinition)) {\n // Include information about the associated [[SectionDrawing]], if any.\n // NB: The SectionDrawing ECClass may not exist in the iModel's version of the BisCore ECSchema.\n const sectionDrawing = iModel.elements.tryGetElement<SectionDrawing>(baseModelId);\n if (sectionDrawing && sectionDrawing.spatialView && Id64.isValidId64(sectionDrawing.spatialView.id)) {\n props.sectionDrawing = {\n spatialView: sectionDrawing.spatialView.id,\n displaySpatialView: true === sectionDrawing.jsonProperties.displaySpatialView,\n drawingToSpatialTransform: sectionDrawing.jsonProperties.drawingToSpatialTransform,\n };\n }\n }\n return props;\n }\n\n /** Obtain a [ViewStateProps]($common) for a [[ViewDefinition]] specified by ViewIdString. */\n public async getViewStateProps(viewDefinitionId: ViewIdString, options?: ViewStateLoadProps): Promise<ViewStateProps> {\n const viewStateData = this.loadViewData(viewDefinitionId, options);\n const baseModelId = (viewStateData.viewDefinitionProps as ViewDefinition2dProps).baseModelId;\n if (baseModelId) {\n const drawingExtents = await this._iModel.models.queryRange(baseModelId);\n if (!drawingExtents.isNull)\n viewStateData.modelExtents = drawingExtents.toJSON();\n }\n return viewStateData;\n }\n\n private getViewThumbnailArg(viewDefinitionId: ViewIdString): FilePropertyProps {\n if (!Id64.isValid(viewDefinitionId))\n throw new IModelError(IModelStatus.BadArg, \"illegal thumbnail id\");\n\n return { namespace: \"dgn_View\", name: \"Thumbnail\", id: viewDefinitionId };\n }\n\n /** Get the thumbnail for a view.\n * @param viewDefinitionId The Id of the view for thumbnail\n * @returns the ThumbnailProps, or undefined if no thumbnail exists.\n */\n public getThumbnail(viewDefinitionId: Id64String): ThumbnailProps | undefined {\n const viewArg = this.getViewThumbnailArg(viewDefinitionId);\n const sizeProps = this._iModel[_nativeDb].queryFileProperty(viewArg, true) as string;\n if (undefined === sizeProps)\n return undefined;\n\n const out = JSON.parse(sizeProps) as ThumbnailProps;\n out.image = this._iModel[_nativeDb].queryFileProperty(viewArg, false) as Uint8Array;\n return out;\n }\n\n /** Save a thumbnail for a view.\n * @param viewDefinitionId The Id of the view for thumbnail\n * @param thumbnail The thumbnail data.\n * @returns 0 if successful\n */\n public saveThumbnail(viewDefinitionId: Id64String, thumbnail: ThumbnailProps): number {\n const viewArg = this.getViewThumbnailArg(viewDefinitionId);\n const props = { format: thumbnail.format, height: thumbnail.height, width: thumbnail.width };\n this._iModel[_nativeDb].saveFileProperty(viewArg, JSON.stringify(props), thumbnail.image);\n return 0;\n }\n\n /** Set the default view property the iModel.\n * @param viewId The Id of the ViewDefinition to use as the default\n * @deprecated in 4.2.0 - will not be removed until after 2026-06-13. Avoid setting this property - it is not practical for one single view to serve the needs of the many applications\n * that might wish to view the contents of the iModel.\n */\n public setDefaultViewId(viewId: Id64String): void {\n const spec = { namespace: \"dgn_View\", name: \"DefaultView\" };\n const blob32 = new Uint32Array(2);\n blob32[0] = Id64.getLowerUint32(viewId);\n blob32[1] = Id64.getUpperUint32(viewId);\n const blob8 = new Uint8Array(blob32.buffer);\n this._iModel.saveFileProperty(spec, undefined, blob8);\n }\n }\n\n /** Represents the current state of a pollable tile content request.\n * Note: lack of a \"completed\" state because polling a completed request returns the content as a Uint8Array.\n * @internal\n */\n export enum TileContentState {\n New, // Request was just created and enqueued.\n Pending, // Request is enqueued but not yet being processed.\n Loading, // Request is being actively processed.\n }\n\n /** @internal */\n export class Tiles {\n /** @internal */\n public constructor(private _iModel: IModelDb) { }\n\n /** @internal */\n public async requestTileTreeProps(id: string): Promise<IModelTileTreeProps> {\n\n return new Promise<IModelTileTreeProps>((resolve, reject) => {\n this._iModel[_nativeDb].getTileTree(id, (ret: IModelJsNative.ErrorStatusOrResult<IModelStatus, any>) => {\n if (undefined !== ret.error)\n reject(new IModelError(ret.error.status, `TreeId=${id}`));\n else\n resolve(ret.result as IModelTileTreeProps);\n });\n });\n }\n\n private pollTileContent(resolve: (arg0: IModelJsNative.TileContent) => void, reject: (err: unknown) => void, treeId: string, tileId: string) {\n\n let ret;\n try {\n ret = this._iModel[_nativeDb].pollTileContent(treeId, tileId);\n } catch (err) {\n // Typically \"imodel not open\".\n reject(err);\n return;\n }\n\n if (ret.error) {\n reject(new IModelError(ret.error.status, `TreeId=${treeId} TileId=${tileId}`));\n } else if (ret.result && typeof ret.result !== \"number\") { // if type is not a number, it's the TileContent interface\n const res = ret.result;\n const iModelId = this._iModel.iModelId;\n\n const tileSizeThreshold = IModelHost.logTileSizeThreshold;\n const tileSize = res.content.length;\n if (tileSize > tileSizeThreshold) {\n Logger.logWarning(loggerCategory, \"Tile size (in bytes) larger than specified threshold\", () => ({ tileSize, tileSizeThreshold, treeId, tileId, iModelId }));\n }\n\n const loadTimeThreshold = IModelHost.logTileLoadTimeThreshold;\n const loadTime = res.elapsedSeconds;\n if (loadTime > loadTimeThreshold) {\n Logger.logWarning(loggerCategory, \"Tile load time (in seconds) greater than specified threshold\", () => ({ loadTime, loadTimeThreshold, treeId, tileId, iModelId }));\n }\n\n resolve(res);\n } else { // if the type is a number, it's the TileContentState enum\n // ###TODO: Decide appropriate timeout interval. May want to switch on state (new vs loading vs pending)\n setTimeout(() => this.pollTileContent(resolve, reject, treeId, tileId), 10);\n }\n }\n\n /** @internal */\n public async requestTileContent(treeId: string, tileId: string): Promise<IModelJsNative.TileContent> {\n return new Promise<IModelJsNative.TileContent>((resolve, reject) => {\n this.pollTileContent(resolve, reject, treeId, tileId);\n });\n }\n\n /** @internal */\n public async getTileContent(treeId: string, tileId: string): Promise<Uint8Array> {\n const ret = await new Promise<IModelJsNative.ErrorStatusOrResult<any, Uint8Array>>((resolve) => {\n this._iModel[_nativeDb].getTileContent(treeId, tileId, resolve);\n });\n\n if (undefined !== ret.error) {\n throw new IModelError(ret.error.status, `TreeId=${treeId} TileId=${tileId}`);\n }\n\n assert(undefined !== ret.result);\n return ret.result;\n }\n }\n}\n\n/**\n * Argument to a function that can accept a valid access token.\n * @public\n */\nexport interface TokenArg {\n /** If present, the access token for the requested operation. If not present, use [[IModelHost.getAccessToken]] */\n readonly accessToken?: AccessToken;\n}\n\n/** Augments a [[SnapshotDbOpenArgs]] or [[OpenBriefcaseArgs]] with a [CloudContainer]($docs/learning/backend/Workspace.md).\n * The properties are this interface are reserved for internal use only.\n * @public\n */\nexport interface CloudContainerArgs {\n /** @internal */\n container?: CloudSqlite.CloudContainer;\n}\n\n/** Options to open a [SnapshotDb]($backend).\n * @public\n */\nexport type SnapshotDbOpenArgs = SnapshotOpenOptions & CloudContainerArgs & OpenSqliteArgs;\n\n/**\n * Arguments to open a BriefcaseDb\n * @public\n */\nexport type OpenBriefcaseArgs = OpenBriefcaseProps & CloudContainerArgs & OpenSqliteArgs;\n\n/**\n * A local copy of an iModel from iModelHub that can pull and potentially push changesets.\n * BriefcaseDb raises a set of events to allow apps and subsystems to track its object life cycle, including [[onOpen]] and [[onOpened]].\n * @public\n */\nexport class BriefcaseDb extends IModelDb {\n /** Manages local changes to this briefcase. */\n public readonly txns: TxnManager = new TxnManager(this);\n\n /** override superclass method */\n public override get isBriefcase(): boolean { return true; }\n\n /* the BriefcaseId of the briefcase opened with this BriefcaseDb */\n public readonly briefcaseId: BriefcaseId;\n\n private _skipSyncSchemasOnPullAndPush?: true;\n\n /** @internal */\n public get skipSyncSchemasOnPullAndPush() { return this._skipSyncSchemasOnPullAndPush ?? false; }\n\n /**\n * Event raised just before a BriefcaseDb is opened. Supplies the arguments that will be used to open the BriefcaseDb.\n * Throw an exception to stop the open.\n *\n * **Example:**\n * ``` ts\n * [[include:BriefcaseDb.onOpen]]\n * ```\n */\n public static readonly onOpen = new BeEvent<(_args: OpenBriefcaseArgs) => void>();\n\n /**\n * Event raised just after a BriefcaseDb is opened. Supplies the newly opened BriefcaseDb and the arguments that were used to open it.\n *\n * **Example:**\n * ``` ts\n * [[include:BriefcaseDb.onOpened]]\n * ```\n */\n public static readonly onOpened = new BeEvent<(_iModelDb: BriefcaseDb, _args: OpenBriefcaseArgs) => void>();\n\n /** Event raised after a BriefcaseDb has been closed. */\n public readonly onClosed = new BeEvent<() => void>();\n\n /** @alpha */\n public static readonly onCodeServiceCreated = new BeEvent<(briefcase: BriefcaseDb) => void>();\n\n public static override findByKey(key: string): BriefcaseDb {\n return super.findByKey(key) as BriefcaseDb;\n }\n\n public static override tryFindByKey(key: string): BriefcaseDb | undefined {\n const db = super.tryFindByKey(key);\n return db?.isBriefcaseDb() ? db : undefined;\n }\n\n /**\n * Permanently discards any local changes made to this briefcase, reverting the briefcase to its last synchronized state.\n * This operation cannot be undone. By default, all locks held by this briefcase will be released unless the `retainLocks` option is specified.\n * @Note This operation can be performed at any point including after failed rebase attempts.\n * @param args - Options for discarding changes.\n * @param args.retainLocks - If `true`, retains all currently held locks after discarding changes. If omitted or `false`, all locks will be released.\n * @returns A promise that resolves when the operation is complete.\n * @throws May throw if discarding changes fails.\n *\n * @public @preview\n */\n public async discardChanges(args?: { retainLocks?: true }): Promise<void> {\n Logger.logInfo(loggerCategory, \"Discarding local changes\");\n if (this.txns.isIndirectChanges) {\n throw new IModelError(IModelStatus.BadRequest, \"Cannot discard changes when there are indirect changes\");\n }\n\n if (this.txns.rebaser.inProgress() && !this.txns.rebaser.isAborting) {\n throw new IModelError(IModelStatus.BadRequest, \"Cannot discard changes while a rebase is in progress\");\n }\n\n this.clearCaches();\n this[_nativeDb].clearECDbCache();\n this[_nativeDb].discardLocalChanges();\n this[_resetIModelDb]();\n if (args?.retainLocks) {\n return;\n }\n\n // attempt to release locks must happen after changes are undone successfully\n Logger.logInfo(loggerCategory, \"Releasing locks after discarding changes\");\n await this.locks.releaseAllLocks();\n }\n\n /**\n * The Guid that identifies the *context* that owns this iModel.\n * GuidString | undefined for the superclass, but required for BriefcaseDb\n * */\n public override get iTwinId(): GuidString { return super.iTwinId!; } // eslint-disable-line @typescript-eslint/no-non-null-assertion\n\n /**\n * Determine whether this BriefcaseDb should use a lock server.\n * All must be true:\n * - file is open for write\n * - has an assigned briefcaseId\n * - the \"no locking\" flag is not present. This is a property of an iModel, established when the iModel is created in IModelHub.\n */\n protected get useLockServer(): boolean {\n return !this[_nativeDb].isReadonly() && (this.briefcaseId !== BriefcaseIdValue.Unassigned) && (undefined === this[_nativeDb].queryLocalValue(BriefcaseLocalValue.NoLocking));\n }\n\n // if the iModel uses a lock server, create a ServerBasedLocks LockControl for this BriefcaseDb.\n protected makeLockControl() {\n if (this.useLockServer)\n this._locks = createServerBasedLocks(this);\n }\n\n protected constructor(args: { nativeDb: IModelJsNative.DgnDb, key: string, openMode: OpenMode, briefcaseId: number }) {\n super({ ...args, changeset: args.nativeDb.getCurrentChangeset() });\n this._openMode = args.openMode;\n this.briefcaseId = args.briefcaseId;\n this.makeLockControl();\n }\n\n /** Upgrades the profile or domain schemas. File must be closed before this call and is always left closed. */\n private static async doUpgrade(briefcase: OpenBriefcaseArgs, upgradeOptions: UpgradeOptions, description: string): Promise<void> {\n let wasChanges = false;\n const executeUpgrade = () => {\n const nativeDb = this.openDgnDb({ path: briefcase.fileName }, OpenMode.ReadWrite, upgradeOptions); // performs the upgrade\n wasChanges = nativeDb.hasPendingTxns();\n nativeDb.closeFile();\n };\n\n const isSchemaSyncEnabled = await withBriefcaseDb(briefcase, async (db) => {\n await SchemaSync.pull(db);\n return db[_nativeDb].schemaSyncEnabled();\n }) as boolean;\n\n if (isSchemaSyncEnabled) {\n await SchemaSync.withLockedAccess(briefcase, { openMode: OpenMode.Readonly, operationName: \"schema sync\" }, async (syncAccess) => {\n const schemaSyncDbUri = syncAccess.getUri();\n executeUpgrade();\n await withBriefcaseDb(briefcase, async (db) => {\n db[_nativeDb].schemaSyncPush(schemaSyncDbUri);\n db.saveChanges();\n });\n syncAccess.synchronizeWithCloud();\n });\n } else {\n executeUpgrade();\n }\n\n if (wasChanges)\n await withBriefcaseDb(briefcase, async (db) => db.pushChanges({ ...briefcase, description, retainLocks: true }));\n }\n\n /** Upgrades the schemas in the iModel based on the current version of the software. Follows a sequence of operations -\n * * Acquires a schema lock to prevent other users from making any other changes while upgrade is happening\n * * Updates the local briefcase with the schema changes.\n * * Pushes the resulting changeset(s) to iModelHub.\n * Note that the upgrade requires that the local briefcase be closed, and may result in one or two change sets depending on whether both\n * profile and domain schemas need to get upgraded.\n * @see ($docs/learning/backend/IModelDb.md#upgrading-schemas-in-an-imodel)\n */\n public static async upgradeSchemas(briefcase: OpenBriefcaseArgs): Promise<void> {\n // upgrading schemas involves closing and reopening the file repeatedly. That's because the process of upgrading\n // happens on a file open. We have to open-and-close the file at *each* of these steps:\n // - acquire schema lock\n // - upgrade profile\n // - push changes\n // - upgrade domain\n // - push changes\n // - release schema lock\n // good thing computers are fast. Fortunately upgrading should be rare (and the push time will dominate anyway.) Don't try to optimize any of this away.\n try {\n await this.doUpgrade(briefcase, { profile: ProfileOptions.Upgrade }, \"Upgraded profile\");\n } catch (error: any) {\n if (error.errorNumber === DbResult.BE_SQLITE_ERROR_DataTransformRequired) {\n Logger.logInfo(loggerCategory, `Profile upgrade contains data transform. Retrying upgrade with a schema lock.`);\n try {\n await withBriefcaseDb(briefcase, async (db) => db.acquireSchemaLock()); // may not really acquire lock if iModel uses \"noLocks\" mode.\n await this.doUpgrade(briefcase, { profile: ProfileOptions.Upgrade, schemaLockHeld: true }, \"Upgraded profile\");\n await this.doUpgrade(briefcase, { domain: DomainOptions.Upgrade, schemaLockHeld: true }, \"Upgraded domain schemas\");\n } finally {\n await withBriefcaseDb(briefcase, async (db) => db.locks[_releaseAllLocks]());\n }\n return;\n }\n throw error;\n }\n try {\n await this.doUpgrade(briefcase, { domain: DomainOptions.Upgrade }, \"Upgraded domain schemas\");\n } catch (error: any) {\n if (error.errorNumber === DbResult.BE_SQLITE_ERROR_DataTransformRequired) {\n Logger.logInfo(loggerCategory, `Domain schema upgrade contains data transform. Retrying upgrade with a schema lock.`);\n try {\n await withBriefcaseDb(briefcase, async (db) => db.acquireSchemaLock()); // may not really acquire lock if iModel uses \"noLocks\" mode.\n await this.doUpgrade(briefcase, { domain: DomainOptions.Upgrade, schemaLockHeld: true }, \"Upgraded domain schemas\");\n } finally {\n await withBriefcaseDb(briefcase, async (db) => db.locks[_releaseAllLocks]());\n }\n return;\n }\n throw error;\n }\n }\n\n /** Open a briefcase file and return a new BriefcaseDb to interact with it.\n * @param args parameters that specify the file name, and options for opening the briefcase file\n */\n public static async open(args: OpenBriefcaseArgs): Promise<BriefcaseDb> {\n this.onOpen.raiseEvent(args);\n\n const file = { path: args.fileName, key: args.key };\n const openMode = (args.readonly || args.watchForChanges) ? OpenMode.Readonly : OpenMode.ReadWrite;\n const nativeDb = this.openDgnDb(file, openMode, undefined, args);\n const briefcaseDb = new this({ nativeDb, key: file.key ?? Guid.createValue(), openMode, briefcaseId: nativeDb.getBriefcaseId() });\n\n // If they asked to watch for changes, set an fs.watch on the \"-watch\" file (only it is modified while we hold this connection.)\n // Whenever there are changes, restart our defaultTxn. That loads the changes from the other connection and sends\n // notifications as if they happened on this connection. Note: the watcher is called only when the backend event loop cycles.\n if (args.watchForChanges && undefined === args.container) {\n // Must touch the file synchronously - cannot watch a file until it exists.\n touch.sync(briefcaseDb.watchFilePathName);\n\n // Restart default txn to trigger events when watch file is changed by some other process.\n const watcher = fs.watch(briefcaseDb.watchFilePathName, { persistent: false }, () => {\n nativeDb.clearECDbCache();\n nativeDb.restartDefaultTxn();\n briefcaseDb.changeset = briefcaseDb[_nativeDb].getCurrentChangeset();\n });\n\n // Stop the watcher when we close this connection.\n briefcaseDb.onBeforeClose.addOnce(() => {\n watcher.close();\n });\n }\n\n // load all of the settings from workspaces\n await briefcaseDb.loadWorkspaceSettings();\n\n if (openMode === OpenMode.ReadWrite && CodeService.createForIModel) {\n try {\n briefcaseDb._codeService = await CodeService.createForIModel(briefcaseDb);\n this.onCodeServiceCreated.raiseEvent(briefcaseDb);\n } catch (e: any) {\n if ((e as CodeService.Error).errorId !== \"NoCodeIndex\") { // no code index means iModel isn't enforcing codes.\n Logger.logWarning(loggerCategory, `The CodeService is not available for this briefcase: errorId: ${(e as CodeService.Error).errorId}, errorMessage; ${e.message}. Proceeding with BriefcaseDb.open(), but all operations involving codes will fail.`);\n briefcaseDb._codeService = {\n verifyCode: (props: CodeService.ElementCodeProps) => {\n if (!Code.isEmpty(props.props.code)) {\n e.message = `The CodeService is not available for this briefcase: errorId: ${(e as CodeService.Error).errorId}, errorMessage; ${e.message}.`;\n throw e;\n }\n },\n appParams: {\n author: { name: \"unknown\" },\n origin: { name: \"unknown\" },\n },\n close: () => { },\n initialize: async () => { },\n };\n }\n }\n }\n\n this.onOpened.raiseEvent(briefcaseDb, args);\n return briefcaseDb;\n }\n\n /** This is called by native code when applying a changeset */\n private onChangesetConflict(args: DbMergeChangesetConflictArgs): DbConflictResolution | undefined {\n // returning undefined will result in native handler to resolve conflict\n\n const category = \"DgnCore\";\n const interpretConflictCause = (cause: DbConflictCause) => {\n switch (cause) {\n case DbConflictCause.Data:\n return \"data\";\n case DbConflictCause.NotFound:\n return \"not found\";\n case DbConflictCause.Conflict:\n return \"conflict\";\n case DbConflictCause.Constraint:\n return \"constraint\";\n case DbConflictCause.ForeignKey:\n return \"foreign key\";\n }\n };\n\n if (args.cause === DbConflictCause.Data && !args.indirect) {\n /*\n * From SQLite Docs CHANGESET_DATA as the second argument\n * when processing a DELETE or UPDATE change if a row with the required\n * PRIMARY KEY fields is present in the database, but one or more other\n * (non primary-key) fields modified by the update do not contain the\n * expected \"before\" values.\n *\n * The conflicting row, in this case, is the database row with the matching\n * primary key.\n *\n * Another reason this will be invoked is when SQLITE_CHANGESETAPPLY_FKNOACTION\n * is passed ApplyChangeset(). The flag will disable CASCADE action and treat\n * them as CASCADE NONE resulting in conflict handler been called.\n */\n if (!this.txns.hasPendingTxns) {\n // This changeset is bad. However, it is already in the timeline. We must allow services such as\n // checkpoint-creation, change history, and other apps to apply any changeset that is in the timeline.\n Logger.logWarning(category, \"UPDATE/DELETE before value do not match with one in db or CASCADE action was triggered.\");\n args.dump();\n } else {\n if (args.tableName === \"be_Prop\") {\n if (args.getValueText(0, DbChangeStage.Old) === \"ec_Db\" && args.getValueText(1, DbChangeStage.Old) === \"localDbInfo\") {\n return DbConflictResolution.Replace;\n }\n }\n if (args.tableName.startsWith(\"ec_\")) {\n return DbConflictResolution.Skip;\n }\n const msg = \"UPDATE/DELETE before value do not match with one in db or CASCADE action was triggered.\";\n args.setLastError(msg);\n Logger.logError(category, msg);\n args.dump();\n return DbConflictResolution.Abort;\n }\n }\n\n // Handle some special cases\n if (args.cause === DbConflictCause.Conflict) {\n // From the SQLite docs: \"CHANGESET_CONFLICT is passed as the second argument to the conflict handler while processing an INSERT change if the operation would result in duplicate primary key values.\"\n // This is always a fatal error - it can happen only if the app started with a briefcase that is behind the tip and then uses the same primary key values (e.g., ElementIds)\n // that have already been used by some other app using the SAME briefcase ID that recently pushed changes. That can happen only if the app makes changes without first pulling and acquiring locks.\n if (!this.txns.hasPendingTxns) {\n // This changeset is bad. However, it is already in the timeline. We must allow services such as\n // checkpoint-creation, change history, and other apps to apply any changeset that is in the timeline.\n Logger.logWarning(category, \"PRIMARY KEY INSERT CONFLICT - resolved by replacing the existing row with the incoming row\");\n args.dump();\n } else {\n if (args.tableName.startsWith(\"ec_\")) {\n return DbConflictResolution.Skip;\n }\n const msg = \"PRIMARY KEY INSERT CONFLICT - rejecting this changeset\";\n args.setLastError(msg);\n Logger.logError(category, msg);\n args.dump();\n return DbConflictResolution.Abort;\n }\n }\n\n if (args.cause === DbConflictCause.ForeignKey) {\n // Note: No current or conflicting row information is provided if it's a FKey conflict\n // Since we abort on FKey conflicts, always try and provide details about the error\n const nConflicts = args.getForeignKeyConflicts();\n\n // Note: There is no performance implication of follow code as it happen toward end of\n // apply_changeset only once so we be querying value for 'DebugAllowFkViolations' only once.\n if (this[_nativeDb].queryLocalValue(\"DebugAllowFkViolations\")) {\n Logger.logError(category, `Detected ${nConflicts} foreign key conflicts in changeset. Continuing merge as 'DebugAllowFkViolations' flag is set. Run 'PRAGMA foreign_key_check' to get list of violations.`);\n return DbConflictResolution.Skip;\n } else {\n const msg = `Detected ${nConflicts} foreign key conflicts in ChangeSet. Aborting merge.`;\n args.setLastError(msg);\n return DbConflictResolution.Abort;\n }\n }\n\n if (args.cause === DbConflictCause.NotFound) {\n /*\n * Note: If DbConflictCause = NotFound, the primary key was not found, and returning DbConflictResolution::Replace is\n * not an option at all - this will cause a BE_SQLITE_MISUSE error.\n */\n return DbConflictResolution.Skip;\n }\n\n if (args.cause === DbConflictCause.Constraint) {\n if (Logger.isEnabled(category, LogLevel.Info)) {\n Logger.logInfo(category, \"------------------------------------------------------------------\");\n Logger.logInfo(category, `Conflict detected - Cause: ${interpretConflictCause(args.cause)}`);\n args.dump();\n }\n\n Logger.logWarning(category, \"Constraint conflict handled by rejecting incoming change. Constraint conflicts are NOT expected. These happen most often when two clients both insert elements with the same code. That indicates a bug in the client or the code server.\");\n return DbConflictResolution.Skip;\n }\n\n /*\n * If we don't have a control, we always accept the incoming revision in cases of conflicts:\n *\n * + In a briefcase with no local changes, the state of a row in the Db (i.e., the final state of a previous revision)\n * may not exactly match the initial state of the incoming revision. This will cause a conflict.\n * - The final state of the incoming (later) revision will always be setup exactly right to accommodate\n * cases where dependency handlers won't be available (for instance on the server), and we have to rely on\n * the revision to correctly set the final state of the row in the Db. Therefore it's best to resolve the\n * conflict in favor of the incoming change.\n * + In a briefcase with local changes, the state of relevant dependent properties (due to propagated indirect changes)\n * may not correspond with the initial state of these properties in an incoming revision. This will cause a conflict.\n * - Resolving the conflict in favor of the incoming revision may cause some dependent properties to be set\n * incorrectly, but the dependency handlers will run anyway and set this right. The new changes will be part of\n * a subsequent revision generated from that briefcase.\n *\n * + Note that conflicts can NEVER happen between direct changes made locally and direct changes in the incoming revision.\n * - Only one user can make a direct change at one time, and the next user has to pull those changes before getting a\n * lock to the same element\n *\n * + Also see comments in TxnManager::MergeDataChanges()\n */\n if (Logger.isEnabled(category, LogLevel.Info)) {\n Logger.logInfo(category, `Conflict detected - Cause: ${interpretConflictCause(args.cause)}`);\n args.dump();\n Logger.logInfo(category, \"Conflicting resolved by replacing the existing entry with the change\");\n }\n return DbConflictResolution.Replace;\n }\n\n /** If the briefcase is read-only, reopen the native briefcase for writing.\n * Execute the supplied function.\n * If the briefcase was read-only, reopen the native briefcase as read-only.\n * @note this._openMode is not changed from its initial value.\n * @internal Exported strictly for tests\n */\n public async executeWritable(func: () => Promise<void>): Promise<void> {\n const fileName = this.pathName;\n const isReadonly = this.isReadonly;\n let locks: LockControl | undefined;\n try {\n if (isReadonly) {\n this.closeAndReopen(OpenMode.ReadWrite, fileName);\n locks = this.locks;\n this.makeLockControl(); // create a ServerBasedLocks, if necessary\n }\n await func();\n } finally {\n if (isReadonly) {\n if (locks !== this._locks) { // did we have to create a ServerBasedLocks?\n this.locks[_close](); // yes, close it and reset back to previous\n this._locks = locks;\n }\n this.closeAndReopen(OpenMode.Readonly, fileName);\n }\n }\n }\n\n private closeAndReopen(openMode: OpenMode, fileName: string) {\n // Unclosed statements will produce BUSY error when attempting to close.\n this.clearCaches();\n\n // The following resets the native db's pointer to this JavaScript object.\n this[_nativeDb].closeFile();\n this[_nativeDb].openIModel(fileName, openMode);\n\n // Restore the native db's pointer to this JavaScript object.\n this[_nativeDb].setIModelDb(this);\n\n // refresh cached properties that could have been changed by another process writing to the same briefcase\n this.changeset = this[_nativeDb].getCurrentChangeset();\n\n // assert what should never change\n if (this.iModelId !== this[_nativeDb].getIModelId() || this.iTwinId !== this[_nativeDb].getITwinId())\n throw new Error(\"closeAndReopen detected change in iModelId and/or iTwinId\");\n }\n\n /**\n * Pull and apply changesets from iModelHub\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync} or {RebaseHandler.recompute}.\n */\n public async pullChanges(arg?: PullChangesArgs): Promise<void> {\n await this.executeWritable(async () => {\n await BriefcaseManager.pullAndApplyChangesets(this, arg ?? {});\n if (!this.skipSyncSchemasOnPullAndPush)\n await SchemaSync.pull(this);\n this.initializeIModelDb(\"pullMerge\");\n });\n\n this.txns._onChangesPulled(this.changeset as ChangesetIndexAndId);\n }\n\n public async enableChangesetStatTracking(): Promise<void> {\n this[_nativeDb].enableChangesetStatsTracking();\n }\n\n public async disableChangesetStatTracking(): Promise<void> {\n this[_nativeDb].disableChangesetStatsTracking();\n }\n\n public async getAllChangesetHealthData(): Promise<ChangesetHealthStats[]> {\n return this[_nativeDb].getAllChangesetHealthData() as ChangesetHealthStats[];\n }\n\n /** Revert timeline changes and then push resulting changeset */\n public async revertAndPushChanges(arg: RevertChangesArgs): Promise<void> {\n const nativeDb = this[_nativeDb];\n if (arg.toIndex === undefined) {\n throw new IModelError(ChangeSetStatus.ApplyError, \"Cannot revert without a toIndex\");\n }\n if (nativeDb.hasUnsavedChanges()) {\n throw new IModelError(ChangeSetStatus.HasUncommittedChanges, \"Cannot revert with unsaved changes\");\n }\n if (nativeDb.hasPendingTxns()) {\n throw new IModelError(ChangeSetStatus.HasLocalChanges, \"Cannot revert with pending txns\");\n }\n\n const skipSchemaSyncPull = async <T>(func: () => Promise<T>) => {\n if (nativeDb.schemaSyncEnabled()) {\n this._skipSyncSchemasOnPullAndPush = true;\n try {\n return await func();\n } finally {\n this._skipSyncSchemasOnPullAndPush = undefined;\n }\n } else {\n return func();\n }\n };\n this.clearCaches();\n await skipSchemaSyncPull(async () => this.pullChanges({ ...arg, toIndex: undefined }));\n await this.acquireSchemaLock();\n\n if (nativeDb.schemaSyncEnabled()) {\n arg.skipSchemaChanges = true;\n }\n\n try {\n await BriefcaseManager.revertTimelineChanges(this, arg);\n this.saveChanges(\"Revert changes\");\n if (!arg.description) {\n arg.description = `Reverted changes from ${this.changeset.index} to ${arg.toIndex}${arg.skipSchemaChanges ? \" (schema changes skipped)\" : \"\"}`;\n }\n const pushArgs = {\n description: arg.description,\n accessToken: arg.accessToken,\n mergeRetryCount: arg.mergeRetryCount,\n mergeRetryDelay: arg.mergeRetryDelay,\n pushRetryCount: arg.pushRetryCount,\n pushRetryDelay: arg.pushRetryDelay,\n retainLocks: arg.retainLocks,\n };\n await skipSchemaSyncPull(async () => this.pushChanges(pushArgs));\n this.clearCaches();\n } catch (err) {\n if (!arg.retainLocks) {\n await this.locks.releaseAllLocks();\n throw err;\n }\n } finally {\n this.abandonChanges();\n }\n }\n\n /**\n * Push changes to iModelHub.\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync} or {RebaseHandler.recompute}.\n */\n public async pushChanges(arg: PushChangesArgs): Promise<void> {\n if (this.briefcaseId === BriefcaseIdValue.Unassigned)\n return;\n\n if (this[_nativeDb].hasUnsavedChanges()) {\n throw new IModelError(ChangeSetStatus.HasUncommittedChanges, \"Cannot push with unsaved changes\");\n } else if (!this[_nativeDb].hasPendingTxns()) {\n // Nothing to push.\n if (!arg.retainLocks) {\n await this.locks.releaseAllLocks();\n }\n\n return;\n }\n\n // pushing changes requires a writeable briefcase\n await this.executeWritable(async () => {\n await BriefcaseManager.pullMergePush(this, arg);\n this.initializeIModelDb(\"pullMerge\");\n });\n\n this.txns._onChangesPushed(this.changeset as ChangesetIndexAndId);\n }\n\n public override close() {\n if (this.isBriefcase && this.isOpen && !this.isReadonly && this.txns.rebaser.inProgress()) {\n this.abandonChanges();\n }\n super.close();\n this.onClosed.raiseEvent();\n }\n}\n\n/** Used to reattach Daemon from a user's accessToken for V2 checkpoints.\n * @note Reattach only happens if the previous access token either has expired or is about to expire within an application-supplied safety duration.\n */\nclass RefreshV2CheckpointSas {\n /** the time at which the current token should be refreshed (its expiry minus safetySeconds) */\n private _timestamp = 0;\n /** while a refresh is happening, all callers get this promise. */\n private _promise: Promise<void> | undefined;\n /** Time, in seconds, before the current token expires to obtain a new token. Default is 1 hour. */\n private _safetySeconds: number;\n\n constructor(sasToken: string, safetySeconds?: number) {\n this._safetySeconds = safetySeconds ?? 60 * 60; // default to 1 hour\n this.setTimestamp(sasToken);\n }\n\n private async performRefresh(accessToken: AccessToken, iModel: IModelDb): Promise<void> {\n this._timestamp = 0; // everyone needs to wait until token is valid\n\n // we're going to request that the checkpoint manager use this user's accessToken to obtain a new access token for this checkpoint's storage account.\n Logger.logInfo(BackendLoggerCategory.Authorization, \"attempting to refresh sasToken for checkpoint\");\n try {\n // this exchanges the supplied user accessToken for an expiring blob-store token to read the checkpoint.\n const container = iModel.cloudContainer;\n if (!container)\n throw new Error(\"checkpoint is not from a cloud container\");\n\n assert(undefined !== iModel.iTwinId);\n const props = await IModelHost[_hubAccess].queryV2Checkpoint({ accessToken, iTwinId: iModel.iTwinId, iModelId: iModel.iModelId, changeset: iModel.changeset });\n if (!props)\n throw new Error(\"can't reset checkpoint sas token\");\n\n container.accessToken = props.sasToken;\n this.setTimestamp(props.sasToken);\n\n Logger.logInfo(BackendLoggerCategory.Authorization, \"refreshed checkpoint sasToken successfully\");\n } finally {\n this._promise = undefined;\n }\n }\n\n private setTimestamp(sasToken: string) {\n const exp = new URLSearchParams(sasToken).get(\"se\");\n const sasTokenExpiry = exp ? Date.parse(exp) : 0;\n this._timestamp = sasTokenExpiry - (this._safetySeconds * 1000);\n if (this._timestamp < Date.now())\n Logger.logError(BackendLoggerCategory.Authorization, \"attached with timestamp that expires before safety interval\");\n }\n\n public async refreshSas(accessToken: AccessToken, iModel: IModelDb): Promise<void> {\n if (this._timestamp > Date.now())\n return; // current token is fine\n\n if (undefined === this._promise) // has reattach already begun?\n this._promise = this.performRefresh(accessToken, iModel); // no, start it\n\n return this._promise;\n }\n\n}\n/** A *snapshot* iModel database file that is used for archival and data transfer purposes.\n * @see [Snapshot iModels]($docs/learning/backend/AccessingIModels.md#snapshot-imodels)\n * @see [About IModelDb]($docs/learning/backend/IModelDb.md)\n * @public\n */\nexport class SnapshotDb extends IModelDb {\n public override get isSnapshot() { return true; }\n private _refreshSas: RefreshV2CheckpointSas | undefined;\n /** Timer used to restart the default txn on the SnapshotDb after some inactivity. This is only used for checkpoints.\n * Restarting the default txn lets CloudSqlite know that any blocks that may have been read may now be ejected.\n * Without restarting the default txn, CloudSQLite can get into a state where it can not evict any blocks to make space for more blocks.\n */\n private _restartDefaultTxnTimer?: NodeJS.Timeout;\n private _createClassViewsOnClose?: boolean;\n public static readonly onOpen = new BeEvent<(path: LocalFileName, opts?: SnapshotDbOpenArgs) => void>();\n public static readonly onOpened = new BeEvent<(_iModelDb: SnapshotDb) => void>();\n\n private constructor(nativeDb: IModelJsNative.DgnDb, key: string) {\n super({ nativeDb, key, changeset: nativeDb.getCurrentChangeset() });\n this._openMode = nativeDb.isReadonly() ? OpenMode.Readonly : OpenMode.ReadWrite;\n }\n\n public static override findByKey(key: string): SnapshotDb {\n return super.findByKey(key) as SnapshotDb;\n }\n\n public static override tryFindByKey(key: string): SnapshotDb | undefined {\n const db = super.tryFindByKey(key);\n return db?.isSnapshotDb() ? db : undefined;\n }\n\n /** Create an *empty* local [Snapshot]($docs/learning/backend/AccessingIModels.md#snapshot-imodels) iModel file.\n * Snapshots are not synchronized with iModelHub, so do not have a change timeline.\n * @note: A *snapshot* cannot be modified after [[close]] is called.\n * @param filePath The file that will contain the new iModel *snapshot*\n * @param options The parameters that define the new iModel *snapshot*\n * @returns A writeable SnapshotDb\n * @see [Snapshot iModels]($docs/learning/backend/AccessingIModels.md#snapshot-imodels)\n */\n public static createEmpty(filePath: LocalFileName, options: CreateEmptySnapshotIModelProps): SnapshotDb {\n const nativeDb = new IModelNative.platform.DgnDb();\n nativeDb.createIModel(filePath, options);\n nativeDb.resetBriefcaseId(BriefcaseIdValue.Unassigned);\n\n const snapshotDb = new SnapshotDb(nativeDb, Guid.createValue());\n snapshotDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n if (options.createClassViews)\n snapshotDb._createClassViewsOnClose = true; // save flag that will be checked when close() is called\n if (options.geographicCoordinateSystem)\n snapshotDb.setGeographicCoordinateSystem(options.geographicCoordinateSystem);\n if (options.ecefLocation)\n snapshotDb.setEcefLocation(options.ecefLocation);\n return snapshotDb;\n }\n\n /** Create a local [Snapshot]($docs/learning/backend/AccessingIModels.md#snapshot-imodels) iModel file, using this iModel as a *seed* or starting point.\n * Snapshots are not synchronized with iModelHub, so do not have a change timeline.\n * @note: A *snapshot* cannot be modified after [[close]] is called.\n * @param iModelDb The snapshot will be initialized from the current contents of this iModelDb\n * @param snapshotFile The file that will contain the new iModel *snapshot*\n * @param options Optional properties that determine how the snapshot iModel is created.\n * @returns A writeable SnapshotDb\n * @see [Snapshot iModels]($docs/learning/backend/AccessingIModels.md#snapshot-imodels)\n */\n public static createFrom(iModelDb: IModelDb, snapshotFile: string, options?: CreateSnapshotIModelProps): SnapshotDb {\n iModelDb.performCheckpoint();\n IModelJsFs.copySync(iModelDb.pathName, snapshotFile);\n\n const nativeDb = new IModelNative.platform.DgnDb();\n nativeDb.openIModel(snapshotFile, OpenMode.ReadWrite, undefined);\n nativeDb.vacuum();\n\n // Replace iModelId if seedFile is a snapshot, preserve iModelId if seedFile is an iModelHub-managed briefcase\n if (!BriefcaseManager.isValidBriefcaseId(nativeDb.getBriefcaseId()))\n nativeDb.setIModelId(Guid.createValue());\n\n nativeDb.deleteLocalValue(BriefcaseLocalValue.StandaloneEdit);\n nativeDb.saveChanges();\n nativeDb.deleteAllTxns();\n nativeDb.resetBriefcaseId(BriefcaseIdValue.Unassigned);\n\n const snapshotDb = new SnapshotDb(nativeDb, Guid.createValue());\n if (options?.createClassViews)\n snapshotDb._createClassViewsOnClose = true; // save flag that will be checked when close() is called\n\n return snapshotDb;\n }\n\n /** open this SnapshotDb read/write, strictly to apply incoming changesets. Used for creating new checkpoints.\n * @internal\n */\n public static openForApplyChangesets(path: LocalFileName, props?: SnapshotDbOpenArgs): SnapshotDb {\n const file = { path, key: props?.key };\n const nativeDb = this.openDgnDb(file, OpenMode.ReadWrite, undefined, props);\n assert(undefined !== file.key);\n return new SnapshotDb(nativeDb, file.key);\n }\n\n /** Open a read-only iModel *snapshot*.\n * @param path the full path of the snapshot iModel file to open.\n * @param props options for opening snapshot\n * @see [[close]]\n * @throws [[IModelError]] If the file is not found or is not a valid *snapshot*.\n */\n public static openFile(path: LocalFileName, opts?: SnapshotDbOpenArgs): SnapshotDb {\n this.onOpen.raiseEvent(path, opts);\n const file = { path, key: opts?.key };\n const wasKeyUndefined = opts?.key === undefined;\n const nativeDb = this.openDgnDb(file, OpenMode.Readonly, undefined, opts);\n if (wasKeyUndefined) {\n file.key = `${nativeDb.getIModelId()}:${nativeDb.getCurrentChangeset().id}`;\n }\n assert(undefined !== file.key);\n const db = new this(nativeDb, file.key);\n this.onOpened.raiseEvent(db);\n return db;\n }\n\n private static async attachAndOpenCheckpoint(checkpoint: CheckpointProps): Promise<SnapshotDb> {\n const { dbName, container } = await V2CheckpointManager.attach(checkpoint);\n const key = CheckpointManager.getKey(checkpoint);\n const db = SnapshotDb.openFile(dbName, { key, container });\n await db.loadWorkspaceSettings();\n return db;\n }\n\n /** @internal */\n public static async openCheckpointFromRpc(checkpoint: CheckpointProps): Promise<SnapshotDb> {\n const snapshot = await this.attachAndOpenCheckpoint(checkpoint);\n snapshot._iTwinId = checkpoint.iTwinId;\n try {\n CheckpointManager.validateCheckpointGuids(checkpoint, snapshot);\n } catch (err: any) {\n snapshot.close();\n throw err;\n }\n\n // unref timer, so it doesn't prevent a process from shutting down.\n snapshot._restartDefaultTxnTimer = setTimeout(() => {\n snapshot.restartDefaultTxn();\n }, (10 * 60) * 1000).unref(); // 10 minutes\n const cloudContainer = snapshot.cloudContainer;\n if (cloudContainer !== undefined) {\n snapshot._refreshSas = new RefreshV2CheckpointSas(cloudContainer.accessToken, checkpoint.reattachSafetySeconds);\n }\n return snapshot;\n }\n\n /**\n * Open a Checkpoint directly from its cloud container.\n * @beta\n */\n public static async openCheckpoint(args: OpenCheckpointArgs): Promise<SnapshotDb> {\n return this.attachAndOpenCheckpoint(await CheckpointManager.toCheckpointProps(args));\n }\n\n /** Used to refresh the container sasToken using the current user's accessToken.\n * Also restarts the timer which causes the default txn to be restarted on db if the timer activates.\n * @internal\n */\n public override async refreshContainerForRpc(userAccessToken: AccessToken): Promise<void> {\n this._restartDefaultTxnTimer?.refresh();\n return this._refreshSas?.refreshSas(userAccessToken, this);\n }\n\n /** @internal */\n public override beforeClose(): void {\n super.beforeClose();\n\n if (this._restartDefaultTxnTimer)\n clearTimeout(this._restartDefaultTxnTimer);\n\n if (this._createClassViewsOnClose) { // check for flag set during create\n if (BentleyStatus.SUCCESS !== this[_nativeDb].createClassViewsInDb()) {\n throw new IModelError(IModelStatus.SQLiteError, \"Error creating class views\");\n } else {\n this.saveChanges();\n }\n }\n }\n}\n\n/**\n * Standalone iModels are read/write files that are not associated with an iTwin or managed by iModelHub.\n * They are relevant only for testing, or for small-scale single-user scenarios.\n * Standalone iModels are designed such that the API for Standalone iModels and Briefcase\n * iModels (those synchronized with iModelHub) are as similar and consistent as possible.\n * This leads to a straightforward process where the a user starts with StandaloneDb and can\n * optionally choose to upgrade to an iTwin.\n *\n * Some additional details. Standalone iModels:\n * - always have [Guid.empty]($bentley) for their iTwinId (they are \"unassociated\" files)\n * - always have BriefcaseId === [BriefcaseIdValue.Unassigned]($common)\n * - are connected to the frontend via [BriefcaseConnection.openStandalone]($frontend)\n * - may be opened without supplying any user credentials\n * - may be opened read/write\n * - cannot apply a changeset to nor generate a changesets (since there is no timeline from which to get/push changesets)\n * @public\n */\nexport class StandaloneDb extends BriefcaseDb {\n public override get isStandalone(): boolean { return true; }\n protected override get useLockServer() { return false; } // standalone iModels have no lock server\n public static override findByKey(key: string): StandaloneDb {\n return super.findByKey(key) as StandaloneDb;\n }\n\n public static override tryFindByKey(key: string): StandaloneDb | undefined {\n const db = super.tryFindByKey(key);\n return db?.isStandaloneDb() ? db : undefined;\n }\n\n /** Create an *empty* standalone iModel.\n * @param filePath The file path for the iModel\n * @param args The parameters that define the new iModel\n */\n public static createEmpty(filePath: LocalFileName, args: CreateEmptyStandaloneIModelProps): StandaloneDb {\n const nativeDb = new IModelNative.platform.DgnDb();\n nativeDb.createIModel(filePath, args);\n nativeDb.saveLocalValue(BriefcaseLocalValue.StandaloneEdit, args.allowEdit);\n nativeDb.setITwinId(Guid.empty);\n nativeDb.resetBriefcaseId(BriefcaseIdValue.Unassigned);\n nativeDb.saveChanges();\n const db = new this({ nativeDb, key: Guid.createValue(), briefcaseId: BriefcaseIdValue.Unassigned, openMode: OpenMode.ReadWrite });\n if (args.geographicCoordinateSystem)\n db.setGeographicCoordinateSystem(args.geographicCoordinateSystem);\n if (args.ecefLocation)\n db.setEcefLocation(args.ecefLocation);\n db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\n return db;\n }\n\n /**\n * Upgrades the schemas in the standalone iModel file.\n * Note that the upgrade requires that the file be closed, and will leave it back in the closed state.\n * @param filePath Full path name of the standalone iModel file.\n * @see ($docs/learning/backend/IModelDb.md#upgrading-schemas-in-an-imodel)\n * @see [[StandaloneDb.validateSchemas]]\n */\n public static upgradeStandaloneSchemas(filePath: LocalFileName) {\n let nativeDb = this.openDgnDb({ path: filePath }, OpenMode.ReadWrite, { profile: ProfileOptions.Upgrade, schemaLockHeld: true });\n nativeDb.saveChanges();\n nativeDb.closeFile();\n nativeDb = this.openDgnDb({ path: filePath }, OpenMode.ReadWrite, { domain: DomainOptions.Upgrade, schemaLockHeld: true });\n nativeDb.saveChanges();\n nativeDb.closeFile();\n }\n\n /** Creates or updates views in the iModel to permit visualizing the EC content as ECClasses and ECProperties rather than raw database tables and columns.\n * This can be helpful when debugging the EC data, especially when the raw tables make use of shared columns or spread data across multiple tables.\n * @throws IModelError if view creation failed.\n * @note The views are strictly intended for developers and debugging purposes only - they should not be used in application code.\n * @beta\n */\n public createClassViews(): void {\n const result = this[_nativeDb].createClassViewsInDb();\n if (BentleyStatus.SUCCESS !== result)\n throw new IModelError(result, \"Error creating class views\");\n else\n this.saveChanges();\n }\n\n /** Open a standalone iModel file.\n * @param filePath The path of the standalone iModel file.\n * @param openMode Optional open mode for the standalone iModel. The default is read/write.\n * @throws [[IModelError]] if the file is not a standalone iModel.\n * @see [BriefcaseConnection.openStandalone]($frontend) to open a StandaloneDb from the frontend\n */\n public static openFile(filePath: LocalFileName, openMode: OpenMode = OpenMode.ReadWrite, options?: SnapshotDbOpenArgs): StandaloneDb {\n const file = { path: filePath, key: options?.key };\n const nativeDb = this.openDgnDb(file, openMode, undefined, options);\n\n try {\n const iTwinId = nativeDb.getITwinId();\n if (iTwinId !== Guid.empty) // a \"standalone\" iModel means it is not associated with an iTwin\n throw new IModelError(IModelStatus.WrongIModel, `${filePath} is not a Standalone iModel. iTwinId=${iTwinId}`);\n assert(undefined !== file.key);\n const db = new this({ nativeDb, key: file.key, openMode, briefcaseId: BriefcaseIdValue.Unassigned });\n return db;\n } catch (error) {\n nativeDb.closeFile();\n throw error;\n }\n }\n\n /** Convert an iModel stored on the local file system into a StandaloneDb, chiefly for testing purposes.\n * The file must not be open in any application.\n * @param iModelFileName the path to the iModel on the local file system.\n * @beta\n */\n public static convertToStandalone(iModelFileName: LocalFileName): void {\n const nativeDb = new IModelNative.platform.DgnDb();\n nativeDb.openIModel(iModelFileName, OpenMode.ReadWrite);\n nativeDb.setITwinId(Guid.empty); // empty iTwinId means \"standalone\"\n nativeDb.saveChanges(); // save change to iTwinId\n nativeDb.deleteAllTxns(); // necessary before resetting briefcaseId\n nativeDb.resetBriefcaseId(BriefcaseIdValue.Unassigned); // standalone iModels should always have BriefcaseId unassigned\n nativeDb.saveLocalValue(\"StandaloneEdit\", JSON.stringify({ txns: true }));\n nativeDb.saveChanges(); // save change to briefcaseId\n nativeDb.closeFile();\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"IModelDb.js","sourceRoot":"","sources":["../../src/IModelDb.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module iModels\r\n */\r\n\r\nimport * as fs from \"fs\";\r\nimport { join } from \"path\";\r\nimport * as touch from \"touch\";\r\nimport { IModelJsNative, SchemaWriteStatus } from \"@bentley/imodeljs-native\";\r\nimport {\r\n AccessToken, assert, BeEvent, BentleyStatus, ChangeSetStatus, DbChangeStage, DbConflictCause, DbConflictResolution, DbResult,\r\n Guid, GuidString, Id64, Id64Arg, Id64Array, Id64Set, Id64String, IModelStatus, JsonUtils, Logger, LogLevel, LRUMap, OpenMode\r\n} from \"@itwin/core-bentley\";\r\nimport {\r\n AxisAlignedBox3d, BRepGeometryCreate, BriefcaseId, BriefcaseIdValue, CategorySelectorProps, ChangesetHealthStats, ChangesetIdWithIndex, ChangesetIndexAndId, Code,\r\n CodeProps, CreateEmptySnapshotIModelProps, CreateEmptyStandaloneIModelProps, CreateSnapshotIModelProps, DbQueryRequest, DisplayStyleProps,\r\n DomainOptions, EcefLocation, ECJsNames, ECSchemaProps, ECSqlReader, ElementAspectProps, ElementGeometryCacheOperationRequestProps, ElementGeometryCacheRequestProps, ElementGeometryCacheResponseProps, ElementGeometryRequest, ElementGraphicsRequestProps, ElementLoadProps, ElementProps, EntityMetaData, EntityProps, EntityQueryParams, FilePropertyProps, FontMap,\r\n GeoCoordinatesRequestProps, GeoCoordinatesResponseProps, GeometryContainmentRequestProps, GeometryContainmentResponseProps, IModel,\r\n IModelCoordinatesRequestProps, IModelCoordinatesResponseProps, IModelError, IModelNotFoundResponse, IModelTileTreeProps, LocalFileName,\r\n MassPropertiesRequestProps, MassPropertiesResponseProps, ModelExtentsProps, ModelLoadProps, ModelProps, ModelSelectorProps, OpenBriefcaseProps,\r\n OpenCheckpointArgs, OpenSqliteArgs, ProfileOptions, PropertyCallback, QueryBinder, QueryOptions, QueryRowFormat, SchemaState,\r\n SheetProps, SnapRequestProps, SnapResponseProps, SnapshotOpenOptions, SpatialViewDefinitionProps, SubCategoryResultRow, TextureData,\r\n TextureLoadProps, ThumbnailProps, UpgradeOptions, ViewDefinition2dProps, ViewDefinitionProps, ViewIdString, ViewQueryParams, ViewStateLoadProps,\r\n ViewStateProps, ViewStoreError, ViewStoreRpc\r\n} from \"@itwin/core-common\";\r\nimport { Range2d, Range3d } from \"@itwin/core-geometry\";\r\nimport { BackendLoggerCategory } from \"./BackendLoggerCategory\";\r\nimport { BriefcaseManager, PullChangesArgs, PushChangesArgs, RevertChangesArgs } from \"./BriefcaseManager\";\r\nimport { ChannelControl } from \"./ChannelControl\";\r\nimport { createChannelControl } from \"./internal/ChannelAdmin\";\r\nimport { CheckpointManager, CheckpointProps, V2CheckpointManager } from \"./CheckpointManager\";\r\nimport { ClassRegistry, EntityJsClassMap, MetaDataRegistry } from \"./ClassRegistry\";\r\nimport { CloudSqlite } from \"./CloudSqlite\";\r\nimport { CodeService } from \"./CodeService\";\r\nimport { CodeSpecs } from \"./CodeSpecs\";\r\nimport { ConcurrentQuery } from \"./ConcurrentQuery\";\r\nimport { ECSchemaXmlContext } from \"./ECSchemaXmlContext\";\r\nimport { ECSqlStatement } from \"./ECSqlStatement\";\r\nimport { Element, SectionDrawing, Subject } from \"./Element\";\r\nimport { ElementAspect } from \"./ElementAspect\";\r\nimport { generateElementGraphics } from \"./ElementGraphics\";\r\nimport { ECSqlRow, Entity, EntityClassType } from \"./Entity\";\r\nimport { ExportGraphicsOptions, ExportPartGraphicsOptions } from \"./ExportGraphics\";\r\nimport { GeoCoordConfig } from \"./GeoCoordConfig\";\r\nimport { IModelHost } from \"./IModelHost\";\r\nimport { IModelJsFs } from \"./IModelJsFs\";\r\nimport { IpcHost } from \"./IpcHost\";\r\nimport { Model } from \"./Model\";\r\nimport { Relationships } from \"./Relationship\";\r\nimport { SchemaSync } from \"./SchemaSync\";\r\nimport { createServerBasedLocks } from \"./internal/ServerBasedLocks\";\r\nimport { SqliteStatement, StatementCache } from \"./SqliteStatement\";\r\nimport { ComputeRangesForTextLayoutArgs, TextLayoutRanges } from \"./annotations/TextBlockLayout\";\r\nimport { TxnManager } from \"./TxnManager\";\r\nimport { DrawingViewDefinition, SheetViewDefinition, ViewDefinition } from \"./ViewDefinition\";\r\nimport { ViewStore } from \"./ViewStore\";\r\nimport { Setting, SettingsContainer, SettingsDictionary, SettingsPriority } from \"./workspace/Settings\";\r\nimport { Workspace, WorkspaceDbLoadError, WorkspaceDbLoadErrors, WorkspaceDbSettingsProps, WorkspaceSettingNames } from \"./workspace/Workspace\";\r\nimport { constructWorkspace, OwnedWorkspace, throwWorkspaceDbLoadErrors } from \"./internal/workspace/WorkspaceImpl\";\r\nimport { SettingsImpl } from \"./internal/workspace/SettingsImpl\";\r\nimport { DbMergeChangesetConflictArgs } from \"./internal/ChangesetConflictArgs\";\r\nimport { LockControl } from \"./LockControl\";\r\nimport { IModelNative } from \"./internal/NativePlatform\";\r\nimport type { BlobContainer } from \"./BlobContainerService\";\r\nimport { createNoOpLockControl } from \"./internal/NoLocks\";\r\nimport { IModelDbFonts } from \"./IModelDbFonts\";\r\nimport { createIModelDbFonts } from \"./internal/IModelDbFontsImpl\";\r\nimport { _cache, _close, _hubAccess, _instanceKeyCache, _nativeDb, _releaseAllLocks, _resetIModelDb } from \"./internal/Symbols\";\r\nimport { ECVersion, SchemaContext, SchemaJsonLocater } from \"@itwin/ecschema-metadata\";\r\nimport { SchemaMap } from \"./Schema\";\r\nimport { ElementLRUCache, InstanceKeyLRUCache } from \"./internal/ElementLRUCache\";\r\nimport { IModelIncrementalSchemaLocater } from \"./IModelIncrementalSchemaLocater\";\r\n// spell:ignore fontid fontmap\r\n\r\nconst loggerCategory: string = BackendLoggerCategory.IModelDb;\r\n\r\n/**\r\n * Arguments for saving changes to the iModel.\r\n * @alpha\r\n */\r\nexport interface SaveChangesArgs {\r\n /**\r\n * Optional description of the changes being saved.\r\n */\r\n description?: string;\r\n /**\r\n * Optional source of the changes being saved.\r\n */\r\n source?: string;\r\n /**\r\n * Optional application-specific data to include with the changes.\r\n */\r\n appData?: { [key: string]: any };\r\n}\r\n\r\n/** Options for [[IModelDb.Models.updateModel]]\r\n * @note To mark *only* the geometry as changed, use [[IModelDb.Models.updateGeometryGuid]] instead.\r\n * @public\r\n */\r\nexport interface UpdateModelOptions extends ModelProps {\r\n /** If defined, update the last modify time of the Model */\r\n updateLastMod?: boolean;\r\n /** If defined, update the GeometryGuid of the Model */\r\n geometryChanged?: boolean;\r\n}\r\n\r\n/** Options supposed to [[IModelDb.Elements.insertElement]].\r\n * @public\r\n */\r\nexport interface InsertElementOptions {\r\n /** If true, instead of assigning a new, unique Id to the inserted element, the inserted element will use the Id specified by the supplied [ElementProps]($common).\r\n * This is chiefly useful when applying a filtering transformation - i.e., copying some elements from a source iModel to a target iModel and adding no new elements.\r\n * If this option is `true` then [ElementProps.id]($common) must be a valid Id that is not already used by an element in the iModel.\r\n * @beta\r\n */\r\n forceUseId?: boolean;\r\n}\r\n\r\n/** Options supplied to [[IModelDb.computeProjectExtents]].\r\n * @public\r\n */\r\nexport interface ComputeProjectExtentsOptions {\r\n /** If true, the result will include `extentsWithOutliers`. */\r\n reportExtentsWithOutliers?: boolean;\r\n /** If true, the result will include `outliers`. */\r\n reportOutliers?: boolean;\r\n}\r\n\r\n/** The result of [[IModelDb.computeProjectExtents]].\r\n * @public\r\n */\r\nexport interface ComputedProjectExtents {\r\n /** The computed extents, excluding any outlier elements. */\r\n extents: Range3d;\r\n /** If requested by caller, the computed extents, *including* any outlier elements. */\r\n extentsWithOutliers?: Range3d;\r\n /** If requested by caller, the Ids of outlier elements excluded from the computed extents. */\r\n outliers?: Id64Array;\r\n}\r\n\r\n/**\r\n * Options for the importing of schemas\r\n * @public\r\n */\r\nexport interface SchemaImportOptions {\r\n /**\r\n * An [[ECSchemaXmlContext]] to use instead of building a default one.\r\n * This can be useful in rare cases where custom schema location logic is necessary\r\n * @internal\r\n */\r\n ecSchemaXmlContext?: ECSchemaXmlContext;\r\n}\r\n\r\n/** @internal */\r\nexport enum BriefcaseLocalValue {\r\n StandaloneEdit = \"StandaloneEdit\",\r\n NoLocking = \"NoLocking\"\r\n}\r\n\r\n// function to open an briefcaseDb, perform an operation, and then close it.\r\nconst withBriefcaseDb = async (briefcase: OpenBriefcaseArgs, fn: (_db: BriefcaseDb) => Promise<any>) => {\r\n const db = await BriefcaseDb.open(briefcase);\r\n try {\r\n return await fn(db);\r\n } finally {\r\n db.close();\r\n }\r\n};\r\n\r\n/**\r\n * Settings for an individual iModel. May only include settings priority for iModel, iTwin and organization.\r\n * @note if there is more than one iModel for an iTwin or organization, they will *each* hold an independent copy of the settings for those priorities.\r\n */\r\nclass IModelSettings extends SettingsImpl {\r\n protected override verifyPriority(priority: SettingsPriority) {\r\n if (priority <= SettingsPriority.application)\r\n throw new Error(\"Use IModelHost.appSettings to access settings of priority 'application' or lower\");\r\n }\r\n\r\n public override * getSettingEntries<T extends Setting>(name: string): Iterable<{ value: T, dictionary: SettingsDictionary }> {\r\n yield* super.getSettingEntries(name);\r\n yield* IModelHost.appWorkspace.settings.getSettingEntries(name);\r\n }\r\n}\r\n\r\n/** Arguments supplied to [[IModelDb.exportSchema]] specifying which ECSchema to write to what location on the local file system.\r\n * @beta\r\n */\r\nexport interface ExportSchemaArgs {\r\n /** The name of the ECSchema to export. */\r\n schemaName: string;\r\n /** The directory in which to place the created schema file. */\r\n outputDirectory: LocalFileName;\r\n /** Optionally, the name of the file to create in [[outputDirectory]].\r\n * Defaults to <SchemaName>.<SchemaVersion>.ecschema.xml\r\n */\r\n outputFileName?: string;\r\n}\r\n\r\n/** Arguments supplied to [[IModelDb.simplifyElementGeometry]].\r\n * @beta\r\n */\r\nexport interface SimplifyElementGeometryArgs {\r\n /** The Id of the [[GeometricElement]] or [[GeometryPart]] whose geometry is to be simplified. */\r\n id: Id64String;\r\n /** If true, simplify by converting each [BRepEntity]($common) in the element's geometry stream to a high-resolution\r\n * mesh or curve geometry.\r\n */\r\n convertBReps?: boolean;\r\n}\r\n\r\n/** The output of [[IModelDb.inlineGeometryParts]].\r\n * If [[numCandidateParts]], [[numRefsInlined]], and [[numPartsDeleted ]] are all the same, the operation was fully successful.\r\n * Otherwise, some errors occurred inlining and/or deleting one or more parts.\r\n * A part will not be deleted unless it is first successfully inlined.\r\n * @beta\r\n */\r\nexport interface InlineGeometryPartsResult {\r\n /** The number of parts that were determined to have exactly one reference, making them candidates for inlining. */\r\n numCandidateParts: number;\r\n /** The number of part references successfully inlined. */\r\n numRefsInlined: number;\r\n /** The number of candidate parts that were successfully deleted after inlining. */\r\n numPartsDeleted: number;\r\n}\r\n\r\n/** An iModel database file. The database file can either be a briefcase or a snapshot.\r\n * @see [Accessing iModels]($docs/learning/backend/AccessingIModels.md)\r\n * @see [About IModelDb]($docs/learning/backend/IModelDb.md)\r\n * @public\r\n */\r\nexport abstract class IModelDb extends IModel {\r\n private _initialized = false;\r\n /** Keep track of open imodels to support `tryFind` for RPC purposes */\r\n private static readonly _openDbs = new Map<string, IModelDb>();\r\n\r\n public static readonly defaultLimit = 1000; // default limit for batching queries\r\n public static readonly maxLimit = 10000; // maximum limit for batching queries\r\n public readonly models = new IModelDb.Models(this);\r\n public readonly elements = new IModelDb.Elements(this);\r\n public readonly views = new IModelDb.Views(this);\r\n public readonly tiles = new IModelDb.Tiles(this);\r\n /** @beta */\r\n public readonly channels: ChannelControl = createChannelControl(this);\r\n private _relationships?: Relationships;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n private readonly _statementCache = new StatementCache<ECSqlStatement>();\r\n private readonly _sqliteStatementCache = new StatementCache<SqliteStatement>();\r\n private _codeSpecs?: CodeSpecs;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n private _classMetaDataRegistry?: MetaDataRegistry;\r\n private _jsClassMap?: EntityJsClassMap;\r\n private _schemaMap?: SchemaMap;\r\n private _schemaContext?: SchemaContext;\r\n /** @deprecated in 5.0.0 - will not be removed until after 2026-06-13. Use [[fonts]]. */\r\n protected _fontMap?: FontMap; // eslint-disable-line @typescript-eslint/no-deprecated\r\n private readonly _fonts: IModelDbFonts = createIModelDbFonts(this);\r\n private _workspace?: OwnedWorkspace;\r\n\r\n private readonly _snaps = new Map<string, IModelJsNative.SnapRequest>();\r\n private static _shutdownListener: VoidFunction | undefined; // so we only register listener once\r\n /** @internal */\r\n protected _locks?: LockControl = createNoOpLockControl();\r\n\r\n /** @internal */\r\n protected _codeService?: CodeService;\r\n\r\n /** @alpha */\r\n public get codeService() { return this._codeService; }\r\n\r\n /** The [[LockControl]] that orchestrates [concurrent editing]($docs/learning/backend/ConcurrencyControl.md) of this iModel. */\r\n public get locks(): LockControl { return this._locks!; } // eslint-disable-line @typescript-eslint/no-non-null-assertion\r\n\r\n /** Provides methods for interacting with [font-related information]($docs/learning/backend/Fonts.md) stored in this iModel.\r\n * @beta\r\n */\r\n public get fonts(): IModelDbFonts { return this._fonts; }\r\n\r\n /**\r\n * Get the [[Workspace]] for this iModel.\r\n * @beta\r\n */\r\n public get workspace(): Workspace {\r\n if (undefined === this._workspace)\r\n this._workspace = constructWorkspace(new IModelSettings());\r\n\r\n return this._workspace;\r\n }\r\n\r\n /**\r\n * get the cloud container for this iModel, if it was opened from one\r\n * @beta\r\n */\r\n public get cloudContainer(): CloudSqlite.CloudContainer | undefined {\r\n return this[_nativeDb].cloudContainer;\r\n }\r\n\r\n /** Acquire the exclusive schema lock on this iModel.\r\n * @note: To acquire the schema lock, all other briefcases must first release *all* their locks. No other briefcases\r\n * will be able to acquire *any* locks while the schema lock is held.\r\n */\r\n public async acquireSchemaLock(): Promise<void> {\r\n return this.locks.acquireLocks({ exclusive: IModel.repositoryModelId });\r\n }\r\n /** determine whether the schema lock is currently held for this iModel. */\r\n public get holdsSchemaLock() {\r\n return this.locks.holdsExclusiveLock(IModel.repositoryModelId);\r\n }\r\n\r\n /** Event called after a changeset is applied to this IModelDb. */\r\n public readonly onChangesetApplied = new BeEvent<() => void>();\r\n /** @internal */\r\n public notifyChangesetApplied() {\r\n this.changeset = this[_nativeDb].getCurrentChangeset();\r\n this.onChangesetApplied.raiseEvent();\r\n }\r\n\r\n /** @internal */\r\n public restartDefaultTxn() {\r\n this[_nativeDb].restartDefaultTxn();\r\n }\r\n\r\n /** @deprecated in 5.0.0 - will not be removed until after 2026-06-13. Use [[fonts]]. */\r\n public get fontMap(): FontMap { // eslint-disable-line @typescript-eslint/no-deprecated\r\n return this._fontMap ?? (this._fontMap = new FontMap(this[_nativeDb].readFontMap())); // eslint-disable-line @typescript-eslint/no-deprecated\r\n }\r\n\r\n /** @internal */\r\n public clearFontMap(): void {\r\n this._fontMap = undefined; // eslint-disable-line @typescript-eslint/no-deprecated\r\n this[_nativeDb].invalidateFontMap();\r\n }\r\n\r\n /** Check if this iModel has been opened read-only or not. */\r\n public get isReadonly(): boolean { return this.openMode === OpenMode.Readonly; }\r\n\r\n /** The Guid that identifies this iModel. */\r\n public override get iModelId(): GuidString {\r\n assert(undefined !== super.iModelId);\r\n return super.iModelId;\r\n } // GuidString | undefined for the IModel superclass, but required for all IModelDb subclasses\r\n\r\n /** @internal*/\r\n public readonly [_nativeDb]: IModelJsNative.DgnDb;\r\n\r\n /** Get the full path fileName of this iModelDb\r\n * @note this member is only valid while the iModel is opened.\r\n */\r\n public get pathName(): LocalFileName { return this[_nativeDb].getFilePath(); }\r\n\r\n /** Get the full path to this iModel's \"watch file\".\r\n * A read-only briefcase opened with `watchForChanges: true` creates this file next to the briefcase file on open, if it doesn't already exist.\r\n * A writable briefcase \"touches\" this file if it exists whenever it commits changes to the briefcase.\r\n * The read-only briefcase can use a file watcher to react when the writable briefcase makes changes to the briefcase.\r\n * This is more reliable than watching the sqlite WAL file.\r\n * @internal\r\n */\r\n public get watchFilePathName(): LocalFileName { return `${this.pathName}-watch`; }\r\n\r\n /** @internal */\r\n protected constructor(args: { nativeDb: IModelJsNative.DgnDb, key: string, changeset?: ChangesetIdWithIndex }) {\r\n super({ ...args, iTwinId: args.nativeDb.getITwinId(), iModelId: args.nativeDb.getIModelId() });\r\n this[_nativeDb] = args.nativeDb;\r\n\r\n // it is illegal to create an IModelDb unless the nativeDb has been opened. Throw otherwise.\r\n if (!this.isOpen)\r\n throw new Error(\"cannot create an IModelDb unless it has already been opened\");\r\n\r\n // PR https://github.com/iTwin/imodel-native/pull/558 renamed closeIModel to closeFile because it changed its behavior.\r\n // Ideally, nobody outside of core-backend would be calling it, but somebody important is.\r\n // Make closeIModel available so their code doesn't break.\r\n (this[_nativeDb] as any).closeIModel = () => {\r\n if (!this.isReadonly)\r\n this.saveChanges(); // preserve old behavior of closeIModel that was removed when renamed to closeFile\r\n\r\n this[_nativeDb].closeFile();\r\n };\r\n\r\n this[_nativeDb].setIModelDb(this);\r\n\r\n this[_resetIModelDb]();\r\n IModelDb._openDbs.set(this._fileKey, this);\r\n\r\n if (undefined === IModelDb._shutdownListener) { // the first time we create an IModelDb, add a listener to close any orphan files at shutdown.\r\n IModelDb._shutdownListener = IModelHost.onBeforeShutdown.addListener(() => {\r\n IModelDb._openDbs.forEach((db) => { // N.B.: db.close() removes from _openedDbs\r\n try {\r\n db.abandonChanges();\r\n db.close();\r\n } catch { }\r\n });\r\n });\r\n }\r\n }\r\n\r\n /** @internal */\r\n public [_resetIModelDb]() {\r\n this.loadIModelSettings();\r\n GeoCoordConfig.loadForImodel(this.workspace.settings); // load gcs data specified by iModel's settings dictionaries, must be done before calling initializeIModelDb\r\n this.initializeIModelDb();\r\n }\r\n\r\n /**\r\n * Attach an iModel file to this connection and load and register its schemas.\r\n * @note There are some reserve tablespace names that cannot be used. They are 'main', 'schema_sync_db', 'ecchange' & 'temp'\r\n * @param fileName IModel file name\r\n * @param alias identifier for the attached file. This identifier is used to access schema from the attached file. e.g. if alias is 'abc' then schema can be accessed using 'abc.MySchema.MyClass'\r\n *\r\n * *Example:*\r\n * ``` ts\r\n * [[include:IModelDb_attachDb.code]]\r\n * ```\r\n */\r\n public attachDb(fileName: string, alias: string): void {\r\n if (alias.toLowerCase() === \"main\" || alias.toLowerCase() === \"schema_sync_db\" || alias.toLowerCase() === \"ecchange\" || alias.toLowerCase() === \"temp\") {\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Reserved tablespace name cannot be used\");\r\n }\r\n this[_nativeDb].attachDb(fileName, alias);\r\n }\r\n /**\r\n * Detach the attached file from this connection. The attached file is closed and its schemas are unregistered.\r\n * @note There are some reserve tablespace names that cannot be used. They are 'main', 'schema_sync_db', 'ecchange' & 'temp'\r\n * @param alias identifer that was used in the call to [[attachDb]]\r\n *\r\n * *Example:*\r\n * ``` ts\r\n * [[include:IModelDb_attachDb.code]]\r\n * ```\r\n */\r\n public detachDb(alias: string): void {\r\n if (alias.toLowerCase() === \"main\" || alias.toLowerCase() === \"schema_sync_db\" || alias.toLowerCase() === \"ecchange\" || alias.toLowerCase() === \"temp\") {\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Reserved tablespace name cannot be used\");\r\n }\r\n this.clearCaches();\r\n this[_nativeDb].detachDb(alias);\r\n }\r\n /** Close this IModel, if it is currently open, and save changes if it was opened in ReadWrite mode. */\r\n public close(): void {\r\n if (!this.isOpen)\r\n return; // don't continue if already closed\r\n\r\n this.beforeClose();\r\n IModelDb._openDbs.delete(this._fileKey);\r\n this._workspace?.close();\r\n this.locks[_close]();\r\n this._locks = undefined;\r\n this._codeService?.close();\r\n this._codeService = undefined;\r\n if (!this.isReadonly)\r\n this.saveChanges();\r\n this[_nativeDb].closeFile();\r\n }\r\n\r\n /** @internal */\r\n public async refreshContainerForRpc(_userAccessToken: AccessToken): Promise<void> { }\r\n\r\n /** Event called when the iModel is about to be closed. */\r\n public readonly onBeforeClose = new BeEvent<() => void>();\r\n\r\n /**\r\n * Called by derived classes before closing the connection\r\n * @internal\r\n */\r\n protected beforeClose() {\r\n this.onBeforeClose.raiseEvent();\r\n this.clearCaches();\r\n }\r\n\r\n /** @internal */\r\n protected initializeIModelDb(when?: \"pullMerge\") {\r\n const props = this[_nativeDb].getIModelProps(when);\r\n super.initialize(props.rootSubject.name, props);\r\n if (this._initialized)\r\n return;\r\n\r\n this._initialized = true;\r\n const db = this.isBriefcaseDb() ? this : undefined;\r\n if (!db || !IpcHost.isValid)\r\n return;\r\n\r\n db.onNameChanged.addListener(() => IpcHost.notifyTxns(db, \"notifyIModelNameChanged\", db.name));\r\n db.onRootSubjectChanged.addListener(() => IpcHost.notifyTxns(db, \"notifyRootSubjectChanged\", db.rootSubject));\r\n\r\n db.onProjectExtentsChanged.addListener(() => IpcHost.notifyTxns(db, \"notifyProjectExtentsChanged\", db.projectExtents.toJSON()));\r\n db.onGlobalOriginChanged.addListener(() => IpcHost.notifyTxns(db, \"notifyGlobalOriginChanged\", db.globalOrigin.toJSON()));\r\n db.onEcefLocationChanged.addListener(() => IpcHost.notifyTxns(db, \"notifyEcefLocationChanged\", db.ecefLocation?.toJSON()));\r\n db.onGeographicCoordinateSystemChanged.addListener(() => IpcHost.notifyTxns(db, \"notifyGeographicCoordinateSystemChanged\", db.geographicCoordinateSystem?.toJSON()));\r\n }\r\n\r\n /** Returns true if this is a BriefcaseDb\r\n * @see [[BriefcaseDb.open]]\r\n */\r\n public get isBriefcase(): boolean { return false; }\r\n /** Type guard for instanceof [[BriefcaseDb]] */\r\n public isBriefcaseDb(): this is BriefcaseDb { return this.isBriefcase; }\r\n\r\n /** Returns true if this is a SnapshotDb\r\n * @see [[SnapshotDb.open]]\r\n */\r\n public get isSnapshot(): boolean { return false; }\r\n /** Type guard for instanceof [[SnapshotDb]] */\r\n public isSnapshotDb(): this is SnapshotDb { return this.isSnapshot; }\r\n\r\n /** Returns true if this is a *standalone* iModel\r\n * @see [[StandaloneDb.open]]\r\n * @internal\r\n */\r\n public get isStandalone(): boolean { return false; }\r\n /** Type guard for instanceof [[StandaloneDb]]. */\r\n public isStandaloneDb(): this is StandaloneDb { return this.isStandalone; }\r\n\r\n /** Return `true` if the underlying nativeDb is open and valid.\r\n * @internal\r\n */\r\n public get isOpen(): boolean { return this[_nativeDb].isOpen(); }\r\n\r\n /** Get the briefcase Id of this iModel */\r\n public getBriefcaseId(): BriefcaseId { return this.isOpen ? this[_nativeDb].getBriefcaseId() : BriefcaseIdValue.Illegal; }\r\n\r\n /**\r\n * Use a prepared ECSQL statement, potentially from the statement cache. If the requested statement doesn't exist\r\n * in the statement cache, a new statement is prepared. After the callback completes, the statement is reset and saved\r\n * in the statement cache so it can be reused in the future. Use this method for ECSQL statements that will be\r\n * reused often and are expensive to prepare. The statement cache holds the most recently used statements, discarding\r\n * the oldest statements as it fills. For statements you don't intend to reuse, instead use [[withStatement]].\r\n * @param sql The SQLite SQL statement to execute\r\n * @param callback the callback to invoke on the prepared statement\r\n * @param logErrors Determines if error will be logged if statement fail to prepare\r\n * @returns the value returned by `callback`.\r\n * @see [[withStatement]]\r\n * @public\r\n * @deprecated in 4.11 - will not be removed until after 2026-06-13. Use [[createQueryReader]] instead.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n public withPreparedStatement<T>(ecsql: string, callback: (stmt: ECSqlStatement) => T, logErrors = true): T {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const stmt = this._statementCache.findAndRemove(ecsql) ?? this.prepareStatement(ecsql, logErrors);\r\n const release = () => this._statementCache.addOrDispose(stmt);\r\n try {\r\n const val = callback(stmt);\r\n if (val instanceof Promise) {\r\n val.then(release, release);\r\n } else {\r\n release();\r\n }\r\n return val;\r\n } catch (err: any) {\r\n release();\r\n throw err;\r\n }\r\n }\r\n\r\n /**\r\n * Prepared and execute a callback on an ECSQL statement. After the callback completes the statement is disposed.\r\n * Use this method for ECSQL statements are either not expected to be reused, or are not expensive to prepare.\r\n * For statements that will be reused often, instead use [[withPreparedStatement]].\r\n * @param sql The SQLite SQL statement to execute\r\n * @param callback the callback to invoke on the prepared statement\r\n * @param logErrors Determines if error will be logged if statement fail to prepare\r\n * @returns the value returned by `callback`.\r\n * @see [[withPreparedStatement]]\r\n * @public\r\n * @deprecated in 4.11 - will not be removed until after 2026-06-13. Use [[createQueryReader]] instead.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n public withStatement<T>(ecsql: string, callback: (stmt: ECSqlStatement) => T, logErrors = true): T {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const stmt = this.prepareStatement(ecsql, logErrors);\r\n const release = () => stmt[Symbol.dispose]();\r\n try {\r\n const val = callback(stmt);\r\n if (val instanceof Promise) {\r\n val.then(release, release);\r\n } else {\r\n release();\r\n }\r\n return val;\r\n } catch (err: any) {\r\n release();\r\n throw err;\r\n }\r\n }\r\n /** Allow to execute query and read results along with meta data. The result are streamed.\r\n *\r\n * See also:\r\n * - [ECSQL Overview]($docs/learning/backend/ExecutingECSQL)\r\n * - [Code Examples]($docs/learning/backend/ECSQLCodeExamples)\r\n * - [ECSQL Row Format]($docs/learning/ECSQLRowFormat)\r\n *\r\n * @param params The values to bind to the parameters (if the ECSQL has any).\r\n * @param config Allow to specify certain flags which control how query is executed.\r\n * @returns Returns an [ECSqlReader]($common) which helps iterate over the result set and also give access to metadata.\r\n * @public\r\n * */\r\n public createQueryReader(ecsql: string, params?: QueryBinder, config?: QueryOptions): ECSqlReader {\r\n if (!this[_nativeDb].isOpen())\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"db not open\");\r\n\r\n const executor = {\r\n execute: async (request: DbQueryRequest) => {\r\n return ConcurrentQuery.executeQueryRequest(this[_nativeDb], request);\r\n },\r\n };\r\n return new ECSqlReader(executor, ecsql, params, config);\r\n }\r\n\r\n /**\r\n * Use a prepared SQL statement, potentially from the statement cache. If the requested statement doesn't exist\r\n * in the statement cache, a new statement is prepared. After the callback completes, the statement is reset and saved\r\n * in the statement cache so it can be reused in the future. Use this method for SQL statements that will be\r\n * reused often and are expensive to prepare. The statement cache holds the most recently used statements, discarding\r\n * the oldest statements as it fills. For statements you don't intend to reuse, instead use [[withSqliteStatement]].\r\n * @param sql The SQLite SQL statement to execute\r\n * @param callback the callback to invoke on the prepared statement\r\n * @param logErrors Determine if errors are logged or not\r\n * @returns the value returned by `callback`.\r\n * @see [[withPreparedStatement]]\r\n * @public\r\n */\r\n public withPreparedSqliteStatement<T>(sql: string, callback: (stmt: SqliteStatement) => T, logErrors = true): T {\r\n const stmt = this._sqliteStatementCache.findAndRemove(sql) ?? this.prepareSqliteStatement(sql, logErrors);\r\n const release = () => this._sqliteStatementCache.addOrDispose(stmt);\r\n try {\r\n const val: T = callback(stmt);\r\n if (val instanceof Promise) {\r\n val.then(release, release);\r\n } else {\r\n release();\r\n }\r\n return val;\r\n } catch (err: any) {\r\n release();\r\n throw err;\r\n }\r\n }\r\n\r\n /**\r\n * Prepared and execute a callback on a SQL statement. After the callback completes the statement is disposed.\r\n * Use this method for SQL statements are either not expected to be reused, or are not expensive to prepare.\r\n * For statements that will be reused often, instead use [[withPreparedSqliteStatement]].\r\n * @param sql The SQLite SQL statement to execute\r\n * @param callback the callback to invoke on the prepared statement\r\n * @param logErrors Determine if errors are logged or not\r\n * @returns the value returned by `callback`.\r\n * @public\r\n */\r\n public withSqliteStatement<T>(sql: string, callback: (stmt: SqliteStatement) => T, logErrors = true): T {\r\n const stmt = this.prepareSqliteStatement(sql, logErrors);\r\n const release = () => stmt[Symbol.dispose]();\r\n try {\r\n const val: T = callback(stmt);\r\n if (val instanceof Promise) {\r\n val.then(release, release);\r\n } else {\r\n release();\r\n }\r\n return val;\r\n } catch (err: any) {\r\n release();\r\n throw err;\r\n }\r\n }\r\n\r\n /** Prepare an SQL statement.\r\n * @param sql The SQL statement to prepare\r\n * @throws [[IModelError]] if there is a problem preparing the statement.\r\n * @internal\r\n */\r\n public prepareSqliteStatement(sql: string, logErrors = true): SqliteStatement {\r\n const stmt = new SqliteStatement(sql);\r\n stmt.prepare(this[_nativeDb], logErrors);\r\n return stmt;\r\n }\r\n\r\n /**\r\n * queries the BisCore.SubCategory table for entries that are children of used spatial categories and 3D elements.\r\n * @returns array of SubCategoryResultRow\r\n * @internal\r\n */\r\n public async queryAllUsedSpatialSubCategories(): Promise<SubCategoryResultRow[]> {\r\n const result: SubCategoryResultRow[] = [];\r\n const parentCategoriesQuery = `SELECT DISTINCT Category.Id AS id FROM BisCore.GeometricElement3d WHERE Category.Id IN (SELECT ECInstanceId FROM BisCore.SpatialCategory)`;\r\n const parentCategories: Id64Array = [];\r\n for await (const row of this.createQueryReader(parentCategoriesQuery)) {\r\n parentCategories.push(row.id);\r\n };\r\n const where = [...parentCategories].join(\",\");\r\n const query = `SELECT ECInstanceId as id, Parent.Id as parentId, Properties as appearance FROM BisCore.SubCategory WHERE Parent.Id IN (${where})`;\r\n\r\n try {\r\n for await (const row of this.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n result.push(row.toRow() as SubCategoryResultRow);\r\n }\r\n } catch {\r\n // We can ignore the error here, and just return whatever we were able to query.\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * queries the BisCore.SubCategory table for the entries that are children of the passed categoryIds.\r\n * @param categoryIds categoryIds to query\r\n * @returns array of SubCategoryResultRow\r\n * @internal\r\n */\r\n public async querySubCategories(categoryIds: Iterable<Id64String>): Promise<SubCategoryResultRow[]> {\r\n const result: SubCategoryResultRow[] = [];\r\n\r\n const where = [...categoryIds].join(\",\");\r\n const query = `SELECT ECInstanceId as id, Parent.Id as parentId, Properties as appearance FROM BisCore.SubCategory WHERE Parent.Id IN (${where})`;\r\n try {\r\n for await (const row of this.createQueryReader(query, undefined, { rowFormat: QueryRowFormat.UseJsPropertyNames })) {\r\n result.push(row.toRow() as SubCategoryResultRow);\r\n }\r\n } catch {\r\n // We can ignore the error here, and just return whatever we were able to query.\r\n }\r\n return result;\r\n }\r\n\r\n /** Query for a set of entity ids, given an EntityQueryParams\r\n * @param params The query parameters. The `limit` and `offset` members should be used to page results.\r\n * @returns an Id64Set with results of query\r\n * @throws [[IModelError]] if the generated statement is invalid or [IModelDb.maxLimit]($backend) exceeded when collecting ids.\r\n *\r\n * *Example:*\r\n * ``` ts\r\n * [[include:ECSQL-backend-queries.select-element-by-code-value-using-queryEntityIds]]\r\n * ```\r\n */\r\n public queryEntityIds(params: EntityQueryParams): Id64Set {\r\n let sql = \"SELECT ECInstanceId FROM \";\r\n if (params.only)\r\n sql += \"ONLY \";\r\n sql += params.from;\r\n if (params.where)\r\n sql += ` WHERE ${params.where}`;\r\n\r\n if (params.orderBy)\r\n sql += ` ORDER BY ${params.orderBy}`;\r\n\r\n if (typeof params.limit === \"number\" && params.limit > 0)\r\n sql += ` LIMIT ${params.limit}`;\r\n\r\n if (typeof params.offset === \"number\" && params.offset > 0)\r\n sql += ` OFFSET ${params.offset}`;\r\n\r\n const ids = new Set<string>();\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this.withPreparedStatement(sql, (stmt) => {\r\n if (params.bindings)\r\n stmt.bindValues(params.bindings);\r\n for (const row of stmt) {\r\n if (row.id !== undefined) {\r\n ids.add(row.id);\r\n if (ids.size > IModelDb.maxLimit) {\r\n throw new IModelError(IModelStatus.BadRequest, \"Max LIMIT exceeded in SELECT statement\");\r\n }\r\n }\r\n }\r\n });\r\n return ids;\r\n }\r\n\r\n /** Clear all in-memory caches held in this IModelDb. */\r\n public clearCaches() {\r\n this._statementCache.clear();\r\n this._sqliteStatementCache.clear();\r\n this._classMetaDataRegistry = undefined;\r\n this._jsClassMap = undefined;\r\n this._schemaMap = undefined;\r\n this._schemaContext = undefined;\r\n this.elements[_cache].clear();\r\n this.models[_cache].clear();\r\n this.elements[_instanceKeyCache].clear();\r\n this.models[_instanceKeyCache].clear();\r\n }\r\n\r\n /** Update the project extents for this iModel.\r\n * <p><em>Example:</em>\r\n * ``` ts\r\n * [[include:IModelDb.updateProjectExtents]]\r\n * ```\r\n */\r\n public updateProjectExtents(newExtents: AxisAlignedBox3d) {\r\n this.projectExtents = newExtents;\r\n this.updateIModelProps();\r\n }\r\n\r\n /** Compute an appropriate project extents for this iModel based on the ranges of all spatial elements.\r\n * Typically, the result is simply the union of the ranges of all spatial elements. However, the algorithm also detects \"outlier elements\",\r\n * whose placements locate them so far from the rest of the spatial geometry that they are considered statistically insignificant. The\r\n * range of an outlier element does not contribute to the computed extents.\r\n * @param options Specifies the level of detail desired in the return value.\r\n * @returns the computed extents.\r\n * @note This method does not modify the IModel's stored project extents. @see [[updateProjectExtents]].\r\n */\r\n public computeProjectExtents(options?: ComputeProjectExtentsOptions): ComputedProjectExtents {\r\n const wantFullExtents = true === options?.reportExtentsWithOutliers;\r\n const wantOutliers = true === options?.reportOutliers;\r\n const result = this[_nativeDb].computeProjectExtents(wantFullExtents, wantOutliers);\r\n return {\r\n extents: Range3d.fromJSON(result.extents),\r\n extentsWithOutliers: result.fullExtents ? Range3d.fromJSON(result.fullExtents) : undefined,\r\n outliers: result.outliers,\r\n };\r\n }\r\n\r\n /** Update the [EcefLocation]($docs/learning/glossary#eceflocation) of this iModel. */\r\n public updateEcefLocation(ecef: EcefLocation) {\r\n this.setEcefLocation(ecef);\r\n this.updateIModelProps();\r\n }\r\n\r\n /** Update the IModelProps of this iModel in the database. */\r\n public updateIModelProps(): void {\r\n this[_nativeDb].updateIModelProps(this.toJSON());\r\n }\r\n\r\n /** Commit unsaved changes in memory as a Txn to this iModelDb.\r\n * @param description Optional description of the changes.\r\n * @throws [[IModelError]] if there is a problem saving changes or if there are pending, un-processed lock or code requests.\r\n * @note This will not push changes to the iModelHub.\r\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync}, {TxnManager.withIndirectTxnMode} or {RebaseHandler.recompute}.\r\n * @see [[IModelDb.pushChanges]] to push changes to the iModelHub.\r\n */\r\n public saveChanges(description?: string): void;\r\n\r\n /** Commit unsaved changes in memory as a Txn to this iModelDb. This is preferable for case where application like to store additional structured information with the change that could be useful later when rebasing.\r\n * @alpha\r\n * @param args Provide [[SaveChangesArgs]] of the changes.\r\n * @throws [[IModelError]] if there is a problem saving changes or if there are pending, un-processed lock or code requests.\r\n * @note This will not push changes to the iModelHub.\r\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync}, {TxnManager.withIndirectTxnMode} or {RebaseHandler.recompute}.\r\n * @see [[IModelDb.pushChanges]] to push changes to the iModelHub.\r\n */\r\n public saveChanges(args: SaveChangesArgs): void;\r\n\r\n /** Commit unsaved changes in memory as a Txn to this iModelDb.\r\n * @internal\r\n * @param descriptionOrArgs Optionally provide description or [[SaveChangesArgs]] args for the changes.\r\n * @throws [[IModelError]] if there is a problem saving changes or if there are pending, un-processed lock or code requests.\r\n * @note This will not push changes to the iModelHub.\r\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync}, {TxnManager.withIndirectTxnMode} or {RebaseHandler.recompute}.\r\n * @see [[IModelDb.pushChanges]] to push changes to the iModelHub.\r\n */\r\n public saveChanges(descriptionOrArgs?: string | SaveChangesArgs): void {\r\n if (this.openMode === OpenMode.Readonly)\r\n throw new IModelError(IModelStatus.ReadOnly, \"IModelDb was opened read-only\");\r\n\r\n if (this instanceof BriefcaseDb) {\r\n if (this.txns.isIndirectChanges) {\r\n throw new IModelError(IModelStatus.BadRequest, \"Cannot save changes while in an indirect change scope\");\r\n }\r\n }\r\n const args = typeof descriptionOrArgs === \"string\" ? { description: descriptionOrArgs } : descriptionOrArgs;\r\n if (!this[_nativeDb].hasUnsavedChanges()) {\r\n Logger.logWarning(loggerCategory, \"there are no unsaved changes\", () => args);\r\n }\r\n\r\n const stat = this[_nativeDb].saveChanges(args ? JSON.stringify(args) : undefined);\r\n if (DbResult.BE_SQLITE_ERROR_PropagateChangesFailed === stat)\r\n throw new IModelError(stat, `Could not save changes due to propagation failure.`);\r\n\r\n if (DbResult.BE_SQLITE_OK !== stat)\r\n throw new IModelError(stat, `Could not save changes (${args?.description})`);\r\n }\r\n\r\n /** Abandon changes in memory that have not been saved as a Txn to this iModelDb.\r\n * @note This will not delete Txns that have already been saved, even if they have not yet been pushed.\r\n */\r\n public abandonChanges(): void {\r\n // Clears instanceKey caches only, instead of all of the backend caches, since the changes are not saved yet\r\n this.elements[_cache].clear();\r\n this.models[_cache].clear();\r\n this.elements[_instanceKeyCache].clear();\r\n this.models[_instanceKeyCache].clear();\r\n this[_nativeDb].abandonChanges();\r\n }\r\n\r\n /**\r\n * Save all changes and perform a [checkpoint](https://www.sqlite.org/c3ref/wal_checkpoint_v2.html) on this IModelDb.\r\n * This ensures that all changes to the database since it was opened are saved to its file and the WAL file is truncated.\r\n * @note Checkpoint automatically happens when IModelDbs are closed. However, the checkpoint\r\n * operation itself can take some time. It may be useful to call this method prior to closing so that the checkpoint \"penalty\" is paid earlier.\r\n * @note Another use for this function is to permit the file to be copied while it is open for write. iModel files should\r\n * rarely be copied, and even less so while they're opened. But this scenario is sometimes encountered for tests.\r\n */\r\n public performCheckpoint() {\r\n if (!this.isReadonly) {\r\n this.saveChanges();\r\n this.clearCaches();\r\n this[_nativeDb].concurrentQueryShutdown();\r\n this[_nativeDb].clearECDbCache();\r\n this[_nativeDb].performCheckpoint();\r\n }\r\n }\r\n\r\n /** @internal\r\n * @deprecated in 4.8 - will not be removed until after 2026-06-13. Use `txns.reverseTxns`.\r\n */\r\n public reverseTxns(numOperations: number): IModelStatus {\r\n return this[_nativeDb].reverseTxns(numOperations);\r\n }\r\n\r\n /** @internal */\r\n public reinstateTxn(): IModelStatus {\r\n return this[_nativeDb].reinstateTxn();\r\n }\r\n\r\n /** @internal */\r\n public restartTxnSession(): void {\r\n return this[_nativeDb].restartTxnSession();\r\n }\r\n\r\n /** Removes unused schemas from the database.\r\n *\r\n * If the removal was successful, the database is automatically saved to disk.\r\n * @param schemaNames Array of schema names to drop\r\n * @throws [IModelError]($common) if the database if the operation failed.\r\n * @alpha\r\n */\r\n public async dropSchemas(schemaNames: string[]): Promise<void> {\r\n if (schemaNames.length === 0)\r\n return;\r\n if (this[_nativeDb].schemaSyncEnabled())\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Cannot drop schemas when schema sync is enabled\");\r\n if (this[_nativeDb].hasUnsavedChanges())\r\n throw new IModelError(ChangeSetStatus.HasUncommittedChanges, \"Cannot drop schemas with unsaved changes\");\r\n if (this[_nativeDb].getITwinId() !== Guid.empty)\r\n await this.acquireSchemaLock();\r\n\r\n try {\r\n this[_nativeDb].dropSchemas(schemaNames);\r\n this.saveChanges(`dropped unused schemas`);\r\n } catch (error: any) {\r\n Logger.logError(loggerCategory, `Failed to drop schemas: ${error}`);\r\n this.abandonChanges();\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, `Failed to drop schemas: ${error}`);\r\n } finally {\r\n await this.locks.releaseAllLocks();\r\n this.clearCaches();\r\n }\r\n }\r\n\r\n /** Import an ECSchema. On success, the schema definition is stored in the iModel.\r\n * This method is asynchronous (must be awaited) because, in the case where this IModelDb is a briefcase, this method first obtains the schema lock from the iModel server.\r\n * You must import a schema into an iModel before you can insert instances of the classes in that schema. See [[Element]]\r\n * @param schemaFileName array of Full paths to ECSchema.xml files to be imported.\r\n * @param {SchemaImportOptions} options - options during schema import.\r\n * @throws [[IModelError]] if the schema lock cannot be obtained or there is a problem importing the schema.\r\n * @note Changes are saved if importSchemas is successful and abandoned if not successful.\r\n * - You can use NativeLoggerCategory to turn on the native logs. You can also control [what exactly is logged by the loggers](https://www.itwinjs.org/learning/common/logging/#controlling-what-is-logged).\r\n * - See [Schema Versioning]($docs/bis/guide/schema-evolution/schema-versioning-and-generations.md) for more information on acceptable changes to schemas.\r\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync} or {RebaseHandler.recompute}.\r\n * @see querySchemaVersion\r\n */\r\n public async importSchemas(schemaFileNames: LocalFileName[], options?: SchemaImportOptions): Promise<void> {\r\n if (schemaFileNames.length === 0)\r\n return;\r\n\r\n if (this instanceof BriefcaseDb) {\r\n if (this.txns.rebaser.isRebasing) {\r\n throw new IModelError(IModelStatus.BadRequest, \"Cannot import schemas while rebasing\");\r\n }\r\n if (this.txns.isIndirectChanges) {\r\n throw new IModelError(IModelStatus.BadRequest, \"Cannot import schemas while in an indirect change scope\");\r\n }\r\n }\r\n\r\n const maybeCustomNativeContext = options?.ecSchemaXmlContext?.nativeContext;\r\n if (this[_nativeDb].schemaSyncEnabled()) {\r\n\r\n await SchemaSync.withLockedAccess(this, { openMode: OpenMode.Readonly, operationName: \"schema sync\" }, async (syncAccess) => {\r\n const schemaSyncDbUri = syncAccess.getUri();\r\n this.saveChanges();\r\n\r\n try {\r\n this[_nativeDb].importSchemas(schemaFileNames, { schemaLockHeld: false, ecSchemaXmlContext: maybeCustomNativeContext, schemaSyncDbUri });\r\n } catch (outerErr: any) {\r\n if (DbResult.BE_SQLITE_ERROR_DataTransformRequired === outerErr.errorNumber) {\r\n this.abandonChanges();\r\n if (this[_nativeDb].getITwinId() !== Guid.empty)\r\n await this.acquireSchemaLock();\r\n try {\r\n this[_nativeDb].importSchemas(schemaFileNames, { schemaLockHeld: true, ecSchemaXmlContext: maybeCustomNativeContext, schemaSyncDbUri });\r\n } catch (innerErr: any) {\r\n throw new IModelError(innerErr.errorNumber, innerErr.message);\r\n }\r\n } else {\r\n throw new IModelError(outerErr.errorNumber, outerErr.message);\r\n }\r\n }\r\n });\r\n } else {\r\n const nativeImportOptions: IModelJsNative.SchemaImportOptions = {\r\n schemaLockHeld: true,\r\n ecSchemaXmlContext: maybeCustomNativeContext,\r\n };\r\n\r\n if (this[_nativeDb].getITwinId() !== Guid.empty) // if this iModel is associated with an iTwin, importing schema requires the schema lock\r\n await this.acquireSchemaLock();\r\n\r\n try {\r\n this[_nativeDb].importSchemas(schemaFileNames, nativeImportOptions);\r\n } catch (err: any) {\r\n throw new IModelError(err.errorNumber, err.message);\r\n }\r\n }\r\n this.clearCaches();\r\n }\r\n\r\n /** Import ECSchema(s) serialized to XML. On success, the schema definition is stored in the iModel.\r\n * This method is asynchronous (must be awaited) because, in the case where this IModelDb is a briefcase, this method first obtains the schema lock from the iModel server.\r\n * You must import a schema into an iModel before you can insert instances of the classes in that schema. See [[Element]]\r\n * @param serializedXmlSchemas The xml string(s) created from a serialized ECSchema.\r\n * @throws [[IModelError]] if the schema lock cannot be obtained or there is a problem importing the schema.\r\n * @note Changes are saved if importSchemaStrings is successful and abandoned if not successful.\r\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync} or {RebaseHandler.recompute}.\r\n * @see querySchemaVersion\r\n * @alpha\r\n */\r\n public async importSchemaStrings(serializedXmlSchemas: string[]): Promise<void> {\r\n if (serializedXmlSchemas.length === 0)\r\n return;\r\n\r\n if (this instanceof BriefcaseDb) {\r\n if (this.txns.rebaser.isRebasing) {\r\n throw new IModelError(IModelStatus.BadRequest, \"Cannot import schemas while rebasing\");\r\n }\r\n if (this.txns.isIndirectChanges) {\r\n throw new IModelError(IModelStatus.BadRequest, \"Cannot import schemas while in an indirect change scope\");\r\n }\r\n }\r\n\r\n if (this[_nativeDb].schemaSyncEnabled()) {\r\n await SchemaSync.withLockedAccess(this, { openMode: OpenMode.Readonly, operationName: \"schemaSync\" }, async (syncAccess) => {\r\n const schemaSyncDbUri = syncAccess.getUri();\r\n this.saveChanges();\r\n try {\r\n this[_nativeDb].importXmlSchemas(serializedXmlSchemas, { schemaLockHeld: false, schemaSyncDbUri });\r\n } catch (outerErr: any) {\r\n if (DbResult.BE_SQLITE_ERROR_DataTransformRequired === outerErr.errorNumber) {\r\n this.abandonChanges();\r\n if (this[_nativeDb].getITwinId() !== Guid.empty)\r\n await this.acquireSchemaLock();\r\n try {\r\n this[_nativeDb].importXmlSchemas(serializedXmlSchemas, { schemaLockHeld: true, schemaSyncDbUri });\r\n } catch (innerErr: any) {\r\n throw new IModelError(innerErr.errorNumber, innerErr.message);\r\n }\r\n } else {\r\n throw new IModelError(outerErr.errorNumber, outerErr.message);\r\n }\r\n }\r\n });\r\n } else {\r\n if (this.iTwinId && this.iTwinId !== Guid.empty) // if this iModel is associated with an iTwin, importing schema requires the schema lock\r\n await this.acquireSchemaLock();\r\n\r\n try {\r\n this[_nativeDb].importXmlSchemas(serializedXmlSchemas, { schemaLockHeld: true });\r\n } catch (err: any) {\r\n throw new IModelError(err.errorNumber, err.message);\r\n }\r\n }\r\n this.clearCaches();\r\n }\r\n\r\n /** Find an opened instance of any subclass of IModelDb, by filename\r\n * @note this method returns an IModelDb if the filename is open for *any* subclass of IModelDb\r\n */\r\n public static findByFilename(fileName: LocalFileName): IModelDb | undefined {\r\n for (const entry of this._openDbs) {\r\n // It shouldn't be possible for anything in _openDbs to not be open, but if so just skip them because `pathName` will throw an exception.\r\n if (entry[1].isOpen && entry[1].pathName === fileName)\r\n return entry[1];\r\n }\r\n return undefined;\r\n }\r\n\r\n /** Find an open IModelDb by its key.\r\n * @note This method is mainly for use by RPC implementations.\r\n * @throws [[IModelNotFoundResponse]] if an open IModelDb matching the key is not found.\r\n * @see [IModel.key]($common)\r\n */\r\n public static findByKey(key: string): IModelDb {\r\n const iModelDb = this.tryFindByKey(key);\r\n if (undefined === iModelDb) {\r\n // eslint-disable-next-line @typescript-eslint/only-throw-error\r\n throw new IModelNotFoundResponse(); // a very specific status for the RpcManager\r\n }\r\n return iModelDb;\r\n }\r\n\r\n /** Attempt to find an open IModelDb by key.\r\n * @returns The matching IModelDb or `undefined`.\r\n */\r\n public static tryFindByKey(key: string): IModelDb | undefined {\r\n return this._openDbs.get(key);\r\n }\r\n\r\n /** @internal */\r\n public static openDgnDb(file: { path: LocalFileName, key?: string }, openMode: OpenMode, upgradeOptions?: UpgradeOptions, props?: SnapshotOpenOptions & CloudContainerArgs & OpenSqliteArgs): IModelJsNative.DgnDb {\r\n file.key = file.key ?? Guid.createValue();\r\n if (this.tryFindByKey(file.key))\r\n throw new IModelError(IModelStatus.AlreadyOpen, `key [${file.key}] for file [${file.path}] is already in use`);\r\n\r\n const isUpgradeRequested = upgradeOptions?.domain === DomainOptions.Upgrade || upgradeOptions?.profile === ProfileOptions.Upgrade;\r\n if (isUpgradeRequested && openMode !== OpenMode.ReadWrite)\r\n throw new IModelError(IModelStatus.UpgradeFailed, \"Cannot upgrade a Readonly Db\");\r\n\r\n try {\r\n const nativeDb = new IModelNative.platform.DgnDb();\r\n const container = props?.container;\r\n if (container) {\r\n // temp files for cloud-based Dbs should be in the profileDir in a subdirectory named for their container\r\n const baseDir = join(IModelHost.profileDir, \"CloudDbTemp\", container.containerId);\r\n IModelJsFs.recursiveMkDirSync(baseDir);\r\n props = { ...props, tempFileBase: join(baseDir, file.path) };\r\n }\r\n nativeDb.openIModel(file.path, openMode, upgradeOptions, props, props?.container, props);\r\n return nativeDb;\r\n } catch (err: any) {\r\n throw new IModelError(err.errorNumber, `${err.message}, ${file.path}`);\r\n }\r\n }\r\n\r\n /**\r\n * Determines if the schemas in the Db must or can be upgraded by comparing them with those included in the\r\n * current version of the software.\r\n * @param filePath Full name of the briefcase including path\r\n * @param forReadWrite Pass true if validating for read-write scenarios - note that the schema version requirements\r\n * for opening the DgnDb read-write is more stringent than when opening the database read-only\r\n * @throws [[IModelError]] If the Db was in an invalid state and that causes a problem with validating schemas\r\n * @see [[BriefcaseDb.upgradeSchemas]] or [[StandaloneDb.upgradeSchemas]]\r\n * @see ($docs/learning/backend/IModelDb.md#upgrading-schemas-in-an-imodel)\r\n */\r\n public static validateSchemas(filePath: LocalFileName, forReadWrite: boolean): SchemaState {\r\n const openMode = forReadWrite ? OpenMode.ReadWrite : OpenMode.Readonly;\r\n const file = { path: filePath };\r\n let result = DbResult.BE_SQLITE_OK;\r\n try {\r\n const upgradeOptions: UpgradeOptions = {\r\n domain: DomainOptions.CheckRecommendedUpgrades,\r\n };\r\n const nativeDb = this.openDgnDb(file, openMode, upgradeOptions);\r\n nativeDb.closeFile();\r\n } catch (err: any) {\r\n result = err.errorNumber;\r\n }\r\n\r\n let schemaState: SchemaState = SchemaState.UpToDate;\r\n switch (result) {\r\n case DbResult.BE_SQLITE_OK:\r\n schemaState = SchemaState.UpToDate;\r\n break;\r\n case DbResult.BE_SQLITE_ERROR_ProfileTooOld:\r\n case DbResult.BE_SQLITE_ERROR_ProfileTooOldForReadWrite:\r\n case DbResult.BE_SQLITE_ERROR_SchemaTooOld:\r\n schemaState = SchemaState.TooOld;\r\n break;\r\n case DbResult.BE_SQLITE_ERROR_ProfileTooNew:\r\n case DbResult.BE_SQLITE_ERROR_ProfileTooNewForReadWrite:\r\n case DbResult.BE_SQLITE_ERROR_SchemaTooNew:\r\n schemaState = SchemaState.TooNew;\r\n break;\r\n case DbResult.BE_SQLITE_ERROR_SchemaUpgradeRecommended:\r\n schemaState = SchemaState.UpgradeRecommended;\r\n break;\r\n case DbResult.BE_SQLITE_ERROR_SchemaUpgradeRequired:\r\n schemaState = SchemaState.UpgradeRequired;\r\n break;\r\n case DbResult.BE_SQLITE_ERROR_InvalidProfileVersion:\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR_InvalidProfileVersion, \"The profile of the Db is invalid. Cannot upgrade or open the Db.\");\r\n default:\r\n throw new IModelError(DbResult.BE_SQLITE_ERROR, \"Error validating schemas. Cannot upgrade or open the Db.\");\r\n }\r\n return schemaState;\r\n }\r\n\r\n /** The registry of entity metadata for this iModel.\r\n * @internal\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `schemaContext` from the `iModel` instead.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Current usage:\r\n * const classMetaData: EntityMetaData | undefined = iModel.classMetaDataRegistry.find(\"SchemaName:ClassName\");\r\n *\r\n * // Replacement:\r\n * const metaData: EntityClass | undefined = imodel.schemaContext.getSchemaItemSync(\"SchemaName.ClassName\", EntityClass);\r\n * ```\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n public get classMetaDataRegistry(): MetaDataRegistry {\r\n if (this._classMetaDataRegistry === undefined)\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this._classMetaDataRegistry = new MetaDataRegistry();\r\n\r\n return this._classMetaDataRegistry;\r\n }\r\n\r\n /**\r\n * Allows registering js classes mapped to ECClasses\r\n */\r\n public get jsClassMap(): EntityJsClassMap {\r\n if (this._jsClassMap === undefined)\r\n this._jsClassMap = new EntityJsClassMap();\r\n\r\n return this._jsClassMap;\r\n }\r\n\r\n /**\r\n * Allows locally registering a schema for this imodel, in constrast to [Schemas.registerSchema] which is a global operation\r\n */\r\n public get schemaMap(): SchemaMap {\r\n if (this._schemaMap === undefined)\r\n this._schemaMap = new SchemaMap();\r\n\r\n return this._schemaMap;\r\n }\r\n\r\n /**\r\n * Gets the context that allows accessing the metadata (ecschema-metadata package) of this iModel\r\n * @public @preview\r\n */\r\n public get schemaContext(): SchemaContext {\r\n if (this._schemaContext === undefined) {\r\n const context = new SchemaContext();\r\n if(IModelHost.configuration && IModelHost.configuration.incrementalSchemaLoading === \"enabled\") {\r\n context.addLocater(new IModelIncrementalSchemaLocater(this));\r\n }\r\n context.addLocater(new SchemaJsonLocater((name) => this.getSchemaProps(name)));\r\n this._schemaContext = context;\r\n }\r\n\r\n return this._schemaContext;\r\n }\r\n\r\n /** Get the linkTableRelationships for this IModel */\r\n public get relationships(): Relationships {\r\n return this._relationships || (this._relationships = new Relationships(this));\r\n }\r\n\r\n /** Get the CodeSpecs in this IModel. */\r\n public get codeSpecs(): CodeSpecs {\r\n return (this._codeSpecs !== undefined) ? this._codeSpecs : (this._codeSpecs = new CodeSpecs(this));\r\n }\r\n /** Prepare an ECSQL statement.\r\n * @param sql The ECSQL statement to prepare\r\n * @param logErrors Determines if error will be logged if statement fail to prepare\r\n * @throws [[IModelError]] if there is a problem preparing the statement.\r\n * @deprecated in 4.11 - will not be removed until after 2026-06-13. Use [IModelDb.createQueryReader]($backend) or [ECDb.createQueryReader]($backend) to query.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n public prepareStatement(sql: string, logErrors = true): ECSqlStatement {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const stmt = new ECSqlStatement();\r\n stmt.prepare(this[_nativeDb], sql, logErrors);\r\n return stmt;\r\n }\r\n\r\n /** Prepare an ECSQL statement.\r\n * @param sql The ECSQL statement to prepare\r\n * @returns `undefined` if there is a problem preparing the statement.\r\n * @deprecated in 4.11 - will not be removed until after 2026-06-13. Use [IModelDb.createQueryReader]($backend) or [ECDb.createQueryReader]($backend) to query.\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n public tryPrepareStatement(sql: string): ECSqlStatement | undefined {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const statement = new ECSqlStatement();\r\n const result = statement.tryPrepare(this[_nativeDb], sql);\r\n return DbResult.BE_SQLITE_OK === result.status ? statement : undefined;\r\n }\r\n\r\n /** Construct an entity (Element or Model) from an iModel.\r\n * @throws [[IModelError]] if the entity cannot be constructed.\r\n */\r\n public constructEntity<T extends Entity, P extends EntityProps = EntityProps>(props: P): T {\r\n const jsClass = this.getJsClass(props.classFullName);\r\n return Entity.instantiate(jsClass, props, this) as T;\r\n }\r\n\r\n /** Get the JavaScript class that handles a given entity class. */\r\n public getJsClass<T extends typeof Entity>(classFullName: string): T {\r\n try {\r\n return ClassRegistry.getClass(classFullName, this) as T;\r\n } catch (err) {\r\n if (!ClassRegistry.isNotFoundError(err)) {\r\n throw err;\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this.loadMetaData(classFullName);\r\n return ClassRegistry.getClass(classFullName, this) as T;\r\n }\r\n }\r\n\r\n /** Constructs a ResolveInstanceKeyArgs from given parameters\r\n * @throws [[IModelError]] if the combination of supplied parameters is invalid.\r\n * @internal\r\n */\r\n public getInstanceArgs(instanceId?: Id64String, baseClassName?: string, federationGuid?: GuidString, code?: CodeProps): IModelJsNative.ResolveInstanceKeyArgs {\r\n if (instanceId && baseClassName) {\r\n return { partialKey: { id: instanceId, baseClassName } };\r\n } else if (federationGuid) {\r\n return { federationGuid };\r\n } else if (code) {\r\n return { code };\r\n } else {\r\n throw new IModelError(IModelStatus.InvalidId, \"Either instanceId and baseClassName or federationGuid or code must be specified\");\r\n }\r\n }\r\n\r\n /** Get metadata for a class. This method will load the metadata from the iModel into the cache as a side-effect, if necessary.\r\n * @throws [[IModelError]] if the metadata cannot be found nor loaded.\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `getSchemaItem` from `SchemaContext` class instead.\r\n *\r\n * @example\r\n * * ```typescript\r\n * // Current usage:\r\n * const metaData: EntityMetaData = imodel.getMetaData(\"SchemaName:ClassName\");\r\n *\r\n * // Replacement:\r\n * const metaData: EntityClass | undefined = imodel.schemaContext.getSchemaItemSync(\"SchemaName\", \"ClassName\", EntityClass);\r\n * ```\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n public getMetaData(classFullName: string): EntityMetaData {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n let metadata = this.classMetaDataRegistry.find(classFullName);\r\n if (metadata === undefined) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this.loadMetaData(classFullName);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n metadata = this.classMetaDataRegistry.find(classFullName);\r\n if (metadata === undefined)\r\n throw ClassRegistry.makeMetaDataNotFoundError(classFullName); // do not log\r\n }\r\n return metadata;\r\n }\r\n\r\n /** Identical to [[getMetaData]], except it returns `undefined` instead of throwing an error if the metadata cannot be found nor loaded.\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `getSchemaItem` from `SchemaContext` class instead.\r\n *\r\n * @example\r\n * * ```typescript\r\n * // Current usage:\r\n * const metaData: EntityMetaData | undefined = imodel.tryGetMetaData(\"SchemaName:ClassName\");\r\n *\r\n * // Replacement:\r\n * const metaData: EntityClass | undefined = imodel.schemaContext.getSchemaItemSync(\"SchemaName.ClassName\", EntityClass);\r\n * ```\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n public tryGetMetaData(classFullName: string): EntityMetaData | undefined {\r\n try {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return this.getMetaData(classFullName);\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n /** Invoke a callback on each property of the specified class, optionally including superclass properties.\r\n * @param iModel The IModel that contains the schema\r\n * @param classFullName The full class name to load the metadata, if necessary\r\n * @param wantSuper If true, superclass properties will also be processed\r\n * @param func The callback to be invoked on each property\r\n * @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.\r\n * @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `forEachProperty` instead.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Current usage:\r\n * IModelDb.forEachMetaData(imodel, \"BisCore:Element\", true, (name: string, propMetaData: PropertyMetaData) => {\r\n * console.log(`Property name: ${name}, Property type: ${propMetaData.primitiveType}`);\r\n * }, false);\r\n *\r\n * // Replacement:\r\n * await IModelDb.forEachProperty(imodel, \"TestDomain.TestDomainClass\", true, (propName: string, property: Property) => {\r\n * console.log(`Property name: ${propName}, Property type: ${property.propertyType}`);\r\n * }, false);\r\n * ```\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n public static forEachMetaData(iModel: IModelDb, classFullName: string, wantSuper: boolean, func: PropertyCallback, includeCustom: boolean = true) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n iModel.forEachMetaData(classFullName, wantSuper, func, includeCustom);\r\n }\r\n\r\n /** Invoke a callback on each property of the specified class, optionally including superclass properties.\r\n * @param classFullName The full class name to load the metadata, if necessary\r\n * @param wantSuper If true, superclass properties will also be processed\r\n * @param func The callback to be invoked on each property\r\n * @param includeCustom If true (default), include custom-handled properties in the iteration. Otherwise, skip custom-handled properties.\r\n * @note Custom-handled properties are core properties that have behavior enforced by C++ handlers.\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Use `forEachProperty` from `SchemaContext` class instead.\r\n *\r\n * @example\r\n * ```typescript\r\n * // Current usage:\r\n * iModel.forEachMetaData(\"BisCore:Element\", true, (name: string, propMetaData: PropertyMetaData) => {\r\n * console.log(`Property name: ${name}, Property type: ${propMetaData.primitiveType}`);\r\n * });\r\n *\r\n * // Replacement:\r\n * imodel.schemaContext.forEachProperty(\"BisCore:Element\", true, (propName: string, property: Property) => {\r\n * console.log(`Property name: ${propName}, Property type: ${property.propertyType}`);\r\n * });\r\n * ```\r\n */\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n public forEachMetaData(classFullName: string, wantSuper: boolean, func: PropertyCallback, includeCustom: boolean = true) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const meta = this.getMetaData(classFullName); // will load if necessary\r\n for (const propName in meta.properties) { // eslint-disable-line guard-for-in\r\n const propMeta = meta.properties[propName];\r\n if (includeCustom || !propMeta.isCustomHandled || propMeta.isCustomHandledOrphan)\r\n func(propName, propMeta);\r\n }\r\n\r\n if (wantSuper && meta.baseClasses && meta.baseClasses.length > 0)\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n meta.baseClasses.forEach((baseClass) => this.forEachMetaData(baseClass, true, func, includeCustom));\r\n }\r\n\r\n /**\r\n * @internal\r\n * @deprecated in 5.0 - will not be removed until after 2026-06-13. Please use `schemaContext` from `iModel` instead to get metadata.\r\n */\r\n private loadMetaData(classFullName: string) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n if (this.classMetaDataRegistry.find(classFullName))\r\n return;\r\n\r\n const className = classFullName.split(\":\");\r\n if (className.length !== 2)\r\n throw new IModelError(IModelStatus.BadArg, `Invalid classFullName: ${classFullName}`);\r\n\r\n const val = this[_nativeDb].getECClassMetaData(className[0], className[1]);\r\n if (val.error)\r\n throw new IModelError(val.error.status, `Error getting class meta data for: ${classFullName}`);\r\n\r\n assert(undefined !== val.result);\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const metaData = new EntityMetaData(JSON.parse(val.result));\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this.classMetaDataRegistry.add(classFullName, metaData);\r\n\r\n // Recursive, to make sure that base classes are cached.\r\n if (metaData.baseClasses !== undefined && metaData.baseClasses.length > 0)\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n metaData.baseClasses.forEach((baseClassName: string) => this.loadMetaData(baseClassName));\r\n }\r\n\r\n /** Returns the full schema for the input name.\r\n * @param name The name of the schema e.g. 'BisCore'\r\n * @returns The SchemaProps for the requested schema\r\n * @throws if the schema can not be found or loaded.\r\n */\r\n public getSchemaProps(name: string): ECSchemaProps {\r\n return this[_nativeDb].getSchemaProps(name);\r\n }\r\n\r\n /** Query if this iModel contains the definition of the specified class.\r\n * @param classFullName The full name of the class, for example, SomeSchema:SomeClass\r\n * @returns true if the iModel contains the class definition or false if not.\r\n * @see querySchemaVersion\r\n * @see importSchema\r\n */\r\n public containsClass(classFullName: string): boolean {\r\n const classNameParts = classFullName.replace(\".\", \":\").split(\":\");\r\n return classNameParts.length === 2 && this[_nativeDb].getECClassMetaData(classNameParts[0], classNameParts[1]).error === undefined;\r\n }\r\n\r\n /** Query the version of a schema of the specified name in this iModel.\r\n * @returns The schema version as a semver-compatible string or `undefined` if the schema has not been imported.\r\n */\r\n public querySchemaVersion(schemaName: string): string | undefined {\r\n const version = this.querySchemaVersionNumbers(schemaName);\r\n return version?.toString(false);\r\n }\r\n\r\n /** Query the version of a schema of the specified name in this iModel.\r\n * @returns the version numbers, or `undefined` if the schema has not been imported.\r\n */\r\n public querySchemaVersionNumbers(schemaName: string): ECVersion | undefined {\r\n const sql = `SELECT VersionMajor,VersionWrite,VersionMinor FROM ECDbMeta.ECSchemaDef WHERE Name=:schemaName LIMIT 1`;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return this.withPreparedStatement(sql, (statement: ECSqlStatement): ECVersion | undefined => {\r\n statement.bindString(\"schemaName\", schemaName);\r\n if (DbResult.BE_SQLITE_ROW === statement.step()) {\r\n const read: number = statement.getValue(0).getInteger(); // ECSchemaDef.VersionMajor --> semver.major\r\n const write: number = statement.getValue(1).getInteger(); // ECSchemaDef.VersionWrite --> semver.minor\r\n const minor: number = statement.getValue(2).getInteger(); // ECSchemaDef.VersionMinor --> semver.patch\r\n return new ECVersion(read, write, minor);\r\n }\r\n return undefined;\r\n });\r\n }\r\n\r\n /** Returns true if the specified schema exists in the iModel and is no older than the specified minimum version.\r\n * @beta\r\n */\r\n public meetsMinimumSchemaVersion(schemaName: string, minimumVersion: ECVersion): boolean {\r\n const actualVersion = this.querySchemaVersionNumbers(schemaName);\r\n return undefined !== actualVersion && actualVersion.compare(minimumVersion) >= 0;\r\n }\r\n\r\n /** Throws an error if the version of the schema specified by `schemaName` is older than `minimumVersion`.\r\n * The error will indicate the `featureName` that requires this minimum version.\r\n * Use this to produce more helpful errors when interacting with APIs that operate on classes introduced as\r\n * schemas evolve.\r\n * @beta\r\n */\r\n public requireMinimumSchemaVersion(schemaName: string, minimumVersion: ECVersion, featureName: string): void {\r\n if (!this.meetsMinimumSchemaVersion(schemaName, minimumVersion)) {\r\n throw new Error(`${featureName} requires ${schemaName} v${minimumVersion.toString()} or newer`);\r\n }\r\n }\r\n\r\n /** Retrieve a named texture image from this iModel, as a TextureData.\r\n * @param props the texture load properties which must include the name of the texture to load\r\n * @returns the TextureData or undefined if the texture image is not present.\r\n * @alpha\r\n */\r\n public async queryTextureData(props: TextureLoadProps): Promise<TextureData | undefined> {\r\n return this[_nativeDb].queryTextureData(props);\r\n }\r\n\r\n /** Query a \"file property\" from this iModel, as a string.\r\n * @returns the property string or undefined if the property is not present.\r\n */\r\n public queryFilePropertyString(prop: FilePropertyProps): string | undefined {\r\n return this[_nativeDb].queryFileProperty(prop, true) as string | undefined;\r\n }\r\n\r\n /** Query a \"file property\" from this iModel, as a blob.\r\n * @returns the property blob or undefined if the property is not present.\r\n */\r\n public queryFilePropertyBlob(prop: FilePropertyProps): Uint8Array | undefined {\r\n return this[_nativeDb].queryFileProperty(prop, false) as Uint8Array | undefined;\r\n }\r\n\r\n /** Save a \"file property\" to this iModel\r\n * @param prop the FilePropertyProps that describes the new property\r\n * @param value either a string or a blob to save as the file property\r\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync} or {TxnManager.withIndirectTxnMode}.\r\n */\r\n public saveFileProperty(prop: FilePropertyProps, strValue: string | undefined, blobVal?: Uint8Array): void {\r\n if (this instanceof BriefcaseDb) {\r\n if (this.txns.isIndirectChanges) {\r\n throw new IModelError(IModelStatus.BadRequest, \"Cannot save file property while in an indirect change scope\");\r\n }\r\n }\r\n this[_nativeDb].saveFileProperty(prop, strValue, blobVal);\r\n }\r\n\r\n /** delete a \"file property\" from this iModel\r\n * @param prop the FilePropertyProps that describes the property\r\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync} or {TxnManager.withIndirectTxnMode}.\r\n */\r\n public deleteFileProperty(prop: FilePropertyProps): void {\r\n if (this instanceof BriefcaseDb) {\r\n if (this.txns.isIndirectChanges) {\r\n throw new IModelError(IModelStatus.BadRequest, \"Cannot delete file property while in an indirect change scope\");\r\n }\r\n }\r\n this[_nativeDb].saveFileProperty(prop, undefined, undefined);\r\n }\r\n\r\n /** Query for the next available major id for a \"file property\" from this iModel.\r\n * @param prop the FilePropertyProps that describes the property\r\n * @returns the next available (that is, an unused) id for prop. If none are present, will return 0.\r\n */\r\n public queryNextAvailableFileProperty(prop: FilePropertyProps) { return this[_nativeDb].queryNextAvailableFileProperty(prop); }\r\n\r\n /** @internal */\r\n public async requestSnap(sessionId: string, props: SnapRequestProps): Promise<SnapResponseProps> {\r\n let request = this._snaps.get(sessionId);\r\n if (undefined === request) {\r\n request = new IModelNative.platform.SnapRequest();\r\n this._snaps.set(sessionId, request);\r\n } else\r\n request.cancelSnap();\r\n\r\n try {\r\n return await request.doSnap(this[_nativeDb], JsonUtils.toObject(props));\r\n } finally {\r\n this._snaps.delete(sessionId);\r\n }\r\n }\r\n\r\n /** Cancel a previously requested snap.\r\n * @internal\r\n */\r\n public cancelSnap(sessionId: string): void {\r\n const request = this._snaps.get(sessionId);\r\n if (undefined !== request) {\r\n request.cancelSnap();\r\n this._snaps.delete(sessionId);\r\n }\r\n }\r\n\r\n /** Get the clip containment status for the supplied elements. */\r\n public async getGeometryContainment(props: GeometryContainmentRequestProps): Promise<GeometryContainmentResponseProps> {\r\n return this[_nativeDb].getGeometryContainment(JsonUtils.toObject(props));\r\n }\r\n\r\n /** Get the mass properties for the supplied elements. */\r\n public async getMassProperties(props: MassPropertiesRequestProps): Promise<MassPropertiesResponseProps> {\r\n return this[_nativeDb].getMassProperties(JsonUtils.toObject(props));\r\n }\r\n\r\n /** Get the IModel coordinate corresponding to each GeoCoordinate point in the input */\r\n public async getIModelCoordinatesFromGeoCoordinates(props: IModelCoordinatesRequestProps): Promise<IModelCoordinatesResponseProps> {\r\n const response = this[_nativeDb].getIModelCoordinatesFromGeoCoordinates(props);\r\n\r\n // fromCache is only meaningful on the front-end; provide it for compatibility with return type.\r\n response.fromCache = 0;\r\n // Native omits the array if the input was empty.\r\n response.iModelCoords = response.iModelCoords ?? [];\r\n return response;\r\n }\r\n\r\n /** Get the GeoCoordinate (longitude, latitude, elevation) corresponding to each IModel Coordinate point in the input */\r\n public async getGeoCoordinatesFromIModelCoordinates(props: GeoCoordinatesRequestProps): Promise<GeoCoordinatesResponseProps> {\r\n const response = this[_nativeDb].getGeoCoordinatesFromIModelCoordinates(props);\r\n\r\n // fromCache is only meaningful on the front-end; provide it for compatibility with return type.\r\n response.fromCache = 0;\r\n // Native omits the array if the input was empty.\r\n response.geoCoords = response.geoCoords ?? [];\r\n return response;\r\n }\r\n\r\n /** Export meshes suitable for graphics APIs from arbitrary geometry in elements in this IModelDb.\r\n * * Requests can be slow when processing many elements so it is expected that this function be used on a dedicated backend,\r\n * or that shared backends export a limited number of elements at a time.\r\n * * Vertices are exported in the IModelDb's world coordinate system, which is right-handed with Z pointing up.\r\n * * The results of changing [ExportGraphicsOptions]($core-backend) during the [ExportGraphicsOptions.onGraphics]($core-backend) callback are not defined.\r\n *\r\n * Example that prints the mesh for element 1 to stdout in [OBJ format](https://en.wikipedia.org/wiki/Wavefront_.obj_file)\r\n * ```ts\r\n * const onGraphics: ExportGraphicsFunction = (info: ExportGraphicsInfo) => {\r\n * const mesh: ExportGraphicsMesh = info.mesh;\r\n * for (let i = 0; i < mesh.points.length; i += 3) {\r\n * process.stdout.write(`v ${mesh.points[i]} ${mesh.points[i + 1]} ${mesh.points[i + 2]}\\n`);\r\n * process.stdout.write(`vn ${mesh.normals[i]} ${mesh.normals[i + 1]} ${mesh.normals[i + 2]}\\n`);\r\n * }\r\n *\r\n * for (let i = 0; i < mesh.params.length; i += 2) {\r\n * process.stdout.write(`vt ${mesh.params[i]} ${mesh.params[i + 1]}\\n`);\r\n * }\r\n *\r\n * for (let i = 0; i < mesh.indices.length; i += 3) {\r\n * const p1 = mesh.indices[i];\r\n * const p2 = mesh.indices[i + 1];\r\n * const p3 = mesh.indices[i + 2];\r\n * process.stdout.write(`f ${p1}/${p1}/${p1} ${p2}/${p2}/${p2} ${p3}/${p3}/${p3}\\n`);\r\n * }\r\n * };\r\n *\r\n * iModel.exportGraphics(({ onGraphics, elementIdArray: [\"0x1\"] }));\r\n * ```\r\n * @returns 0 if successful, status otherwise\r\n * @public\r\n */\r\n public exportGraphics(exportProps: ExportGraphicsOptions): DbResult {\r\n return this[_nativeDb].exportGraphics(exportProps);\r\n }\r\n\r\n /**\r\n * Exports meshes suitable for graphics APIs from a specified [GeometryPart]($core-backend)\r\n * in this IModelDb.\r\n * The expected use case is to call [IModelDb.exportGraphics]($core-backend) and supply the\r\n * optional partInstanceArray argument, then call this function for each unique GeometryPart from\r\n * that list.\r\n * * The results of changing [ExportPartGraphicsOptions]($core-backend) during the\r\n * [ExportPartGraphicsOptions.onPartGraphics]($core-backend) callback are not defined.\r\n * * See export-gltf under test-apps in the iTwin.js monorepo for a working reference.\r\n * @returns 0 is successful, status otherwise\r\n * @public\r\n */\r\n public exportPartGraphics(exportProps: ExportPartGraphicsOptions): DbResult {\r\n return this[_nativeDb].exportPartGraphics(exportProps);\r\n }\r\n\r\n /** Request geometry stream information from an element in binary format instead of json.\r\n * @returns IModelStatus.Success if successful\r\n * @beta\r\n */\r\n public elementGeometryRequest(requestProps: ElementGeometryRequest): IModelStatus {\r\n return this[_nativeDb].processGeometryStream(requestProps);\r\n }\r\n\r\n /** Request the creation of a backend geometry cache for the specified geometric element.\r\n * @returns ElementGeometryCacheResponseProps\r\n * @beta\r\n */\r\n public async updateElementGeometryCache(requestProps: ElementGeometryCacheRequestProps): Promise<ElementGeometryCacheResponseProps> {\r\n return this[_nativeDb].updateElementGeometryCache(requestProps);\r\n }\r\n\r\n /** Request operation using the backend geometry cache populated by first calling elementGeometryRequest.\r\n * @returns SUCCESS if requested operation could be applied.\r\n * @beta\r\n */\r\n public elementGeometryCacheOperation(requestProps: ElementGeometryCacheOperationRequestProps): BentleyStatus {\r\n return this[_nativeDb].elementGeometryCacheOperation(requestProps);\r\n }\r\n\r\n /** Create brep geometry for inclusion in an element's geometry stream.\r\n * @returns IModelStatus.Success if successful\r\n * @throws [[IModelError]] to report issues with input geometry or parameters\r\n * @alpha\r\n */\r\n public createBRepGeometry(createProps: BRepGeometryCreate): IModelStatus {\r\n return this[_nativeDb].createBRepGeometry(createProps);\r\n }\r\n\r\n /** Generate graphics for an element or geometry stream.\r\n * @see [readElementGraphics]($frontend) to convert the result to a [RenderGraphic]($frontend) for display.\r\n */\r\n public async generateElementGraphics(request: ElementGraphicsRequestProps): Promise<Uint8Array | undefined> {\r\n return generateElementGraphics(request, this);\r\n }\r\n\r\n private static _settingPropNamespace = \"settings\";\r\n\r\n /** Save a `SettingDictionary` in this iModel that will be loaded into [[workspace.settings]] every time this iModel is opened in future sessions.\r\n * @param name The name for the SettingDictionary. If a dictionary by that name already exists in the iModel, its value is replaced.\r\n * @param dict The SettingDictionary object to stringify and save.\r\n * @note All saved `SettingDictionary`s are loaded into [[workspace.settings]] every time an iModel is opened.\r\n * @beta\r\n */\r\n public saveSettingDictionary(name: string, dict: SettingsContainer) {\r\n this.withSqliteStatement(\"REPLACE INTO be_Prop(id,SubId,TxnMode,Namespace,Name,strData) VALUES(0,0,0,?,?,?)\", (stmt) => {\r\n stmt.bindString(1, IModelDb._settingPropNamespace);\r\n stmt.bindString(2, name);\r\n stmt.bindString(3, JSON.stringify(dict));\r\n stmt.stepForWrite();\r\n });\r\n this.saveChanges(\"add settings\");\r\n }\r\n\r\n /** Delete a SettingDictionary, previously added with [[saveSettingDictionary]], from this iModel.\r\n * @param name The name of the dictionary to delete.\r\n * @beta\r\n */\r\n public deleteSettingDictionary(name: string) {\r\n this.withSqliteStatement(\"DELETE FROM be_Prop WHERE Namespace=? AND Name=?\", (stmt) => {\r\n stmt.bindString(1, IModelDb._settingPropNamespace);\r\n stmt.bindString(2, name);\r\n stmt.stepForWrite();\r\n });\r\n this.saveChanges(\"delete settings\");\r\n }\r\n\r\n /** Load all setting dictionaries in this iModel into `this.workspace.settings` */\r\n private loadIModelSettings() {\r\n if (!this[_nativeDb].isOpen())\r\n return;\r\n\r\n this.withSqliteStatement(\"SELECT Name,StrData FROM be_Prop WHERE Namespace=?\", (stmt) => {\r\n stmt.bindString(1, IModelDb._settingPropNamespace);\r\n while (stmt.nextRow()) {\r\n try {\r\n const settings = JSON.parse(stmt.getValueString(1));\r\n this.workspace.settings.addDictionary({ name: stmt.getValueString(0), priority: SettingsPriority.iModel }, settings);\r\n } catch (e) {\r\n Workspace.exceptionDiagnosticFn(e as WorkspaceDbLoadError);\r\n }\r\n }\r\n });\r\n }\r\n\r\n /** @internal */\r\n protected async loadWorkspaceSettings() {\r\n try {\r\n const problems: WorkspaceDbLoadError[] = [];\r\n const settingProps: WorkspaceDbSettingsProps[] = [];\r\n // Note: we can't use `getArray` here because we only look at dictionaries in the iModel's workspace, not appWorkspace.\r\n // Also, we must concatenate all entries in all of the dictionaries stored in the iModel into a single array *before*\r\n // calling `loadSettingsDictionary` since that function will add new dictionaries to the workspace.\r\n for (const dict of this.workspace.settings.dictionaries) {\r\n try {\r\n const props = dict.getSetting<WorkspaceDbSettingsProps[]>(WorkspaceSettingNames.settingsWorkspaces);\r\n if (props)\r\n settingProps.push(...IModelHost.settingsSchemas.validateSetting(props, WorkspaceSettingNames.settingsWorkspaces));\r\n } catch (e) {\r\n problems.push(e as WorkspaceDbLoadError); // something wrong with the setting stored in the iModel\r\n }\r\n }\r\n if (settingProps.length > 0)\r\n await this.workspace.loadSettingsDictionary(settingProps, problems);\r\n\r\n if (problems.length > 0)\r\n throwWorkspaceDbLoadErrors(`attempting to load workspace settings for iModel '${this.name}':`, problems);\r\n } catch (e) {\r\n // we don't want to throw exceptions when attempting to load Dictionaries. Call the diagnostics function instead.\r\n Workspace.exceptionDiagnosticFn(e as WorkspaceDbLoadErrors);\r\n }\r\n }\r\n\r\n /**\r\n * Controls how [Code]($common)s are copied from this iModel into another iModel, to work around problems with iModels\r\n * created by older connectors. The [imodel-transformer](https://github.com/iTwin/imodel-transformer) sets this appropriately\r\n * on your behalf - you should never need to set or interrogate this property yourself.\r\n * @public\r\n */\r\n public get codeValueBehavior(): \"exact\" | \"trim-unicode-whitespace\" {\r\n return this[_nativeDb].getCodeValueBehavior();\r\n }\r\n\r\n public set codeValueBehavior(newBehavior: \"exact\" | \"trim-unicode-whitespace\") {\r\n this[_nativeDb].setCodeValueBehavior(newBehavior);\r\n }\r\n\r\n /** @internal */\r\n public computeRangesForText(args: ComputeRangesForTextLayoutArgs): TextLayoutRanges {\r\n const props = this[_nativeDb].computeRangesForText(args.chars, args.fontId, args.bold, args.italic, args.widthFactor, args.textHeight);\r\n return {\r\n layout: Range2d.fromJSON(props.layout),\r\n justification: Range2d.fromJSON(props.justification),\r\n };\r\n }\r\n\r\n /** Writes the contents of a single ECSchema to a file on the local file system.\r\n * @beta\r\n */\r\n public exportSchema(args: ExportSchemaArgs): void {\r\n processSchemaWriteStatus(this[_nativeDb].exportSchema(args.schemaName, args.outputDirectory, args.outputFileName));\r\n }\r\n\r\n /** Writes the contents of all ECSchemas in this iModel to files in a directory on the local file system.\r\n * @beta\r\n */\r\n public exportSchemas(outputDirectory: LocalFileName): void {\r\n processSchemaWriteStatus(this[_nativeDb].exportSchemas(outputDirectory));\r\n }\r\n\r\n /** Attempt to simplify the geometry stream of a single [[GeometricElement]] or [[GeometryPart]] as specified by `args`.\r\n * @beta\r\n */\r\n public simplifyElementGeometry(args: SimplifyElementGeometryArgs): IModelStatus {\r\n return this[_nativeDb].simplifyElementGeometry(args);\r\n }\r\n\r\n /** Attempts to optimize all of the geometry in this iModel by identifying [[GeometryPart]]s that are referenced by exactly one\r\n * element's geometry stream. Each such reference is replaced by inserting the part's geometry directly into the element's geometry stream.\r\n * Then, the no-longer-used geometry part is deleted.\r\n * This can improve performance when a connector inadvertently creates large numbers of parts that are each only used once.\r\n * @beta\r\n */\r\n public inlineGeometryParts(): InlineGeometryPartsResult {\r\n return this[_nativeDb].inlineGeometryPartReferences();\r\n }\r\n\r\n /** Returns a string representation of the error that most recently arose during an operation on the underlying SQLite database.\r\n * If no errors have occurred, an empty string is returned.\r\n * Otherwise, a string of the format `message (code)` is returned, where `message` is a human-readable diagnostic string and `code` is an integer status code.\r\n * See [SQLite error codes and messages](https://www.sqlite.org/c3ref/errcode.html)\r\n * @note Do not rely upon this value or its specific contents in error handling logic. It is only intended for use in debugging.\r\n */\r\n public getLastError(): string {\r\n return this[_nativeDb].getLastError();\r\n }\r\n}\r\n\r\nfunction processSchemaWriteStatus(status: SchemaWriteStatus): void {\r\n switch (status) {\r\n case SchemaWriteStatus.Success: return;\r\n case SchemaWriteStatus.FailedToSaveXml: throw new Error(\"Failed to save schema XML\");\r\n case SchemaWriteStatus.FailedToCreateXml: throw new Error(\"Failed to create schema XML\");\r\n case SchemaWriteStatus.FailedToCreateJson: throw new Error(\"Failed to create schema JSON\");\r\n case SchemaWriteStatus.FailedToWriteFile: throw new Error(\"Failed to write schema file\");\r\n default: throw new Error(\"Unknown error while exporting schema\");\r\n }\r\n}\r\n\r\n/** @public */\r\nexport namespace IModelDb {\r\n\r\n /** The collection of models in an [[IModelDb]].\r\n * @public @preview\r\n */\r\n export class Models {\r\n private readonly _modelCacheSize = 10;\r\n /** @internal */\r\n public readonly [_cache] = new LRUMap<Id64String, ModelProps>(this._modelCacheSize);\r\n /** @internal */\r\n public readonly [_instanceKeyCache] = new InstanceKeyLRUCache(this._modelCacheSize);\r\n\r\n /** @internal */\r\n public constructor(private _iModel: IModelDb) { }\r\n\r\n /** Get the ModelProps with the specified identifier.\r\n * @param modelId The Model identifier.\r\n * @throws [[IModelError]] if the model is not found or cannot be loaded.\r\n * @see tryGetModelProps\r\n */\r\n public getModelProps<T extends ModelProps>(id: Id64String): T {\r\n const model = this.tryGetModelProps<T>(id);\r\n if (undefined === model)\r\n throw new IModelError(IModelStatus.NotFound, `Model=${id}`);\r\n return model;\r\n }\r\n\r\n /** Get the ModelProps with the specified identifier.\r\n * @param modelId The Model identifier.\r\n * @returns The ModelProps or `undefined` if the model is not found.\r\n * @throws [[IModelError]] if the model cannot be loaded.\r\n * @note Useful for cases when a model may or may not exist and throwing an `Error` would be overkill.\r\n * @see getModelProps\r\n */\r\n public tryGetModelProps<T extends ModelProps>(id: Id64String): T | undefined {\r\n try {\r\n if (IModelHost.configuration?.disableThinnedNativeInstanceWorkflow) {\r\n return this._iModel[_nativeDb].getModel({ id }) as T;\r\n }\r\n\r\n const cachedMdl = this[_cache].get(id);\r\n if (cachedMdl) {\r\n return cachedMdl as T;\r\n }\r\n\r\n const options = { useJsNames: true }\r\n const instanceKey = this.resolveModelKey({ id });\r\n const rawInstance = this._iModel[_nativeDb].readInstance(instanceKey, options) as ECSqlRow;\r\n const classDef = this._iModel.getJsClass<typeof Model>(rawInstance.classFullName);\r\n const modelProps = classDef.deserialize({ row: rawInstance, iModel: this._iModel }) as T;\r\n this[_cache].set(id, modelProps);\r\n return modelProps;\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n /** Query for the last modified time for a [[Model]].\r\n * @param modelId The Id of the model.\r\n * @throws IModelError if `modelId` does not identify a model in the iModel.\r\n */\r\n public queryLastModifiedTime(modelId: Id64String): string {\r\n const sql = `SELECT LastMod FROM ${Model.classFullName} WHERE ECInstanceId=:modelId`;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return this._iModel.withPreparedStatement(sql, (statement) => {\r\n statement.bindId(\"modelId\", modelId);\r\n if (DbResult.BE_SQLITE_ROW === statement.step()) {\r\n return statement.getValue(0).getDateTime();\r\n }\r\n throw new IModelError(IModelStatus.InvalidId, `Can't get lastMod time for Model ${modelId}`);\r\n });\r\n }\r\n\r\n /** Get the Model with the specified identifier.\r\n * @param modelId The Model identifier.\r\n * @param modelClass Optional class to validate instance against. This parameter can accept abstract or concrete classes, but should be the same as the template (`T`) parameter.\r\n * @throws [[IModelError]] if the model is not found, cannot be loaded, or fails validation when `modelClass` is specified.\r\n * @see tryGetModel\r\n */\r\n public getModel<T extends Model>(modelId: Id64String, modelClass?: EntityClassType<Model>): T {\r\n const model: T | undefined = this.tryGetModel(modelId, modelClass);\r\n if (undefined === model) {\r\n throw new IModelError(IModelStatus.NotFound, `Model=${modelId}`);\r\n }\r\n return model;\r\n }\r\n\r\n /** Get the Model with the specified identifier.\r\n * @param modelId The Model identifier.\r\n * @param modelClass Optional class to validate instance against. This parameter can accept abstract or concrete classes, but should be the same as the template (`T`) parameter.\r\n * @returns The Model or `undefined` if the model is not found or fails validation when `modelClass` is specified.\r\n * @throws [[IModelError]] if the model cannot be loaded.\r\n * @note Useful for cases when a model may or may not exist and throwing an `Error` would be overkill.\r\n * @see getModel\r\n */\r\n public tryGetModel<T extends Model>(modelId: Id64String, modelClass?: EntityClassType<Model>): T | undefined {\r\n const modelProps = this.tryGetModelProps<ModelProps>(modelId);\r\n if (undefined === modelProps)\r\n return undefined; // no Model with that modelId found\r\n\r\n const model = this._iModel.constructEntity<T>(modelProps);\r\n if (undefined === modelClass)\r\n return model; // modelClass was not specified, cannot call instanceof to validate\r\n\r\n return model instanceof modelClass ? model : undefined;\r\n }\r\n\r\n private resolveModelKey(modelIdArg: ModelLoadProps): IModelJsNative.ResolveInstanceKeyResult {\r\n const baseClassName = \"BisCore:Model\";\r\n let args: IModelJsNative.ResolveInstanceKeyArgs;\r\n if (modelIdArg.id) {\r\n args = { partialKey: { id: modelIdArg.id, baseClassName } };\r\n } else if (modelIdArg.code) {\r\n const modelId = this._iModel.elements.getElementProps<ElementProps>({ code: modelIdArg.code }).id;\r\n if (!modelId)\r\n throw new IModelError(IModelStatus.NotFound, `Model not found with code: [spec:${modelIdArg.code.spec}, scope:${modelIdArg.code.scope}, value:${modelIdArg.code.value}])`);\r\n args = { partialKey: { id: modelId, baseClassName } };\r\n } else {\r\n throw new IModelError(IModelStatus.InvalidId, `Invalid model identifier: ${JSON.stringify(modelIdArg)}`);\r\n }\r\n // Check the cache to avoid unnecessary native calls\r\n const cachedResult = this[_instanceKeyCache].get(args);\r\n if (cachedResult) {\r\n return cachedResult;\r\n } else {\r\n const instanceKey = this._iModel[_nativeDb].resolveInstanceKey(args);\r\n this[_instanceKeyCache].set(args, instanceKey);\r\n return instanceKey;\r\n }\r\n }\r\n\r\n /** Get the sub-model of the specified Element.\r\n * See [[IModelDb.Elements.queryElementIdByCode]] for more on how to find an element by Code.\r\n * @param modeledElementId Identifies the modeled element.\r\n * @param modelClass Optional class to validate instance against. This parameter can accept abstract or concrete classes, but should be the same as the template (`T`) parameter.\r\n * @throws [[IModelError]] if the sub-model is not found, cannot be loaded, or fails validation when `modelClass` is specified.\r\n * @see tryGetSubModel\r\n */\r\n public getSubModel<T extends Model>(modeledElementId: Id64String | GuidString | Code, modelClass?: EntityClassType<Model>): T {\r\n const modeledElementProps = this._iModel.elements.getElementProps<ElementProps>(modeledElementId);\r\n if (undefined === modeledElementProps.id || modeledElementProps.id === IModel.rootSubjectId)\r\n throw new IModelError(IModelStatus.NotFound, \"Root subject does not have a sub-model\");\r\n return this.getModel<T>(modeledElementProps.id, modelClass);\r\n }\r\n\r\n /** Get the sub-model of the specified Element.\r\n * See [[IModelDb.Elements.queryElementIdByCode]] for more on how to find an element by Code.\r\n * @param modeledElementId Identifies the modeled element.\r\n * @param modelClass Optional class to validate instance against. This parameter can accept abstract or concrete classes, but should be the same as the template (`T`) parameter.\r\n * @returns The sub-model or `undefined` if the specified element does not have a sub-model or fails validation when `modelClass` is specified.\r\n * @see getSubModel\r\n */\r\n public tryGetSubModel<T extends Model>(modeledElementId: Id64String | GuidString | Code, modelClass?: EntityClassType<Model>): T | undefined {\r\n const modeledElementProps = this._iModel.elements.tryGetElementProps(modeledElementId);\r\n if (undefined === modeledElementProps?.id || (IModel.rootSubjectId === modeledElementProps.id))\r\n return undefined;\r\n\r\n return this.tryGetModel<T>(modeledElementProps.id, modelClass);\r\n }\r\n\r\n /** Create a new model in memory.\r\n * See the example in [[InformationPartitionElement]].\r\n * @param modelProps The properties to use when creating the model.\r\n * @throws [[IModelError]] if there is a problem creating the model.\r\n */\r\n public createModel<T extends Model>(modelProps: ModelProps): T { return this._iModel.constructEntity<T>(modelProps); }\r\n\r\n /** Insert a new model.\r\n * @param props The data for the new model.\r\n * @returns The newly inserted model's Id.\r\n * @throws [[IModelError]] if unable to insert the model.\r\n */\r\n public insertModel(props: ModelProps): Id64String {\r\n try {\r\n return props.id = this._iModel[_nativeDb].insertModel(props);\r\n } catch (err: any) {\r\n const error = new IModelError(err.errorNumber, `Error inserting model [${err.message}], class=${props.classFullName}`);\r\n error.cause = err;\r\n throw error;\r\n }\r\n }\r\n\r\n /** Update an existing model.\r\n * @param props the properties of the model to change\r\n * @throws [[IModelError]] if unable to update the model.\r\n */\r\n public updateModel(props: UpdateModelOptions): void {\r\n try {\r\n if (props.id)\r\n this[_cache].delete(props.id);\r\n\r\n this._iModel[_nativeDb].updateModel(props);\r\n } catch (err: any) {\r\n const error = new IModelError(err.errorNumber, `Error updating model [${err.message}], id: ${props.id}`);\r\n error.cause = err;\r\n throw error;\r\n }\r\n }\r\n /** Mark the geometry of [[GeometricModel]] as having changed, by recording an indirect change to its GeometryGuid property.\r\n * Typically the GeometryGuid changes automatically when [[GeometricElement]]s within the model are modified, but\r\n * explicitly updating it is occasionally useful after modifying definition elements like line styles or materials that indirectly affect the appearance of\r\n * [[GeometricElement]]s that reference those definition elements in their geometry streams.\r\n * Cached [Tile]($frontend)s are only invalidated after the geometry guid of the model changes.\r\n * @note This will throw IModelError with [IModelStatus.VersionTooOld]($core-bentley) if a version of the BisCore schema older than 1.0.11 is present in the iModel.\r\n * @throws IModelError if unable to update the geometry guid.\r\n * @see [[TxnManager.onModelGeometryChanged]] for the event emitted in response to such a change.\r\n */\r\n public updateGeometryGuid(modelId: Id64String): void {\r\n this._iModel.models[_cache].delete(modelId);\r\n const error = this._iModel[_nativeDb].updateModelGeometryGuid(modelId);\r\n if (error !== IModelStatus.Success)\r\n throw new IModelError(error, `Error updating geometry guid for model ${modelId}`);\r\n }\r\n\r\n /** Delete one or more existing models.\r\n * @param ids The Ids of the models to be deleted\r\n * @throws [[IModelError]]\r\n */\r\n public deleteModel(ids: Id64Arg): void {\r\n Id64.toIdSet(ids).forEach((id) => {\r\n try {\r\n this[_cache].delete(id);\r\n this[_instanceKeyCache].deleteById(id);\r\n this._iModel[_nativeDb].deleteModel(id);\r\n } catch (err: any) {\r\n const error = new IModelError(err.errorNumber, `Error deleting model [${err.message}], id: ${id}`);\r\n error.cause = err;\r\n throw error;\r\n }\r\n });\r\n }\r\n\r\n /** For each specified [[GeometricModel]], attempts to obtain the union of the volumes of all geometric elements within that model.\r\n * @param ids The Id or Ids of the [[GeometricModel]]s for which to obtain the extents.\r\n * @returns An array of results, one per supplied Id, in the order in which the Ids were supplied. If the extents could not be obtained, the\r\n * corresponding results entry's `extents` will be a \"null\" range (@see [Range3d.isNull]($geometry)) and its `status` will indicate\r\n * why the extents could not be obtained (e.g., because the Id did not identify a [[GeometricModel]]).\r\n * @see [[queryRange]] to obtain the union of all of the models' extents.\r\n */\r\n public async queryExtents(ids: Id64String | Id64String[]): Promise<ModelExtentsProps[]> {\r\n ids = typeof ids === \"string\" ? [ids] : ids;\r\n if (ids.length === 0)\r\n return [];\r\n\r\n return this._iModel[_nativeDb].queryModelExtentsAsync(ids);\r\n }\r\n\r\n /** Computes the union of the volumes of all geometric elements within one or more [[GeometricModel]]s, specified by model Id.\r\n * @see [[queryExtents]] to obtain discrete volumes for each model.\r\n */\r\n public async queryRange(ids: Id64String | Id64String[]): Promise<AxisAlignedBox3d> {\r\n const results = await this.queryExtents(ids);\r\n const range = new Range3d();\r\n for (const result of results)\r\n range.union(Range3d.fromJSON(result.extents), range);\r\n\r\n return range;\r\n }\r\n }\r\n\r\n export interface GuidMapper {\r\n getFederationGuidFromId(id: Id64String): GuidString | undefined;\r\n getIdFromFederationGuid(guid?: GuidString): Id64String | undefined;\r\n }\r\n\r\n /** The collection of elements in an [[IModelDb]].\r\n * @public @preview\r\n */\r\n export class Elements implements GuidMapper {\r\n private readonly _elementCacheSize = 50;\r\n /** @internal */\r\n public readonly [_cache] = new ElementLRUCache(this._elementCacheSize);\r\n /** @internal */\r\n public readonly [_instanceKeyCache] = new InstanceKeyLRUCache(this._elementCacheSize);\r\n\r\n /** @internal */\r\n public constructor(private _iModel: IModelDb) { }\r\n\r\n public getFederationGuidFromId(id: Id64String): GuidString | undefined {\r\n return this._iModel.withPreparedSqliteStatement(`SELECT FederationGuid FROM bis_Element WHERE Id=?`, (stmt) => {\r\n stmt.bindId(1, id);\r\n return stmt.nextRow() ? stmt.getValueGuid(0) : undefined;\r\n });\r\n }\r\n\r\n public getIdFromFederationGuid(guid?: GuidString): Id64String | undefined {\r\n return guid ? this._iModel.withPreparedSqliteStatement(`SELECT Id FROM bis_Element WHERE FederationGuid=?`, (stmt) => {\r\n stmt.bindGuid(1, guid);\r\n return !stmt.nextRow() ? undefined : stmt.getValueId(0);\r\n }) : undefined;\r\n }\r\n\r\n /** Get properties of an Element by Id, FederationGuid, or Code\r\n * @throws [[IModelError]] if the element is not found or cannot be loaded.\r\n * @see tryGetElementProps\r\n */\r\n public getElementProps<T extends ElementProps>(props: Id64String | GuidString | Code | ElementLoadProps): T {\r\n const elProp = this.tryGetElementProps<T>(props);\r\n if (undefined === elProp)\r\n throw new IModelError(IModelStatus.NotFound, `element not found`);\r\n return elProp;\r\n }\r\n\r\n private resolveElementKey(props: Id64String | GuidString | Code | ElementLoadProps): IModelJsNative.ResolveInstanceKeyResult {\r\n const baseClassName = \"BisCore:Element\";\r\n let args: IModelJsNative.ResolveInstanceKeyArgs;\r\n if (typeof props === \"string\") {\r\n args = Id64.isId64(props) ? { partialKey: { id: props, baseClassName } } : { federationGuid: props };\r\n } else if (props instanceof Code) {\r\n args = { code: props };\r\n } else {\r\n if (props.id) {\r\n args = { partialKey: { id: props.id, baseClassName } };\r\n }\r\n else if (props.federationGuid) {\r\n args = { federationGuid: props.federationGuid };\r\n }\r\n else if (props.code) {\r\n args = { code: props.code };\r\n } else {\r\n throw new IModelError(IModelStatus.InvalidId, \"Element Id or FederationGuid or Code is required\");\r\n }\r\n }\r\n // Check the cache to avoid unnecessary native calls\r\n const cachedResult = this[_instanceKeyCache].get(args);\r\n if (cachedResult) {\r\n return cachedResult;\r\n } else {\r\n const instanceKey = this._iModel[_nativeDb].resolveInstanceKey(args);\r\n this[_instanceKeyCache].set(args, instanceKey);\r\n return instanceKey;\r\n }\r\n }\r\n\r\n /** Get properties of an Element by Id, FederationGuid, or Code\r\n * @returns The properties of the element or `undefined` if the element is not found.\r\n * @throws [[IModelError]] if the element exists, but cannot be loaded.\r\n * @note Useful for cases when an element may or may not exist and throwing an `Error` would be overkill.\r\n * @see getElementProps\r\n */\r\n public tryGetElementProps<T extends ElementProps>(props: Id64String | GuidString | Code | ElementLoadProps): T | undefined {\r\n if (typeof props === \"string\") {\r\n props = Id64.isId64(props) ? { id: props } : { federationGuid: props };\r\n } else if (props instanceof Code) {\r\n props = { code: props };\r\n }\r\n try {\r\n if (IModelHost.configuration?.disableThinnedNativeInstanceWorkflow) {\r\n return this._iModel[_nativeDb].getElement(props) as T;\r\n }\r\n\r\n const cachedElm = this[_cache].get(props);\r\n if (cachedElm) {\r\n return cachedElm.elProps as T;\r\n }\r\n\r\n const options = { ...props, useJsNames: true };\r\n const instanceKey = this.resolveElementKey(props);\r\n const rawInstance = this._iModel[_nativeDb].readInstance(instanceKey, options) as ECSqlRow;\r\n const classDef = this._iModel.getJsClass<typeof Element>(rawInstance.classFullName);\r\n const elementProps = classDef.deserialize({ row: rawInstance, iModel: this._iModel, options: { element: props } }) as T;\r\n this[_cache].set({ elProps: elementProps, loadOptions: props });\r\n return elementProps;\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n /** Get an element by Id, FederationGuid, or Code\r\n * @param elementId either the element's Id, Code, or FederationGuid, or an ElementLoadProps\r\n * @param elementClass Optional class to validate instance against. This parameter can accept abstract or concrete classes, but should be the same as the template (`T`) parameter.\r\n * @throws [[IModelError]] if the element is not found, cannot be loaded, or fails validation when `elementClass` is specified.\r\n * @see tryGetElement\r\n */\r\n public getElement<T extends Element>(elementId: Id64String | GuidString | Code | ElementLoadProps, elementClass?: EntityClassType<Element>): T {\r\n const element = this.tryGetElement<T>(elementId, elementClass);\r\n if (undefined === element) {\r\n if (typeof elementId === \"string\" || elementId instanceof Code)\r\n throw new IModelError(IModelStatus.NotFound, `Element=${elementId.toString()}`);\r\n else\r\n throw new IModelError(IModelStatus.NotFound, `Element={id: ${elementId.id} federationGuid: ${elementId.federationGuid}, code={spec: ${elementId.code?.spec}, scope: ${elementId.code?.scope}, value: ${elementId.code?.value}}}`);\r\n }\r\n return element;\r\n }\r\n\r\n /** Get an element by Id, FederationGuid, or Code\r\n * @param elementId either the element's Id, Code, or FederationGuid, or an ElementLoadProps\r\n * @param elementClass Optional class to validate instance against. This parameter can accept abstract or concrete classes, but should be the same as the template (`T`) parameter.\r\n * @returns The element or `undefined` if the element is not found or fails validation when `elementClass` is specified.\r\n * @throws [[IModelError]] if the element exists, but cannot be loaded.\r\n * @note Useful for cases when an element may or may not exist and throwing an `Error` would be overkill.\r\n * @see getElement\r\n */\r\n public tryGetElement<T extends Element>(elementId: Id64String | GuidString | Code | ElementLoadProps, elementClass?: EntityClassType<Element>): T | undefined {\r\n if (typeof elementId === \"string\")\r\n elementId = Id64.isId64(elementId) ? { id: elementId } : { federationGuid: elementId };\r\n else if (elementId instanceof Code)\r\n elementId = { code: elementId };\r\n else\r\n elementId.onlyBaseProperties = false; // we must load all properties to construct the element.\r\n\r\n const elementProps = this.tryGetElementProps<ElementProps>(elementId);\r\n if (undefined === elementProps)\r\n return undefined; // no Element with that elementId found\r\n\r\n const element = this._iModel.constructEntity<T>(elementProps);\r\n if (undefined === elementClass)\r\n return element; // elementClass was not specified, cannot call instanceof to validate\r\n\r\n return element instanceof elementClass ? element : undefined;\r\n }\r\n\r\n /** Query for the Id of the element that has a specified code.\r\n * This method is for the case where you know the element's Code.\r\n * If you only know the code *value*, then in the simplest case, you can query on that\r\n * and filter the results.\r\n * In the simple case, call [[IModelDb.queryEntityIds]], specifying the code value in the where clause of the query params.\r\n * Or, you can execute an ECSQL select statement. See\r\n * [frequently used ECSQL queries]($docs/learning/backend/ECSQL-queries.md) for an example.\r\n * @param code The code to look for\r\n * @returns The element that uses the code or undefined if the code is not used.\r\n * @throws IModelError if the code is invalid\r\n */\r\n public queryElementIdByCode(code: Required<CodeProps>): Id64String | undefined {\r\n if (Id64.isInvalid(code.spec))\r\n throw new IModelError(IModelStatus.InvalidCodeSpec, \"Invalid CodeSpec\");\r\n\r\n if (code.value === undefined)\r\n throw new IModelError(IModelStatus.InvalidCode, \"Invalid Code\");\r\n\r\n const codeToQuery = new Code(code);\r\n try {\r\n const elementKey = this.resolveElementKey(codeToQuery);\r\n return Id64.fromString(elementKey.id);\r\n } catch (err: any) {\r\n if (err.errorNumber === IModelStatus.NotFound)\r\n return undefined;\r\n throw err;\r\n }\r\n }\r\n\r\n /** Query for an [[Element]]'s last modified time.\r\n * @param elementId The Id of the element.\r\n * @throws IModelError if `elementId` does not identify an element in the iModel.\r\n */\r\n public queryLastModifiedTime(elementId: Id64String): string {\r\n const sql = \"SELECT LastMod FROM BisCore:Element WHERE ECInstanceId=:elementId\";\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return this._iModel.withPreparedStatement<string>(sql, (statement: ECSqlStatement): string => {\r\n statement.bindId(\"elementId\", elementId);\r\n if (DbResult.BE_SQLITE_ROW === statement.step())\r\n return statement.getValue(0).getDateTime();\r\n throw new IModelError(IModelStatus.InvalidId, `Can't get lastMod time for Element ${elementId}`);\r\n });\r\n }\r\n\r\n /** Create a new instance of an element.\r\n * @param elProps The properties of the new element.\r\n * @throws [[IModelError]] if there is a problem creating the element.\r\n */\r\n public createElement<T extends Element>(elProps: ElementProps): T { return this._iModel.constructEntity<T>(elProps); }\r\n\r\n /** Insert a new element into the iModel.\r\n * @param elProps The properties of the new element.\r\n * @returns The newly inserted element's Id.\r\n * @throws [[ITwinError]] if unable to insert the element.\r\n * @note For convenience, the value of `elProps.id` is updated to reflect the resultant element's id.\r\n * However when `elProps.federationGuid` is not present or undefined, a new Guid will be generated and stored on the resultant element. But\r\n * the value of `elProps.federationGuid` is *not* updated. Generally, it is best to re-read the element after inserting (e.g. via [[getElementProps]])\r\n * if you intend to continue working with it. That will ensure its values reflect the persistent state.\r\n */\r\n public insertElement(elProps: ElementProps, options?: InsertElementOptions): Id64String {\r\n try {\r\n this[_cache].delete({\r\n id: elProps.id,\r\n federationGuid: elProps.federationGuid,\r\n code: elProps.code,\r\n });\r\n return elProps.id = this._iModel[_nativeDb].insertElement(elProps, options);\r\n } catch (err: any) {\r\n err.message = `Error inserting element [${err.message}]`;\r\n err.metadata = { elProps };\r\n throw err;\r\n }\r\n }\r\n\r\n /**\r\n * Update some properties of an existing element.\r\n * All parts of `elProps` are optional *other than* `id`. If id is missing, an exception is thrown.\r\n *\r\n * To support clearing a property value, every property name that is present in the `elProps` object will be updated even if the value is `undefined`.\r\n * To keep an individual element property unchanged, it should either be excluded from the `elProps` parameter or set to its current value.\r\n * @param elProps the properties of the element to update.\r\n * @note The values of `classFullName` and `model` *may not be changed* by this method. Further, it will permute the `elProps` object by adding or\r\n * overwriting their values to the correct values.\r\n * @throws [[ITwinError]] if unable to update the element.\r\n */\r\n public updateElement<T extends ElementProps>(elProps: Partial<T>): void {\r\n try {\r\n if (elProps.id) {\r\n this[_instanceKeyCache].deleteById(elProps.id);\r\n } else {\r\n this[_instanceKeyCache].delete({\r\n federationGuid: elProps.federationGuid,\r\n code: elProps.code,\r\n });\r\n }\r\n this[_cache].delete({\r\n id: elProps.id,\r\n federationGuid: elProps.federationGuid,\r\n code: elProps.code,\r\n });\r\n this._iModel[_nativeDb].updateElement(elProps);\r\n } catch (err: any) {\r\n err.message = `Error updating element [${err.message}], id: ${elProps.id}`;\r\n err.metadata = { elProps };\r\n throw err;\r\n }\r\n }\r\n\r\n /** Delete one or more elements from this iModel.\r\n * @param ids The set of Ids of the element(s) to be deleted\r\n * @throws [[ITwinError]]\r\n * @see deleteDefinitionElements\r\n */\r\n public deleteElement(ids: Id64Arg): void {\r\n const iModel = this._iModel;\r\n Id64.toIdSet(ids).forEach((id) => {\r\n try {\r\n this[_cache].delete({ id });\r\n this[_instanceKeyCache].deleteById(id);\r\n iModel[_nativeDb].deleteElement(id);\r\n } catch (err: any) {\r\n err.message = `Error deleting element [${err.message}], id: ${id}`;\r\n err.metadata = { elementId: id };\r\n throw err;\r\n }\r\n });\r\n }\r\n\r\n /** DefinitionElements can only be deleted if it can be determined that they are not referenced by other Elements.\r\n * This *usage query* can be expensive since it may involve scanning the GeometryStreams of all GeometricElements.\r\n * Since [[deleteElement]] does not perform these additional checks, it fails in order to prevent potentially referenced DefinitionElements from being deleted.\r\n * This method performs those expensive checks and then calls *delete* if not referenced.\r\n * @param ids The Ids of the DefinitionElements to attempt to delete. To prevent multiple passes over the same GeometricElements, it is best to pass in the entire array of\r\n * DefinitionElements rather than calling this method separately for each one. Ids that are not valid DefinitionElements will be ignored.\r\n * @returns An IdSet of the DefinitionElements that are used and were therefore not deleted.\r\n * @see deleteElement\r\n * @beta\r\n */\r\n public deleteDefinitionElements(definitionElementIds: Id64Array): Id64Set {\r\n const usageInfo = this._iModel[_nativeDb].queryDefinitionElementUsage(definitionElementIds);\r\n if (!usageInfo) {\r\n throw new IModelError(IModelStatus.BadRequest, \"Error querying for DefinitionElement usage\");\r\n }\r\n\r\n const usedIdSet = usageInfo.usedIds ? Id64.toIdSet(usageInfo.usedIds) : new Set<Id64String>();\r\n const deleteIfUnused = (ids: Id64Array | undefined, used: Id64Set): void => {\r\n if (ids) {\r\n ids.forEach((id) => {\r\n if (!used.has(id))\r\n this._iModel.elements.deleteElement(id);\r\n });\r\n }\r\n };\r\n\r\n try {\r\n this._iModel[_nativeDb].beginPurgeOperation();\r\n deleteIfUnused(usageInfo.spatialCategoryIds, usedIdSet);\r\n deleteIfUnused(usageInfo.drawingCategoryIds, usedIdSet);\r\n deleteIfUnused(usageInfo.viewDefinitionIds, usedIdSet);\r\n deleteIfUnused(usageInfo.geometryPartIds, usedIdSet);\r\n deleteIfUnused(usageInfo.lineStyleIds, usedIdSet);\r\n deleteIfUnused(usageInfo.renderMaterialIds, usedIdSet);\r\n deleteIfUnused(usageInfo.subCategoryIds, usedIdSet);\r\n deleteIfUnused(usageInfo.textureIds, usedIdSet);\r\n deleteIfUnused(usageInfo.displayStyleIds, usedIdSet);\r\n deleteIfUnused(usageInfo.categorySelectorIds, usedIdSet);\r\n deleteIfUnused(usageInfo.modelSelectorIds, usedIdSet);\r\n if (usageInfo.otherDefinitionElementIds) {\r\n this._iModel.elements.deleteElement(usageInfo.otherDefinitionElementIds);\r\n }\r\n } finally {\r\n this._iModel[_nativeDb].endPurgeOperation();\r\n }\r\n\r\n if (usageInfo.viewDefinitionIds) {\r\n // take another pass in case a deleted ViewDefinition was the only usage of these view-related DefinitionElements\r\n let viewRelatedIds: Id64Array = [];\r\n if (usageInfo.displayStyleIds)\r\n viewRelatedIds = viewRelatedIds.concat(usageInfo.displayStyleIds.filter((id) => usedIdSet.has(id)));\r\n\r\n if (usageInfo.categorySelectorIds)\r\n viewRelatedIds = viewRelatedIds.concat(usageInfo.categorySelectorIds.filter((id) => usedIdSet.has(id)));\r\n\r\n if (usageInfo.modelSelectorIds)\r\n viewRelatedIds = viewRelatedIds.concat(usageInfo.modelSelectorIds.filter((id) => usedIdSet.has(id)));\r\n\r\n if (viewRelatedIds.length > 0) {\r\n const viewRelatedUsageInfo = this._iModel[_nativeDb].queryDefinitionElementUsage(viewRelatedIds);\r\n if (viewRelatedUsageInfo) {\r\n const usedViewRelatedIdSet: Id64Set = viewRelatedUsageInfo.usedIds ? Id64.toIdSet(viewRelatedUsageInfo.usedIds) : new Set<Id64String>();\r\n try {\r\n this._iModel[_nativeDb].beginPurgeOperation();\r\n deleteIfUnused(viewRelatedUsageInfo.displayStyleIds, usedViewRelatedIdSet);\r\n deleteIfUnused(viewRelatedUsageInfo.categorySelectorIds, usedViewRelatedIdSet);\r\n deleteIfUnused(viewRelatedUsageInfo.modelSelectorIds, usedViewRelatedIdSet);\r\n } finally {\r\n this._iModel[_nativeDb].endPurgeOperation();\r\n }\r\n\r\n viewRelatedIds.forEach((id) => {\r\n if (!usedViewRelatedIdSet.has(id))\r\n usedIdSet.delete(id);\r\n });\r\n }\r\n }\r\n }\r\n\r\n return usedIdSet;\r\n }\r\n\r\n /** Query for the child elements of the specified element.\r\n * @returns Returns an array of child element identifiers.\r\n * @throws [[IModelError]]\r\n */\r\n public queryChildren(elementId: Id64String): Id64String[] {\r\n const sql = \"SELECT ECInstanceId FROM BisCore:Element WHERE Parent.Id=:elementId\";\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return this._iModel.withPreparedStatement(sql, (statement: ECSqlStatement): Id64String[] => {\r\n statement.bindId(\"elementId\", elementId);\r\n const childIds: Id64String[] = [];\r\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\r\n childIds.push(statement.getValue(0).getId());\r\n }\r\n return childIds;\r\n });\r\n }\r\n\r\n /** Query for the parent of the specified element.\r\n * @param elementId The element to check for a parent\r\n * @returns The identifier of the element's parent or undefined if the element has no parent\r\n * @throws [[IModelError]] if the element does not exist\r\n */\r\n public queryParent(elementId: Id64String): Id64String | undefined {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return this._iModel.withPreparedStatement(`select parent.id from ${Element.classFullName} where ecinstanceid=?`, (stmt) => {\r\n stmt.bindId(1, elementId);\r\n if (stmt.step() !== DbResult.BE_SQLITE_ROW)\r\n throw new IModelError(IModelStatus.NotFound, `Element=${elementId}`);\r\n const value = stmt.getValue(0);\r\n return value.isNull ? undefined : value.getId();\r\n });\r\n }\r\n\r\n /** Returns true if the specified Element has a sub-model.\r\n * @see [[IModelDb.Models.getSubModel]]\r\n */\r\n public hasSubModel(elementId: Id64String): boolean {\r\n if (IModel.rootSubjectId === elementId)\r\n return false; // Special case since the RepositoryModel does not sub-model the root Subject\r\n\r\n // A sub-model will have the same Id value as the element it is describing\r\n const sql = \"SELECT ECInstanceId FROM BisCore:Model WHERE ECInstanceId=:elementId\";\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return this._iModel.withPreparedStatement(sql, (statement: ECSqlStatement): boolean => {\r\n statement.bindId(\"elementId\", elementId);\r\n return DbResult.BE_SQLITE_ROW === statement.step();\r\n });\r\n }\r\n\r\n /** Get the root subject element. */\r\n public getRootSubject(): Subject { return this.getElement(IModel.rootSubjectId); }\r\n\r\n /** Query for aspects of a particular class (polymorphically) associated with this element.\r\n * @throws [[IModelError]]\r\n * @note Most cases should use the [[getAspects]] wrapper rather than calling this method directly.\r\n * @internal\r\n */\r\n public _queryAspects(elementId: Id64String, fromClassFullName: string, excludedClassFullNames?: Set<string>): ElementAspect[] { // eslint-disable-line @typescript-eslint/naming-convention\r\n const sql = `SELECT ECInstanceId,ECClassId FROM ${fromClassFullName} WHERE Element.Id=:elementId ORDER BY ECClassId,ECInstanceId`; // ORDER BY to maximize statement reuse\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return this._iModel.withPreparedStatement(sql, (statement: ECSqlStatement): ElementAspect[] => {\r\n statement.bindId(\"elementId\", elementId);\r\n const aspects: ElementAspect[] = [];\r\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\r\n const aspectInstanceId: Id64String = statement.getValue(0).getId();\r\n const aspectClassFullName: string = statement.getValue(1).getClassNameForClassId().replace(\".\", \":\");\r\n if ((undefined === excludedClassFullNames) || (!excludedClassFullNames.has(aspectClassFullName))) {\r\n aspects.push(this._queryAspect(aspectInstanceId, aspectClassFullName));\r\n }\r\n }\r\n return aspects;\r\n });\r\n }\r\n\r\n /** Query for aspect by ECInstanceId\r\n * @throws [[IModelError]]\r\n */\r\n private _queryAspect(aspectInstanceId: Id64String, aspectClassName: string): ElementAspect {\r\n const sql = `SELECT * FROM ${aspectClassName} WHERE ECInstanceId=:aspectInstanceId`;\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const aspect: ElementAspectProps | undefined = this._iModel.withPreparedStatement(sql, (statement: ECSqlStatement): ElementAspectProps | undefined => {\r\n statement.bindId(\"aspectInstanceId\", aspectInstanceId);\r\n if (DbResult.BE_SQLITE_ROW === statement.step()) {\r\n const aspectProps: ElementAspectProps = statement.getRow(); // start with everything that SELECT * returned\r\n aspectProps.classFullName = (aspectProps as any).className.replace(\".\", \":\"); // add in property required by EntityProps\r\n (aspectProps as any).className = undefined; // clear property from SELECT * that we don't want in the final instance\r\n return aspectProps;\r\n }\r\n return undefined;\r\n });\r\n if (undefined === aspect) {\r\n throw new IModelError(IModelStatus.NotFound, `ElementAspect not found ${aspectInstanceId}, ${aspectClassName}`);\r\n }\r\n return this._iModel.constructEntity<ElementAspect>(aspect);\r\n }\r\n\r\n /** Get a single ElementAspect by its instance Id.\r\n * @throws [[IModelError]]\r\n */\r\n public getAspect(aspectInstanceId: Id64String): ElementAspect {\r\n const sql = \"SELECT ECClassId FROM BisCore:ElementAspect WHERE ECInstanceId=:aspectInstanceId\";\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const aspectClassFullName = this._iModel.withPreparedStatement(sql, (statement: ECSqlStatement): string | undefined => {\r\n statement.bindId(\"aspectInstanceId\", aspectInstanceId);\r\n return (DbResult.BE_SQLITE_ROW === statement.step()) ? statement.getValue(0).getClassNameForClassId().replace(\".\", \":\") : undefined;\r\n });\r\n if (undefined === aspectClassFullName) {\r\n throw new IModelError(IModelStatus.NotFound, `ElementAspect not found ${aspectInstanceId}`);\r\n }\r\n return this._queryAspect(aspectInstanceId, aspectClassFullName);\r\n }\r\n\r\n private static classMap = new Map<string, string>();\r\n\r\n private runInstanceQuery(sql: string, elementId: Id64String, excludedClassFullNames?: Set<string>): ElementAspect[] {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return this._iModel.withPreparedStatement(sql, (statement: ECSqlStatement) => {\r\n statement.bindId(\"elementId\", elementId);\r\n const aspects: ElementAspect[] = [];\r\n while (DbResult.BE_SQLITE_ROW === statement.step()) {\r\n const row: object = {};\r\n const parsedRow = JSON.parse(statement.getValue(0).getString());\r\n // eslint-disable-next-line guard-for-in\r\n for (const key in parsedRow) {\r\n const jsName = ECJsNames.toJsName(key[0].toUpperCase() + key.substring(1));\r\n Object.defineProperty(row, jsName, { enumerable: true, configurable: true, writable: true, value: parsedRow[key] });\r\n }\r\n const aspectProps: ElementAspectProps = row as any;\r\n aspectProps.classFullName = (aspectProps as any).className.replace(\".\", \":\"); // add in property required by EntityProps\r\n (aspectProps as any).className = undefined; // clear property from SELECT $ that we don't want in the final instance\r\n if ((undefined === excludedClassFullNames) || !excludedClassFullNames.has(aspectProps.classFullName))\r\n aspects.push(this._iModel.constructEntity<ElementAspect>(aspectProps));\r\n }\r\n return aspects;\r\n });\r\n }\r\n\r\n /** Get the ElementAspect instances that are owned by the specified element.\r\n * @param elementId Get ElementAspects associated with this Element\r\n * @param aspectClassFullName Optionally filter ElementAspects polymorphically by this class name\r\n * @param excludedClassFullNames Optional filter to exclude aspects from classes in the given set.\r\n * @throws [[IModelError]]\r\n */\r\n public getAspects(elementId: Id64String, aspectClassFullName?: string, excludedClassFullNames?: Set<string>): ElementAspect[] {\r\n if (aspectClassFullName === undefined) {\r\n const allAspects: ElementAspect[] = this.runInstanceQuery(`SELECT $ FROM (\r\n SELECT ECInstanceId, ECClassId FROM Bis.ElementMultiAspect WHERE Element.Id = :elementId\r\n UNION ALL\r\n SELECT ECInstanceId, ECClassId FROM Bis.ElementUniqueAspect WHERE Element.Id = :elementId) OPTIONS USE_JS_PROP_NAMES DO_NOT_TRUNCATE_BLOB`, elementId, excludedClassFullNames);\r\n if (allAspects.length === 0)\r\n Logger.logInfo(BackendLoggerCategory.ECDb, `No aspects found for class ${aspectClassFullName} and element ${elementId}`);\r\n return allAspects;\r\n }\r\n\r\n // Check if class is abstract\r\n const fullClassName = aspectClassFullName.replace(\".\", \":\").split(\":\");\r\n const val = this._iModel[_nativeDb].getECClassMetaData(fullClassName[0], fullClassName[1]);\r\n if (val.result !== undefined) {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n const metaData = new EntityMetaData(JSON.parse(val.result));\r\n if (metaData.modifier !== \"Abstract\") // Class is not abstract, use normal query to retrieve aspects\r\n return this._queryAspects(elementId, aspectClassFullName, excludedClassFullNames);\r\n }\r\n // If class specified is abstract, get the list of all classes derived from it\r\n let classIdList = IModelDb.Elements.classMap.get(aspectClassFullName);\r\n if (classIdList === undefined) {\r\n const classIds: string[] = [];\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n this._iModel.withPreparedStatement(`select SourceECInstanceId from meta.ClassHasAllBaseClasses where TargetECInstanceId = (select ECInstanceId from meta.ECClassDef where Name='${fullClassName[1]}'\r\n and Schema.Id = (select ECInstanceId from meta.ECSchemaDef where Name='${fullClassName[0]}')) and SourceECInstanceId != TargetECInstanceId`,\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n (statement: ECSqlStatement) => {\r\n while (statement.step() === DbResult.BE_SQLITE_ROW)\r\n classIds.push(statement.getValue(0).getId());\r\n });\r\n if (classIds.length > 0) {\r\n classIdList = classIds.join(\",\");\r\n IModelDb.Elements.classMap.set(aspectClassFullName, classIdList);\r\n }\r\n }\r\n if (classIdList === undefined) {\r\n Logger.logError(BackendLoggerCategory.ECDb, `No aspects found for the class ${aspectClassFullName}`);\r\n return [];\r\n }\r\n // Execute an instance query to retrieve all aspects from all the derived classes\r\n const aspects: ElementAspect[] = this.runInstanceQuery(`SELECT $ FROM (\r\n SELECT ECInstanceId, ECClassId FROM Bis.ElementMultiAspect WHERE Element.Id = :elementId AND ECClassId IN (${classIdList})\r\n UNION ALL\r\n SELECT ECInstanceId, ECClassId FROM Bis.ElementUniqueAspect WHERE Element.Id = :elementId AND ECClassId IN (${classIdList})\r\n ) OPTIONS USE_JS_PROP_NAMES DO_NOT_TRUNCATE_BLOB`, elementId, excludedClassFullNames);\r\n if (aspects.length === 0)\r\n Logger.logInfo(BackendLoggerCategory.ECDb, `No aspects found for class ${aspectClassFullName} and element ${elementId}`);\r\n return aspects;\r\n }\r\n\r\n /** Insert a new ElementAspect into the iModel.\r\n * @param aspectProps The properties of the new ElementAspect.\r\n * @throws [[IModelError]] if unable to insert the ElementAspect.\r\n * @returns the id of the newly inserted aspect.\r\n * @note Aspect Ids may collide with element Ids, so don't put both in a container like Set or Map\r\n * use [EntityReference]($common) for that instead.\r\n */\r\n public insertAspect(aspectProps: ElementAspectProps): Id64String {\r\n try {\r\n return this._iModel[_nativeDb].insertElementAspect(aspectProps);\r\n } catch (err: any) {\r\n const error = new IModelError(err.errorNumber, `Error inserting ElementAspect [${err.message}], class: ${aspectProps.classFullName}`, aspectProps);\r\n error.cause = err;\r\n throw error;\r\n }\r\n }\r\n\r\n /** Update an exist ElementAspect within the iModel.\r\n * @param aspectProps The properties to use to update the ElementAspect.\r\n * @throws [[IModelError]] if unable to update the ElementAspect.\r\n */\r\n public updateAspect(aspectProps: ElementAspectProps): void {\r\n try {\r\n this._iModel[_nativeDb].updateElementAspect(aspectProps);\r\n } catch (err: any) {\r\n const error = new IModelError(err.errorNumber, `Error updating ElementAspect [${err.message}], id: ${aspectProps.id}`, aspectProps);\r\n error.cause = err;\r\n throw error;\r\n }\r\n }\r\n\r\n /** Delete one or more ElementAspects from this iModel.\r\n * @param aspectInstanceIds The set of instance Ids of the ElementAspect(s) to be deleted\r\n * @throws [[IModelError]] if unable to delete the ElementAspect.\r\n */\r\n public deleteAspect(aspectInstanceIds: Id64Arg): void {\r\n const iModel = this._iModel;\r\n Id64.toIdSet(aspectInstanceIds).forEach((aspectInstanceId) => {\r\n try {\r\n iModel[_nativeDb].deleteElementAspect(aspectInstanceId);\r\n } catch (err: any) {\r\n const error = new IModelError(err.errorNumber, `Error deleting ElementAspect [${err.message}], id: ${aspectInstanceId}`);\r\n error.cause = err;\r\n throw error;\r\n }\r\n });\r\n }\r\n }\r\n\r\n /** The collection of views in an [[IModelDb]].\r\n * @public @preview\r\n */\r\n export class Views {\r\n /** @internal */\r\n public constructor(private _iModel: IModelDb) { }\r\n private static viewStoreProperty = { namespace: \"itwinjs\", name: \"DefaultViewStore\" };\r\n private _viewStore?: ViewStore.CloudAccess;\r\n public get hasViewStore(): boolean { return undefined !== this._viewStore; }\r\n\r\n /** @beta */\r\n public get viewStore(): ViewStore.CloudAccess {\r\n if (undefined === this._viewStore)\r\n throw new IModelError(IModelStatus.BadRequest, \"No ViewStore available\");\r\n return this._viewStore;\r\n }\r\n public set viewStore(viewStore: ViewStore.CloudAccess) {\r\n this._viewStore = viewStore;\r\n }\r\n /** @beta */\r\n public async accessViewStore(args: { props?: CloudSqlite.ContainerProps, accessLevel?: BlobContainer.RequestAccessLevel }): Promise<ViewStore.CloudAccess> {\r\n let props = args.props;\r\n if (undefined === props) {\r\n const propsString = this._iModel.queryFilePropertyString(Views.viewStoreProperty);\r\n if (!propsString)\r\n ViewStoreError.throwError(\"no-viewstore\", { message: \"iModel does not have a default ViewStore\" });\r\n\r\n props = JSON.parse(propsString) as CloudSqlite.ContainerProps;\r\n }\r\n const accessToken = await CloudSqlite.requestToken({\r\n ...props,\r\n accessLevel: args.accessLevel,\r\n });\r\n if (!this._viewStore)\r\n this._viewStore = new ViewStore.CloudAccess({ ...props, accessToken, iModel: this._iModel });\r\n\r\n this._viewStore.container.accessToken = accessToken;\r\n return this._viewStore;\r\n }\r\n\r\n /** @beta */\r\n public saveDefaultViewStore(arg: CloudSqlite.ContainerProps): void {\r\n const props = { baseUri: arg.baseUri, containerId: arg.containerId, storageType: arg.storageType }; // sanitize to only known properties\r\n this._iModel.saveFileProperty(Views.viewStoreProperty, JSON.stringify(props));\r\n this._iModel.saveChanges(\"update default ViewStore\");\r\n }\r\n\r\n /** Query for the array of ViewDefinitionProps of the specified class and matching the specified IsPrivate setting.\r\n * @param className Query for view definitions of this class.\r\n * @param wantPrivate If true, include private view definitions.\r\n */\r\n public queryViewDefinitionProps(className: string = \"BisCore.ViewDefinition\", limit = IModelDb.defaultLimit, offset = 0, wantPrivate: boolean = false): ViewDefinitionProps[] {\r\n const where = (wantPrivate === false) ? \"IsPrivate=FALSE\" : \"\";\r\n const ids = this._iModel.queryEntityIds({ from: className, limit, offset, where });\r\n\r\n const props: ViewDefinitionProps[] = [];\r\n const imodel = this._iModel;\r\n ids.forEach((id) => {\r\n try {\r\n props.push(imodel.elements.getElementProps<ViewDefinitionProps>(id));\r\n } catch { }\r\n });\r\n\r\n return props;\r\n }\r\n\r\n /** Default parameters for iterating/querying ViewDefinitions. Includes all subclasses of ViewDefinition, excluding only those marked 'private'. */\r\n public static readonly defaultQueryParams: ViewQueryParams = { from: \"BisCore.ViewDefinition\", where: \"IsPrivate=FALSE\" };\r\n\r\n /** Iterate all ViewDefinitions matching the supplied query.\r\n * @param params Specifies the query by which views are selected.\r\n * @param callback Function invoked for each ViewDefinition matching the query. Return false to terminate iteration, true to continue.\r\n * @returns true if all views were iterated, false if iteration was terminated early due to callback returning false.\r\n */\r\n public iterateViews(params: ViewQueryParams, callback: (view: ViewDefinition) => boolean): boolean {\r\n const ids = this._iModel.queryEntityIds(params);\r\n let finished = true;\r\n for (const id of ids) {\r\n try {\r\n const view = this._iModel.elements.getElement(id);\r\n if (undefined !== view && view instanceof ViewDefinition) {\r\n finished = callback(view);\r\n if (!finished)\r\n break;\r\n }\r\n } catch { }\r\n }\r\n\r\n return finished;\r\n }\r\n\r\n private loadViewData(viewId: ViewIdString, options?: ViewStateLoadProps): ViewStateProps {\r\n const iModel = this._iModel;\r\n const elements = iModel.elements;\r\n const loader = (() => {\r\n if (ViewStoreRpc.isViewStoreId(viewId)) {\r\n const reader = this.viewStore.reader;\r\n return {\r\n loadView: () => reader.getViewDefinitionSync({ viewId }),\r\n loadCategorySelector: (id: ViewIdString) => reader.getCategorySelectorSync({ id, bindings: options?.queryBindings?.categorySelector }),\r\n loadDisplayStyle: (id: ViewIdString) => reader.getDisplayStyleSync({ id, opts: options?.displayStyle }),\r\n loadModelSelector: (id: ViewIdString) => reader.getModelSelectorSync({ id, bindings: options?.queryBindings?.modelSelector }),\r\n };\r\n }\r\n return {\r\n loadView: () => elements.getElementProps<ViewDefinitionProps>(viewId),\r\n loadCategorySelector: (id: Id64String) => elements.getElementProps<CategorySelectorProps>(id),\r\n loadDisplayStyle: (id: Id64String) => elements.getElementProps<DisplayStyleProps>({ id, displayStyle: options?.displayStyle }),\r\n loadModelSelector: (id: Id64String) => elements.getElementProps<ModelSelectorProps>(id),\r\n };\r\n })();\r\n\r\n const props = {} as ViewStateProps;\r\n props.viewDefinitionProps = loader.loadView();\r\n props.categorySelectorProps = loader.loadCategorySelector(props.viewDefinitionProps.categorySelectorId);\r\n props.displayStyleProps = loader.loadDisplayStyle(props.viewDefinitionProps.displayStyleId);\r\n const modelSelectorId = (props.viewDefinitionProps as SpatialViewDefinitionProps).modelSelectorId;\r\n if (modelSelectorId !== undefined)\r\n props.modelSelectorProps = loader.loadModelSelector(modelSelectorId);\r\n\r\n const viewClass = iModel.getJsClass(props.viewDefinitionProps.classFullName);\r\n const baseModelId = (props.viewDefinitionProps as ViewDefinition2dProps).baseModelId;\r\n if (viewClass.is(SheetViewDefinition)) {\r\n props.sheetProps = elements.getElementProps<SheetProps>(baseModelId);\r\n props.sheetAttachments = Array.from(iModel.queryEntityIds({\r\n from: \"BisCore.ViewAttachment\",\r\n where: `Model.Id=${baseModelId}`,\r\n }));\r\n } else if (viewClass.is(DrawingViewDefinition)) {\r\n // Include information about the associated [[SectionDrawing]], if any.\r\n // NB: The SectionDrawing ECClass may not exist in the iModel's version of the BisCore ECSchema.\r\n const sectionDrawing = iModel.elements.tryGetElement<SectionDrawing>(baseModelId);\r\n if (sectionDrawing && sectionDrawing.spatialView && Id64.isValidId64(sectionDrawing.spatialView.id)) {\r\n props.sectionDrawing = {\r\n spatialView: sectionDrawing.spatialView.id,\r\n displaySpatialView: true === sectionDrawing.jsonProperties.displaySpatialView,\r\n drawingToSpatialTransform: sectionDrawing.jsonProperties.drawingToSpatialTransform,\r\n };\r\n }\r\n }\r\n return props;\r\n }\r\n\r\n /** Obtain a [ViewStateProps]($common) for a [[ViewDefinition]] specified by ViewIdString. */\r\n public async getViewStateProps(viewDefinitionId: ViewIdString, options?: ViewStateLoadProps): Promise<ViewStateProps> {\r\n const viewStateData = this.loadViewData(viewDefinitionId, options);\r\n const baseModelId = (viewStateData.viewDefinitionProps as ViewDefinition2dProps).baseModelId;\r\n if (baseModelId) {\r\n const drawingExtents = await this._iModel.models.queryRange(baseModelId);\r\n if (!drawingExtents.isNull)\r\n viewStateData.modelExtents = drawingExtents.toJSON();\r\n }\r\n return viewStateData;\r\n }\r\n\r\n private getViewThumbnailArg(viewDefinitionId: ViewIdString): FilePropertyProps {\r\n if (!Id64.isValid(viewDefinitionId))\r\n throw new IModelError(IModelStatus.BadArg, \"illegal thumbnail id\");\r\n\r\n return { namespace: \"dgn_View\", name: \"Thumbnail\", id: viewDefinitionId };\r\n }\r\n\r\n /** Get the thumbnail for a view.\r\n * @param viewDefinitionId The Id of the view for thumbnail\r\n * @returns the ThumbnailProps, or undefined if no thumbnail exists.\r\n */\r\n public getThumbnail(viewDefinitionId: Id64String): ThumbnailProps | undefined {\r\n const viewArg = this.getViewThumbnailArg(viewDefinitionId);\r\n const sizeProps = this._iModel[_nativeDb].queryFileProperty(viewArg, true) as string;\r\n if (undefined === sizeProps)\r\n return undefined;\r\n\r\n const out = JSON.parse(sizeProps) as ThumbnailProps;\r\n out.image = this._iModel[_nativeDb].queryFileProperty(viewArg, false) as Uint8Array;\r\n return out;\r\n }\r\n\r\n /** Save a thumbnail for a view.\r\n * @param viewDefinitionId The Id of the view for thumbnail\r\n * @param thumbnail The thumbnail data.\r\n * @returns 0 if successful\r\n */\r\n public saveThumbnail(viewDefinitionId: Id64String, thumbnail: ThumbnailProps): number {\r\n const viewArg = this.getViewThumbnailArg(viewDefinitionId);\r\n const props = { format: thumbnail.format, height: thumbnail.height, width: thumbnail.width };\r\n this._iModel[_nativeDb].saveFileProperty(viewArg, JSON.stringify(props), thumbnail.image);\r\n return 0;\r\n }\r\n\r\n /** Set the default view property the iModel.\r\n * @param viewId The Id of the ViewDefinition to use as the default\r\n * @deprecated in 4.2.0 - will not be removed until after 2026-06-13. Avoid setting this property - it is not practical for one single view to serve the needs of the many applications\r\n * that might wish to view the contents of the iModel.\r\n */\r\n public setDefaultViewId(viewId: Id64String): void {\r\n const spec = { namespace: \"dgn_View\", name: \"DefaultView\" };\r\n const blob32 = new Uint32Array(2);\r\n blob32[0] = Id64.getLowerUint32(viewId);\r\n blob32[1] = Id64.getUpperUint32(viewId);\r\n const blob8 = new Uint8Array(blob32.buffer);\r\n this._iModel.saveFileProperty(spec, undefined, blob8);\r\n }\r\n }\r\n\r\n /** Represents the current state of a pollable tile content request.\r\n * Note: lack of a \"completed\" state because polling a completed request returns the content as a Uint8Array.\r\n * @internal\r\n */\r\n export enum TileContentState {\r\n New, // Request was just created and enqueued.\r\n Pending, // Request is enqueued but not yet being processed.\r\n Loading, // Request is being actively processed.\r\n }\r\n\r\n /** @internal */\r\n export class Tiles {\r\n /** @internal */\r\n public constructor(private _iModel: IModelDb) { }\r\n\r\n /** @internal */\r\n public async requestTileTreeProps(id: string): Promise<IModelTileTreeProps> {\r\n\r\n return new Promise<IModelTileTreeProps>((resolve, reject) => {\r\n this._iModel[_nativeDb].getTileTree(id, (ret: IModelJsNative.ErrorStatusOrResult<IModelStatus, any>) => {\r\n if (undefined !== ret.error)\r\n reject(new IModelError(ret.error.status, `TreeId=${id}`));\r\n else\r\n resolve(ret.result as IModelTileTreeProps);\r\n });\r\n });\r\n }\r\n\r\n private pollTileContent(resolve: (arg0: IModelJsNative.TileContent) => void, reject: (err: unknown) => void, treeId: string, tileId: string) {\r\n\r\n let ret;\r\n try {\r\n ret = this._iModel[_nativeDb].pollTileContent(treeId, tileId);\r\n } catch (err) {\r\n // Typically \"imodel not open\".\r\n reject(err);\r\n return;\r\n }\r\n\r\n if (ret.error) {\r\n reject(new IModelError(ret.error.status, `TreeId=${treeId} TileId=${tileId}`));\r\n } else if (ret.result && typeof ret.result !== \"number\") { // if type is not a number, it's the TileContent interface\r\n const res = ret.result;\r\n const iModelId = this._iModel.iModelId;\r\n\r\n const tileSizeThreshold = IModelHost.logTileSizeThreshold;\r\n const tileSize = res.content.length;\r\n if (tileSize > tileSizeThreshold) {\r\n Logger.logWarning(loggerCategory, \"Tile size (in bytes) larger than specified threshold\", () => ({ tileSize, tileSizeThreshold, treeId, tileId, iModelId }));\r\n }\r\n\r\n const loadTimeThreshold = IModelHost.logTileLoadTimeThreshold;\r\n const loadTime = res.elapsedSeconds;\r\n if (loadTime > loadTimeThreshold) {\r\n Logger.logWarning(loggerCategory, \"Tile load time (in seconds) greater than specified threshold\", () => ({ loadTime, loadTimeThreshold, treeId, tileId, iModelId }));\r\n }\r\n\r\n resolve(res);\r\n } else { // if the type is a number, it's the TileContentState enum\r\n // ###TODO: Decide appropriate timeout interval. May want to switch on state (new vs loading vs pending)\r\n setTimeout(() => this.pollTileContent(resolve, reject, treeId, tileId), 10);\r\n }\r\n }\r\n\r\n /** @internal */\r\n public async requestTileContent(treeId: string, tileId: string): Promise<IModelJsNative.TileContent> {\r\n return new Promise<IModelJsNative.TileContent>((resolve, reject) => {\r\n this.pollTileContent(resolve, reject, treeId, tileId);\r\n });\r\n }\r\n\r\n /** @internal */\r\n public async getTileContent(treeId: string, tileId: string): Promise<Uint8Array> {\r\n const ret = await new Promise<IModelJsNative.ErrorStatusOrResult<any, Uint8Array>>((resolve) => {\r\n this._iModel[_nativeDb].getTileContent(treeId, tileId, resolve);\r\n });\r\n\r\n if (undefined !== ret.error) {\r\n throw new IModelError(ret.error.status, `TreeId=${treeId} TileId=${tileId}`);\r\n }\r\n\r\n assert(undefined !== ret.result);\r\n return ret.result;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Argument to a function that can accept a valid access token.\r\n * @public\r\n */\r\nexport interface TokenArg {\r\n /** If present, the access token for the requested operation. If not present, use [[IModelHost.getAccessToken]] */\r\n readonly accessToken?: AccessToken;\r\n}\r\n\r\n/** Augments a [[SnapshotDbOpenArgs]] or [[OpenBriefcaseArgs]] with a [CloudContainer]($docs/learning/backend/Workspace.md).\r\n * The properties are this interface are reserved for internal use only.\r\n * @public\r\n */\r\nexport interface CloudContainerArgs {\r\n /** @internal */\r\n container?: CloudSqlite.CloudContainer;\r\n}\r\n\r\n/** Options to open a [SnapshotDb]($backend).\r\n * @public\r\n */\r\nexport type SnapshotDbOpenArgs = SnapshotOpenOptions & CloudContainerArgs & OpenSqliteArgs;\r\n\r\n/**\r\n * Arguments to open a BriefcaseDb\r\n * @public\r\n */\r\nexport type OpenBriefcaseArgs = OpenBriefcaseProps & CloudContainerArgs & OpenSqliteArgs;\r\n\r\n/**\r\n * A local copy of an iModel from iModelHub that can pull and potentially push changesets.\r\n * BriefcaseDb raises a set of events to allow apps and subsystems to track its object life cycle, including [[onOpen]] and [[onOpened]].\r\n * @public\r\n */\r\nexport class BriefcaseDb extends IModelDb {\r\n /** Manages local changes to this briefcase. */\r\n public readonly txns: TxnManager = new TxnManager(this);\r\n\r\n /** override superclass method */\r\n public override get isBriefcase(): boolean { return true; }\r\n\r\n /* the BriefcaseId of the briefcase opened with this BriefcaseDb */\r\n public readonly briefcaseId: BriefcaseId;\r\n\r\n private _skipSyncSchemasOnPullAndPush?: true;\r\n\r\n /** @internal */\r\n public get skipSyncSchemasOnPullAndPush() { return this._skipSyncSchemasOnPullAndPush ?? false; }\r\n\r\n /**\r\n * Event raised just before a BriefcaseDb is opened. Supplies the arguments that will be used to open the BriefcaseDb.\r\n * Throw an exception to stop the open.\r\n *\r\n * **Example:**\r\n * ``` ts\r\n * [[include:BriefcaseDb.onOpen]]\r\n * ```\r\n */\r\n public static readonly onOpen = new BeEvent<(_args: OpenBriefcaseArgs) => void>();\r\n\r\n /**\r\n * Event raised just after a BriefcaseDb is opened. Supplies the newly opened BriefcaseDb and the arguments that were used to open it.\r\n *\r\n * **Example:**\r\n * ``` ts\r\n * [[include:BriefcaseDb.onOpened]]\r\n * ```\r\n */\r\n public static readonly onOpened = new BeEvent<(_iModelDb: BriefcaseDb, _args: OpenBriefcaseArgs) => void>();\r\n\r\n /** Event raised after a BriefcaseDb has been closed. */\r\n public readonly onClosed = new BeEvent<() => void>();\r\n\r\n /** @alpha */\r\n public static readonly onCodeServiceCreated = new BeEvent<(briefcase: BriefcaseDb) => void>();\r\n\r\n public static override findByKey(key: string): BriefcaseDb {\r\n return super.findByKey(key) as BriefcaseDb;\r\n }\r\n\r\n public static override tryFindByKey(key: string): BriefcaseDb | undefined {\r\n const db = super.tryFindByKey(key);\r\n return db?.isBriefcaseDb() ? db : undefined;\r\n }\r\n\r\n /**\r\n * Permanently discards any local changes made to this briefcase, reverting the briefcase to its last synchronized state.\r\n * This operation cannot be undone. By default, all locks held by this briefcase will be released unless the `retainLocks` option is specified.\r\n * @Note This operation can be performed at any point including after failed rebase attempts.\r\n * @param args - Options for discarding changes.\r\n * @param args.retainLocks - If `true`, retains all currently held locks after discarding changes. If omitted or `false`, all locks will be released.\r\n * @returns A promise that resolves when the operation is complete.\r\n * @throws May throw if discarding changes fails.\r\n *\r\n * @public @preview\r\n */\r\n public async discardChanges(args?: { retainLocks?: true }): Promise<void> {\r\n Logger.logInfo(loggerCategory, \"Discarding local changes\");\r\n if (this.txns.isIndirectChanges) {\r\n throw new IModelError(IModelStatus.BadRequest, \"Cannot discard changes when there are indirect changes\");\r\n }\r\n\r\n if (this.txns.rebaser.inProgress() && !this.txns.rebaser.isAborting) {\r\n throw new IModelError(IModelStatus.BadRequest, \"Cannot discard changes while a rebase is in progress\");\r\n }\r\n\r\n this.clearCaches();\r\n this[_nativeDb].clearECDbCache();\r\n this[_nativeDb].discardLocalChanges();\r\n this[_resetIModelDb]();\r\n if (args?.retainLocks) {\r\n return;\r\n }\r\n\r\n // attempt to release locks must happen after changes are undone successfully\r\n Logger.logInfo(loggerCategory, \"Releasing locks after discarding changes\");\r\n await this.locks.releaseAllLocks();\r\n }\r\n\r\n /**\r\n * The Guid that identifies the *context* that owns this iModel.\r\n * GuidString | undefined for the superclass, but required for BriefcaseDb\r\n * */\r\n public override get iTwinId(): GuidString { return super.iTwinId!; } // eslint-disable-line @typescript-eslint/no-non-null-assertion\r\n\r\n /**\r\n * Determine whether this BriefcaseDb should use a lock server.\r\n * All must be true:\r\n * - file is open for write\r\n * - has an assigned briefcaseId\r\n * - the \"no locking\" flag is not present. This is a property of an iModel, established when the iModel is created in IModelHub.\r\n */\r\n protected get useLockServer(): boolean {\r\n return !this[_nativeDb].isReadonly() && (this.briefcaseId !== BriefcaseIdValue.Unassigned) && (undefined === this[_nativeDb].queryLocalValue(BriefcaseLocalValue.NoLocking));\r\n }\r\n\r\n // if the iModel uses a lock server, create a ServerBasedLocks LockControl for this BriefcaseDb.\r\n protected makeLockControl() {\r\n if (this.useLockServer)\r\n this._locks = createServerBasedLocks(this);\r\n }\r\n\r\n protected constructor(args: { nativeDb: IModelJsNative.DgnDb, key: string, openMode: OpenMode, briefcaseId: number }) {\r\n super({ ...args, changeset: args.nativeDb.getCurrentChangeset() });\r\n this._openMode = args.openMode;\r\n this.briefcaseId = args.briefcaseId;\r\n this.makeLockControl();\r\n }\r\n\r\n /** Upgrades the profile or domain schemas. File must be closed before this call and is always left closed. */\r\n private static async doUpgrade(briefcase: OpenBriefcaseArgs, upgradeOptions: UpgradeOptions, description: string): Promise<void> {\r\n let wasChanges = false;\r\n const executeUpgrade = () => {\r\n const nativeDb = this.openDgnDb({ path: briefcase.fileName }, OpenMode.ReadWrite, upgradeOptions); // performs the upgrade\r\n wasChanges = nativeDb.hasPendingTxns();\r\n nativeDb.closeFile();\r\n };\r\n\r\n const isSchemaSyncEnabled = await withBriefcaseDb(briefcase, async (db) => {\r\n await SchemaSync.pull(db);\r\n return db[_nativeDb].schemaSyncEnabled();\r\n }) as boolean;\r\n\r\n if (isSchemaSyncEnabled) {\r\n await SchemaSync.withLockedAccess(briefcase, { openMode: OpenMode.Readonly, operationName: \"schema sync\" }, async (syncAccess) => {\r\n const schemaSyncDbUri = syncAccess.getUri();\r\n executeUpgrade();\r\n await withBriefcaseDb(briefcase, async (db) => {\r\n db[_nativeDb].schemaSyncPush(schemaSyncDbUri);\r\n db.saveChanges();\r\n });\r\n syncAccess.synchronizeWithCloud();\r\n });\r\n } else {\r\n executeUpgrade();\r\n }\r\n\r\n if (wasChanges)\r\n await withBriefcaseDb(briefcase, async (db) => db.pushChanges({ ...briefcase, description, retainLocks: true }));\r\n }\r\n\r\n /** Upgrades the schemas in the iModel based on the current version of the software. Follows a sequence of operations -\r\n * * Acquires a schema lock to prevent other users from making any other changes while upgrade is happening\r\n * * Updates the local briefcase with the schema changes.\r\n * * Pushes the resulting changeset(s) to iModelHub.\r\n * Note that the upgrade requires that the local briefcase be closed, and may result in one or two change sets depending on whether both\r\n * profile and domain schemas need to get upgraded.\r\n * @see ($docs/learning/backend/IModelDb.md#upgrading-schemas-in-an-imodel)\r\n */\r\n public static async upgradeSchemas(briefcase: OpenBriefcaseArgs): Promise<void> {\r\n // upgrading schemas involves closing and reopening the file repeatedly. That's because the process of upgrading\r\n // happens on a file open. We have to open-and-close the file at *each* of these steps:\r\n // - acquire schema lock\r\n // - upgrade profile\r\n // - push changes\r\n // - upgrade domain\r\n // - push changes\r\n // - release schema lock\r\n // good thing computers are fast. Fortunately upgrading should be rare (and the push time will dominate anyway.) Don't try to optimize any of this away.\r\n try {\r\n await this.doUpgrade(briefcase, { profile: ProfileOptions.Upgrade }, \"Upgraded profile\");\r\n } catch (error: any) {\r\n if (error.errorNumber === DbResult.BE_SQLITE_ERROR_DataTransformRequired) {\r\n Logger.logInfo(loggerCategory, `Profile upgrade contains data transform. Retrying upgrade with a schema lock.`);\r\n try {\r\n await withBriefcaseDb(briefcase, async (db) => db.acquireSchemaLock()); // may not really acquire lock if iModel uses \"noLocks\" mode.\r\n await this.doUpgrade(briefcase, { profile: ProfileOptions.Upgrade, schemaLockHeld: true }, \"Upgraded profile\");\r\n await this.doUpgrade(briefcase, { domain: DomainOptions.Upgrade, schemaLockHeld: true }, \"Upgraded domain schemas\");\r\n } finally {\r\n await withBriefcaseDb(briefcase, async (db) => db.locks[_releaseAllLocks]());\r\n }\r\n return;\r\n }\r\n throw error;\r\n }\r\n try {\r\n await this.doUpgrade(briefcase, { domain: DomainOptions.Upgrade }, \"Upgraded domain schemas\");\r\n } catch (error: any) {\r\n if (error.errorNumber === DbResult.BE_SQLITE_ERROR_DataTransformRequired) {\r\n Logger.logInfo(loggerCategory, `Domain schema upgrade contains data transform. Retrying upgrade with a schema lock.`);\r\n try {\r\n await withBriefcaseDb(briefcase, async (db) => db.acquireSchemaLock()); // may not really acquire lock if iModel uses \"noLocks\" mode.\r\n await this.doUpgrade(briefcase, { domain: DomainOptions.Upgrade, schemaLockHeld: true }, \"Upgraded domain schemas\");\r\n } finally {\r\n await withBriefcaseDb(briefcase, async (db) => db.locks[_releaseAllLocks]());\r\n }\r\n return;\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n /** Open a briefcase file and return a new BriefcaseDb to interact with it.\r\n * @param args parameters that specify the file name, and options for opening the briefcase file\r\n */\r\n public static async open(args: OpenBriefcaseArgs): Promise<BriefcaseDb> {\r\n this.onOpen.raiseEvent(args);\r\n\r\n const file = { path: args.fileName, key: args.key };\r\n const openMode = (args.readonly || args.watchForChanges) ? OpenMode.Readonly : OpenMode.ReadWrite;\r\n const nativeDb = this.openDgnDb(file, openMode, undefined, args);\r\n const briefcaseDb = new this({ nativeDb, key: file.key ?? Guid.createValue(), openMode, briefcaseId: nativeDb.getBriefcaseId() });\r\n\r\n // If they asked to watch for changes, set an fs.watch on the \"-watch\" file (only it is modified while we hold this connection.)\r\n // Whenever there are changes, restart our defaultTxn. That loads the changes from the other connection and sends\r\n // notifications as if they happened on this connection. Note: the watcher is called only when the backend event loop cycles.\r\n if (args.watchForChanges && undefined === args.container) {\r\n // Must touch the file synchronously - cannot watch a file until it exists.\r\n touch.sync(briefcaseDb.watchFilePathName);\r\n\r\n // Restart default txn to trigger events when watch file is changed by some other process.\r\n const watcher = fs.watch(briefcaseDb.watchFilePathName, { persistent: false }, () => {\r\n nativeDb.clearECDbCache();\r\n nativeDb.restartDefaultTxn();\r\n briefcaseDb.changeset = briefcaseDb[_nativeDb].getCurrentChangeset();\r\n });\r\n\r\n // Stop the watcher when we close this connection.\r\n briefcaseDb.onBeforeClose.addOnce(() => {\r\n watcher.close();\r\n });\r\n }\r\n\r\n // load all of the settings from workspaces\r\n await briefcaseDb.loadWorkspaceSettings();\r\n\r\n if (openMode === OpenMode.ReadWrite && CodeService.createForIModel) {\r\n try {\r\n briefcaseDb._codeService = await CodeService.createForIModel(briefcaseDb);\r\n this.onCodeServiceCreated.raiseEvent(briefcaseDb);\r\n } catch (e: any) {\r\n if ((e as CodeService.Error).errorId !== \"NoCodeIndex\") { // no code index means iModel isn't enforcing codes.\r\n Logger.logWarning(loggerCategory, `The CodeService is not available for this briefcase: errorId: ${(e as CodeService.Error).errorId}, errorMessage; ${e.message}. Proceeding with BriefcaseDb.open(), but all operations involving codes will fail.`);\r\n briefcaseDb._codeService = {\r\n verifyCode: (props: CodeService.ElementCodeProps) => {\r\n if (!Code.isEmpty(props.props.code)) {\r\n e.message = `The CodeService is not available for this briefcase: errorId: ${(e as CodeService.Error).errorId}, errorMessage; ${e.message}.`;\r\n throw e;\r\n }\r\n },\r\n appParams: {\r\n author: { name: \"unknown\" },\r\n origin: { name: \"unknown\" },\r\n },\r\n close: () => { },\r\n initialize: async () => { },\r\n };\r\n }\r\n }\r\n }\r\n\r\n this.onOpened.raiseEvent(briefcaseDb, args);\r\n return briefcaseDb;\r\n }\r\n\r\n /** This is called by native code when applying a changeset */\r\n private onChangesetConflict(args: DbMergeChangesetConflictArgs): DbConflictResolution | undefined {\r\n // returning undefined will result in native handler to resolve conflict\r\n\r\n const category = \"DgnCore\";\r\n const interpretConflictCause = (cause: DbConflictCause) => {\r\n switch (cause) {\r\n case DbConflictCause.Data:\r\n return \"data\";\r\n case DbConflictCause.NotFound:\r\n return \"not found\";\r\n case DbConflictCause.Conflict:\r\n return \"conflict\";\r\n case DbConflictCause.Constraint:\r\n return \"constraint\";\r\n case DbConflictCause.ForeignKey:\r\n return \"foreign key\";\r\n }\r\n };\r\n\r\n if (args.cause === DbConflictCause.Data && !args.indirect) {\r\n /*\r\n * From SQLite Docs CHANGESET_DATA as the second argument\r\n * when processing a DELETE or UPDATE change if a row with the required\r\n * PRIMARY KEY fields is present in the database, but one or more other\r\n * (non primary-key) fields modified by the update do not contain the\r\n * expected \"before\" values.\r\n *\r\n * The conflicting row, in this case, is the database row with the matching\r\n * primary key.\r\n *\r\n * Another reason this will be invoked is when SQLITE_CHANGESETAPPLY_FKNOACTION\r\n * is passed ApplyChangeset(). The flag will disable CASCADE action and treat\r\n * them as CASCADE NONE resulting in conflict handler been called.\r\n */\r\n if (!this.txns.hasPendingTxns) {\r\n // This changeset is bad. However, it is already in the timeline. We must allow services such as\r\n // checkpoint-creation, change history, and other apps to apply any changeset that is in the timeline.\r\n Logger.logWarning(category, \"UPDATE/DELETE before value do not match with one in db or CASCADE action was triggered.\");\r\n args.dump();\r\n } else {\r\n if (args.tableName === \"be_Prop\") {\r\n if (args.getValueText(0, DbChangeStage.Old) === \"ec_Db\" && args.getValueText(1, DbChangeStage.Old) === \"localDbInfo\") {\r\n return DbConflictResolution.Replace;\r\n }\r\n }\r\n if (args.tableName.startsWith(\"ec_\")) {\r\n return DbConflictResolution.Skip;\r\n }\r\n const msg = \"UPDATE/DELETE before value do not match with one in db or CASCADE action was triggered.\";\r\n args.setLastError(msg);\r\n Logger.logError(category, msg);\r\n args.dump();\r\n return DbConflictResolution.Abort;\r\n }\r\n }\r\n\r\n // Handle some special cases\r\n if (args.cause === DbConflictCause.Conflict) {\r\n // From the SQLite docs: \"CHANGESET_CONFLICT is passed as the second argument to the conflict handler while processing an INSERT change if the operation would result in duplicate primary key values.\"\r\n // This is always a fatal error - it can happen only if the app started with a briefcase that is behind the tip and then uses the same primary key values (e.g., ElementIds)\r\n // that have already been used by some other app using the SAME briefcase ID that recently pushed changes. That can happen only if the app makes changes without first pulling and acquiring locks.\r\n if (!this.txns.hasPendingTxns) {\r\n // This changeset is bad. However, it is already in the timeline. We must allow services such as\r\n // checkpoint-creation, change history, and other apps to apply any changeset that is in the timeline.\r\n Logger.logWarning(category, \"PRIMARY KEY INSERT CONFLICT - resolved by replacing the existing row with the incoming row\");\r\n args.dump();\r\n } else {\r\n if (args.tableName.startsWith(\"ec_\")) {\r\n return DbConflictResolution.Skip;\r\n }\r\n const msg = \"PRIMARY KEY INSERT CONFLICT - rejecting this changeset\";\r\n args.setLastError(msg);\r\n Logger.logError(category, msg);\r\n args.dump();\r\n return DbConflictResolution.Abort;\r\n }\r\n }\r\n\r\n if (args.cause === DbConflictCause.ForeignKey) {\r\n // Note: No current or conflicting row information is provided if it's a FKey conflict\r\n // Since we abort on FKey conflicts, always try and provide details about the error\r\n const nConflicts = args.getForeignKeyConflicts();\r\n\r\n // Note: There is no performance implication of follow code as it happen toward end of\r\n // apply_changeset only once so we be querying value for 'DebugAllowFkViolations' only once.\r\n if (this[_nativeDb].queryLocalValue(\"DebugAllowFkViolations\")) {\r\n Logger.logError(category, `Detected ${nConflicts} foreign key conflicts in changeset. Continuing merge as 'DebugAllowFkViolations' flag is set. Run 'PRAGMA foreign_key_check' to get list of violations.`);\r\n return DbConflictResolution.Skip;\r\n } else {\r\n const msg = `Detected ${nConflicts} foreign key conflicts in ChangeSet. Aborting merge.`;\r\n args.setLastError(msg);\r\n return DbConflictResolution.Abort;\r\n }\r\n }\r\n\r\n if (args.cause === DbConflictCause.NotFound) {\r\n /*\r\n * Note: If DbConflictCause = NotFound, the primary key was not found, and returning DbConflictResolution::Replace is\r\n * not an option at all - this will cause a BE_SQLITE_MISUSE error.\r\n */\r\n return DbConflictResolution.Skip;\r\n }\r\n\r\n if (args.cause === DbConflictCause.Constraint) {\r\n if (Logger.isEnabled(category, LogLevel.Info)) {\r\n Logger.logInfo(category, \"------------------------------------------------------------------\");\r\n Logger.logInfo(category, `Conflict detected - Cause: ${interpretConflictCause(args.cause)}`);\r\n args.dump();\r\n }\r\n\r\n Logger.logWarning(category, \"Constraint conflict handled by rejecting incoming change. Constraint conflicts are NOT expected. These happen most often when two clients both insert elements with the same code. That indicates a bug in the client or the code server.\");\r\n return DbConflictResolution.Skip;\r\n }\r\n\r\n /*\r\n * If we don't have a control, we always accept the incoming revision in cases of conflicts:\r\n *\r\n * + In a briefcase with no local changes, the state of a row in the Db (i.e., the final state of a previous revision)\r\n * may not exactly match the initial state of the incoming revision. This will cause a conflict.\r\n * - The final state of the incoming (later) revision will always be setup exactly right to accommodate\r\n * cases where dependency handlers won't be available (for instance on the server), and we have to rely on\r\n * the revision to correctly set the final state of the row in the Db. Therefore it's best to resolve the\r\n * conflict in favor of the incoming change.\r\n * + In a briefcase with local changes, the state of relevant dependent properties (due to propagated indirect changes)\r\n * may not correspond with the initial state of these properties in an incoming revision. This will cause a conflict.\r\n * - Resolving the conflict in favor of the incoming revision may cause some dependent properties to be set\r\n * incorrectly, but the dependency handlers will run anyway and set this right. The new changes will be part of\r\n * a subsequent revision generated from that briefcase.\r\n *\r\n * + Note that conflicts can NEVER happen between direct changes made locally and direct changes in the incoming revision.\r\n * - Only one user can make a direct change at one time, and the next user has to pull those changes before getting a\r\n * lock to the same element\r\n *\r\n * + Also see comments in TxnManager::MergeDataChanges()\r\n */\r\n if (Logger.isEnabled(category, LogLevel.Info)) {\r\n Logger.logInfo(category, `Conflict detected - Cause: ${interpretConflictCause(args.cause)}`);\r\n args.dump();\r\n Logger.logInfo(category, \"Conflicting resolved by replacing the existing entry with the change\");\r\n }\r\n return DbConflictResolution.Replace;\r\n }\r\n\r\n /** If the briefcase is read-only, reopen the native briefcase for writing.\r\n * Execute the supplied function.\r\n * If the briefcase was read-only, reopen the native briefcase as read-only.\r\n * @note this._openMode is not changed from its initial value.\r\n * @internal Exported strictly for tests\r\n */\r\n public async executeWritable(func: () => Promise<void>): Promise<void> {\r\n const fileName = this.pathName;\r\n const isReadonly = this.isReadonly;\r\n let locks: LockControl | undefined;\r\n try {\r\n if (isReadonly) {\r\n this.closeAndReopen(OpenMode.ReadWrite, fileName);\r\n locks = this.locks;\r\n this.makeLockControl(); // create a ServerBasedLocks, if necessary\r\n }\r\n await func();\r\n } finally {\r\n if (isReadonly) {\r\n if (locks !== this._locks) { // did we have to create a ServerBasedLocks?\r\n this.locks[_close](); // yes, close it and reset back to previous\r\n this._locks = locks;\r\n }\r\n this.closeAndReopen(OpenMode.Readonly, fileName);\r\n }\r\n }\r\n }\r\n\r\n private closeAndReopen(openMode: OpenMode, fileName: string) {\r\n // Unclosed statements will produce BUSY error when attempting to close.\r\n this.clearCaches();\r\n\r\n // The following resets the native db's pointer to this JavaScript object.\r\n this[_nativeDb].closeFile();\r\n this[_nativeDb].openIModel(fileName, openMode);\r\n\r\n // Restore the native db's pointer to this JavaScript object.\r\n this[_nativeDb].setIModelDb(this);\r\n\r\n // refresh cached properties that could have been changed by another process writing to the same briefcase\r\n this.changeset = this[_nativeDb].getCurrentChangeset();\r\n\r\n // assert what should never change\r\n if (this.iModelId !== this[_nativeDb].getIModelId() || this.iTwinId !== this[_nativeDb].getITwinId())\r\n throw new Error(\"closeAndReopen detected change in iModelId and/or iTwinId\");\r\n }\r\n\r\n /**\r\n * Pull and apply changesets from iModelHub\r\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync} or {RebaseHandler.recompute}.\r\n */\r\n public async pullChanges(arg?: PullChangesArgs): Promise<void> {\r\n await this.executeWritable(async () => {\r\n await BriefcaseManager.pullAndApplyChangesets(this, arg ?? {});\r\n if (!this.skipSyncSchemasOnPullAndPush)\r\n await SchemaSync.pull(this);\r\n this.initializeIModelDb(\"pullMerge\");\r\n });\r\n\r\n this.txns._onChangesPulled(this.changeset as ChangesetIndexAndId);\r\n }\r\n\r\n public async enableChangesetStatTracking(): Promise<void> {\r\n this[_nativeDb].enableChangesetStatsTracking();\r\n }\r\n\r\n public async disableChangesetStatTracking(): Promise<void> {\r\n this[_nativeDb].disableChangesetStatsTracking();\r\n }\r\n\r\n public async getAllChangesetHealthData(): Promise<ChangesetHealthStats[]> {\r\n return this[_nativeDb].getAllChangesetHealthData() as ChangesetHealthStats[];\r\n }\r\n\r\n /** Revert timeline changes and then push resulting changeset */\r\n public async revertAndPushChanges(arg: RevertChangesArgs): Promise<void> {\r\n const nativeDb = this[_nativeDb];\r\n if (arg.toIndex === undefined) {\r\n throw new IModelError(ChangeSetStatus.ApplyError, \"Cannot revert without a toIndex\");\r\n }\r\n if (nativeDb.hasUnsavedChanges()) {\r\n throw new IModelError(ChangeSetStatus.HasUncommittedChanges, \"Cannot revert with unsaved changes\");\r\n }\r\n if (nativeDb.hasPendingTxns()) {\r\n throw new IModelError(ChangeSetStatus.HasLocalChanges, \"Cannot revert with pending txns\");\r\n }\r\n\r\n const skipSchemaSyncPull = async <T>(func: () => Promise<T>) => {\r\n if (nativeDb.schemaSyncEnabled()) {\r\n this._skipSyncSchemasOnPullAndPush = true;\r\n try {\r\n return await func();\r\n } finally {\r\n this._skipSyncSchemasOnPullAndPush = undefined;\r\n }\r\n } else {\r\n return func();\r\n }\r\n };\r\n this.clearCaches();\r\n await skipSchemaSyncPull(async () => this.pullChanges({ ...arg, toIndex: undefined }));\r\n await this.acquireSchemaLock();\r\n\r\n if (nativeDb.schemaSyncEnabled()) {\r\n arg.skipSchemaChanges = true;\r\n }\r\n\r\n try {\r\n await BriefcaseManager.revertTimelineChanges(this, arg);\r\n this.saveChanges(\"Revert changes\");\r\n if (!arg.description) {\r\n arg.description = `Reverted changes from ${this.changeset.index} to ${arg.toIndex}${arg.skipSchemaChanges ? \" (schema changes skipped)\" : \"\"}`;\r\n }\r\n const pushArgs = {\r\n description: arg.description,\r\n accessToken: arg.accessToken,\r\n mergeRetryCount: arg.mergeRetryCount,\r\n mergeRetryDelay: arg.mergeRetryDelay,\r\n pushRetryCount: arg.pushRetryCount,\r\n pushRetryDelay: arg.pushRetryDelay,\r\n retainLocks: arg.retainLocks,\r\n };\r\n await skipSchemaSyncPull(async () => this.pushChanges(pushArgs));\r\n this.clearCaches();\r\n } catch (err) {\r\n if (!arg.retainLocks) {\r\n await this.locks.releaseAllLocks();\r\n throw err;\r\n }\r\n } finally {\r\n this.abandonChanges();\r\n }\r\n }\r\n\r\n /**\r\n * Push changes to iModelHub.\r\n * @note This method should not be called from {TxnManager.withIndirectTxnModeAsync} or {RebaseHandler.recompute}.\r\n */\r\n public async pushChanges(arg: PushChangesArgs): Promise<void> {\r\n if (this.briefcaseId === BriefcaseIdValue.Unassigned)\r\n return;\r\n\r\n if (this[_nativeDb].hasUnsavedChanges()) {\r\n throw new IModelError(ChangeSetStatus.HasUncommittedChanges, \"Cannot push with unsaved changes\");\r\n } else if (!this[_nativeDb].hasPendingTxns()) {\r\n // Nothing to push.\r\n if (!arg.retainLocks) {\r\n await this.locks.releaseAllLocks();\r\n }\r\n\r\n return;\r\n }\r\n\r\n // pushing changes requires a writeable briefcase\r\n await this.executeWritable(async () => {\r\n await BriefcaseManager.pullMergePush(this, arg);\r\n this.initializeIModelDb(\"pullMerge\");\r\n });\r\n\r\n this.txns._onChangesPushed(this.changeset as ChangesetIndexAndId);\r\n }\r\n\r\n public override close() {\r\n if (this.isBriefcase && this.isOpen && !this.isReadonly && this.txns.rebaser.inProgress()) {\r\n this.abandonChanges();\r\n }\r\n super.close();\r\n this.onClosed.raiseEvent();\r\n }\r\n}\r\n\r\n/** Used to reattach Daemon from a user's accessToken for V2 checkpoints.\r\n * @note Reattach only happens if the previous access token either has expired or is about to expire within an application-supplied safety duration.\r\n */\r\nclass RefreshV2CheckpointSas {\r\n /** the time at which the current token should be refreshed (its expiry minus safetySeconds) */\r\n private _timestamp = 0;\r\n /** while a refresh is happening, all callers get this promise. */\r\n private _promise: Promise<void> | undefined;\r\n /** Time, in seconds, before the current token expires to obtain a new token. Default is 1 hour. */\r\n private _safetySeconds: number;\r\n\r\n constructor(sasToken: string, safetySeconds?: number) {\r\n this._safetySeconds = safetySeconds ?? 60 * 60; // default to 1 hour\r\n this.setTimestamp(sasToken);\r\n }\r\n\r\n private async performRefresh(accessToken: AccessToken, iModel: IModelDb): Promise<void> {\r\n this._timestamp = 0; // everyone needs to wait until token is valid\r\n\r\n // we're going to request that the checkpoint manager use this user's accessToken to obtain a new access token for this checkpoint's storage account.\r\n Logger.logInfo(BackendLoggerCategory.Authorization, \"attempting to refresh sasToken for checkpoint\");\r\n try {\r\n // this exchanges the supplied user accessToken for an expiring blob-store token to read the checkpoint.\r\n const container = iModel.cloudContainer;\r\n if (!container)\r\n throw new Error(\"checkpoint is not from a cloud container\");\r\n\r\n assert(undefined !== iModel.iTwinId);\r\n const props = await IModelHost[_hubAccess].queryV2Checkpoint({ accessToken, iTwinId: iModel.iTwinId, iModelId: iModel.iModelId, changeset: iModel.changeset });\r\n if (!props)\r\n throw new Error(\"can't reset checkpoint sas token\");\r\n\r\n container.accessToken = props.sasToken;\r\n this.setTimestamp(props.sasToken);\r\n\r\n Logger.logInfo(BackendLoggerCategory.Authorization, \"refreshed checkpoint sasToken successfully\");\r\n } finally {\r\n this._promise = undefined;\r\n }\r\n }\r\n\r\n private setTimestamp(sasToken: string) {\r\n const exp = new URLSearchParams(sasToken).get(\"se\");\r\n const sasTokenExpiry = exp ? Date.parse(exp) : 0;\r\n this._timestamp = sasTokenExpiry - (this._safetySeconds * 1000);\r\n if (this._timestamp < Date.now())\r\n Logger.logError(BackendLoggerCategory.Authorization, \"attached with timestamp that expires before safety interval\");\r\n }\r\n\r\n public async refreshSas(accessToken: AccessToken, iModel: IModelDb): Promise<void> {\r\n if (this._timestamp > Date.now())\r\n return; // current token is fine\r\n\r\n if (undefined === this._promise) // has reattach already begun?\r\n this._promise = this.performRefresh(accessToken, iModel); // no, start it\r\n\r\n return this._promise;\r\n }\r\n\r\n}\r\n/** A *snapshot* iModel database file that is used for archival and data transfer purposes.\r\n * @see [Snapshot iModels]($docs/learning/backend/AccessingIModels.md#snapshot-imodels)\r\n * @see [About IModelDb]($docs/learning/backend/IModelDb.md)\r\n * @public\r\n */\r\nexport class SnapshotDb extends IModelDb {\r\n public override get isSnapshot() { return true; }\r\n private _refreshSas: RefreshV2CheckpointSas | undefined;\r\n /** Timer used to restart the default txn on the SnapshotDb after some inactivity. This is only used for checkpoints.\r\n * Restarting the default txn lets CloudSqlite know that any blocks that may have been read may now be ejected.\r\n * Without restarting the default txn, CloudSQLite can get into a state where it can not evict any blocks to make space for more blocks.\r\n */\r\n private _restartDefaultTxnTimer?: NodeJS.Timeout;\r\n private _createClassViewsOnClose?: boolean;\r\n public static readonly onOpen = new BeEvent<(path: LocalFileName, opts?: SnapshotDbOpenArgs) => void>();\r\n public static readonly onOpened = new BeEvent<(_iModelDb: SnapshotDb) => void>();\r\n\r\n private constructor(nativeDb: IModelJsNative.DgnDb, key: string) {\r\n super({ nativeDb, key, changeset: nativeDb.getCurrentChangeset() });\r\n this._openMode = nativeDb.isReadonly() ? OpenMode.Readonly : OpenMode.ReadWrite;\r\n }\r\n\r\n public static override findByKey(key: string): SnapshotDb {\r\n return super.findByKey(key) as SnapshotDb;\r\n }\r\n\r\n public static override tryFindByKey(key: string): SnapshotDb | undefined {\r\n const db = super.tryFindByKey(key);\r\n return db?.isSnapshotDb() ? db : undefined;\r\n }\r\n\r\n /** Create an *empty* local [Snapshot]($docs/learning/backend/AccessingIModels.md#snapshot-imodels) iModel file.\r\n * Snapshots are not synchronized with iModelHub, so do not have a change timeline.\r\n * @note: A *snapshot* cannot be modified after [[close]] is called.\r\n * @param filePath The file that will contain the new iModel *snapshot*\r\n * @param options The parameters that define the new iModel *snapshot*\r\n * @returns A writeable SnapshotDb\r\n * @see [Snapshot iModels]($docs/learning/backend/AccessingIModels.md#snapshot-imodels)\r\n */\r\n public static createEmpty(filePath: LocalFileName, options: CreateEmptySnapshotIModelProps): SnapshotDb {\r\n const nativeDb = new IModelNative.platform.DgnDb();\r\n nativeDb.createIModel(filePath, options);\r\n nativeDb.resetBriefcaseId(BriefcaseIdValue.Unassigned);\r\n\r\n const snapshotDb = new SnapshotDb(nativeDb, Guid.createValue());\r\n snapshotDb.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n if (options.createClassViews)\r\n snapshotDb._createClassViewsOnClose = true; // save flag that will be checked when close() is called\r\n if (options.geographicCoordinateSystem)\r\n snapshotDb.setGeographicCoordinateSystem(options.geographicCoordinateSystem);\r\n if (options.ecefLocation)\r\n snapshotDb.setEcefLocation(options.ecefLocation);\r\n return snapshotDb;\r\n }\r\n\r\n /** Create a local [Snapshot]($docs/learning/backend/AccessingIModels.md#snapshot-imodels) iModel file, using this iModel as a *seed* or starting point.\r\n * Snapshots are not synchronized with iModelHub, so do not have a change timeline.\r\n * @note: A *snapshot* cannot be modified after [[close]] is called.\r\n * @param iModelDb The snapshot will be initialized from the current contents of this iModelDb\r\n * @param snapshotFile The file that will contain the new iModel *snapshot*\r\n * @param options Optional properties that determine how the snapshot iModel is created.\r\n * @returns A writeable SnapshotDb\r\n * @see [Snapshot iModels]($docs/learning/backend/AccessingIModels.md#snapshot-imodels)\r\n */\r\n public static createFrom(iModelDb: IModelDb, snapshotFile: string, options?: CreateSnapshotIModelProps): SnapshotDb {\r\n iModelDb.performCheckpoint();\r\n IModelJsFs.copySync(iModelDb.pathName, snapshotFile);\r\n\r\n const nativeDb = new IModelNative.platform.DgnDb();\r\n nativeDb.openIModel(snapshotFile, OpenMode.ReadWrite, undefined);\r\n nativeDb.vacuum();\r\n\r\n // Replace iModelId if seedFile is a snapshot, preserve iModelId if seedFile is an iModelHub-managed briefcase\r\n if (!BriefcaseManager.isValidBriefcaseId(nativeDb.getBriefcaseId()))\r\n nativeDb.setIModelId(Guid.createValue());\r\n\r\n nativeDb.deleteLocalValue(BriefcaseLocalValue.StandaloneEdit);\r\n nativeDb.saveChanges();\r\n nativeDb.deleteAllTxns();\r\n nativeDb.resetBriefcaseId(BriefcaseIdValue.Unassigned);\r\n\r\n const snapshotDb = new SnapshotDb(nativeDb, Guid.createValue());\r\n if (options?.createClassViews)\r\n snapshotDb._createClassViewsOnClose = true; // save flag that will be checked when close() is called\r\n\r\n return snapshotDb;\r\n }\r\n\r\n /** open this SnapshotDb read/write, strictly to apply incoming changesets. Used for creating new checkpoints.\r\n * @internal\r\n */\r\n public static openForApplyChangesets(path: LocalFileName, props?: SnapshotDbOpenArgs): SnapshotDb {\r\n const file = { path, key: props?.key };\r\n const nativeDb = this.openDgnDb(file, OpenMode.ReadWrite, undefined, props);\r\n assert(undefined !== file.key);\r\n return new SnapshotDb(nativeDb, file.key);\r\n }\r\n\r\n /** Open a read-only iModel *snapshot*.\r\n * @param path the full path of the snapshot iModel file to open.\r\n * @param props options for opening snapshot\r\n * @see [[close]]\r\n * @throws [[IModelError]] If the file is not found or is not a valid *snapshot*.\r\n */\r\n public static openFile(path: LocalFileName, opts?: SnapshotDbOpenArgs): SnapshotDb {\r\n this.onOpen.raiseEvent(path, opts);\r\n const file = { path, key: opts?.key };\r\n const wasKeyUndefined = opts?.key === undefined;\r\n const nativeDb = this.openDgnDb(file, OpenMode.Readonly, undefined, opts);\r\n if (wasKeyUndefined) {\r\n file.key = `${nativeDb.getIModelId()}:${nativeDb.getCurrentChangeset().id}`;\r\n }\r\n assert(undefined !== file.key);\r\n const db = new this(nativeDb, file.key);\r\n this.onOpened.raiseEvent(db);\r\n return db;\r\n }\r\n\r\n private static async attachAndOpenCheckpoint(checkpoint: CheckpointProps): Promise<SnapshotDb> {\r\n const { dbName, container } = await V2CheckpointManager.attach(checkpoint);\r\n const key = CheckpointManager.getKey(checkpoint);\r\n const db = SnapshotDb.openFile(dbName, { key, container });\r\n await db.loadWorkspaceSettings();\r\n return db;\r\n }\r\n\r\n /** @internal */\r\n public static async openCheckpointFromRpc(checkpoint: CheckpointProps): Promise<SnapshotDb> {\r\n const snapshot = await this.attachAndOpenCheckpoint(checkpoint);\r\n snapshot._iTwinId = checkpoint.iTwinId;\r\n try {\r\n CheckpointManager.validateCheckpointGuids(checkpoint, snapshot);\r\n } catch (err: any) {\r\n snapshot.close();\r\n throw err;\r\n }\r\n\r\n // unref timer, so it doesn't prevent a process from shutting down.\r\n snapshot._restartDefaultTxnTimer = setTimeout(() => {\r\n snapshot.restartDefaultTxn();\r\n }, (10 * 60) * 1000).unref(); // 10 minutes\r\n const cloudContainer = snapshot.cloudContainer;\r\n if (cloudContainer !== undefined) {\r\n snapshot._refreshSas = new RefreshV2CheckpointSas(cloudContainer.accessToken, checkpoint.reattachSafetySeconds);\r\n }\r\n return snapshot;\r\n }\r\n\r\n /**\r\n * Open a Checkpoint directly from its cloud container.\r\n * @beta\r\n */\r\n public static async openCheckpoint(args: OpenCheckpointArgs): Promise<SnapshotDb> {\r\n return this.attachAndOpenCheckpoint(await CheckpointManager.toCheckpointProps(args));\r\n }\r\n\r\n /** Used to refresh the container sasToken using the current user's accessToken.\r\n * Also restarts the timer which causes the default txn to be restarted on db if the timer activates.\r\n * @internal\r\n */\r\n public override async refreshContainerForRpc(userAccessToken: AccessToken): Promise<void> {\r\n this._restartDefaultTxnTimer?.refresh();\r\n return this._refreshSas?.refreshSas(userAccessToken, this);\r\n }\r\n\r\n /** @internal */\r\n public override beforeClose(): void {\r\n super.beforeClose();\r\n\r\n if (this._restartDefaultTxnTimer)\r\n clearTimeout(this._restartDefaultTxnTimer);\r\n\r\n if (this._createClassViewsOnClose) { // check for flag set during create\r\n if (BentleyStatus.SUCCESS !== this[_nativeDb].createClassViewsInDb()) {\r\n throw new IModelError(IModelStatus.SQLiteError, \"Error creating class views\");\r\n } else {\r\n this.saveChanges();\r\n }\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Standalone iModels are read/write files that are not associated with an iTwin or managed by iModelHub.\r\n * They are relevant only for testing, or for small-scale single-user scenarios.\r\n * Standalone iModels are designed such that the API for Standalone iModels and Briefcase\r\n * iModels (those synchronized with iModelHub) are as similar and consistent as possible.\r\n * This leads to a straightforward process where the a user starts with StandaloneDb and can\r\n * optionally choose to upgrade to an iTwin.\r\n *\r\n * Some additional details. Standalone iModels:\r\n * - always have [Guid.empty]($bentley) for their iTwinId (they are \"unassociated\" files)\r\n * - always have BriefcaseId === [BriefcaseIdValue.Unassigned]($common)\r\n * - are connected to the frontend via [BriefcaseConnection.openStandalone]($frontend)\r\n * - may be opened without supplying any user credentials\r\n * - may be opened read/write\r\n * - cannot apply a changeset to nor generate a changesets (since there is no timeline from which to get/push changesets)\r\n * @public\r\n */\r\nexport class StandaloneDb extends BriefcaseDb {\r\n public override get isStandalone(): boolean { return true; }\r\n protected override get useLockServer() { return false; } // standalone iModels have no lock server\r\n public static override findByKey(key: string): StandaloneDb {\r\n return super.findByKey(key) as StandaloneDb;\r\n }\r\n\r\n public static override tryFindByKey(key: string): StandaloneDb | undefined {\r\n const db = super.tryFindByKey(key);\r\n return db?.isStandaloneDb() ? db : undefined;\r\n }\r\n\r\n /** Create an *empty* standalone iModel.\r\n * @param filePath The file path for the iModel\r\n * @param args The parameters that define the new iModel\r\n */\r\n public static createEmpty(filePath: LocalFileName, args: CreateEmptyStandaloneIModelProps): StandaloneDb {\r\n const nativeDb = new IModelNative.platform.DgnDb();\r\n nativeDb.createIModel(filePath, args);\r\n nativeDb.saveLocalValue(BriefcaseLocalValue.StandaloneEdit, args.allowEdit);\r\n nativeDb.setITwinId(Guid.empty);\r\n nativeDb.resetBriefcaseId(BriefcaseIdValue.Unassigned);\r\n nativeDb.saveChanges();\r\n const db = new this({ nativeDb, key: Guid.createValue(), briefcaseId: BriefcaseIdValue.Unassigned, openMode: OpenMode.ReadWrite });\r\n if (args.geographicCoordinateSystem)\r\n db.setGeographicCoordinateSystem(args.geographicCoordinateSystem);\r\n if (args.ecefLocation)\r\n db.setEcefLocation(args.ecefLocation);\r\n db.channels.addAllowedChannel(ChannelControl.sharedChannelName);\r\n return db;\r\n }\r\n\r\n /**\r\n * Upgrades the schemas in the standalone iModel file.\r\n * Note that the upgrade requires that the file be closed, and will leave it back in the closed state.\r\n * @param filePath Full path name of the standalone iModel file.\r\n * @see ($docs/learning/backend/IModelDb.md#upgrading-schemas-in-an-imodel)\r\n * @see [[StandaloneDb.validateSchemas]]\r\n */\r\n public static upgradeStandaloneSchemas(filePath: LocalFileName) {\r\n let nativeDb = this.openDgnDb({ path: filePath }, OpenMode.ReadWrite, { profile: ProfileOptions.Upgrade, schemaLockHeld: true });\r\n nativeDb.saveChanges();\r\n nativeDb.closeFile();\r\n nativeDb = this.openDgnDb({ path: filePath }, OpenMode.ReadWrite, { domain: DomainOptions.Upgrade, schemaLockHeld: true });\r\n nativeDb.saveChanges();\r\n nativeDb.closeFile();\r\n }\r\n\r\n /** Creates or updates views in the iModel to permit visualizing the EC content as ECClasses and ECProperties rather than raw database tables and columns.\r\n * This can be helpful when debugging the EC data, especially when the raw tables make use of shared columns or spread data across multiple tables.\r\n * @throws IModelError if view creation failed.\r\n * @note The views are strictly intended for developers and debugging purposes only - they should not be used in application code.\r\n * @beta\r\n */\r\n public createClassViews(): void {\r\n const result = this[_nativeDb].createClassViewsInDb();\r\n if (BentleyStatus.SUCCESS !== result)\r\n throw new IModelError(result, \"Error creating class views\");\r\n else\r\n this.saveChanges();\r\n }\r\n\r\n /** Open a standalone iModel file.\r\n * @param filePath The path of the standalone iModel file.\r\n * @param openMode Optional open mode for the standalone iModel. The default is read/write.\r\n * @throws [[IModelError]] if the file is not a standalone iModel.\r\n * @see [BriefcaseConnection.openStandalone]($frontend) to open a StandaloneDb from the frontend\r\n */\r\n public static openFile(filePath: LocalFileName, openMode: OpenMode = OpenMode.ReadWrite, options?: SnapshotDbOpenArgs): StandaloneDb {\r\n const file = { path: filePath, key: options?.key };\r\n const nativeDb = this.openDgnDb(file, openMode, undefined, options);\r\n\r\n try {\r\n const iTwinId = nativeDb.getITwinId();\r\n if (iTwinId !== Guid.empty) // a \"standalone\" iModel means it is not associated with an iTwin\r\n throw new IModelError(IModelStatus.WrongIModel, `${filePath} is not a Standalone iModel. iTwinId=${iTwinId}`);\r\n assert(undefined !== file.key);\r\n const db = new this({ nativeDb, key: file.key, openMode, briefcaseId: BriefcaseIdValue.Unassigned });\r\n return db;\r\n } catch (error) {\r\n nativeDb.closeFile();\r\n throw error;\r\n }\r\n }\r\n\r\n /** Convert an iModel stored on the local file system into a StandaloneDb, chiefly for testing purposes.\r\n * The file must not be open in any application.\r\n * @param iModelFileName the path to the iModel on the local file system.\r\n * @beta\r\n */\r\n public static convertToStandalone(iModelFileName: LocalFileName): void {\r\n const nativeDb = new IModelNative.platform.DgnDb();\r\n nativeDb.openIModel(iModelFileName, OpenMode.ReadWrite);\r\n nativeDb.setITwinId(Guid.empty); // empty iTwinId means \"standalone\"\r\n nativeDb.saveChanges(); // save change to iTwinId\r\n nativeDb.deleteAllTxns(); // necessary before resetting briefcaseId\r\n nativeDb.resetBriefcaseId(BriefcaseIdValue.Unassigned); // standalone iModels should always have BriefcaseId unassigned\r\n nativeDb.saveLocalValue(\"StandaloneEdit\", JSON.stringify({ txns: true }));\r\n nativeDb.saveChanges(); // save change to briefcaseId\r\n nativeDb.closeFile();\r\n }\r\n}\r\n"]}
|