(self)
| 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) |
nothing calls this directly
no test coverage detected