I should add the final version of my file ist at:  
https://gist.github.com/vfr292/3330037cf5bc621d3d4b should anyone want to 
reference it.

Thank you again Mr. Bayer!

On Monday, November 24, 2014 11:00:06 PM UTC-8, Victor Reichert wrote:
>
> Thank you!  You are not an SQL alchemist, you are a SQL Wizard!  Thank you 
> again!
>
> For bonus points, an order by is possible on the discriminator like 
> objects are returned consecutively:
>
> poly = with_polymorphic(
>
>     AddressAssociation,
>
>     [Customer.assoc_cls, Supplier.assoc_cls], aliased=True)
>
>
> eager_addresses = session.query(Address).options(
>
>     joinedload(Address.association.of_type(poly)).joinedload(
>
>         poly.CustomerAddressAssociation.parent),
>
>     joinedload(Address.association.of_type(poly)).joinedload(
>
>         poly.SupplierAddressAssociation.parent),
>
> ).order_by(poly.discriminator.desc(),  poly.id)
>
> On Monday, November 24, 2014 4:04:41 PM UTC-8, Michael Bayer wrote:
>>
>>
>> On Nov 24, 2014, at 5:16 PM, Michael Bayer <mik...@zzzcomputing.com> 
>> wrote:
>>
>>
>> On Nov 24, 2014, at 12:31 PM, Michael Bayer <mik...@zzzcomputing.com> 
>> wrote:
>>
>>
>> On Nov 24, 2014, at 1:00 AM, Victor Reichert <vfr...@gmail.com> wrote:
>>
>> I've taken another look at trying to eager load the address.parent.  Is 
>> it possible to do that?
>>
>>
>> Unfortuntately not really.     It should be in theory but I’m not able to 
>> work out an eager load that goes to both Customer and Supplier in terms of 
>> AddressAssociation at the same time.  I can get the query to render just 
>> fine but the eager-targeting logic at the moment doesn’t seem to know how 
>> to be told to go to two separate subclasses of a base class at the same 
>> time.  There’s probably improvements yet to be made in eager loading to 
>> support this case better, e.g. this is a bug, but I’ve wrestled with it for 
>> about an hour and I’m out of time on it for now, sorry.    Even if it 
>> works, the query is very unpleasant to look at  :)   If I get it working 
>> later I’ll send it out.
>>
>>
>> OK here we go, the limitation is that the of_type() modifier is only 
>> recognized along a particular path once.   So to get over this we can use a 
>> with_polymorphic():
>>
>>
>> good news, i whacked that limitation in the latest master for 1.0.  so 
>> when 1.0 is released (in some months), you can do:
>>
>> eager_addresses = session.query(Address).options(
>>     joinedload(
>>         Address.association.of_type(Customer.assoc_cls)).joinedload(
>>         Customer.assoc_cls.parent),
>>     joinedload(
>>         Address.association.of_type(Supplier.assoc_cls)).joinedload(
>>         Supplier.assoc_cls.parent),
>> )
>>
>> this will behind the scenes build up that with_polymorphic() thing for 
>> you.
>>
>>
>>
>>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to