summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/orm
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2015-06-27 00:40:34 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2015-06-27 00:40:34 -0400
commitfcb7c784e9479b9bff7de20c41a05bc1aa550ffb (patch)
tree31069380bd348fce6b2b71d6e5330fe65f231e6f /lib/sqlalchemy/orm
parent012b3bd0b2a0e9cdfd11d797b6aa0053a13816b0 (diff)
downloadsqlalchemy-fcb7c784e9479b9bff7de20c41a05bc1aa550ffb.tar.gz
- Fixed 1.0 regression where the "parent entity" of a synonym-
mapped attribute on top of an :func:`.aliased` object would resolve to the original mapper, not the :func:`.aliased` version of it, thereby causing problems for a :class:`.Query` that relies on this attribute (e.g. it's the only representative attribute given in the constructor) to figure out the correct FROM clause for the query. fixes #3466 - apply consitency to ._parententity vs. __clause_element__()._annotations['parententity'] in terms of aliased class, test it all.
Diffstat (limited to 'lib/sqlalchemy/orm')
-rw-r--r--lib/sqlalchemy/orm/interfaces.py2
-rw-r--r--lib/sqlalchemy/orm/properties.py2
-rw-r--r--lib/sqlalchemy/orm/util.py2
3 files changed, 4 insertions, 2 deletions
diff --git a/lib/sqlalchemy/orm/interfaces.py b/lib/sqlalchemy/orm/interfaces.py
index 6cc613baa..cd4a0116d 100644
--- a/lib/sqlalchemy/orm/interfaces.py
+++ b/lib/sqlalchemy/orm/interfaces.py
@@ -338,7 +338,7 @@ class PropComparator(operators.ColumnOperators):
def __init__(self, prop, parentmapper, adapt_to_entity=None):
self.prop = self.property = prop
- self._parententity = parentmapper
+ self._parententity = adapt_to_entity or parentmapper
self._adapt_to_entity = adapt_to_entity
def __clause_element__(self):
diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py
index 5694f7255..55e02984b 100644
--- a/lib/sqlalchemy/orm/properties.py
+++ b/lib/sqlalchemy/orm/properties.py
@@ -245,6 +245,8 @@ class ColumnProperty(StrategizedProperty):
if self.adapter:
return self.adapter(self.prop.columns[0])
else:
+ # no adapter, so we aren't aliased
+ # assert self._parententity is self._parentmapper
return self.prop.columns[0]._annotate({
"parententity": self._parententity,
"parentmapper": self._parententity})
diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py
index 66cb2a319..6d3869679 100644
--- a/lib/sqlalchemy/orm/util.py
+++ b/lib/sqlalchemy/orm/util.py
@@ -530,7 +530,7 @@ class AliasedInsp(InspectionAttr):
def _adapt_element(self, elem):
return self._adapter.traverse(elem).\
_annotate({
- 'parententity': self.entity,
+ 'parententity': self,
'parentmapper': self.mapper}
)