summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2012-09-28 11:00:53 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2012-09-28 11:00:53 -0400
commit4aba2eb6017de5d4b56d4aa34af87f2ebab903b0 (patch)
tree8bc1ebfe192df559e4ec507818d88156eabb903e /lib/sqlalchemy/orm
parent21cac5b598a83ef0e24423dc523629b475aa3af0 (diff)
downloadsqlalchemy-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.py6
-rw-r--r--lib/sqlalchemy/orm/relationships.py14
-rw-r--r--lib/sqlalchemy/orm/strategies.py2
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: