summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/orm/test_mapper.py79
1 files changed, 79 insertions, 0 deletions
diff --git a/test/orm/test_mapper.py b/test/orm/test_mapper.py
index 6845ababb..237371dc7 100644
--- a/test/orm/test_mapper.py
+++ b/test/orm/test_mapper.py
@@ -2717,6 +2717,85 @@ class NoLoadTest(_fixtures.FixtureTest):
self.sql_count_(0, go)
+class RaiseLoadTest(_fixtures.FixtureTest):
+ run_inserts = 'once'
+ run_deletes = None
+
+ def test_o2m_raiseload(self):
+ Address, addresses, users, User = (
+ self.classes.Address,
+ self.tables.addresses,
+ self.tables.users,
+ self.classes.User)
+
+ m = mapper(User, users, properties=dict(
+ addresses=relationship(mapper(Address, addresses), lazy='raise')
+ ))
+ q = create_session().query(m)
+ l = [None]
+
+ def go():
+ x = q.filter(User.id == 7).all()
+ assert_raises_message(
+ sa.exc.InvalidRequestError,
+ "'User.addresses' is not available due to lazy='raise'",
+ lambda: x[0].addresses)
+ l[0] = x
+ print(x)
+ self.assert_sql_count(testing.db, go, 1)
+
+ self.assert_result(
+ l[0], User,
+ {'id': 7},
+ )
+
+ def test_upgrade_o2m_raiseload_lazyload_option(self):
+ Address, addresses, users, User = (
+ self.classes.Address,
+ self.tables.addresses,
+ self.tables.users,
+ self.classes.User)
+
+ m = mapper(User, users, properties=dict(
+ addresses=relationship(mapper(Address, addresses), lazy='raise')
+ ))
+ q = create_session().query(m).options(sa.orm.lazyload('addresses'))
+ l = [None]
+
+ def go():
+ x = q.filter(User.id == 7).all()
+ x[0].addresses
+ l[0] = x
+ self.sql_count_(2, go)
+
+ self.assert_result(
+ l[0], User,
+ {'id': 7, 'addresses': (Address, [{'id': 1}])},
+ )
+
+ def test_m2o_raiseload_option(self):
+ Address, addresses, users, User = (
+ self.classes.Address,
+ self.tables.addresses,
+ self.tables.users,
+ self.classes.User)
+ mapper(Address, addresses, properties={
+ 'user': relationship(User)
+ })
+ mapper(User, users)
+ s = Session()
+ a1 = s.query(Address).filter_by(id=1).options(
+ sa.orm.raiseload('user')).first()
+
+ def go():
+ assert_raises_message(
+ sa.exc.InvalidRequestError,
+ "'Address.user' is not available due to lazy='raise'",
+ lambda: a1.user)
+
+ self.sql_count_(0, go)
+
+
class RequirementsTest(fixtures.MappedTest):
"""Tests the contract for user classes."""