Hi Paul:

Anjo’s “HACK” should test for EMPY and/or NONE-EXISTENT Snapshots for 
RELATIONSHIPS that have not-been-fetched/accessed yet, meaning dbSnapshot 
isNULL and  dbSnapshot.objectForKey(key)  throws exceptions and aborts the save 
operations!!

Thanks.


This update is required to FIX the error, I hope: 


                // HACK: ak these methods are protected, so we call them via KVC
                if (dbOp.databaseOperator() == 2 && ((Boolean) 
NSKeyValueCoding.Utility.valueForKey(entity, 
"_hasNonUpdateableAttributes")).booleanValue()) {
                        NSArray keys = (NSArray) 
NSKeyValueCoding.Utility.valueForKey(entity, "dbSnapshotKeys");
                        NSDictionary dbSnapshotX  = dbOp.dbSnapshot();
                        NSDictionary newRow = dbOp.newRow();
                        
                        NSDictionary dbSnapshot = 
ERXDictionaryUtilities.removeNullValues(dbSnapshotX);
                        
                        if (dbSnapshot.isEmpty())
                                {
                                // do nothing
                                }
                        else
                                {       
                                for (int i = keys.count() - 1; i >= 0; i--) {
                                        String key = (String) 
keys.objectAtIndex(i);
                                        EOAttribute att = 
entity.attributeNamed(key);
                                // FIX: ak when you have single-table 
inheritance and in the
                                // child there are foreign keys that are not in 
the parent
                                // THEN, if the entity 
_hasNonUpdateableAttributes (public PK or
                                // read only props) the DB op is checked
                                // against the attributes. BUT this dictionary 
has all entries,
                                // even from the child (most likely NULL values)
                                // and the current implementation doesn't check 
against the case
                                // when the attribute isn't present in the 
first place.
                                // SO we add this check and live happily ever 
after
                                        if (att != null && 
att._isNonUpdateable() && 
!dbSnapshot.objectForKey(key).equals(newRow.objectForKey(key))) {
                                                if (att.isReadOnly()) {
                                                throw new 
IllegalStateException("cannot update read-only key '" + key + "' on object:" + 
dbOp.object() + " of entity: " + entity.name() + " in databaseContext " + this);
                                                }
                                        throw new IllegalStateException("cannot 
update primary-key '" + key + "' from '" + dbSnapshot.objectForKey(key) + "' to 
'" + newRow.objectForKey(key) + "' on object:" + dbOp.object() + " of entity: " 
+ entity.name() + " in databaseContext " + this);
                                                }
                                        }
                                }        

                }
                /* */

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to