diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-09-22 14:22:16 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-09-22 14:22:16 -0400 |
| commit | eae4de02a9b9bcf070a12607ada4098fb63e26f2 (patch) | |
| tree | cbd9765b89832506b29d06454bcc4ce586d78f3e /test/orm/test_cascade.py | |
| parent | 7b8b23b42700598adf2ee79083aa13dbca5e75e7 (diff) | |
| download | sqlalchemy-eae4de02a9b9bcf070a12607ada4098fb63e26f2.tar.gz | |
- in depth docs about some merge() tips
- docs about backref cascade
- Another new flag on relationship(), cascade_backrefs,
disables the "save-update" cascade when the event was
initiated on the "reverse" side of a bidirectional
relationship. This is a cleaner behavior so that
many-to-ones can be set on a transient object without
it getting sucked into the child object's session,
while still allowing the forward collection to
cascade. We *might* default this to False in 0.7.
Diffstat (limited to 'test/orm/test_cascade.py')
| -rw-r--r-- | test/orm/test_cascade.py | 63 |
1 files changed, 62 insertions, 1 deletions
diff --git a/test/orm/test_cascade.py b/test/orm/test_cascade.py index 1c935df13..75b9e22ec 100644 --- a/test/orm/test_cascade.py +++ b/test/orm/test_cascade.py @@ -4,7 +4,7 @@ from sqlalchemy import Integer, String, ForeignKey, Sequence, \ exc as sa_exc from sqlalchemy.test.schema import Table, Column from sqlalchemy.orm import mapper, relationship, create_session, \ - sessionmaker, class_mapper, backref + sessionmaker, class_mapper, backref, Session from sqlalchemy.orm import attributes, exc as orm_exc from sqlalchemy.test import testing from sqlalchemy.test.testing import eq_ @@ -939,6 +939,67 @@ class M2MCascadeTest(_base.MappedTest): assert b1 not in a1.bs assert b1 in a2.bs +class NoBackrefCascadeTest(_fixtures.FixtureTest): + run_inserts = None + + @classmethod + @testing.resolve_artifact_names + def setup_mappers(cls): + mapper(Address, addresses) + mapper(User, users, properties={ + 'addresses':relationship(Address, backref='user', + cascade_backrefs=False) + }) + + mapper(Dingaling, dingalings, properties={ + 'address' : relationship(Address, backref='dingalings', + cascade_backrefs=False) + }) + + @testing.resolve_artifact_names + def test_o2m(self): + sess = Session() + + u1 = User(name='u1') + sess.add(u1) + + a1 = Address(email_address='a1') + a1.user = u1 + assert a1 not in sess + + sess.commit() + + assert a1 not in sess + + sess.add(a1) + + d1 = Dingaling() + d1.address = a1 + assert d1 in a1.dingalings + assert d1 in sess + + sess.commit() + + @testing.resolve_artifact_names + def test_m2o(self): + sess = Session() + + a1 = Address(email_address='a1') + d1 = Dingaling() + sess.add(d1) + + a1.dingalings.append(d1) + assert a1 not in sess + + a2 = Address(email_address='a2') + sess.add(a2) + + u1 = User(name='u1') + u1.addresses.append(a2) + assert u1 in sess + + sess.commit() + class UnsavedOrphansTest(_base.MappedTest): """Pending entities that are orphans""" |
