diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2009-06-05 21:23:11 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2009-06-05 21:23:11 +0000 |
| commit | 698a3c1ac665e7cd2ef8d5ad3ebf51b7fe6661f4 (patch) | |
| tree | f7c4f623bcb1f8df537b08ada140d6ba44edec64 /test | |
| parent | 31b95e6cdce83e14cd1c462c2b7d16a0f8652d19 (diff) | |
| download | sqlalchemy-698a3c1ac665e7cd2ef8d5ad3ebf51b7fe6661f4.tar.gz | |
- Fixed Query being able to join() from individual columns of
a joined-table subclass entity, i.e.
query(SubClass.foo, SubcClass.bar).join(<anything>).
In most cases, an error "Could not find a FROM clause to join
from" would be raised. In a few others, the result would be
returned in terms of the base class rather than the subclass -
so applications which relied on this erroneous result need to be
adjusted. [ticket:1431]
Diffstat (limited to 'test')
| -rw-r--r-- | test/orm/inheritance/query.py | 50 | ||||
| -rw-r--r-- | test/orm/query.py | 10 |
2 files changed, 59 insertions, 1 deletions
diff --git a/test/orm/inheritance/query.py b/test/orm/inheritance/query.py index 011576b04..58d205455 100644 --- a/test/orm/inheritance/query.py +++ b/test/orm/inheritance/query.py @@ -325,7 +325,55 @@ def make_test(select_type): c2 ) - + def test_join_from_columns_or_subclass(self): + sess = create_session() + + self.assertEquals( + sess.query(Manager.name).order_by(Manager.name).all(), + [(u'dogbert',), (u'pointy haired boss',)] + ) + + self.assertEquals( + sess.query(Manager.name).join((Paperwork, Manager.paperwork)).order_by(Manager.name).all(), + [(u'dogbert',), (u'dogbert',), (u'pointy haired boss',)] + ) + + self.assertEquals( + sess.query(Person.name).join((Paperwork, Person.paperwork)).order_by(Person.name).all(), + [(u'dilbert',), (u'dilbert',), (u'dogbert',), (u'dogbert',), (u'pointy haired boss',), (u'vlad',), (u'wally',), (u'wally',)] + ) + + self.assertEquals( + sess.query(Person.name).join((paperwork, Manager.person_id==paperwork.c.person_id)).order_by(Person.name).all(), + [(u'dilbert',), (u'dilbert',), (u'dogbert',), (u'dogbert',), (u'pointy haired boss',), (u'vlad',), (u'wally',), (u'wally',)] + ) + + self.assertEquals( + sess.query(Manager).join((Paperwork, Manager.paperwork)).order_by(Manager.name).all(), + [m1, b1] + ) + + self.assertEquals( + sess.query(Manager.name).join((paperwork, Manager.person_id==paperwork.c.person_id)).order_by(Manager.name).all(), + [(u'dogbert',), (u'dogbert',), (u'pointy haired boss',)] + ) + + self.assertEquals( + sess.query(Manager.person_id).join((paperwork, Manager.person_id==paperwork.c.person_id)).order_by(Manager.name).all(), + [(4,), (4,), (3,)] + ) + + self.assertEquals( + sess.query(Manager.name, Paperwork.description).join((Paperwork, Manager.person_id==Paperwork.person_id)).all(), + [(u'pointy haired boss', u'review #1'), (u'dogbert', u'review #2'), (u'dogbert', u'review #3')] + ) + + malias = aliased(Manager) + self.assertEquals( + sess.query(malias.name).join((paperwork, malias.person_id==paperwork.c.person_id)).all(), + [(u'pointy haired boss',), (u'dogbert',), (u'dogbert',)] + ) + def test_expire(self): """test that individual column refresh doesn't get tripped up by the select_table mapper""" diff --git a/test/orm/query.py b/test/orm/query.py index 29e2ad0b7..33c3e39d7 100644 --- a/test/orm/query.py +++ b/test/orm/query.py @@ -1397,6 +1397,16 @@ class JoinTest(QueryTest): ] ) + def test_plain_table(self): + + sess = create_session() + + self.assertEquals( + sess.query(User.name).join((addresses, User.id==addresses.c.user_id)).order_by(User.id).all(), + [(u'jack',), (u'ed',), (u'ed',), (u'ed',), (u'fred',)] + ) + + class MultiplePathTest(_base.MappedTest): def define_tables(self, metadata): global t1, t2, t1t2_1, t1t2_2 |
