From: Mike Bayer Date: Wed, 5 Nov 2008 21:15:19 +0000 (+0000) Subject: - Fixed bug in composite types which prevented a primary-key X-Git-Tag: rel_0_5rc3~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7576315169ccb8606f148d040c3602e1e21a04fd;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 d43ec9c177..a212142986 100644 --- a/CHANGES +++ b/CHANGES @@ -48,6 +48,9 @@ CHANGES - Repaired support for "passive-deletes" on a many-to-one relation() with "delete" cascade. [ticket:1183] + - Fixed bug in composite types which prevented a primary-key + composite type from being mutated [ticket:1213]. + - Added more granularity to internal attribute access, such that cascade and flush operations will not initialize unloaded attributes and collections, leaving them intact for a diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index c2bb734810..42597cda1b 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -1289,10 +1289,10 @@ class Mapper(object): params[col.key] = prop.get_col_value(col, history.added[0]) if col in pks: if history.deleted: - params[col._label] = history.deleted[0] + params[col._label] = prop.get_col_value(col, history.deleted[0]) else: # row switch logic can reach us here - params[col._label] = history.added[0] + params[col._label] = prop.get_col_value(col, history.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 8978059de4..7c6984919c 100644 --- a/test/orm/mapper.py +++ b/test/orm/mapper.py @@ -1637,7 +1637,14 @@ class CompositeTypesTest(_base.MappedTest): g2 = sess.query(Graph).get(Version(1, 1)) eq_(g.version, g2.version) + + # test pk mutation + g2.version = Version(2, 1) + sess.flush() + g3 = sess.query(Graph).get(Version(2, 1)) + eq_(g2.version, g3.version) + # test pk with one column NULL # TODO: can't seem to get NULL in for a PK value # in either mysql or postgres, autoincrement=False etc. # notwithstanding