summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2016-03-14 17:56:57 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2016-03-14 17:56:57 -0400
commitaf92f6763d72fa853f2ac0968e077c24e88b0c93 (patch)
tree979bfa495212ce0b0720c86866cc451d6de06f44 /test
parent6e5e64e27ef2c6a86c9aebdcefdf2cd726f1476a (diff)
downloadsqlalchemy-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.py26
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