Tried to add a couple of logs to the Database Context delegate methods.

Looks like at the moment

- when databaseContextWillPerformAdaptorOperations gets called, the 
relationship still lives (not fault)
- when databaseContextDidFetchObjects gets called, the relationship has already 
been turned to a fault.

Hm. Does it help any finding the culprit? Looks like I'm sort of outta ideas :/

Thanks a lot,
OC

On 15. 2. 2015, at 11:41, OC <[email protected]> wrote:

> Hello there,
> 
> further investigating the problem with re-fetching already fetched objects, I 
> have added some logs into the databaseContextShouldFetchObjects delegate 
> method (thanks, Chuck, for indirectly pointing me there) and eventually found 
> that whilst before saveChanges the objects are fetched all right, after it 
> the priceOffers relationships have been refaulted. What the heck.
> 
> Namely, with a code like this (the "others" relationships I've selected quite 
> randomly just to see whether they stick or not)
> 
> ===
>        3.times {
>            DBPriceOffer o=new DBPriceOffer()
>            o.price=-1 // just a tag allowing to clean up the mess in the DB
>            createdBy.editingContext().insertObject(o)
>            println "WEIRD 17 newo: $o, creator: $createdBy // 
> EC:${o.editingContext()} 
> (FTS:${(System.currentTimeMillis()-o.editingContext().fetchTimestamp())/1000} 
> s) fault: ${createdBy.priceOffers().isFault()} // others: 
> ${createdBy.auditItems().isFault()} ${createdBy.formPrototype().isFault()} 
> ${auction.createdBy().isFault()} ${auction.priceOffers().isFault()}"
>            o.addObjectToBothSidesOfRelationshipWithKey(createdBy,'user')
>            println "WEIRD 21 fault: ${createdBy.priceOffers().isFault()} // 
> others: ${createdBy.auditItems().isFault()} 
> ${createdBy.formPrototype().isFault()} ${auction.createdBy().isFault()} 
> ${auction.priceOffers().isFault()}"
>            o.editingContext().saveChanges()
>            println "WEIRD 23 fault: ${createdBy.priceOffers().isFault()} // 
> others: ${createdBy.auditItems().isFault()} 
> ${createdBy.formPrototype().isFault()} ${auction.createdBy().isFault()} 
> ${auction.priceOffers().isFault()}"
>        }
>        System.exit(0) // to keep the mess in DB limited
> ===
> 
> and delegate method
> 
> ===
>    NSArray databaseContextShouldFetchObjects(EODatabaseContext dbCtxt, 
> EOFetchSpecification fs, EOEditingContext ec) {
>        if (fs.entityName=='DBPriceOffer' && (fs.qualifier in 
> EOKeyValueQualifier) && fs.qualifier.key=='user') {
>            println "/DCSFO/ want POs of USER $fs.qualifier.value"
>            println "/DCSFO/ -> whose POs are fault: 
> ${fs.qualifier.value.priceOffers.isFault()}"
>        }
>        return null
>    }
> ===
> 
> I am getting this -- I have added **'s to the interesting values.
> 
> Note please the auction's priceOffers, which are NOT updated -- the real code 
> of course contains 
> "o.addObjectToBothSidesOfRelationshipWithKey(auction,'auction')", but I've 
> removed it from the test code to keep it as plain as possible -- get 
> re-faulted too (and stay this way, for, unlike the relationship of the user, 
> it is not touched and thus fired; user's relationship is touched -- and fired 
> -- each time):
> 
> ===
> WEIRD 17 newo: <DBPriceOffer@747124234 PK:null N /EC:991824826>, creator: 
> <DBUser@841551067 PK:1000008 Name:'cl' T:'5' /EC:991824826> // 
> EC:er.extensions.eof.ERXEC@3b1e0bba (FTS:3640.327 s) fault: true // others: 
> true false true false
> /DCSFO/ want POs of USER <DBUser@841551067 PK:1000008 Name:'cl' T:'5' 
> /EC:991824826>
> /DCSFO/ -> whose POs are fault: true
> WEIRD 21 fault: *false* // others: true false true *false*
> WEIRD 23 fault: *true* // others: true false true *true*
> 
> WEIRD 17 newo: <DBPriceOffer@869533795 PK:null N /EC:991824826>, creator: 
> <DBUser@841551067 PK:1000008 Name:'cl' T:'5' /EC:991824826> // 
> EC:er.extensions.eof.ERXEC@3b1e0bba (FTS:3641.102 s) fault: true // others: 
> true false true true
> /DCSFO/ want POs of USER <DBUser@841551067 PK:1000008 Name:'cl' T:'5' 
> /EC:991824826>
> /DCSFO/ -> whose POs are fault: true
> WEIRD 21 fault: *false* // others: true false true true
> WEIRD 23 fault: *true* // others: true false true true
> 
> WEIRD 17 newo: <DBPriceOffer@506662331 PK:null N /EC:991824826>, creator: 
> <DBUser@841551067 PK:1000008 Name:'cl' T:'5' /EC:991824826> // 
> EC:er.extensions.eof.ERXEC@3b1e0bba (FTS:3641.375 s) fault: true // others: 
> true false true true
> /DCSFO/ want POs of USER <DBUser@841551067 PK:1000008 Name:'cl' T:'5' 
> /EC:991824826>
> /DCSFO/ -> whose POs are fault: true
> WEIRD 21 fault: *false* // others: true false true true
> WEIRD 23 fault: *true* // others: true false true true
> APPLICATION SHUTDOWN SEQUENCE COMPLETE
> ===
> 
> The question is -- how can this happen?
> 
> Might I be forgetting of some code of mine which gets called as a side-effect 
> of saveChanges and does this?
> 
> Neither validateForSave nor my other database context delegate methods are 
> the culprit: I've out-commented them, run the app, and without them it 
> behaves precisely the same way.
> 
> What else might cause this?!?
> 
> Thanks,
> OC
> 
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      ([email protected])
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/ocs%40ocs.cz
> 
> This email sent to [email protected]


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

This email sent to [email protected]

Reply via email to