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
-~----------~----~----~----~------~----~------~--~---

Reply via email to