oops, it looks like the second form
(session.query(Item).with_polymorphic([FooItem,
BarItem]).options(eagerload(FooItem.foochild, BarItem.barchild)))
works fine.
should i go ahead and try to write test cases?
- Jae
On Aug 29, 2009, at 2:23 PM, Jae Kwon wrote:
> I looked at this further, i think I got it working half way.
>
> Index: lib/sqlalchemy/orm/util.py
> ===================================================================
> --- lib/sqlalchemy/orm/util.py (revision 6072)
> +++ lib/sqlalchemy/orm/util.py (working copy)
> @@ -387,6 +387,7 @@
> if left_mapper or right_mapper:
> self._orm_mappers = (left_mapper, right_mapper)
>
> + parent_mapper =
> onclause.parententity._AliasedClass__mapper
> if isinstance(onclause, basestring):
> prop = left_mapper.get_property(onclause)
> elif isinstance(onclause, attributes.QueryableAttribute):
> @@ -411,6 +412,9 @@
> onclause = sj
> else:
> onclause = pj
> +
> + if parent_mapper._single_table_criterion:
> + onclause = sql.and_(onclause,
> parent_mapper._single_table_criterion)
> self._target_adapter = target_adapter
>
> expression.Join.__init__(self, left, right, onclause, isouter)
>
>
> It works for queries of the form :
> items =
> session
> .query
> (Item).with_polymorphic([FooItem]).options(eagerload(FooItem.child))
> but not :
> items = session.query(Item).with_polymorphic([FooItem,
> BarItem]).options(eagerload(FooItem.foochild, BarItem.barchild))
>
> I'll keep trying around for a solution that solves the above, and
> then hopefully someone more knowledgeable can pick it up or guide me.
>
> - Jae
>
>
>
>
>
>
> On Aug 28, 2009, at 4:43 PM, Jae Kwon wrote:
>
>>
>> I've seen similar discussions here, but it's been a while so perhaps
>> things have changed.
>>
>> class Foo(Base):
>> __tablename__ = 'foo'
>> type = Column(Integer)
>> __mapper_args__ = {'polymorphic_on': type}
>> ...
>>
>> class BarFoo(Foo):
>> __mapper_args__ = {'polymorphic_identity': 1}
>> bar_id = Column(Integer)
>> # relations
>> bar = relation('Bar')
>>
>> class BazFoo(Foo):
>> __mapper_args__ = {'polymorphic_identity': 2}
>> baz_id = Column(Integer)
>> # relations
>> baz = relation('Baz')
>>
>> ## assume existence of Bar and Baz objects
>>
>> Is there a way to say, query all Foo objects while eager-loading the
>> bar/baz relations?
>>
>> - Jae
>>
>>
>> >>
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---