summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2009-06-05 21:23:11 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2009-06-05 21:23:11 +0000
commit698a3c1ac665e7cd2ef8d5ad3ebf51b7fe6661f4 (patch)
treef7c4f623bcb1f8df537b08ada140d6ba44edec64 /test
parent31b95e6cdce83e14cd1c462c2b7d16a0f8652d19 (diff)
downloadsqlalchemy-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.py50
-rw-r--r--test/orm/query.py10
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