summaryrefslogtreecommitdiff
path: root/test/orm/inheritance
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-06-06 18:06:02 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-06-06 18:06:02 -0400
commit28c3325c4e18d01d7e0403229b452c8fbc345b80 (patch)
tree67576681ff561bcabeae0330bcf64c214bfe29aa /test/orm/inheritance
parent768108186a48a94948a7763d0f5c4dfb3f0ce773 (diff)
downloadsqlalchemy-28c3325c4e18d01d7e0403229b452c8fbc345b80.tar.gz
dial back the default "flatness" a bit, it will be there for joinedload and query.join(), but if
you're dealing with aliased() or with_polymorphic() you need to say "flat=True". Just the one flag though, "flat" implies "aliased".
Diffstat (limited to 'test/orm/inheritance')
-rw-r--r--test/orm/inheritance/test_polymorphic_rel.py64
-rw-r--r--test/orm/inheritance/test_relationship.py2
2 files changed, 55 insertions, 11 deletions
diff --git a/test/orm/inheritance/test_polymorphic_rel.py b/test/orm/inheritance/test_polymorphic_rel.py
index 4330dbf41..be3731fad 100644
--- a/test/orm/inheritance/test_polymorphic_rel.py
+++ b/test/orm/inheritance/test_polymorphic_rel.py
@@ -1286,12 +1286,66 @@ class PolymorphicPolymorphicTest(_PolymorphicTestBase, _PolymorphicPolymorphic):
__dialect__ = 'default'
def test_aliased_not_polluted_by_join(self):
+ # aliased(polymorphic) will normally do the old-school
+ # "(SELECT * FROM a JOIN b ...) AS anon_1" thing.
+ # this is the safest
sess = create_session()
palias = aliased(Person)
self.assert_compile(
sess.query(palias, Company.name)
.join(Person, Company.employees)
.filter(palias.name == 'dilbert'),
+ "SELECT anon_1.people_person_id AS anon_1_people_person_id, "
+ "anon_1.people_company_id AS anon_1_people_company_id, "
+ "anon_1.people_name AS anon_1_people_name, "
+ "anon_1.people_type AS anon_1_people_type, "
+ "anon_1.engineers_person_id AS anon_1_engineers_person_id, "
+ "anon_1.engineers_status AS anon_1_engineers_status, "
+ "anon_1.engineers_engineer_name AS anon_1_engineers_engineer_name, "
+ "anon_1.engineers_primary_language AS "
+ "anon_1_engineers_primary_language, "
+ "anon_1.managers_person_id AS anon_1_managers_person_id, "
+ "anon_1.managers_status AS anon_1_managers_status, "
+ "anon_1.managers_manager_name AS anon_1_managers_manager_name, "
+ "anon_1.boss_boss_id AS anon_1_boss_boss_id, "
+ "anon_1.boss_golf_swing AS anon_1_boss_golf_swing, "
+ "companies.name AS companies_name "
+ "FROM (SELECT people.person_id AS people_person_id, "
+ "people.company_id AS people_company_id, "
+ "people.name AS people_name, people.type AS people_type, "
+ "engineers.person_id AS engineers_person_id, "
+ "engineers.status AS engineers_status, "
+ "engineers.engineer_name AS engineers_engineer_name, "
+ "engineers.primary_language AS engineers_primary_language, "
+ "managers.person_id AS managers_person_id, "
+ "managers.status AS managers_status, "
+ "managers.manager_name AS managers_manager_name, "
+ "boss.boss_id AS boss_boss_id, "
+ "boss.golf_swing AS boss_golf_swing "
+ "FROM 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) AS anon_1, "
+ "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 anon_1.people_name = :people_name_1 "
+ "ORDER BY anon_1.people_person_id"
+ )
+
+ def test_flat_aliased_w_select_from(self):
+ sess = create_session()
+ palias = aliased(Person, flat=True)
+ self.assert_compile(
+ sess.query(palias, Company.name)
+ .select_from(palias)
+ .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, "
@@ -1320,16 +1374,6 @@ class PolymorphicPolymorphicTest(_PolymorphicTestBase, _PolymorphicPolymorphic):
"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
diff --git a/test/orm/inheritance/test_relationship.py b/test/orm/inheritance/test_relationship.py
index 3f1eb849f..f30a37941 100644
--- a/test/orm/inheritance/test_relationship.py
+++ b/test/orm/inheritance/test_relationship.py
@@ -1234,7 +1234,7 @@ class SubClassToSubClassMultiTest(AssertsCompiledSQL, fixtures.MappedTest):
def test_two(self):
Parent, Base1, Base2, Sub1, Sub2, EP1, EP2 = self._classes()
- s2a = aliased(Sub2)
+ s2a = aliased(Sub2, flat=True)
s = Session()
self.assert_compile(