On Nov 9, 2009, at 1:09 PM, David Gardner wrote:

>
> Actually I hadn't realized that the problem only occurred on  
> eagerloading.
>
> Would it make sense to be able to do an alias at the table level? In
> other words:
>
> task_parent=aliased(task_table)
> mapper(Task,task_table, properties={
>     'Children' : relation(Task, backref=backref('Parent',
>
> primaryjoin=(and_(task_parent.c.asset==task_table.c.parent_asset,
>
> task_parent.c.name==task_table.c.name)),
>                        remote_side=[task_parent.c.asset,
> task_parent.c.name]),
>                        order_by=task_table.c.asset,cascade='all',
> lazy=True)
>      })

that wouldn't work for a variety of reasons.   aliased() doesn't work  
at that level.  you'd at least want to use a table alias, i.e.  
task_table.alias() - but then you'd need to map the class twice, and  
then you're dealing with something totally different.

there's a way to make this work which I'll eventually get to in ticket  
1612.


>
>
> Michael Bayer wrote:
>> Theres a test case like this which had a behavioral change as of
>> 0.5.5, but looking at that, eager loading doesn't come into the  
>> picture.
>>
>> for that particular test, we add foreign_keys=[task.c.parent_asset]  
>> to
>> the many to one side, and foreign_keys=[None] to the one-to-many
>> side.  You might need that here just in general.
>>
>> But for eagerloading I actually don't think we have a solution for
>> that right now.   the "task_1" comes into the ON clause by way of
>> clause adaption, which has a list of columns that it wants to
>> "adapt".   So "task.name" is either in or not in the list.
>>
>> I'm thinking of a completely bizarre hack which would be to add a
>> Column to the table with the same name as "name", but a different  
>> key,
>> then setting up primaryjoin using that.   But I don't know if that
>> would do it.
>>
>> Otherwise you might just take the easy route and say:
>>
>> t2 = aliased(Task)
>> s.query(Task).join(t2, and_(Task.parent_asset==t2.asset,
>> Task.name==t2.name)).options(contains_eager("parent" , alias=t2))
>>
>>
>>
>
>
> -- 
> David Gardner
> Pipeline Tools Programmer
> Jim Henson Creature Shop
> dgard...@creatureshop.com
>
>
>
> >


--~--~---------~--~----~------------~-------~--~----~
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 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to