Michael Bayer wrote:
> 
> On Jan 15, 2008, at 5:17 PM, [EMAIL PROTECTED] wrote:
> 
>>>> hmmm, specify explicitly?
>>>> e.g. query(A).eagerload( B.address)
>>>>
>>>> joined-inh via left-outer-join is enough, no need for polymunion.
>>>> i dont know how the current machinery for eagerload works, but imo
>>>> knowing your level of lookahead-design, it should not be hard to
>>>> apply that machinery over a polymorphic mapper/query?
>>> theres plenty of much higher priority issues than this one in the
>>> queue...considering that you can already get the results you want  
>>> with
>>> this one using direct SQL.....
>> right..
>>
>> i've hacked something that seems to work; It's about 20 lines split in
>> orm.query and orm.interfaces:
>>  - such special eagerloaders are requested as  
>> query.eagerload( B.address) -
>> and not just the name/path
>>  - query-compile calling context.exec_withpath(...) iterates over all
>> self.mapper properties (not only select_mapper's), plus all  
>> eagerloaders of
>> above type (i.e. non-names). Thus the 4 cases are covered:
>>  A has address / query(B).eagerload('address') #works before
>>  A has address / query(A).eagerload('address') #new - did not work  
>> before
>>  B has address / query(B).eagerload('address') #works before
>>  B has address / query(A).eagerload(B.address) #new - not possible  
>> before
>> (in all these B inherits A via joined inheritance; A is polymorphic  
>> via
>> left-outer-joins)
>> i'm absolutely sure that this is not the completely right thing -  
>> that's
>> what i got from the machinery-src in 2 hours -  but it is something  
>> as a
>> start... sure it needs correctness tests etc of the sorts.
>>
> 
> yeah thats the idea but it needs more work than that.  
> for one thing  
> you might be hitting the same MappedProperty twice using that  
> iteration (therefore joining twice), and also it doesn't account for  
> eager loaders like "eagerload("foo.bar.bat")"; i.e. deeper level  
> properties which would need to have an adjusted "path" sent to them  
> (or ignored in that part of the iteration).
pure textual paths are going same (old) way; it needs some 
extra-"syntax"/API for multilevel descriptor-specified eagers; e.g 
eagerload( (B.foo, 'bar', C.bat ) )

> also i can see a lot of cases where the eager loader from "B" is going  
> to generate invalid SQL, such as joined table inheritance with no  
> select_table, the query is only generated against "A".  "B.address"   
> is going to try generating an eager join against the "B" table which  
> isnt present, and youll get some kind of mess as a result.  checking  
> for this condition beforehand is bound to add lots of complexity and i  
> only want to add features like these if they can be smoothly  
> integrated, not lots of extra "if/thens" bolted on.
yeahhh i know i dont see the wider sql picture...
i may put all this as a ticket to remind.. maybe one day you'll be in better 
mood (;-)


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to