]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- fixed bug preventing merge() from functioning in
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 3 Jun 2008 14:30:42 +0000 (14:30 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 3 Jun 2008 14:30:42 +0000 (14:30 +0000)
conjunction with a comparable_property()

CHANGES
lib/sqlalchemy/orm/interfaces.py
lib/sqlalchemy/orm/properties.py
test/orm/merge.py

diff --git a/CHANGES b/CHANGES
index 1abb13d832b6acd58b89537442315d9827010da9..3a9e678098dc1989218bf68862894f0d87190a38 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -8,6 +8,9 @@ CHANGES
       will alias() the secondary (association) table so
       that multiple contains() calls will not conflict
       with each other [ticket:1058]
+
+    - fixed bug preventing merge() from functioning in 
+      conjunction with a comparable_property()
       
 - mysql
     - Added 'CALL' to the list of SQL keywords which return
index d61ebe9603f7ab1962c0dc3355b76bb40a5eed32..841c19510b710dad813c8e7c9787b2b5301aa799 100644 (file)
@@ -402,7 +402,7 @@ class MapperProperty(object):
 
         return not self.parent.non_primary
 
-    def merge(self, session, source, dest):
+    def merge(self, session, source, dest, dont_load, _recursive):
         """Merge the attribute represented by this ``MapperProperty``
         from source to destination object"""
 
index db7b3a43f91304c5a96ea2336d145699e1ca78c4..a06de1b79cdcf337d21fb605a275f551d39e3b0f 100644 (file)
@@ -176,7 +176,7 @@ class SynonymProperty(MapperProperty):
             self.descriptor = SynonymProp()
         sessionlib.register_attribute(class_, self.key, uselist=False, proxy_property=self.descriptor, useobject=False, comparator=comparator)
 
-    def merge(self, session, source, dest, _recursive):
+    def merge(self, session, source, dest, dont_load, _recursive):
         pass
 SynonymProperty.logger = logging.class_logger(SynonymProperty)
 
@@ -204,6 +204,9 @@ class ComparableProperty(MapperProperty):
     def create_row_processor(self, selectcontext, mapper, row):
         return (None, None, None)
 
+    def merge(self, session, source, dest, dont_load, _recursive):
+        pass
+
 
 class PropertyLoader(StrategizedProperty):
     """Describes an object property that holds a single item or list
index fd61ccc28c4548bbfc75db94d352a259f5b3ac95..5064aa709b06ca39ffb4e32d61306da63b1f2ca3 100644 (file)
@@ -533,6 +533,32 @@ class MergeTest(TestBase, AssertsExecutionResults):
         except exceptions.InvalidRequestError, e:
             assert "dont_load=True option does not support" in str(e)
 
+    def test_synonym_comparable(self):
+        class User(object):
+
+           class Comparator(PropComparator):
+               pass
+
+           def _getValue(self):
+               return self._value
+
+           def _setValue(self, value):
+               setattr(self, '_value', value)
+
+           value = property(_getValue, _setValue)
+
+        mapper(User, users, properties={
+            'uid':synonym('id'),
+            'foobar':comparable_property(User.Comparator,User.value),
+        })
+        
+        sess = create_session()
+        u = User()
+        u.name = 'ed'
+        sess.save(u)
+        sess.flush()
+        sess.expunge(u)
+        sess.merge(u)
 
 if __name__ == "__main__":
     testenv.main()