提交 02eaa7ee 编写于 作者: A Aaron Patterson

Merge branch 'master' of github.com:rails/arel

* 'master' of github.com:rails/arel:
  Allow HAVING to take multiple conditions, like WHERE
......@@ -97,10 +97,8 @@ def join relation, klass = Nodes::InnerJoin
self
end
def having expr
expr = Nodes::SqlLiteral.new(expr) if String === expr
@ctx.having = Nodes::Having.new(expr)
def having *exprs
@ctx.having = Nodes::Having.new(collapse(exprs, @ctx.having))
self
end
......@@ -211,16 +209,22 @@ def insert values
end
private
def collapse exprs
return exprs.first if exprs.length == 1
create_and exprs.compact.map { |expr|
def collapse exprs, existing = nil
exprs = exprs.unshift(existing.expr) if existing
exprs = exprs.compact.map { |expr|
if String === expr
# FIXME: Don't do this automatically
Arel.sql(expr)
else
expr
end
}
if exprs.length == 1
exprs.first
else
create_and exprs
end
end
end
end
......@@ -99,13 +99,28 @@ def test_join_sources
end
end
describe '#having' do
describe 'having' do
it 'converts strings to SQLLiterals' do
table = Table.new :users
mgr = table.from table
mgr.having 'foo'
mgr.to_sql.must_be_like %{ SELECT FROM "users" HAVING foo }
end
it 'can have multiple items specified separately' do
table = Table.new :users
mgr = table.from table
mgr.having 'foo'
mgr.having 'bar'
mgr.to_sql.must_be_like %{ SELECT FROM "users" HAVING foo AND bar }
end
it 'can have multiple items specified together' do
table = Table.new :users
mgr = table.from table
mgr.having 'foo', 'bar'
mgr.to_sql.must_be_like %{ SELECT FROM "users" HAVING foo AND bar }
end
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册