From: <mcu...@us...> - 2007-09-10 22:50:48
|
Revision: 1112 http://orm.svn.sourceforge.net/orm/?rev=1112&view=rev Author: mcurland Date: 2007-09-10 15:50:51 -0700 (Mon, 10 Sep 2007) Log Message: ----------- Added delete propagation to ReferenceConstraint and so that on reloading of the model we don't retain non-bound foreign keys. Implemented a change in the Oial Model to better check on a UniquenessConstraint if all children map towards the appropriate ObjectType. refs #327. Added additional code into the handling of separations so that when a separation is acting on a ConceptType that is being partitioned into assimilated ConceptTypes, it properly maps to them. refs #328. Modified Paths: -------------- trunk/Oial/ORMOialBridge/OialModelIsForORMModel.cs trunk/RelationalModel/DcilModel/DcilModel.dsl trunk/RelationalModel/DcilModel/GeneratedCode/DomainModel.cs trunk/RelationalModel/DcilModel/GeneratedCode/DomainRelationships.cs trunk/RelationalModel/OialDcilBridge/OialDcilBridge.DeserializationFixupListeners.cs Modified: trunk/Oial/ORMOialBridge/OialModelIsForORMModel.cs =================================================================== --- trunk/Oial/ORMOialBridge/OialModelIsForORMModel.cs 2007-09-01 19:13:42 UTC (rev 1111) +++ trunk/Oial/ORMOialBridge/OialModelIsForORMModel.cs 2007-09-10 22:50:51 UTC (rev 1112) @@ -936,7 +936,7 @@ } FactTypeMapping factTypeMapping = factTypeMappings[binarizedFactType]; - if (factTypeMapping.TowardsObjectType != objectType) + if (factTypeMapping.TowardsRole != childRole.OppositeRoleAlwaysResolveProxy.Role) { allChildrenMapTowardObjectType = false; break; Modified: trunk/RelationalModel/DcilModel/DcilModel.dsl =================================================================== --- trunk/RelationalModel/DcilModel/DcilModel.dsl 2007-09-01 19:13:42 UTC (rev 1111) +++ trunk/RelationalModel/DcilModel/DcilModel.dsl 2007-09-10 22:50:51 UTC (rev 1112) @@ -544,7 +544,7 @@ </DomainRole> </Source> <Target> - <DomainRole Id="6DAA73B4-E37E-4BE1-BB3C-DAFBCFD51343" Name="ReferenceConstraint" PropertyName="SourceTable" Multiplicity="One"> + <DomainRole Id="6DAA73B4-E37E-4BE1-BB3C-DAFBCFD51343" Name="ReferenceConstraint" PropertyName="SourceTable" Multiplicity="One" PropagatesDelete="true"> <RolePlayer> <DomainClassMoniker Name="ReferenceConstraint"/> </RolePlayer> @@ -653,7 +653,7 @@ </DomainRole> </Source> <Target> - <DomainRole Id="32200848-28E3-4D35-9A61-F592903B52BF" Name="Column" IsPropertyGenerator="false" Multiplicity="ZeroMany"> + <DomainRole Id="32200848-28E3-4D35-9A61-F592903B52BF" Name="Column" PropertyName="UniquenessConstraints" IsPropertyGenerator="false" Multiplicity="ZeroMany"> <RolePlayer> <DomainClassMoniker Name="Column"/> </RolePlayer> @@ -670,14 +670,14 @@ </ClrAttribute> </Attributes> <Source> - <DomainRole Id="22F748A4-8086-46C4-A323-E93574438D16" Name="ReferenceConstraint" PropertyName="TargetTable" Multiplicity="One"> + <DomainRole Id="22F748A4-8086-46C4-A323-E93574438D16" Name="ReferenceConstraint" PropertyName="TargetTable" Multiplicity="One" PropagatesDelete="true"> <RolePlayer> <DomainClassMoniker Name="ReferenceConstraint"/> </RolePlayer> </DomainRole> </Source> <Target> - <DomainRole Id="3EFFDDB4-4B20-4EB4-8A79-271240574413" Name="TargetTable" IsPropertyGenerator="false" Multiplicity="ZeroMany"> + <DomainRole Id="3EFFDDB4-4B20-4EB4-8A79-271240574413" Name="TargetTable" PropertyName="ReferenceConstraints" IsPropertyGenerator="false" Multiplicity="ZeroMany"> <RolePlayer> <DomainClassMoniker Name="Table"/> </RolePlayer> Modified: trunk/RelationalModel/DcilModel/GeneratedCode/DomainModel.cs =================================================================== --- trunk/RelationalModel/DcilModel/GeneratedCode/DomainModel.cs 2007-09-01 19:13:42 UTC (rev 1111) +++ trunk/RelationalModel/DcilModel/GeneratedCode/DomainModel.cs 2007-09-10 22:50:51 UTC (rev 1112) @@ -409,9 +409,11 @@ DomainRoles.Add(global::Neumont.Tools.RelationalModels.ConceptualDatabase.TableContainsColumn.ColumnDomainRoleId, true); DomainRoles.Add(global::Neumont.Tools.RelationalModels.ConceptualDatabase.TableContainsConstraint.ConstraintDomainRoleId, true); DomainRoles.Add(global::Neumont.Tools.RelationalModels.ConceptualDatabase.TableContainsUniquenessConstraint.UniquenessConstraintDomainRoleId, true); + DomainRoles.Add(global::Neumont.Tools.RelationalModels.ConceptualDatabase.TableContainsReferenceConstraint.ReferenceConstraintDomainRoleId, true); DomainRoles.Add(global::Neumont.Tools.RelationalModels.ConceptualDatabase.TableContainsCheckConstraint.CheckConstraintDomainRoleId, true); DomainRoles.Add(global::Neumont.Tools.RelationalModels.ConceptualDatabase.DomainContainsCheckConstraint.CheckConstraintDomainRoleId, true); DomainRoles.Add(global::Neumont.Tools.RelationalModels.ConceptualDatabase.ColumnHasPredefinedDataType.PredefinedDataTypeDomainRoleId, true); + DomainRoles.Add(global::Neumont.Tools.RelationalModels.ConceptualDatabase.ReferenceConstraintTargetsTable.ReferenceConstraintDomainRoleId, true); DomainRoles.Add(global::Neumont.Tools.RelationalModels.ConceptualDatabase.ReferenceConstraintContainsColumnReference.ColumnReferenceDomainRoleId, true); #endregion } Modified: trunk/RelationalModel/DcilModel/GeneratedCode/DomainRelationships.cs =================================================================== --- trunk/RelationalModel/DcilModel/GeneratedCode/DomainRelationships.cs 2007-09-01 19:13:42 UTC (rev 1111) +++ trunk/RelationalModel/DcilModel/GeneratedCode/DomainRelationships.cs 2007-09-10 22:50:51 UTC (rev 1112) @@ -1800,7 +1800,7 @@ /// </summary> [DslDesign::DisplayNameResource("Neumont.Tools.RelationalModels.ConceptualDatabase.TableContainsReferenceConstraint/ReferenceConstraint.DisplayName", typeof(global::Neumont.Tools.RelationalModels.ConceptualDatabase.ConceptualDatabaseDomainModel), "Neumont.Tools.RelationalModels.ConceptualDatabase.GeneratedCode.DomainModelResx")] [DslDesign::DescriptionResource("Neumont.Tools.RelationalModels.ConceptualDatabase.TableContainsReferenceConstraint/ReferenceConstraint.Description", typeof(global::Neumont.Tools.RelationalModels.ConceptualDatabase.ConceptualDatabaseDomainModel), "Neumont.Tools.RelationalModels.ConceptualDatabase.GeneratedCode.DomainModelResx")] - [DslModeling::DomainRole(DslModeling::DomainRoleOrder.Target, PropertyName = "SourceTable", PropertyDisplayNameKey="Neumont.Tools.RelationalModels.ConceptualDatabase.TableContainsReferenceConstraint/ReferenceConstraint.PropertyDisplayName", Multiplicity = DslModeling::Multiplicity.One)] + [DslModeling::DomainRole(DslModeling::DomainRoleOrder.Target, PropertyName = "SourceTable", PropertyDisplayNameKey="Neumont.Tools.RelationalModels.ConceptualDatabase.TableContainsReferenceConstraint/ReferenceConstraint.PropertyDisplayName", PropagatesDelete = true, Multiplicity = DslModeling::Multiplicity.One)] [DslModeling::DomainObjectId("6daa73b4-e37e-4be1-bb3c-dafbcfd51343")] public virtual ReferenceConstraint ReferenceConstraint { @@ -2551,13 +2551,13 @@ } #endregion - #region Static methods to access Columns of a Domain + #region Static methods to access columns of a Domain /// <summary> - /// Gets a list of Columns. + /// Gets a list of columns. /// </summary> [global::System.Diagnostics.DebuggerStepThrough] [global::System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1011")] - public static DslModeling::LinkedElementCollection<Column> GetColumns(Domain element) + public static DslModeling::LinkedElementCollection<Column> Getcolumns(Domain element) { return new DslModeling::LinkedElementCollection<Column>(element, DomainDomainRoleId); } @@ -2576,7 +2576,7 @@ /// </summary> [DslDesign::DisplayNameResource("Neumont.Tools.RelationalModels.ConceptualDatabase.ColumnHasDomain/Domain.DisplayName", typeof(global::Neumont.Tools.RelationalModels.ConceptualDatabase.ConceptualDatabaseDomainModel), "Neumont.Tools.RelationalModels.ConceptualDatabase.GeneratedCode.DomainModelResx")] [DslDesign::DescriptionResource("Neumont.Tools.RelationalModels.ConceptualDatabase.ColumnHasDomain/Domain.Description", typeof(global::Neumont.Tools.RelationalModels.ConceptualDatabase.ConceptualDatabaseDomainModel), "Neumont.Tools.RelationalModels.ConceptualDatabase.GeneratedCode.DomainModelResx")] - [DslModeling::DomainRole(DslModeling::DomainRoleOrder.Target, PropertyName = "Columns", PropertyDisplayNameKey="Neumont.Tools.RelationalModels.ConceptualDatabase.ColumnHasDomain/Domain.PropertyDisplayName", Multiplicity = DslModeling::Multiplicity.ZeroMany)] + [DslModeling::DomainRole(DslModeling::DomainRoleOrder.Target, PropertyName = "columns", PropertyDisplayNameKey="Neumont.Tools.RelationalModels.ConceptualDatabase.ColumnHasDomain/Domain.PropertyDisplayName", Multiplicity = DslModeling::Multiplicity.ZeroMany)] [DslModeling::DomainObjectId("8049efc1-7e4f-4965-82e7-d0b376424c57")] public virtual Domain Domain { @@ -2640,7 +2640,7 @@ /// </summary> [global::System.Diagnostics.DebuggerStepThrough] [global::System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1011")] - public static global::System.Collections.ObjectModel.ReadOnlyCollection<global::Neumont.Tools.RelationalModels.ConceptualDatabase.ColumnHasDomain> GetLinksToColumns ( global::Neumont.Tools.RelationalModels.ConceptualDatabase.Domain domainInstance ) + public static global::System.Collections.ObjectModel.ReadOnlyCollection<global::Neumont.Tools.RelationalModels.ConceptualDatabase.ColumnHasDomain> GetLinksTocolumns ( global::Neumont.Tools.RelationalModels.ConceptualDatabase.Domain domainInstance ) { return DslModeling::DomainRoleInfo.GetElementLinks<global::Neumont.Tools.RelationalModels.ConceptualDatabase.ColumnHasDomain>(domainInstance, global::Neumont.Tools.RelationalModels.ConceptualDatabase.ColumnHasDomain.DomainDomainRoleId); } @@ -3519,7 +3519,7 @@ /// </summary> [DslDesign::DisplayNameResource("Neumont.Tools.RelationalModels.ConceptualDatabase.ReferenceConstraintTargetsTable/ReferenceConstraint.DisplayName", typeof(global::Neumont.Tools.RelationalModels.ConceptualDatabase.ConceptualDatabaseDomainModel), "Neumont.Tools.RelationalModels.ConceptualDatabase.GeneratedCode.DomainModelResx")] [DslDesign::DescriptionResource("Neumont.Tools.RelationalModels.ConceptualDatabase.ReferenceConstraintTargetsTable/ReferenceConstraint.Description", typeof(global::Neumont.Tools.RelationalModels.ConceptualDatabase.ConceptualDatabaseDomainModel), "Neumont.Tools.RelationalModels.ConceptualDatabase.GeneratedCode.DomainModelResx")] - [DslModeling::DomainRole(DslModeling::DomainRoleOrder.Source, PropertyName = "TargetTable", PropertyDisplayNameKey="Neumont.Tools.RelationalModels.ConceptualDatabase.ReferenceConstraintTargetsTable/ReferenceConstraint.PropertyDisplayName", Multiplicity = DslModeling::Multiplicity.One)] + [DslModeling::DomainRole(DslModeling::DomainRoleOrder.Source, PropertyName = "TargetTable", PropertyDisplayNameKey="Neumont.Tools.RelationalModels.ConceptualDatabase.ReferenceConstraintTargetsTable/ReferenceConstraint.PropertyDisplayName", PropagatesDelete = true, Multiplicity = DslModeling::Multiplicity.One)] [DslModeling::DomainObjectId("22f748a4-8086-46c4-a323-e93574438d16")] public virtual ReferenceConstraint ReferenceConstraint { Modified: trunk/RelationalModel/OialDcilBridge/OialDcilBridge.DeserializationFixupListeners.cs =================================================================== --- trunk/RelationalModel/OialDcilBridge/OialDcilBridge.DeserializationFixupListeners.cs 2007-09-01 19:13:42 UTC (rev 1111) +++ trunk/RelationalModel/OialDcilBridge/OialDcilBridge.DeserializationFixupListeners.cs 2007-09-10 22:50:51 UTC (rev 1112) @@ -511,11 +511,9 @@ List<ConceptTypeChild> preferredConceptTypeChildList = GetPreferredConceptTypeChildrenForConceptType(conceptType); List<Column> columnsForConceptType = new List<Column>(); - List<ConceptTypeChild> tester = new List<ConceptTypeChild>(); foreach (ConceptTypeChild conceptTypeChild in ConceptTypeChild.GetLinksToTargetCollection(conceptType)) { - tester.Add(conceptTypeChild); if (!(conceptTypeChild is ConceptTypeAssimilatesConceptType)) { columnsForConceptType.AddRange(GetColumnsForConceptTypeChild(conceptTypeChild, new List<ConceptTypeChild>())); @@ -1075,6 +1073,29 @@ } } } + else + { + // If the seperation is further partitioned then it will not have a secondary child table, further assimilations or seperations are ok though. + ReadOnlyCollection<ConceptTypeAssimilatesConceptType> childAssimilations = ConceptTypeAssimilatesConceptType.GetLinksToAssimilatedConceptTypeCollection(assimilation.AssimilatedConceptType); + bool isPartitioned = false; + foreach (ConceptTypeAssimilatesConceptType possiblePartition in childAssimilations) + { + if (AssimilationMapping.GetAssimilationMappingFromAssimilation(possiblePartition).AbsorptionChoice == AssimilationAbsorptionChoice.Partition) + { + isPartitioned = true; + break; + } + } + if (isPartitioned) + { + bool prefered = false; + foreach (ConceptTypeAssimilatesConceptType partition in childAssimilations) + { + DoSeparation(partition, ref prefered); + prefered = false; + } + } + } } /// <summary> @@ -1198,18 +1219,47 @@ } else if (AssimilationMapping.GetAbsorptionChoiceFromAssimilation(conceptTypeAssimilatesConceptType) == AssimilationAbsorptionChoice.Separate) { - Table targetTable = TableIsPrimarilyForConceptType.GetTable(conceptTypeAssimilatesConceptType.AssimilatedConceptType); + // UNDONE: Problem occuring with A is partitioned to B, C; C is partitioned to D, E. Setting A-C to Partition + ReadOnlyCollection<ConceptTypeAssimilatesConceptType> childCollection = ConceptTypeAssimilatesConceptType.GetLinksToAssimilatedConceptTypeCollection(conceptTypeAssimilatesConceptType.AssimilatedConceptType); - foreach (Column target in targetTable.ColumnCollection) + /**/ + bool containsPartitions = false; + foreach (ConceptTypeAssimilatesConceptType act in childCollection) { - foreach (ConceptTypeChild conceptTypeChild in ColumnHasConceptTypeChild.GetConceptTypeChildPath(target)) + if (AssimilationMapping.GetAssimilationMappingFromAssimilation(act).AbsorptionChoice == AssimilationAbsorptionChoice.Partition) { - if (ColumnHasConceptTypeChild.GetConceptTypeChildPath(target).Contains(conceptTypeChild) && target != column) + + containsPartitions = true; + break; + } + } + /**/ + /**/ + if (!containsPartitions) + { + /**/ + Table targetTable = TableIsPrimarilyForConceptType.GetTable(conceptTypeAssimilatesConceptType.AssimilatedConceptType); + + foreach (Column target in targetTable.ColumnCollection) + { + foreach (ConceptTypeChild conceptTypeChild in ColumnHasConceptTypeChild.GetConceptTypeChildPath(target)) { - columns.Add(target); + if (ColumnHasConceptTypeChild.GetConceptTypeChildPath(target).Contains(conceptTypeChild) && target != column) + { + columns.Add(target); + } } } + /**/ } + else + { + foreach (ConceptTypeAssimilatesConceptType act in childCollection) + { + columns.AddRange(ConceptTypeHasPrimaryIdentifierColumns(column, act.AssimilatedConceptType)); + } + } + /**/ } } @@ -1440,9 +1490,11 @@ /// <param name="conceptType">The <see cref="ConceptType"/>.</param> private static void CreateUniquenessConstraints(ConceptType conceptType) { + // UNDONE: Look here for possible problems with ring contstraints Table isPrimarilyForTable = TableIsPrimarilyForConceptType.GetTable(conceptType); if (isPrimarilyForTable != null) { + List<Uniqueness> alreadyDone = new List<Uniqueness>(); foreach (Uniqueness uniqueness in conceptType.UniquenessCollection) { UniquenessConstraint uniquenessConstraint = new UniquenessConstraint(uniqueness.Store, new PropertyAssignment[] { new PropertyAssignment(UniquenessConstraint.NameDomainPropertyId, uniqueness.Name) }); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |