Hello,

here is a patch for EORelationship, proposing a fix for awakening of attributes that have a definition.

When relationships are constructed they are validated against attributes. That in turn awakens the attributes, being dependent on relationships that are not there at this time. The definitions will fail to be set.
Here is the part of the stack of that problematic dependency:

#0 0x002237aa in -[EOEntity(EOEntityPrivateXX) _parsePropertyName:] at EOEntity.m:3940 #1 0x002223c5 in -[EOEntity(EOEntityPrivateXX) _parseDescription:isFormat:arguments:] at EOEntity.m:3721 #2 0x0022813a in -[EOAttribute(EOAttributeEditing) _setDefinitionWithoutFlushingCaches:] at EOAttribute.m:832 #3 0x0022821c in -[EOAttribute(EOAttributeEditing) setDefinition:] at EOAttribute.m:878 #4 0x002264b9 in -[EOAttribute awakeWithPropertyList:] at EOAttribute.m:249
#5      0x00214630 in -[EOEntity attributes] at EOEntity.m:839
#6 0x0021cba9 in -[EOEntity(EOEntityPrivate) attributesByName] at EOEntity.m:2506
#7      0x00214907 in -[EOEntity attributeNamed:] at EOEntity.m:878
#8      0x00214ba9 in -[EOEntity anyAttributeNamed:] at EOEntity.m:903
#9 0x0022ff67 in -[EORelationship(EORelationshipEditing) validateName:] at EORelationship.m:1181 #10 0x0023034b in -[EORelationship(EORelationshipEditing) setName:] at EORelationship.m:1245 #11 0x0022b236 in -[EORelationship initWithPropertyList:owner:] at EORelationship.m:151 #12 0x0022ae1f in +[EORelationship relationshipWithPropertyList:owner:] at EORelationship.m:89
#13     0x00214ffb in -[EOEntity relationships] at EOEntity.m:964


The attached patch (-c) is fixing the issue by simply not validating the relationships against attributes. This seems to be correct behaviour, since the class documentation doesn't mention a test against attributes, only against relationships and stored procedures. Quote from the EOAccess docu:

validateName:
"Validates name and returns nil if its a valid name, or an exception if it isn’t. A name is invalid if it has zero length; starts with a character other than a letter, a number, or [EMAIL PROTECTED], “#”, or “_”; or contains a character other than a letter, a number, [EMAIL PROTECTED], “#”, “_”, or “$”. A name is also invalid if the receiver’s EOEntity already has an EORelationship with the same name, or if the model has a stored procedure that has an argument with
the same name."

Best wishes,
Georg Fleischmann



*** EOAccess/EORelationship.m.old       Wed Mar 12 14:30:36 2008
--- EOAccess/EORelationship.m   Mon Apr 28 16:27:05 2008
***************
*** 1178,1186 ****
                                         *p]
                          userInfo: nil];

!       if ([[self entity] anyAttributeNamed: name])
          exc++;
!       else if ([[self entity] anyRelationshipNamed: name])
          exc++;
else if ((storedProcedures = [[[self entity] model] storedProcedures]))
          {
--- 1178,1189 ----
                                         *p]
                          userInfo: nil];

! /* validating with attributes creates the problem, that on awakening the relationships, ! the attributes are not there yet, and awakening them will require the relationships. ! The EOAccess class documentation does not mention a test against attributes! */
!       /*if ([[self entity] anyAttributeNamed: name])
          exc++;
!       else*/ if ([[self entity] anyRelationshipNamed: name])
          exc++;
else if ((storedProcedures = [[[self entity] model] storedProcedures]))
          {



_______________________________________________
Bug-gnustep mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/bug-gnustep

Reply via email to