diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-06-06 18:06:02 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2013-06-06 18:06:02 -0400 |
| commit | 28c3325c4e18d01d7e0403229b452c8fbc345b80 (patch) | |
| tree | 67576681ff561bcabeae0330bcf64c214bfe29aa /test/orm/inheritance | |
| parent | 768108186a48a94948a7763d0f5c4dfb3f0ce773 (diff) | |
| download | sqlalchemy-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.py | 64 | ||||
| -rw-r--r-- | test/orm/inheritance/test_relationship.py | 2 |
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( |
