(self)
| 7349 | |
| 7350 | class ExecutionOptionsTest(QueryTest): |
| 7351 | def test_populate_existing(self): |
| 7352 | User, Address = self.classes.User, self.classes.Address |
| 7353 | Order = self.classes.Order |
| 7354 | |
| 7355 | s = fixture_session(autoflush=False) |
| 7356 | |
| 7357 | userlist = s.query(User).all() |
| 7358 | |
| 7359 | u = userlist[0] |
| 7360 | u.name = "foo" |
| 7361 | a = Address(name="ed") |
| 7362 | u.addresses.append(a) |
| 7363 | |
| 7364 | self.assert_(a in u.addresses) |
| 7365 | |
| 7366 | s.query(User).populate_existing().all() |
| 7367 | |
| 7368 | self.assert_(u not in s.dirty) |
| 7369 | |
| 7370 | self.assert_(u.name == "jack") |
| 7371 | |
| 7372 | self.assert_(a not in u.addresses) |
| 7373 | |
| 7374 | u.addresses[0].email_address = "lala" |
| 7375 | u.orders[1].items[2].description = "item 12" |
| 7376 | # test that lazy load doesn't change child items |
| 7377 | s.query(User).populate_existing().all() |
| 7378 | assert u.addresses[0].email_address == "lala" |
| 7379 | assert u.orders[1].items[2].description == "item 12" |
| 7380 | |
| 7381 | # eager load does |
| 7382 | s.query(User).options( |
| 7383 | joinedload(User.addresses), |
| 7384 | joinedload(User.orders).joinedload(Order.items), |
| 7385 | ).populate_existing().all() |
| 7386 | assert u.addresses[0].email_address == "jack@bean.com" |
| 7387 | assert u.orders[1].items[2].description == "item 5" |
| 7388 | |
| 7389 | def test_populate_existing_future(self): |
| 7390 | User, Address = self.classes.User, self.classes.Address |
nothing calls this directly
no test coverage detected