diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-10-19 16:53:45 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2014-10-19 16:53:45 -0400 |
| commit | 38bc8098419d7b1d4ddb975d85268515f52a3969 (patch) | |
| tree | d63141b12c2b35e41c2ffac5d2e9b710fd4b2b15 /test/orm | |
| parent | dddb74bbd3892f71c594368af3762808aaf3ed51 (diff) | |
| download | sqlalchemy-38bc8098419d7b1d4ddb975d85268515f52a3969.tar.gz | |
- Fixed bug where :meth:`.Session.expunge` would not fully detach
the given object if the object had been subject to a delete
operation that was flushed, but not committed. This would also
affect related operations like :func:`.make_transient`.
fixes #3139
Diffstat (limited to 'test/orm')
| -rw-r--r-- | test/orm/test_session.py | 50 |
1 files changed, 49 insertions, 1 deletions
diff --git a/test/orm/test_session.py b/test/orm/test_session.py index b0b00d5ed..96728612d 100644 --- a/test/orm/test_session.py +++ b/test/orm/test_session.py @@ -204,6 +204,7 @@ class SessionUtilTest(_fixtures.FixtureTest): sess.flush() make_transient(u1) sess.rollback() + assert attributes.instance_state(u1).transient def test_make_transient_to_detached(self): users, User = self.tables.users, self.classes.User @@ -661,7 +662,7 @@ class SessionStateTest(_fixtures.FixtureTest): go() eq_(canary, [False]) - def test_deleted_expunged(self): + def test_deleted_auto_expunged(self): users, User = self.tables.users, self.classes.User mapper(User, users) @@ -682,6 +683,53 @@ class SessionStateTest(_fixtures.FixtureTest): assert object_session(u1) is None + def test_explicit_expunge_pending(self): + users, User = self.tables.users, self.classes.User + + mapper(User, users) + sess = Session() + u1 = User(name='x') + sess.add(u1) + + sess.flush() + sess.expunge(u1) + + assert u1 not in sess + assert object_session(u1) is None + + sess.rollback() + + assert u1 not in sess + assert object_session(u1) is None + + def test_explicit_expunge_deleted(self): + users, User = self.tables.users, self.classes.User + + mapper(User, users) + sess = Session() + sess.add(User(name='x')) + sess.commit() + + u1 = sess.query(User).first() + sess.delete(u1) + + sess.flush() + + assert was_deleted(u1) + assert u1 not in sess + assert object_session(u1) is sess + + sess.expunge(u1) + assert was_deleted(u1) + assert u1 not in sess + assert object_session(u1) is None + + sess.rollback() + assert was_deleted(u1) + assert u1 not in sess + assert object_session(u1) is None + + class SessionStateWFixtureTest(_fixtures.FixtureTest): __backend__ = True |
