From: Mike Bayer Date: Wed, 3 Oct 2012 15:10:42 +0000 (-0400) Subject: - add one more #2583 test to cover the "multiple PK switch" use case X-Git-Tag: rel_0_8_0b1~85 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2dde984e88e1b30144f35e11dc12824bf3e470aa;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 faa9e5a83c..1df9d45ca7 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -1288,7 +1288,7 @@ class Session(_SessionClassMethods): # 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 49fdd28649..9c19d5bdf3 100644 --- a/test/orm/test_transaction.py +++ b/test/orm/test_transaction.py @@ -1184,6 +1184,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