diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-09-28 11:00:53 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2012-09-28 11:00:53 -0400 |
| commit | 4aba2eb6017de5d4b56d4aa34af87f2ebab903b0 (patch) | |
| tree | 8bc1ebfe192df559e4ec507818d88156eabb903e /lib/sqlalchemy/orm | |
| parent | 21cac5b598a83ef0e24423dc523629b475aa3af0 (diff) | |
| download | sqlalchemy-4aba2eb6017de5d4b56d4aa34af87f2ebab903b0.tar.gz | |
- fix annotation transfer when producing m2m backref, [ticket:2578]
Diffstat (limited to 'lib/sqlalchemy/orm')
| -rw-r--r-- | lib/sqlalchemy/orm/properties.py | 6 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/relationships.py | 14 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/strategies.py | 2 |
3 files changed, 19 insertions, 3 deletions
diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index ad48234c2..f8288f5fb 100644 --- a/lib/sqlalchemy/orm/properties.py +++ b/lib/sqlalchemy/orm/properties.py @@ -1167,8 +1167,10 @@ class RelationshipProperty(StrategizedProperty): # for many to many, just switch primaryjoin/ # secondaryjoin. use the annotated # pj/sj on the _join_condition. - pj = kwargs.pop('primaryjoin', self._join_condition.secondaryjoin) - sj = kwargs.pop('secondaryjoin', self._join_condition.primaryjoin) + pj = kwargs.pop('primaryjoin', + self._join_condition.secondaryjoin_minus_local) + sj = kwargs.pop('secondaryjoin', + self._join_condition.primaryjoin_minus_local) else: pj = kwargs.pop('primaryjoin', self._join_condition.primaryjoin_reverse_remote) diff --git a/lib/sqlalchemy/orm/relationships.py b/lib/sqlalchemy/orm/relationships.py index dd6f2442b..c861edf83 100644 --- a/lib/sqlalchemy/orm/relationships.py +++ b/lib/sqlalchemy/orm/relationships.py @@ -170,6 +170,12 @@ class JoinCondition(object): log.info('%s local/remote pairs [%s]', self.prop, ','.join('(%s / %s)' % (l, r) for (l, r) in self.local_remote_pairs)) + log.info('%s remote columns [%s]', self.prop, + ','.join('%s' % col for col in self.remote_columns) + ) + log.info('%s local columns [%s]', self.prop, + ','.join('%s' % col for col in self.local_columns) + ) log.info('%s relationship direction %s', self.prop, self.direction) @@ -266,6 +272,14 @@ class JoinCondition(object): "foreign key reference to the parent table." % self.prop) + @property + def primaryjoin_minus_local(self): + return _deep_deannotate(self.primaryjoin, values=("local", "remote")) + + @property + def secondaryjoin_minus_local(self): + return _deep_deannotate(self.secondaryjoin, values=("local", "remote")) + @util.memoized_property def primaryjoin_reverse_remote(self): """Return the primaryjoin condition suitable for the diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index 0b73f9b7a..8186aa507 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -737,7 +737,7 @@ class SubqueryLoader(AbstractRelationshipLoader): subq_mapper = orm_util._class_to_mapper(subq_path[0]) # determine attributes of the leftmost mapper - if self.parent.isa(subq_mapper) and self.key==subq_path[1]: + if self.parent.isa(subq_mapper) and self.key == subq_path[1]: leftmost_mapper, leftmost_prop = \ self.parent, self.parent_property else: |
