summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-11-05 21:16:09 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-11-05 21:16:09 +0000
commit0638bbc803debc402f68c33171b18598ff24bca9 (patch)
tree3f69764017299cbd491b0c8cd4836d263f0edb12
parent068836ab42f77ac237699d89bc6d3d545a29860a (diff)
downloadsqlalchemy-0638bbc803debc402f68c33171b18598ff24bca9.tar.gz
- Fixed bug in composite types which prevented a primary-key
composite type from being mutated [ticket:1213].
-rw-r--r--CHANGES3
-rw-r--r--lib/sqlalchemy/orm/mapper.py4
-rw-r--r--test/orm/mapper.py5
3 files changed, 10 insertions, 2 deletions
diff --git a/CHANGES b/CHANGES
index 6081f9171..148b8e127 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 c35dbd5a3..56fa5a80d 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 bd70535a6..3070db54d 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):