MCPcopy
hub / github.com/sqlalchemy/sqlalchemy / test_subquery_eagerloading

Method test_subquery_eagerloading

test/ext/test_baked.py:813–903  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

811 )
812
813 def test_subquery_eagerloading(self):
814 User = self.classes.User
815 Address = self.classes.Address
816 Order = self.classes.Order
817
818 self.bakery = baked.bakery()
819 base_bq = self.bakery(lambda s: s.query(User))
820
821 base_bq += lambda q: q.options(
822 subqueryload(User.addresses), subqueryload(User.orders)
823 )
824 base_bq += lambda q: q.order_by(User.id)
825
826 assert_result = [
827 User(
828 id=7,
829 addresses=[Address(id=1, email_address="jack@bean.com")],
830 orders=[Order(id=1), Order(id=3), Order(id=5)],
831 ),
832 User(
833 id=8,
834 addresses=[
835 Address(id=2, email_address="ed@wood.com"),
836 Address(id=3, email_address="ed@bettyboop.com"),
837 Address(id=4, email_address="ed@lala.com"),
838 ],
839 ),
840 User(
841 id=9,
842 addresses=[Address(id=5)],
843 orders=[Order(id=2), Order(id=4)],
844 ),
845 User(id=10, addresses=[]),
846 ]
847
848 for i in range(4):
849 for cond1, cond2 in itertools.product(
850 *[(False, True) for j in range(2)]
851 ):
852 bq = base_bq._clone()
853
854 sess = fixture_session()
855
856 if cond1:
857 bq += lambda q: q.filter(User.name == "jack")
858 else:
859 bq += lambda q: q.filter(User.name.like("%ed%"))
860
861 if cond2:
862 ct = func.count(Address.id).label("count")
863 subq = (
864 sess.query(ct, Address.user_id)
865 .group_by(Address.user_id)
866 .having(ct > 2)
867 .subquery()
868 )
869
870 bq += lambda q: q.join(subq)

Callers

nothing calls this directly

Calls 15

subqueryloadFunction · 0.90
fixture_sessionFunction · 0.90
bakeryMethod · 0.80
assert_sql_countMethod · 0.80
UserClass · 0.70
AddressClass · 0.70
OrderClass · 0.70
queryMethod · 0.45
optionsMethod · 0.45
order_byMethod · 0.45
_cloneMethod · 0.45
filterMethod · 0.45

Tested by

no test coverage detected