void FdoSchemaRollbackTest::CreateElectricSchema( FdoIConnection* connection ) { FdoPtr<FdoIDescribeSchema> pDescCmd = (FdoIDescribeSchema*) connection->CreateCommand(FdoCommandType_DescribeSchema); pDescCmd->SetSchemaName( L"Acad" ); FdoPtr<FdoFeatureSchemaCollection> pAcadSchema = pDescCmd->Execute(); FdoPtr<FdoClassDefinition> pEntClass = FdoClassesP(FdoFeatureSchemaP(pAcadSchema->GetItem( L"Acad" ))->GetClasses())->GetItem( L"Entity" ); FdoPtr<FdoIApplySchema> pCmd = (FdoIApplySchema*) connection->CreateCommand(FdoCommandType_ApplySchema); /* A schema with dictionary */ FdoPtr<FdoFeatureSchema> pSchema = FdoFeatureSchema::Create( L"Electric'l", L"Electrical '' schema'" ); pAcadSchema->Add( pSchema ); FdoSADP(pSchema->GetAttributes())->Add( L"'Author", L"Thomas O'Edison" ); /* An abstract base class */ FdoPtr<FdoFeatureClass> pDevClass = FdoFeatureClass::Create( L"ElectricDevice", L"electic base class" ); pDevClass->SetIsAbstract(true); FdoPtr<FdoDataPropertyDefinition> pProp = FdoDataPropertyDefinition::Create( L"FeatId", L"id" ); pProp->SetDataType( FdoDataType_Int64 ); pProp->SetNullable(false); pProp->SetIsAutoGenerated(true); FdoPropertiesP(pDevClass->GetProperties())->Add( pProp ); FdoDataPropertiesP(pDevClass->GetIdentityProperties())->Add( pProp ); // Test nested object properties (ElectricDevice.graphic.xdata) where graphic's class has an id. FdoPtr<FdoObjectPropertyDefinition> pObjProp = FdoObjectPropertyDefinition::Create( L"graphic", L"Acad entity" ); pObjProp->SetObjectType( FdoObjectType_Value ); pObjProp->SetClass( pEntClass ); FdoPropertiesP(pDevClass->GetProperties())->Add( pObjProp ); // Test geometry property FdoPtr<FdoGeometricPropertyDefinition> pGeomProp = FdoGeometricPropertyDefinition::Create( L"Geometry", L"location and shape" ); pGeomProp->SetGeometryTypes( FdoGeometricType_Point | FdoGeometricType_Curve ); FdoPropertiesP(pDevClass->GetProperties())->Add( pGeomProp ); pDevClass->SetGeometryProperty( pGeomProp ); FdoClassesP(pSchema->GetClasses())->Add( pDevClass ); /* Subclass with dictionary */ FdoPtr<FdoFeatureClass> pClass = FdoFeatureClass::Create( L"Transformer", L"" ); pClass->SetIsAbstract(false); pClass->SetBaseClass( pDevClass ); FdoSADP(pClass->GetAttributes())->Add( L"Rules' DLL", L"transformer.dll" ); FdoSADP(pClass->GetAttributes())->Add( L"Entrypoint", L"start_transformer" ); // Add data properties of various types pProp = FdoDataPropertyDefinition::Create( L"Voltage", L"voltage" ); FdoSADP(pProp->GetAttributes())->Add( L"Calculable", L"yes" ); pProp->SetDataType( FdoDataType_Decimal ); pProp->SetPrecision(10); pProp->SetScale(2); pProp->SetNullable(false); FdoPropertiesP(pClass->GetProperties())->Add( pProp ); pProp = FdoDataPropertyDefinition::Create( L"Phase", L"A, B or C" ); pProp->SetDataType( FdoDataType_String ); pProp->SetLength(1); pProp->SetNullable(false); FdoPropertiesP(pClass->GetProperties())->Add( pProp ); pProp = FdoDataPropertyDefinition::Create( L"InstallDate", L"" ); pProp->SetDataType( FdoDataType_DateTime ); pProp->SetNullable(true); FdoPropertiesP(pClass->GetProperties())->Add( pProp ); pProp = FdoDataPropertyDefinition::Create( L"LastInspectDate", L"" ); pProp->SetDataType( FdoDataType_DateTime ); pProp->SetNullable(true); FdoPropertiesP(pClass->GetProperties())->Add( pProp ); pProp = FdoDataPropertyDefinition::Create( L"LastRepairDate", L"" ); pProp->SetDataType( FdoDataType_DateTime ); pProp->SetNullable(true); FdoPropertiesP(pClass->GetProperties())->Add( pProp ); pProp = FdoDataPropertyDefinition::Create( L"PartNum", L"" ); pProp->SetDataType( FdoDataType_Int16 ); pProp->SetNullable(true); FdoPropertiesP(pClass->GetProperties())->Add( pProp ); pProp = FdoDataPropertyDefinition::Create( L"Volume", L"" ); pProp->SetDataType( FdoDataType_Single ); pProp->SetNullable(false); FdoPropertiesP(pClass->GetProperties())->Add( pProp ); FdoClassesP(pSchema->GetClasses())->Add( pClass ); pClass = FdoFeatureClass::Create( L"Conductor", L"" ); pClass->SetIsAbstract(false); pClass->SetBaseClass( pDevClass ); pProp = FdoDataPropertyDefinition::Create( L"underground", L"" ); pProp->SetDataType( FdoDataType_Boolean ); pProp->SetNullable(false); FdoPropertiesP(pClass->GetProperties())->Add( pProp ); FdoClassesP(pSchema->GetClasses())->Add( pClass ); pCmd->SetFeatureSchema( pSchema ); pCmd->Execute(); }
void FdoSpatialContextTest::CreateSchema( FdoIConnection* connection, bool hasMetaSchema ) { FdoPtr<FdoFeatureSchema> schema; if ( hasMetaSchema ) { /* A schema with dictionary */ schema = FdoFeatureSchema::Create( L"ScTest", L"" ); } else { FdoPtr<FdoIDescribeSchema> cmd = (FdoIDescribeSchema*) connection->CreateCommand(FdoCommandType_DescribeSchema); FdoFeatureSchemasP schemas = cmd->Execute(); CPPUNIT_ASSERT( schemas->GetCount() > 0 ); schema = schemas->FindItem(L"dbo"); if ( !schema ) schema = schemas->GetItem(0); } FdoPtr<FdoIApplySchema> pCmd = (FdoIApplySchema*) connection->CreateCommand(FdoCommandType_ApplySchema); /* An abstract base class */ FdoPtr<FdoFeatureClass> pClass = FdoFeatureClass::Create( L"ClassB1", L"" ); FdoClassesP(schema->GetClasses())->Add( pClass ); FdoPtr<FdoDataPropertyDefinition> pProp = FdoDataPropertyDefinition::Create( L"Prop1", L"" ); pProp->SetDataType( FdoDataType_Int64 ); pProp->SetNullable(false); pProp->SetIsAutoGenerated(true); FdoPropertiesP(pClass->GetProperties())->Add( pProp ); FdoDataPropertiesP(pClass->GetIdentityProperties())->Add( pProp ); // Test geometry property FdoPtr<FdoGeometricPropertyDefinition> pGeomProp = FdoGeometricPropertyDefinition::Create( L"Geometry1", L"" ); pGeomProp->SetGeometryTypes( FdoGeometricType_Point | FdoGeometricType_Curve ); pGeomProp->SetSpatialContextAssociation(L"Bermuda"); FdoPropertiesP(pClass->GetProperties())->Add( pGeomProp ); pClass->SetGeometryProperty( pGeomProp ); pGeomProp = FdoGeometricPropertyDefinition::Create( L"Geometry2", L"" ); pGeomProp->SetGeometryTypes( FdoGeometricType_Point | FdoGeometricType_Curve ); pGeomProp->SetSpatialContextAssociation(L"Rectangular"); FdoPropertiesP(pClass->GetProperties())->Add( pGeomProp ); pGeomProp = FdoGeometricPropertyDefinition::Create( L"Geometry3", L"" ); pGeomProp->SetGeometryTypes( FdoGeometricType_Point | FdoGeometricType_Curve ); pGeomProp->SetSpatialContextAssociation(L"South"); FdoPropertiesP(pClass->GetProperties())->Add( pGeomProp ); pGeomProp = FdoGeometricPropertyDefinition::Create( L"Geometry4", L"" ); pGeomProp->SetGeometryTypes( FdoGeometricType_Point | FdoGeometricType_Curve ); pGeomProp->SetSpatialContextAssociation(L"Bermuda Duplicate"); FdoPropertiesP(pClass->GetProperties())->Add( pGeomProp ); pGeomProp = FdoGeometricPropertyDefinition::Create( L"Geometry5", L"" ); pGeomProp->SetGeometryTypes( FdoGeometricType_Point | FdoGeometricType_Curve ); pGeomProp->SetSpatialContextAssociation(L"sc_1"); FdoPropertiesP(pClass->GetProperties())->Add( pGeomProp ); pCmd->SetFeatureSchema( schema ); pCmd->Execute(); }