diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-06-05 18:06:59 -0400 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-06-05 18:06:59 -0400 |
commit | 80a9c530696a0b0707c013abd24c02a21f66e79c (patch) | |
tree | c271526d5f591588861b95cbdca95e6ba7397c99 | |
parent | 9a736a4c6e3a21a4d3682a0bd2b547ef0703a027 (diff) | |
download | sqlalchemy-80a9c530696a0b0707c013abd24c02a21f66e79c.tar.gz |
a test for what's breaking, plus a non-working fix for it...
-rw-r--r-- | lib/sqlalchemy/orm/query.py | 3 | ||||
-rw-r--r-- | test/orm/inheritance/test_polymorphic_rel.py | 48 |
2 files changed, 50 insertions, 1 deletions
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 39ed8d8bf..6d8d9d4f5 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 eecfb036b..4330dbf41 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 |