On Jun 9, 2013, at 7:41 PM, Gerald Thibault <dieselmach...@gmail.com> wrote:

> I have a polymorphic class with a self-referential parent->children 
> relationship. In an ideal world, I'd be able to do:
> 
> session.query(Item) \
>         .options(joinedload('children')) \
>         .all()
> 
> and get the info I need, but I'm on mysql, so this isn't doable due to 
> sqlalchemy insisting on using performance-destroying unbounded subqueries 
> even when the db cannot possibly support them. This one issue has caused me 
> more headaches and man-hours than I could possibly describe, as everything we 
> do has to be doublechecked to make sure we're not accidentally asking 
> sqlalchemy to do a join that it can't handle in an efficient manner.

well then I have good news for you, this issue has been resolved in SQLAlchemy 
0.9, just as of the last few days.  You will find a full description of the 
improvement at 
http://docs.sqlalchemy.org/en/latest/changelog/migration_09.html#many-join-and-left-outer-join-expressions-will-no-longer-be-wrapped-in-select-from-as-anon-1
 and the code is available for your download and beta testing right now.

When your query is run on 0.9 against any database *other* than SQLite (whos 
non-support of parenthesized joins is the entire reason this right-subquery 
thing), you get this query:

SELECT items.id AS items_id, items.item_type AS items_item_type, 
items.parent_id AS items_parent_id, items_ext.id AS items_ext_id, 
items_ext.custom_name AS items_ext_custom_name, items_1.id AS items_1_id, 
items_1.item_type AS items_1_item_type, items_1.parent_id AS items_1_parent_id, 
items_ext_1.id AS items_ext_1_id, items_ext_1.custom_name AS 
items_ext_1_custom_name 
FROM items LEFT OUTER JOIN items_ext ON items.id = items_ext.id LEFT OUTER JOIN 
(items AS items_1 LEFT OUTER JOIN items_ext AS items_ext_1 ON items_1.id = 
items_ext_1.id) ON items.id = items_1.parent_id

the word "SELECT" appears only once.   




-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to