From a58f1b9c698dc7be29d43f2c4c21de8918943f77 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 17 Aug 2022 13:06:51 -0400 Subject: fill out all distinguising fields for AliasedInsp Hardened the cache key strategy for the :func:`_orm.aliased` and :func:`_orm.with_polymorphic` constructs. While no issue involving actual statements being cached can easily be demonstrated (if at all), these two constructs were not including enough of what makes them unique in their cache keys for caching on the aliased construct alone to be accurate. Fixes: #8401 Change-Id: I13d14985b6965f398edd9494601d8ae89ac641f2 --- lib/sqlalchemy/orm/util.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'lib/sqlalchemy') diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py index 02080a27f..9a5399af0 100644 --- a/lib/sqlalchemy/orm/util.py +++ b/lib/sqlalchemy/orm/util.py @@ -748,6 +748,19 @@ class AliasedInsp( "_nest_adapters", ) + _cache_key_traversal = [ + ("name", visitors.ExtendedInternalTraversal.dp_string), + ("_adapt_on_names", visitors.ExtendedInternalTraversal.dp_boolean), + ("_use_mapper_path", visitors.ExtendedInternalTraversal.dp_boolean), + ("_target", visitors.ExtendedInternalTraversal.dp_inspectable), + ("selectable", visitors.ExtendedInternalTraversal.dp_clauseelement), + ( + "with_polymorphic_mappers", + visitors.InternalTraversal.dp_has_cache_key_list, + ), + ("polymorphic_on", visitors.InternalTraversal.dp_clauseelement), + ] + mapper: Mapper[_O] selectable: FromClause _adapter: sql_util.ColumnAdapter @@ -940,12 +953,6 @@ class AliasedInsp( def entity_namespace(self) -> AliasedClass[_O]: return self.entity - _cache_key_traversal = [ - ("name", visitors.ExtendedInternalTraversal.dp_string), - ("_adapt_on_names", visitors.ExtendedInternalTraversal.dp_boolean), - ("selectable", visitors.ExtendedInternalTraversal.dp_clauseelement), - ] - @property def class_(self) -> Type[_O]: """Return the mapped class ultimately represented by this -- cgit v1.2.1