[Sqlalchemy-tickets] [sqlalchemy] #2722: Unexpected JOIN order (left / right)
Brought to you by:
zzzeek
|
From: sqlalchemy <mi...@zz...> - 2013-05-07 14:37:37
|
#2722: Unexpected JOIN order (left / right)
-------------------------+-----------------------------------------
Reporter: rbu | Owner: zzzeek
Type: defect | Status: new
Priority: medium | Milestone:
Component: cextensions | Severity: no triage selected yet
Keywords: | Progress State: awaiting triage
-------------------------+-----------------------------------------
We had quite a hard time figuring out the JOIN order as generated by a
query(A).join(B) statement. All examples in the documentation have A as
left and B as right side. Apparently though, when giving an explicit
criterion as query(A).join(B.a), B will be the left side even when adding
a select_from.
Details:
{{{
# surprising
>>> print DBSession.query(User.id).outerjoin(Track.user)
SELECT user.id AS user_id
FROM track LEFT OUTER JOIN user ON user.id = track.user_id
# bug?
>>> print DBSession.query(User.id).select_from(User).outerjoin(Track.user)
SELECT user.iduser AS user_id
FROM track LEFT OUTER JOIN user ON user.id = track.user_id
# expected
>>> print DBSession.query(User.id).outerjoin(User.tracks)
SELECT user.iduser AS user_id
FROM user LEFT OUTER JOIN track ON user.id = track.user_id
}}}
This magic ordering based on the explicit criterion given should be
covered in the documentation, but we did not find such note.
--
Ticket URL: <http://www.sqlalchemy.org/trac/ticket/2722>
sqlalchemy <http://www.sqlalchemy.org/>
The Database Toolkit for Python
|