MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / test_eager_degrade

Method test_eager_degrade

test/orm/test_options.py:1669–1716  ·  view source on GitHub ↗

An eager relationship automatically degrades to a lazy relationship if eager columns are not available

(self)

Source from the content-addressed store, hash-verified

1667 self.sql_count_(1, go)
1668
1669 def test_eager_degrade(self):
1670 """An eager relationship automatically degrades to a lazy relationship
1671 if eager columns are not available"""
1672
1673 Address, addresses, users, User = (
1674 self.classes.Address,
1675 self.tables.addresses,
1676 self.tables.users,
1677 self.classes.User,
1678 )
1679
1680 self.mapper_registry.map_imperatively(
1681 User,
1682 users,
1683 properties=dict(
1684 addresses=relationship(
1685 self.mapper_registry.map_imperatively(Address, addresses),
1686 lazy="joined",
1687 order_by=addresses.c.id,
1688 )
1689 ),
1690 )
1691
1692 sess = fixture_session()
1693 # first test straight eager load, 1 statement
1694
1695 def go():
1696 result = sess.query(User).order_by(User.id).all()
1697 eq_(result, self.static.user_address_result)
1698
1699 self.sql_count_(1, go)
1700
1701 sess.expunge_all()
1702
1703 # then select just from users. run it into instances.
1704 # then assert the data, which will launch 3 more lazy loads
1705 # (previous users in session fell out of scope and were removed from
1706 # session's identity map)
1707 r = sess.connection().execute(users.select().order_by(users.c.id))
1708
1709 ctx = sess.query(User)._compile_context()
1710
1711 def go():
1712 result = loading.instances(r, ctx).scalars().unique()
1713 result = list(result)
1714 eq_(result, self.static.user_address_result)
1715
1716 self.sql_count_(4, go)
1717
1718 def test_eager_degrade_deep(self):
1719 (

Callers

nothing calls this directly

Calls 11

relationshipFunction · 0.90
fixture_sessionFunction · 0.90
map_imperativelyMethod · 0.80
sql_count_Method · 0.80
_compile_contextMethod · 0.80
expunge_allMethod · 0.45
executeMethod · 0.45
connectionMethod · 0.45
order_byMethod · 0.45
selectMethod · 0.45
queryMethod · 0.45

Tested by

no test coverage detected