summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2018-06-13 18:13:21 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2018-06-25 23:47:51 -0400
commitf683ddf16b34513d9f589202f2cdff9d0e0fad6b (patch)
tree311b95bf0a5e7b04d01e85260b4b32636fa1aeb2 /lib/sqlalchemy
parentc99345ee9994c3ea2a5e6536cc3365f18d017cc1 (diff)
downloadsqlalchemy-f683ddf16b34513d9f589202f2cdff9d0e0fad6b.tar.gz
Look up adapter info for previous left side in chained query.join()
Fixed issue where chaining multiple join elements inside of :meth:`.Query.join` might not correctly adapt to the previous left-hand side, when chaining joined inheritance classes that share the same base class. Change-Id: I4b846430b7362912dbebf50599ec15a1eb978fd4 Fixes: #3505
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/orm/query.py7
1 files changed, 7 insertions, 0 deletions
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py
index 74d3079af..98747c680 100644
--- a/lib/sqlalchemy/orm/query.py
+++ b/lib/sqlalchemy/orm/query.py
@@ -2244,6 +2244,13 @@ class Query(object):
left_entity = onclause._parententity
+ alias = self._polymorphic_adapters.get(left_entity, None)
+ # could be None or could be ColumnAdapter also
+ if isinstance(alias, ORMAdapter) and \
+ alias.mapper.isa(left_entity):
+ left_entity = alias.aliased_class
+ onclause = getattr(left_entity, onclause.key)
+
prop = onclause.property
if not isinstance(onclause, attributes.QueryableAttribute):
onclause = prop