summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-06-05 18:06:59 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-06-05 18:06:59 -0400
commit80a9c530696a0b0707c013abd24c02a21f66e79c (patch)
treec271526d5f591588861b95cbdca95e6ba7397c99
parent9a736a4c6e3a21a4d3682a0bd2b547ef0703a027 (diff)
downloadsqlalchemy-80a9c530696a0b0707c013abd24c02a21f66e79c.tar.gz
a test for what's breaking, plus a non-working fix for it...
-rw-r--r--lib/sqlalchemy/orm/query.py3
-rw-r--r--test/orm/inheritance/test_polymorphic_rel.py48
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