Thank you Michael - it's always good to get some validation when pushing your own knowledge of a system. I'll check out the trunk tomorrow, give it a whirl and report any findings then.
Thanks again for the quick response, Martin On Feb 20, 6:31 pm, Michael Bayer <[EMAIL PROTECTED]> wrote: > On Feb 20, 2008, at 1:01 PM, Martin Pengelly-Phillips wrote: > > > > > I have attempted to solve this by using the concept of > > 'forwardAssociations' with a backref of 'backwardAssociations' and > > then a custom property 'associations' that retrieves and sets the real > > attributes accordingly (let me know if you would like to see this code > > as well). However, even with this set up I find it hard to figure out > > how to then perform a query such as: > > > # Get all entities that are in some way associated with entity 2 > > (without using entity2.associations property) > > session.query(Entity).filter(or_( > > Entity.forwardAssociations.any(Entity.id==2), > > Entity.backwardAssociations.any(Entity.id==2) > > )).all() > > > The query this generates though uses the same id for both sides of the > > association table which cannot therefore result in a match: > > entities.id = "entitiesEntities".entity1_id AND > > "entitiesEntities".entity2_id = entities.id AND entities.id = ? > > well i think everything you're doing is on the right track. The any() > operator and its friends have just been repaired in the latest trunk > to recognize a self-referential relation and apply the appropriate > aliasing to half of the join condition. I haven't tested it with a > many-to-many self referential yet but I think it should work. give it > a try and let me know what you get; I can add some m2m tests for it > and ensure that its working if its not already. > > we also are working on getting better support for user-defined custom > properties going such that they can be seamlessly used within Queries, > so that you could also construct your query using your "associations" > property, if you can define how comparison operations should be done. > There is a way to do this right now using a slight bit of "non-public" > API, where you can see an example of such > inhttp://www.sqlalchemy.org/trac/browser/sqlalchemy/trunk/examples/vert... > ; the "comparable_property" allows the injection of a Comparator > object from where you can define things like __eq__(), any(), etc. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com 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 -~----------~----~----~----~------~----~------~--~---