@itwin/core-backend 5.10.0-dev.8 → 5.11.0-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -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.d.ts +8 -1
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.d.ts +4 -4
- 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.d.ts +6 -6
- package/lib/cjs/ChangesetECAdaptor.js +252 -252
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChangesetReader.d.ts +84 -1
- package/lib/cjs/ChangesetReader.d.ts.map +1 -1
- package/lib/cjs/ChangesetReader.js +108 -12
- package/lib/cjs/ChangesetReader.js.map +1 -1
- package/lib/cjs/ChangesetReaderTypes.js.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.d.ts +3 -3
- package/lib/cjs/ClassRegistry.js +8 -8
- 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.d.ts +3 -3
- 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.d.ts +2 -2
- 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/ECSqlRowExecutor.js.map +1 -1
- package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
- package/lib/cjs/ECSqlStatement.js +4 -0
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/ECSqlSyncReader.d.ts.map +1 -1
- package/lib/cjs/ECSqlSyncReader.js +1 -0
- package/lib/cjs/ECSqlSyncReader.js.map +1 -1
- package/lib/cjs/EditTxn.js.map +1 -1
- package/lib/cjs/Element.d.ts +16 -13
- package/lib/cjs/Element.d.ts.map +1 -1
- package/lib/cjs/Element.js +8 -5
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.d.ts +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.d.ts +5 -5
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.d.ts +13 -5
- package/lib/cjs/Entity.d.ts.map +1 -1
- package/lib/cjs/Entity.js +13 -5
- 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.d.ts +2 -2
- 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.d.ts +112 -40
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +223 -50
- 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.d.ts +6 -6
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.d.ts +6 -0
- package/lib/cjs/LocalHub.d.ts.map +1 -1
- package/lib/cjs/LocalHub.js +24 -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.d.ts +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.d.ts +6 -6
- 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/PartialChangeUnifier.js +7 -7
- package/lib/cjs/PartialChangeUnifier.js.map +1 -1
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/Relationship.d.ts +13 -11
- package/lib/cjs/Relationship.d.ts.map +1 -1
- package/lib/cjs/Relationship.js +9 -7
- 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.d.ts +4 -4
- 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.d.ts +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +7 -0
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.d.ts +6 -6
- 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.d.ts +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js +2 -3
- 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 +36 -32
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +28 -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.d.ts +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.d.ts +2 -2
- 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.d.ts +2 -2
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.d.ts.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js +23 -4
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/HubMock.d.ts +24 -1
- package/lib/cjs/internal/HubMock.d.ts.map +1 -1
- package/lib/cjs/internal/HubMock.js +60 -39
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/IntegrityCheck.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.d.ts +19 -1
- package/lib/cjs/internal/ServerBasedLocks.d.ts.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js +88 -34
- 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.d.ts +1 -1
- package/lib/cjs/internal/cross-package.d.ts.map +1 -1
- package/lib/cjs/internal/cross-package.js +1 -2
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js +55 -9
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js +7 -11
- 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/SettingsDb.js.map +1 -1
- package/lib/cjs/workspace/SettingsEditor.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.d.ts +20 -3
- package/lib/cjs/workspace/SettingsSchemas.d.ts.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +13 -1
- package/lib/cjs/workspace/Workspace.d.ts.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.d.ts +8 -1
- package/lib/esm/BriefcaseManager.d.ts.map +1 -1
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.d.ts +4 -4
- 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.d.ts +6 -6
- package/lib/esm/ChangesetECAdaptor.js +252 -252
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChangesetReader.d.ts +84 -1
- package/lib/esm/ChangesetReader.d.ts.map +1 -1
- package/lib/esm/ChangesetReader.js +108 -12
- package/lib/esm/ChangesetReader.js.map +1 -1
- package/lib/esm/ChangesetReaderTypes.js.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.d.ts +3 -3
- package/lib/esm/ClassRegistry.js +8 -8
- 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.d.ts +3 -3
- 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.d.ts +2 -2
- 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/ECSqlRowExecutor.js.map +1 -1
- package/lib/esm/ECSqlStatement.d.ts.map +1 -1
- package/lib/esm/ECSqlStatement.js +4 -0
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/ECSqlSyncReader.d.ts.map +1 -1
- package/lib/esm/ECSqlSyncReader.js +1 -0
- package/lib/esm/ECSqlSyncReader.js.map +1 -1
- package/lib/esm/EditTxn.js.map +1 -1
- package/lib/esm/Element.d.ts +16 -13
- package/lib/esm/Element.d.ts.map +1 -1
- package/lib/esm/Element.js +8 -5
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.d.ts +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementGraphics.js.map +1 -1
- package/lib/esm/ElementTreeWalker.d.ts +5 -5
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/Entity.d.ts +13 -5
- package/lib/esm/Entity.d.ts.map +1 -1
- package/lib/esm/Entity.js +13 -5
- 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.d.ts +2 -2
- 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.d.ts +112 -40
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +224 -51
- 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.d.ts +6 -6
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.d.ts +6 -0
- package/lib/esm/LocalHub.d.ts.map +1 -1
- package/lib/esm/LocalHub.js +24 -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.d.ts +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.d.ts +6 -6
- 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/PartialChangeUnifier.js +7 -7
- package/lib/esm/PartialChangeUnifier.js.map +1 -1
- package/lib/esm/PromiseMemoizer.js.map +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/Relationship.d.ts +13 -11
- package/lib/esm/Relationship.d.ts.map +1 -1
- package/lib/esm/Relationship.js +9 -7
- 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.d.ts +4 -4
- 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.d.ts +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +7 -0
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.d.ts +6 -6
- 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.d.ts +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js +2 -3
- 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.d.ts +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.d.ts +2 -2
- 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.d.ts +2 -2
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.d.ts.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js +23 -4
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/HubMock.d.ts +24 -1
- package/lib/esm/internal/HubMock.d.ts.map +1 -1
- package/lib/esm/internal/HubMock.js +61 -40
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/IntegrityCheck.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.d.ts +19 -1
- package/lib/esm/internal/ServerBasedLocks.d.ts.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js +88 -34
- 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.d.ts +1 -1
- package/lib/esm/internal/cross-package.d.ts.map +1 -1
- package/lib/esm/internal/cross-package.js +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js +55 -9
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js +7 -11
- 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 +60 -0
- 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/SchemaChangesetCanBeReversed.test.d.ts +2 -0
- package/lib/esm/test/SchemaChangesetCanBeReversed.test.d.ts.map +1 -0
- package/lib/esm/test/SchemaChangesetCanBeReversed.test.js +239 -0
- package/lib/esm/test/SchemaChangesetCanBeReversed.test.js.map +1 -0
- 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/SquashSchemaAndDataChanges.test.js +129 -129
- package/lib/esm/test/SquashSchemaAndDataChanges.test.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestEditTxn.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 +2 -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.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 +89 -88
- package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +19 -19
- 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 +14 -6
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +342 -332
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +1 -0
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/QueryReaders.test.js +44 -31
- package/lib/esm/test/ecdb/QueryReaders.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 +1 -0
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js +6 -2
- 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 +144 -139
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js +1 -0
- 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 +42 -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 +56 -56
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/hubaccess/SemanticRebase.test.js +346 -345
- package/lib/esm/test/hubaccess/SemanticRebase.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 +75 -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 +21 -21
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/TestContext.js.map +1 -1
- 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 +102 -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 +11 -9
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js +19 -19
- package/lib/esm/test/schema/SchemaImportCallbacks.test.js.map +1 -1
- package/lib/esm/test/schema/SchemaViewHidden.test.d.ts +2 -0
- package/lib/esm/test/schema/SchemaViewHidden.test.d.ts.map +1 -0
- package/lib/esm/test/schema/SchemaViewHidden.test.js +275 -0
- package/lib/esm/test/schema/SchemaViewHidden.test.js.map +1 -0
- package/lib/esm/test/schema/SchemaViewKoQ.test.d.ts +2 -0
- package/lib/esm/test/schema/SchemaViewKoQ.test.d.ts.map +1 -0
- package/lib/esm/test/schema/SchemaViewKoQ.test.js +184 -0
- package/lib/esm/test/schema/SchemaViewKoQ.test.js.map +1 -0
- package/lib/esm/test/schema/SchemaViewLifecycle.test.d.ts +2 -0
- package/lib/esm/test/schema/SchemaViewLifecycle.test.d.ts.map +1 -0
- package/lib/esm/test/schema/SchemaViewLifecycle.test.js +141 -0
- package/lib/esm/test/schema/SchemaViewLifecycle.test.js.map +1 -0
- package/lib/esm/test/schema/SchemaViewValidation.test.d.ts +2 -0
- package/lib/esm/test/schema/SchemaViewValidation.test.d.ts.map +1 -0
- package/lib/esm/test/schema/SchemaViewValidation.test.js +475 -0
- package/lib/esm/test/schema/SchemaViewValidation.test.js.map +1 -0
- 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 +1191 -583
- 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/DeleteElements.test.js +45 -0
- package/lib/esm/test/standalone/DeleteElements.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/EditTxn.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 +33 -27
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/ITwinWorkspace.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/IntegrityCheck.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/SQliteChangesetReaderAndChangesetECAdaptor.test.js +135 -135
- package/lib/esm/test/standalone/SQliteChangesetReaderAndChangesetECAdaptor.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 +62 -0
- 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 +2 -0
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js +397 -0
- 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/StandaloneDb.test.js +20 -20
- package/lib/esm/test/standalone/StandaloneDb.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 +23 -0
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/test/standalone/iModelDb.test.js.map +1 -1
- package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsDb.js.map +1 -1
- package/lib/esm/workspace/SettingsEditor.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.d.ts +20 -3
- package/lib/esm/workspace/SettingsSchemas.d.ts.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.d.ts +13 -1
- package/lib/esm/workspace/Workspace.d.ts.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +15 -15
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangesetECAdaptor.js","sourceRoot":"","sources":["../../src/ChangesetECAdaptor.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 ECDb\n */\nimport { DbResult, Guid, GuidString, Id64String } from \"@itwin/core-bentley\";\nimport { AnyDb, SqliteChange, SqliteChangeOp, SqliteChangesetReader, SqliteValueStage } from \"./SqliteChangesetReader\";\nimport { Base64EncodedString } from \"@itwin/core-common\";\nimport { ECDb } from \"./ECDb\";\nimport { _nativeDb } from \"./internal/Symbols\";\n\n/* eslint-disable @typescript-eslint/no-deprecated */ // This file is marked as deprecated and will be removed subsequently, so we can allow usage of deprecated APIs within it.\n\ninterface IClassRef {\n classId: Id64String;\n classFullName: string;\n}\n\ninterface IClassMap {\n readonly id: Id64String;\n readonly name: string;\n readonly mapStrategy: \"NotMapped\" | \"OwnTable\" | \"TablePerHierarchy\" | \"ExistingTable\" | \"ForeignKeyInTargetTable\" | \"ForeignKeyInSourceTable\";\n readonly type: \"Entity\" | \"Relationship\" | \"Struct\" | \"CustomAttribute\";\n readonly modifier: \"None\" | \"Abstract\" | \"Sealed\";\n readonly properties: IProperty[];\n}\n\ninterface IDateTimeInfo {\n readonly dateTimeKind?: \"Utc\" | \"Local\" | \"Unspecified\";\n readonly dateTimeComponent?: \"DateTime\" | \"Date\" | \"TimeOfDay\";\n}\n\ninterface IProperty {\n readonly id: Id64String;\n readonly name: string;\n readonly kind: \"Primitive\" | \"Struct\" | \"PrimitiveArray\" | \"StructArray\" | \"Navigation\";\n readonly primitiveType?: \"Binary\" | \"Boolean\" | \"DateTime\" | \"Double\" | \"Integer\" | \"Long\" | \"Point2d\" | \"Point3d\" | \"String\" | \"IGeometry\";\n readonly extendedTypeName?: string;\n readonly navigationRelationship?: IClassRef;\n readonly structClass?: IClassRef;\n readonly dateTimeInfo?: IDateTimeInfo;\n readonly columns: IColumn[];\n\n}\n\ninterface IColumn {\n readonly table: string;\n readonly column: string;\n readonly type: \"Any\" | \"Boolean\" | \"Blob\" | \"Timestamp\" | \"Real\" | \"Integer\" | \"Text\";\n readonly columnKind: \"Default\" | \"Id\" | \"ClassId\" | \"Shared\";\n readonly accessString: string;\n readonly isVirtual: boolean;\n}\n\ninterface ITable {\n readonly id: Id64String;\n readonly name: string;\n readonly type: \"Primary\" | \"Joined\" | \"Existing\" | \"Overflow\" | \"Virtual\";\n readonly exclusiveRootClassId: Id64String;\n readonly isClassIdVirtual: boolean;\n}\n\nclass ECDbMap {\n private _cachedClassMaps = new Map<Id64String, IClassMap>();\n private _cacheTables = new Map<string, ITable>();\n public constructor(public readonly db: AnyDb) { }\n public getAllDerivedClasses(classFullName: string) {\n const sql = `\n SELECT format('0x%x', ch.ClassId)\n FROM [ec_cache_ClassHierarchy] [ch]\n JOIN [ec_Class] [cs] ON [cs].[Id] = [ch].[BaseClassId]\n JOIN [ec_Schema] [sc] ON [sc].[Id] = [cs].[SchemaId]\n WHERE (([sc].[Alias] = :schemaNameOrAlias\n OR [sc].[Name] = :schemaNameOrAlias)\n AND ([cs].[Name] = :className))\n `;\n return this.db.withPreparedSqliteStatement(sql, (stmt) => {\n const parts = classFullName.indexOf(\".\") !== -1 ? classFullName.split(\".\") : classFullName.split(\":\");\n stmt.bindString(\":schemaNameOrAlias\", parts[0]);\n stmt.bindString(\":className\", parts[1]);\n const classIds = [];\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\n classIds.push(stmt.getValueString(0));\n return classIds;\n });\n }\n public getTable(tableName: string): ITable | undefined {\n if (this._cacheTables.has(tableName))\n return this._cacheTables.get(tableName);\n\n const sql = `\n SELECT\n JSON_OBJECT (\n 'id', FORMAT ('0x%x', [t].[id]),\n 'name', [t].[Name],\n 'type', (\n CASE\n [t].[type]\n WHEN 0 THEN 'Primary'\n WHEN 1 THEN 'Joined'\n WHEN 2 THEN 'Existing'\n WHEN 3 THEN 'Overflow'\n WHEN 4 THEN 'Virtual'\n END\n ),\n 'exclusiveRootClassId', FORMAT ('0x%x',\n COALESCE (\n [t].[ExclusiveRootClassId], (\n SELECT [parent].[ExclusiveRootClassId]\n FROM [ec_Table] [parent]\n WHERE [parent].[Id] = [t].[ParentTableId] AND [parent].[Type] = 1))),\n 'isClassIdVirtual', (\n SELECT\n [c].[IsVirtual]\n FROM\n [ec_Column] [c]\n WHERE\n [c].[Name] = 'ECClassId' AND [c].[TableId] = [t].[Id]\n )\n )\n FROM [ec_Table] [t]\n WHERE\n [t].[Name] = ?;\n `;\n\n return this.db.withPreparedSqliteStatement(sql, (stmt) => {\n stmt.bindString(1, tableName);\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\n const table = JSON.parse(stmt.getValueString(0), (key, value) => {\n if (value === null)\n return undefined;\n\n if (key === \"isClassIdVirtual\")\n return value === 0 ? false : true;\n\n return value;\n }) as ITable;\n\n this._cacheTables.set(tableName, table);\n return table;\n }\n return undefined;\n });\n }\n public getClassMap(classId: Id64String): IClassMap | undefined {\n if (this._cachedClassMaps.has(classId))\n return this._cachedClassMaps.get(classId);\n\n const sql = `\n SELECT\n JSON_OBJECT(\n 'id', format('0x%x', cs.id),\n 'name', format('%s:%s', ss.Name, cs.Name),\n 'mapStrategy',\n (\n CASE cm.MapStrategy\n WHEN 0 THEN 'NotMapped'\n WHEN 1 THEN 'OwnTable'\n WHEN 2 THEN 'TablePerHierarchy'\n WHEN 3 THEN 'ExistingTable'\n WHEN 10 THEN 'ForeignKeyInTargetTable'\n WHEN 11 THEN 'ForeignKeyInSourceTable'\n END\n ),\n 'type',\n (\n CASE cs.Type\n WHEN 0 THEN 'Entity'\n WHEN 1 THEN 'Relationship'\n WHEN 2 THEN 'Struct'\n WHEN 3 THEN 'CustomAttribute'\n END\n ),\n 'modifier',\n (\n CASE cs.Modifier\n WHEN 0 THEN 'None'\n WHEN 1 THEN 'Abstract'\n WHEN 2 THEN 'Sealed'\n END\n ),\n 'properties',\n (\n SELECT\n JSON_GROUP_ARRAY(JSON(propJson))\n FROM\n (\n SELECT\n JSON_OBJECT(\n 'id', format('0x%x', pt.id),\n 'name', pt.Name,\n 'kind',\n (\n CASE pt.Kind\n WHEN 0 THEN 'Primitive'\n WHEN 1 THEN 'Struct'\n WHEN 2 THEN 'PrimitiveArray'\n WHEN 3 THEN 'StructArray'\n WHEN 4 THEN 'Navigation'\n END\n ),\n 'primitiveType',\n (\n CASE pt.PrimitiveType\n WHEN 0x101 THEN 'Binary'\n WHEN 0x201 THEN 'Boolean'\n WHEN 0x301 THEN 'DateTime'\n WHEN 0x401 THEN 'Double'\n WHEN 0x501 THEN 'Integer'\n WHEN 0x601 THEN 'Long'\n WHEN 0x701 THEN 'Point2d'\n WHEN 0x801 THEN 'Point3d'\n WHEN 0x901 THEN 'String'\n WHEN 0xa01 THEN 'IGeometry'\n END\n ),\n 'extendedTypeName', ExtendedTypeName,\n 'navigationRelationship',\n (\n SELECT\n JSON_OBJECT(\n 'classId', format('0x%x', nc.Id),\n 'classFullName', format('%s:%s', ns.Name, nc.Name)\n )\n FROM ec_Class nc\n JOIN ec_Schema ns ON ns.Id = nc.SchemaId\n WHERE\n nc.Id = pt.NavigationRelationshipClassId\n ),\n 'structClass',\n (\n SELECT\n JSON_OBJECT(\n 'classId', format('0x%x', nc.Id),\n 'classFullName', format('%s:%s', ns.Name, nc.Name)\n )\n FROM ec_Class nc\n JOIN ec_Schema ns ON ns.Id = nc.SchemaId\n WHERE\n nc.Id = pt.StructClassId\n ),\n 'dateTimeInfo', (\n SELECT\n JSON_OBJECT (\n 'dateTimeKind', (\n CASE\n WHEN [ca].[Instance] LIKE '%<DateTimeKind>Utc</DateTimeKind>%' COLLATE [NoCase] THEN 'Utc'\n WHEN [ca].[Instance] LIKE '%<DateTimeKind>Local</DateTimeKind>%' COLLATE [NoCase] THEN 'Local'\n ELSE 'Unspecified'\n END\n ),\n 'dateTimeComponent', (\n CASE\n WHEN [ca].[Instance] LIKE '%<DateTimeComponent>DateTime</DateTimeComponent>%' COLLATE [NoCase] THEN 'DateTime'\n WHEN [ca].[Instance] LIKE '%<DateTimeComponent>Date</DateTimeComponent>%' COLLATE [NoCase] THEN 'Date'\n WHEN [ca].[Instance] LIKE '%<DateTimeComponent>TimeOfDay</DateTimeComponent>%' COLLATE [NoCase] THEN 'TimeOfDay'\n ELSE 'DateTime'\n END\n )\n )\n FROM\n [ec_CustomAttribute] [ca]\n JOIN [ec_Class] [cl] ON [cl].[Id] = [ca].[ClassId]\n JOIN [ec_Schema] [sc] ON [sc].[Id] = [cl].[SchemaId]\n WHERE\n [ca].[ContainerType] = 992\n AND [cl].[Name] = 'DateTimeInfo'\n AND [sc].[Name] = 'CoreCustomAttributes'\n AND [ca].[ContainerId] = [pt].[Id]\n ),\n 'columns',\n (\n SELECT\n JSON_GROUP_ARRAY(JSON(columnJson))\n FROM\n (\n SELECT\n JSON_OBJECT(\n 'table', tb.Name,\n 'column', cc.Name,\n 'type',\n (\n CASE cc.Type\n WHEN 0 THEN 'Any'\n WHEN 1 THEN 'Boolean'\n WHEN 2 THEN 'Blob'\n WHEN 3 THEN 'Timestamp'\n WHEN 4 THEN 'Real'\n WHEN 5 THEN 'Integer'\n WHEN 6 THEN 'Text'\n END\n ),\n 'columnKind',\n (\n CASE cc.ColumnKind\n WHEN 0 THEN 'Default'\n WHEN 1 THEN 'Id'\n WHEN 2 THEN 'ClassId'\n WHEN 4 THEN 'SharedData'\n END\n ),\n 'accessString', pp0.AccessString,\n 'isVirtual', cc.IsVirtual OR tb.Type = 4\n ) columnJson\n FROM [ec_PropertyMap] [pm0]\n JOIN [ec_Column] [cc] ON [cc].[Id] = [pm0].[ColumnId]\n JOIN [ec_Table] [tb] ON [tb].[Id] = [cc].[TableId]\n JOIN [ec_PropertyPath] [pp0] ON [pp0].[Id] = [pm0].[PropertyPathId]\n WHERE\n [pp0].[RootPropertyId] = pt.Id AND pm0.ClassId = cs.Id\n )\n )\n ) propJson\n FROM [ec_PropertyMap] [pm]\n JOIN [ec_PropertyPath] [pp] ON [pp].[Id] = [pm].[PropertyPathId]\n JOIN [ec_Property] [pt] ON [pt].[Id] = [pp].[RootPropertyId]\n WHERE\n pm.ClassId = cs.Id\n GROUP BY\n pt.Id\n )\n )\n ) classDef\n FROM [ec_Class] [cs]\n JOIN [ec_ClassMap] [cm] ON [cm].[ClassId] = [cs].[Id]\n JOIN [ec_Schema] [ss] ON [ss].[Id] = [cs].[SchemaId]\n WHERE\n [cs].[Id] = ?\n `;\n\n return this.db.withPreparedSqliteStatement(sql, (stmt) => {\n stmt.bindId(1, classId);\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\n const classMap = JSON.parse(stmt.getValueString(0), (key, value) => {\n if (value === null) {\n return undefined;\n }\n if (key === \"isVirtual\") {\n return value === 0 ? false : true;\n }\n return value;\n }) as IClassMap;\n\n this._cachedClassMaps.set(classId, classMap);\n return classMap;\n }\n return undefined;\n });\n }\n}\n\n/**\n * Record meta data for the change.\n * @beta\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use [ChangeMeta]($backend) with [ChangesetReader]($backend) instead.\n * */\nexport interface ChangeMetaData {\n /** list of tables making up this EC change */\n tables: string[];\n /** full name of the class of this EC change */\n classFullName?: string;\n /** sqlite operation that caused the change */\n op: SqliteChangeOp;\n /** version of the value read from sqlite change */\n stage: SqliteValueStage;\n /** if classId for the change was not found in db then fallback class for the table */\n fallbackClassId?: Id64String;\n /** list of change index making up this change (one per table) */\n changeIndexes: number[];\n}\n\n/**\n * Represent EC change derived from low level sqlite change\n * @beta\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use [ChangeInstance]($backend) with [ChangesetReader]($backend) instead.\n */\nexport interface ChangedECInstance {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ECInstanceId: Id64String;\n // eslint-disable-next-line @typescript-eslint/naming-convention\n ECClassId?: Id64String;\n $meta?: ChangeMetaData;\n [key: string]: any;\n}\n\n/**\n * Helper function to convert between JS DateTime & SQLite JulianDay values.\n * @beta\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. The DateTime namespace is deprecated and will be removed in a future release.\n * */\nnamespace DateTime {\n /**\n * Convert JS date to JulianDay value.\n * @param dt JS Date object.\n * @param convertToUtc convert the input value to UTC.\n * @returns julian day value\n */\n export function toJulianDay(dt: Date, convertToUtc = true): number {\n const utcOffset = convertToUtc ? dt.getTimezoneOffset() / 1440 : 0;\n return (dt.valueOf() / 86400000) - utcOffset + 2440587.5;\n }\n /**\n * Convert Julian day to JS Date object\n * @param jd JulianDay value for date/time\n * @param isLocalTime if julian day is local time or UTC\n * @returns JS Date object.\n */\n export function fromJulianDay(jd: number, isLocalTime: boolean): Date {\n const utcOffset = isLocalTime ? 0 : new Date().getTimezoneOffset() / 1440;\n return new Date((jd - 2440587.5 + utcOffset) * 86400000);\n }\n}\n\n/**\n * Represents a cache for unifying EC changes.\n * @beta\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use [ChangeCache]($backend) with [ChangesetReader]($backend) instead.\n */\nexport interface ECChangeUnifierCache extends Disposable {\n /**\n * Retrieves the value associated with the specified key from the cache.\n * @param key - The key to retrieve the value for.\n * @returns The value associated with the key, or undefined if the key is not found.\n */\n get(key: string): ChangedECInstance | undefined;\n\n /**\n * Sets the value associated with the specified key in the cache.\n * @param key - The key to set the value for.\n * @param value - The value to be associated with the key.\n */\n set(key: string, value: ChangedECInstance): void;\n\n /**\n * Returns an iterator for all the values in the cache.\n * @returns An iterator for all the values in the cache.\n */\n all(): IterableIterator<ChangedECInstance>;\n\n /**\n * Returns the number of entries in the cache.\n * @returns The number of entries in the cache.\n */\n count(): number;\n}\n/**\n * @beta\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use [ChangeUnifierCache.createInMemoryCache]($backend) / [ChangeUnifierCache.createSqliteBackedCache]($backend) instead.\n*/\nexport namespace ECChangeUnifierCache {\n /**\n * Creates and returns a new in-memory cache for EC change unification.\n * @note This cache is fast but recommended for small to medium size changesets. As it store changes in memory using a hash map, it may run out of memory for larger changesets.\n * @returns {ECChangeUnifierCache} An instance of cache that store changes in memory using a hash map.\n */\n export function createInMemoryCache(): ECChangeUnifierCache {\n return new InMemoryInstanceCache();\n }\n\n /**\n * Creates an ECChangeUnifierCache that is backed by a database.\n * @note This cache is suitable for larger changesets and uses SQLite to store changes. It is slower than the in-memory cache but can handle larger datasets without running out of memory.\n * @param db - The database instance to use for caching.\n * @param bufferedReadInstanceSizeInBytes - The size in bytes for buffered read instances. Defaults to 10 MB.\n * @returns An instance of ECChangeUnifierCache backed by SQLite temp db.\n */\n export function createSqliteBackedCache(db: AnyDb, bufferedReadInstanceSizeInBytes = 1024 * 1024 * 10): ECChangeUnifierCache {\n return new SqliteBackedInstanceCache(db, bufferedReadInstanceSizeInBytes);\n }\n}\n\n/**\n * In-memory cache for storing changed EC instances.\n */\nclass InMemoryInstanceCache implements ECChangeUnifierCache {\n private readonly _cache = new Map<string, ChangedECInstance>();\n\n /**\n * Retrieves the changed EC instance associated with the specified key.\n * @param key - The key used to retrieve the instance.\n * @returns The changed EC instance, or undefined if not found.\n */\n public get(key: string): ChangedECInstance | undefined {\n return this._cache.get(key);\n }\n\n /**\n * Sets the changed EC instance associated with the specified key.\n * @param key - The key used to store the instance.\n * @param value - The changed EC instance to be stored.\n */\n public set(key: string, value: ChangedECInstance): void {\n const meta = value.$meta as any;\n // Remove undefined keys\n if (meta) {\n Object.keys(meta).forEach((k) => meta[k] === undefined && delete meta[k]);\n }\n this._cache.set(key, value);\n }\n\n /**\n * Returns an iterator over all the changed EC instances in the cache.\n * @returns An iterator over all the changed EC instances.\n */\n public *all(): IterableIterator<ChangedECInstance> {\n for (const key of Array.from(this._cache.keys()).sort()) {\n const instance = this._cache.get(key);\n if (instance) {\n yield instance;\n }\n }\n }\n\n /**\n * Returns the number of changed EC instances in the cache.\n * @returns The number of changed EC instances.\n */\n public count(): number {\n return this._cache.size;\n }\n\n /**\n * Disposes the cache.\n */\n public [Symbol.dispose](): void {\n // Implementation details\n }\n}\n\n/**\n * Represents a cache for unifying EC changes in a SQLite-backed instance cache.\n */\nclass SqliteBackedInstanceCache implements ECChangeUnifierCache {\n private readonly _cacheTable = `[temp].[${Guid.createValue()}]`;\n public static readonly defaultBufferSize = 1024 * 1024 * 10; // 10MB\n /**\n * Creates an instance of SqliteBackedInstanceCache.\n * @param _db The underlying database connection.\n * @param bufferedReadInstanceSizeInBytes The size of read instance buffer defaults to 10Mb.\n * @throws Error if bufferedReadInstanceSizeInBytes is less than or equal to 0.\n */\n public constructor(private readonly _db: AnyDb, public readonly bufferedReadInstanceSizeInBytes: number = SqliteBackedInstanceCache.defaultBufferSize) {\n if (bufferedReadInstanceSizeInBytes <= 0)\n throw new Error(\"bufferedReadInstanceCount must be greater than 0\");\n this.createTempTable();\n }\n\n /**\n * Creates a temporary table in the database for caching instances.\n * @throws Error if unable to create the temporary table.\n */\n private createTempTable(): void {\n this._db.withSqliteStatement(`CREATE TABLE ${this._cacheTable} ([key] text primary key, [value] text)`, (stmt) => {\n if (DbResult.BE_SQLITE_DONE !== stmt.step())\n throw new Error(\"unable to create temp table\");\n });\n }\n\n /**\n * Drops the temporary table from the database.\n * @throws Error if unable to drop the temporary table.\n */\n private dropTempTable(): void {\n if (this._db instanceof ECDb) {\n this._db.saveChanges();\n this._db.clearStatementCache();\n } else {\n this._db[_nativeDb].saveChanges();\n this._db.clearCaches();\n }\n this._db.withSqliteStatement(`DROP TABLE IF EXISTS ${this._cacheTable}`, (stmt) => {\n if (DbResult.BE_SQLITE_DONE !== stmt.step())\n throw new Error(\"unable to drop temp table\");\n });\n }\n\n /**\n * Retrieves the changed EC instance from the cache based on the specified key.\n * @param key The key of the instance.\n * @returns The changed EC instance if found, otherwise undefined.\n */\n public get(key: string): ChangedECInstance | undefined {\n return this._db.withPreparedSqliteStatement(`SELECT [value] FROM ${this._cacheTable} WHERE [key]=?`, (stmt) => {\n stmt.bindString(1, key);\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\n const out = JSON.parse(stmt.getValueString(0), Base64EncodedString.reviver) as ChangedECInstance;\n return out;\n }\n return undefined;\n });\n }\n\n /**\n * Sets the changed EC instance in the cache with the specified key.\n * @param key The key of the instance.\n * @param value The changed EC instance to be set.\n */\n public set(key: string, value: ChangedECInstance): void {\n const shallowCopy = Object.assign({}, value);\n this._db.withPreparedSqliteStatement(`INSERT INTO ${this._cacheTable} ([key], [value]) VALUES (?, ?) ON CONFLICT ([key]) DO UPDATE SET [value] = [excluded].[value]`, (stmt) => {\n stmt.bindString(1, key);\n stmt.bindString(2, JSON.stringify(shallowCopy, Base64EncodedString.replacer));\n stmt.step();\n });\n }\n\n /**\n * Returns an iterator for all the changed EC instances in the cache.\n * @returns An iterator for all the changed EC instances.\n */\n public *all(): IterableIterator<ChangedECInstance> {\n const sql = `\n SELECT JSON_GROUP_ARRAY (JSON([value]))\n FROM (SELECT\n [value],\n SUM (LENGTH ([value])) OVER (ORDER BY [key] ROWS UNBOUNDED PRECEDING) / ${this.bufferedReadInstanceSizeInBytes} AS [bucket]\n FROM ${this._cacheTable})\n GROUP BY [bucket]`;\n\n const stmt = this._db.prepareSqliteStatement(sql);\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\n const instanceBucket = JSON.parse(stmt.getValueString(0), Base64EncodedString.reviver) as ChangedECInstance[];\n for (const value of instanceBucket) {\n yield value;\n }\n }\n stmt[Symbol.dispose]();\n }\n\n /**\n * Returns the number of instances in the cache.\n * @returns The number of instances in the cache.\n */\n public count(): number {\n return this._db.withPreparedSqliteStatement(`SELECT COUNT(*) FROM ${this._cacheTable}`, (stmt) => {\n if (stmt.step() === DbResult.BE_SQLITE_ROW)\n return stmt.getValue(0).getInteger();\n return 0;\n });\n }\n\n /**\n * Disposes the cache by dropping the temporary table.\n */\n public [Symbol.dispose](): void {\n if (this._db.isOpen) {\n this.dropTempTable();\n }\n }\n}\n\n\n/**\n * Combine partial changed instance into single instance.\n * Partial changes is per table and a single instance can\n * span multiple tables.\n * @beta\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use [PartialChangeUnifier]($backend) with [ChangesetReader]($backend) instead.\n */\nexport class PartialECChangeUnifier implements Disposable {\n private _readonly = false;\n public constructor(private _db: AnyDb, private _cache: ECChangeUnifierCache = new InMemoryInstanceCache()) { }\n\n /**\n * Dispose the instance.\n */\n public [Symbol.dispose](): void {\n this._cache[Symbol.dispose]();\n }\n\n /**\n * Get root class id for a given class\n * @param classId given class id\n * @param db use to find root class\n * @returns return root class id\n */\n private getRootClassId(classId: Id64String): Id64String | undefined {\n const sql = `\n WITH\n [base_class]([classId], [baseClassId], [Level]) AS(\n SELECT [ch].[ClassId], [ch].[BaseClassId], 0\n FROM [ec_ClassHasBaseClasses] [ch] WHERE [ch].[ClassId] = ?\n UNION ALL\n SELECT [ch].[ClassId], [ch].[BaseClassId], [Level] + 1\n FROM [ec_ClassHasBaseClasses] [ch], [base_class] [bc] WHERE [bc].[BaseClassId] = [ch].[ClassId]\n\n )\n SELECT FORMAT('0x%x', [bc].[BaseClassId]) rootClass\n FROM [base_class] [bc]\n WHERE [bc].[ClassId] <> [bc].[BaseClassId]\n AND [bc].[BaseClassId] NOT IN (SELECT [ca].[ContainerId]\n FROM [ec_CustomAttribute] [ca]\n WHERE [ca].[ContainerType] = 30\n AND [ca].[ClassId] IN (SELECT [cc].[Id]\n FROM [ec_Class] [cc]\n JOIN [ec_Schema] [ss] ON [ss].[Id] = [cc].[SchemaId]\n WHERE [cc].[Name] = 'IsMixIn'\n AND [ss].[Name] = 'CoreCustomAttributes'))\n ORDER BY [Level] DESC`;\n\n return this._db.withSqliteStatement(sql, (stmt) => {\n stmt.bindId(1, classId);\n if (stmt.step() === DbResult.BE_SQLITE_ROW && !stmt.isValueNull(0)) {\n return stmt.getValueString(0);\n }\n return classId;\n });\n }\n\n /**\n * Checks if the given `rhsClassId` is an instance of the `lhsClassId`.\n * @param rhsClassId The ID of the right-hand side class.\n * @param lhsClassId The ID of the left-hand side class.\n * @returns `true` if `rhsClassId` is an instance of `lhsClassId`, `false` otherwise.\n */\n private instanceOf(rhsClassId: Id64String, lhsClassId: Id64String): boolean {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n return this._db.withPreparedStatement(\"SELECT ec_instanceof(?,?)\", (stmt) => {\n stmt.bindId(1, rhsClassId);\n stmt.bindId(2, lhsClassId);\n stmt.step();\n return stmt.getValue(0).getInteger() === 1;\n });\n }\n\n /**\n * Combine partial instance with instance with same key if already exists.\n * @param rhs partial instance\n */\n private combine(rhs: ChangedECInstance): void {\n if (!rhs.$meta) {\n throw new Error(\"PartialECChange being combine must have '$meta' property\");\n }\n const key = this.buildKey(rhs);\n const lhs = this._cache.get(key);\n if (lhs) {\n const { $meta: _, ...restOfRhs } = rhs;\n Object.assign(lhs, restOfRhs);\n if (lhs.$meta && rhs.$meta) {\n lhs.$meta.tables = [...rhs.$meta?.tables, ...lhs.$meta?.tables];\n lhs.$meta.changeIndexes = [...rhs.$meta?.changeIndexes, ...lhs.$meta?.changeIndexes];\n\n // we preserve child class name & id when merging instance.\n if (rhs.$meta.fallbackClassId && lhs.$meta.fallbackClassId && rhs.$meta.fallbackClassId !== lhs.$meta.fallbackClassId) {\n const lhsClassId = lhs.$meta.fallbackClassId;\n const rhsClassId = rhs.$meta.fallbackClassId;\n const isRhsIsSubClassOfLhs = this.instanceOf(rhsClassId, lhsClassId);\n if (isRhsIsSubClassOfLhs) {\n lhs.$meta.fallbackClassId = rhs.$meta.fallbackClassId;\n lhs.$meta.classFullName = rhs.$meta.classFullName;\n }\n }\n }\n this._cache.set(key, lhs);\n } else {\n this._cache.set(key, rhs);\n }\n }\n\n /**\n * Returns the number of instances in the cache.\n * @returns The number of instances in the cache.\n */\n public getInstanceCount(): number {\n return this._cache.count();\n }\n\n /**\n * Build key from EC change.\n * @param change EC change\n * @returns key created from EC change.\n */\n private buildKey(change: ChangedECInstance): string {\n let classId = change.ECClassId;\n if (typeof classId === \"undefined\") {\n if (change.$meta?.fallbackClassId) {\n classId = this.getRootClassId(change.$meta.fallbackClassId);\n }\n if (typeof classId === \"undefined\") {\n throw new Error(`unable to resolve ECClassId to root class id.`);\n }\n }\n return `${change.ECInstanceId}-${classId}-${change.$meta?.stage}`.toLowerCase();\n }\n\n /**\n * Append partial changes which will be combine using there instance key.\n * @note $meta property must be present on partial change as information\n * in it is used to combine partial instances.\n * @param adaptor changeset adaptor is use to read the partial EC change.\n * @beta\n */\n public appendFrom(adaptor: ChangesetECAdaptor): void {\n if (adaptor.disableMetaData) {\n throw new Error(\"change adaptor property 'disableMetaData' must be set to 'false'\");\n }\n\n if (this._readonly) {\n throw new Error(\"this instance is marked as readonly.\");\n }\n\n if (adaptor.op === \"Updated\" && adaptor.inserted && adaptor.deleted) {\n this.combine(adaptor.inserted);\n this.combine(adaptor.deleted);\n } else if (adaptor.op === \"Inserted\" && adaptor.inserted) {\n this.combine(adaptor.inserted);\n } else if (adaptor.op === \"Deleted\" && adaptor.deleted) {\n this.combine(adaptor.deleted);\n }\n }\n\n /**\n * Returns complete EC change instances.\n * @beta\n */\n public get instances(): IterableIterator<ChangedECInstance> {\n return this._cache.all();\n }\n}\n\n/**\n * Transform sqlite change to ec change. EC change is partial change as\n * it is per table while a single instance can span multiple table.\n * @note PrimitiveArray and StructArray are not supported types.\n * @beta\n * @deprecated in 5.1.9 - will not be removed until after 2027-05-04. Use [ChangesetReader]($backend) instead.\n *\n*/\nexport class ChangesetECAdaptor implements Disposable {\n private readonly _mapCache: ECDbMap;\n private readonly _tableFilter = new Set<string>();\n private readonly _opFilter = new Set<SqliteChangeOp>();\n private readonly _classFilter = new Set<string>();\n private _allowedClasses = new Set<string>();\n /**\n * set debug flags\n */\n public readonly debugFlags = {\n replaceBlobWithEllipsis: false, // replace bolb with ... for debugging\n replaceGeomWithEllipsis: false, // replace geom with ... for debugging\n replaceGuidWithEllipsis: false, // replace geom with ... for debugging\n };\n /**\n * Return partial inserted instance\n * For updates inserted represent new version of instance after update.\n */\n public inserted?: ChangedECInstance;\n /**\n * Return partial deleted instance.\n * For updates deleted represent old version of instance before update.\n */\n public deleted?: ChangedECInstance;\n\n /**\n * Setup filter that will result in change enumeration restricted to\n * list of tables added by acceptTable().\n * @param table Name of the table\n * @returns Fluent reference to ChangesetAdaptor.\n */\n public acceptTable(table: string): ChangesetECAdaptor {\n if (!this._tableFilter.has(table))\n this._tableFilter.add(table);\n return this;\n }\n\n /**\n * Setup filter that will result in change enumeration restricted to\n * list of op added by acceptOp().\n * @param op\n * @returns Fluent reference to ChangesetAdaptor.\n */\n public acceptOp(op: SqliteChangeOp): ChangesetECAdaptor {\n if (!this._opFilter.has(op))\n this._opFilter.add(op);\n return this;\n }\n\n /**\n * Setup filter that will result in change enumeration restricted to\n * list of class and its derived classes added by acceptClass().\n * @param classFullName\n * @returns\n */\n public acceptClass(classFullName: string): ChangesetECAdaptor {\n if (!this._classFilter.has(classFullName))\n this._classFilter.add(classFullName);\n\n this._allowedClasses.clear();\n return this;\n }\n\n private buildClassFilter() {\n if (this._allowedClasses.size !== 0 || this._classFilter.size === 0)\n return;\n\n this._classFilter.forEach((className) => {\n this._mapCache.getAllDerivedClasses(className).forEach((classId) => {\n this._allowedClasses.add(classId);\n });\n });\n }\n\n /**\n * Construct adaptor with a initialized reader.\n * @note the changeset reader must have disableSchemaCheck\n * set to false and db must also be set.\n * @param reader wrap changeset reader.\n */\n public constructor(public readonly reader: SqliteChangesetReader, public readonly disableMetaData = false) {\n if (!reader.disableSchemaCheck)\n throw new Error(\"SqliteChangesetReader, 'disableSchemaCheck' param must be set to false.\");\n\n this._mapCache = new ECDbMap(reader.db);\n }\n\n /**\n * dispose current instance and it will also dispose the changeset reader.\n */\n public [Symbol.dispose](): void {\n this.close();\n }\n\n /**\n * close current instance and it will also close the changeset reader.\n */\n public close(): void {\n this.reader.close();\n }\n\n /**\n * Convert binary GUID into string GUID.\n * @param binaryGUID binary version of guid.\n * @returns GUID string.\n */\n private static convertBinaryToGuid(binaryGUID: Uint8Array): GuidString {\n // Check if the array has 16 elements\n if (binaryGUID.length !== 16) {\n throw new Error(\"Invalid array length for Guid\");\n }\n // Convert each element to a two-digit hexadecimal string\n const hex = Array.from(binaryGUID, (byte) => byte.toString(16).padStart(2, \"0\"));\n // Join the hexadecimal strings and insert hyphens\n return `${hex.slice(0, 4).join(\"\")}-${hex.slice(4, 6).join(\"\")}-${hex.slice(6, 8).join(\"\")}-${hex.slice(8, 10).join(\"\")}-${hex.slice(10, 16).join(\"\")}`;\n\n }\n\n /**\n * Set value use access string in a JS object.\n * @param targetObj object that will be updated.\n * @param accessString access string token separated by '.'.\n */\n private static setValue(targetObj: any, accessString: string, value: any): void {\n let cursor = targetObj;\n const propPath = accessString.split(\".\");\n propPath.forEach((propertyName) => {\n if (propertyName === \"__proto__\")\n throw new Error(\"access string cannot container __proto__\");\n });\n\n const leafProp = propPath.splice(-1).shift();\n if (!leafProp)\n throw new Error(\"not access string was specified.\");\n\n for (const elem of propPath) {\n if (typeof cursor[elem] === \"undefined\")\n cursor[elem] = {};\n cursor = cursor[elem];\n }\n cursor[leafProp] = value;\n }\n\n /**\n * Check if sqlite change table is a EC data table\n * @param tableName name of the table.\n * @returns true if table has EC data.\n */\n public isECTable(tableName: string) {\n return typeof this._mapCache.getTable(tableName) !== \"undefined\";\n }\n\n /**\n * Attempt find ECClassId from ECInstanceId for a change of type 'updated'.\n * @param tableName name of the table to find ECClassId from given ECInstanceId\n * @param instanceId instance id for which we need ECClassId for.\n * @returns if successful returns ECClassId else return undefined.\n */\n private getClassIdFromDb(tableName: string, instanceId: Id64String): Id64String | undefined {\n try {\n return this.reader.db?.withPreparedSqliteStatement(`SELECT [ECClassId] FROM [${tableName}] WHERE [rowId]=?`, (stmt) => {\n stmt.bindId(1, instanceId);\n return stmt.step() === DbResult.BE_SQLITE_ROW ? stmt.getValueId(0) : undefined;\n });\n } catch {\n return undefined;\n }\n }\n\n /** helper method around reader.op */\n public get op() { return this.reader.op; }\n /** Return true if current change is of type \"Inserted\" */\n public get isInserted() { return this.op === \"Inserted\"; }\n /** Return true if current change is of type \"Deleted\" */\n public get isDeleted() { return this.op === \"Deleted\"; }\n /** Return true if current change is of type \"Updated\" */\n public get isUpdated() { return this.op === \"Updated\"; }\n\n /**\n * Advance reader to next change or a change that meets the filter set in the current adaptor\n * @returns return false if no more changes to read.\n */\n public step(): boolean {\n this.inserted = undefined;\n this.deleted = undefined;\n this.buildClassFilter();\n while (this.reader.step()) {\n if (!this.isECTable(this.reader.tableName))\n continue;\n\n if (this._tableFilter.size > 0) {\n if (!this._tableFilter.has(this.reader.tableName))\n continue;\n }\n\n if (this._opFilter.size > 0) {\n if (!this._opFilter.has(this.reader.op))\n continue;\n }\n\n if (this.reader.hasRow) {\n const table = this._mapCache.getTable(this.reader.tableName);\n if (!table || table.type === \"Virtual\") {\n throw new Error(`table in changeset not found or is virtual ${this.reader.tableName}`);\n }\n\n const change = {\n inserted: this.reader.getChangeValuesObject(\"New\", { includePrimaryKeyInUpdateNew: true }),\n deleted: this.reader.getChangeValuesObject(\"Old\", { includePrimaryKeyInUpdateNew: true }),\n };\n\n if (!change.inserted && !change.deleted) {\n throw new Error(`unable to get change from changeset reader`);\n }\n\n let ecClassId: Id64String | undefined = this.reader.op === \"Inserted\" ? change.inserted?.ECClassId : change.deleted?.ECClassId;\n const classIdPresentInChange = typeof ecClassId !== \"undefined\";\n let classMap: IClassMap | undefined;\n let fallbackClassId: Id64String | undefined;\n if (table.isClassIdVirtual) {\n classMap = this._mapCache.getClassMap(table.exclusiveRootClassId);\n } else {\n if (!ecClassId) {\n // attempt to find ECClassId against row from the db.\n const primaryKeys = this.reader.primaryKeyValues;\n if (primaryKeys.length === 1) {\n ecClassId = this.getClassIdFromDb(this.reader.tableName, this.reader.primaryKeyValues[0] as Id64String);\n }\n }\n if (ecClassId)\n classMap = this._mapCache.getClassMap(ecClassId);\n if (!classMap) {\n // fallback to root map for table.\n classMap = this._mapCache.getClassMap(table.exclusiveRootClassId);\n if (classMap)\n fallbackClassId = table.exclusiveRootClassId;\n }\n }\n\n if (!classMap)\n throw new Error(`unable to load class map`);\n\n if (!classIdPresentInChange && !ecClassId && !fallbackClassId)\n ecClassId = classMap.id;\n\n if (this._allowedClasses.size !== 0) {\n if (!this._allowedClasses.has(classMap.id))\n continue;\n }\n\n const $meta = {\n tables: [this.reader.tableName],\n op: this.reader.op,\n classFullName: classMap.name,\n fallbackClassId,\n changeIndexes: [this.reader.changeIndex],\n };\n\n if (this.reader.op === \"Inserted\" && change.inserted) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n this.inserted = { ECClassId: ecClassId, ECInstanceId: \"\" };\n if (!this.disableMetaData)\n this.inserted.$meta = { ...$meta, stage: \"New\" };\n this.transform(classMap, change.inserted, table, this.inserted);\n } else if (this.reader.op === \"Deleted\" && change.deleted) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n this.deleted = { ECClassId: ecClassId, ECInstanceId: \"\" };\n if (!this.disableMetaData)\n this.deleted.$meta = { ...$meta, stage: \"Old\" };\n this.transform(classMap, change.deleted, table, this.deleted);\n } else if (change.inserted && change.deleted) {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n this.inserted = { ECClassId: ecClassId, ECInstanceId: \"\" };\n if (!this.disableMetaData)\n this.inserted.$meta = { ...$meta, stage: \"New\" };\n this.transform(classMap, change.inserted, table, this.inserted);\n // eslint-disable-next-line @typescript-eslint/naming-convention\n this.deleted = { ECClassId: ecClassId, ECInstanceId: \"\" };\n if (!this.disableMetaData)\n this.deleted.$meta = { ...$meta, stage: \"Old\" };\n this.transform(classMap, change.deleted, table, this.deleted);\n } else {\n throw new Error(\"unable to read EC changes\");\n }\n break;\n }\n }\n return this.reader.hasRow;\n }\n\n /**\n * Transform nav change column into navigation EC property\n * @param prop navigation property definition.\n * @param change sqlite change.\n * @param out ec instance that will be updated with navigation property.\n */\n private transformNavigationProperty(prop: IProperty, change: SqliteChange, out: ChangedECInstance): void {\n const idCol = prop.columns.filter(($) => $.accessString.endsWith(\".Id\")).at(0);\n if (!idCol) {\n throw new Error(\"invalid map for nav property\");\n }\n\n const idValue = change[idCol.column];\n if (typeof idValue === \"undefined\")\n return;\n\n ChangesetECAdaptor.setValue(out, idCol.accessString, idValue);\n\n const relClassIdCol = prop.columns.filter(($) => $.accessString.endsWith(\".RelECClassId\")).at(0);\n if (!relClassIdCol) {\n throw new Error(\"invalid map for nav property\");\n }\n\n const relClassIdValue = relClassIdCol.isVirtual ? prop.navigationRelationship?.classId : change[relClassIdCol.column];\n if (typeof relClassIdValue === \"undefined\")\n return;\n\n ChangesetECAdaptor.setValue(out, relClassIdCol.accessString, relClassIdValue);\n }\n\n /**\n * Transform sqlite change into EC change.\n * @param classMap classMap use to deserialize sqlite change into EC change.\n * @param change sqlite change from changeset.\n * @param table table definition of sqlite change provided.\n * @param out EC changeset that will be updated with properties.\n */\n private transform(classMap: IClassMap, change: SqliteChange, table: ITable, out: ChangedECInstance): void {\n // transform change row to instance\n for (const prop of classMap.properties) {\n if (prop.kind === \"PrimitiveArray\" || prop.kind === \"StructArray\") {\n // Arrays not supported\n continue;\n }\n if (prop.columns.filter((_) => _.isVirtual).length === prop.columns.length) {\n continue;\n }\n if (prop.kind === \"Navigation\") {\n this.transformNavigationProperty(prop, change, out);\n } else {\n for (const col of prop.columns) {\n if (col.table !== table.name)\n continue;\n\n const columnValue = change[col.column];\n if (typeof columnValue === \"undefined\")\n continue;\n\n if (columnValue !== null) {\n if (prop.primitiveType === \"DateTime\") {\n const dt = DateTime.fromJulianDay(columnValue, prop.dateTimeInfo?.dateTimeKind === \"Local\");\n ChangesetECAdaptor.setValue(out, col.accessString, dt.toISOString());\n continue;\n }\n if (prop.extendedTypeName === \"BeGuid\") {\n ChangesetECAdaptor.setValue(out, col.accessString, this.debugFlags.replaceGuidWithEllipsis ? \"...\" : ChangesetECAdaptor.convertBinaryToGuid(columnValue));\n continue;\n }\n if (prop.extendedTypeName === \"GeometryStream\") {\n ChangesetECAdaptor.setValue(out, col.accessString, this.debugFlags.replaceGeomWithEllipsis ? \"...\" : columnValue);\n continue;\n }\n if (prop.primitiveType === \"Binary\") {\n ChangesetECAdaptor.setValue(out, col.accessString, this.debugFlags.replaceBlobWithEllipsis ? \"...\" : columnValue);\n continue;\n }\n }\n ChangesetECAdaptor.setValue(out, col.accessString, columnValue);\n }\n }\n }\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"ChangesetECAdaptor.js","sourceRoot":"","sources":["../../src/ChangesetECAdaptor.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 ECDb\r\n */\r\nimport { DbResult, Guid, GuidString, Id64String } from \"@itwin/core-bentley\";\r\nimport { AnyDb, SqliteChange, SqliteChangeOp, SqliteChangesetReader, SqliteValueStage } from \"./SqliteChangesetReader\";\r\nimport { Base64EncodedString } from \"@itwin/core-common\";\r\nimport { ECDb } from \"./ECDb\";\r\nimport { _nativeDb } from \"./internal/Symbols\";\r\n\r\n/* eslint-disable @typescript-eslint/no-deprecated */ // This file is marked as deprecated and will be removed subsequently, so we can allow usage of deprecated APIs within it.\r\n\r\ninterface IClassRef {\r\n classId: Id64String;\r\n classFullName: string;\r\n}\r\n\r\ninterface IClassMap {\r\n readonly id: Id64String;\r\n readonly name: string;\r\n readonly mapStrategy: \"NotMapped\" | \"OwnTable\" | \"TablePerHierarchy\" | \"ExistingTable\" | \"ForeignKeyInTargetTable\" | \"ForeignKeyInSourceTable\";\r\n readonly type: \"Entity\" | \"Relationship\" | \"Struct\" | \"CustomAttribute\";\r\n readonly modifier: \"None\" | \"Abstract\" | \"Sealed\";\r\n readonly properties: IProperty[];\r\n}\r\n\r\ninterface IDateTimeInfo {\r\n readonly dateTimeKind?: \"Utc\" | \"Local\" | \"Unspecified\";\r\n readonly dateTimeComponent?: \"DateTime\" | \"Date\" | \"TimeOfDay\";\r\n}\r\n\r\ninterface IProperty {\r\n readonly id: Id64String;\r\n readonly name: string;\r\n readonly kind: \"Primitive\" | \"Struct\" | \"PrimitiveArray\" | \"StructArray\" | \"Navigation\";\r\n readonly primitiveType?: \"Binary\" | \"Boolean\" | \"DateTime\" | \"Double\" | \"Integer\" | \"Long\" | \"Point2d\" | \"Point3d\" | \"String\" | \"IGeometry\";\r\n readonly extendedTypeName?: string;\r\n readonly navigationRelationship?: IClassRef;\r\n readonly structClass?: IClassRef;\r\n readonly dateTimeInfo?: IDateTimeInfo;\r\n readonly columns: IColumn[];\r\n\r\n}\r\n\r\ninterface IColumn {\r\n readonly table: string;\r\n readonly column: string;\r\n readonly type: \"Any\" | \"Boolean\" | \"Blob\" | \"Timestamp\" | \"Real\" | \"Integer\" | \"Text\";\r\n readonly columnKind: \"Default\" | \"Id\" | \"ClassId\" | \"Shared\";\r\n readonly accessString: string;\r\n readonly isVirtual: boolean;\r\n}\r\n\r\ninterface ITable {\r\n readonly id: Id64String;\r\n readonly name: string;\r\n readonly type: \"Primary\" | \"Joined\" | \"Existing\" | \"Overflow\" | \"Virtual\";\r\n readonly exclusiveRootClassId: Id64String;\r\n readonly isClassIdVirtual: boolean;\r\n}\r\n\r\nclass ECDbMap {\r\n private _cachedClassMaps = new Map<Id64String, IClassMap>();\r\n private _cacheTables = new Map<string, ITable>();\r\n public constructor(public readonly db: AnyDb) { }\r\n public getAllDerivedClasses(classFullName: string) {\r\n const sql = `\r\n SELECT format('0x%x', ch.ClassId)\r\n FROM [ec_cache_ClassHierarchy] [ch]\r\n JOIN [ec_Class] [cs] ON [cs].[Id] = [ch].[BaseClassId]\r\n JOIN [ec_Schema] [sc] ON [sc].[Id] = [cs].[SchemaId]\r\n WHERE (([sc].[Alias] = :schemaNameOrAlias\r\n OR [sc].[Name] = :schemaNameOrAlias)\r\n AND ([cs].[Name] = :className))\r\n `;\r\n return this.db.withPreparedSqliteStatement(sql, (stmt) => {\r\n const parts = classFullName.indexOf(\".\") !== -1 ? classFullName.split(\".\") : classFullName.split(\":\");\r\n stmt.bindString(\":schemaNameOrAlias\", parts[0]);\r\n stmt.bindString(\":className\", parts[1]);\r\n const classIds = [];\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW)\r\n classIds.push(stmt.getValueString(0));\r\n return classIds;\r\n });\r\n }\r\n public getTable(tableName: string): ITable | undefined {\r\n if (this._cacheTables.has(tableName))\r\n return this._cacheTables.get(tableName);\r\n\r\n const sql = `\r\n SELECT\r\n JSON_OBJECT (\r\n 'id', FORMAT ('0x%x', [t].[id]),\r\n 'name', [t].[Name],\r\n 'type', (\r\n CASE\r\n [t].[type]\r\n WHEN 0 THEN 'Primary'\r\n WHEN 1 THEN 'Joined'\r\n WHEN 2 THEN 'Existing'\r\n WHEN 3 THEN 'Overflow'\r\n WHEN 4 THEN 'Virtual'\r\n END\r\n ),\r\n 'exclusiveRootClassId', FORMAT ('0x%x',\r\n COALESCE (\r\n [t].[ExclusiveRootClassId], (\r\n SELECT [parent].[ExclusiveRootClassId]\r\n FROM [ec_Table] [parent]\r\n WHERE [parent].[Id] = [t].[ParentTableId] AND [parent].[Type] = 1))),\r\n 'isClassIdVirtual', (\r\n SELECT\r\n [c].[IsVirtual]\r\n FROM\r\n [ec_Column] [c]\r\n WHERE\r\n [c].[Name] = 'ECClassId' AND [c].[TableId] = [t].[Id]\r\n )\r\n )\r\n FROM [ec_Table] [t]\r\n WHERE\r\n [t].[Name] = ?;\r\n `;\r\n\r\n return this.db.withPreparedSqliteStatement(sql, (stmt) => {\r\n stmt.bindString(1, tableName);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n const table = JSON.parse(stmt.getValueString(0), (key, value) => {\r\n if (value === null)\r\n return undefined;\r\n\r\n if (key === \"isClassIdVirtual\")\r\n return value === 0 ? false : true;\r\n\r\n return value;\r\n }) as ITable;\r\n\r\n this._cacheTables.set(tableName, table);\r\n return table;\r\n }\r\n return undefined;\r\n });\r\n }\r\n public getClassMap(classId: Id64String): IClassMap | undefined {\r\n if (this._cachedClassMaps.has(classId))\r\n return this._cachedClassMaps.get(classId);\r\n\r\n const sql = `\r\n SELECT\r\n JSON_OBJECT(\r\n 'id', format('0x%x', cs.id),\r\n 'name', format('%s:%s', ss.Name, cs.Name),\r\n 'mapStrategy',\r\n (\r\n CASE cm.MapStrategy\r\n WHEN 0 THEN 'NotMapped'\r\n WHEN 1 THEN 'OwnTable'\r\n WHEN 2 THEN 'TablePerHierarchy'\r\n WHEN 3 THEN 'ExistingTable'\r\n WHEN 10 THEN 'ForeignKeyInTargetTable'\r\n WHEN 11 THEN 'ForeignKeyInSourceTable'\r\n END\r\n ),\r\n 'type',\r\n (\r\n CASE cs.Type\r\n WHEN 0 THEN 'Entity'\r\n WHEN 1 THEN 'Relationship'\r\n WHEN 2 THEN 'Struct'\r\n WHEN 3 THEN 'CustomAttribute'\r\n END\r\n ),\r\n 'modifier',\r\n (\r\n CASE cs.Modifier\r\n WHEN 0 THEN 'None'\r\n WHEN 1 THEN 'Abstract'\r\n WHEN 2 THEN 'Sealed'\r\n END\r\n ),\r\n 'properties',\r\n (\r\n SELECT\r\n JSON_GROUP_ARRAY(JSON(propJson))\r\n FROM\r\n (\r\n SELECT\r\n JSON_OBJECT(\r\n 'id', format('0x%x', pt.id),\r\n 'name', pt.Name,\r\n 'kind',\r\n (\r\n CASE pt.Kind\r\n WHEN 0 THEN 'Primitive'\r\n WHEN 1 THEN 'Struct'\r\n WHEN 2 THEN 'PrimitiveArray'\r\n WHEN 3 THEN 'StructArray'\r\n WHEN 4 THEN 'Navigation'\r\n END\r\n ),\r\n 'primitiveType',\r\n (\r\n CASE pt.PrimitiveType\r\n WHEN 0x101 THEN 'Binary'\r\n WHEN 0x201 THEN 'Boolean'\r\n WHEN 0x301 THEN 'DateTime'\r\n WHEN 0x401 THEN 'Double'\r\n WHEN 0x501 THEN 'Integer'\r\n WHEN 0x601 THEN 'Long'\r\n WHEN 0x701 THEN 'Point2d'\r\n WHEN 0x801 THEN 'Point3d'\r\n WHEN 0x901 THEN 'String'\r\n WHEN 0xa01 THEN 'IGeometry'\r\n END\r\n ),\r\n 'extendedTypeName', ExtendedTypeName,\r\n 'navigationRelationship',\r\n (\r\n SELECT\r\n JSON_OBJECT(\r\n 'classId', format('0x%x', nc.Id),\r\n 'classFullName', format('%s:%s', ns.Name, nc.Name)\r\n )\r\n FROM ec_Class nc\r\n JOIN ec_Schema ns ON ns.Id = nc.SchemaId\r\n WHERE\r\n nc.Id = pt.NavigationRelationshipClassId\r\n ),\r\n 'structClass',\r\n (\r\n SELECT\r\n JSON_OBJECT(\r\n 'classId', format('0x%x', nc.Id),\r\n 'classFullName', format('%s:%s', ns.Name, nc.Name)\r\n )\r\n FROM ec_Class nc\r\n JOIN ec_Schema ns ON ns.Id = nc.SchemaId\r\n WHERE\r\n nc.Id = pt.StructClassId\r\n ),\r\n 'dateTimeInfo', (\r\n SELECT\r\n JSON_OBJECT (\r\n 'dateTimeKind', (\r\n CASE\r\n WHEN [ca].[Instance] LIKE '%<DateTimeKind>Utc</DateTimeKind>%' COLLATE [NoCase] THEN 'Utc'\r\n WHEN [ca].[Instance] LIKE '%<DateTimeKind>Local</DateTimeKind>%' COLLATE [NoCase] THEN 'Local'\r\n ELSE 'Unspecified'\r\n END\r\n ),\r\n 'dateTimeComponent', (\r\n CASE\r\n WHEN [ca].[Instance] LIKE '%<DateTimeComponent>DateTime</DateTimeComponent>%' COLLATE [NoCase] THEN 'DateTime'\r\n WHEN [ca].[Instance] LIKE '%<DateTimeComponent>Date</DateTimeComponent>%' COLLATE [NoCase] THEN 'Date'\r\n WHEN [ca].[Instance] LIKE '%<DateTimeComponent>TimeOfDay</DateTimeComponent>%' COLLATE [NoCase] THEN 'TimeOfDay'\r\n ELSE 'DateTime'\r\n END\r\n )\r\n )\r\n FROM\r\n [ec_CustomAttribute] [ca]\r\n JOIN [ec_Class] [cl] ON [cl].[Id] = [ca].[ClassId]\r\n JOIN [ec_Schema] [sc] ON [sc].[Id] = [cl].[SchemaId]\r\n WHERE\r\n [ca].[ContainerType] = 992\r\n AND [cl].[Name] = 'DateTimeInfo'\r\n AND [sc].[Name] = 'CoreCustomAttributes'\r\n AND [ca].[ContainerId] = [pt].[Id]\r\n ),\r\n 'columns',\r\n (\r\n SELECT\r\n JSON_GROUP_ARRAY(JSON(columnJson))\r\n FROM\r\n (\r\n SELECT\r\n JSON_OBJECT(\r\n 'table', tb.Name,\r\n 'column', cc.Name,\r\n 'type',\r\n (\r\n CASE cc.Type\r\n WHEN 0 THEN 'Any'\r\n WHEN 1 THEN 'Boolean'\r\n WHEN 2 THEN 'Blob'\r\n WHEN 3 THEN 'Timestamp'\r\n WHEN 4 THEN 'Real'\r\n WHEN 5 THEN 'Integer'\r\n WHEN 6 THEN 'Text'\r\n END\r\n ),\r\n 'columnKind',\r\n (\r\n CASE cc.ColumnKind\r\n WHEN 0 THEN 'Default'\r\n WHEN 1 THEN 'Id'\r\n WHEN 2 THEN 'ClassId'\r\n WHEN 4 THEN 'SharedData'\r\n END\r\n ),\r\n 'accessString', pp0.AccessString,\r\n 'isVirtual', cc.IsVirtual OR tb.Type = 4\r\n ) columnJson\r\n FROM [ec_PropertyMap] [pm0]\r\n JOIN [ec_Column] [cc] ON [cc].[Id] = [pm0].[ColumnId]\r\n JOIN [ec_Table] [tb] ON [tb].[Id] = [cc].[TableId]\r\n JOIN [ec_PropertyPath] [pp0] ON [pp0].[Id] = [pm0].[PropertyPathId]\r\n WHERE\r\n [pp0].[RootPropertyId] = pt.Id AND pm0.ClassId = cs.Id\r\n )\r\n )\r\n ) propJson\r\n FROM [ec_PropertyMap] [pm]\r\n JOIN [ec_PropertyPath] [pp] ON [pp].[Id] = [pm].[PropertyPathId]\r\n JOIN [ec_Property] [pt] ON [pt].[Id] = [pp].[RootPropertyId]\r\n WHERE\r\n pm.ClassId = cs.Id\r\n GROUP BY\r\n pt.Id\r\n )\r\n )\r\n ) classDef\r\n FROM [ec_Class] [cs]\r\n JOIN [ec_ClassMap] [cm] ON [cm].[ClassId] = [cs].[Id]\r\n JOIN [ec_Schema] [ss] ON [ss].[Id] = [cs].[SchemaId]\r\n WHERE\r\n [cs].[Id] = ?\r\n `;\r\n\r\n return this.db.withPreparedSqliteStatement(sql, (stmt) => {\r\n stmt.bindId(1, classId);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n const classMap = JSON.parse(stmt.getValueString(0), (key, value) => {\r\n if (value === null) {\r\n return undefined;\r\n }\r\n if (key === \"isVirtual\") {\r\n return value === 0 ? false : true;\r\n }\r\n return value;\r\n }) as IClassMap;\r\n\r\n this._cachedClassMaps.set(classId, classMap);\r\n return classMap;\r\n }\r\n return undefined;\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Record meta data for the change.\r\n * @beta\r\n * @deprecated in 5.9.0 - will not be removed until after 2027-05-04. Use [ChangeMeta]($backend) with [ChangesetReader]($backend) instead.\r\n * */\r\nexport interface ChangeMetaData {\r\n /** list of tables making up this EC change */\r\n tables: string[];\r\n /** full name of the class of this EC change */\r\n classFullName?: string;\r\n /** sqlite operation that caused the change */\r\n op: SqliteChangeOp;\r\n /** version of the value read from sqlite change */\r\n stage: SqliteValueStage;\r\n /** if classId for the change was not found in db then fallback class for the table */\r\n fallbackClassId?: Id64String;\r\n /** list of change index making up this change (one per table) */\r\n changeIndexes: number[];\r\n}\r\n\r\n/**\r\n * Represent EC change derived from low level sqlite change\r\n * @beta\r\n * @deprecated in 5.9.0 - will not be removed until after 2027-05-04. Use [ChangeInstance]($backend) with [ChangesetReader]($backend) instead.\r\n */\r\nexport interface ChangedECInstance {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n ECInstanceId: Id64String;\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n ECClassId?: Id64String;\r\n $meta?: ChangeMetaData;\r\n [key: string]: any;\r\n}\r\n\r\n/**\r\n * Helper function to convert between JS DateTime & SQLite JulianDay values.\r\n * @beta\r\n * @deprecated in 5.9.0 - will not be removed until after 2027-05-04. The DateTime namespace is deprecated and will be removed in a future release.\r\n * */\r\nnamespace DateTime {\r\n /**\r\n * Convert JS date to JulianDay value.\r\n * @param dt JS Date object.\r\n * @param convertToUtc convert the input value to UTC.\r\n * @returns julian day value\r\n */\r\n export function toJulianDay(dt: Date, convertToUtc = true): number {\r\n const utcOffset = convertToUtc ? dt.getTimezoneOffset() / 1440 : 0;\r\n return (dt.valueOf() / 86400000) - utcOffset + 2440587.5;\r\n }\r\n /**\r\n * Convert Julian day to JS Date object\r\n * @param jd JulianDay value for date/time\r\n * @param isLocalTime if julian day is local time or UTC\r\n * @returns JS Date object.\r\n */\r\n export function fromJulianDay(jd: number, isLocalTime: boolean): Date {\r\n const utcOffset = isLocalTime ? 0 : new Date().getTimezoneOffset() / 1440;\r\n return new Date((jd - 2440587.5 + utcOffset) * 86400000);\r\n }\r\n}\r\n\r\n/**\r\n * Represents a cache for unifying EC changes.\r\n * @beta\r\n * @deprecated in 5.9.0 - will not be removed until after 2027-05-04. Use [ChangeCache]($backend) with [ChangesetReader]($backend) instead.\r\n */\r\nexport interface ECChangeUnifierCache extends Disposable {\r\n /**\r\n * Retrieves the value associated with the specified key from the cache.\r\n * @param key - The key to retrieve the value for.\r\n * @returns The value associated with the key, or undefined if the key is not found.\r\n */\r\n get(key: string): ChangedECInstance | undefined;\r\n\r\n /**\r\n * Sets the value associated with the specified key in the cache.\r\n * @param key - The key to set the value for.\r\n * @param value - The value to be associated with the key.\r\n */\r\n set(key: string, value: ChangedECInstance): void;\r\n\r\n /**\r\n * Returns an iterator for all the values in the cache.\r\n * @returns An iterator for all the values in the cache.\r\n */\r\n all(): IterableIterator<ChangedECInstance>;\r\n\r\n /**\r\n * Returns the number of entries in the cache.\r\n * @returns The number of entries in the cache.\r\n */\r\n count(): number;\r\n}\r\n/**\r\n * @beta\r\n * @deprecated in 5.9.0 - will not be removed until after 2027-05-04. Use [ChangeUnifierCache.createInMemoryCache]($backend) / [ChangeUnifierCache.createSqliteBackedCache]($backend) instead.\r\n*/\r\nexport namespace ECChangeUnifierCache {\r\n /**\r\n * Creates and returns a new in-memory cache for EC change unification.\r\n * @note This cache is fast but recommended for small to medium size changesets. As it store changes in memory using a hash map, it may run out of memory for larger changesets.\r\n * @returns {ECChangeUnifierCache} An instance of cache that store changes in memory using a hash map.\r\n */\r\n export function createInMemoryCache(): ECChangeUnifierCache {\r\n return new InMemoryInstanceCache();\r\n }\r\n\r\n /**\r\n * Creates an ECChangeUnifierCache that is backed by a database.\r\n * @note This cache is suitable for larger changesets and uses SQLite to store changes. It is slower than the in-memory cache but can handle larger datasets without running out of memory.\r\n * @param db - The database instance to use for caching.\r\n * @param bufferedReadInstanceSizeInBytes - The size in bytes for buffered read instances. Defaults to 10 MB.\r\n * @returns An instance of ECChangeUnifierCache backed by SQLite temp db.\r\n */\r\n export function createSqliteBackedCache(db: AnyDb, bufferedReadInstanceSizeInBytes = 1024 * 1024 * 10): ECChangeUnifierCache {\r\n return new SqliteBackedInstanceCache(db, bufferedReadInstanceSizeInBytes);\r\n }\r\n}\r\n\r\n/**\r\n * In-memory cache for storing changed EC instances.\r\n */\r\nclass InMemoryInstanceCache implements ECChangeUnifierCache {\r\n private readonly _cache = new Map<string, ChangedECInstance>();\r\n\r\n /**\r\n * Retrieves the changed EC instance associated with the specified key.\r\n * @param key - The key used to retrieve the instance.\r\n * @returns The changed EC instance, or undefined if not found.\r\n */\r\n public get(key: string): ChangedECInstance | undefined {\r\n return this._cache.get(key);\r\n }\r\n\r\n /**\r\n * Sets the changed EC instance associated with the specified key.\r\n * @param key - The key used to store the instance.\r\n * @param value - The changed EC instance to be stored.\r\n */\r\n public set(key: string, value: ChangedECInstance): void {\r\n const meta = value.$meta as any;\r\n // Remove undefined keys\r\n if (meta) {\r\n Object.keys(meta).forEach((k) => meta[k] === undefined && delete meta[k]);\r\n }\r\n this._cache.set(key, value);\r\n }\r\n\r\n /**\r\n * Returns an iterator over all the changed EC instances in the cache.\r\n * @returns An iterator over all the changed EC instances.\r\n */\r\n public *all(): IterableIterator<ChangedECInstance> {\r\n for (const key of Array.from(this._cache.keys()).sort()) {\r\n const instance = this._cache.get(key);\r\n if (instance) {\r\n yield instance;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Returns the number of changed EC instances in the cache.\r\n * @returns The number of changed EC instances.\r\n */\r\n public count(): number {\r\n return this._cache.size;\r\n }\r\n\r\n /**\r\n * Disposes the cache.\r\n */\r\n public [Symbol.dispose](): void {\r\n // Implementation details\r\n }\r\n}\r\n\r\n/**\r\n * Represents a cache for unifying EC changes in a SQLite-backed instance cache.\r\n */\r\nclass SqliteBackedInstanceCache implements ECChangeUnifierCache {\r\n private readonly _cacheTable = `[temp].[${Guid.createValue()}]`;\r\n public static readonly defaultBufferSize = 1024 * 1024 * 10; // 10MB\r\n /**\r\n * Creates an instance of SqliteBackedInstanceCache.\r\n * @param _db The underlying database connection.\r\n * @param bufferedReadInstanceSizeInBytes The size of read instance buffer defaults to 10Mb.\r\n * @throws Error if bufferedReadInstanceSizeInBytes is less than or equal to 0.\r\n */\r\n public constructor(private readonly _db: AnyDb, public readonly bufferedReadInstanceSizeInBytes: number = SqliteBackedInstanceCache.defaultBufferSize) {\r\n if (bufferedReadInstanceSizeInBytes <= 0)\r\n throw new Error(\"bufferedReadInstanceCount must be greater than 0\");\r\n this.createTempTable();\r\n }\r\n\r\n /**\r\n * Creates a temporary table in the database for caching instances.\r\n * @throws Error if unable to create the temporary table.\r\n */\r\n private createTempTable(): void {\r\n this._db.withSqliteStatement(`CREATE TABLE ${this._cacheTable} ([key] text primary key, [value] text)`, (stmt) => {\r\n if (DbResult.BE_SQLITE_DONE !== stmt.step())\r\n throw new Error(\"unable to create temp table\");\r\n });\r\n }\r\n\r\n /**\r\n * Drops the temporary table from the database.\r\n * @throws Error if unable to drop the temporary table.\r\n */\r\n private dropTempTable(): void {\r\n if (this._db instanceof ECDb) {\r\n this._db.saveChanges();\r\n this._db.clearStatementCache();\r\n } else {\r\n this._db[_nativeDb].saveChanges();\r\n this._db.clearCaches();\r\n }\r\n this._db.withSqliteStatement(`DROP TABLE IF EXISTS ${this._cacheTable}`, (stmt) => {\r\n if (DbResult.BE_SQLITE_DONE !== stmt.step())\r\n throw new Error(\"unable to drop temp table\");\r\n });\r\n }\r\n\r\n /**\r\n * Retrieves the changed EC instance from the cache based on the specified key.\r\n * @param key The key of the instance.\r\n * @returns The changed EC instance if found, otherwise undefined.\r\n */\r\n public get(key: string): ChangedECInstance | undefined {\r\n return this._db.withPreparedSqliteStatement(`SELECT [value] FROM ${this._cacheTable} WHERE [key]=?`, (stmt) => {\r\n stmt.bindString(1, key);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n const out = JSON.parse(stmt.getValueString(0), Base64EncodedString.reviver) as ChangedECInstance;\r\n return out;\r\n }\r\n return undefined;\r\n });\r\n }\r\n\r\n /**\r\n * Sets the changed EC instance in the cache with the specified key.\r\n * @param key The key of the instance.\r\n * @param value The changed EC instance to be set.\r\n */\r\n public set(key: string, value: ChangedECInstance): void {\r\n const shallowCopy = Object.assign({}, value);\r\n this._db.withPreparedSqliteStatement(`INSERT INTO ${this._cacheTable} ([key], [value]) VALUES (?, ?) ON CONFLICT ([key]) DO UPDATE SET [value] = [excluded].[value]`, (stmt) => {\r\n stmt.bindString(1, key);\r\n stmt.bindString(2, JSON.stringify(shallowCopy, Base64EncodedString.replacer));\r\n stmt.step();\r\n });\r\n }\r\n\r\n /**\r\n * Returns an iterator for all the changed EC instances in the cache.\r\n * @returns An iterator for all the changed EC instances.\r\n */\r\n public *all(): IterableIterator<ChangedECInstance> {\r\n const sql = `\r\n SELECT JSON_GROUP_ARRAY (JSON([value]))\r\n FROM (SELECT\r\n [value],\r\n SUM (LENGTH ([value])) OVER (ORDER BY [key] ROWS UNBOUNDED PRECEDING) / ${this.bufferedReadInstanceSizeInBytes} AS [bucket]\r\n FROM ${this._cacheTable})\r\n GROUP BY [bucket]`;\r\n\r\n const stmt = this._db.prepareSqliteStatement(sql);\r\n while (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n const instanceBucket = JSON.parse(stmt.getValueString(0), Base64EncodedString.reviver) as ChangedECInstance[];\r\n for (const value of instanceBucket) {\r\n yield value;\r\n }\r\n }\r\n stmt[Symbol.dispose]();\r\n }\r\n\r\n /**\r\n * Returns the number of instances in the cache.\r\n * @returns The number of instances in the cache.\r\n */\r\n public count(): number {\r\n return this._db.withPreparedSqliteStatement(`SELECT COUNT(*) FROM ${this._cacheTable}`, (stmt) => {\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW)\r\n return stmt.getValue(0).getInteger();\r\n return 0;\r\n });\r\n }\r\n\r\n /**\r\n * Disposes the cache by dropping the temporary table.\r\n */\r\n public [Symbol.dispose](): void {\r\n if (this._db.isOpen) {\r\n this.dropTempTable();\r\n }\r\n }\r\n}\r\n\r\n\r\n/**\r\n * Combine partial changed instance into single instance.\r\n * Partial changes is per table and a single instance can\r\n * span multiple tables.\r\n * @beta\r\n * @deprecated in 5.9.0 - will not be removed until after 2027-05-04. Use [PartialChangeUnifier]($backend) with [ChangesetReader]($backend) instead.\r\n */\r\nexport class PartialECChangeUnifier implements Disposable {\r\n private _readonly = false;\r\n public constructor(private _db: AnyDb, private _cache: ECChangeUnifierCache = new InMemoryInstanceCache()) { }\r\n\r\n /**\r\n * Dispose the instance.\r\n */\r\n public [Symbol.dispose](): void {\r\n this._cache[Symbol.dispose]();\r\n }\r\n\r\n /**\r\n * Get root class id for a given class\r\n * @param classId given class id\r\n * @param db use to find root class\r\n * @returns return root class id\r\n */\r\n private getRootClassId(classId: Id64String): Id64String | undefined {\r\n const sql = `\r\n WITH\r\n [base_class]([classId], [baseClassId], [Level]) AS(\r\n SELECT [ch].[ClassId], [ch].[BaseClassId], 0\r\n FROM [ec_ClassHasBaseClasses] [ch] WHERE [ch].[ClassId] = ?\r\n UNION ALL\r\n SELECT [ch].[ClassId], [ch].[BaseClassId], [Level] + 1\r\n FROM [ec_ClassHasBaseClasses] [ch], [base_class] [bc] WHERE [bc].[BaseClassId] = [ch].[ClassId]\r\n\r\n )\r\n SELECT FORMAT('0x%x', [bc].[BaseClassId]) rootClass\r\n FROM [base_class] [bc]\r\n WHERE [bc].[ClassId] <> [bc].[BaseClassId]\r\n AND [bc].[BaseClassId] NOT IN (SELECT [ca].[ContainerId]\r\n FROM [ec_CustomAttribute] [ca]\r\n WHERE [ca].[ContainerType] = 30\r\n AND [ca].[ClassId] IN (SELECT [cc].[Id]\r\n FROM [ec_Class] [cc]\r\n JOIN [ec_Schema] [ss] ON [ss].[Id] = [cc].[SchemaId]\r\n WHERE [cc].[Name] = 'IsMixIn'\r\n AND [ss].[Name] = 'CoreCustomAttributes'))\r\n ORDER BY [Level] DESC`;\r\n\r\n return this._db.withSqliteStatement(sql, (stmt) => {\r\n stmt.bindId(1, classId);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW && !stmt.isValueNull(0)) {\r\n return stmt.getValueString(0);\r\n }\r\n return classId;\r\n });\r\n }\r\n\r\n /**\r\n * Checks if the given `rhsClassId` is an instance of the `lhsClassId`.\r\n * @param rhsClassId The ID of the right-hand side class.\r\n * @param lhsClassId The ID of the left-hand side class.\r\n * @returns `true` if `rhsClassId` is an instance of `lhsClassId`, `false` otherwise.\r\n */\r\n private instanceOf(rhsClassId: Id64String, lhsClassId: Id64String): boolean {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n return this._db.withPreparedStatement(\"SELECT ec_instanceof(?,?)\", (stmt) => {\r\n stmt.bindId(1, rhsClassId);\r\n stmt.bindId(2, lhsClassId);\r\n stmt.step();\r\n return stmt.getValue(0).getInteger() === 1;\r\n });\r\n }\r\n\r\n /**\r\n * Combine partial instance with instance with same key if already exists.\r\n * @param rhs partial instance\r\n */\r\n private combine(rhs: ChangedECInstance): void {\r\n if (!rhs.$meta) {\r\n throw new Error(\"PartialECChange being combine must have '$meta' property\");\r\n }\r\n const key = this.buildKey(rhs);\r\n const lhs = this._cache.get(key);\r\n if (lhs) {\r\n const { $meta: _, ...restOfRhs } = rhs;\r\n Object.assign(lhs, restOfRhs);\r\n if (lhs.$meta && rhs.$meta) {\r\n lhs.$meta.tables = [...rhs.$meta?.tables, ...lhs.$meta?.tables];\r\n lhs.$meta.changeIndexes = [...rhs.$meta?.changeIndexes, ...lhs.$meta?.changeIndexes];\r\n\r\n // we preserve child class name & id when merging instance.\r\n if (rhs.$meta.fallbackClassId && lhs.$meta.fallbackClassId && rhs.$meta.fallbackClassId !== lhs.$meta.fallbackClassId) {\r\n const lhsClassId = lhs.$meta.fallbackClassId;\r\n const rhsClassId = rhs.$meta.fallbackClassId;\r\n const isRhsIsSubClassOfLhs = this.instanceOf(rhsClassId, lhsClassId);\r\n if (isRhsIsSubClassOfLhs) {\r\n lhs.$meta.fallbackClassId = rhs.$meta.fallbackClassId;\r\n lhs.$meta.classFullName = rhs.$meta.classFullName;\r\n }\r\n }\r\n }\r\n this._cache.set(key, lhs);\r\n } else {\r\n this._cache.set(key, rhs);\r\n }\r\n }\r\n\r\n /**\r\n * Returns the number of instances in the cache.\r\n * @returns The number of instances in the cache.\r\n */\r\n public getInstanceCount(): number {\r\n return this._cache.count();\r\n }\r\n\r\n /**\r\n * Build key from EC change.\r\n * @param change EC change\r\n * @returns key created from EC change.\r\n */\r\n private buildKey(change: ChangedECInstance): string {\r\n let classId = change.ECClassId;\r\n if (typeof classId === \"undefined\") {\r\n if (change.$meta?.fallbackClassId) {\r\n classId = this.getRootClassId(change.$meta.fallbackClassId);\r\n }\r\n if (typeof classId === \"undefined\") {\r\n throw new Error(`unable to resolve ECClassId to root class id.`);\r\n }\r\n }\r\n return `${change.ECInstanceId}-${classId}-${change.$meta?.stage}`.toLowerCase();\r\n }\r\n\r\n /**\r\n * Append partial changes which will be combine using there instance key.\r\n * @note $meta property must be present on partial change as information\r\n * in it is used to combine partial instances.\r\n * @param adaptor changeset adaptor is use to read the partial EC change.\r\n * @beta\r\n */\r\n public appendFrom(adaptor: ChangesetECAdaptor): void {\r\n if (adaptor.disableMetaData) {\r\n throw new Error(\"change adaptor property 'disableMetaData' must be set to 'false'\");\r\n }\r\n\r\n if (this._readonly) {\r\n throw new Error(\"this instance is marked as readonly.\");\r\n }\r\n\r\n if (adaptor.op === \"Updated\" && adaptor.inserted && adaptor.deleted) {\r\n this.combine(adaptor.inserted);\r\n this.combine(adaptor.deleted);\r\n } else if (adaptor.op === \"Inserted\" && adaptor.inserted) {\r\n this.combine(adaptor.inserted);\r\n } else if (adaptor.op === \"Deleted\" && adaptor.deleted) {\r\n this.combine(adaptor.deleted);\r\n }\r\n }\r\n\r\n /**\r\n * Returns complete EC change instances.\r\n * @beta\r\n */\r\n public get instances(): IterableIterator<ChangedECInstance> {\r\n return this._cache.all();\r\n }\r\n}\r\n\r\n/**\r\n * Transform sqlite change to ec change. EC change is partial change as\r\n * it is per table while a single instance can span multiple table.\r\n * @note PrimitiveArray and StructArray are not supported types.\r\n * @beta\r\n * @deprecated in 5.9.0 - will not be removed until after 2027-05-04. Use [ChangesetReader]($backend) instead.\r\n *\r\n*/\r\nexport class ChangesetECAdaptor implements Disposable {\r\n private readonly _mapCache: ECDbMap;\r\n private readonly _tableFilter = new Set<string>();\r\n private readonly _opFilter = new Set<SqliteChangeOp>();\r\n private readonly _classFilter = new Set<string>();\r\n private _allowedClasses = new Set<string>();\r\n /**\r\n * set debug flags\r\n */\r\n public readonly debugFlags = {\r\n replaceBlobWithEllipsis: false, // replace bolb with ... for debugging\r\n replaceGeomWithEllipsis: false, // replace geom with ... for debugging\r\n replaceGuidWithEllipsis: false, // replace geom with ... for debugging\r\n };\r\n /**\r\n * Return partial inserted instance\r\n * For updates inserted represent new version of instance after update.\r\n */\r\n public inserted?: ChangedECInstance;\r\n /**\r\n * Return partial deleted instance.\r\n * For updates deleted represent old version of instance before update.\r\n */\r\n public deleted?: ChangedECInstance;\r\n\r\n /**\r\n * Setup filter that will result in change enumeration restricted to\r\n * list of tables added by acceptTable().\r\n * @param table Name of the table\r\n * @returns Fluent reference to ChangesetAdaptor.\r\n */\r\n public acceptTable(table: string): ChangesetECAdaptor {\r\n if (!this._tableFilter.has(table))\r\n this._tableFilter.add(table);\r\n return this;\r\n }\r\n\r\n /**\r\n * Setup filter that will result in change enumeration restricted to\r\n * list of op added by acceptOp().\r\n * @param op\r\n * @returns Fluent reference to ChangesetAdaptor.\r\n */\r\n public acceptOp(op: SqliteChangeOp): ChangesetECAdaptor {\r\n if (!this._opFilter.has(op))\r\n this._opFilter.add(op);\r\n return this;\r\n }\r\n\r\n /**\r\n * Setup filter that will result in change enumeration restricted to\r\n * list of class and its derived classes added by acceptClass().\r\n * @param classFullName\r\n * @returns\r\n */\r\n public acceptClass(classFullName: string): ChangesetECAdaptor {\r\n if (!this._classFilter.has(classFullName))\r\n this._classFilter.add(classFullName);\r\n\r\n this._allowedClasses.clear();\r\n return this;\r\n }\r\n\r\n private buildClassFilter() {\r\n if (this._allowedClasses.size !== 0 || this._classFilter.size === 0)\r\n return;\r\n\r\n this._classFilter.forEach((className) => {\r\n this._mapCache.getAllDerivedClasses(className).forEach((classId) => {\r\n this._allowedClasses.add(classId);\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Construct adaptor with a initialized reader.\r\n * @note the changeset reader must have disableSchemaCheck\r\n * set to false and db must also be set.\r\n * @param reader wrap changeset reader.\r\n */\r\n public constructor(public readonly reader: SqliteChangesetReader, public readonly disableMetaData = false) {\r\n if (!reader.disableSchemaCheck)\r\n throw new Error(\"SqliteChangesetReader, 'disableSchemaCheck' param must be set to false.\");\r\n\r\n this._mapCache = new ECDbMap(reader.db);\r\n }\r\n\r\n /**\r\n * dispose current instance and it will also dispose the changeset reader.\r\n */\r\n public [Symbol.dispose](): void {\r\n this.close();\r\n }\r\n\r\n /**\r\n * close current instance and it will also close the changeset reader.\r\n */\r\n public close(): void {\r\n this.reader.close();\r\n }\r\n\r\n /**\r\n * Convert binary GUID into string GUID.\r\n * @param binaryGUID binary version of guid.\r\n * @returns GUID string.\r\n */\r\n private static convertBinaryToGuid(binaryGUID: Uint8Array): GuidString {\r\n // Check if the array has 16 elements\r\n if (binaryGUID.length !== 16) {\r\n throw new Error(\"Invalid array length for Guid\");\r\n }\r\n // Convert each element to a two-digit hexadecimal string\r\n const hex = Array.from(binaryGUID, (byte) => byte.toString(16).padStart(2, \"0\"));\r\n // Join the hexadecimal strings and insert hyphens\r\n return `${hex.slice(0, 4).join(\"\")}-${hex.slice(4, 6).join(\"\")}-${hex.slice(6, 8).join(\"\")}-${hex.slice(8, 10).join(\"\")}-${hex.slice(10, 16).join(\"\")}`;\r\n\r\n }\r\n\r\n /**\r\n * Set value use access string in a JS object.\r\n * @param targetObj object that will be updated.\r\n * @param accessString access string token separated by '.'.\r\n */\r\n private static setValue(targetObj: any, accessString: string, value: any): void {\r\n let cursor = targetObj;\r\n const propPath = accessString.split(\".\");\r\n propPath.forEach((propertyName) => {\r\n if (propertyName === \"__proto__\")\r\n throw new Error(\"access string cannot container __proto__\");\r\n });\r\n\r\n const leafProp = propPath.splice(-1).shift();\r\n if (!leafProp)\r\n throw new Error(\"not access string was specified.\");\r\n\r\n for (const elem of propPath) {\r\n if (typeof cursor[elem] === \"undefined\")\r\n cursor[elem] = {};\r\n cursor = cursor[elem];\r\n }\r\n cursor[leafProp] = value;\r\n }\r\n\r\n /**\r\n * Check if sqlite change table is a EC data table\r\n * @param tableName name of the table.\r\n * @returns true if table has EC data.\r\n */\r\n public isECTable(tableName: string) {\r\n return typeof this._mapCache.getTable(tableName) !== \"undefined\";\r\n }\r\n\r\n /**\r\n * Attempt find ECClassId from ECInstanceId for a change of type 'updated'.\r\n * @param tableName name of the table to find ECClassId from given ECInstanceId\r\n * @param instanceId instance id for which we need ECClassId for.\r\n * @returns if successful returns ECClassId else return undefined.\r\n */\r\n private getClassIdFromDb(tableName: string, instanceId: Id64String): Id64String | undefined {\r\n try {\r\n return this.reader.db?.withPreparedSqliteStatement(`SELECT [ECClassId] FROM [${tableName}] WHERE [rowId]=?`, (stmt) => {\r\n stmt.bindId(1, instanceId);\r\n return stmt.step() === DbResult.BE_SQLITE_ROW ? stmt.getValueId(0) : undefined;\r\n });\r\n } catch {\r\n return undefined;\r\n }\r\n }\r\n\r\n /** helper method around reader.op */\r\n public get op() { return this.reader.op; }\r\n /** Return true if current change is of type \"Inserted\" */\r\n public get isInserted() { return this.op === \"Inserted\"; }\r\n /** Return true if current change is of type \"Deleted\" */\r\n public get isDeleted() { return this.op === \"Deleted\"; }\r\n /** Return true if current change is of type \"Updated\" */\r\n public get isUpdated() { return this.op === \"Updated\"; }\r\n\r\n /**\r\n * Advance reader to next change or a change that meets the filter set in the current adaptor\r\n * @returns return false if no more changes to read.\r\n */\r\n public step(): boolean {\r\n this.inserted = undefined;\r\n this.deleted = undefined;\r\n this.buildClassFilter();\r\n while (this.reader.step()) {\r\n if (!this.isECTable(this.reader.tableName))\r\n continue;\r\n\r\n if (this._tableFilter.size > 0) {\r\n if (!this._tableFilter.has(this.reader.tableName))\r\n continue;\r\n }\r\n\r\n if (this._opFilter.size > 0) {\r\n if (!this._opFilter.has(this.reader.op))\r\n continue;\r\n }\r\n\r\n if (this.reader.hasRow) {\r\n const table = this._mapCache.getTable(this.reader.tableName);\r\n if (!table || table.type === \"Virtual\") {\r\n throw new Error(`table in changeset not found or is virtual ${this.reader.tableName}`);\r\n }\r\n\r\n const change = {\r\n inserted: this.reader.getChangeValuesObject(\"New\", { includePrimaryKeyInUpdateNew: true }),\r\n deleted: this.reader.getChangeValuesObject(\"Old\", { includePrimaryKeyInUpdateNew: true }),\r\n };\r\n\r\n if (!change.inserted && !change.deleted) {\r\n throw new Error(`unable to get change from changeset reader`);\r\n }\r\n\r\n let ecClassId: Id64String | undefined = this.reader.op === \"Inserted\" ? change.inserted?.ECClassId : change.deleted?.ECClassId;\r\n const classIdPresentInChange = typeof ecClassId !== \"undefined\";\r\n let classMap: IClassMap | undefined;\r\n let fallbackClassId: Id64String | undefined;\r\n if (table.isClassIdVirtual) {\r\n classMap = this._mapCache.getClassMap(table.exclusiveRootClassId);\r\n } else {\r\n if (!ecClassId) {\r\n // attempt to find ECClassId against row from the db.\r\n const primaryKeys = this.reader.primaryKeyValues;\r\n if (primaryKeys.length === 1) {\r\n ecClassId = this.getClassIdFromDb(this.reader.tableName, this.reader.primaryKeyValues[0] as Id64String);\r\n }\r\n }\r\n if (ecClassId)\r\n classMap = this._mapCache.getClassMap(ecClassId);\r\n if (!classMap) {\r\n // fallback to root map for table.\r\n classMap = this._mapCache.getClassMap(table.exclusiveRootClassId);\r\n if (classMap)\r\n fallbackClassId = table.exclusiveRootClassId;\r\n }\r\n }\r\n\r\n if (!classMap)\r\n throw new Error(`unable to load class map`);\r\n\r\n if (!classIdPresentInChange && !ecClassId && !fallbackClassId)\r\n ecClassId = classMap.id;\r\n\r\n if (this._allowedClasses.size !== 0) {\r\n if (!this._allowedClasses.has(classMap.id))\r\n continue;\r\n }\r\n\r\n const $meta = {\r\n tables: [this.reader.tableName],\r\n op: this.reader.op,\r\n classFullName: classMap.name,\r\n fallbackClassId,\r\n changeIndexes: [this.reader.changeIndex],\r\n };\r\n\r\n if (this.reader.op === \"Inserted\" && change.inserted) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this.inserted = { ECClassId: ecClassId, ECInstanceId: \"\" };\r\n if (!this.disableMetaData)\r\n this.inserted.$meta = { ...$meta, stage: \"New\" };\r\n this.transform(classMap, change.inserted, table, this.inserted);\r\n } else if (this.reader.op === \"Deleted\" && change.deleted) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this.deleted = { ECClassId: ecClassId, ECInstanceId: \"\" };\r\n if (!this.disableMetaData)\r\n this.deleted.$meta = { ...$meta, stage: \"Old\" };\r\n this.transform(classMap, change.deleted, table, this.deleted);\r\n } else if (change.inserted && change.deleted) {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this.inserted = { ECClassId: ecClassId, ECInstanceId: \"\" };\r\n if (!this.disableMetaData)\r\n this.inserted.$meta = { ...$meta, stage: \"New\" };\r\n this.transform(classMap, change.inserted, table, this.inserted);\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n this.deleted = { ECClassId: ecClassId, ECInstanceId: \"\" };\r\n if (!this.disableMetaData)\r\n this.deleted.$meta = { ...$meta, stage: \"Old\" };\r\n this.transform(classMap, change.deleted, table, this.deleted);\r\n } else {\r\n throw new Error(\"unable to read EC changes\");\r\n }\r\n break;\r\n }\r\n }\r\n return this.reader.hasRow;\r\n }\r\n\r\n /**\r\n * Transform nav change column into navigation EC property\r\n * @param prop navigation property definition.\r\n * @param change sqlite change.\r\n * @param out ec instance that will be updated with navigation property.\r\n */\r\n private transformNavigationProperty(prop: IProperty, change: SqliteChange, out: ChangedECInstance): void {\r\n const idCol = prop.columns.filter(($) => $.accessString.endsWith(\".Id\")).at(0);\r\n if (!idCol) {\r\n throw new Error(\"invalid map for nav property\");\r\n }\r\n\r\n const idValue = change[idCol.column];\r\n if (typeof idValue === \"undefined\")\r\n return;\r\n\r\n ChangesetECAdaptor.setValue(out, idCol.accessString, idValue);\r\n\r\n const relClassIdCol = prop.columns.filter(($) => $.accessString.endsWith(\".RelECClassId\")).at(0);\r\n if (!relClassIdCol) {\r\n throw new Error(\"invalid map for nav property\");\r\n }\r\n\r\n const relClassIdValue = relClassIdCol.isVirtual ? prop.navigationRelationship?.classId : change[relClassIdCol.column];\r\n if (typeof relClassIdValue === \"undefined\")\r\n return;\r\n\r\n ChangesetECAdaptor.setValue(out, relClassIdCol.accessString, relClassIdValue);\r\n }\r\n\r\n /**\r\n * Transform sqlite change into EC change.\r\n * @param classMap classMap use to deserialize sqlite change into EC change.\r\n * @param change sqlite change from changeset.\r\n * @param table table definition of sqlite change provided.\r\n * @param out EC changeset that will be updated with properties.\r\n */\r\n private transform(classMap: IClassMap, change: SqliteChange, table: ITable, out: ChangedECInstance): void {\r\n // transform change row to instance\r\n for (const prop of classMap.properties) {\r\n if (prop.kind === \"PrimitiveArray\" || prop.kind === \"StructArray\") {\r\n // Arrays not supported\r\n continue;\r\n }\r\n if (prop.columns.filter((_) => _.isVirtual).length === prop.columns.length) {\r\n continue;\r\n }\r\n if (prop.kind === \"Navigation\") {\r\n this.transformNavigationProperty(prop, change, out);\r\n } else {\r\n for (const col of prop.columns) {\r\n if (col.table !== table.name)\r\n continue;\r\n\r\n const columnValue = change[col.column];\r\n if (typeof columnValue === \"undefined\")\r\n continue;\r\n\r\n if (columnValue !== null) {\r\n if (prop.primitiveType === \"DateTime\") {\r\n const dt = DateTime.fromJulianDay(columnValue, prop.dateTimeInfo?.dateTimeKind === \"Local\");\r\n ChangesetECAdaptor.setValue(out, col.accessString, dt.toISOString());\r\n continue;\r\n }\r\n if (prop.extendedTypeName === \"BeGuid\") {\r\n ChangesetECAdaptor.setValue(out, col.accessString, this.debugFlags.replaceGuidWithEllipsis ? \"...\" : ChangesetECAdaptor.convertBinaryToGuid(columnValue));\r\n continue;\r\n }\r\n if (prop.extendedTypeName === \"GeometryStream\") {\r\n ChangesetECAdaptor.setValue(out, col.accessString, this.debugFlags.replaceGeomWithEllipsis ? \"...\" : columnValue);\r\n continue;\r\n }\r\n if (prop.primitiveType === \"Binary\") {\r\n ChangesetECAdaptor.setValue(out, col.accessString, this.debugFlags.replaceBlobWithEllipsis ? \"...\" : columnValue);\r\n continue;\r\n }\r\n }\r\n ChangesetECAdaptor.setValue(out, col.accessString, columnValue);\r\n }\r\n }\r\n }\r\n }\r\n}\r\n"]}
|
|
@@ -21,6 +21,7 @@ import { AnyDb, SqliteChangeOp } from "./SqliteChangesetReader";
|
|
|
21
21
|
* @beta
|
|
22
22
|
*/
|
|
23
23
|
export declare class ChangesetReader implements Disposable, ChangeSource {
|
|
24
|
+
private static readonly defaultSpillThresholdInBytes;
|
|
24
25
|
private readonly _nativeReader;
|
|
25
26
|
private _rowOptions?;
|
|
26
27
|
private _propFilter;
|
|
@@ -34,18 +35,21 @@ export declare class ChangesetReader implements Disposable, ChangeSource {
|
|
|
34
35
|
/**
|
|
35
36
|
* `true` when the current row belongs to an EC-mapped table.
|
|
36
37
|
* Valid only after a successful call to [[step]].
|
|
38
|
+
* @throws [[IModelError]] if called before a successful [[step]] call.
|
|
37
39
|
* @beta
|
|
38
40
|
*/
|
|
39
41
|
get isECTable(): boolean;
|
|
40
42
|
/**
|
|
41
43
|
* Name of the SQLite table for the current change row.
|
|
42
44
|
* Valid only after a successful call to [[step]].
|
|
45
|
+
* @throws [[IModelError]] if called before a successful [[step]] call.
|
|
43
46
|
* @beta
|
|
44
47
|
*/
|
|
45
48
|
get tableName(): string;
|
|
46
49
|
/**
|
|
47
50
|
* `true` when the current change was applied indirectly
|
|
48
51
|
* Valid only after a successful call to [[step]].
|
|
52
|
+
* @throws [[IModelError]] if called before a successful [[step]] call.
|
|
49
53
|
* @beta
|
|
50
54
|
*/
|
|
51
55
|
get isIndirectChange(): boolean;
|
|
@@ -72,6 +76,7 @@ export declare class ChangesetReader implements Disposable, ChangeSource {
|
|
|
72
76
|
* @param args.invert When `true`, invert all operations (Insert↔Delete).
|
|
73
77
|
* @param args.valueOptions Row adaptor options controlling how EC property values are formatted.
|
|
74
78
|
* @param args.propFilter Controls which properties are included. Defaults to `All`.
|
|
79
|
+
* @throws if the native layer fails to open the file.
|
|
75
80
|
* @beta
|
|
76
81
|
*/
|
|
77
82
|
static openFile(args: {
|
|
@@ -83,10 +88,17 @@ export declare class ChangesetReader implements Disposable, ChangeSource {
|
|
|
83
88
|
* @param args.db Database with schema at or ahead of the last changeset.
|
|
84
89
|
* @param args.valueOptions Row adaptor options controlling how EC property values are formatted.
|
|
85
90
|
* @param args.propFilter Controls which properties are included. Defaults to `All`.
|
|
91
|
+
* @param args.spillThresholdInBytes When the total size of the changeset data in the change group exceeds this threshold (in bytes),
|
|
92
|
+
* the reader writes the data to a temporary file on disk and streams it from there instead of buffering everything in memory.
|
|
93
|
+
* This keeps peak memory usage bounded, making the API suitable for processing large changeset groups under low-memory conditions.
|
|
94
|
+
* Defaults to 50 MiB.
|
|
95
|
+
* @throws if `changesetFiles` is empty, or if the native layer fails to open
|
|
96
|
+
* the group.
|
|
86
97
|
* @beta
|
|
87
98
|
*/
|
|
88
99
|
static openGroup(args: {
|
|
89
100
|
readonly changesetFiles: string[];
|
|
101
|
+
spillThresholdInBytes?: number;
|
|
90
102
|
} & ChangesetReaderArgs): ChangesetReader;
|
|
91
103
|
/**
|
|
92
104
|
* Read pending (not yet pushed) local changes from an open IModelDb.
|
|
@@ -94,21 +106,34 @@ export declare class ChangesetReader implements Disposable, ChangeSource {
|
|
|
94
106
|
* @param args.includeInMemoryChanges Also include in-memory (not yet saved to disk) changes.
|
|
95
107
|
* @param args.valueOptions Row adaptor options controlling how EC property values are formatted.
|
|
96
108
|
* @param args.propFilter Controls which properties are included. Defaults to `All`.
|
|
109
|
+
* @param args.spillThresholdInBytes When the total size of all local un-pushed saved changes exceeds this threshold (in bytes),
|
|
110
|
+
* the reader writes the data to a temporary file on disk and streams it from there instead of buffering everything in memory.
|
|
111
|
+
* This keeps peak memory usage bounded, making the API suitable for iModels with large local change backlogs under low-memory conditions.
|
|
112
|
+
* Defaults to 50 MiB.
|
|
113
|
+
* @throws if the native layer
|
|
114
|
+
* fails to open the local changes.
|
|
97
115
|
* @beta
|
|
98
116
|
*/
|
|
99
117
|
static openLocalChanges(args: Omit<ChangesetReaderArgs, "db"> & {
|
|
100
118
|
db: IModelDb;
|
|
101
119
|
includeInMemoryChanges?: boolean;
|
|
120
|
+
spillThresholdInBytes?: number;
|
|
102
121
|
}): ChangesetReader;
|
|
103
122
|
/**
|
|
104
123
|
* Read the in-memory (not yet saved to disk) changes of an open IModelDb.
|
|
105
124
|
* @param args.db Must be an [IModelDb]($backend).
|
|
106
125
|
* @param args.valueOptions Row adaptor options controlling how EC property values are formatted.
|
|
107
126
|
* @param args.propFilter Controls which properties are included. Defaults to `All`.
|
|
127
|
+
* @param args.spillThresholdInBytes When the total size of the in-memory (unsaved) change data exceeds this threshold (in bytes),
|
|
128
|
+
* the reader writes the data to a temporary file on disk and streams it from there instead of buffering everything in memory.
|
|
129
|
+
* This keeps peak memory usage bounded, making the API suitable for large in-memory transactions under low-memory conditions.
|
|
130
|
+
* Defaults to 50 MiB.
|
|
131
|
+
* @throws if the native layer encounters an error while opening the in-memory changes.
|
|
108
132
|
* @beta
|
|
109
133
|
*/
|
|
110
134
|
static openInMemoryChanges(args: Omit<ChangesetReaderArgs, "db"> & {
|
|
111
135
|
db: IModelDb;
|
|
136
|
+
spillThresholdInBytes?: number;
|
|
112
137
|
}): ChangesetReader;
|
|
113
138
|
/**
|
|
114
139
|
* Read a single saved transaction by its id.
|
|
@@ -116,17 +141,27 @@ export declare class ChangesetReader implements Disposable, ChangeSource {
|
|
|
116
141
|
* @param args.txnId The id of the saved transaction to read.
|
|
117
142
|
* @param args.valueOptions Row adaptor options controlling how EC property values are formatted.
|
|
118
143
|
* @param args.propFilter Controls which properties are included. Defaults to `All`.
|
|
144
|
+
* @param args.spillThresholdInBytes When the total size of the transaction's change data exceeds this threshold (in bytes),
|
|
145
|
+
* the reader writes the data to a temporary file on disk and streams it from there instead of buffering everything in memory.
|
|
146
|
+
* This keeps peak memory usage bounded, making the API suitable for large transactions under low-memory conditions.
|
|
147
|
+
* Defaults to 50 MiB.
|
|
148
|
+
* @throws if `txnId` is not found, or
|
|
149
|
+
* the native layer fails to open the transaction data.
|
|
119
150
|
* @beta
|
|
120
151
|
*/
|
|
121
152
|
static openTxn(args: Omit<ChangesetReaderArgs, "db"> & {
|
|
122
153
|
db: IModelDb;
|
|
123
154
|
txnId: Id64String;
|
|
155
|
+
spillThresholdInBytes?: number;
|
|
124
156
|
}): ChangesetReader;
|
|
157
|
+
/** Handle errors that occur while auto closing the reader if there is also an error while opening the reader */
|
|
158
|
+
private handleCloseErrorWhileOpening;
|
|
125
159
|
/**
|
|
126
160
|
* Restrict iteration to changes from the named SQLite tables.
|
|
127
161
|
* That means the rows for changes from other tables will be skipped entirely and won't be visible through the reader.
|
|
128
162
|
* @param tableNames SQLite table names to include.
|
|
129
163
|
* Note: Table names must be provided in the correct case for proper filtering.
|
|
164
|
+
* @throws if the native layer encounters an error while setting the filter.
|
|
130
165
|
* @beta
|
|
131
166
|
*/
|
|
132
167
|
setTableNameFilters(tableNames: Set<string>): void;
|
|
@@ -134,6 +169,7 @@ export declare class ChangesetReader implements Disposable, ChangeSource {
|
|
|
134
169
|
* Restrict iteration to changes with the given operation types.
|
|
135
170
|
* That means the rows for changes with other operation types will be skipped entirely and won't be visible through the reader.
|
|
136
171
|
* @param ops Operations to include.
|
|
172
|
+
* @throws if the native layer encounters an error while setting the filter.
|
|
137
173
|
* @beta
|
|
138
174
|
*/
|
|
139
175
|
setOpCodeFilters(ops: Set<SqliteChangeOp>): void;
|
|
@@ -142,43 +178,90 @@ export declare class ChangesetReader implements Disposable, ChangeSource {
|
|
|
142
178
|
* That means the rows for changes from other EC classes will be skipped entirely and won't be visible through the reader.
|
|
143
179
|
* @param classNames EC class names to include. The classNames should be in the full name format(i.e. "SchemaName:ClassName").
|
|
144
180
|
* Note: Schema names and class names must be provided in the correct case for proper filtering. Derived classes are not automatically included, so they must be specified explicitly if needed.
|
|
181
|
+
* @throws if the native layer encounters an error while setting the filter.
|
|
145
182
|
* @beta
|
|
146
183
|
*/
|
|
147
184
|
setClassNameFilters(classNames: Set<string>): void;
|
|
148
185
|
/**
|
|
149
186
|
* Remove the table-name filters
|
|
187
|
+
* @throws if the native layer encounters an error.
|
|
150
188
|
* @beta
|
|
151
189
|
*/
|
|
152
190
|
clearTableNameFilters(): void;
|
|
153
191
|
/**
|
|
154
192
|
* Remove the op-code filters
|
|
193
|
+
* @throws if the native layer encounters an error.
|
|
155
194
|
* @beta
|
|
156
195
|
*/
|
|
157
196
|
clearOpCodeFilters(): void;
|
|
158
197
|
/**
|
|
159
198
|
* Remove the class-name filters
|
|
199
|
+
* @throws if the native layer encounters an error.
|
|
160
200
|
* @beta
|
|
161
201
|
*/
|
|
162
202
|
clearClassNameFilters(): void;
|
|
203
|
+
/**
|
|
204
|
+
* Enable strict mode on the reader.
|
|
205
|
+
*
|
|
206
|
+
* Strict mode affects how the reader handles a **column-count mismatch** between a change
|
|
207
|
+
* record and the corresponding live database table. Such a mismatch can occur when columns
|
|
208
|
+
* have been added to a table after the changeset was created.
|
|
209
|
+
*
|
|
210
|
+
* When strict mode is **enabled**: if the number of columns recorded in a change row differs
|
|
211
|
+
* from the number of columns currently present in the live table, the reader throws an error
|
|
212
|
+
* instead of processing that row.
|
|
213
|
+
*
|
|
214
|
+
* Use strict mode when you need to be certain that every change row is interpreted against
|
|
215
|
+
* exactly the schema that was in effect when the changeset was written.
|
|
216
|
+
*
|
|
217
|
+
* @see [[disableStrictMode]] — the default (lenient) behaviour.
|
|
218
|
+
* @throws if the native layer encounters an error.
|
|
219
|
+
* @beta
|
|
220
|
+
*/
|
|
221
|
+
enableStrictMode(): void;
|
|
222
|
+
/**
|
|
223
|
+
* Disable strict mode on the reader (this is the default).
|
|
224
|
+
*
|
|
225
|
+
* When strict mode is **disabled**: if the number of columns recorded in a change row differs
|
|
226
|
+
* from the number of columns currently present in the live table, the reader takes the
|
|
227
|
+
* **minimum** of the two column counts and proceeds normally with that subset. This is safe
|
|
228
|
+
* because SQLite only ever appends new columns at the end of a table and never removes them —
|
|
229
|
+
* so older change records simply lack the trailing columns that were added later, and those
|
|
230
|
+
* missing columns are silently ignored.
|
|
231
|
+
*
|
|
232
|
+
* @see [[enableStrictMode]] — throw on column-count mismatches instead.
|
|
233
|
+
* @throws if the native layer encounters an error.
|
|
234
|
+
* @beta
|
|
235
|
+
*/
|
|
236
|
+
disableStrictMode(): void;
|
|
163
237
|
/**
|
|
164
238
|
* Advance to the next change and populate `inserted` and/or `deleted`.
|
|
165
239
|
* @returns `true` while positioned on a valid change; `false` when the stream is exhausted.
|
|
240
|
+
* @throws if the native layer encounters an error while reading or decoding
|
|
241
|
+
* the next change.
|
|
166
242
|
* @beta
|
|
167
243
|
*/
|
|
168
244
|
step(): boolean;
|
|
169
245
|
/**
|
|
170
246
|
* SQLite opcode of the current change.
|
|
171
247
|
* Valid only after a successful call to [[step]].
|
|
248
|
+
* @throws [[IModelError]] if called before a successful [[step]] call.
|
|
172
249
|
* @beta
|
|
173
250
|
*/
|
|
174
251
|
get op(): SqliteChangeOp;
|
|
175
252
|
/**
|
|
176
253
|
* Close the reader and release all native resources.
|
|
254
|
+
*
|
|
255
|
+
* @throws if the native layer encounters an error during cleanup. Native resources
|
|
256
|
+
* are not fully released when this throws — check the native error
|
|
257
|
+
* logs for details.
|
|
177
258
|
* @beta
|
|
178
259
|
*/
|
|
179
260
|
close(): void;
|
|
180
261
|
/**
|
|
181
|
-
* Implements the `Disposable` contract —
|
|
262
|
+
* Implements the `Disposable` contract — delegates to [[close]].
|
|
263
|
+
*
|
|
264
|
+
* @throws if the native layer fails to release its resources (re-thrown from [[close]]).
|
|
182
265
|
* @beta
|
|
183
266
|
*/
|
|
184
267
|
[Symbol.dispose](): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChangesetReader.d.ts","sourceRoot":"","sources":["../../src/ChangesetReader.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,OAAO,EAA2B,UAAU,EAAgB,MAAM,qBAAqB,CAAC;AAExF,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,YAAY,EAAoC,MAAM,wBAAwB,CAAC;AAC7H,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAOhE;;;;;;;;;;;;;;GAcG;AACH,qBAAa,eAAgB,YAAW,UAAU,EAAE,YAAY;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA+E;IAE7G,OAAO,CAAC,WAAW,CAAC,CAAmB;IACvC,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,GAAG,CAAC,CAAiB;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAU;IAC7B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,iBAAiB,CAAC,CAAU;IAEpC,4CAA4C;IAC5C,SAAgB,EAAE,EAAE,KAAK,CAAC;IAE1B
|
|
1
|
+
{"version":3,"file":"ChangesetReader.d.ts","sourceRoot":"","sources":["../../src/ChangesetReader.ts"],"names":[],"mappings":"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"}
|