if getattr(self, '_of_type', None):
target_mapper = self._of_type
to_selectable = target_mapper._with_polymorphic_selectable
+ if self.prop._is_self_referential():
+ to_selectable = to_selectable.alias()
else:
to_selectable = None
-
+
pj, sj, source, dest, secondary, target_adapter = self.prop._create_joins(dest_polymorphic=True, dest_selectable=to_selectable)
for k in kwargs:
aliased = True
else:
dest_selectable = self.mapper.mapped_table
-
+
if self._is_self_referential() and source_selectable is None:
dest_selectable = dest_selectable.alias()
aliased = True
sess.clear()
self.assertEquals(sess.query(Engineer).filter(Engineer.reports_to.has(Person.name=='dogbert')).first(), Engineer(name='dilbert'))
+
+ def test_oftype_aliases_in_exists(self):
+ e1 = Engineer(name='dilbert', primary_language='java')
+ e2 = Engineer(name='wally', primary_language='c++', reports_to=e1)
+ sess = create_session()
+ sess.add_all([e1, e2])
+ sess.flush()
+
+ self.assertEquals(sess.query(Engineer).filter(Engineer.reports_to.of_type(Engineer).has(Engineer.name=='dilbert')).first(), e2)
def test_join(self):
p1 = Person(name='dogbert')