)
# a little tedious here, adding labels to work around Query's
- # auto-labelling. TODO: can we detect only one table in the
- # "froms" and then turn off use_labels ? note: this query is
- # incorrect SQL with the correlate of users in the FROM list.
+ # auto-labelling.
s = sess.query(addresses.c.id.label('id'),
addresses.c.email_address.label('email')).\
filter(addresses.c.user_id == users.c.id).correlate(users).\
"SELECT users.id AS users_id, users.name AS users_name, "
"anon_1.email AS anon_1_email "
"FROM users JOIN (SELECT addresses.id AS id, "
- "addresses.email_address AS email FROM addresses "
+ "addresses.email_address AS email FROM addresses, users "
"WHERE addresses.user_id = users.id) AS anon_1 "
"ON anon_1.id = users.id",
)
Address = self.classes.Address
self.assert_compile(
- select([
- User.name,
- select([func.count(Address.id)
- ]).where(User.id == Address.user_id).correlate(User)]),
- "SELECT users.name, count_1 FROM users, "
+ select([User.name, Address.id,
+ select([func.count(Address.id)]).\
+ where(User.id == Address.user_id).\
+ correlate(User).as_scalar()
+ ]),
+ "SELECT users.name, addresses.id, "
"(SELECT count(addresses.id) AS count_1 "
- "FROM addresses WHERE users.id = addresses.user_id)"
+ "FROM addresses WHERE users.id = addresses.user_id) AS anon_1 "
+ "FROM users, addresses"
)
def test_correlate_aliased_entity(self):
uu = aliased(User, name="uu")
self.assert_compile(
- select([
- uu.name,
- select([func.count(Address.id)
- ]).where(uu.id == Address.user_id).correlate(uu)]),
- "SELECT uu.name, count_1 FROM users AS uu, "
+ select([uu.name, Address.id,
+ select([func.count(Address.id)]).\
+ where(uu.id == Address.user_id).\
+ correlate(uu).as_scalar()
+ ]),
+ # curious, "address.user_id = uu.id" is reversed here
+ "SELECT uu.name, addresses.id, "
"(SELECT count(addresses.id) AS count_1 "
- "FROM addresses WHERE addresses.user_id = uu.id)"
+ "FROM addresses WHERE addresses.user_id = uu.id) AS anon_1 "
+ "FROM users AS uu, addresses"
)
def test_columns_clause_entity(self):