From: Mike Bayer Date: Wed, 5 Nov 2008 21:16:09 +0000 (+0000) Subject: - Fixed bug in composite types which prevented a primary-key X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0638bbc803debc402f68c33171b18598ff24bca9;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Fixed bug in composite types which prevented a primary-key composite type from being mutated [ticket:1213]. --- diff --git a/CHANGES b/CHANGES index 6081f9171e..148b8e1278 100644 --- a/CHANGES +++ b/CHANGES @@ -15,6 +15,9 @@ CHANGES reentrant mapper compile() calls, something that occurs when using declarative constructs inside of ForeignKey objects. Ported from 0.5. + + - Fixed bug in composite types which prevented a primary-key + composite type from being mutated [ticket:1213]. 0.4.8 ===== diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index c35dbd5a35..56fa5a80db 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -1110,10 +1110,10 @@ class Mapper(object): params[col.key] = prop.get_col_value(col, added[0]) if col in pks: if deleted: - params[col._label] = deleted[0] + params[col._label] = prop.get_col_value(col, deleted[0]) else: # row switch logic can reach us here - params[col._label] = added[0] + params[col._label] = prop.get_col_value(col, added[0]) hasdata = True elif col in pks: params[col._label] = mapper._get_state_attr_by_column(state, col) diff --git a/test/orm/mapper.py b/test/orm/mapper.py index bd70535a65..3070db54dd 100644 --- a/test/orm/mapper.py +++ b/test/orm/mapper.py @@ -1293,6 +1293,11 @@ class CompositeTypesTest(ORMTest): g2 = sess.query(Graph).get(Version(1, 1)) assert g.version == g2.version + # test pk mutation + g2.version = Version(2, 1) + sess.flush() + g3 = sess.query(Graph).get(Version(2, 1)) + assert g2.version == g3.version class NoLoadTest(MapperSuperTest):