This is a cool idea. In your first email you mentioned << and >> for joins, which I don't particularly like (especially since << is already used to insert rows).
In your pastie though, it seems you're just using passing in datasets to join(), which is a cool approach. Just make sure all the existing specs pass, and to add some new specs for this new behavior. Aman Gupta 2008/1/19 Inviz <[EMAIL PROTECTED]>: > > http://p.caboo.se/141009 > Here is a proof of concept that has 70% of the stated features > implemented. If you could test it, it'd be great. > > > On 19 янв, 20:53, Inviz <[EMAIL PROTECTED]> wrote: > > This is a proposal on automated query joiner. > > > > Let's assume we have 2 queries: > > > > user_query = User.select(:id, :login).filter{:name != > > "guest"}.sort_by(:id.desc) > > group_query = Group.select(:id, :name).filter{:id != > > 1}.sort_by(:id.asc) > > > > Let's say we want to fetch this all in one query. In current sequel > > implementation we do this: > > > > User.select(:user__id, :user__login, :group__id, > > :group__name).join(:groups, :user__group_id > > => :group__id).filter{:user__name != "guest" && :group__id != > > 1}.order_by(:user__id.desc, :group__id.asc).sql > > > > => "SELECT user.`id`, user.`login`, group.`id`, group.`name` FROM > > users INNER JOIN groups ON (user.`group_id` = group.`id`) WHERE ((NOT > > (user.`name` = 'guest')) AND (NOT (group.`id` = 1))) ORDER BY > > user.`id` DESC, group.`id` ASC" > > > > Mess? Yes it is. Not much different from usual SQL. Not even shorter. > > > > Now, let's try this: > > > > user_query << [group_query, :user__group_id => :group__id] > > # << is for left join > > # >> is for right > > > > => "SELECT user.`id`, user.`login`, group.`id`, group.`name` FROM > > users INNER JOIN groups ON (user.`group_id` = group.`id`) WHERE ((NOT > > (user.`name` = 'guest')) AND (NOT (group.`id` = 1))) ORDER BY > > user.`id` DESC, group.`id` ASC" > > > > What it does is conjucts 2 already built query objects. Conjucts and > > automatically prefixes *select* statements. Conjucts orders and > > conditions. > > > > We can make it a little bit magical. > > > > imagine this: > > class User > > def group > > Group.select(:id => group_id) > > end > > end > > > > user_query << group_query #here we omit the JOIN conditions, sequel > > take it from "group" definition of User. > > > > Isn't that readable and cool? It even can use built in subsets > > feature! > > That's the bomb. And pretty easy to implement > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sequel-talk" 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/sequel-talk?hl=en -~----------~----~----~----~------~----~------~--~---
