summaryrefslogtreecommitdiff
path: root/test/orm/test_query.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/orm/test_query.py')
-rw-r--r--test/orm/test_query.py80
1 files changed, 60 insertions, 20 deletions
diff --git a/test/orm/test_query.py b/test/orm/test_query.py
index db7e53a0e..a7818fa57 100644
--- a/test/orm/test_query.py
+++ b/test/orm/test_query.py
@@ -138,15 +138,31 @@ class GetTest(QueryTest):
u2 = s.query(User).get(7)
assert u is not u2
- def test_get_composite_pk(self):
- s = create_session()
+ def test_get_composite_pk_no_result(self):
+ s = Session()
assert s.query(CompositePk).get((100,100)) is None
+
+ def test_get_composite_pk_result(self):
+ s = Session()
one_two = s.query(CompositePk).get((1,2))
assert one_two.i == 1
assert one_two.j == 2
assert one_two.k == 3
+
+ def test_get_too_few_params(self):
+ s = Session()
+ q = s.query(CompositePk)
+ assert_raises(sa_exc.InvalidRequestError, q.get, 7)
+
+ def test_get_too_few_params_tuple(self):
+ s = Session()
q = s.query(CompositePk)
- assert_raises(sa_exc.InvalidRequestError, q.get, 7)
+ assert_raises(sa_exc.InvalidRequestError, q.get, (7,))
+
+ def test_get_too_many_params(self):
+ s = Session()
+ q = s.query(CompositePk)
+ assert_raises(sa_exc.InvalidRequestError, q.get, (7, 10, 100))
def test_get_null_pk(self):
"""test that a mapping which can have None in a
@@ -214,8 +230,9 @@ class GetTest(QueryTest):
@testing.requires.unicode_connections
def test_unicode(self):
- """test that Query.get properly sets up the type for the bind parameter. using unicode would normally fail
- on postgresql, mysql and oracle unless it is converted to an encoded string"""
+ """test that Query.get properly sets up the type for the bind
+ parameter. using unicode would normally fail on postgresql, mysql and
+ oracle unless it is converted to an encoded string"""
metadata = MetaData(engines.utf8_engine())
table = Table('unicode_data', metadata,
@@ -2825,34 +2842,51 @@ class InstancesTest(QueryTest, AssertsCompiledSQL):
def test_from_alias(self):
- query = users.select(users.c.id==7).union(users.select(users.c.id>7)).alias('ulist').outerjoin(addresses).select(use_labels=True,order_by=['ulist.id', addresses.c.id])
+ query = users.select(users.c.id==7).\
+ union(users.select(users.c.id>7)).\
+ alias('ulist').\
+ outerjoin(addresses).\
+ select(use_labels=True,
+ order_by=['ulist.id', addresses.c.id])
sess =create_session()
q = sess.query(User)
def go():
- l = list(q.options(contains_alias('ulist'), contains_eager('addresses')).instances(query.execute()))
+ l = list(q.options(contains_alias('ulist'),
+ contains_eager('addresses')).\
+ instances(query.execute()))
assert self.static.user_address_result == l
self.assert_sql_count(testing.db, go, 1)
sess.expunge_all()
def go():
- l = q.options(contains_alias('ulist'), contains_eager('addresses')).from_statement(query).all()
+ l = q.options(contains_alias('ulist'),
+ contains_eager('addresses')).\
+ from_statement(query).all()
assert self.static.user_address_result == l
self.assert_sql_count(testing.db, go, 1)
# better way. use select_from()
def go():
- l = sess.query(User).select_from(query).options(contains_eager('addresses')).all()
+ l = sess.query(User).select_from(query).\
+ options(contains_eager('addresses')).all()
assert self.static.user_address_result == l
self.assert_sql_count(testing.db, go, 1)
- # same thing, but alias addresses, so that the adapter generated by select_from() is wrapped within
+ # same thing, but alias addresses, so that the adapter
+ # generated by select_from() is wrapped within
# the adapter created by contains_eager()
adalias = addresses.alias()
- query = users.select(users.c.id==7).union(users.select(users.c.id>7)).alias('ulist').outerjoin(adalias).select(use_labels=True,order_by=['ulist.id', adalias.c.id])
+ query = users.select(users.c.id==7).\
+ union(users.select(users.c.id>7)).\
+ alias('ulist').\
+ outerjoin(adalias).\
+ select(use_labels=True,
+ order_by=['ulist.id', adalias.c.id])
def go():
- l = sess.query(User).select_from(query).options(contains_eager('addresses', alias=adalias)).all()
+ l = sess.query(User).select_from(query).\
+ options(contains_eager('addresses', alias=adalias)).all()
assert self.static.user_address_result == l
self.assert_sql_count(testing.db, go, 1)
@@ -2860,13 +2894,19 @@ class InstancesTest(QueryTest, AssertsCompiledSQL):
sess = create_session()
# test that contains_eager suppresses the normal outer join rendering
- q = sess.query(User).outerjoin(User.addresses).options(contains_eager(User.addresses)).order_by(User.id)
- self.assert_compile(q.with_labels().statement,
- "SELECT addresses.id AS addresses_id, addresses.user_id AS addresses_user_id, "\
- "addresses.email_address AS addresses_email_address, users.id AS users_id, "\
- "users.name AS users_name FROM users LEFT OUTER JOIN addresses "\
- "ON users.id = addresses.user_id ORDER BY users.id"
- , dialect=default.DefaultDialect())
+ q = sess.query(User).outerjoin(User.addresses).\
+ options(contains_eager(User.addresses)).\
+ order_by(User.id, addresses.c.id)
+ self.assert_compile(q.with_labels().statement,
+ 'SELECT addresses.id AS addresses_id, '
+ 'addresses.user_id AS addresses_user_id, '
+ 'addresses.email_address AS '
+ 'addresses_email_address, users.id AS '
+ 'users_id, users.name AS users_name FROM '
+ 'users LEFT OUTER JOIN addresses ON '
+ 'users.id = addresses.user_id ORDER BY '
+ 'users.id, addresses.id',
+ dialect=default.DefaultDialect())
def go():
assert self.static.user_address_result == q.all()
@@ -2874,7 +2914,7 @@ class InstancesTest(QueryTest, AssertsCompiledSQL):
sess.expunge_all()
adalias = addresses.alias()
- q = sess.query(User).select_from(users.outerjoin(adalias)).options(contains_eager(User.addresses, alias=adalias))
+ q = sess.query(User).select_from(users.outerjoin(adalias)).options(contains_eager(User.addresses, alias=adalias)).order_by(User.id, adalias.c.id)
def go():
eq_(self.static.user_address_result, q.order_by(User.id).all())
self.assert_sql_count(testing.db, go, 1)