]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- sync checks destination column for primary key status, will not set it to None...
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 13 Oct 2006 16:38:21 +0000 (16:38 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 13 Oct 2006 16:38:21 +0000 (16:38 +0000)
- dependency non-passively loads child items for many-to-one post update check

lib/sqlalchemy/orm/dependency.py
lib/sqlalchemy/orm/sync.py

index 3ce297d1c3367879fd683def373c030e2ecf792e..7bb550b4dc2eb0f02dab5b0268176b08a53c8508 100644 (file)
@@ -222,7 +222,7 @@ class ManyToOneDP(DependencyProcessor):
                 # before we can DELETE the row
                 for obj in deplist:
                     self._synchronize(obj, None, None, True)
-                    childlist = self.get_object_dependencies(obj, uowcommit, passive=True)
+                    childlist = self.get_object_dependencies(obj, uowcommit, passive=False)
                     self._conditional_post_update(obj, uowcommit, childlist.deleted_items() + childlist.unchanged_items() + childlist.added_items())
         else:
             for obj in deplist:
index 91def73619090f08d874d4ff0052b97020b5f004..aeaa5d1d24ce05828084a9d4bcb47930065b0708 100644 (file)
@@ -108,8 +108,15 @@ class SyncRule(object):
         self.issecondary = issecondary
         self.dest_mapper = dest_mapper
         self.dest_column = dest_column
+            
         #print "SyncRule", source_mapper, source_column, dest_column, dest_mapper
-
+    def dest_primary_key(self):
+        try:
+            return self._dest_primary_key
+        except AttributeError:
+            self._dest_primary_key = self.dest_mapper is not None and self.dest_column in self.dest_mapper.pks_by_table[self.dest_column.table]
+            return self._dest_primary_key
+        
     def execute(self, source, dest, obj, child, clearkeys):
         if source is None:
             if self.issecondary is False:
@@ -123,6 +130,8 @@ class SyncRule(object):
         if isinstance(dest, dict):
             dest[self.dest_column.key] = value
         else:
+            if clearkeys and self.dest_primary_key():
+                return
             if logging.is_debug_enabled(self.logger):
                 self.logger.debug("execute() instances: %s(%s)->%s(%s) ('%s')" % (mapperutil.instance_str(source), str(self.source_column), mapperutil.instance_str(dest), str(self.dest_column), value))
             self.dest_mapper._setattrbycolumn(dest, self.dest_column, value)