The other thing to consider is that comparing the EOGlobalID means they are the 
same object, but that does not meant the two objects are the same — if either 
EC has uncommitted changes.  Unless you are using READ UNCOMMITTED that is not 
a case you will encounter in the database.  It does not look significant in 
this case, but could be in others.

Chuck


> On May 31, 2019, at 6:09 PM, Aaron Rosenzweig via Webobjects-dev 
> <webobjects-dev@lists.apple.com> wrote:
> 
> At the base of it - if you do “.equals()” with one EO and another… even if 
> they generate the same GlobalID they will not be equal if they are in 
> different editingContexts. 
> 
> So that’s why an in memory evaluation doesn’t work. 
> 
> When you query the database, there is no EC in that realm, so you get a 
> different behavior. 
> 
> Some people call this a form of “impedance mismatch” when traversing the java 
> object world into the SQL relational world. 
> 
> Mixing EOs of disparate contexts is a bit like crossing the beams in 
> Ghostbusters - don’t want to do it. 
> 
> Your pull request would trick you thinking you haven’t crossed beams and 
> later run into an issue if you try to assign and then save. A type of “kick 
> the problem down the road” scenario. 
> 
> For me - it’s code smell when the objects aren’t in the same EOEditingContext 
> and I’d like to know sooner, rather than later. 
> AARON ROSENZWEIG / Chat 'n Bike <http://www.chatnbike.com/>
> e:  aa...@chatnbike.com <mailto:aa...@chatnbike.com>  t:  (301) 956-2319
>       
> 
>> On May 31, 2019, at 2:37 PM, Henrique Prange via Webobjects-dev 
>> <webobjects-dev@lists.apple.com <mailto:webobjects-dev@lists.apple.com>> 
>> wrote:
>> 
>> Hi Paul,
>> 
>> Thanks for your feedback. It's good to know that I'm not alone. :) Even 
>> though it's an unusual situation, I wondered if someone else hasn't been 
>> bitten by it too.
>> 
>> I'll create a pull request for discussion. Fixing the problem for toOne 
>> relationships is not complicated. I'm looking at the  ERXComparisonSupport 
>> class for reference. Fixing the same problem for a collection of EOs (toMany 
>> relationships) is a little bit more tricky. I'll give more details in the 
>> pull request.
>> 
>> Cheers,
>> 
>> HP
>> 
>>> On May 28, 2019, at 11:41 PM, Paul Hoadley <pa...@logicsquad.net 
>>> <mailto:pa...@logicsquad.net>> wrote:
>>> 
>>> Hi Henrique,
>>> 
>>> On 21 May 2019, at 08:22, Henrique Prange <hpra...@gmail.com 
>>> <mailto:hpra...@gmail.com>> wrote:
>>> 
>>>> I've been using the EOQualifier.evaluateWithObject method to filter some 
>>>> EOs in memory. Everything works fine except for one particular case. It 
>>>> always returns false if I try to evaluate a qualifier containing EOs with 
>>>> an EO from another editing context.
>>>> 
>>>> The code below demonstrates the problem:
>>>> 
>>>> EOEditingContext ec1 = // create new ERXEC;
>>>> Foo foo = ... // Fetch Foo using ec1
>>>> EOQualifier q = Bar.FOO.is <http://bar.foo.is/>(foo);
>>>> 
>>>> EOEditingContext ec2 = // create new ERXEC;
>>>> Bar bar = ... // Fetch bar related to foo using ec2
>>>> 
>>>> q.evaluateWithObject(bar); // returns false
>>>> ERXEOControlUtilities.eoEquals(bar.foo(), foo); // returns true
>>>> 
>>>> The qualifier evaluates to false because the editing contexts of bar.foo() 
>>>> and foo are different, even though their EOGlobalIDs are the same.
>>> 
>>> That's certainly an interesting result.
>>> 
>>>> This behavior is not consistent with the result of the same qualifier 
>>>> being applied to a fetch specification (fetching from the database). In 
>>>> this case, EOF will return the instance of Bar as expected.
>>> 
>>> This is all starting to ring a bell with me. I think I've run into this 
>>> indirectly. From time to time I'll do something like this:
>>> 
>>> folders = ERXQ.filtered(..., DocumentFolder.ORGANISATION.is 
>>> <http://documentfolder.organisation.is/>(document().organisation()));
>>> 
>>> which doesn't produce the results I'm expecting, and I remember I need to 
>>> do this:
>>> 
>>> folders = ERXQ.filtered(..., DocumentFolder.ORGANISATION.is 
>>> <http://documentfolder.organisation.is/>(document().organisation().localInstanceIn(someEditingContext)));
>>> 
>>> If you drill down on ERXQ.filtered(), you eventually get to 
>>> EOQualifier.evaluateWithObject().
>>> 
>>>> After some research, I found that I can extend the 
>>>> EOQualifier.ComparisonSupport class to evaluate all EOGenericRecord 
>>>> objects according to the ERXEOControlUtilities.eoEquals contract. I had a 
>>>> positive outcome after a preliminary experiment.
>>>> 
>>>> I'd be interested to hear your views about this.
>>>> 
>>>> - IMO, it is a bug. Do you agree?
>>> 
>>> I agree. It's such an old, deep bug though that I've just internalised it 
>>> and now it's just normal EOF behaviour to me.
>>> 
>>>> - Can you imagine any side effects of this fix?
>>> 
>>> Not immediately. I assume the fix would have no effect on the kind of 
>>> localInstance() work-around that I presume we've all been using here. I'm 
>>> trying to contrive a scenario where you'd rely on the existing behaviour, 
>>> and I'm drawing a blank really.
>>> 
>>>> - Since this change affects the in-memory evaluation of every type of EO, 
>>>> do you think it's appropriate to fix it on Wonder?
>>>> 
>>>> I'm willing to contribute a pull request if that makes sense.
>>> 
>>> Seems like a good idea to me. Do you want to at least create the PR and we 
>>> can have a look?
>>> 
>>> 
>>> -- 
>>> Paul Hoadley
>>> https://logicsquad.net/ <https://logicsquad.net/>
>>> https://www.linkedin.com/company/logic-squad/ 
>>> <https://www.linkedin.com/company/logic-squad/>
>>> 
>> 
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com 
>> <mailto:Webobjects-dev@lists.apple.com>)
>> Help/Unsubscribe/Update your Subscription:
>> https://lists.apple.com/mailman/options/webobjects-dev/aaron%40chatnbike.com 
>> <https://lists.apple.com/mailman/options/webobjects-dev/aaron%40chatnbike.com>
>> 
>> This email sent to aa...@chatnbike.com <mailto:aa...@chatnbike.com>
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com 
> <mailto:Webobjects-dev@lists.apple.com>)
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/hill.chuck%40gmail.com 
> <https://lists.apple.com/mailman/options/webobjects-dev/hill.chuck%40gmail.com>
> 
> This email sent to hill.ch...@gmail.com <mailto:hill.ch...@gmail.com>
 _______________________________________________
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