diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-06-13 16:25:26 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2010-06-13 16:25:26 -0400 |
| commit | 92599bfec69afa53ea417b183deb2e45eeb91285 (patch) | |
| tree | b350024eec930fa51531296c14947e79e8ed9943 /lib/sqlalchemy/orm/dependency.py | |
| parent | 03e0f776beff157886d174284847868c8f2aed1d (diff) | |
| download | sqlalchemy-92599bfec69afa53ea417b183deb2e45eeb91285.tar.gz | |
- Fixed bug regarding flushes on self-referential
bi-directional many-to-many relationships, where
two objects made to mutually reference each other
in one flush would fail to insert a row for both
sides. Regression from 0.5. [ticket:1824]
Diffstat (limited to 'lib/sqlalchemy/orm/dependency.py')
| -rw-r--r-- | lib/sqlalchemy/orm/dependency.py | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/lib/sqlalchemy/orm/dependency.py b/lib/sqlalchemy/orm/dependency.py index b2c3d1fb9..ba2ae8889 100644 --- a/lib/sqlalchemy/orm/dependency.py +++ b/lib/sqlalchemy/orm/dependency.py @@ -870,7 +870,7 @@ class ManyToManyDP(DependencyProcessor): secondary_update = [] processed = self._get_reversed_processed_set(uowcommit) - + tmp = set() for state in states: history = uowcommit.get_attribute_history( state, @@ -890,8 +890,10 @@ class ManyToManyDP(DependencyProcessor): False, uowcommit) secondary_delete.append(associationrow) - if processed is not None: - processed.update((c, state) for c in history.non_added()) + tmp.update((c, state) for c in history.non_added()) + + if processed is not None: + processed.update(tmp) self._run_crud(uowcommit, secondary_insert, secondary_update, secondary_delete) @@ -902,7 +904,8 @@ class ManyToManyDP(DependencyProcessor): secondary_update = [] processed = self._get_reversed_processed_set(uowcommit) - + tmp = set() + for state in states: history = uowcommit.get_attribute_history(state, self.key) if history: @@ -928,8 +931,7 @@ class ManyToManyDP(DependencyProcessor): False, uowcommit) secondary_delete.append(associationrow) - if processed is not None: - processed.update((c, state) for c in history.added + history.deleted) + tmp.update((c, state) for c in history.added + history.deleted) if not self.passive_updates and \ self._pks_changed(uowcommit, state): @@ -954,7 +956,9 @@ class ManyToManyDP(DependencyProcessor): secondary_update.append(associationrow) - + if processed is not None: + processed.update(tmp) + self._run_crud(uowcommit, secondary_insert, secondary_update, secondary_delete) |
