Skip to content

Instantly share code, notes, and snippets.

@nathansobo
Created April 9, 2010 00:26
Show Gist options
  • Save nathansobo/360716 to your computer and use it in GitHub Desktop.
Save nathansobo/360716 to your computer and use it in GitHub Desktop.
Monarch's server side model achieves parity with Arel on the SQL generation front.
specify "joins to groupings" do
blog_post_counts =
Blog.left_join_to(BlogPost).
group_by(Blog[:id]).
project(Blog[:id].as(:blog_id), BlogPost[:id].count.as(:num_posts))
Blog.join_to(blog_post_counts).project(:title, :num_posts).to_sql.should be_like(%{
select
blogs.title,
t1.num_posts
from
blogs, (
select
blogs.id as blog_id,
count(blog_posts.id) as num_posts
from
blogs
left outer join blog_posts
on blogs.id = blog_posts.blog_id
group by blogs.id
) as t1
where
blogs.id = t1.blog_id
})
Blog.join_to(blog_post_counts).to_update_sql(:title => blog_post_counts[:num_posts]).should be_like(%{
update
blogs, (
select
blogs.id as blog_id,
count(blog_posts.id) as num_posts
from
blogs
left outer join blog_posts
on blogs.id = blog_posts.blog_id
group by blogs.id
) as t1
set
blogs.title = t1.num_posts
where
blogs.id = t1.blog_id
})
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment