]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- [bug] Fixed bug whereby populate_existing
authorMike Bayer <mike_mp@zzzcomputing.com>
Sat, 16 Jun 2012 21:40:15 +0000 (17:40 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sat, 16 Jun 2012 21:40:15 +0000 (17:40 -0400)
option would not propagate to subquery
eager loaders.  [ticket:2497].  Also
in 0.7.8.

CHANGES
lib/sqlalchemy/orm/strategies.py
test/orm/test_subquery_relations.py

diff --git a/CHANGES b/CHANGES
index d16ce9777af7921823e6bf71c487ba880d99a0c4..83be7c48336896500a9a6732a9557953f8123c3e 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -202,6 +202,11 @@ CHANGES
     [ticket:2454].  Courtesy Jeff Dairiki
     also in 0.7.7.
 
+  - [bug] Fixed bug whereby populate_existing
+    option would not propagate to subquery
+    eager loaders.  [ticket:2497].  Also
+    in 0.7.8.
+
 - engine
   - [bug] Fixed memory leak in C version of
     result proxy whereby DBAPIs which don't deliver
index 70e06723ac7fea39eb6134113ac6922464e54fa2..d0f8962be7923fc1f470538c1f9790edbc49ab84 100644 (file)
@@ -833,6 +833,8 @@ class SubqueryLoader(AbstractRelationshipLoader):
         # these will fire relative to subq_path.
         q = q._with_current_path(subq_path)
         q = q._conditional_options(*orig_query._with_options)
+        if orig_query._populate_existing: 
+            q._populate_existing = orig_query._populate_existing
         return q
 
     def _setup_outermost_orderby(self, q):
index 70a015f29fb1240e58bdee655b5915ff584ffe92..90df17609dc0f9d67f53eb994558cd3ae53825a7 100644 (file)
@@ -861,6 +861,18 @@ class LoadOnExistingTest(_fixtures.FixtureTest):
         self.assert_sql_count(testing.db, go, 1)
         assert 'addresses' not in u1.__dict__
 
+    def test_populate_existing_propagate(self):
+        User, Address, sess = self._eager_config_fixture()
+        u1 = sess.query(User).get(8)
+        u1.addresses[2].email_address = "foofoo"
+        del u1.addresses[1]
+        u1 = sess.query(User).populate_existing().filter_by(id=8).one()
+        # collection is reverted
+        eq_(len(u1.addresses), 3)
+
+        # attributes on related items reverted
+        eq_(u1.addresses[2].email_address, "ed@lala.com")
+
     def test_loads_second_level_collection_to_scalar(self):
         User, Address, Dingaling, sess = self._collection_to_scalar_fixture()