From 34007aa83b5d24948be1e3d9272825aa458d2c9d Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 13 Oct 2006 16:38:21 +0000 Subject: [PATCH] - sync checks destination column for primary key status, will not set it to None in that case - dependency non-passively loads child items for many-to-one post update check --- lib/sqlalchemy/orm/dependency.py | 2 +- lib/sqlalchemy/orm/sync.py | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/sqlalchemy/orm/dependency.py b/lib/sqlalchemy/orm/dependency.py index 3ce297d1c3..7bb550b4dc 100644 --- a/lib/sqlalchemy/orm/dependency.py +++ b/lib/sqlalchemy/orm/dependency.py @@ -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: diff --git a/lib/sqlalchemy/orm/sync.py b/lib/sqlalchemy/orm/sync.py index 91def73619..aeaa5d1d24 100644 --- a/lib/sqlalchemy/orm/sync.py +++ b/lib/sqlalchemy/orm/sync.py @@ -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) -- 2.47.2