There is a bug related to this which is fixed in the most recent  
trunk.  Please try that out and see if that resolves the issue.


On Nov 6, 2008, at 10:51 AM, mraer wrote:

>
> I have such queries:
>
> OI  = aliased(OrderedItem, name="OrderedItem_AD")
> CH   = aliased(TChart, name="Chart_AD")
> ORD  = aliased(Order, name="Order_AD")
>
> alreadyDone = session.query(CH.id).\
>            join((OI, CH.orderedItems)).\
>            join((ORD, OI.order)).\
>            join((User, ORD.user)).\
>            join((OrderStatus, ORD.status)).\
>            filter(User.name ==u"TestUser").\
>            filter(OrderStatus.id == 1).\
>            subquery()
>
> OI2  = aliased(OrderedItem, name="OrderedItem_CUR")
> CH2   = aliased(TChart, name="Chart_CUR")
> ORD2  = aliased(Order, name="Order_CUR")
>
> orderedItemsToExclude = session.query(OI2).select_from(join(OI2,  
> CH2)).
> \
>            join((ORD2,  OI2.order)).\
>            join((alreadyDone, alreadyDone.c.id == CH2.id)).\
>            filter(ORD2.id == order.id)
>
> Alchemy generate such queries:
>
> alreadyDone:
> SELECT "Chart_1".id
> FROM "Chart" AS "Chart_1" JOIN "OrderedItem" AS "OrderedItem_1" ON
> "Chart_1".id = "OrderedItem_1".chart_id JOIN "Order" AS "Order_1" ON
> "Order_1".id = "OrderedItem_1"."Order_id" JOIN "User" ON "User".id =
> "Order_1".user_id JOIN "OrderStatus" ON "OrderStatus".id =
> "Order".status_id
> WHERE "User".name = :name_1 AND "OrderStatus".id = :id_1
>
> orderedItemsToExclude:
> SELECT "OrderedItem_1"."downloadURL" AS "OrderedItem_1_downloadURL",
> "OrderedItem_1".chart_id AS "OrderedItem_1_chart_id",
> "OrderedItem_1"."Order_id" AS "OrderedItem_1_Order_id"
> FROM "OrderedItem" AS "OrderedItem_1" JOIN "Chart" AS "Chart_1" ON
> "Chart_1".id = "OrderedItem_1".chart_id JOIN "Order" AS "Order_1" ON
> "Order_1".id = "OrderedItem"."Order_id" JOIN (SELECT "Chart_2".id AS
> id
> FROM "Chart" AS "Chart_2" JOIN "OrderedItem" AS "OrderedItem_2" ON
> "Chart_2".id = "OrderedItem_2".chart_id JOIN "Order" AS "Order_2" ON
> "Order_2".id = "OrderedItem_2"."Order_id" JOIN "User" ON "User".id =
> "Order_2".user_id JOIN "OrderStatus" ON "OrderStatus".id =
> "Order".status_id
> WHERE "User".name = :name_1 AND "OrderStatus".id = :id_1) AS anon_1 ON
> anon_1.id = "Chart_1".id
> WHERE "Order_1".id = :id_2
>
> The problem is that it doesn't use aliased name in join condition:
> "Order_1".id = "OrderedItem"."Order_id"
> must be
> "Order_1".id = "OrderedItem_1"."Order_id"
>
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to