From f683ddf16b34513d9f589202f2cdff9d0e0fad6b Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 13 Jun 2018 18:13:21 -0400 Subject: 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 --- lib/sqlalchemy/orm/query.py | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'lib/sqlalchemy') 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 -- cgit v1.2.1