From: Mike Bayer Date: Wed, 5 Jun 2013 22:06:59 +0000 (-0400) Subject: a test for what's breaking, plus a non-working fix for it... X-Git-Tag: rel_0_9_0b1~291^2~2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=80a9c530696a0b0707c013abd24c02a21f66e79c;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git a test for what's breaking, plus a non-working fix for it... --- diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 39ed8d8bfe..6d8d9d4f5e 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -2671,6 +2671,9 @@ class Query(object): # "load from explicit FROMs" mode, # i.e. when select_from() or join() is used context.froms = list(context.from_clause) + # this would fix... + # context.froms += tuple(context.from_clause) + else: # "load from discrete FROMs" mode, # i.e. when each _MappedEntity has its own FROM diff --git a/test/orm/inheritance/test_polymorphic_rel.py b/test/orm/inheritance/test_polymorphic_rel.py index eecfb036b8..4330dbf41b 100644 --- a/test/orm/inheritance/test_polymorphic_rel.py +++ b/test/orm/inheritance/test_polymorphic_rel.py @@ -1283,7 +1283,53 @@ class PolymorphicTest(_PolymorphicTestBase, _Polymorphic): class PolymorphicPolymorphicTest(_PolymorphicTestBase, _PolymorphicPolymorphic): - pass + __dialect__ = 'default' + + def test_aliased_not_polluted_by_join(self): + sess = create_session() + palias = aliased(Person) + self.assert_compile( + sess.query(palias, Company.name) + .join(Person, Company.employees) + .filter(palias.name == 'dilbert'), + "SELECT people_1.person_id AS people_1_person_id, " + "people_1.company_id AS people_1_company_id, " + "people_1.name AS people_1_name, people_1.type AS people_1_type, " + "engineers_1.person_id AS engineers_1_person_id, " + "engineers_1.status AS engineers_1_status, " + "engineers_1.engineer_name AS engineers_1_engineer_name, " + "engineers_1.primary_language AS engineers_1_primary_language, " + "managers_1.person_id AS managers_1_person_id, " + "managers_1.status AS managers_1_status, " + "managers_1.manager_name AS managers_1_manager_name, " + "boss_1.boss_id AS boss_1_boss_id, " + "boss_1.golf_swing AS boss_1_golf_swing, " + "companies.name AS companies_name " + "FROM people AS people_1 " + "LEFT OUTER JOIN engineers AS engineers_1 " + "ON people_1.person_id = engineers_1.person_id " + "LEFT OUTER JOIN managers AS managers_1 " + "ON people_1.person_id = managers_1.person_id " + "LEFT OUTER JOIN boss AS boss_1 " + "ON managers_1.person_id = boss_1.boss_id, " + "companies JOIN (people LEFT OUTER JOIN engineers " + "ON people.person_id = engineers.person_id " + "LEFT OUTER JOIN managers ON people.person_id = managers.person_id " + "LEFT OUTER JOIN boss ON managers.person_id = boss.boss_id) " + "ON companies.company_id = people.company_id " + "WHERE people_1.name = :name_1 ORDER BY people_1.person_id" + ) + + def test_mixed_entities_compiled_four(self): + sess = create_session() + palias = aliased(Person) + self.assert_compile( + sess.query(palias, Company.name, Person) + .join(Company.employees) + .filter(Company.name == 'Elbonia, Inc.') + .filter(palias.name == 'dilbert'), + "" + ) class PolymorphicUnionsTest(_PolymorphicTestBase, _PolymorphicUnions): pass