@itwin/core-backend 5.8.0-dev.2 → 5.8.0-dev.20
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 +36 -1
- package/lib/cjs/BackendHubAccess.js.map +1 -1
- package/lib/cjs/BackendLoggerCategory.js.map +1 -1
- package/lib/cjs/BisCoreSchema.js.map +1 -1
- package/lib/cjs/BlobContainerService.js.map +1 -1
- package/lib/cjs/BriefcaseManager.js.map +1 -1
- package/lib/cjs/CatalogDb.js.map +1 -1
- package/lib/cjs/Category.js.map +1 -1
- package/lib/cjs/ChangeSummaryManager.js +2 -2
- package/lib/cjs/ChangeSummaryManager.js.map +1 -1
- package/lib/cjs/ChangedElementsDb.js.map +1 -1
- package/lib/cjs/ChangesetECAdaptor.js +248 -248
- package/lib/cjs/ChangesetECAdaptor.js.map +1 -1
- package/lib/cjs/ChannelControl.js.map +1 -1
- package/lib/cjs/CheckpointManager.js.map +1 -1
- package/lib/cjs/ClassRegistry.js +5 -5
- package/lib/cjs/ClassRegistry.js.map +1 -1
- package/lib/cjs/CloudSqlite.js.map +1 -1
- package/lib/cjs/CodeService.js.map +1 -1
- package/lib/cjs/CodeSpecs.js.map +1 -1
- package/lib/cjs/ConcurrentQuery.js.map +1 -1
- package/lib/cjs/CustomViewState3dCreator.js.map +1 -1
- package/lib/cjs/DevTools.js.map +1 -1
- package/lib/cjs/DisplayStyle.js.map +1 -1
- package/lib/cjs/ECDb.d.ts +26 -0
- package/lib/cjs/ECDb.d.ts.map +1 -1
- package/lib/cjs/ECDb.js +53 -2
- package/lib/cjs/ECDb.js.map +1 -1
- package/lib/cjs/ECSchemaXmlContext.js.map +1 -1
- package/lib/cjs/ECSqlRowExecutor.d.ts +66 -0
- package/lib/cjs/ECSqlRowExecutor.d.ts.map +1 -0
- package/lib/cjs/ECSqlRowExecutor.js +135 -0
- package/lib/cjs/ECSqlRowExecutor.js.map +1 -0
- package/lib/cjs/ECSqlStatement.d.ts +13 -1
- package/lib/cjs/ECSqlStatement.d.ts.map +1 -1
- package/lib/cjs/ECSqlStatement.js +30 -0
- package/lib/cjs/ECSqlStatement.js.map +1 -1
- package/lib/cjs/ECSqlSyncReader.d.ts +104 -0
- package/lib/cjs/ECSqlSyncReader.d.ts.map +1 -0
- package/lib/cjs/ECSqlSyncReader.js +191 -0
- package/lib/cjs/ECSqlSyncReader.js.map +1 -0
- 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 +26 -1
- package/lib/cjs/IModelDb.d.ts.map +1 -1
- package/lib/cjs/IModelDb.js +63 -11
- 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.d.ts.map +1 -1
- package/lib/cjs/IpcHost.js +28 -4
- package/lib/cjs/IpcHost.js.map +1 -1
- package/lib/cjs/LineStyle.d.ts +6 -0
- package/lib/cjs/LineStyle.d.ts.map +1 -1
- package/lib/cjs/LineStyle.js +41 -32
- package/lib/cjs/LineStyle.js.map +1 -1
- package/lib/cjs/LocalHub.d.ts +17 -10
- package/lib/cjs/LocalHub.d.ts.map +1 -1
- package/lib/cjs/LocalHub.js +127 -29
- package/lib/cjs/LocalHub.js.map +1 -1
- package/lib/cjs/LocalhostIpcHost.js.map +1 -1
- package/lib/cjs/LockControl.js.map +1 -1
- package/lib/cjs/Material.js.map +1 -1
- package/lib/cjs/Model.js.map +1 -1
- package/lib/cjs/NativeAppStorage.js.map +1 -1
- package/lib/cjs/NativeHost.js.map +1 -1
- package/lib/cjs/NavigationRelationship.js.map +1 -1
- package/lib/cjs/PromiseMemoizer.js.map +1 -1
- package/lib/cjs/PropertyStore.js.map +1 -1
- package/lib/cjs/Relationship.js.map +1 -1
- package/lib/cjs/RpcBackend.js.map +1 -1
- package/lib/cjs/SQLiteDb.js.map +1 -1
- package/lib/cjs/Schema.js.map +1 -1
- package/lib/cjs/SchemaSync.js.map +1 -1
- package/lib/cjs/SchemaUtils.js.map +1 -1
- package/lib/cjs/SheetIndex.js.map +1 -1
- package/lib/cjs/SqliteChangesetReader.js.map +1 -1
- package/lib/cjs/SqliteStatement.js.map +1 -1
- package/lib/cjs/StashManager.js.map +1 -1
- package/lib/cjs/Texture.js.map +1 -1
- package/lib/cjs/TileStorage.js.map +1 -1
- package/lib/cjs/TxnManager.js.map +1 -1
- package/lib/cjs/ViewDefinition.js.map +1 -1
- package/lib/cjs/ViewStateHydrator.js.map +1 -1
- package/lib/cjs/ViewStore.js.map +1 -1
- package/lib/cjs/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/cjs/annotations/FrameGeometry.js.map +1 -1
- package/lib/cjs/annotations/LeaderGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/cjs/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/cjs/annotations/TextBlockLayout.js.map +1 -1
- package/lib/cjs/assets/IModelChange.02.00.00.ecschema.xml +90 -90
- package/lib/cjs/assets/Settings/Schemas/Base.Schema.json +32 -32
- package/lib/cjs/assets/Settings/Schemas/Gcs.schema.json +27 -27
- package/lib/cjs/assets/Settings/Schemas/Workspace.Schema.json +94 -94
- package/lib/cjs/assets/Settings/backend.setting.json5 +21 -21
- package/lib/cjs/core-backend.d.ts +3 -0
- package/lib/cjs/core-backend.d.ts.map +1 -1
- package/lib/cjs/core-backend.js +3 -0
- package/lib/cjs/core-backend.js.map +1 -1
- package/lib/cjs/domains/FunctionalElements.js.map +1 -1
- package/lib/cjs/domains/FunctionalSchema.js.map +1 -1
- package/lib/cjs/domains/GenericElements.js.map +1 -1
- package/lib/cjs/domains/GenericSchema.js.map +1 -1
- package/lib/cjs/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/cjs/internal/ChannelAdmin.js.map +1 -1
- package/lib/cjs/internal/ElementLRUCache.js.map +1 -1
- package/lib/cjs/internal/FontFileImpl.js.map +1 -1
- package/lib/cjs/internal/HubMock.js.map +1 -1
- package/lib/cjs/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/cjs/internal/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.js.map +1 -1
- package/lib/cjs/internal/Symbols.js.map +1 -1
- package/lib/cjs/internal/annotations/fields.js.map +1 -1
- package/lib/cjs/internal/cross-package.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts +38 -0
- package/lib/cjs/internal/workspace/SettingsDbImpl.d.ts.map +1 -0
- package/lib/cjs/internal/workspace/SettingsDbImpl.js +108 -0
- package/lib/cjs/internal/workspace/SettingsDbImpl.js.map +1 -0
- package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts +7 -0
- package/lib/cjs/internal/workspace/SettingsEditorImpl.d.ts.map +1 -0
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js +266 -0
- package/lib/cjs/internal/workspace/SettingsEditorImpl.js.map +1 -0
- package/lib/cjs/internal/workspace/SettingsImpl.d.ts +1 -0
- package/lib/cjs/internal/workspace/SettingsImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/SettingsImpl.js +8 -4
- package/lib/cjs/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts +14 -0
- package/lib/cjs/internal/workspace/SettingsSqliteDb.d.ts.map +1 -0
- package/lib/cjs/internal/workspace/SettingsSqliteDb.js +40 -0
- package/lib/cjs/internal/workspace/SettingsSqliteDb.js.map +1 -0
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts +1 -0
- package/lib/cjs/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/cjs/internal/workspace/WorkspaceImpl.js +67 -16
- 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.d.ts +8 -0
- package/lib/cjs/workspace/Settings.d.ts.map +1 -1
- package/lib/cjs/workspace/Settings.js.map +1 -1
- package/lib/cjs/workspace/SettingsDb.d.ts +109 -0
- package/lib/cjs/workspace/SettingsDb.d.ts.map +1 -0
- package/lib/cjs/workspace/SettingsDb.js +19 -0
- package/lib/cjs/workspace/SettingsDb.js.map +1 -0
- package/lib/cjs/workspace/SettingsEditor.d.ts +250 -0
- package/lib/cjs/workspace/SettingsEditor.d.ts.map +1 -0
- package/lib/cjs/workspace/SettingsEditor.js +53 -0
- package/lib/cjs/workspace/SettingsEditor.js.map +1 -0
- package/lib/cjs/workspace/SettingsSchemas.js.map +1 -1
- package/lib/cjs/workspace/Workspace.d.ts +42 -19
- package/lib/cjs/workspace/Workspace.d.ts.map +1 -1
- package/lib/cjs/workspace/Workspace.js.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.d.ts +32 -1
- package/lib/cjs/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/lib/cjs/workspace/WorkspaceEditor.js +19 -0
- package/lib/cjs/workspace/WorkspaceEditor.js.map +1 -1
- package/lib/esm/BackendHubAccess.js.map +1 -1
- package/lib/esm/BackendLoggerCategory.js.map +1 -1
- package/lib/esm/BisCoreSchema.js.map +1 -1
- package/lib/esm/BlobContainerService.js.map +1 -1
- package/lib/esm/BriefcaseManager.js.map +1 -1
- package/lib/esm/CatalogDb.js.map +1 -1
- package/lib/esm/Category.js.map +1 -1
- package/lib/esm/ChangeSummaryManager.js +2 -2
- package/lib/esm/ChangeSummaryManager.js.map +1 -1
- package/lib/esm/ChangedElementsDb.js.map +1 -1
- package/lib/esm/ChangesetECAdaptor.js +248 -248
- package/lib/esm/ChangesetECAdaptor.js.map +1 -1
- package/lib/esm/ChannelControl.js.map +1 -1
- package/lib/esm/CheckpointManager.js.map +1 -1
- package/lib/esm/ClassRegistry.js +5 -5
- package/lib/esm/ClassRegistry.js.map +1 -1
- package/lib/esm/CloudSqlite.js.map +1 -1
- package/lib/esm/CodeService.js.map +1 -1
- package/lib/esm/CodeSpecs.js.map +1 -1
- package/lib/esm/ConcurrentQuery.js.map +1 -1
- package/lib/esm/CustomViewState3dCreator.js.map +1 -1
- package/lib/esm/DevTools.js.map +1 -1
- package/lib/esm/DisplayStyle.js.map +1 -1
- package/lib/esm/ECDb.d.ts +26 -0
- package/lib/esm/ECDb.d.ts.map +1 -1
- package/lib/esm/ECDb.js +54 -3
- package/lib/esm/ECDb.js.map +1 -1
- package/lib/esm/ECSchemaXmlContext.js.map +1 -1
- package/lib/esm/ECSqlRowExecutor.d.ts +66 -0
- package/lib/esm/ECSqlRowExecutor.d.ts.map +1 -0
- package/lib/esm/ECSqlRowExecutor.js +131 -0
- package/lib/esm/ECSqlRowExecutor.js.map +1 -0
- package/lib/esm/ECSqlStatement.d.ts +13 -1
- package/lib/esm/ECSqlStatement.d.ts.map +1 -1
- package/lib/esm/ECSqlStatement.js +30 -0
- package/lib/esm/ECSqlStatement.js.map +1 -1
- package/lib/esm/ECSqlSyncReader.d.ts +104 -0
- package/lib/esm/ECSqlSyncReader.d.ts.map +1 -0
- package/lib/esm/ECSqlSyncReader.js +187 -0
- package/lib/esm/ECSqlSyncReader.js.map +1 -0
- 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 +26 -1
- package/lib/esm/IModelDb.d.ts.map +1 -1
- package/lib/esm/IModelDb.js +63 -11
- 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.d.ts.map +1 -1
- package/lib/esm/IpcHost.js +28 -4
- package/lib/esm/IpcHost.js.map +1 -1
- package/lib/esm/LineStyle.d.ts +6 -0
- package/lib/esm/LineStyle.d.ts.map +1 -1
- package/lib/esm/LineStyle.js +41 -32
- package/lib/esm/LineStyle.js.map +1 -1
- package/lib/esm/LocalHub.d.ts +17 -10
- package/lib/esm/LocalHub.d.ts.map +1 -1
- package/lib/esm/LocalHub.js +128 -30
- package/lib/esm/LocalHub.js.map +1 -1
- package/lib/esm/LocalhostIpcHost.js.map +1 -1
- package/lib/esm/LockControl.js.map +1 -1
- package/lib/esm/Material.js.map +1 -1
- package/lib/esm/Model.js.map +1 -1
- package/lib/esm/NativeAppStorage.js.map +1 -1
- package/lib/esm/NativeHost.js.map +1 -1
- package/lib/esm/NavigationRelationship.js.map +1 -1
- package/lib/esm/PromiseMemoizer.js.map +1 -1
- package/lib/esm/PropertyStore.js.map +1 -1
- package/lib/esm/Relationship.js.map +1 -1
- package/lib/esm/RpcBackend.js.map +1 -1
- package/lib/esm/SQLiteDb.js.map +1 -1
- package/lib/esm/Schema.js.map +1 -1
- package/lib/esm/SchemaSync.js.map +1 -1
- package/lib/esm/SchemaUtils.js.map +1 -1
- package/lib/esm/SheetIndex.js.map +1 -1
- package/lib/esm/SqliteChangesetReader.js.map +1 -1
- package/lib/esm/SqliteStatement.js.map +1 -1
- package/lib/esm/StashManager.js.map +1 -1
- package/lib/esm/Texture.js.map +1 -1
- package/lib/esm/TileStorage.js.map +1 -1
- package/lib/esm/TxnManager.js.map +1 -1
- package/lib/esm/ViewDefinition.js.map +1 -1
- package/lib/esm/ViewStateHydrator.js.map +1 -1
- package/lib/esm/ViewStore.js.map +1 -1
- package/lib/esm/annotations/ElementDrivesTextAnnotation.js.map +1 -1
- package/lib/esm/annotations/FrameGeometry.js.map +1 -1
- package/lib/esm/annotations/LeaderGeometry.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationElement.js.map +1 -1
- package/lib/esm/annotations/TextAnnotationGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockGeometry.js.map +1 -1
- package/lib/esm/annotations/TextBlockLayout.js.map +1 -1
- package/lib/esm/core-backend.d.ts +3 -0
- package/lib/esm/core-backend.d.ts.map +1 -1
- package/lib/esm/core-backend.js +3 -0
- package/lib/esm/core-backend.js.map +1 -1
- package/lib/esm/domains/FunctionalElements.js.map +1 -1
- package/lib/esm/domains/FunctionalSchema.js.map +1 -1
- package/lib/esm/domains/GenericElements.js.map +1 -1
- package/lib/esm/domains/GenericSchema.js.map +1 -1
- package/lib/esm/internal/ChangesetConflictArgs.js.map +1 -1
- package/lib/esm/internal/ChannelAdmin.js.map +1 -1
- package/lib/esm/internal/ElementLRUCache.js.map +1 -1
- package/lib/esm/internal/FontFileImpl.js.map +1 -1
- package/lib/esm/internal/HubMock.js.map +1 -1
- package/lib/esm/internal/IModelDbFontsImpl.js.map +1 -1
- package/lib/esm/internal/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.js.map +1 -1
- package/lib/esm/internal/Symbols.js.map +1 -1
- package/lib/esm/internal/annotations/fields.js.map +1 -1
- package/lib/esm/internal/cross-package.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsDbImpl.d.ts +38 -0
- package/lib/esm/internal/workspace/SettingsDbImpl.d.ts.map +1 -0
- package/lib/esm/internal/workspace/SettingsDbImpl.js +104 -0
- package/lib/esm/internal/workspace/SettingsDbImpl.js.map +1 -0
- package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts +7 -0
- package/lib/esm/internal/workspace/SettingsEditorImpl.d.ts.map +1 -0
- package/lib/esm/internal/workspace/SettingsEditorImpl.js +263 -0
- package/lib/esm/internal/workspace/SettingsEditorImpl.js.map +1 -0
- package/lib/esm/internal/workspace/SettingsImpl.d.ts +1 -0
- package/lib/esm/internal/workspace/SettingsImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/SettingsImpl.js +5 -2
- package/lib/esm/internal/workspace/SettingsImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSchemasImpl.js.map +1 -1
- package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts +14 -0
- package/lib/esm/internal/workspace/SettingsSqliteDb.d.ts.map +1 -0
- package/lib/esm/internal/workspace/SettingsSqliteDb.js +36 -0
- package/lib/esm/internal/workspace/SettingsSqliteDb.js.map +1 -0
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts +1 -0
- package/lib/esm/internal/workspace/WorkspaceImpl.d.ts.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceImpl.js +67 -17
- package/lib/esm/internal/workspace/WorkspaceImpl.js.map +1 -1
- package/lib/esm/internal/workspace/WorkspaceSqliteDb.js.map +1 -1
- package/lib/esm/rpc/multipart.js.map +1 -1
- package/lib/esm/rpc/tracing.js.map +1 -1
- package/lib/esm/rpc/web/logging.js.map +1 -1
- package/lib/esm/rpc/web/request.js.map +1 -1
- package/lib/esm/rpc/web/response.js.map +1 -1
- package/lib/esm/rpc-impl/DevToolsRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelReadRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/IModelTileRpcImpl.js.map +1 -1
- package/lib/esm/rpc-impl/RpcBriefcaseUtility.js.map +1 -1
- package/lib/esm/rpc-impl/SnapshotIModelRpcImpl.js.map +1 -1
- package/lib/esm/test/AdvancedEqual.js.map +1 -1
- package/lib/esm/test/AnnotationTestUtils.js.map +1 -1
- package/lib/esm/test/AttachDb.test.js +11 -11
- package/lib/esm/test/AttachDb.test.js.map +1 -1
- package/lib/esm/test/ElementDrivesElement.test.js +23 -23
- package/lib/esm/test/ElementDrivesElement.test.js.map +1 -1
- package/lib/esm/test/ElementLRUCache.test.js.map +1 -1
- package/lib/esm/test/GeometryTestUtil.js.map +1 -1
- package/lib/esm/test/IModelHost.test.js.map +1 -1
- package/lib/esm/test/IModelTestUtils.js.map +1 -1
- package/lib/esm/test/ImageSourceConversion.test.js.map +1 -1
- package/lib/esm/test/IpcHost.test.js +64 -13
- 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/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/TestUtils.js.map +1 -1
- package/lib/esm/test/annotations/Fields.test.js +53 -53
- package/lib/esm/test/annotations/Fields.test.js.map +1 -1
- package/lib/esm/test/annotations/FrameGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/LeaderGeometry.test.js.map +1 -1
- package/lib/esm/test/annotations/TextAnnotation.test.js.map +1 -1
- package/lib/esm/test/annotations/TextBlock.test.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/old.config.js.map +1 -1
- package/lib/esm/test/assets/IncrementalSchemaLocater/configs/simple.config.js.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 +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 +100 -12
- package/lib/esm/test/ecdb/ECSqlQuery.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlStatement.test.js +332 -332
- package/lib/esm/test/ecdb/ECSqlStatement.test.js.map +1 -1
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.d.ts +2 -0
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.d.ts.map +1 -0
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js +122 -0
- package/lib/esm/test/ecdb/ECSqlSyncReader.test.js.map +1 -0
- package/lib/esm/test/ecdb/QueryReaders.test.d.ts +2 -0
- package/lib/esm/test/ecdb/QueryReaders.test.d.ts.map +1 -0
- package/lib/esm/test/ecdb/QueryReaders.test.js +1462 -0
- package/lib/esm/test/ecdb/QueryReaders.test.js.map +1 -0
- 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 +4 -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.d.ts +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.d.ts.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js +11 -5
- package/lib/esm/test/ecsql/src/ECSqlTestParser.js.map +1 -1
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js +186 -100
- package/lib/esm/test/ecsql/src/ECSqlTestRunner.test.js.map +1 -1
- package/lib/esm/test/element/DeleteDefinitionElements.test.js.map +1 -1
- package/lib/esm/test/element/ElementAspect.test.js +22 -22
- package/lib/esm/test/element/ElementAspect.test.js.map +1 -1
- package/lib/esm/test/element/ElementDependencyGraph.test.js.map +1 -1
- package/lib/esm/test/element/ElementRoundTrip.test.js +139 -139
- package/lib/esm/test/element/ElementRoundTrip.test.js.map +1 -1
- package/lib/esm/test/element/ExcludedElements.test.js.map +1 -1
- package/lib/esm/test/element/ExternalSource.test.js.map +1 -1
- package/lib/esm/test/element/NullStructArray.test.js +13 -13
- package/lib/esm/test/element/NullStructArray.test.js.map +1 -1
- package/lib/esm/test/element/ProjectInformationRecord.test.js.map +1 -1
- package/lib/esm/test/element/SheetInformationAspect.test.js.map +1 -1
- package/lib/esm/test/element/UrlLink.test.js.map +1 -1
- package/lib/esm/test/font/FontFile.test.js.map +1 -1
- package/lib/esm/test/font/IModelDbFonts.test.js.map +1 -1
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js +32 -32
- package/lib/esm/test/hubaccess/ApplyChangeset.test.js.map +1 -1
- package/lib/esm/test/hubaccess/BriefcaseManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/CheckpointManager.test.js.map +1 -1
- package/lib/esm/test/hubaccess/Rebase.test.js +56 -56
- package/lib/esm/test/hubaccess/Rebase.test.js.map +1 -1
- package/lib/esm/test/hubaccess/SemanticRebase.test.js +145 -145
- 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 +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 +13 -13
- 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 +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 +9 -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/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 +135 -135
- 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 +177 -7
- 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/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/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 +18 -0
- 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/StandaloneDb.test.js +51 -1
- 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 +213 -0
- package/lib/esm/test/standalone/Workspace.test.js.map +1 -1
- package/lib/esm/test/standalone/iModelDb.test.d.ts +2 -0
- package/lib/esm/test/standalone/iModelDb.test.d.ts.map +1 -0
- package/lib/esm/test/standalone/iModelDb.test.js +35 -0
- package/lib/esm/test/standalone/iModelDb.test.js.map +1 -0
- package/lib/esm/test/workspace/SettingsDb.test.d.ts +2 -0
- package/lib/esm/test/workspace/SettingsDb.test.d.ts.map +1 -0
- package/lib/esm/test/workspace/SettingsDb.test.js +465 -0
- package/lib/esm/test/workspace/SettingsDb.test.js.map +1 -0
- package/lib/esm/workspace/Settings.d.ts +8 -0
- package/lib/esm/workspace/Settings.d.ts.map +1 -1
- package/lib/esm/workspace/Settings.js.map +1 -1
- package/lib/esm/workspace/SettingsDb.d.ts +109 -0
- package/lib/esm/workspace/SettingsDb.d.ts.map +1 -0
- package/lib/esm/workspace/SettingsDb.js +16 -0
- package/lib/esm/workspace/SettingsDb.js.map +1 -0
- package/lib/esm/workspace/SettingsEditor.d.ts +250 -0
- package/lib/esm/workspace/SettingsEditor.d.ts.map +1 -0
- package/lib/esm/workspace/SettingsEditor.js +50 -0
- package/lib/esm/workspace/SettingsEditor.js.map +1 -0
- package/lib/esm/workspace/SettingsSchemas.js.map +1 -1
- package/lib/esm/workspace/Workspace.d.ts +42 -19
- package/lib/esm/workspace/Workspace.d.ts.map +1 -1
- package/lib/esm/workspace/Workspace.js.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.d.ts +32 -1
- package/lib/esm/workspace/WorkspaceEditor.d.ts.map +1 -1
- package/lib/esm/workspace/WorkspaceEditor.js +19 -0
- package/lib/esm/workspace/WorkspaceEditor.js.map +1 -1
- package/package.json +15 -15
- package/lib/esm/test/ecdb/ECSqlReader.test.d.ts +0 -2
- package/lib/esm/test/ecdb/ECSqlReader.test.d.ts.map +0 -1
- package/lib/esm/test/ecdb/ECSqlReader.test.js +0 -669
- package/lib/esm/test/ecdb/ECSqlReader.test.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECSqlDatasets.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/dataset/ECSqlDatasets.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 * as path from \"path\";\r\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\r\nimport { _nativeDb, IModelDb, IModelHost, SnapshotDb, SpatialCategory } from \"../../../core-backend\";\r\nimport { IModelTestUtils } from \"../../IModelTestUtils\";\r\nimport { Code, ColorDef, ElementAspectProps, GeometryStreamProps, IModel, PhysicalElementProps, RelatedElementProps, SubCategoryAppearance } from \"@itwin/core-common\";\r\nimport { Arc3d, IModelJson, Point2d, Point3d } from \"@itwin/core-geometry\";\r\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\r\n\r\n\r\ninterface IPrimitiveBase {\r\n i?: number;\r\n l?: number;\r\n d?: number;\r\n b?: boolean;\r\n dt?: string;\r\n s?: string;\r\n j?: string;\r\n bin?: Uint8Array;\r\n p2d?: Point2d;\r\n p3d?: Point3d;\r\n g?: GeometryStreamProps;\r\n}\r\n\r\ninterface IPrimitive extends IPrimitiveBase {\r\n st?: ComplexStruct;\r\n}\r\n\r\ninterface IPrimitiveArrayBase {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_i?: number[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_l?: number[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_d?: number[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_b?: boolean[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_dt?: string[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_s?: string[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_bin?: Uint8Array[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_p2d?: Point2d[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_p3d?: Point3d[];\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_g?: GeometryStreamProps[];\r\n}\r\n\r\ninterface IPrimitiveArray extends IPrimitiveArrayBase {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_st?: ComplexStruct[];\r\n}\r\n\r\ninterface ComplexStruct extends IPrimitiveArrayBase, IPrimitiveBase { }\r\n\r\ninterface TestElementProps extends PhysicalElementProps, IPrimitive, IPrimitiveArray {\r\n directStr?: string;\r\n directLong?: number;\r\n directDouble?: number;\r\n nullProp?: string;\r\n enumIntProp?: number;\r\n enumIntPropArr?: number[];\r\n enumStringProp?: string;\r\n enumStringPropArr?: string[];\r\n noCaseString?: string;\r\n}\r\n\r\nfunction createElemProps(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number): TestElementProps {\r\n // add Geometry\r\n const geomArray: Arc3d[] = [\r\n Arc3d.createXY(Point3d.create(0, 0), 5),\r\n Arc3d.createXY(Point3d.create(5, 5), 2),\r\n Arc3d.createXY(Point3d.create(-5, -5), 20),\r\n ];\r\n const geometryStream: GeometryStreamProps = [];\r\n for (const geom of geomArray) {\r\n const arcData = IModelJson.Writer.toIModelJson(geom);\r\n geometryStream.push(arcData);\r\n }\r\n // Create props\r\n const elementProps: TestElementProps = {\r\n classFullName: `AllProperties:${className}`,\r\n model: modId,\r\n category: catId,\r\n code: Code.createEmpty(),\r\n geom: geometryStream,\r\n i: 100 + index,\r\n l: 1000 + index,\r\n d: 0.1 + index,\r\n s: `str${index}`,\r\n j: `{\"${String.fromCharCode(65 + index)}\": ${index}}`,\r\n dt: index % 2 === 0 ? \"2017-01-01T00:00:00.000\" : \"2010-01-01T11:11:11.000\",\r\n bin: index % 2 === 0 ? new Uint8Array([1, 2, 3]) : new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22]),\r\n p2d: index % 2 === 0 ? new Point2d(1.034, 2.034) : new Point2d(1111.11, 2222.22),\r\n p3d: index % 2 === 0 ? new Point3d(-1.0, 2.3, 3.0001) : new Point3d(-111.11, -222.22, -333.33),\r\n b: true,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_b: [true, false, true],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_i: [0, 1, 2],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_d: [0.0, 1.1, 2.2],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_l: [10000, 20000, 30000],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_s: [\"s0\", \"s1\", \"s2\"],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_dt: [\"2017-01-01T00:00:00.000\", \"2010-01-01T11:11:11.000\"],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_p2d: [new Point2d(1.034, 2.034), new Point2d(1111.11, 2222.22)],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_p3d: [new Point3d(-1.0, 2.3, 3.0001), new Point3d(-111.11, -222.22, -333.33)],\r\n // eslint-disable-next-line @typescript-eslint/naming-convention\r\n array_bin: [new Uint8Array([1, 2, 3]), new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22])],\r\n directStr: `str${index}`,\r\n directLong: 1000 + index,\r\n directDouble: 0.1 + index,\r\n nullProp: (index % 2 === 0) ? undefined : \"NotNull\",\r\n noCaseString: (index % 2 === 0) ? \"abc\" : \"ABC\",\r\n enumIntProp: index % 2 === 0 ? 1 : 2,\r\n enumStringProp: index % 2 === 0 ? \"1\" : \"2\",\r\n enumIntPropArr: [1, 2, 3],\r\n enumStringPropArr: [\"1\", \"2\", \"3\"]\r\n };\r\n return elementProps;\r\n}\r\n\r\ninterface TestElementAspectProps extends ElementAspectProps, IPrimitive, IPrimitiveArray { }\r\n\r\nfunction createElemAspect(className: string, _iModelName: IModelDb, elementId: Id64String, autoHandledProp: any): TestElementAspectProps {\r\n // Create props\r\n const elementProps: ElementAspectProps = {\r\n classFullName: `AllProperties:${className}`,\r\n element: { id: elementId },\r\n };\r\n\r\n if (autoHandledProp)\r\n Object.assign(elementProps, autoHandledProp);\r\n\r\n return elementProps;\r\n}\r\n\r\ninterface TestElementWithNavProps extends TestElementProps {\r\n name: string;\r\n featureUsesElement: RelatedElementProps;\r\n}\r\n\r\nfunction createElemWithNavProp(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number, elementId: Id64String): TestElementWithNavProps {\r\n const eProps = createElemProps(className, _iModelName, modId, catId, index);\r\n return {\r\n ...eProps,\r\n name: `Feature${elementId.toString()}`,\r\n featureUsesElement: {\r\n id: elementId,\r\n relClassName: \"AllProperties:TestFeatureUsesElement\",\r\n }\r\n } as TestElementWithNavProps;\r\n}\r\n\r\nexport class ECSqlDatasets {\r\n public static async generateFiles(): Promise<void> {\r\n const fileName = \"AllProperties.bim\";\r\n\r\n await IModelHost.startup();\r\n const filePath = IModelTestUtils.prepareOutputFile(\"ECSqlTests\", fileName);\r\n const iModel = SnapshotDb.createEmpty(filePath, { rootSubject: { name: \"AllPropertiesTest\" } });\r\n const testSchemaPath = path.join(KnownTestLocations.assetsDir, \"ECSqlTests\", \"AllProperties.ecschema.xml\");\r\n await iModel.importSchemas([testSchemaPath]);\r\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(iModel, Code.createEmpty(), true);\r\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(iModel, IModel.dictionaryId, \"MySpatialCategory\");\r\n if (undefined === spatialCategoryId)\r\n spatialCategoryId = SpatialCategory.insert(iModel, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\r\n\r\n let index = 0;\r\n const elementIds: Id64String[] = [];\r\n for (index = 0; index < 10; ++index) {\r\n const elementProps = createElemProps(\"TestElement\", iModel, newModelId, spatialCategoryId, index);\r\n const testElement = iModel.elements.createElement(elementProps);\r\n const elementId = iModel.elements.insertElement(testElement.toJSON());\r\n assert.isTrue(Id64.isValidId64(elementId), \"element insert failed\");\r\n\r\n if (index % 2 === 0) {\r\n const aspectId = iModel.elements.insertAspect(createElemAspect(\"TestElementAspect\", iModel, elementId, undefined));\r\n assert.isTrue(Id64.isValidId64(aspectId), \"element aspect insert failed\");\r\n }\r\n elementIds.push(elementId);\r\n }\r\n\r\n // Add two instances of feature class instance with a navigation property\r\n const poppedId1 = elementIds.pop();\r\n if (poppedId1 === undefined)\r\n assert.fail(\"Expected at least 1 element id\");\r\n const elementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId1));\r\n assert.isTrue(Id64.isValidId64(iModel.elements.insertElement(elementWithNavProp.toJSON())), \"element with nav props insert failed\");\r\n\r\n const poppedId2 = elementIds.pop();\r\n if (poppedId2 === undefined)\r\n assert.fail(\"Expected another element id\");\r\n const anotherElementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId2));\r\n assert.isTrue(Id64.isValidId64(iModel.elements.insertElement(anotherElementWithNavProp.toJSON())), \"element with nav props insert failed\");\r\n\r\n iModel.saveChanges();\r\n iModel.close();\r\n }\r\n}"]}
|
|
1
|
+
{"version":3,"file":"ECSqlDatasets.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/dataset/ECSqlDatasets.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 * as path from \"path\";\nimport { Id64, Id64String } from \"@itwin/core-bentley\";\nimport { _nativeDb, IModelDb, IModelHost, SnapshotDb, SpatialCategory } from \"../../../core-backend\";\nimport { IModelTestUtils } from \"../../IModelTestUtils\";\nimport { Code, ColorDef, ElementAspectProps, GeometryStreamProps, IModel, PhysicalElementProps, RelatedElementProps, SubCategoryAppearance } from \"@itwin/core-common\";\nimport { Arc3d, IModelJson, Point2d, Point3d, Range3d } from \"@itwin/core-geometry\";\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\n\n\ninterface IPrimitiveBase {\n i?: number;\n l?: number;\n d?: number;\n b?: boolean;\n dt?: string;\n s?: string;\n j?: string;\n bin?: Uint8Array;\n p2d?: Point2d;\n p3d?: Point3d;\n g?: GeometryStreamProps;\n range3d?: Uint8Array;\n}\n\ninterface IPrimitive extends IPrimitiveBase {\n st?: ComplexStruct;\n}\n\ninterface IPrimitiveArrayBase {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_i?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_l?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_d?: number[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_b?: boolean[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_dt?: string[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_s?: string[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_bin?: Uint8Array[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p2d?: Point2d[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p3d?: Point3d[];\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_g?: GeometryStreamProps[];\n}\n\ninterface IPrimitiveArray extends IPrimitiveArrayBase {\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_st?: ComplexStruct[];\n}\n\ninterface ComplexStruct extends IPrimitiveArrayBase, IPrimitiveBase { }\n\ninterface TestElementProps extends PhysicalElementProps, IPrimitive, IPrimitiveArray {\n directStr?: string;\n directLong?: number;\n directDouble?: number;\n nullProp?: string;\n enumIntProp?: number;\n enumIntPropArr?: number[];\n enumStringProp?: string;\n enumStringPropArr?: string[];\n noCaseString?: string;\n}\n\nfunction createElemProps(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number): TestElementProps {\n // add Geometry\n const geomArray: Arc3d[] = [\n Arc3d.createXY(Point3d.create(0, 0), 5),\n Arc3d.createXY(Point3d.create(5, 5), 2),\n Arc3d.createXY(Point3d.create(-5, -5), 20),\n ];\n const geometryStream: GeometryStreamProps = [];\n for (const geom of geomArray) {\n const arcData = IModelJson.Writer.toIModelJson(geom);\n geometryStream.push(arcData);\n }\n // Create props\n const elementProps: TestElementProps = {\n classFullName: `AllProperties:${className}`,\n model: modId,\n category: catId,\n code: Code.createEmpty(),\n geom: geometryStream,\n i: 100 + index,\n l: 1000 + index,\n d: 0.1 + index,\n s: `str${index}`,\n j: `{\"${String.fromCharCode(65 + index)}\": ${index}}`,\n dt: index % 2 === 0 ? \"2017-01-01T00:00:00.000\" : \"2010-01-01T11:11:11.000\",\n bin: index % 2 === 0 ? new Uint8Array([1, 2, 3]) : new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22]),\n p2d: index % 2 === 0 ? new Point2d(1.034, 2.034) : new Point2d(1111.11, 2222.22),\n p3d: index % 2 === 0 ? new Point3d(-1.0, 2.3, 3.0001) : new Point3d(-111.11, -222.22, -333.33),\n b: true,\n range3d: index === 0\n ? new Uint8Array(new Range3d(1.2, 2.3, 3.4, 4.5, 5.6, 6.7).toFloat64Array().buffer)\n : new Uint8Array(new Range3d(2.2, 3.3, 4.4, 5.5, 6.6, 7.7).toFloat64Array().buffer),\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_b: [true, false, true],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_i: [0, 1, 2],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_d: [0.0, 1.1, 2.2],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_l: [10000, 20000, 30000],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_s: [\"s0\", \"s1\", \"s2\"],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_dt: [\"2017-01-01T00:00:00.000\", \"2010-01-01T11:11:11.000\"],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p2d: [new Point2d(1.034, 2.034), new Point2d(1111.11, 2222.22)],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_p3d: [new Point3d(-1.0, 2.3, 3.0001), new Point3d(-111.11, -222.22, -333.33)],\n // eslint-disable-next-line @typescript-eslint/naming-convention\n array_bin: [new Uint8Array([1, 2, 3]), new Uint8Array([11, 21, 31, 34, 53, 21, 14, 14, 55, 22])],\n directStr: `str${index}`,\n directLong: 1000 + index,\n directDouble: 0.1 + index,\n nullProp: (index % 2 === 0) ? undefined : \"NotNull\",\n noCaseString: (index % 2 === 0) ? \"abc\" : \"ABC\",\n enumIntProp: index % 2 === 0 ? 1 : 2,\n enumStringProp: index % 2 === 0 ? \"1\" : \"2\",\n enumIntPropArr: [1, 2, 3],\n enumStringPropArr: [\"1\", \"2\", \"3\"]\n };\n return elementProps;\n}\n\ninterface TestElementAspectProps extends ElementAspectProps, IPrimitive, IPrimitiveArray { }\n\nfunction createElemAspect(className: string, _iModelName: IModelDb, elementId: Id64String, autoHandledProp: any): TestElementAspectProps {\n // Create props\n const elementProps: ElementAspectProps = {\n classFullName: `AllProperties:${className}`,\n element: { id: elementId },\n };\n\n if (autoHandledProp)\n Object.assign(elementProps, autoHandledProp);\n\n return elementProps;\n}\n\ninterface TestElementWithNavProps extends TestElementProps {\n name: string;\n featureUsesElement: RelatedElementProps;\n}\n\nfunction createElemWithNavProp(className: string, _iModelName: IModelDb, modId: Id64String, catId: Id64String, index: number, elementId: Id64String): TestElementWithNavProps {\n const eProps = createElemProps(className, _iModelName, modId, catId, index);\n return {\n ...eProps,\n name: `Feature${elementId.toString()}`,\n featureUsesElement: {\n id: elementId,\n relClassName: \"AllProperties:TestFeatureUsesElement\",\n }\n } as TestElementWithNavProps;\n}\n\nexport class ECSqlDatasets {\n public static async generateFiles(): Promise<void> {\n const fileName = \"AllProperties.bim\";\n\n await IModelHost.startup();\n const filePath = IModelTestUtils.prepareOutputFile(\"ECSqlTests\", fileName);\n const iModel = SnapshotDb.createEmpty(filePath, { rootSubject: { name: \"AllPropertiesTest\" } });\n const testSchemaPath = path.join(KnownTestLocations.assetsDir, \"ECSqlTests\", \"AllProperties.ecschema.xml\");\n await iModel.importSchemas([testSchemaPath]);\n const [, newModelId] = IModelTestUtils.createAndInsertPhysicalPartitionAndModel(iModel, Code.createEmpty(), true);\n let spatialCategoryId = SpatialCategory.queryCategoryIdByName(iModel, IModel.dictionaryId, \"MySpatialCategory\");\n if (undefined === spatialCategoryId)\n spatialCategoryId = SpatialCategory.insert(iModel, IModel.dictionaryId, \"MySpatialCategory\", new SubCategoryAppearance({ color: ColorDef.fromString(\"rgb(255,0,0)\").toJSON() }));\n\n let index = 0;\n const elementIds: Id64String[] = [];\n for (index = 0; index < 10; ++index) {\n const elementProps = createElemProps(\"TestElement\", iModel, newModelId, spatialCategoryId, index);\n const testElement = iModel.elements.createElement(elementProps);\n const elementId = iModel.elements.insertElement(testElement.toJSON());\n assert.isTrue(Id64.isValidId64(elementId), \"element insert failed\");\n\n if (index % 2 === 0) {\n const aspectId = iModel.elements.insertAspect(createElemAspect(\"TestElementAspect\", iModel, elementId, undefined));\n assert.isTrue(Id64.isValidId64(aspectId), \"element aspect insert failed\");\n }\n elementIds.push(elementId);\n }\n\n // Add two instances of feature class instance with a navigation property\n const poppedId1 = elementIds.pop();\n if (poppedId1 === undefined)\n assert.fail(\"Expected at least 1 element id\");\n const elementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId1));\n assert.isTrue(Id64.isValidId64(iModel.elements.insertElement(elementWithNavProp.toJSON())), \"element with nav props insert failed\");\n\n const poppedId2 = elementIds.pop();\n if (poppedId2 === undefined)\n assert.fail(\"Expected another element id\");\n const anotherElementWithNavProp = iModel.elements.createElement(createElemWithNavProp(\"TestFeature\", iModel, newModelId, spatialCategoryId, ++index, poppedId2));\n assert.isTrue(Id64.isValidId64(iModel.elements.insertElement(anotherElementWithNavProp.toJSON())), \"element with nav props insert failed\");\n\n iModel.saveChanges();\n iModel.close();\n }\n}"]}
|
|
@@ -127,32 +127,32 @@ function writeMarkdownFile(dataset, sql, columns, results, useTables) {
|
|
|
127
127
|
if (sql.length > 100) { // we format the SQL if it's too long
|
|
128
128
|
sql = format(sql, { language: "sqlite", keywordCase: "upper", "tabWidth": 2, indentStyle: "standard", logicalOperatorNewline: "after" });
|
|
129
129
|
}
|
|
130
|
-
let markdownContent = `# GeneratedTest #${dataset} - ${hash}
|
|
131
|
-
|
|
132
|
-
- dataset: ${dataset}
|
|
133
|
-
|
|
134
|
-
\`\`\`sql
|
|
135
|
-
${sql}
|
|
136
|
-
\`\`\`
|
|
130
|
+
let markdownContent = `# GeneratedTest #${dataset} - ${hash}
|
|
131
|
+
|
|
132
|
+
- dataset: ${dataset}
|
|
133
|
+
|
|
134
|
+
\`\`\`sql
|
|
135
|
+
${sql}
|
|
136
|
+
\`\`\`
|
|
137
137
|
`;
|
|
138
138
|
if (useTables) {
|
|
139
|
-
markdownContent += `
|
|
140
|
-
${arrayToMarkdownTable(columns)}
|
|
141
|
-
|
|
142
|
-
${arrayToMarkdownTable(results)}
|
|
143
|
-
|
|
139
|
+
markdownContent += `
|
|
140
|
+
${arrayToMarkdownTable(columns)}
|
|
141
|
+
|
|
142
|
+
${arrayToMarkdownTable(results)}
|
|
143
|
+
|
|
144
144
|
`;
|
|
145
145
|
}
|
|
146
146
|
else {
|
|
147
|
-
markdownContent += `
|
|
148
|
-
\`\`\`json
|
|
149
|
-
${JSON.stringify({ columns }, null, 2)}
|
|
150
|
-
\`\`\`
|
|
151
|
-
|
|
152
|
-
\`\`\`json
|
|
153
|
-
${JSON.stringify(results, null, 2)}
|
|
154
|
-
\`\`\`
|
|
155
|
-
|
|
147
|
+
markdownContent += `
|
|
148
|
+
\`\`\`json
|
|
149
|
+
${JSON.stringify({ columns }, null, 2)}
|
|
150
|
+
\`\`\`
|
|
151
|
+
|
|
152
|
+
\`\`\`json
|
|
153
|
+
${JSON.stringify(results, null, 2)}
|
|
154
|
+
\`\`\`
|
|
155
|
+
|
|
156
156
|
`;
|
|
157
157
|
}
|
|
158
158
|
const outputFilePath = path.join(__dirname, "generated.ecsql.md");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECSqlTestGenerator.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestGenerator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\nimport { IModelDb, SnapshotDb } from \"../../../core-backend\";\r\nimport { DbResult } from \"@itwin/core-bentley\";\r\nimport { ECSqlValueType, QueryOptionsBuilder, QueryPropertyMetaData, QueryRowFormat } from \"@itwin/core-common\";\r\nimport * as path from \"path\";\r\nimport * as fs from \"fs\";\r\nimport * as crypto from \"crypto\";\r\nimport { ECSqlDatasets } from \"../dataset/ECSqlDatasets\";\r\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\r\nimport { format } from \"sql-formatter\";\r\n\r\n// Call like this:\r\n// node lib\\cjs\\test\\ecsql\\src\\ECSqlTestGenerator.js AllProperties.bim \"SELECT * FROM meta.ECSchemaDef LIMIT 2\" -t\r\n// node lib\\cjs\\test\\ecsql\\src\\ECSqlTestGenerator.js AllProperties.bim \"SELECT te.ECInstanceId [MyId], te.s, te.DT [Date], row_number() over(PARTITION BY te.DT ORDER BY te.ECInstanceId) as [RowNumber] from aps.TestElement te WHERE te.i < 106\" -t\r\nasync function runConcurrentQuery(imodel: IModelDb, sql: string): Promise<{ metadata: any[], rows: any[] }> {\r\n const queryOptions: QueryOptionsBuilder = new QueryOptionsBuilder();\r\n queryOptions.setRowFormat(QueryRowFormat.UseECSqlPropertyNames);\r\n const reader = imodel.createQueryReader(sql, undefined, queryOptions.getOptions());\r\n const rows = await reader.toArray();\r\n const metadata = await reader.getMetaData();\r\n metadata.forEach((value: QueryPropertyMetaData) => delete (value as any).extendType);\r\n return { metadata, rows };\r\n}\r\n\r\nfunction pullAdditionalMetadataThroughECSqlStatement(imodel: IModelDb, metadata: any[], sql: string): void {\r\n // eslint-disable-next-line @typescript-eslint/no-deprecated\r\n using stmt = imodel.prepareStatement(sql);\r\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\r\n const colCount = stmt.getColumnCount();\r\n if (colCount !== metadata.length) {\r\n // eslint-disable-next-line no-console\r\n console.error(`Column count mismatch: ${colCount} != ${metadata.length}. Not generating metadata from statement.`);\r\n return;\r\n }\r\n for (let i = 0; i < colCount; i++) {\r\n const colInfo = stmt.getValue(i).columnInfo;\r\n metadata[i].type = ECSqlValueType[colInfo.getType()];\r\n const originPropertyName = colInfo.getOriginPropertyName();\r\n if (originPropertyName !== undefined)\r\n metadata[i].originPropertyName = originPropertyName;\r\n }\r\n }\r\n}\r\n\r\nfunction arrayToMarkdownTable(data: any[]): string {\r\n if (data.length === 0) {\r\n return \"\";\r\n }\r\n\r\n const headers: string[] = Array.from(data.reduce((headersSet, row) => {\r\n Object.keys(row).forEach(header => headersSet.add(header));\r\n return headersSet;\r\n }, new Set<string>()));\r\n\r\n const columnWidths = headers.map(header =>\r\n Math.max(header.length, ...data.map(row => String(row[header]).length))\r\n );\r\n\r\n const formatRow = (row: any) =>\r\n `| ${headers.map((header, i) => String(row[header]).padEnd(columnWidths[i])).join(\" | \")} |`;\r\n\r\n const headerRow = formatRow(headers.reduce((acc, header) => ({ ...acc, [header]: header }), {}));\r\n const separatorRow = `| ${columnWidths.map(width => \"-\".repeat(width)).join(\" | \")} |`;\r\n const dataRows = data.map(formatRow);\r\n\r\n return [headerRow, separatorRow, ...dataRows].join(\"\\n\");\r\n}\r\n\r\nfunction generateHash(input: string): string {\r\n return crypto.createHash('sha256').update(input).digest('hex').substring(0, 8);\r\n}\r\n\r\nfunction writeMarkdownFile(dataset: string, sql: string, columns: any[], results: any[], useTables: boolean): void {\r\n const hash = generateHash(sql);\r\n if (sql.length > 100) { // we format the SQL if it's too long\r\n sql = format(sql, { language: \"sqlite\", keywordCase: \"upper\", \"tabWidth\": 2, indentStyle: \"standard\", logicalOperatorNewline: \"after\" });\r\n }\r\n\r\n let markdownContent = `# GeneratedTest #${dataset} - ${hash}\r\n\r\n- dataset: ${dataset}\r\n\r\n\\`\\`\\`sql\r\n${sql}\r\n\\`\\`\\`\r\n`;\r\n\r\n if (useTables) {\r\n markdownContent += `\r\n${arrayToMarkdownTable(columns)}\r\n\r\n${arrayToMarkdownTable(results)}\r\n\r\n`;\r\n } else {\r\n markdownContent += `\r\n\\`\\`\\`json\r\n${JSON.stringify({ columns }, null, 2)}\r\n\\`\\`\\`\r\n\r\n\\`\\`\\`json\r\n${JSON.stringify(results, null, 2)}\r\n\\`\\`\\`\r\n\r\n`;\r\n }\r\n\r\n const outputFilePath = path.join(__dirname, \"generated.ecsql.md\");\r\n fs.appendFileSync(outputFilePath, markdownContent, \"utf-8\");\r\n // eslint-disable-next-line no-console\r\n console.log(`Results written to ${outputFilePath}`);\r\n}\r\n\r\nasync function main() {\r\n const args = process.argv.slice(2);\r\n if (args.length < 2) {\r\n // eslint-disable-next-line no-console\r\n console.error(\"Usage: ts-node ECDbMarkdownTestGenerator.ts <dataset> <sql>\");\r\n process.exit(1);\r\n }\r\n\r\n const [dataset, sql, tablesFlag] = args;\r\n const useTables = tablesFlag === \"-t\";\r\n let imodel: IModelDb | undefined;\r\n try {\r\n await ECSqlDatasets.generateFiles();\r\n const datasetFilePath = path.join(KnownTestLocations.outputDir, \"ECSqlTests\", dataset);\r\n imodel = SnapshotDb.openFile(datasetFilePath);\r\n const { metadata, rows } = await runConcurrentQuery(imodel, sql);\r\n pullAdditionalMetadataThroughECSqlStatement(imodel, metadata, sql);\r\n writeMarkdownFile(dataset, sql, metadata, rows, useTables);\r\n imodel.close();\r\n imodel = undefined;\r\n } catch (error) {\r\n // eslint-disable-next-line no-console\r\n console.error(\"Error running query:\", error);\r\n if (imodel) {\r\n imodel.close();\r\n }\r\n process.exit(1);\r\n }\r\n}\r\n\r\nmain().catch((error) => {\r\n // eslint-disable-next-line no-console\r\n console.error(\"Unhandled error in main:\", error);\r\n process.exit(1);\r\n});"]}
|
|
1
|
+
{"version":3,"file":"ECSqlTestGenerator.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestGenerator.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\nimport { IModelDb, SnapshotDb } from \"../../../core-backend\";\nimport { DbResult } from \"@itwin/core-bentley\";\nimport { ECSqlValueType, QueryOptionsBuilder, QueryPropertyMetaData, QueryRowFormat } from \"@itwin/core-common\";\nimport * as path from \"path\";\nimport * as fs from \"fs\";\nimport * as crypto from \"crypto\";\nimport { ECSqlDatasets } from \"../dataset/ECSqlDatasets\";\nimport { KnownTestLocations } from \"../../KnownTestLocations\";\nimport { format } from \"sql-formatter\";\n\n// Call like this:\n// node lib\\cjs\\test\\ecsql\\src\\ECSqlTestGenerator.js AllProperties.bim \"SELECT * FROM meta.ECSchemaDef LIMIT 2\" -t\n// node lib\\cjs\\test\\ecsql\\src\\ECSqlTestGenerator.js AllProperties.bim \"SELECT te.ECInstanceId [MyId], te.s, te.DT [Date], row_number() over(PARTITION BY te.DT ORDER BY te.ECInstanceId) as [RowNumber] from aps.TestElement te WHERE te.i < 106\" -t\nasync function runConcurrentQuery(imodel: IModelDb, sql: string): Promise<{ metadata: any[], rows: any[] }> {\n const queryOptions: QueryOptionsBuilder = new QueryOptionsBuilder();\n queryOptions.setRowFormat(QueryRowFormat.UseECSqlPropertyNames);\n const reader = imodel.createQueryReader(sql, undefined, queryOptions.getOptions());\n const rows = await reader.toArray();\n const metadata = await reader.getMetaData();\n metadata.forEach((value: QueryPropertyMetaData) => delete (value as any).extendType);\n return { metadata, rows };\n}\n\nfunction pullAdditionalMetadataThroughECSqlStatement(imodel: IModelDb, metadata: any[], sql: string): void {\n // eslint-disable-next-line @typescript-eslint/no-deprecated\n using stmt = imodel.prepareStatement(sql);\n if (stmt.step() === DbResult.BE_SQLITE_ROW) {\n const colCount = stmt.getColumnCount();\n if (colCount !== metadata.length) {\n // eslint-disable-next-line no-console\n console.error(`Column count mismatch: ${colCount} != ${metadata.length}. Not generating metadata from statement.`);\n return;\n }\n for (let i = 0; i < colCount; i++) {\n const colInfo = stmt.getValue(i).columnInfo;\n metadata[i].type = ECSqlValueType[colInfo.getType()];\n const originPropertyName = colInfo.getOriginPropertyName();\n if (originPropertyName !== undefined)\n metadata[i].originPropertyName = originPropertyName;\n }\n }\n}\n\nfunction arrayToMarkdownTable(data: any[]): string {\n if (data.length === 0) {\n return \"\";\n }\n\n const headers: string[] = Array.from(data.reduce((headersSet, row) => {\n Object.keys(row).forEach(header => headersSet.add(header));\n return headersSet;\n }, new Set<string>()));\n\n const columnWidths = headers.map(header =>\n Math.max(header.length, ...data.map(row => String(row[header]).length))\n );\n\n const formatRow = (row: any) =>\n `| ${headers.map((header, i) => String(row[header]).padEnd(columnWidths[i])).join(\" | \")} |`;\n\n const headerRow = formatRow(headers.reduce((acc, header) => ({ ...acc, [header]: header }), {}));\n const separatorRow = `| ${columnWidths.map(width => \"-\".repeat(width)).join(\" | \")} |`;\n const dataRows = data.map(formatRow);\n\n return [headerRow, separatorRow, ...dataRows].join(\"\\n\");\n}\n\nfunction generateHash(input: string): string {\n return crypto.createHash('sha256').update(input).digest('hex').substring(0, 8);\n}\n\nfunction writeMarkdownFile(dataset: string, sql: string, columns: any[], results: any[], useTables: boolean): void {\n const hash = generateHash(sql);\n if (sql.length > 100) { // we format the SQL if it's too long\n sql = format(sql, { language: \"sqlite\", keywordCase: \"upper\", \"tabWidth\": 2, indentStyle: \"standard\", logicalOperatorNewline: \"after\" });\n }\n\n let markdownContent = `# GeneratedTest #${dataset} - ${hash}\n\n- dataset: ${dataset}\n\n\\`\\`\\`sql\n${sql}\n\\`\\`\\`\n`;\n\n if (useTables) {\n markdownContent += `\n${arrayToMarkdownTable(columns)}\n\n${arrayToMarkdownTable(results)}\n\n`;\n } else {\n markdownContent += `\n\\`\\`\\`json\n${JSON.stringify({ columns }, null, 2)}\n\\`\\`\\`\n\n\\`\\`\\`json\n${JSON.stringify(results, null, 2)}\n\\`\\`\\`\n\n`;\n }\n\n const outputFilePath = path.join(__dirname, \"generated.ecsql.md\");\n fs.appendFileSync(outputFilePath, markdownContent, \"utf-8\");\n // eslint-disable-next-line no-console\n console.log(`Results written to ${outputFilePath}`);\n}\n\nasync function main() {\n const args = process.argv.slice(2);\n if (args.length < 2) {\n // eslint-disable-next-line no-console\n console.error(\"Usage: ts-node ECDbMarkdownTestGenerator.ts <dataset> <sql>\");\n process.exit(1);\n }\n\n const [dataset, sql, tablesFlag] = args;\n const useTables = tablesFlag === \"-t\";\n let imodel: IModelDb | undefined;\n try {\n await ECSqlDatasets.generateFiles();\n const datasetFilePath = path.join(KnownTestLocations.outputDir, \"ECSqlTests\", dataset);\n imodel = SnapshotDb.openFile(datasetFilePath);\n const { metadata, rows } = await runConcurrentQuery(imodel, sql);\n pullAdditionalMetadataThroughECSqlStatement(imodel, metadata, sql);\n writeMarkdownFile(dataset, sql, metadata, rows, useTables);\n imodel.close();\n imodel = undefined;\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\"Error running query:\", error);\n if (imodel) {\n imodel.close();\n }\n process.exit(1);\n }\n}\n\nmain().catch((error) => {\n // eslint-disable-next-line no-console\n console.error(\"Unhandled error in main:\", error);\n process.exit(1);\n});"]}
|
|
@@ -39,7 +39,7 @@ export declare const columnInfoPropsKeys: Set<keyof ColumnInfoProps>;
|
|
|
39
39
|
export declare enum ECDbTestMode {
|
|
40
40
|
Both = "Both",
|
|
41
41
|
Statement = "Statement",
|
|
42
|
-
|
|
42
|
+
QueryReader = "QueryReader"
|
|
43
43
|
}
|
|
44
44
|
export declare enum ECDbTestRowFormat {
|
|
45
45
|
ECSqlNames = "ECSqlNames",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECSqlTestParser.d.ts","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestParser.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IAGd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,2BAA2B,EAAE,OAAO,CAAC;IACrC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;IAMrC,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,GAAG,GAAG,EAAE,CAAC;IACnD,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAG/B,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,mBAAmB,EAAE,GAAG,CAAC,MAAM,eAAe,CAWzD,CAAC;AA6CH,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,
|
|
1
|
+
{"version":3,"file":"ECSqlTestParser.d.ts","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestParser.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IAGd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,eAAe,EAAE,OAAO,CAAC;IACzB,2BAA2B,EAAE,OAAO,CAAC;IACrC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,yBAAyB,CAAC,EAAE,MAAM,EAAE,CAAC;IAMrC,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,EAAE,GAAG,GAAG,EAAE,CAAC;IACnD,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAG/B,OAAO,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,eAAO,MAAM,mBAAmB,EAAE,GAAG,CAAC,MAAM,eAAe,CAWzD,CAAC;AA6CH,oBAAY,YAAY;IACtB,IAAI,SAAS;IACb,SAAS,cAAc;IACvB,WAAW,gBAAgB;CAC5B;AAED,oBAAY,iBAAiB;IAC3B,UAAU,eAAe;IACzB,YAAY,iBAAiB;IAC7B,OAAO,YAAY;CACpB;AAmCD,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAQ7C;AAkBD,qBAAa,sBAAsB;WACnB,KAAK,IAAI,aAAa,EAAE;IAgBtC,OAAO,CAAC,MAAM,CAAC,SAAS;IA+CxB,OAAO,CAAC,MAAM,CAAC,eAAe;IAuD9B,OAAO,CAAC,MAAM,CAAC,UAAU;IAgBzB,OAAO,CAAC,MAAM,CAAC,eAAe;IAgB9B,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAcnC,OAAO,CAAC,MAAM,CAAC,eAAe;IA+B9B,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAqBvC,OAAO,CAAC,MAAM,CAAC,yBAAyB;IAIxC,OAAO,CAAC,MAAM,CAAC,gBAAgB;IAS/B,OAAO,CAAC,MAAM,CAAC,WAAW;IAY1B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAmBhC,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAwBzC,OAAO,CAAC,MAAM,CAAC,uDAAuD;CAsBvE"}
|
|
@@ -71,7 +71,7 @@ export var ECDbTestMode;
|
|
|
71
71
|
(function (ECDbTestMode) {
|
|
72
72
|
ECDbTestMode["Both"] = "Both";
|
|
73
73
|
ECDbTestMode["Statement"] = "Statement";
|
|
74
|
-
ECDbTestMode["
|
|
74
|
+
ECDbTestMode["QueryReader"] = "QueryReader";
|
|
75
75
|
})(ECDbTestMode || (ECDbTestMode = {}));
|
|
76
76
|
;
|
|
77
77
|
export var ECDbTestRowFormat;
|
|
@@ -81,6 +81,10 @@ export var ECDbTestRowFormat;
|
|
|
81
81
|
ECDbTestRowFormat["JsNames"] = "JsNames";
|
|
82
82
|
})(ECDbTestRowFormat || (ECDbTestRowFormat = {}));
|
|
83
83
|
function tableTextToValue(text) {
|
|
84
|
+
// Unescape literal \n sequences to actual newline characters
|
|
85
|
+
text = text.replace(/\\n/g, "\n");
|
|
86
|
+
// Trim leading/trailing whitespaces
|
|
87
|
+
text = text.trim();
|
|
84
88
|
if (text.startsWith("\"") && text.endsWith("\""))
|
|
85
89
|
return text.slice(1, text.length - 1);
|
|
86
90
|
if (text === "null")
|
|
@@ -162,8 +166,10 @@ export class ECDbMarkdownTestParser {
|
|
|
162
166
|
if (currentTest !== undefined) {
|
|
163
167
|
out.push(currentTest);
|
|
164
168
|
}
|
|
165
|
-
currentTest = {
|
|
166
|
-
|
|
169
|
+
currentTest = {
|
|
170
|
+
title: token.text, mode: ECDbTestMode.Both, fileName: baseFileName,
|
|
171
|
+
rowFormat: ECDbTestRowFormat.ECSqlNames, abbreviateBlobs: false, convertClassIdsToClassNames: false
|
|
172
|
+
};
|
|
167
173
|
break;
|
|
168
174
|
case "list":
|
|
169
175
|
this.handleListToken(token, currentTest, markdownFilePath);
|
|
@@ -242,8 +248,8 @@ export class ECDbMarkdownTestParser {
|
|
|
242
248
|
case "statement":
|
|
243
249
|
currentTest.mode = ECDbTestMode.Statement;
|
|
244
250
|
break;
|
|
245
|
-
case "
|
|
246
|
-
currentTest.mode = ECDbTestMode.
|
|
251
|
+
case "queryreader":
|
|
252
|
+
currentTest.mode = ECDbTestMode.QueryReader;
|
|
247
253
|
break;
|
|
248
254
|
case "both":
|
|
249
255
|
currentTest.mode = ECDbTestMode.Both;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ECSqlTestParser.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestParser.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 * as path from \"path\";\r\nimport * as fs from \"fs\";\r\nimport { marked, Tokens } from \"marked\";\r\n\r\nexport interface ECDbTestProps {\r\n fileName: string;\r\n title: string;\r\n\r\n // Things from properties:\r\n only?: boolean; // This flag handles the only property to filter tests\r\n skip?: string; // This flag handles the skip property to filter tests\r\n dataset?: string;\r\n mode: ECDbTestMode;\r\n rowFormat: ECDbTestRowFormat;\r\n abbreviateBlobs: boolean;\r\n convertClassIdsToClassNames: boolean;\r\n errorDuringPrepare?: boolean;\r\n indexesToIncludeInResults?: number[]; // We now have the feature to check only certain columns of expected results\r\n // but if the rowFormat is ECSqlIndexes then there is no way to uniquely identify the columns, in that case this flag is used to include certain property indexes\r\n // for checking and ignore the rest, if this flag is not given while the rowFormat is ECSqlIndexes then the expected Results column\r\n // will assume an incremental 0 based indexing by default. This flag serves as a mapping for the actual results while checking with the expected results.\r\n\r\n // TODO: implement, it's currently being parsed but not used\r\n stepStatus?: string;\r\n\r\n // Things from code blocks or tables\r\n sql?: string;\r\n expectedResults?: { [key: string]: any }[] | any[];\r\n columnInfo?: ColumnInfoProps[];\r\n\r\n // Things from lists\r\n binders?: ECDbTestBinderProps[];\r\n}\r\n\r\nexport interface ECDbTestBinderProps {\r\n indexOrName: string;\r\n type: string;\r\n value: string;\r\n}\r\n\r\nexport interface ColumnInfoProps{\r\n name: string;\r\n className?: string;\r\n accessString?: string;\r\n generated?: boolean;\r\n index?: number;\r\n jsonName?: string;\r\n // expected extendedType value should be given when we know that the actual column info extendedType will be a valid non empty string for test to pass.\r\n // This extendedType value is internally used to check both extendType and extendedType values of column metadata.\r\n extendedType?: string;\r\n type?: string; // type is used on ECSqlStatement because it can differ from TypeName\r\n typeName?: string; // typeName is used on ConcurrentQuery\r\n originPropertyName?: string; // only supported for ECSqlStatement\r\n}\r\n\r\nexport const columnInfoPropsKeys: Set<keyof ColumnInfoProps> = new Set([\r\n \"name\",\r\n \"className\",\r\n \"accessString\",\r\n \"generated\",\r\n \"index\",\r\n \"jsonName\",\r\n \"extendedType\",\r\n \"type\",\r\n \"typeName\",\r\n \"originPropertyName\",\r\n]);\r\n\r\n/* interface QueryPropertyMetaData\r\n className: string;\r\n accessString?: string;\r\n generated: boolean;\r\n index: number;\r\n jsonName: string;\r\n name: string;\r\n extendType: string;\r\n typeName: string;\r\n*/\r\n\r\nfunction isColumnInfoProps(obj: any): obj is ColumnInfoProps {\r\n const numberOfKeys = typeof obj === \"object\" ? Object.keys(obj).length : 0;\r\n const isValid = typeof obj === \"object\" &&\r\n typeof obj.name === \"string\" &&\r\n (obj.className === undefined || typeof obj.className === \"string\") &&\r\n (obj.accessString === undefined || typeof obj.accessString === \"string\") &&\r\n (obj.generated === undefined || typeof obj.generated === \"boolean\") &&\r\n (obj.index === undefined || typeof obj.index === \"number\") &&\r\n (obj.jsonName === undefined || typeof obj.jsonName === \"string\") &&\r\n (obj.extendedType === undefined || typeof obj.extendedType === \"string\") &&\r\n (obj.type === undefined || typeof obj.type === \"string\") &&\r\n (obj.typeName === undefined || typeof obj.typeName === \"string\");\r\n\r\n if (!isValid) {\r\n const errors: string[] = [];\r\n if (typeof obj !== \"object\") errors.push(\"Object is not of type 'object'\");\r\n if (numberOfKeys < 1 || numberOfKeys > 7) errors.push(\"Number of keys is not between 1 and 7\");\r\n if (typeof obj.name !== \"string\") errors.push(\"Property 'name' is not of type 'string'\");\r\n if (obj.className !== undefined && typeof obj.className !== \"string\") errors.push(\"Property 'className' is not of type 'string'\");\r\n if (obj.accessString !== undefined && typeof obj.accessString !== \"string\") errors.push(\"Property 'accessString' is not of type 'string'\");\r\n if (obj.generated !== undefined && typeof obj.generated !== \"boolean\") errors.push(\"Property 'generated' is not of type 'boolean'\");\r\n if (obj.index !== undefined && typeof obj.index !== \"number\") errors.push(\"Property 'index' is not of type 'number'\");\r\n if (obj.jsonName !== undefined && typeof obj.jsonName !== \"string\") errors.push(\"Property 'jsonName' is not of type 'string'\");\r\n if (obj.extendedType !== undefined && typeof obj.extendedType !== \"string\") errors.push(\"Property 'extendedType' is not of type 'string'\");\r\n if (obj.type !== undefined && typeof obj.type !== \"string\") errors.push(\"Property 'type' is not of type 'string'\");\r\n if (obj.typeName !== undefined && typeof obj.typeName !== \"string\") errors.push(\"Property 'typeName' is not of type 'string'\");\r\n logWarning(`Validation failed for ColumnInfoProps. Object: ${JSON.stringify(obj)}. Errors: ${errors.join(\", \")}`);\r\n }\r\n\r\n return isValid;\r\n}\r\n\r\nexport enum ECDbTestMode{\r\n Both = \"Both\",\r\n Statement = \"Statement\",\r\n ConcurrentQuery = \"ConcurrentQuery\",\r\n};\r\n\r\nexport enum ECDbTestRowFormat {\r\n ECSqlNames = \"ECSqlNames\",\r\n ECSqlIndexes = \"ECSqlIndexes\",\r\n JsNames = \"JsNames\",\r\n}\r\n\r\nfunction tableTextToValue(text: string) : any {\r\n if(text.startsWith(\"\\\"\") && text.endsWith(\"\\\"\"))\r\n return text.slice(1,text.length-1);\r\n if(text === \"null\")\r\n return null;\r\n if(text === \"undefined\")\r\n return undefined;\r\n if(text.startsWith(\"{\") || text.startsWith(\"[\"))\r\n return JSON.parse(text);\r\n if(text === \"true\" || text === \"false\")\r\n return text === \"true\";\r\n if(text.startsWith(\"0x\"))\r\n return text; // we use this for IDs and they are handled as strings, the parseInt below would attempt to convert them to numbers\r\n if(/^-?\\d+(\\.\\d+)?$/.test(text)) {\r\n const flt = parseFloat(text);\r\n if(!Number.isNaN(flt))\r\n return flt;\r\n }\r\n\r\n if(/^-?\\d+$/.test(text)) {\r\n // eslint-disable-next-line radix\r\n const asInt = parseInt(text);\r\n if(!Number.isNaN(asInt))\r\n return asInt;\r\n }\r\n\r\n return text;\r\n}\r\n\r\nexport function buildBinaryData(obj: any): any { //TODO: we should do this during table parsing\r\n for(const key in obj) {\r\n if(typeof obj[key] === \"string\" && obj[key].startsWith(\"BIN(\") && obj[key].endsWith(\")\"))\r\n obj[key] = understandAndReplaceBinaryData(obj[key])\r\n else if(typeof obj[key] === \"object\" || Array.isArray(obj[key]))\r\n obj[key] = buildBinaryData(obj[key])\r\n }\r\n return obj;\r\n}\r\n\r\nfunction understandAndReplaceBinaryData(str: string): any{\r\n const startInd = str.indexOf(\"(\") + 1;\r\n const endInd = str.indexOf(\")\");\r\n str = str.slice(startInd, endInd);\r\n const ans: number[] = []\r\n const numbers: string[] = str.split(\",\");\r\n numbers.forEach((value:string)=>\r\n {\r\n value = value.trim();\r\n // eslint-disable-next-line radix\r\n ans.push(parseInt(value));\r\n }\r\n );\r\n return Uint8Array.of(...ans);\r\n}\r\n\r\n\r\nexport class ECDbMarkdownTestParser {\r\n public static parse(): ECDbTestProps[] {\r\n const testAssetsDir = path.join(__dirname ,\"..\",\"queries\");\r\n const testFiles = fs.readdirSync(testAssetsDir, \"utf-8\").filter((fileName) => fileName.toLowerCase().endsWith(\"ecsql.md\"));\r\n const out: ECDbTestProps[] = [];\r\n\r\n for (const fileName of testFiles) {\r\n try {\r\n const tests = this.parseFile(testAssetsDir, fileName);\r\n out.push(...tests);\r\n } catch (error) {\r\n logWarning(`Failed to parse file ${fileName}. Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\r\n }\r\n }\r\n return out;\r\n }\r\n\r\n private static parseFile(testAssetsDir: string, fileName: string): ECDbTestProps[] {\r\n const markdownFilePath = path.join(testAssetsDir, fileName);\r\n const baseFileName = fileName.replace(/\\.ecdbtest\\.md$/i, \"\");\r\n const markdownContent = fs.readFileSync(markdownFilePath, \"utf-8\");\r\n const tokens = marked.lexer(markdownContent);\r\n\r\n const out: ECDbTestProps[] = [];\r\n let currentTest: ECDbTestProps | undefined;\r\n\r\n for (const token of tokens) {\r\n switch (token.type) {\r\n case \"space\":\r\n case \"html\":\r\n case \"paragraph\":\r\n case \"hr\":\r\n continue;\r\n case \"heading\":\r\n if (currentTest !== undefined) {\r\n out.push(currentTest);\r\n }\r\n currentTest = { title: token.text, mode: ECDbTestMode.Both, fileName: baseFileName,\r\n rowFormat: ECDbTestRowFormat.ECSqlNames, abbreviateBlobs: false, convertClassIdsToClassNames: false };\r\n break;\r\n case \"list\":\r\n this.handleListToken(token as Tokens.List, currentTest, markdownFilePath);\r\n break;\r\n case \"code\":\r\n this.handleCodeToken(token as Tokens.Code, currentTest, markdownFilePath);\r\n break;\r\n case \"table\":\r\n this.handleTableToken(token as Tokens.Table, currentTest, markdownFilePath);\r\n break;\r\n default:\r\n logWarning(`Unknown token type ${token.type} found in file ${markdownFilePath}. Skipping.`);\r\n break;\r\n }\r\n }\r\n\r\n if (currentTest !== undefined) {\r\n out.push(currentTest);\r\n }\r\n return out;\r\n }\r\n\r\n\r\n private static handleListToken(token: Tokens.List, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\r\n if (currentTest === undefined) {\r\n logWarning(`List token found without a test title in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n\r\n const variableRegex = /^(\\w+):\\s*(.+)$/;\r\n const bindRegex = /^bind(\\w+)\\s([^,\\s]+),\\s?(.+)$/;\r\n for (const item of token.items) {\r\n const match = item.text.match(variableRegex);\r\n if (match) {\r\n const key = match[1];\r\n const value = match[2];\r\n switch (key.toLowerCase()) {\r\n case \"dataset\":\r\n currentTest.dataset = value;\r\n continue;\r\n case \"errorduringprepare\":\r\n currentTest.errorDuringPrepare = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"stepstatus\":\r\n currentTest.stepStatus = value;\r\n continue;\r\n case \"only\":\r\n currentTest.only = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"skip\":\r\n currentTest.skip = value;\r\n continue;\r\n case \"mode\":\r\n this.handleMode(value, currentTest, markdownFilePath);\r\n continue;\r\n case \"rowformat\":\r\n this.handleRowFormat(value, currentTest, markdownFilePath);\r\n continue;\r\n case \"abbreviateblobs\":\r\n currentTest.abbreviateBlobs = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"convertclassidstoclassnames\":\r\n currentTest.convertClassIdsToClassNames = value.toLowerCase() === \"true\";\r\n continue;\r\n case \"indexestoinclude\":\r\n currentTest.indexesToIncludeInResults = this.handleValidIndexList(value);\r\n continue;\r\n }\r\n }\r\n const bindMatch = item.text.match(bindRegex);\r\n if (bindMatch) {\r\n currentTest.binders = currentTest.binders || [];\r\n currentTest.binders.push({ indexOrName: bindMatch[2], type: bindMatch[1], value: bindMatch[3] });\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n private static handleMode(value: string, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n switch(value.toLowerCase()) {\r\n case \"statement\":\r\n currentTest.mode = ECDbTestMode.Statement;\r\n break;\r\n case \"concurrentquery\":\r\n currentTest.mode = ECDbTestMode.ConcurrentQuery;\r\n break;\r\n case \"both\":\r\n currentTest.mode = ECDbTestMode.Both;\r\n break;\r\n default:\r\n logWarning(`Mode value (${value}) is not recognized in file ${markdownFilePath} and test ${currentTest.title}. Skipping.`);\r\n }\r\n }\r\n\r\n private static handleRowFormat(value: string, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n switch(value.toLowerCase()) {\r\n case \"ecsqlnames\":\r\n currentTest.rowFormat = ECDbTestRowFormat.ECSqlNames;\r\n break;\r\n case \"ecsqlindexes\":\r\n currentTest.rowFormat = ECDbTestRowFormat.ECSqlIndexes;\r\n break;\r\n case \"jsnames\":\r\n currentTest.rowFormat = ECDbTestRowFormat.JsNames;\r\n break;\r\n default:\r\n logWarning(`Row Format value (${value}) is not recognized in file ${markdownFilePath} and test ${currentTest.title}. Skipping.`);\r\n }\r\n }\r\n\r\nprivate static handleValidIndexList(obj: string): number[] | undefined {\r\n try{\r\n const numsArr = JSON.parse(obj);\r\n if(Array.isArray(numsArr) && numsArr.every((val: any)=> typeof val === \"number\"))\r\n return numsArr;\r\n logWarning(\"The given value is not valid for the property indexestoinclude\");\r\n return undefined;\r\n }\r\n catch{\r\n logWarning(\"The given value is not valid for the property indexestoinclude\");\r\n return undefined;\r\n }\r\n}\r\n\r\n private static handleCodeToken(token: Tokens.Code, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\r\n if (currentTest === undefined) {\r\n logWarning(`Code token found without a test title in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n\r\n if (token.lang === \"sql\") {\r\n currentTest.sql = token.text;\r\n } else if (token.lang === \"json\") {\r\n let json: any;\r\n try {\r\n json = JSON.parse(token.text);\r\n } catch (error) {\r\n if (error instanceof Error) {\r\n logWarning(`Failed to parse JSON ${token.text} in file ${markdownFilePath}. ${error.message} Skipping.`);\r\n } else {\r\n logWarning(`Failed to parse SON ${token.text} in file ${markdownFilePath}. Unknown error. Skipping.`);\r\n }\r\n }\r\n\r\n if (typeof json === \"object\" && Array.isArray(json.columns)) {\r\n this.handleJSONColumnMetadata(json, currentTest, markdownFilePath);\r\n return;\r\n }\r\n\r\n this.handleJSONExpectedResults(json, currentTest); // TODO: validate the expected results\r\n } else {\r\n logWarning(`Unknown code language ${token.lang} found in file ${markdownFilePath}. Skipping.`);\r\n }\r\n }\r\n\r\n private static handleJSONColumnMetadata(json: any, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n const extraProps: Set<string> = new Set();\r\n\r\n if (json.columns.every(isColumnInfoProps)) {\r\n currentTest.columnInfo = json.columns;\r\n for (const column of json.columns) {\r\n for (const key in column) {\r\n if (!columnInfoPropsKeys.has(key as keyof ColumnInfoProps)) {\r\n extraProps.add(key);\r\n }\r\n }\r\n }\r\n\r\n if (extraProps.size > 0) {\r\n logWarning(`Found extra properties in column infos: ${Array.from(extraProps).join(\", \")} in file '${markdownFilePath}' test '${currentTest.title}'.`);\r\n }\r\n } else {\r\n logWarning(`Columns format in file '${markdownFilePath}' test '${currentTest.title}' failed type guard. Skipping.`);\r\n }\r\n }\r\n\r\n private static handleJSONExpectedResults(json: any, currentTest: ECDbTestProps) {\r\n currentTest.expectedResults = json\r\n }\r\n\r\n private static handleTableToken(token: Tokens.Table, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\r\n if (currentTest === undefined) {\r\n logWarning(`Table token found without a test title in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n\r\n this.handleTable(token, currentTest, markdownFilePath);\r\n }\r\n\r\n private static handleTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n if (token.header.length > 0 && currentTest.columnInfo === undefined && columnInfoPropsKeys.has(token.header[0].text as keyof ColumnInfoProps)) {\r\n this.handleColumnTable(token, currentTest, markdownFilePath);\r\n return;\r\n }\r\n else if(token.header.length > 0 && token.header[0].text === \"\"){\r\n this.handleExpectedResultsTableForECSqlPropertyIndexesOption(token, currentTest, markdownFilePath);\r\n } else {\r\n this.handleExpectedResultsTable(token, currentTest, markdownFilePath);\r\n }\r\n }\r\n\r\n private static handleColumnTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n const columnInfos: any[] = [];\r\n for (const row of token.rows) {\r\n if (row.length < 1 || row.length !== token.header.length) {\r\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\r\n continue;\r\n }\r\n const columnInfo: { [key: string]: any } = {};\r\n for (let i = 0; i < token.header.length; i++) {\r\n const header = token.header[i].text;\r\n const cell = row[i].text;\r\n columnInfo[header] = tableTextToValue(cell);\r\n }\r\n columnInfos.push(columnInfo);\r\n }\r\n\r\n this.handleJSONColumnMetadata({columns: columnInfos}, currentTest, markdownFilePath);\r\n }\r\n\r\n private static handleExpectedResultsTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n if(currentTest.expectedResults !== undefined) {\r\n logWarning(`Expected results already set for test ${currentTest.title} in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n currentTest.expectedResults = [];\r\n for (const row of token.rows) {\r\n if (row.length < 1 || row.length !== token.header.length) {\r\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\r\n continue;\r\n }\r\n\r\n const expectedResult: { [key: string]: any } = {};\r\n for (let i = 0; i < token.header.length; i++) {\r\n const header = token.header[i].text;\r\n const cell = row[i].text;\r\n const value = tableTextToValue(cell);\r\n if (value !== undefined)\r\n expectedResult[header] = value;\r\n }\r\n currentTest.expectedResults.push(expectedResult);\r\n }\r\n }\r\n\r\n private static handleExpectedResultsTableForECSqlPropertyIndexesOption(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\r\n if(currentTest.expectedResults !== undefined) {\r\n logWarning(`Expected results already set for test ${currentTest.title} in file ${markdownFilePath}. Skipping.`);\r\n return;\r\n }\r\n currentTest.expectedResults = [];\r\n for (const row of token.rows) {\r\n if (row.length < 1 || row.length !== token.header.length) {\r\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\r\n continue;\r\n }\r\n\r\n const expectedResult: any[] = [];\r\n for (let i = 0; i < token.header.length; i++) {\r\n const cell = row[i].text;\r\n const value = tableTextToValue(cell);\r\n if (value !== undefined)\r\n expectedResult.push(value);\r\n }\r\n currentTest.expectedResults.push(expectedResult);\r\n }\r\n }\r\n}\r\n\r\nfunction logWarning(message: string) {\r\n // eslint-disable-next-line no-console\r\n console.log(`\\x1b[33m${message}\\x1b[0m`);\r\n}"]}
|
|
1
|
+
{"version":3,"file":"ECSqlTestParser.js","sourceRoot":"","sources":["../../../../../src/test/ecsql/src/ECSqlTestParser.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 * as path from \"path\";\nimport * as fs from \"fs\";\nimport { marked, Tokens } from \"marked\";\n\nexport interface ECDbTestProps {\n fileName: string;\n title: string;\n\n // Things from properties:\n only?: boolean; // This flag handles the only property to filter tests\n skip?: string; // This flag handles the skip property to filter tests\n dataset?: string;\n mode: ECDbTestMode;\n rowFormat: ECDbTestRowFormat;\n abbreviateBlobs: boolean;\n convertClassIdsToClassNames: boolean;\n errorDuringPrepare?: boolean;\n indexesToIncludeInResults?: number[]; // We now have the feature to check only certain columns of expected results\n // but if the rowFormat is ECSqlIndexes then there is no way to uniquely identify the columns, in that case this flag is used to include certain property indexes\n // for checking and ignore the rest, if this flag is not given while the rowFormat is ECSqlIndexes then the expected Results column\n // will assume an incremental 0 based indexing by default. This flag serves as a mapping for the actual results while checking with the expected results.\n\n // TODO: implement, it's currently being parsed but not used\n stepStatus?: string;\n\n // Things from code blocks or tables\n sql?: string;\n expectedResults?: { [key: string]: any }[] | any[];\n columnInfo?: ColumnInfoProps[];\n\n // Things from lists\n binders?: ECDbTestBinderProps[];\n}\n\nexport interface ECDbTestBinderProps {\n indexOrName: string;\n type: string;\n value: string;\n}\n\nexport interface ColumnInfoProps {\n name: string;\n className?: string;\n accessString?: string;\n generated?: boolean;\n index?: number;\n jsonName?: string;\n // expected extendedType value should be given when we know that the actual column info extendedType will be a valid non empty string for test to pass.\n // This extendedType value is internally used to check both extendType and extendedType values of column metadata.\n extendedType?: string;\n type?: string; // type is used on ECSqlStatement because it can differ from TypeName\n typeName?: string; // typeName is used on ConcurrentQuery\n originPropertyName?: string; // only supported for ECSqlStatement\n}\n\nexport const columnInfoPropsKeys: Set<keyof ColumnInfoProps> = new Set([\n \"name\",\n \"className\",\n \"accessString\",\n \"generated\",\n \"index\",\n \"jsonName\",\n \"extendedType\",\n \"type\",\n \"typeName\",\n \"originPropertyName\",\n]);\n\n/* interface QueryPropertyMetaData\n className: string;\n accessString?: string;\n generated: boolean;\n index: number;\n jsonName: string;\n name: string;\n extendType: string;\n typeName: string;\n*/\n\nfunction isColumnInfoProps(obj: any): obj is ColumnInfoProps {\n const numberOfKeys = typeof obj === \"object\" ? Object.keys(obj).length : 0;\n const isValid = typeof obj === \"object\" &&\n typeof obj.name === \"string\" &&\n (obj.className === undefined || typeof obj.className === \"string\") &&\n (obj.accessString === undefined || typeof obj.accessString === \"string\") &&\n (obj.generated === undefined || typeof obj.generated === \"boolean\") &&\n (obj.index === undefined || typeof obj.index === \"number\") &&\n (obj.jsonName === undefined || typeof obj.jsonName === \"string\") &&\n (obj.extendedType === undefined || typeof obj.extendedType === \"string\") &&\n (obj.type === undefined || typeof obj.type === \"string\") &&\n (obj.typeName === undefined || typeof obj.typeName === \"string\");\n\n if (!isValid) {\n const errors: string[] = [];\n if (typeof obj !== \"object\") errors.push(\"Object is not of type 'object'\");\n if (numberOfKeys < 1 || numberOfKeys > 7) errors.push(\"Number of keys is not between 1 and 7\");\n if (typeof obj.name !== \"string\") errors.push(\"Property 'name' is not of type 'string'\");\n if (obj.className !== undefined && typeof obj.className !== \"string\") errors.push(\"Property 'className' is not of type 'string'\");\n if (obj.accessString !== undefined && typeof obj.accessString !== \"string\") errors.push(\"Property 'accessString' is not of type 'string'\");\n if (obj.generated !== undefined && typeof obj.generated !== \"boolean\") errors.push(\"Property 'generated' is not of type 'boolean'\");\n if (obj.index !== undefined && typeof obj.index !== \"number\") errors.push(\"Property 'index' is not of type 'number'\");\n if (obj.jsonName !== undefined && typeof obj.jsonName !== \"string\") errors.push(\"Property 'jsonName' is not of type 'string'\");\n if (obj.extendedType !== undefined && typeof obj.extendedType !== \"string\") errors.push(\"Property 'extendedType' is not of type 'string'\");\n if (obj.type !== undefined && typeof obj.type !== \"string\") errors.push(\"Property 'type' is not of type 'string'\");\n if (obj.typeName !== undefined && typeof obj.typeName !== \"string\") errors.push(\"Property 'typeName' is not of type 'string'\");\n logWarning(`Validation failed for ColumnInfoProps. Object: ${JSON.stringify(obj)}. Errors: ${errors.join(\", \")}`);\n }\n\n return isValid;\n}\n\nexport enum ECDbTestMode {\n Both = \"Both\",\n Statement = \"Statement\",\n QueryReader = \"QueryReader\",\n};\n\nexport enum ECDbTestRowFormat {\n ECSqlNames = \"ECSqlNames\",\n ECSqlIndexes = \"ECSqlIndexes\",\n JsNames = \"JsNames\",\n}\n\nfunction tableTextToValue(text: string): any {\n // Unescape literal \\n sequences to actual newline characters\n text = text.replace(/\\\\n/g, \"\\n\");\n // Trim leading/trailing whitespaces\n text = text.trim();\n if (text.startsWith(\"\\\"\") && text.endsWith(\"\\\"\"))\n return text.slice(1, text.length - 1);\n if (text === \"null\")\n return null;\n if (text === \"undefined\")\n return undefined;\n if (text.startsWith(\"{\") || text.startsWith(\"[\"))\n return JSON.parse(text);\n if (text === \"true\" || text === \"false\")\n return text === \"true\";\n if (text.startsWith(\"0x\"))\n return text; // we use this for IDs and they are handled as strings, the parseInt below would attempt to convert them to numbers\n if (/^-?\\d+(\\.\\d+)?$/.test(text)) {\n const flt = parseFloat(text);\n if (!Number.isNaN(flt))\n return flt;\n }\n\n if (/^-?\\d+$/.test(text)) {\n // eslint-disable-next-line radix\n const asInt = parseInt(text);\n if (!Number.isNaN(asInt))\n return asInt;\n }\n\n return text;\n}\n\nexport function buildBinaryData(obj: any): any { //TODO: we should do this during table parsing\n for (const key in obj) {\n if (typeof obj[key] === \"string\" && obj[key].startsWith(\"BIN(\") && obj[key].endsWith(\")\"))\n obj[key] = understandAndReplaceBinaryData(obj[key])\n else if (typeof obj[key] === \"object\" || Array.isArray(obj[key]))\n obj[key] = buildBinaryData(obj[key])\n }\n return obj;\n}\n\nfunction understandAndReplaceBinaryData(str: string): any {\n const startInd = str.indexOf(\"(\") + 1;\n const endInd = str.indexOf(\")\");\n str = str.slice(startInd, endInd);\n const ans: number[] = []\n const numbers: string[] = str.split(\",\");\n numbers.forEach((value: string) => {\n value = value.trim();\n // eslint-disable-next-line radix\n ans.push(parseInt(value));\n }\n );\n return Uint8Array.of(...ans);\n}\n\n\nexport class ECDbMarkdownTestParser {\n public static parse(): ECDbTestProps[] {\n const testAssetsDir = path.join(__dirname, \"..\", \"queries\");\n const testFiles = fs.readdirSync(testAssetsDir, \"utf-8\").filter((fileName) => fileName.toLowerCase().endsWith(\"ecsql.md\"));\n const out: ECDbTestProps[] = [];\n\n for (const fileName of testFiles) {\n try {\n const tests = this.parseFile(testAssetsDir, fileName);\n out.push(...tests);\n } catch (error) {\n logWarning(`Failed to parse file ${fileName}. Error: ${error instanceof Error ? error.message : \"Unknown error\"}`);\n }\n }\n return out;\n }\n\n private static parseFile(testAssetsDir: string, fileName: string): ECDbTestProps[] {\n const markdownFilePath = path.join(testAssetsDir, fileName);\n const baseFileName = fileName.replace(/\\.ecdbtest\\.md$/i, \"\");\n const markdownContent = fs.readFileSync(markdownFilePath, \"utf-8\");\n const tokens = marked.lexer(markdownContent);\n\n const out: ECDbTestProps[] = [];\n let currentTest: ECDbTestProps | undefined;\n\n for (const token of tokens) {\n switch (token.type) {\n case \"space\":\n case \"html\":\n case \"paragraph\":\n case \"hr\":\n continue;\n case \"heading\":\n if (currentTest !== undefined) {\n out.push(currentTest);\n }\n currentTest = {\n title: token.text, mode: ECDbTestMode.Both, fileName: baseFileName,\n rowFormat: ECDbTestRowFormat.ECSqlNames, abbreviateBlobs: false, convertClassIdsToClassNames: false\n };\n break;\n case \"list\":\n this.handleListToken(token as Tokens.List, currentTest, markdownFilePath);\n break;\n case \"code\":\n this.handleCodeToken(token as Tokens.Code, currentTest, markdownFilePath);\n break;\n case \"table\":\n this.handleTableToken(token as Tokens.Table, currentTest, markdownFilePath);\n break;\n default:\n logWarning(`Unknown token type ${token.type} found in file ${markdownFilePath}. Skipping.`);\n break;\n }\n }\n\n if (currentTest !== undefined) {\n out.push(currentTest);\n }\n return out;\n }\n\n\n private static handleListToken(token: Tokens.List, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\n if (currentTest === undefined) {\n logWarning(`List token found without a test title in file ${markdownFilePath}. Skipping.`);\n return;\n }\n\n const variableRegex = /^(\\w+):\\s*(.+)$/;\n const bindRegex = /^bind(\\w+)\\s([^,\\s]+),\\s?(.+)$/;\n for (const item of token.items) {\n const match = item.text.match(variableRegex);\n if (match) {\n const key = match[1];\n const value = match[2];\n switch (key.toLowerCase()) {\n case \"dataset\":\n currentTest.dataset = value;\n continue;\n case \"errorduringprepare\":\n currentTest.errorDuringPrepare = value.toLowerCase() === \"true\";\n continue;\n case \"stepstatus\":\n currentTest.stepStatus = value;\n continue;\n case \"only\":\n currentTest.only = value.toLowerCase() === \"true\";\n continue;\n case \"skip\":\n currentTest.skip = value;\n continue;\n case \"mode\":\n this.handleMode(value, currentTest, markdownFilePath);\n continue;\n case \"rowformat\":\n this.handleRowFormat(value, currentTest, markdownFilePath);\n continue;\n case \"abbreviateblobs\":\n currentTest.abbreviateBlobs = value.toLowerCase() === \"true\";\n continue;\n case \"convertclassidstoclassnames\":\n currentTest.convertClassIdsToClassNames = value.toLowerCase() === \"true\";\n continue;\n case \"indexestoinclude\":\n currentTest.indexesToIncludeInResults = this.handleValidIndexList(value);\n continue;\n }\n }\n const bindMatch = item.text.match(bindRegex);\n if (bindMatch) {\n currentTest.binders = currentTest.binders || [];\n currentTest.binders.push({ indexOrName: bindMatch[2], type: bindMatch[1], value: bindMatch[3] });\n continue;\n }\n }\n }\n\n private static handleMode(value: string, currentTest: ECDbTestProps, markdownFilePath: string) {\n switch (value.toLowerCase()) {\n case \"statement\":\n currentTest.mode = ECDbTestMode.Statement;\n break;\n case \"queryreader\":\n currentTest.mode = ECDbTestMode.QueryReader;\n break;\n case \"both\":\n currentTest.mode = ECDbTestMode.Both;\n break;\n default:\n logWarning(`Mode value (${value}) is not recognized in file ${markdownFilePath} and test ${currentTest.title}. Skipping.`);\n }\n }\n\n private static handleRowFormat(value: string, currentTest: ECDbTestProps, markdownFilePath: string) {\n switch (value.toLowerCase()) {\n case \"ecsqlnames\":\n currentTest.rowFormat = ECDbTestRowFormat.ECSqlNames;\n break;\n case \"ecsqlindexes\":\n currentTest.rowFormat = ECDbTestRowFormat.ECSqlIndexes;\n break;\n case \"jsnames\":\n currentTest.rowFormat = ECDbTestRowFormat.JsNames;\n break;\n default:\n logWarning(`Row Format value (${value}) is not recognized in file ${markdownFilePath} and test ${currentTest.title}. Skipping.`);\n }\n }\n\n private static handleValidIndexList(obj: string): number[] | undefined {\n try {\n const numsArr = JSON.parse(obj);\n if (Array.isArray(numsArr) && numsArr.every((val: any) => typeof val === \"number\"))\n return numsArr;\n logWarning(\"The given value is not valid for the property indexestoinclude\");\n return undefined;\n }\n catch {\n logWarning(\"The given value is not valid for the property indexestoinclude\");\n return undefined;\n }\n }\n\n private static handleCodeToken(token: Tokens.Code, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\n if (currentTest === undefined) {\n logWarning(`Code token found without a test title in file ${markdownFilePath}. Skipping.`);\n return;\n }\n\n if (token.lang === \"sql\") {\n currentTest.sql = token.text;\n } else if (token.lang === \"json\") {\n let json: any;\n try {\n json = JSON.parse(token.text);\n } catch (error) {\n if (error instanceof Error) {\n logWarning(`Failed to parse JSON ${token.text} in file ${markdownFilePath}. ${error.message} Skipping.`);\n } else {\n logWarning(`Failed to parse SON ${token.text} in file ${markdownFilePath}. Unknown error. Skipping.`);\n }\n }\n\n if (typeof json === \"object\" && Array.isArray(json.columns)) {\n this.handleJSONColumnMetadata(json, currentTest, markdownFilePath);\n return;\n }\n\n this.handleJSONExpectedResults(json, currentTest); // TODO: validate the expected results\n } else {\n logWarning(`Unknown code language ${token.lang} found in file ${markdownFilePath}. Skipping.`);\n }\n }\n\n private static handleJSONColumnMetadata(json: any, currentTest: ECDbTestProps, markdownFilePath: string) {\n const extraProps: Set<string> = new Set();\n\n if (json.columns.every(isColumnInfoProps)) {\n currentTest.columnInfo = json.columns;\n for (const column of json.columns) {\n for (const key in column) {\n if (!columnInfoPropsKeys.has(key as keyof ColumnInfoProps)) {\n extraProps.add(key);\n }\n }\n }\n\n if (extraProps.size > 0) {\n logWarning(`Found extra properties in column infos: ${Array.from(extraProps).join(\", \")} in file '${markdownFilePath}' test '${currentTest.title}'.`);\n }\n } else {\n logWarning(`Columns format in file '${markdownFilePath}' test '${currentTest.title}' failed type guard. Skipping.`);\n }\n }\n\n private static handleJSONExpectedResults(json: any, currentTest: ECDbTestProps) {\n currentTest.expectedResults = json\n }\n\n private static handleTableToken(token: Tokens.Table, currentTest: ECDbTestProps | undefined, markdownFilePath: string) {\n if (currentTest === undefined) {\n logWarning(`Table token found without a test title in file ${markdownFilePath}. Skipping.`);\n return;\n }\n\n this.handleTable(token, currentTest, markdownFilePath);\n }\n\n private static handleTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\n if (token.header.length > 0 && currentTest.columnInfo === undefined && columnInfoPropsKeys.has(token.header[0].text as keyof ColumnInfoProps)) {\n this.handleColumnTable(token, currentTest, markdownFilePath);\n return;\n }\n else if (token.header.length > 0 && token.header[0].text === \"\") {\n this.handleExpectedResultsTableForECSqlPropertyIndexesOption(token, currentTest, markdownFilePath);\n } else {\n this.handleExpectedResultsTable(token, currentTest, markdownFilePath);\n }\n }\n\n private static handleColumnTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\n const columnInfos: any[] = [];\n for (const row of token.rows) {\n if (row.length < 1 || row.length !== token.header.length) {\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\n continue;\n }\n const columnInfo: { [key: string]: any } = {};\n for (let i = 0; i < token.header.length; i++) {\n const header = token.header[i].text;\n const cell = row[i].text;\n columnInfo[header] = tableTextToValue(cell);\n }\n columnInfos.push(columnInfo);\n }\n\n this.handleJSONColumnMetadata({ columns: columnInfos }, currentTest, markdownFilePath);\n }\n\n private static handleExpectedResultsTable(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\n if (currentTest.expectedResults !== undefined) {\n logWarning(`Expected results already set for test ${currentTest.title} in file ${markdownFilePath}. Skipping.`);\n return;\n }\n currentTest.expectedResults = [];\n for (const row of token.rows) {\n if (row.length < 1 || row.length !== token.header.length) {\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\n continue;\n }\n\n const expectedResult: { [key: string]: any } = {};\n for (let i = 0; i < token.header.length; i++) {\n const header = token.header[i].text;\n const cell = row[i].text;\n const value = tableTextToValue(cell);\n if (value !== undefined)\n expectedResult[header] = value;\n }\n currentTest.expectedResults.push(expectedResult);\n }\n }\n\n private static handleExpectedResultsTableForECSqlPropertyIndexesOption(token: Tokens.Table, currentTest: ECDbTestProps, markdownFilePath: string) {\n if (currentTest.expectedResults !== undefined) {\n logWarning(`Expected results already set for test ${currentTest.title} in file ${markdownFilePath}. Skipping.`);\n return;\n }\n currentTest.expectedResults = [];\n for (const row of token.rows) {\n if (row.length < 1 || row.length !== token.header.length) {\n logWarning(`Rows in a expected result table must have a minimum of 1 cell, and as many cells as there are headers. ${markdownFilePath}. Skipping.`);\n continue;\n }\n\n const expectedResult: any[] = [];\n for (let i = 0; i < token.header.length; i++) {\n const cell = row[i].text;\n const value = tableTextToValue(cell);\n if (value !== undefined)\n expectedResult.push(value);\n }\n currentTest.expectedResults.push(expectedResult);\n }\n }\n}\n\nfunction logWarning(message: string) {\n // eslint-disable-next-line no-console\n console.log(`\\x1b[33m${message}\\x1b[0m`);\n}"]}
|