diff options
| -rw-r--r-- | CHANGES | 3 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/mapper.py | 4 | ||||
| -rw-r--r-- | test/orm/mapper.py | 7 |
3 files changed, 12 insertions, 2 deletions
@@ -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 c2bb73481..42597cda1 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 8978059de..7c6984919 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 |
