From 3c1aa033e69e77a010cd8786fdc7f7d1239447b0 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Wed, 3 Dec 2008 06:23:55 +0000 Subject: [PATCH] - Fixed bug introduced in 0.5rc4 involving eager loading not functioning for properties which were added to a mapper post-compile using add_property() or equivalent. --- CHANGES | 5 +++++ lib/sqlalchemy/orm/mapper.py | 2 +- test/orm/eager_relations.py | 16 ++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 82f770949b..ca1cf87803 100644 --- a/CHANGES +++ b/CHANGES @@ -11,6 +11,11 @@ CHANGES - Query.select_from(), from_statement() ensure that the given argument is a FromClause, or Text/Select/Union, respectively. + + - Fixed bug introduced in 0.5rc4 involving eager + loading not functioning for properties which were + added to a mapper post-compile using + add_property() or equivalent. - Duplicate items in a list-based collection will be maintained when issuing INSERTs to diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index b5f43b12e9..b48297a645 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -860,7 +860,7 @@ class Mapper(object): else: return mappers, self._selectable_from_mappers(mappers) - @util.memoized_property + @property def _default_polymorphic_properties(self): return util.unique_list( chain(*[list(mapper.iterate_properties) for mapper in [self] + self._with_polymorphic_mappers]) diff --git a/test/orm/eager_relations.py b/test/orm/eager_relations.py index dc7349b4f4..94fabd0b11 100644 --- a/test/orm/eager_relations.py +++ b/test/orm/eager_relations.py @@ -23,6 +23,22 @@ class EagerTest(_fixtures.FixtureTest): assert [User(id=7, addresses=[Address(id=1, email_address='jack@bean.com')])] == q.filter(User.id==7).all() assert self.static.user_address_result == q.all() + @testing.resolve_artifact_names + def test_late_compile(self): + m = mapper(User, users) + sess = create_session() + sess.query(User).all() + m.add_property("addresses", relation(mapper(Address, addresses))) + + sess.clear() + def go(): + eq_( + [User(id=7, addresses=[Address(id=1, email_address='jack@bean.com')])], + sess.query(User).options(eagerload('addresses')).filter(User.id==7).all() + ) + self.assert_sql_count(testing.db, go, 1) + + @testing.resolve_artifact_names def test_no_orphan(self): """An eagerly loaded child object is not marked as an orphan""" -- 2.47.3