diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-06-26 16:40:09 -0400 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2021-06-26 16:41:31 -0400 |
| commit | 4e7438e0acac2f7c9d24c73d36cdcdb74551f903 (patch) | |
| tree | 6e917ade06fc267786fa6cbf11ba003e2ff1b84c /lib | |
| parent | 84a68ac8820a2e1043f8317d42c5681c81cbd9d5 (diff) | |
| download | sqlalchemy-4e7438e0acac2f7c9d24c73d36cdcdb74551f903.tar.gz | |
ensure with poly entities are also reconstituted for GC'ed AC
Fixed regression in ORM regarding an internal reconstitution step for the
func:`_orm.with_polymorphic` construct, when the user-facing object is
garbage collected as the query is processed. The reconstitution was not
ensuring the sub-entities for the "polymorphic" case were handled, leading
to an ``AttributeError``.
Fixes: #6680
Change-Id: Id35b16d0f2aadb50b5a7385a21fa81b9d8a8325f
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sqlalchemy/orm/util.py | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py index 856afabb0..15f584c1f 100644 --- a/lib/sqlalchemy/orm/util.py +++ b/lib/sqlalchemy/orm/util.py @@ -524,6 +524,15 @@ class AliasedClass(object): obj = cls.__new__(cls) obj.__name__ = "AliasedClass_%s" % aliased_insp.mapper.class_.__name__ obj._aliased_insp = aliased_insp + + if aliased_insp._is_with_polymorphic: + for sub_aliased_insp in aliased_insp._with_polymorphic_entities: + if sub_aliased_insp is not aliased_insp: + ent = AliasedClass._reconstitute_from_aliased_insp( + sub_aliased_insp + ) + setattr(obj, sub_aliased_insp.class_.__name__, ent) + return obj def __getattr__(self, key): |
