diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-12-05 20:43:16 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-12-05 20:43:16 +0000 |
| commit | 9e4052dc8be2451d1c48bb059da150ce41ddc86f (patch) | |
| tree | a8711523c53feafa142073e6689a51b9cfcc5608 /test/orm/lazy_relations.py | |
| parent | 238c2c8dbe3ca5b92d298b39e96f81eb416d1413 (diff) | |
| download | sqlalchemy-9e4052dc8be2451d1c48bb059da150ce41ddc86f.tar.gz | |
- a major behavioral change to collection-based backrefs: they no
longer trigger lazy loads ! "reverse" adds and removes
are queued up and are merged with the collection when it is
actually read from and loaded; but do not trigger a load beforehand.
For users who have noticed this behavior, this should be much more
convenient than using dynamic relations in some cases; for those who
have not, you might notice your apps using a lot fewer queries than
before in some situations. [ticket:871]
Diffstat (limited to 'test/orm/lazy_relations.py')
| -rw-r--r-- | test/orm/lazy_relations.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/test/orm/lazy_relations.py b/test/orm/lazy_relations.py index 97eda3006..487eb7716 100644 --- a/test/orm/lazy_relations.py +++ b/test/orm/lazy_relations.py @@ -272,7 +272,41 @@ class LazyTest(FixtureTest): u1 = sess.query(User).get(7) assert a.user is u1 + + def test_backrefs_dont_lazyload(self): + mapper(User, users, properties={ + 'addresses':relation(Address, backref='user') + }) + mapper(Address, addresses) + sess = create_session() + ad = sess.query(Address).filter_by(id=1).one() + assert ad.user.id == 7 + def go(): + ad.user = None + assert ad.user is None + self.assert_sql_count(testbase.db, go, 0) + + u1 = sess.query(User).filter_by(id=7).one() + def go(): + assert ad not in u1.addresses + self.assert_sql_count(testbase.db, go, 1) + + sess.expire(u1, ['addresses']) + def go(): + assert ad in u1.addresses + self.assert_sql_count(testbase.db, go, 1) + sess.expire(u1, ['addresses']) + ad2 = Address() + def go(): + ad2.user = u1 + assert ad2.user is u1 + self.assert_sql_count(testbase.db, go, 0) + + def go(): + assert ad2 in u1.addresses + self.assert_sql_count(testbase.db, go, 1) + class M2OGetTest(FixtureTest): keep_mappers = False keep_data = True |
