| 2842 | self.assert_compile(q, exp) |
| 2843 | |
| 2844 | def test_aliased_adapt_on_names(self): |
| 2845 | User, Address = self.classes("User", "Address") |
| 2846 | agg_address = select( |
| 2847 | Address.id, |
| 2848 | func.sum(func.length(Address.email_address)).label( |
| 2849 | "email_address" |
| 2850 | ), |
| 2851 | ).group_by(Address.user_id) |
| 2852 | ag2 = aliased(Address, agg_address.subquery(), adapt_on_names=True) |
| 2853 | |
| 2854 | # second, 'email_address' matches up to the aggregate, and we get a |
| 2855 | # smooth JOIN from users->subquery and that's it |
| 2856 | self.assert_compile( |
| 2857 | select(User, ag2.email_address) |
| 2858 | .join(ag2, User.addresses) |
| 2859 | .filter(ag2.email_address > 5), |
| 2860 | "SELECT users.id, users.name, anon_1.email_address FROM users " |
| 2861 | "JOIN (" |
| 2862 | "SELECT addresses.id AS id, sum(length(addresses.email_address)) " |
| 2863 | "AS email_address FROM addresses GROUP BY addresses.user_id) AS " |
| 2864 | "anon_1 ON users.id = addresses.user_id " |
| 2865 | "WHERE anon_1.email_address > :email_address_1", |
| 2866 | ) |
| 2867 | |
| 2868 | def test_aliased_warns_missing_column(self): |
| 2869 | User, Address = self.classes("User", "Address") |