@itwin/core-backend 5.2.0-dev.3 → 5.2.0-dev.30
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 +79 -1
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.d.ts +6 -0
- package/lib/cjs/BackendLoggerCategory.d.ts.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js +6 -0
- 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 +57 -3
- package/lib/cjs/BriefcaseManager.d.ts.map +1 -1
- package/lib/cjs/BriefcaseManager.js +150 -42
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.js +2 -2
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +248 -248
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.js +7 -7
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.d.ts +4 -0
- package/lib/cjs/CloudSqlite.d.ts.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.d.ts +8 -0
- package/lib/cjs/ECDb.d.ts.map +1 -1
- package/lib/cjs/ECDb.js +22 -0
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/Element.js.map +1 -1
- package/lib/cjs/ElementAspect.js.map +1 -1
- package/lib/cjs/ElementGraphics.js.map +1 -1
- package/lib/cjs/ElementTreeWalker.js.map +1 -1
- package/lib/cjs/Entity.js.map +1 -1
- package/lib/cjs/EntityReferences.js.map +1 -1
- package/lib/cjs/ExportGraphics.js.map +1 -1
- package/lib/cjs/ExternalSource.js.map +1 -1
- package/lib/cjs/FontFile.js.map +1 -1
- package/lib/cjs/GeoCoordConfig.js.map +1 -1
- package/lib/cjs/GeographicCRSServices.js.map +1 -1
- package/lib/cjs/GeometrySummary.js +47 -47
- package/lib/cjs/GeometrySummary.js.map +1 -1
- package/lib/cjs/IModelDb.d.ts +54 -3
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +96 -18
- 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.d.ts +11 -1
- package/lib/cjs/IModelHost.d.ts.map +1 -1
- package/lib/cjs/IModelHost.js +5 -0
- package/lib/cjs/IModelHost.js.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.d.ts +1 -5
- package/lib/cjs/IModelIncrementalSchemaLocater.d.ts.map +1 -1
- package/lib/cjs/IModelIncrementalSchemaLocater.js +0 -6
- package/lib/cjs/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/cjs/IModelJsFs.js.map +1 -1
- package/lib/cjs/ImageSourceConversion.js.map +1 -1
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.js +1 -1
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/LockControl.js.map +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeAppStorage.js.map +1 -1
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/RpcBackend.js.map +1 -1
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/Schema.js.map +1 -1
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SchemaUtils.js.map +1 -1
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/StashManager.d.ts +175 -0
- package/lib/cjs/StashManager.d.ts.map +1 -0
- package/lib/cjs/StashManager.js +306 -0
- package/lib/cjs/StashManager.js.map +1 -0
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.d.ts +226 -15
- package/lib/cjs/TxnManager.d.ts.map +1 -1
- package/lib/cjs/TxnManager.js +249 -23
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts +10 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js +12 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.d.ts +3 -2
- package/lib/cjs/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js +4 -3
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.d.ts +52 -24
- package/lib/cjs/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js +49 -59
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.d.ts +2 -0
- package/lib/cjs/annotations/TextAnnotationGeometry.d.ts.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js +2 -2
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.d.ts +3 -9
- package/lib/cjs/annotations/TextBlockLayout.d.ts.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js +3 -22
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
- package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
- package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/domains/GenericSchema.js.map +1 -1
- package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js +1 -1
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/NativePlatform.js.map +1 -1
- package/lib/cjs/internal/NoLocks.js.map +1 -1
- package/lib/cjs/internal/ServerBasedLocks.js.map +1 -1
- package/lib/cjs/internal/Symbols.d.ts +1 -0
- package/lib/cjs/internal/Symbols.d.ts.map +1 -1
- package/lib/cjs/internal/Symbols.js +2 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.d.ts.map +1 -1
- package/lib/cjs/internal/annotations/fields.js +1 -0
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js +2 -2
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/cjs/rpc/multipart.js.map +1 -1
- package/lib/cjs/rpc/tracing.js.map +1 -1
- package/lib/cjs/rpc/web/logging.js.map +1 -1
- package/lib/cjs/rpc/web/request.js.map +1 -1
- package/lib/cjs/rpc/web/response.js.map +1 -1
- package/lib/cjs/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/cjs/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/cjs/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +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.d.ts +6 -0
- package/lib/esm/BackendLoggerCategory.d.ts.map +1 -1
- package/lib/esm/BackendLoggerCategory.js +6 -0
- 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 +57 -3
- package/lib/esm/BriefcaseManager.d.ts.map +1 -1
- package/lib/esm/BriefcaseManager.js +151 -43
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangeSummaryManager.js +2 -2
- package/lib/esm/ChangeSummaryManager.js.map +1 -1
- package/lib/esm/ChangedElementsDb.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +248 -248
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.js +7 -7
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.d.ts +4 -0
- package/lib/esm/CloudSqlite.d.ts.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeService.js.map +1 -1
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/CustomViewState3dCreator.js.map +1 -1
- package/lib/esm/DevTools.js.map +1 -1
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.d.ts +8 -0
- package/lib/esm/ECDb.d.ts.map +1 -1
- package/lib/esm/ECDb.js +22 -0
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/Element.js.map +1 -1
- package/lib/esm/ElementAspect.js.map +1 -1
- package/lib/esm/ElementGraphics.js.map +1 -1
- package/lib/esm/ElementTreeWalker.js.map +1 -1
- package/lib/esm/Entity.js.map +1 -1
- package/lib/esm/EntityReferences.js.map +1 -1
- package/lib/esm/ExportGraphics.js.map +1 -1
- package/lib/esm/ExternalSource.js.map +1 -1
- package/lib/esm/FontFile.js.map +1 -1
- package/lib/esm/GeoCoordConfig.js.map +1 -1
- package/lib/esm/GeographicCRSServices.js.map +1 -1
- package/lib/esm/GeometrySummary.js +47 -47
- package/lib/esm/GeometrySummary.js.map +1 -1
- package/lib/esm/IModelDb.d.ts +54 -3
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +97 -19
- 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.d.ts +11 -1
- package/lib/esm/IModelHost.d.ts.map +1 -1
- package/lib/esm/IModelHost.js +5 -0
- package/lib/esm/IModelHost.js.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.d.ts +1 -5
- package/lib/esm/IModelIncrementalSchemaLocater.d.ts.map +1 -1
- package/lib/esm/IModelIncrementalSchemaLocater.js +0 -6
- package/lib/esm/IModelIncrementalSchemaLocater.js.map +1 -1
- package/lib/esm/IModelJsFs.js.map +1 -1
- package/lib/esm/ImageSourceConversion.js.map +1 -1
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.js +1 -1
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/LocalhostIpcHost.js.map +1 -1
- package/lib/esm/LockControl.js.map +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/NativeAppStorage.js.map +1 -1
- package/lib/esm/NativeHost.js.map +1 -1
- package/lib/esm/NavigationRelationship.js.map +1 -1
- package/lib/esm/PromiseMemoizer.js.map +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/RpcBackend.js.map +1 -1
- package/lib/esm/SQLiteDb.js.map +1 -1
- package/lib/esm/Schema.js.map +1 -1
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SchemaUtils.js.map +1 -1
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/SqliteChangesetReader.js.map +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/StashManager.d.ts +175 -0
- package/lib/esm/StashManager.d.ts.map +1 -0
- package/lib/esm/StashManager.js +301 -0
- package/lib/esm/StashManager.js.map +1 -0
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.d.ts +226 -15
- package/lib/esm/TxnManager.d.ts.map +1 -1
- package/lib/esm/TxnManager.js +247 -21
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts +10 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.d.ts.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js +10 -0
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.d.ts +3 -2
- package/lib/esm/annotations/LeaderGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js +4 -3
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.d.ts +52 -24
- package/lib/esm/annotations/TextAnnotationElement.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js +51 -61
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.d.ts +2 -0
- package/lib/esm/annotations/TextAnnotationGeometry.d.ts.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js +2 -2
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.d.ts +3 -9
- package/lib/esm/annotations/TextBlockLayout.d.ts.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js +3 -22
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/FunctionalSchema.js.map +1 -1
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/domains/GenericSchema.js.map +1 -1
- package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js +1 -1
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/NativePlatform.js.map +1 -1
- package/lib/esm/internal/NoLocks.js.map +1 -1
- package/lib/esm/internal/ServerBasedLocks.js.map +1 -1
- package/lib/esm/internal/Symbols.d.ts +1 -0
- package/lib/esm/internal/Symbols.d.ts.map +1 -1
- package/lib/esm/internal/Symbols.js +1 -0
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.d.ts.map +1 -1
- package/lib/esm/internal/annotations/fields.js +2 -1
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js +2 -2
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/esm/rpc/multipart.js.map +1 -1
- package/lib/esm/rpc/tracing.js.map +1 -1
- package/lib/esm/rpc/web/logging.js.map +1 -1
- package/lib/esm/rpc/web/request.js.map +1 -1
- package/lib/esm/rpc/web/response.js.map +1 -1
- package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/test/AdvancedEqual.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.d.ts +5 -1
- package/lib/esm/test/AnnotationTestUtils.d.ts.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js +6 -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/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/GeometryTestUtil.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
- package/lib/esm/test/IpcHost.test.js.map +1 -1
- package/lib/esm/test/KnownTestLocations.js.map +1 -1
- package/lib/esm/test/PrintElementTree.js.map +1 -1
- package/lib/esm/test/PropertyDb.test.js.map +1 -1
- package/lib/esm/test/RevisionUtility.js.map +1 -1
- package/lib/esm/test/SchemaUtils.test.js +25 -25
- package/lib/esm/test/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/SequentialLogMatcher.js.map +1 -1
- package/lib/esm/test/TestChangeSetUtility.js.map +1 -1
- package/lib/esm/test/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +42 -41
- package/lib/esm/test/annotations/Fields.test.js.map +1 -1
- package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js +12 -10
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js +299 -43
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js +39 -35
- 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.d.ts +2 -0
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.d.ts.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js +2 -0
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.map +1 -1
- package/lib/esm/test/categories/Category.test.js.map +1 -1
- package/lib/esm/test/codespec/CodeSpec.test.js.map +1 -1
- package/lib/esm/test/ecdb/CTE.test.js +88 -88
- package/lib/esm/test/ecdb/CTE.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js +15 -15
- package/lib/esm/test/ecdb/ConcurrentQueryLoad.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDb.test.js +128 -58
- package/lib/esm/test/ecdb/ECDb.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECDbTestHelper.js.map +1 -1
- package/lib/esm/test/ecdb/ECSchemaXmlContext.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlAst.test.js +65 -65
- package/lib/esm/test/ecdb/ECSqlAst.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlReader.test.js +16 -16
- package/lib/esm/test/ecdb/ECSqlReader.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +326 -326
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/SqliteStatement.test.js.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.d.ts.map +1 -1
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js +8 -2
- package/lib/esm/test/ecsql/dataset/ECSqlDatasets.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js +21 -21
- package/lib/esm/test/ecsql/src/ECSqlTestGenerator.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +22 -22
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +13 -13
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/FontFile.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.d.ts +2 -0
- package/lib/esm/test/hubaccess/Rebase.test.d.ts.map +1 -0
- package/lib/esm/test/hubaccess/Rebase.test.js +640 -0
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -0
- package/lib/esm/test/imageData.js.map +1 -1
- package/lib/esm/test/imodel/ElementTreeWalker.test.js.map +1 -1
- package/lib/esm/test/imodel/GetTextureImage.test.js.map +1 -1
- package/lib/esm/test/imodel/IModel.test.js +44 -44
- package/lib/esm/test/imodel/IModel.test.js.map +1 -1
- package/lib/esm/test/imodel/ProjectExtents.test.js.map +1 -1
- package/lib/esm/test/imodel/SchemaXmlImport.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js +20 -20
- package/lib/esm/test/incrementalSchemaLocater/ECSqlQueries.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js +3 -3
- package/lib/esm/test/incrementalSchemaLocater/IncrementalLoading.test.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IModelSchemaLocater.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/IncrementalTestHelper.js.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts +16 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.d.ts.map +1 -1
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.js +47 -0
- package/lib/esm/test/incrementalSchemaLocater/utils/TestSqlSchemaLocater.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 +99 -99
- package/lib/esm/test/schema/ClassRegistry.test.js.map +1 -1
- package/lib/esm/test/schema/FunctionalDomain.test.js.map +1 -1
- package/lib/esm/test/schema/GenericDomain.test.js.map +1 -1
- package/lib/esm/test/schema/IModelSchemaContext.test.js.map +1 -1
- package/lib/esm/test/sheetindex/SheetIndex.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangeMerge.test.js +15 -19
- package/lib/esm/test/standalone/ChangeMerge.test.js.map +1 -1
- package/lib/esm/test/standalone/ChangesetReader.test.js +117 -117
- package/lib/esm/test/standalone/ChangesetReader.test.js.map +1 -1
- package/lib/esm/test/standalone/CustomViewState3dCreator.test.js.map +1 -1
- package/lib/esm/test/standalone/DisplayStyle.test.js.map +1 -1
- package/lib/esm/test/standalone/Drawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/ElementMesh.test.js.map +1 -1
- package/lib/esm/test/standalone/ExportGraphics.test.js +14 -14
- package/lib/esm/test/standalone/ExportGraphics.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryChangeEvents.test.js.map +1 -1
- package/lib/esm/test/standalone/GeometryStream.test.js.map +1 -1
- package/lib/esm/test/standalone/HubMock.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelLimits.test.js.map +1 -1
- package/lib/esm/test/standalone/IModelWrite.test.js +27 -27
- package/lib/esm/test/standalone/IModelWrite.test.js.map +1 -1
- package/lib/esm/test/standalone/InlineGeometryPartReferences.test.js.map +1 -1
- package/lib/esm/test/standalone/MergeConflict.test.js +3 -3
- package/lib/esm/test/standalone/MergeConflict.test.js.map +1 -1
- package/lib/esm/test/standalone/NativeAppStorage.test.js +2 -2
- package/lib/esm/test/standalone/NativeAppStorage.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderMaterialElement.test.js.map +1 -1
- package/lib/esm/test/standalone/RenderTimeline.test.js.map +1 -1
- package/lib/esm/test/standalone/SQLiteDb.test.js.map +1 -1
- package/lib/esm/test/standalone/SchemaUtils.test.js.map +1 -1
- package/lib/esm/test/standalone/SectionDrawing.test.js.map +1 -1
- package/lib/esm/test/standalone/ServerBasedLocks.test.js.map +1 -1
- package/lib/esm/test/standalone/Setting.test.js.map +1 -1
- package/lib/esm/test/standalone/Settings.test.js.map +1 -1
- package/lib/esm/test/standalone/SettingsSchemas.test.js.map +1 -1
- package/lib/esm/test/standalone/SnapshotDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Texture.test.js.map +1 -1
- package/lib/esm/test/standalone/TileCache.test.js.map +1 -1
- package/lib/esm/test/standalone/TileTree.test.js.map +1 -1
- package/lib/esm/test/standalone/TxnManager.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewDefinition.test.js.map +1 -1
- package/lib/esm/test/standalone/ViewStoreDb.test.js.map +1 -1
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.d.ts +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +14 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CTE.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/CTE.test.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*--------------------------------------------------------------------------------------------*/\nimport { assert } from \"chai\";\nimport { QueryBinder, QueryRowFormat } from \"@itwin/core-common\";\nimport { IModelDb, SnapshotDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\nimport { SequentialLogMatcher } from \"../SequentialLogMatcher\";\n\n// cspell:ignore mirukuru ibim\n\nasync function executeQuery(iModel: IModelDb, ecsql: string, bindings?: any[] | object, abbreviateBlobs?: boolean): Promise<any[]> {\n const rows: any[] = [];\n for await (const queryRow of iModel.createQueryReader(ecsql, QueryBinder.from(bindings), { rowFormat: QueryRowFormat.UseJsPropertyNames, abbreviateBlobs })) {\n rows.push(queryRow.toRow());\n }\n return rows;\n}\n\ndescribe(\"Common table expression support in ECSQL\", () => {\n let imodel1: SnapshotDb;\n\n before(async () => {\n imodel1 = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\n });\n\n after(async () => {\n imodel1.close();\n });\n it(\"collect base properties recursively\", async () => {\n const query = `\n WITH RECURSIVE\n base_classes (aId, aParentId, aPath, aDepth) AS (\n SELECT c.ECInstanceId, null, c.Name, 0 FROM meta.ECClassDef c WHERE c.Name=?\n UNION ALL\n SELECT c.ECInstanceId, cbc.TargetECInstanceId, aPath || '/' || c.Name, aDepth + 1\n FROM meta.ECClassDef c\n JOIN meta.ClassHasBaseClasses cbc ON cbc.SourceECInstanceId = c.ECInstanceId\n JOIN base_classes ON aId = cbc.TargetECInstanceId\n ORDER BY 1\n )\n SELECT p.Name prop from base_classes join meta.ECPropertyDef p on p.Class.id = aId GROUP BY p.Name` ;\n const rows = await executeQuery(imodel1, query, [\"Element\"]);\n const expected = [\"Angle\", \"BaseModel\", \"BBoxHigh\", \"BBoxLow\", \"Border\", \"BorderTemplate\", \"Category\", \"CategorySelector\", \"CodeScope\", \"CodeSpec\", \"CodeValue\", \"Data\", \"Description\", \"DisplayStyle\", \"DrawingModel\", \"Enabled\", \"Extents\", \"EyePoint\", \"FederationGuid\", \"Flags\", \"FocusDistance\", \"Format\", \"GeometryStream\", \"Height\", \"InSpatialIndex\", \"IsCameraOn\", \"IsPrivate\", \"JsonProperties\", \"LastMod\", \"LensAngle\", \"Model\", \"ModelSelector\", \"Name\", \"Origin\", \"PaletteName\", \"Parent\", \"Pitch\", \"Properties\", \"Rank\", \"Recipe\", \"RepositoryGuid\", \"Roll\", \"Rotation\", \"RotationAngle\", \"Scale\", \"SheetTemplate\", \"Type\", \"TypeDefinition\", \"Url\", \"UserLabel\", \"View\", \"ViewAttachment\", \"Width\", \"Yaw\"];\n const actual = rows.map((r) => r.prop);\n assert.sameOrderedMembers(actual, expected);\n });\n\n it(\"generate mandelbrot set\", async () => {\n const rows = await executeQuery(imodel1, `\n WITH RECURSIVE\n [xaxis]([x]) AS(\n VALUES (- 2.0)\n UNION ALL\n SELECT [x] + 0.05\n FROM [xaxis]\n WHERE [x] < 1.2\n ),\n [yaxis]([y]) AS(\n VALUES (- 1.0)\n UNION ALL\n SELECT [y] + 0.1\n FROM [yaxis]\n WHERE [y] < 1.0\n ),\n [m]([iter], [cx], [cy], [x], [y]) AS(\n SELECT\n 0,\n [x],\n [y],\n 0.0,\n 0.0\n FROM [xaxis],\n [yaxis]\n UNION ALL\n SELECT\n [iter] + 1,\n [cx],\n [cy],\n [x] * [x] - [y] * [y] + [cx],\n 2.0 * [x] * [y] + [cy]\n FROM [m]\n WHERE ([x] * [x] + [y] * [y]) < 4.0 AND [iter] < 28\n ),\n [m2]([iter], [cx], [cy]) AS(\n SELECT\n MAX ([iter]),\n [cx],\n [cy]\n FROM [m]\n GROUP BY\n [cx],\n [cy]\n ),\n [a]([t]) AS(\n SELECT GROUP_CONCAT (SUBSTR (' .+*#', 1 + (CASE WHEN [iter] / 7 > 4 THEN 4 ELSE [iter] / 7 END), 1), '')\n FROM [m2]\n GROUP BY [cy]\n )\n SELECT GROUP_CONCAT (RTRIM ([t]), CHAR (0xa)) mandelbrot_set\n FROM [a];\n `);\n\n const expected =\n \" ....#\\n\" +\n \" ..#*..\\n\" +\n \" ..+####+.\\n\" +\n \" .......+####.... +\\n\" +\n \" ..##+*##########+.++++\\n\" +\n \" .+.##################+.\\n\" +\n \" .............+###################+.+\\n\" +\n \" ..++..#.....*#####################+.\\n\" +\n \" ...+#######++#######################.\\n\" +\n \" ....+*################################.\\n\" +\n \" #############################################...\\n\" +\n \" ....+*################################.\\n\" +\n \" ...+#######++#######################.\\n\" +\n \" ..++..#.....*#####################+.\\n\" +\n \" .............+###################+.+\\n\" +\n \" .+.##################+.\\n\" +\n \" ..##+*##########+.++++\\n\" +\n \" .......+####.... +\\n\" +\n \" ..+####+.\\n\" +\n \" ..#*..\\n\" +\n \" ....#\\n\" +\n \" +.\";\n assert(rows[0].mandelbrot_set === expected);\n });\n\n it(\"basic cte test\", async () => {\n let rows = [];\n rows = await executeQuery(imodel1, `\n WITH RECURSIVE\n cnt (x,y) AS (\n SELECT 100, 200\n UNION ALL\n SELECT x+1, 200 FROM cnt WHERE x<210\n )\n SELECT * from cnt`);\n assert(rows.length === 111);\n\n rows = await executeQuery(imodel1, `\n WITH RECURSIVE\n cnt (x,y) AS (\n SELECT 100, 200\n )\n SELECT * from cnt`);\n\n let slm = new SequentialLogMatcher();\n // these two are generated by sqlite\n slm.append().error().category(\"ECDb\").message(/BE_SQLITE_ERROR duplicate WITH table name/gm);\n assert(rows.length === 1);\n try {\n rows = await executeQuery(imodel1, `\n WITH\n cte_1 (a,b,c) AS (\n SELECT 100, 400, 300\n ),\n cte_1 (a,b,c) AS (\n SELECT 100, 400, 300\n )\n SELECT * from cte_1`);\n assert(false);\n } catch {\n assert(true); // should fail as cte_1 is used for two ct expression.\n }\n assert.isTrue(slm.finishAndDispose());\n slm = new SequentialLogMatcher();\n // these two are generated by ECSQL. Its not clear why this message is logged twice.\n slm.append().error().category(\"ECDb\").message(/Common table 'cte_1' has 3 values for columns 2/gm);\n try {\n rows = await executeQuery(imodel1, `\n WITH\n cte_1 (a,b,c) AS (\n SELECT 100, 400\n )\n SELECT * from cte_1`);\n assert(false);\n } catch {\n assert(true); // number are to ct expression does not match select\n }\n assert.isTrue(slm.finishAndDispose());\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"CTE.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/CTE.test.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\nimport { assert } from \"chai\";\r\nimport { QueryBinder, QueryRowFormat } from \"@itwin/core-common\";\r\nimport { IModelDb, SnapshotDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\nimport { SequentialLogMatcher } from \"../SequentialLogMatcher\";\r\n\r\n// cspell:ignore mirukuru ibim\r\n\r\nasync function executeQuery(iModel: IModelDb, ecsql: string, bindings?: any[] | object, abbreviateBlobs?: boolean): Promise<any[]> {\r\n const rows: any[] = [];\r\n for await (const queryRow of iModel.createQueryReader(ecsql, QueryBinder.from(bindings), { rowFormat: QueryRowFormat.UseJsPropertyNames, abbreviateBlobs })) {\r\n rows.push(queryRow.toRow());\r\n }\r\n return rows;\r\n}\r\n\r\ndescribe(\"Common table expression support in ECSQL\", () => {\r\n let imodel1: SnapshotDb;\r\n\r\n before(async () => {\r\n imodel1 = SnapshotDb.openFile(IModelTestUtils.resolveAssetFile(\"test.bim\"));\r\n });\r\n\r\n after(async () => {\r\n imodel1.close();\r\n });\r\n it(\"collect base properties recursively\", async () => {\r\n const query = `\r\n WITH RECURSIVE\r\n base_classes (aId, aParentId, aPath, aDepth) AS (\r\n SELECT c.ECInstanceId, null, c.Name, 0 FROM meta.ECClassDef c WHERE c.Name=?\r\n UNION ALL\r\n SELECT c.ECInstanceId, cbc.TargetECInstanceId, aPath || '/' || c.Name, aDepth + 1\r\n FROM meta.ECClassDef c\r\n JOIN meta.ClassHasBaseClasses cbc ON cbc.SourceECInstanceId = c.ECInstanceId\r\n JOIN base_classes ON aId = cbc.TargetECInstanceId\r\n ORDER BY 1\r\n )\r\n SELECT p.Name prop from base_classes join meta.ECPropertyDef p on p.Class.id = aId GROUP BY p.Name` ;\r\n const rows = await executeQuery(imodel1, query, [\"Element\"]);\r\n const expected = [\"Angle\", \"BaseModel\", \"BBoxHigh\", \"BBoxLow\", \"Border\", \"BorderTemplate\", \"Category\", \"CategorySelector\", \"CodeScope\", \"CodeSpec\", \"CodeValue\", \"Data\", \"Description\", \"DisplayStyle\", \"DrawingModel\", \"Enabled\", \"Extents\", \"EyePoint\", \"FederationGuid\", \"Flags\", \"FocusDistance\", \"Format\", \"GeometryStream\", \"Height\", \"InSpatialIndex\", \"IsCameraOn\", \"IsPrivate\", \"JsonProperties\", \"LastMod\", \"LensAngle\", \"Model\", \"ModelSelector\", \"Name\", \"Origin\", \"PaletteName\", \"Parent\", \"Pitch\", \"Properties\", \"Rank\", \"Recipe\", \"RepositoryGuid\", \"Roll\", \"Rotation\", \"RotationAngle\", \"Scale\", \"SheetTemplate\", \"Type\", \"TypeDefinition\", \"Url\", \"UserLabel\", \"View\", \"ViewAttachment\", \"Width\", \"Yaw\"];\r\n const actual = rows.map((r) => r.prop);\r\n assert.sameOrderedMembers(actual, expected);\r\n });\r\n\r\n it(\"generate mandelbrot set\", async () => {\r\n const rows = await executeQuery(imodel1, `\r\n WITH RECURSIVE\r\n [xaxis]([x]) AS(\r\n VALUES (- 2.0)\r\n UNION ALL\r\n SELECT [x] + 0.05\r\n FROM [xaxis]\r\n WHERE [x] < 1.2\r\n ),\r\n [yaxis]([y]) AS(\r\n VALUES (- 1.0)\r\n UNION ALL\r\n SELECT [y] + 0.1\r\n FROM [yaxis]\r\n WHERE [y] < 1.0\r\n ),\r\n [m]([iter], [cx], [cy], [x], [y]) AS(\r\n SELECT\r\n 0,\r\n [x],\r\n [y],\r\n 0.0,\r\n 0.0\r\n FROM [xaxis],\r\n [yaxis]\r\n UNION ALL\r\n SELECT\r\n [iter] + 1,\r\n [cx],\r\n [cy],\r\n [x] * [x] - [y] * [y] + [cx],\r\n 2.0 * [x] * [y] + [cy]\r\n FROM [m]\r\n WHERE ([x] * [x] + [y] * [y]) < 4.0 AND [iter] < 28\r\n ),\r\n [m2]([iter], [cx], [cy]) AS(\r\n SELECT\r\n MAX ([iter]),\r\n [cx],\r\n [cy]\r\n FROM [m]\r\n GROUP BY\r\n [cx],\r\n [cy]\r\n ),\r\n [a]([t]) AS(\r\n SELECT GROUP_CONCAT (SUBSTR (' .+*#', 1 + (CASE WHEN [iter] / 7 > 4 THEN 4 ELSE [iter] / 7 END), 1), '')\r\n FROM [m2]\r\n GROUP BY [cy]\r\n )\r\n SELECT GROUP_CONCAT (RTRIM ([t]), CHAR (0xa)) mandelbrot_set\r\n FROM [a];\r\n `);\r\n\r\n const expected =\r\n \" ....#\\n\" +\r\n \" ..#*..\\n\" +\r\n \" ..+####+.\\n\" +\r\n \" .......+####.... +\\n\" +\r\n \" ..##+*##########+.++++\\n\" +\r\n \" .+.##################+.\\n\" +\r\n \" .............+###################+.+\\n\" +\r\n \" ..++..#.....*#####################+.\\n\" +\r\n \" ...+#######++#######################.\\n\" +\r\n \" ....+*################################.\\n\" +\r\n \" #############################################...\\n\" +\r\n \" ....+*################################.\\n\" +\r\n \" ...+#######++#######################.\\n\" +\r\n \" ..++..#.....*#####################+.\\n\" +\r\n \" .............+###################+.+\\n\" +\r\n \" .+.##################+.\\n\" +\r\n \" ..##+*##########+.++++\\n\" +\r\n \" .......+####.... +\\n\" +\r\n \" ..+####+.\\n\" +\r\n \" ..#*..\\n\" +\r\n \" ....#\\n\" +\r\n \" +.\";\r\n assert(rows[0].mandelbrot_set === expected);\r\n });\r\n\r\n it(\"basic cte test\", async () => {\r\n let rows = [];\r\n rows = await executeQuery(imodel1, `\r\n WITH RECURSIVE\r\n cnt (x,y) AS (\r\n SELECT 100, 200\r\n UNION ALL\r\n SELECT x+1, 200 FROM cnt WHERE x<210\r\n )\r\n SELECT * from cnt`);\r\n assert(rows.length === 111);\r\n\r\n rows = await executeQuery(imodel1, `\r\n WITH RECURSIVE\r\n cnt (x,y) AS (\r\n SELECT 100, 200\r\n )\r\n SELECT * from cnt`);\r\n\r\n let slm = new SequentialLogMatcher();\r\n // these two are generated by sqlite\r\n slm.append().error().category(\"ECDb\").message(/BE_SQLITE_ERROR duplicate WITH table name/gm);\r\n assert(rows.length === 1);\r\n try {\r\n rows = await executeQuery(imodel1, `\r\n WITH\r\n cte_1 (a,b,c) AS (\r\n SELECT 100, 400, 300\r\n ),\r\n cte_1 (a,b,c) AS (\r\n SELECT 100, 400, 300\r\n )\r\n SELECT * from cte_1`);\r\n assert(false);\r\n } catch {\r\n assert(true); // should fail as cte_1 is used for two ct expression.\r\n }\r\n assert.isTrue(slm.finishAndDispose());\r\n slm = new SequentialLogMatcher();\r\n // these two are generated by ECSQL. Its not clear why this message is logged twice.\r\n slm.append().error().category(\"ECDb\").message(/Common table 'cte_1' has 3 values for columns 2/gm);\r\n try {\r\n rows = await executeQuery(imodel1, `\r\n WITH\r\n cte_1 (a,b,c) AS (\r\n SELECT 100, 400\r\n )\r\n SELECT * from cte_1`);\r\n assert(false);\r\n } catch {\r\n assert(true); // number are to ct expression does not match select\r\n }\r\n assert.isTrue(slm.finishAndDispose());\r\n });\r\n});\r\n"]}
|
|
@@ -56,8 +56,8 @@ describe("ConcurrentQuery", () => {
|
|
|
56
56
|
ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 1, memory: 100000 }, progressOpCount: 1000 });
|
|
57
57
|
// await runSingleRequest(db, `SELECT 1`);
|
|
58
58
|
const req = {
|
|
59
|
-
query: `WITH sequence(n,k) AS (
|
|
60
|
-
SELECT 1,1 UNION ALL SELECT n + 1, random() FROM sequence WHERE n < 10000000
|
|
59
|
+
query: `WITH sequence(n,k) AS (
|
|
60
|
+
SELECT 1,1 UNION ALL SELECT n + 1, random() FROM sequence WHERE n < 10000000
|
|
61
61
|
) SELECT COUNT(*) FROM sequence s`
|
|
62
62
|
};
|
|
63
63
|
const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);
|
|
@@ -76,11 +76,11 @@ describe("ConcurrentQuery", () => {
|
|
|
76
76
|
ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 60, memory: 1000 }, progressOpCount: 1000 });
|
|
77
77
|
// await runSingleRequest(db, `SELECT 1`);
|
|
78
78
|
const req = {
|
|
79
|
-
query: `WITH sequence(n) AS (
|
|
80
|
-
SELECT 1
|
|
81
|
-
UNION ALL
|
|
82
|
-
SELECT n + 1 FROM sequence WHERE n < 10000000
|
|
83
|
-
)
|
|
79
|
+
query: `WITH sequence(n) AS (
|
|
80
|
+
SELECT 1
|
|
81
|
+
UNION ALL
|
|
82
|
+
SELECT n + 1 FROM sequence WHERE n < 10000000
|
|
83
|
+
)
|
|
84
84
|
SELECT 'xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx' FROM sequence s`
|
|
85
85
|
};
|
|
86
86
|
const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);
|
|
@@ -105,14 +105,14 @@ describe("ConcurrentQuery", () => {
|
|
|
105
105
|
const db = SnapshotDb.openFile(testFile);
|
|
106
106
|
ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 60, memory: 10000000 }, progressOpCount: 1000 });
|
|
107
107
|
const req0 = {
|
|
108
|
-
query: `WITH sequence(n) AS (
|
|
109
|
-
SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
|
|
108
|
+
query: `WITH sequence(n) AS (
|
|
109
|
+
SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
|
|
110
110
|
) SELECT n FROM sequence s`,
|
|
111
111
|
restartToken: "Blah",
|
|
112
112
|
};
|
|
113
113
|
const req1 = {
|
|
114
|
-
query: `WITH sequence(n) AS (
|
|
115
|
-
SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 1000
|
|
114
|
+
query: `WITH sequence(n) AS (
|
|
115
|
+
SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 1000
|
|
116
116
|
) SELECT n FROM sequence s`,
|
|
117
117
|
restartToken: "Blah",
|
|
118
118
|
};
|
|
@@ -129,8 +129,8 @@ describe("ConcurrentQuery", () => {
|
|
|
129
129
|
const db = SnapshotDb.openFile(testFile);
|
|
130
130
|
ConcurrentQuery.resetConfig(db[_nativeDb], { requestQueueSize: 40, globalQuota: { time: 5, memory: 100000 } });
|
|
131
131
|
const req = {
|
|
132
|
-
query: `WITH sequence(n) AS (
|
|
133
|
-
SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
|
|
132
|
+
query: `WITH sequence(n) AS (
|
|
133
|
+
SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
|
|
134
134
|
) SELECT n FROM sequence s`,
|
|
135
135
|
};
|
|
136
136
|
const responsePromises = [];
|
|
@@ -147,8 +147,8 @@ describe("ConcurrentQuery", () => {
|
|
|
147
147
|
const db = SnapshotDb.openFile(testFile);
|
|
148
148
|
ConcurrentQuery.resetConfig(db[_nativeDb], { monitorPollInterval: 1, globalQuota: { time: 5, memory: 10000000 } });
|
|
149
149
|
const req = {
|
|
150
|
-
query: `WITH sequence(n) AS (
|
|
151
|
-
SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
|
|
150
|
+
query: `WITH sequence(n) AS (
|
|
151
|
+
SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000
|
|
152
152
|
) SELECT n FROM sequence s`,
|
|
153
153
|
};
|
|
154
154
|
const responsePromises = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConcurrentQuery.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ConcurrentQuery.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { DbQueryRequest, DbQueryResponse, DbResponseStatus } from \"@itwin/core-common\";\nimport { expect } from \"chai\";\nimport { ConcurrentQuery } from \"../../ConcurrentQuery\";\nimport { SnapshotDb } from \"../../IModelDb\";\nimport { _nativeDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\nasync function delay(ms: number): Promise<void> {\n return new Promise(resolve => {\n setTimeout(resolve, ms);\n });\n}\n\ndescribe(\"ConcurrentQuery\", () => {\n it(\"default config\", () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n const defaultConfig = {\n autoShutdownWhenIdleForSeconds: 1800,\n doNotUsePrimaryConnToPrepare: false,\n globalQuota: { time: 60, memory: 8388608 },\n ignoreDelay: true,\n ignorePriority: false,\n memoryMapFileSize: 0,\n monitorPollInterval: 5000,\n progressOpCount: 5000,\n requestQueueSize: 2000,\n statementCacheSizePerWorker: 40,\n workerThreads: 4,\n };\n const config = ConcurrentQuery.resetConfig(db[_nativeDb], {});\n expect(config).deep.eq(defaultConfig);\n db.close();\n });\n\n it(\"modify config\", () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n const modifiedConfig = {\n autoShutdownWhenIdleForSeconds: 100,\n doNotUsePrimaryConnToPrepare: true,\n globalQuota: { time: 10, memory: 1000000 },\n ignoreDelay: false,\n ignorePriority: true,\n memoryMapFileSize: 100,\n monitorPollInterval: 2000,\n progressOpCount: 6000,\n requestQueueSize: 1000,\n statementCacheSizePerWorker: 20,\n workerThreads: 3,\n };\n const config = ConcurrentQuery.resetConfig(db[_nativeDb], modifiedConfig);\n expect(config).deep.eq(modifiedConfig);\n db.close();\n });\n\n it(\"time limit check\", async () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 1, memory: 100000 }, progressOpCount: 1000 });\n // await runSingleRequest(db, `SELECT 1`);\n const req: DbQueryRequest = {\n query: `WITH sequence(n,k) AS (\n SELECT 1,1 UNION ALL SELECT n + 1, random() FROM sequence WHERE n < 10000000\n ) SELECT COUNT(*) FROM sequence s`\n };\n\n const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);\n expect(resp.status).equals(DbResponseStatus.Partial);\n expect(resp.stats.timeLimit).equals(1000);\n expect(resp.stats.memLimit).equals(100000);\n expect(resp.stats.cpuTime).to.be.closeTo(1000970, 500000);\n expect(resp.stats.totalTime).to.be.closeTo(1001, 100);\n expect(resp.stats.memUsed).to.be.closeTo(2, 3);\n expect(resp.stats.prepareTime).to.be.closeTo(0, 2);\n db.close();\n });\n\n it(\"memory limit check\", async () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 60, memory: 1000 }, progressOpCount: 1000 });\n // await runSingleRequest(db, `SELECT 1`);\n const req: DbQueryRequest = {\n query: `WITH sequence(n) AS (\n SELECT 1\n UNION ALL\n SELECT n + 1 FROM sequence WHERE n < 10000000\n )\n SELECT 'xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx' FROM sequence s`\n };\n\n const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);\n expect(resp.status).equals(DbResponseStatus.Partial);\n expect(resp.stats.timeLimit).equals(60000);\n expect(resp.stats.memLimit).equals(1000);\n expect(resp.stats.memUsed).to.be.closeTo(1037, 100);\n db.close();\n });\n\n it(\"prepare error\", async () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n const req: DbQueryRequest = {\n query: `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`\n };\n\n const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);\n expect(resp.status).equals(DbResponseStatus.Error_ECSql_PreparedFailed);\n db.close();\n });\n\n it(\"restart query\", async () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 60, memory: 10000000 }, progressOpCount: 1000 });\n const req0: DbQueryRequest = {\n query: `WITH sequence(n) AS (\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000\n ) SELECT n FROM sequence s`,\n restartToken: \"Blah\",\n };\n\n const req1: DbQueryRequest = {\n query: `WITH sequence(n) AS (\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 1000\n ) SELECT n FROM sequence s`,\n restartToken: \"Blah\",\n };\n\n const resp1 = ConcurrentQuery.executeQueryRequest(db[_nativeDb], req0);\n await delay(1);\n const resp2 = ConcurrentQuery.executeQueryRequest(db[_nativeDb], req1);\n const resp = await Promise.all([resp1, resp2]);\n expect(resp[0].status).equals(DbResponseStatus.Cancel);\n expect(resp[1].status).equals(DbResponseStatus.Done);\n db.close();\n });\n\n it(\"queue limit check\", async () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n ConcurrentQuery.resetConfig(db[_nativeDb], { requestQueueSize: 40, globalQuota: { time: 5, memory: 100000 } });\n const req: DbQueryRequest = {\n query: `WITH sequence(n) AS (\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000\n ) SELECT n FROM sequence s`,\n };\n\n const responsePromises: Promise<DbQueryResponse>[] = [];\n for (let i = 0; i < 60; ++i) {\n responsePromises.push(ConcurrentQuery.executeQueryRequest(db[_nativeDb], req));\n }\n const responses = await Promise.all(responsePromises);\n const queueResponses = Array.from(responses.filter((x) => x.status === DbResponseStatus.QueueFull));\n expect(queueResponses.length).to.be.greaterThanOrEqual(10);\n db.close();\n });\n\n it(\"timeout check\", async () => {\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(testFile);\n ConcurrentQuery.resetConfig(db[_nativeDb], { monitorPollInterval: 1, globalQuota: { time: 5, memory: 10000000 } });\n const req: DbQueryRequest = {\n query: `WITH sequence(n) AS (\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000\n ) SELECT n FROM sequence s`,\n };\n\n const responsePromises: Promise<DbQueryResponse>[] = [];\n for (let i = 0; i < 100; ++i) {\n responsePromises.push(ConcurrentQuery.executeQueryRequest(db[_nativeDb], req));\n }\n const responses = await Promise.all(responsePromises);\n const queueResponses = Array.from(responses.filter((x) => x.status === DbResponseStatus.Timeout));\n expect(queueResponses.length).to.be.greaterThanOrEqual(10);\n db.close();\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"ConcurrentQuery.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ConcurrentQuery.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { DbQueryRequest, DbQueryResponse, DbResponseStatus } from \"@itwin/core-common\";\r\nimport { expect } from \"chai\";\r\nimport { ConcurrentQuery } from \"../../ConcurrentQuery\";\r\nimport { SnapshotDb } from \"../../IModelDb\";\r\nimport { _nativeDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\nasync function delay(ms: number): Promise<void> {\r\n return new Promise(resolve => {\r\n setTimeout(resolve, ms);\r\n });\r\n}\r\n\r\ndescribe(\"ConcurrentQuery\", () => {\r\n it(\"default config\", () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n const defaultConfig = {\r\n autoShutdownWhenIdleForSeconds: 1800,\r\n doNotUsePrimaryConnToPrepare: false,\r\n globalQuota: { time: 60, memory: 8388608 },\r\n ignoreDelay: true,\r\n ignorePriority: false,\r\n memoryMapFileSize: 0,\r\n monitorPollInterval: 5000,\r\n progressOpCount: 5000,\r\n requestQueueSize: 2000,\r\n statementCacheSizePerWorker: 40,\r\n workerThreads: 4,\r\n };\r\n const config = ConcurrentQuery.resetConfig(db[_nativeDb], {});\r\n expect(config).deep.eq(defaultConfig);\r\n db.close();\r\n });\r\n\r\n it(\"modify config\", () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n const modifiedConfig = {\r\n autoShutdownWhenIdleForSeconds: 100,\r\n doNotUsePrimaryConnToPrepare: true,\r\n globalQuota: { time: 10, memory: 1000000 },\r\n ignoreDelay: false,\r\n ignorePriority: true,\r\n memoryMapFileSize: 100,\r\n monitorPollInterval: 2000,\r\n progressOpCount: 6000,\r\n requestQueueSize: 1000,\r\n statementCacheSizePerWorker: 20,\r\n workerThreads: 3,\r\n };\r\n const config = ConcurrentQuery.resetConfig(db[_nativeDb], modifiedConfig);\r\n expect(config).deep.eq(modifiedConfig);\r\n db.close();\r\n });\r\n\r\n it(\"time limit check\", async () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 1, memory: 100000 }, progressOpCount: 1000 });\r\n // await runSingleRequest(db, `SELECT 1`);\r\n const req: DbQueryRequest = {\r\n query: `WITH sequence(n,k) AS (\r\n SELECT 1,1 UNION ALL SELECT n + 1, random() FROM sequence WHERE n < 10000000\r\n ) SELECT COUNT(*) FROM sequence s`\r\n };\r\n\r\n const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);\r\n expect(resp.status).equals(DbResponseStatus.Partial);\r\n expect(resp.stats.timeLimit).equals(1000);\r\n expect(resp.stats.memLimit).equals(100000);\r\n expect(resp.stats.cpuTime).to.be.closeTo(1000970, 500000);\r\n expect(resp.stats.totalTime).to.be.closeTo(1001, 100);\r\n expect(resp.stats.memUsed).to.be.closeTo(2, 3);\r\n expect(resp.stats.prepareTime).to.be.closeTo(0, 2);\r\n db.close();\r\n });\r\n\r\n it(\"memory limit check\", async () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 60, memory: 1000 }, progressOpCount: 1000 });\r\n // await runSingleRequest(db, `SELECT 1`);\r\n const req: DbQueryRequest = {\r\n query: `WITH sequence(n) AS (\r\n SELECT 1\r\n UNION ALL\r\n SELECT n + 1 FROM sequence WHERE n < 10000000\r\n )\r\n SELECT 'xxxxxxxxxx-xxxxxxxxxx-xxxxxxxxxx' FROM sequence s`\r\n };\r\n\r\n const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);\r\n expect(resp.status).equals(DbResponseStatus.Partial);\r\n expect(resp.stats.timeLimit).equals(60000);\r\n expect(resp.stats.memLimit).equals(1000);\r\n expect(resp.stats.memUsed).to.be.closeTo(1037, 100);\r\n db.close();\r\n });\r\n\r\n it(\"prepare error\", async () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n const req: DbQueryRequest = {\r\n query: `xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx`\r\n };\r\n\r\n const resp = await ConcurrentQuery.executeQueryRequest(db[_nativeDb], req);\r\n expect(resp.status).equals(DbResponseStatus.Error_ECSql_PreparedFailed);\r\n db.close();\r\n });\r\n\r\n it(\"restart query\", async () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n ConcurrentQuery.resetConfig(db[_nativeDb], { globalQuota: { time: 60, memory: 10000000 }, progressOpCount: 1000 });\r\n const req0: DbQueryRequest = {\r\n query: `WITH sequence(n) AS (\r\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000\r\n ) SELECT n FROM sequence s`,\r\n restartToken: \"Blah\",\r\n };\r\n\r\n const req1: DbQueryRequest = {\r\n query: `WITH sequence(n) AS (\r\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 1000\r\n ) SELECT n FROM sequence s`,\r\n restartToken: \"Blah\",\r\n };\r\n\r\n const resp1 = ConcurrentQuery.executeQueryRequest(db[_nativeDb], req0);\r\n await delay(1);\r\n const resp2 = ConcurrentQuery.executeQueryRequest(db[_nativeDb], req1);\r\n const resp = await Promise.all([resp1, resp2]);\r\n expect(resp[0].status).equals(DbResponseStatus.Cancel);\r\n expect(resp[1].status).equals(DbResponseStatus.Done);\r\n db.close();\r\n });\r\n\r\n it(\"queue limit check\", async () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n ConcurrentQuery.resetConfig(db[_nativeDb], { requestQueueSize: 40, globalQuota: { time: 5, memory: 100000 } });\r\n const req: DbQueryRequest = {\r\n query: `WITH sequence(n) AS (\r\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000\r\n ) SELECT n FROM sequence s`,\r\n };\r\n\r\n const responsePromises: Promise<DbQueryResponse>[] = [];\r\n for (let i = 0; i < 60; ++i) {\r\n responsePromises.push(ConcurrentQuery.executeQueryRequest(db[_nativeDb], req));\r\n }\r\n const responses = await Promise.all(responsePromises);\r\n const queueResponses = Array.from(responses.filter((x) => x.status === DbResponseStatus.QueueFull));\r\n expect(queueResponses.length).to.be.greaterThanOrEqual(10);\r\n db.close();\r\n });\r\n\r\n it(\"timeout check\", async () => {\r\n const testFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(testFile);\r\n ConcurrentQuery.resetConfig(db[_nativeDb], { monitorPollInterval: 1, globalQuota: { time: 5, memory: 10000000 } });\r\n const req: DbQueryRequest = {\r\n query: `WITH sequence(n) AS (\r\n SELECT 1 UNION ALL SELECT n + 1 FROM sequence WHERE n < 10000000\r\n ) SELECT n FROM sequence s`,\r\n };\r\n\r\n const responsePromises: Promise<DbQueryResponse>[] = [];\r\n for (let i = 0; i < 100; ++i) {\r\n responsePromises.push(ConcurrentQuery.executeQueryRequest(db[_nativeDb], req));\r\n }\r\n const responses = await Promise.all(responsePromises);\r\n const queueResponses = Array.from(responses.filter((x) => x.status === DbResponseStatus.Timeout));\r\n expect(queueResponses.length).to.be.greaterThanOrEqual(10);\r\n db.close();\r\n });\r\n});\r\n"]}
|
|
@@ -116,24 +116,24 @@ describe.skip("ConcurrentQueryLoad", () => {
|
|
|
116
116
|
createReader: (dbs) => {
|
|
117
117
|
const queries = [
|
|
118
118
|
{
|
|
119
|
-
sql: `
|
|
120
|
-
WITH sequence(n) AS (
|
|
121
|
-
SELECT 1
|
|
122
|
-
UNION ALL
|
|
123
|
-
SELECT n + 1 FROM sequence WHERE n < 10000000
|
|
124
|
-
)
|
|
125
|
-
SELECT COUNT(*)
|
|
126
|
-
FROM bis.SpatialIndex i, sequence s
|
|
127
|
-
WHERE i.ECInstanceId MATCH iModel_spatial_overlap_aabb(
|
|
119
|
+
sql: `
|
|
120
|
+
WITH sequence(n) AS (
|
|
121
|
+
SELECT 1
|
|
122
|
+
UNION ALL
|
|
123
|
+
SELECT n + 1 FROM sequence WHERE n < 10000000
|
|
124
|
+
)
|
|
125
|
+
SELECT COUNT(*)
|
|
126
|
+
FROM bis.SpatialIndex i, sequence s
|
|
127
|
+
WHERE i.ECInstanceId MATCH iModel_spatial_overlap_aabb(
|
|
128
128
|
iModel_bbox(random(), random(), random(), random(),random(), random()))`
|
|
129
129
|
},
|
|
130
130
|
{
|
|
131
|
-
sql: `
|
|
132
|
-
WITH sequence(n) AS (
|
|
133
|
-
SELECT 1
|
|
134
|
-
UNION ALL
|
|
135
|
-
SELECT n + 1 FROM sequence WHERE n < 10000000
|
|
136
|
-
)
|
|
131
|
+
sql: `
|
|
132
|
+
WITH sequence(n) AS (
|
|
133
|
+
SELECT 1
|
|
134
|
+
UNION ALL
|
|
135
|
+
SELECT n + 1 FROM sequence WHERE n < 10000000
|
|
136
|
+
)
|
|
137
137
|
SELECT COUNT(*) FROM sequence`
|
|
138
138
|
},
|
|
139
139
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConcurrentQueryLoad.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ConcurrentQueryLoad.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger, LogLevel, StopWatch } from \"@itwin/core-bentley\";\nimport { DbQueryConfig, ECSqlReader, QueryStats } from \"@itwin/core-common\";\nimport { expect } from \"chai\";\nimport { ConcurrentQuery } from \"../../ConcurrentQuery\";\nimport { ECDb } from \"../../ECDb\";\nimport { IModelDb, SnapshotDb } from \"../../IModelDb\";\nimport { _nativeDb } from \"../../core-backend\";\nimport { IModelTestUtils } from \"../IModelTestUtils\";\n\ninterface ITaskResult {\n stats: QueryStats;\n error?: any;\n}\n\ninterface IScenario {\n name: string;\n config?: DbQueryConfig;\n totalBatches: number;\n taskPerBatch: number;\n createReader: (db: ECDb | IModelDb) => ECSqlReader;\n}\n\nclass LoadSimulator {\n constructor(public db: ECDb | IModelDb, public scenario: IScenario) { }\n private async runQueryTask(reader: ECSqlReader): Promise<ITaskResult> {\n try {\n while (await reader.step()) { }\n return { stats: reader.stats };\n } catch (err) {\n return { stats: reader.stats, error: err };\n }\n }\n\n public async run() {\n ConcurrentQuery.shutdown(this.db[_nativeDb]);\n if (this.scenario.config) {\n const config = ConcurrentQuery.resetConfig(this.db[_nativeDb], this.scenario.config);\n // eslint-disable-next-line no-console\n console.log(config);\n }\n const overallTime = new StopWatch();\n overallTime.start();\n const results: ITaskResult[] = [];\n for (let i = 0; i < this.scenario.totalBatches; ++i) {\n const promises: Promise<ITaskResult>[] = [];\n const readerTasks = Array(this.scenario.taskPerBatch).fill(undefined).map(() => this.scenario.createReader(this.db));\n readerTasks.forEach((reader) => {\n promises.push(this.runQueryTask(reader));\n });\n results.push(... await Promise.all(promises));\n\n }\n overallTime.stop();\n const errors = results.filter((x) => x.error !== undefined);\n const errorsMap = new Map<string, number>();\n errors.forEach((x) => {\n if (x.error instanceof Error) {\n if (!errorsMap.has(x.error.message)) {\n errorsMap.set(x.error.message, 1);\n } else {\n errorsMap.set(x.error.message, errorsMap.get(x.error.message)! + 1);\n }\n } else {\n if (!errorsMap.has(\"error\")) {\n errorsMap.set(\"error\", 1);\n } else {\n errorsMap.set(\"error\", errorsMap.get(\"error\")! + 1);\n }\n }\n });\n const errorCount = errors.length;\n let backendCpuTime: bigint = BigInt(0);\n let backendTotalTime: bigint = BigInt(0);\n let backendMemUsed: bigint = BigInt(0);\n let backendRowsReturned: bigint = BigInt(0);\n let totalTime: bigint = BigInt(0);\n let retryCount: bigint = BigInt(0);\n let prepareTime: bigint = BigInt(0);\n\n // Calculate average\n results.forEach((r: ITaskResult) => {\n backendCpuTime += BigInt(r.stats.backendCpuTime);\n backendTotalTime += BigInt(r.stats.backendTotalTime);\n backendMemUsed += BigInt(r.stats.backendMemUsed);\n backendRowsReturned += BigInt(r.stats.backendRowsReturned);\n totalTime += BigInt(r.stats.totalTime);\n retryCount += BigInt(r.stats.retryCount);\n prepareTime += BigInt(r.stats.prepareTime);\n });\n\n backendCpuTime /= BigInt(results.length);\n backendTotalTime /= BigInt(results.length);\n backendMemUsed /= BigInt(results.length);\n backendRowsReturned /= BigInt(results.length);\n totalTime /= BigInt(results.length);\n retryCount /= BigInt(results.length);\n // prepareTime /= BigInt(results.length);\n\n return {\n result: {\n backendCpuTime,\n backendTotalTime,\n backendMemUsed,\n backendRowsReturned,\n totalTime,\n retryCount,\n prepareTime,\n },\n overallTimeInSec: overallTime.currentSeconds,\n errorCount,\n totalQueries: results.length,\n errorMap: errorsMap\n };\n\n }\n}\ndescribe.skip(\"ConcurrentQueryLoad\", () => {\n it(\"should run\", async () => {\n Logger.initializeToConsole();\n Logger.setLevel(\"ECDb.ConcurrentQuery\", LogLevel.Trace);\n\n const scenario: IScenario = {\n name: \"ConcurrentQueryLoad\",\n config: {\n globalQuota: { time: 1, memory: 8388608 },\n workerThreads: 1,\n },\n totalBatches: 1,\n taskPerBatch: 1,\n createReader: (dbs: ECDb | IModelDb) => {\n const queries = [\n {\n sql: `\n WITH sequence(n) AS (\n SELECT 1\n UNION ALL\n SELECT n + 1 FROM sequence WHERE n < 10000000\n )\n SELECT COUNT(*)\n FROM bis.SpatialIndex i, sequence s\n WHERE i.ECInstanceId MATCH iModel_spatial_overlap_aabb(\n iModel_bbox(random(), random(), random(), random(),random(), random()))`\n },\n {\n sql: `\n WITH sequence(n) AS (\n SELECT 1\n UNION ALL\n SELECT n + 1 FROM sequence WHERE n < 10000000\n )\n SELECT COUNT(*) FROM sequence`\n },\n {\n sql: \"SELECT $ FROM bis.Element LIMIT 10000\"\n }\n ];\n const idx = Math.floor(Math.random() * queries.length);\n return dbs.createQueryReader(queries[idx].sql);\n }\n };\n\n const verySmallFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\n const db = SnapshotDb.openFile(verySmallFile);\n const simulator = new LoadSimulator(db, scenario);\n const result = await simulator.run();\n // eslint-disable-next-line no-console\n console.log(result);\n db.close();\n expect(result.errorCount).to.be.equal(0);\n });\n});\n"]}
|
|
1
|
+
{"version":3,"file":"ConcurrentQueryLoad.test.js","sourceRoot":"","sources":["../../../../src/test/ecdb/ConcurrentQueryLoad.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { Logger, LogLevel, StopWatch } from \"@itwin/core-bentley\";\r\nimport { DbQueryConfig, ECSqlReader, QueryStats } from \"@itwin/core-common\";\r\nimport { expect } from \"chai\";\r\nimport { ConcurrentQuery } from \"../../ConcurrentQuery\";\r\nimport { ECDb } from \"../../ECDb\";\r\nimport { IModelDb, SnapshotDb } from \"../../IModelDb\";\r\nimport { _nativeDb } from \"../../core-backend\";\r\nimport { IModelTestUtils } from \"../IModelTestUtils\";\r\n\r\ninterface ITaskResult {\r\n stats: QueryStats;\r\n error?: any;\r\n}\r\n\r\ninterface IScenario {\r\n name: string;\r\n config?: DbQueryConfig;\r\n totalBatches: number;\r\n taskPerBatch: number;\r\n createReader: (db: ECDb | IModelDb) => ECSqlReader;\r\n}\r\n\r\nclass LoadSimulator {\r\n constructor(public db: ECDb | IModelDb, public scenario: IScenario) { }\r\n private async runQueryTask(reader: ECSqlReader): Promise<ITaskResult> {\r\n try {\r\n while (await reader.step()) { }\r\n return { stats: reader.stats };\r\n } catch (err) {\r\n return { stats: reader.stats, error: err };\r\n }\r\n }\r\n\r\n public async run() {\r\n ConcurrentQuery.shutdown(this.db[_nativeDb]);\r\n if (this.scenario.config) {\r\n const config = ConcurrentQuery.resetConfig(this.db[_nativeDb], this.scenario.config);\r\n // eslint-disable-next-line no-console\r\n console.log(config);\r\n }\r\n const overallTime = new StopWatch();\r\n overallTime.start();\r\n const results: ITaskResult[] = [];\r\n for (let i = 0; i < this.scenario.totalBatches; ++i) {\r\n const promises: Promise<ITaskResult>[] = [];\r\n const readerTasks = Array(this.scenario.taskPerBatch).fill(undefined).map(() => this.scenario.createReader(this.db));\r\n readerTasks.forEach((reader) => {\r\n promises.push(this.runQueryTask(reader));\r\n });\r\n results.push(... await Promise.all(promises));\r\n\r\n }\r\n overallTime.stop();\r\n const errors = results.filter((x) => x.error !== undefined);\r\n const errorsMap = new Map<string, number>();\r\n errors.forEach((x) => {\r\n if (x.error instanceof Error) {\r\n if (!errorsMap.has(x.error.message)) {\r\n errorsMap.set(x.error.message, 1);\r\n } else {\r\n errorsMap.set(x.error.message, errorsMap.get(x.error.message)! + 1);\r\n }\r\n } else {\r\n if (!errorsMap.has(\"error\")) {\r\n errorsMap.set(\"error\", 1);\r\n } else {\r\n errorsMap.set(\"error\", errorsMap.get(\"error\")! + 1);\r\n }\r\n }\r\n });\r\n const errorCount = errors.length;\r\n let backendCpuTime: bigint = BigInt(0);\r\n let backendTotalTime: bigint = BigInt(0);\r\n let backendMemUsed: bigint = BigInt(0);\r\n let backendRowsReturned: bigint = BigInt(0);\r\n let totalTime: bigint = BigInt(0);\r\n let retryCount: bigint = BigInt(0);\r\n let prepareTime: bigint = BigInt(0);\r\n\r\n // Calculate average\r\n results.forEach((r: ITaskResult) => {\r\n backendCpuTime += BigInt(r.stats.backendCpuTime);\r\n backendTotalTime += BigInt(r.stats.backendTotalTime);\r\n backendMemUsed += BigInt(r.stats.backendMemUsed);\r\n backendRowsReturned += BigInt(r.stats.backendRowsReturned);\r\n totalTime += BigInt(r.stats.totalTime);\r\n retryCount += BigInt(r.stats.retryCount);\r\n prepareTime += BigInt(r.stats.prepareTime);\r\n });\r\n\r\n backendCpuTime /= BigInt(results.length);\r\n backendTotalTime /= BigInt(results.length);\r\n backendMemUsed /= BigInt(results.length);\r\n backendRowsReturned /= BigInt(results.length);\r\n totalTime /= BigInt(results.length);\r\n retryCount /= BigInt(results.length);\r\n // prepareTime /= BigInt(results.length);\r\n\r\n return {\r\n result: {\r\n backendCpuTime,\r\n backendTotalTime,\r\n backendMemUsed,\r\n backendRowsReturned,\r\n totalTime,\r\n retryCount,\r\n prepareTime,\r\n },\r\n overallTimeInSec: overallTime.currentSeconds,\r\n errorCount,\r\n totalQueries: results.length,\r\n errorMap: errorsMap\r\n };\r\n\r\n }\r\n}\r\ndescribe.skip(\"ConcurrentQueryLoad\", () => {\r\n it(\"should run\", async () => {\r\n Logger.initializeToConsole();\r\n Logger.setLevel(\"ECDb.ConcurrentQuery\", LogLevel.Trace);\r\n\r\n const scenario: IScenario = {\r\n name: \"ConcurrentQueryLoad\",\r\n config: {\r\n globalQuota: { time: 1, memory: 8388608 },\r\n workerThreads: 1,\r\n },\r\n totalBatches: 1,\r\n taskPerBatch: 1,\r\n createReader: (dbs: ECDb | IModelDb) => {\r\n const queries = [\r\n {\r\n sql: `\r\n WITH sequence(n) AS (\r\n SELECT 1\r\n UNION ALL\r\n SELECT n + 1 FROM sequence WHERE n < 10000000\r\n )\r\n SELECT COUNT(*)\r\n FROM bis.SpatialIndex i, sequence s\r\n WHERE i.ECInstanceId MATCH iModel_spatial_overlap_aabb(\r\n iModel_bbox(random(), random(), random(), random(),random(), random()))`\r\n },\r\n {\r\n sql: `\r\n WITH sequence(n) AS (\r\n SELECT 1\r\n UNION ALL\r\n SELECT n + 1 FROM sequence WHERE n < 10000000\r\n )\r\n SELECT COUNT(*) FROM sequence`\r\n },\r\n {\r\n sql: \"SELECT $ FROM bis.Element LIMIT 10000\"\r\n }\r\n ];\r\n const idx = Math.floor(Math.random() * queries.length);\r\n return dbs.createQueryReader(queries[idx].sql);\r\n }\r\n };\r\n\r\n const verySmallFile = IModelTestUtils.resolveAssetFile(\"test.bim\");\r\n const db = SnapshotDb.openFile(verySmallFile);\r\n const simulator = new LoadSimulator(db, scenario);\r\n const result = await simulator.run();\r\n // eslint-disable-next-line no-console\r\n console.log(result);\r\n db.close();\r\n expect(result.errorCount).to.be.equal(0);\r\n });\r\n});\r\n"]}
|
|
@@ -58,7 +58,8 @@ import { assert, expect } from "chai";
|
|
|
58
58
|
import * as path from "path";
|
|
59
59
|
import * as sinon from "sinon";
|
|
60
60
|
import { DbResult, Id64, Logger, LogLevel } from "@itwin/core-bentley";
|
|
61
|
-
import {
|
|
61
|
+
import { IModelJsFs } from "../../IModelJsFs";
|
|
62
|
+
import { ECDb, ECDbOpenMode, SqliteValueType } from "../../core-backend";
|
|
62
63
|
import { KnownTestLocations } from "../KnownTestLocations";
|
|
63
64
|
import { ECDbTestHelper } from "./ECDbTestHelper";
|
|
64
65
|
import { QueryOptionsBuilder } from "@itwin/core-common";
|
|
@@ -181,11 +182,11 @@ describe("ECDb", () => {
|
|
|
181
182
|
try {
|
|
182
183
|
const fileName1 = "source_file.ecdb";
|
|
183
184
|
const ecdbPath1 = path.join(outDir, fileName1);
|
|
184
|
-
const testECDb = __addDisposableResource(env_8, ECDbTestHelper.createECDb(outDir, fileName1, `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
185
|
-
<ECEntityClass typeName="Person" modifier="Sealed">
|
|
186
|
-
<ECProperty propertyName="Name" typeName="string"/>
|
|
187
|
-
<ECProperty propertyName="Age" typeName="int"/>
|
|
188
|
-
</ECEntityClass>
|
|
185
|
+
const testECDb = __addDisposableResource(env_8, ECDbTestHelper.createECDb(outDir, fileName1, `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
186
|
+
<ECEntityClass typeName="Person" modifier="Sealed">
|
|
187
|
+
<ECProperty propertyName="Name" typeName="string"/>
|
|
188
|
+
<ECProperty propertyName="Age" typeName="int"/>
|
|
189
|
+
</ECEntityClass>
|
|
189
190
|
</ECSchema>`), false);
|
|
190
191
|
assert.isTrue(testECDb.isOpen);
|
|
191
192
|
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
@@ -197,9 +198,9 @@ describe("ECDb", () => {
|
|
|
197
198
|
return res.id;
|
|
198
199
|
});
|
|
199
200
|
// override profile version to 55.0.0 which is currently not supported
|
|
200
|
-
testECDb.withSqliteStatement(`
|
|
201
|
-
UPDATE be_Prop SET
|
|
202
|
-
StrData = '{"major":55,"minor":0,"sub1":0,"sub2":0}'
|
|
201
|
+
testECDb.withSqliteStatement(`
|
|
202
|
+
UPDATE be_Prop SET
|
|
203
|
+
StrData = '{"major":55,"minor":0,"sub1":0,"sub2":0}'
|
|
203
204
|
WHERE Namespace = 'ec_Db' AND Name = 'SchemaVersion'`, (stmt) => { stmt.step(); });
|
|
204
205
|
testECDb.saveChanges();
|
|
205
206
|
const runDbListPragmaUsingStatement = (ecdb) => {
|
|
@@ -301,11 +302,11 @@ describe("ECDb", () => {
|
|
|
301
302
|
try {
|
|
302
303
|
const fileName1 = "source_file.ecdb";
|
|
303
304
|
const ecdbPath1 = path.join(outDir, fileName1);
|
|
304
|
-
const testECDb = __addDisposableResource(env_9, ECDbTestHelper.createECDb(outDir, fileName1, `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
305
|
-
<ECEntityClass typeName="Person" modifier="Sealed">
|
|
306
|
-
<ECProperty propertyName="Name" typeName="string"/>
|
|
307
|
-
<ECProperty propertyName="Age" typeName="int"/>
|
|
308
|
-
</ECEntityClass>
|
|
305
|
+
const testECDb = __addDisposableResource(env_9, ECDbTestHelper.createECDb(outDir, fileName1, `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
306
|
+
<ECEntityClass typeName="Person" modifier="Sealed">
|
|
307
|
+
<ECProperty propertyName="Name" typeName="string"/>
|
|
308
|
+
<ECProperty propertyName="Age" typeName="int"/>
|
|
309
|
+
</ECEntityClass>
|
|
309
310
|
</ECSchema>`), false);
|
|
310
311
|
assert.isTrue(testECDb.isOpen);
|
|
311
312
|
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
@@ -405,11 +406,11 @@ describe("ECDb", () => {
|
|
|
405
406
|
{
|
|
406
407
|
const env_11 = { stack: [], error: void 0, hasError: false };
|
|
407
408
|
try {
|
|
408
|
-
const testECDb = __addDisposableResource(env_11, ECDbTestHelper.createECDb(outDir, fileName, `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
409
|
-
<ECEntityClass typeName="Person" modifier="Sealed">
|
|
410
|
-
<ECProperty propertyName="Name" typeName="string"/>
|
|
411
|
-
<ECProperty propertyName="Age" typeName="int"/>
|
|
412
|
-
</ECEntityClass>
|
|
409
|
+
const testECDb = __addDisposableResource(env_11, ECDbTestHelper.createECDb(outDir, fileName, `<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
410
|
+
<ECEntityClass typeName="Person" modifier="Sealed">
|
|
411
|
+
<ECProperty propertyName="Name" typeName="string"/>
|
|
412
|
+
<ECProperty propertyName="Age" typeName="int"/>
|
|
413
|
+
</ECEntityClass>
|
|
413
414
|
</ECSchema>`), false);
|
|
414
415
|
assert.isTrue(testECDb.isOpen);
|
|
415
416
|
id = testECDb.withCachedWriteStatement("INSERT INTO test.Person(Name,Age) VALUES('Mary', 45)", (stmt) => {
|
|
@@ -563,19 +564,19 @@ describe("ECDb", () => {
|
|
|
563
564
|
it("test unit labels in composite formats", () => {
|
|
564
565
|
const ecdb = ECDbTestHelper.createECDb(outDir, "TestCompositeFormats.ecdb");
|
|
565
566
|
const xmlpathOriginal = path.join(outDir, "compositeFormats1.ecschema.xml");
|
|
566
|
-
IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version="1.0" encoding="utf-8" ?>
|
|
567
|
-
<ECSchema schemaName="TestCompositeFormats" alias="tcf" version="1.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
568
|
-
<ECSchemaReference name="Units" version="01.00.00" alias="u" />
|
|
569
|
-
<Unit typeName="TestUnit" displayLabel="Test Unit" definition="u:M" numerator="1.0" phenomenon="u:LENGTH" unitSystem="u:METRIC" />
|
|
570
|
-
<Format typeName="TestFormat" displayLabel="TestFormat" roundFactor="0.3" type="Fractional" showSignOption="OnlyNegative" formatTraits="TrailZeroes|KeepSingleZero" precision="4" decimalSeparator="." thousandSeparator="," uomSeparator=" ">
|
|
571
|
-
<Composite>
|
|
572
|
-
<Unit>u:KM</Unit>
|
|
573
|
-
<Unit label="m">TestUnit</Unit>
|
|
574
|
-
<Unit label="">u:CM</Unit>
|
|
575
|
-
<Unit label="mm">u:MM</Unit>
|
|
576
|
-
</Composite>
|
|
577
|
-
</Format>
|
|
578
|
-
<KindOfQuantity typeName="TestKOQ2" description="Test KOQ2" displayLabel="TestKOQ2" persistenceUnit="u:M" presentationUnits="TestFormat" relativeError="10e-3" />
|
|
567
|
+
IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version="1.0" encoding="utf-8" ?>
|
|
568
|
+
<ECSchema schemaName="TestCompositeFormats" alias="tcf" version="1.0.0" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
569
|
+
<ECSchemaReference name="Units" version="01.00.00" alias="u" />
|
|
570
|
+
<Unit typeName="TestUnit" displayLabel="Test Unit" definition="u:M" numerator="1.0" phenomenon="u:LENGTH" unitSystem="u:METRIC" />
|
|
571
|
+
<Format typeName="TestFormat" displayLabel="TestFormat" roundFactor="0.3" type="Fractional" showSignOption="OnlyNegative" formatTraits="TrailZeroes|KeepSingleZero" precision="4" decimalSeparator="." thousandSeparator="," uomSeparator=" ">
|
|
572
|
+
<Composite>
|
|
573
|
+
<Unit>u:KM</Unit>
|
|
574
|
+
<Unit label="m">TestUnit</Unit>
|
|
575
|
+
<Unit label="">u:CM</Unit>
|
|
576
|
+
<Unit label="mm">u:MM</Unit>
|
|
577
|
+
</Composite>
|
|
578
|
+
</Format>
|
|
579
|
+
<KindOfQuantity typeName="TestKOQ2" description="Test KOQ2" displayLabel="TestKOQ2" persistenceUnit="u:M" presentationUnits="TestFormat" relativeError="10e-3" />
|
|
579
580
|
</ECSchema>`);
|
|
580
581
|
ecdb.importSchema(xmlpathOriginal);
|
|
581
582
|
ecdb.saveChanges();
|
|
@@ -589,19 +590,19 @@ describe("ECDb", () => {
|
|
|
589
590
|
}
|
|
590
591
|
});
|
|
591
592
|
const xmlpathUpdated = path.join(outDir, "compositeFormats2.ecschema.xml");
|
|
592
|
-
IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version="1.0" encoding="utf-8" ?>
|
|
593
|
-
<ECSchema schemaName="TestCompositeFormats" alias="tcf" version="1.0.1" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
594
|
-
<ECSchemaReference name="Units" version="01.00.00" alias="u" />
|
|
595
|
-
<Unit typeName="TestUnit" displayLabel="Test Unit" definition="u:M" numerator="1.0" phenomenon="u:LENGTH" unitSystem="u:METRIC" />
|
|
596
|
-
<Format typeName="TestFormat" displayLabel="TestFormat" roundFactor="0.3" type="Fractional" showSignOption="OnlyNegative" formatTraits="TrailZeroes|KeepSingleZero" precision="4" decimalSeparator="." thousandSeparator="," uomSeparator=" ">
|
|
597
|
-
<Composite spacer="=" includeZero="False">
|
|
598
|
-
<Unit label="">u:KM</Unit>
|
|
599
|
-
<Unit label="m">TestUnit</Unit>
|
|
600
|
-
<Unit>u:CM</Unit>
|
|
601
|
-
<Unit label="mm">u:MM</Unit>
|
|
602
|
-
</Composite>
|
|
603
|
-
</Format>
|
|
604
|
-
<KindOfQuantity typeName="TestKOQ2" description="Test KOQ2" displayLabel="TestKOQ2" persistenceUnit="u:M" presentationUnits="TestFormat" relativeError="10e-3" />
|
|
593
|
+
IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version="1.0" encoding="utf-8" ?>
|
|
594
|
+
<ECSchema schemaName="TestCompositeFormats" alias="tcf" version="1.0.1" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
595
|
+
<ECSchemaReference name="Units" version="01.00.00" alias="u" />
|
|
596
|
+
<Unit typeName="TestUnit" displayLabel="Test Unit" definition="u:M" numerator="1.0" phenomenon="u:LENGTH" unitSystem="u:METRIC" />
|
|
597
|
+
<Format typeName="TestFormat" displayLabel="TestFormat" roundFactor="0.3" type="Fractional" showSignOption="OnlyNegative" formatTraits="TrailZeroes|KeepSingleZero" precision="4" decimalSeparator="." thousandSeparator="," uomSeparator=" ">
|
|
598
|
+
<Composite spacer="=" includeZero="False">
|
|
599
|
+
<Unit label="">u:KM</Unit>
|
|
600
|
+
<Unit label="m">TestUnit</Unit>
|
|
601
|
+
<Unit>u:CM</Unit>
|
|
602
|
+
<Unit label="mm">u:MM</Unit>
|
|
603
|
+
</Composite>
|
|
604
|
+
</Format>
|
|
605
|
+
<KindOfQuantity typeName="TestKOQ2" description="Test KOQ2" displayLabel="TestKOQ2" persistenceUnit="u:M" presentationUnits="TestFormat" relativeError="10e-3" />
|
|
605
606
|
</ECSchema>`);
|
|
606
607
|
ecdb.importSchema(xmlpathUpdated);
|
|
607
608
|
ecdb.saveChanges();
|
|
@@ -619,23 +620,23 @@ describe("ECDb", () => {
|
|
|
619
620
|
it("should log warning but continue if new schema changes are observed without version bump", async () => {
|
|
620
621
|
const ecdb = ECDbTestHelper.createECDb(outDir, "importSchemaNoVersionBump.ecdb");
|
|
621
622
|
const xmlpathOriginal = path.join(outDir, "importSchemaNoVersionBump1.ecschema.xml");
|
|
622
|
-
IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version="1.0" encoding="UTF-8"?>
|
|
623
|
-
<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
624
|
-
<ECEntityClass typeName="Person" modifier="Sealed">
|
|
625
|
-
<ECProperty propertyName="Name" typeName="string"/>
|
|
626
|
-
<ECProperty propertyName="Age" typeName="int"/>
|
|
627
|
-
</ECEntityClass>
|
|
623
|
+
IModelJsFs.writeFileSync(xmlpathOriginal, `<?xml version="1.0" encoding="UTF-8"?>
|
|
624
|
+
<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
625
|
+
<ECEntityClass typeName="Person" modifier="Sealed">
|
|
626
|
+
<ECProperty propertyName="Name" typeName="string"/>
|
|
627
|
+
<ECProperty propertyName="Age" typeName="int"/>
|
|
628
|
+
</ECEntityClass>
|
|
628
629
|
</ECSchema>`);
|
|
629
630
|
ecdb.importSchema(xmlpathOriginal);
|
|
630
631
|
ecdb.saveChanges();
|
|
631
632
|
const xmlpathUpdated = path.join(outDir, "importSchemaNoVersionBump2.ecschema.xml");
|
|
632
|
-
IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version="1.0" encoding="UTF-8"?>
|
|
633
|
-
<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
634
|
-
<ECEntityClass typeName="Person" modifier="Sealed">
|
|
635
|
-
<ECProperty propertyName="Name" typeName="string"/>
|
|
636
|
-
<ECProperty propertyName="Age" typeName="int"/>
|
|
637
|
-
<ECProperty propertyName="Height" typeName="int"/>
|
|
638
|
-
</ECEntityClass>
|
|
633
|
+
IModelJsFs.writeFileSync(xmlpathUpdated, `<?xml version="1.0" encoding="UTF-8"?>
|
|
634
|
+
<ECSchema schemaName="Test" alias="test" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
635
|
+
<ECEntityClass typeName="Person" modifier="Sealed">
|
|
636
|
+
<ECProperty propertyName="Name" typeName="string"/>
|
|
637
|
+
<ECProperty propertyName="Age" typeName="int"/>
|
|
638
|
+
<ECProperty propertyName="Height" typeName="int"/>
|
|
639
|
+
</ECEntityClass>
|
|
639
640
|
</ECSchema>`);
|
|
640
641
|
let calledCategory = "";
|
|
641
642
|
let calledMessage = "";
|
|
@@ -670,5 +671,74 @@ describe("ECDb", () => {
|
|
|
670
671
|
assert.isDefined(heightProp);
|
|
671
672
|
ecdb.closeDb();
|
|
672
673
|
});
|
|
674
|
+
it("should drop a single schema", () => {
|
|
675
|
+
const env_16 = { stack: [], error: void 0, hasError: false };
|
|
676
|
+
try {
|
|
677
|
+
const ecdb = __addDisposableResource(env_16, ECDbTestHelper.createECDb(outDir, "test.ecdb", `<ECSchema schemaName="Test" alias="ts" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.2">
|
|
678
|
+
<ECEntityClass typeName="Foo" modifier="Sealed">
|
|
679
|
+
<ECProperty propertyName="n" typeName="int"/>
|
|
680
|
+
</ECEntityClass>
|
|
681
|
+
</ECSchema>`), false);
|
|
682
|
+
assert.isTrue(ecdb.isOpen);
|
|
683
|
+
ecdb.saveChanges();
|
|
684
|
+
const schemaProps = ecdb.getSchemaProps("Test");
|
|
685
|
+
expect(schemaProps.name).to.equal("Test");
|
|
686
|
+
ecdb.dropSchemas(["Test"]);
|
|
687
|
+
expect(() => ecdb.getSchemaProps("Test")).to.throw();
|
|
688
|
+
}
|
|
689
|
+
catch (e_16) {
|
|
690
|
+
env_16.error = e_16;
|
|
691
|
+
env_16.hasError = true;
|
|
692
|
+
}
|
|
693
|
+
finally {
|
|
694
|
+
__disposeResources(env_16);
|
|
695
|
+
}
|
|
696
|
+
});
|
|
697
|
+
it("should drop multiple schemas", () => {
|
|
698
|
+
const env_17 = { stack: [], error: void 0, hasError: false };
|
|
699
|
+
try {
|
|
700
|
+
const testSchema1Xml = `<?xml version="1.0" encoding="utf-8"?>
|
|
701
|
+
<ECSchema schemaName="TestSchema1" alias="ts1" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
702
|
+
<ECEntityClass typeName="TestClass1">
|
|
703
|
+
<ECProperty propertyName="Prop1" typeName="string"/>
|
|
704
|
+
</ECEntityClass>
|
|
705
|
+
</ECSchema>`;
|
|
706
|
+
const testSchema2Xml = `<?xml version="1.0" encoding="utf-8"?>
|
|
707
|
+
<ECSchema schemaName="TestSchema2" alias="ts2" version="01.00.00" xmlns="http://www.bentley.com/schemas/Bentley.ECXML.3.1">
|
|
708
|
+
<ECSchemaReference name="TestSchema1" version="01.00.00" alias="ts1"/>
|
|
709
|
+
<ECEntityClass typeName="TestClass2">
|
|
710
|
+
<ECProperty propertyName="Prop2" typeName="string"/>
|
|
711
|
+
</ECEntityClass>
|
|
712
|
+
</ECSchema>`;
|
|
713
|
+
const ecdb = __addDisposableResource(env_17, ECDbTestHelper.createECDb(outDir, "drop-multiple-schemas.ecdb"), false);
|
|
714
|
+
assert.isTrue(ecdb.isOpen);
|
|
715
|
+
const schema1Path = path.join(outDir, "TestSchema1.ecschema.xml");
|
|
716
|
+
IModelJsFs.writeFileSync(schema1Path, testSchema1Xml);
|
|
717
|
+
ecdb.importSchema(schema1Path);
|
|
718
|
+
const schema2Path = path.join(outDir, "TestSchema2.ecschema.xml");
|
|
719
|
+
IModelJsFs.writeFileSync(schema2Path, testSchema2Xml);
|
|
720
|
+
ecdb.importSchema(schema2Path);
|
|
721
|
+
ecdb.saveChanges();
|
|
722
|
+
const schema1Props = ecdb.getSchemaProps("TestSchema1");
|
|
723
|
+
expect(schema1Props.name).to.equal("TestSchema1");
|
|
724
|
+
const schema2Props = ecdb.getSchemaProps("TestSchema2");
|
|
725
|
+
expect(schema2Props.name).to.equal("TestSchema2");
|
|
726
|
+
expect(() => ecdb.dropSchemas(["TestSchema1"])).to.throw();
|
|
727
|
+
const stillExistsSchema1 = ecdb.getSchemaProps("TestSchema1");
|
|
728
|
+
expect(stillExistsSchema1.name).to.equal("TestSchema1");
|
|
729
|
+
ecdb.dropSchemas(["TestSchema2", "TestSchema1"]);
|
|
730
|
+
expect(() => ecdb.getSchemaProps("TestSchema2")).to.throw();
|
|
731
|
+
expect(() => ecdb.getSchemaProps("TestSchema1")).to.throw();
|
|
732
|
+
IModelJsFs.removeSync(schema1Path);
|
|
733
|
+
IModelJsFs.removeSync(schema2Path);
|
|
734
|
+
}
|
|
735
|
+
catch (e_17) {
|
|
736
|
+
env_17.error = e_17;
|
|
737
|
+
env_17.hasError = true;
|
|
738
|
+
}
|
|
739
|
+
finally {
|
|
740
|
+
__disposeResources(env_17);
|
|
741
|
+
}
|
|
742
|
+
});
|
|
673
743
|
});
|
|
674
744
|
//# sourceMappingURL=ECDb.test.js.map
|