Commits

Mike Bayer committed 09962a5

- [bug] Fixed bug whereby populate_existing
option would not propagate to subquery
eager loaders. [ticket:2497].

  • Participants
  • Parent commits 75dc27f
  • Branches rel_0_7

Comments (0)

Files changed (3)

     was not accepting a scalar argument 
     for the identity.  [ticket:2508].
 
+  - [bug] Fixed bug whereby populate_existing
+    option would not propagate to subquery
+    eager loaders.  [ticket:2497].
+
 - sql
   - [bug] added BIGINT to types.__all__,
     BIGINT, BINARY, VARBINARY to sqlalchemy

lib/sqlalchemy/orm/strategies.py

         # 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):

test/orm/test_subquery_relations.py

         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()