From: Mike Bayer Date: Wed, 3 Oct 2012 15:11:34 +0000 (-0400) Subject: - add one more #2583 test to cover the "multiple PK switch" use case X-Git-Tag: rel_0_7_10~34 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ee9518f8ae2132fab8782bf0b51f5560393a92ed;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - add one more #2583 test to cover the "multiple PK switch" use case --- diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index 1651648acd..071f0a85d9 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -1331,7 +1331,7 @@ class Session(object): # map (see test/orm/test_naturalpks.py ReversePKsTest) self.identity_map.discard(state) if state in self.transaction._key_switches: - orig_key = self.transaction._key_switches[0] + orig_key = self.transaction._key_switches[state][0] else: orig_key = state.key self.transaction._key_switches[state] = (orig_key, instance_key) diff --git a/test/orm/test_transaction.py b/test/orm/test_transaction.py index 12a995805b..7eb91485d8 100644 --- a/test/orm/test_transaction.py +++ b/test/orm/test_transaction.py @@ -1154,6 +1154,39 @@ class NaturalPKRollbackTest(fixtures.MappedTest): assert s.identity_map[(User, ('u1',))] is u1 assert s.identity_map[(User, ('u2',))] is u2 + def test_multiple_key_replaced_by_update(self): + users, User = self.tables.users, self.classes.User + + mapper(User, users) + + u1 = User(name='u1') + u2 = User(name='u2') + u3 = User(name='u3') + + s = Session() + s.add_all([u1, u2, u3]) + s.commit() + + s.delete(u1) + s.delete(u2) + s.flush() + + u3.name = 'u1' + s.flush() + + u3.name = 'u2' + s.flush() + + s.rollback() + + assert u1 in s + assert u2 in s + assert u3 in s + + assert s.identity_map[(User, ('u1',))] is u1 + assert s.identity_map[(User, ('u2',))] is u2 + assert s.identity_map[(User, ('u3',))] is u3 + def test_key_replaced_by_oob_insert(self): users, User = self.tables.users, self.classes.User