summaryrefslogtreecommitdiff
path: root/test/orm/query.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-03-29 00:00:49 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-03-29 00:00:49 +0000
commitc4955c05a3ab40d53c83982da612e746c662640d (patch)
treec979c566711917679c9fa5d31b6dbcdb1c76eb34 /test/orm/query.py
parent30020880d90ee2f983b8e6bfb1624349209dd8b0 (diff)
downloadsqlalchemy-c4955c05a3ab40d53c83982da612e746c662640d.tar.gz
- merged with_polymorphic branch, which was merged with query_columns branch
- removes everything to do with select_table, which remains as a keyword argument synonymous with with_polymorphic=('*', select_table). - all "polymorphic" selectables find their way to Query by way of _set_select_from() now, so that all joins/aliasing/eager loads/etc. is handled consistently. Mapper has methods for producing polymorphic selectables so that Query and eagerloaders alike can get to them. - row aliasing simplified, so that they don't need to nest. they only need the source selectable and adapt to whatever incoming columns they get. - Query is more egalitarian about mappers/columns now. Still has a strong sense of "entity zero", but also introduces new unpublished/experimental _values() method which sets up a columns-only query. - Query.order_by() and Query.group_by() take *args now (also still take a list, will likely deprecate in 0.5). May want to do this for select() as well. - the existing "check for False discriminiator" "fix" was not working completely, added coverage - orphan detection was broken when the target object was a subclass of the mapper with the orphaned relation, fixed that too.
Diffstat (limited to 'test/orm/query.py')
-rw-r--r--test/orm/query.py43
1 files changed, 36 insertions, 7 deletions
diff --git a/test/orm/query.py b/test/orm/query.py
index e2031863b..a4dbb938d 100644
--- a/test/orm/query.py
+++ b/test/orm/query.py
@@ -64,6 +64,7 @@ class GetTest(QueryTest):
"""test that get()/load() does not use preexisting filter/etc. criterion"""
s = create_session()
+
try:
s.query(User).join('addresses').filter(Address.user_id==8).get(7)
assert False
@@ -835,7 +836,7 @@ class InstancesTest(QueryTest):
def decorate(row):
d = {}
- for c in addresses.columns:
+ for c in addresses.c:
d[c] = row[adalias.corresponding_column(c)]
return d
@@ -865,7 +866,40 @@ class InstancesTest(QueryTest):
self.assert_sql_count(testing.db, go, 1)
sess.clear()
+ def test_columns(self):
+ sess = create_session()
+ sel = users.select(User.id.in_([7, 8])).alias()
+ q = sess.query(User)
+ q2 = q.select_from(sel)._values(User.name)
+ self.assertEquals(q2.all(), [(u'jack',), (u'ed',)])
+
+ q = sess.query(User)
+ q2 = q._values(User.name, User.name + " " + cast(User.id, String)).order_by(User.id)
+ self.assertEquals(q2.all(), [(u'jack', u'jack 7'), (u'ed', u'ed 8'), (u'fred', u'fred 9'), (u'chuck', u'chuck 10')])
+
+ q2 = q._values(User.name.like('%j%'), func.count(User.name.like('%j%'))).group_by([User.name.like('%j%')]).order_by(desc(User.name.like('%j%')))
+ self.assertEquals(q2.all(), [(True, 1), (False, 3)])
+
+ q2 = q.join('addresses').filter(User.name.like('%e%')).order_by(User.id, Address.id)._values(User.name, Address.email_address)
+ self.assertEquals(q2.all(), [(u'ed', u'ed@wood.com'), (u'ed', u'ed@bettyboop.com'), (u'ed', u'ed@lala.com'), (u'fred', u'fred@fred.com')])
+
+ q2 = q.join('addresses').filter(User.name.like('%e%'))._values(User.name, Address.email_address).order_by(desc(Address.email_address))[1:3]
+ self.assertEquals(q2.all(), [(u'ed', u'ed@wood.com'), (u'ed', u'ed@lala.com')])
+
+ q2 = q.join('addresses', aliased=True).filter(User.name.like('%e%'))._values(User.name, Address.email_address)
+ self.assertEquals(q2.all(), [(u'ed', u'ed@wood.com'), (u'ed', u'ed@bettyboop.com'), (u'ed', u'ed@lala.com'), (u'fred', u'fred@fred.com')])
+
+ q2 = q._values(func.count(User.name))
+ assert q2.one() == (4,)
+
+ u2 = users.alias()
+ q2 = q.select_from(sel).filter(u2.c.id>1)._values(users.c.name, sel.c.name, u2.c.name).order_by([users.c.id, sel.c.id, u2.c.id])
+ self.assertEquals(q2.all(), [(u'jack', u'jack', u'jack'), (u'jack', u'jack', u'ed'), (u'jack', u'jack', u'fred'), (u'jack', u'jack', u'chuck'), (u'ed', u'ed', u'jack'), (u'ed', u'ed', u'ed'), (u'ed', u'ed', u'fred'), (u'ed', u'ed', u'chuck')])
+
+ q2 = q.select_from(sel).filter(users.c.id>1)._values(users.c.name, sel.c.name, User.name)
+ self.assertEquals(q2.all(), [(u'jack', u'jack', u'jack'), (u'ed', u'ed', u'ed')])
+
def test_multi_mappers(self):
test_session = create_session()
@@ -946,12 +980,7 @@ class InstancesTest(QueryTest):
assert sess.query(User).add_column(add_col).all() == expected
sess.clear()
- try:
- sess.query(User).add_column(object()).all()
- assert False
- except exceptions.InvalidRequestError, e:
- assert "Invalid column expression" in str(e)
-
+ self.assertRaises(exceptions.InvalidRequestError, sess.query(User).add_column, object())
def test_multi_columns_2(self):
"""test aliased/nonalised joins with the usage of add_column()"""