diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-03-14 17:56:57 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2016-03-14 17:56:57 -0400 |
| commit | af92f6763d72fa853f2ac0968e077c24e88b0c93 (patch) | |
| tree | 979bfa495212ce0b0720c86866cc451d6de06f44 /test | |
| parent | 6e5e64e27ef2c6a86c9aebdcefdf2cd726f1476a (diff) | |
| download | sqlalchemy-af92f6763d72fa853f2ac0968e077c24e88b0c93.tar.gz | |
- Fixed bug where a newly inserted instance that is rolled back
would still potentially cause persistence conflicts on the next
transaction, because the instance would not be checked that it
was expired. This fix will resolve a large class of cases that
erronously cause the "New instance with identity X conflicts with
persistent instance Y" error.
fixes #3677
Diffstat (limited to 'test')
| -rw-r--r-- | test/orm/test_transaction.py | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/test/orm/test_transaction.py b/test/orm/test_transaction.py index c7b3315d9..c1662c9d1 100644 --- a/test/orm/test_transaction.py +++ b/test/orm/test_transaction.py @@ -9,7 +9,7 @@ from sqlalchemy.orm import ( relationship, attributes) from sqlalchemy.testing.util import gc_collect from test.orm._fixtures import FixtureTest - +from sqlalchemy import inspect class SessionTransactionTest(FixtureTest): run_inserts = None @@ -1518,6 +1518,30 @@ class NaturalPKRollbackTest(fixtures.MappedTest): session.rollback() + def test_reloaded_deleted_checked_for_expiry(self): + """test issue #3677""" + users, User = self.tables.users, self.classes.User + + mapper(User, users) + + u1 = User(name='u1') + + s = Session() + s.add(u1) + s.flush() + del u1 + gc_collect() + + u1 = s.query(User).first() # noqa + + s.rollback() + + u2 = User(name='u1') + s.add(u2) + s.commit() + + assert inspect(u2).persistent + def test_key_replaced_by_update(self): users, User = self.tables.users, self.classes.User |
