]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- Fixed bug whereby list-based attributes, like pickletype
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 15 Jun 2009 22:23:08 +0000 (22:23 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 15 Jun 2009 22:23:08 +0000 (22:23 +0000)
and PGArray, failed to be merged() properly.

CHANGES
lib/sqlalchemy/orm/state.py
test/orm/test_merge.py

diff --git a/CHANGES b/CHANGES
index 638c5e356eecf10c8aab1652720b0ec026a77fc1..e031ade3cd9205f9dfd94d5f522eb68f8e7a0fec 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -28,6 +28,9 @@ CHANGES
       so applications which relied on this erroneous result need to be 
       adjusted. [ticket:1431]
 
+    - Fixed bug whereby list-based attributes, like pickletype
+      and PGArray, failed to be merged() properly.
+      
     - The "foreign_keys" argument of relation() will now propagate
       automatically to the backref in the same way that
       primaryjoin and secondaryjoin do.   For the extremely 
index 92500758ffe713d3a25d0133a03d191d812d6b29..6894b8f85f13b9805a3a5056140c1081bc06dab1 100644 (file)
@@ -111,8 +111,6 @@ class InstanceState(object):
             return None
         elif hasattr(impl, 'get_collection'):
             return impl.get_collection(self, dict_, x, passive=passive)
-        elif isinstance(x, list):
-            return x
         else:
             return [x]
 
index 70097cbee26a0aec2bff841f06a4b8b24c2e010c..f4e3872b06a83d2a6f3144640487998de17b2b8e 100644 (file)
@@ -1,14 +1,16 @@
 from sqlalchemy.test.testing import assert_raises, assert_raises_message
 import sqlalchemy as sa
+from sqlalchemy import Table, Column, Integer, PickleType
+import operator
 from sqlalchemy.test import testing
 from sqlalchemy.util import OrderedSet
-from sqlalchemy.orm import mapper, relation, create_session, PropComparator, synonym, comparable_property
+from sqlalchemy.orm import mapper, relation, create_session, PropComparator, synonym, comparable_property, sessionmaker
 from sqlalchemy.test.testing import eq_, ne_
 from test.orm import _base, _fixtures
 
 
 class MergeTest(_fixtures.FixtureTest):
-    """Session..merge() functionality"""
+    """Session.merge() functionality"""
 
     run_inserts = None
 
@@ -731,5 +733,33 @@ class MergeTest(_fixtures.FixtureTest):
         sess.commit()
 
 
-
+class MutableMergeTest(_base.MappedTest):
+    @classmethod
+    def define_tables(cls, metadata):
+        Table("data", metadata, 
+            Column('id', Integer, primary_key=True),
+            Column('data', PickleType(comparator=operator.eq))
+        )
+    
+    @classmethod
+    def setup_classes(cls):
+        class Data(_base.ComparableEntity):
+            pass
+    
+    @testing.resolve_artifact_names
+    def test_list(self):
+        mapper(Data, data)
+        sess = sessionmaker()()
+        d = Data(data=["this", "is", "a", "list"])
+        
+        sess.add(d)
+        sess.commit()
+        
+        d2 = Data(id=d.id, data=["this", "is", "another", "list"])
+        d3 = sess.merge(d2)
+        eq_(d3.data, ["this", "is", "another", "list"])
+        
+        
+        
+