diff options
| author | mike bayer <mike_mp@zzzcomputing.com> | 2017-10-04 09:21:36 -0400 |
|---|---|---|
| committer | Gerrit Code Review <gerrit@ci.zzzcomputing.com> | 2017-10-04 09:21:36 -0400 |
| commit | e86045694a4b686a92bc5beb72908e88b2261050 (patch) | |
| tree | a71a8a47924d0e1e2fee4a42c843964873f427eb /lib/sqlalchemy | |
| parent | f846a789b78f977b4d7e8e16b412b07e77f2ab13 (diff) | |
| parent | 8ba8dd23b7cbf9aa423b6aa965abc4d7174b84de (diff) | |
| download | sqlalchemy-e86045694a4b686a92bc5beb72908e88b2261050.tar.gz | |
Merge "Improve check for overlapping FK targets on sibling classes"
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/relationships.py | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lib/sqlalchemy/orm/relationships.py b/lib/sqlalchemy/orm/relationships.py index 94c0d6694..16e1cdb97 100644 --- a/lib/sqlalchemy/orm/relationships.py +++ b/lib/sqlalchemy/orm/relationships.py @@ -1803,6 +1803,15 @@ class RelationshipProperty(StrategizedProperty): (self.key, self.parent.class_) ) + def _persists_for(self, mapper): + """Return True if this property will persist values on behalf + of the given mapper. + + """ + + return self.key in mapper.relationships and \ + mapper.relationships[self.key] is self + def _columns_are_mapped(self, *cols): """Return True if all columns in the given collection are mapped by the tables referenced by this :class:`.Relationship`. @@ -2691,10 +2700,16 @@ class JoinCondition(object): else: other_props = [] prop_to_from = self._track_overlapping_sync_targets[to_] + for pr, fr_ in prop_to_from.items(): if pr.mapper in mapperlib._mapper_registry and \ + ( + self.prop._persists_for(pr.parent) or + pr._persists_for(self.prop.parent) + ) and \ fr_ is not from_ and \ pr not in self.prop._reverse_property: + other_props.append((pr, fr_)) if other_props: |
