On 6/2/07, Michael Bayer <[EMAIL PROTECTED]> wrote: > > > On Jun 2, 2007, at 6:02 AM, Gaetan de Menten wrote: > > > Hmmm, after some more thoughts there is one little aspect of that > > which bothers me: once you joined to something, you can't add > > filtering criteria on the initial table/class. This is actually one of > > the features I disliked about the current code. It might be rare use > > case but I, for one, like to be able to construct queries in any > > order, so that I can factor out the common part and store it somewhere > > then add what is specific at a later point. Here, if the specific part > > is about the initial table, I'm screwed. Adding a method to just > > move/reset the joinpoint would solve this, though I find it ugly. > > Better than nothing though. > > > > This would look like this: > > > > q = session.query(User).join(['orders', 'items']).filter_by > > (item_name='foo'). > > user_query = q.join(['addresses']).filter_by > > (email_address='[EMAIL PROTECTED]').reset_joinpoint() > > > > users = user_query.filter_by(name='Foo').list() > > yeah i had that idea as well, and yeah its a little ugly. theres > also the possiblity of using join(None). > > let me summarize things that im thinking we do: > > - we want to go with the joinpoint concept here, where join() starts > from the beginning, and join(None)/reset_joinpoint brings it back.
I'd personally vote for join(None). Seem pretty logical if join starts from the beginning and doesn't introduce a new method (IMHO there are already too many of them on query objects). > join() is used to add a join and also modify the joinpoint of the > query, so that you can add more criterion using filter() or filter_by > () or others. I think this particuar tweak would probably even be OK > to put in the current trunk for release 0.3.8 unless people think its > going to create problems...the only backwards-incompatible change > being a join() starts from the beginning, not the previous join(). > > - i think filter_by(['list','of','properties'], **kwargs), i.e. an > optional, positional string/list-of-strings argument, should also be > present, and it will create the joins and criterion using table > aliases, and will not be related to joinpoint at all. apparently > django does this, and it would let us define criterion for multiple > overlapping paths, such as q.filter_by(['a', 'b, 'c'], d=x).filter_by > (['a', 'b', 'e'], d=x). thats something that you cant do with the > straight join() alone (but of course you can do with explicit aliases > and filter()/select_from()). That'd be pretty nice to have that alias feature, because in that case you could join several times to the same table through different relationships easily. > - the "auto find me a property" behavior is gone. not sure if I want > to remove it from select_by() and friends, i think it should probably > remain in those in a deprecated state. > > - ClauseElement support would be removed from filter_by(). you can > just use filter() for those. the older _by() methods, which i want > to deprecate, would be left alone for backwards compatibility. What do you replace order_by with? > - i want to deprecate all the criterion methods that are not filter, > i.e. all the selects and most of the gets (except straight get()). > selecting from a full statement we can do with query.from_statement > (<select statement>), the argument of which is a select() or a string. > > deprecating select() and select_by() is to create a single simple > interface to query based on the more flexible filter(). but it does > mean a bit more typing in many cases. I would hope everyone is OK > with that. I'd personally like this but that's probably because I don't use those much. But I think many people are using those so that might be an unpopular move. As such, it would probably deserve a thread on its own, so that people would actually have a chance to react... -- Gaƫtan de Menten http://openhex.org --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---