this ones big, i can handle it. the attached patch makes your case
work, but the problem represented here still makes itself apparent in
other ways and I havent strength tested this patch. you might want
to see if this patch works in all of your test cases.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---
Index: lib/sqlalchemy/orm/query.py
===================================================================
--- lib/sqlalchemy/orm/query.py (revision 5405)
+++ lib/sqlalchemy/orm/query.py (working copy)
@@ -1647,7 +1647,8 @@
self.entities = [entity]
self.entity_zero = entity
-
+ self._has_polymorphic_selectable = False
+
def setup_entity(self, entity, mapper, adapter, from_obj,
is_aliased_class, with_polymorphic):
self.mapper = mapper
self.extension = self.mapper.extension
@@ -1668,6 +1669,7 @@
mappers, from_obj = self.mapper._with_polymorphic_args(cls_or_mappers,
selectable)
self._with_polymorphic = mappers
+ self._has_polymorphic_selectable = bool(from_obj)
# TODO: do the wrapped thing here too so that with_polymorphic() can be
# applied to aliases
@@ -1748,7 +1750,7 @@
if adapter:
context.order_by =
adapter.adapt_list(util.to_list(context.order_by))
- for value in
self.mapper._iterate_polymorphic_properties(self._with_polymorphic):
+ for value in
self.mapper._iterate_polymorphic_properties(self._with_polymorphic,
self._has_polymorphic_selectable):
if query._only_load_props and value.key not in
query._only_load_props:
continue
value.setup(
Index: lib/sqlalchemy/orm/mapper.py
===================================================================
--- lib/sqlalchemy/orm/mapper.py (revision 5406)
+++ lib/sqlalchemy/orm/mapper.py (working copy)
@@ -862,18 +862,20 @@
@property
def _default_polymorphic_properties(self):
- return util.unique_list(
+ return iter(util.unique_list(
chain(*[list(mapper.iterate_properties) for mapper in [self] +
self._with_polymorphic_mappers])
- )
-
- def _iterate_polymorphic_properties(self, mappers=None):
- if mappers is None:
- return iter(self._default_polymorphic_properties)
+ ))
+
+ def _iterate_polymorphic_properties(self, mappers=None,
has_selectable=False):
+ if has_selectable or (self.with_polymorphic and
self.with_polymorphic[1]):
+ return self.iterate_properties
+ elif mappers is None:
+ return self._default_polymorphic_properties
else:
return iter(util.unique_list(
chain(*[list(mapper.iterate_properties) for mapper in [self] +
mappers])
))
-
+
@property
def properties(self):
raise NotImplementedError("Public collection of MapperProperty objects
is "
On Dec 3, 2008, at 9:22 AM, Gaetan de Menten wrote:
>
> On Wed, Dec 3, 2008 at 15:03, Michael Bayer
> <[EMAIL PROTECTED]> wrote:
>
>> um yeah, actually this behavior is affecting all multi-level usage of
>> "polymorphic_union". So, while polymorphic_union is quite obviously
>> (since nobody has noticed this pretty glaring issue) on the decline
>> in
>> the 0.5 series, this is quite severe and ill try to have a look at it
>> today.
>
> Do you want a bug report for this?
>
> --
> Gaƫtan de Menten
> http://openhex.org
>
> --~--~---------~--~----~------------~-------~--~----~
> 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
> -~----------~----~----~----~------~----~------~--~---
>