aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/arel/factory_methods.rb4
-rw-r--r--lib/arel/select_manager.rb2
-rw-r--r--test/test_select_manager.rb8
3 files changed, 13 insertions, 1 deletions
diff --git a/lib/arel/factory_methods.rb b/lib/arel/factory_methods.rb
index 8fcb78069f..e45cc21170 100644
--- a/lib/arel/factory_methods.rb
+++ b/lib/arel/factory_methods.rb
@@ -9,5 +9,9 @@ module Arel
def create_string_join from, to
create_join from, to, nil, Nodes::StringJoin
end
+
+ def create_and clauses
+ Nodes::And.new clauses
+ end
end
end
diff --git a/lib/arel/select_manager.rb b/lib/arel/select_manager.rb
index 40e197910b..f8b3089a82 100644
--- a/lib/arel/select_manager.rb
+++ b/lib/arel/select_manager.rb
@@ -198,7 +198,7 @@ module Arel
def collapse exprs
return exprs.first if exprs.length == 1
- Nodes::And.new exprs.compact.map { |expr|
+ create_and exprs.compact.map { |expr|
if String === expr
Arel.sql(expr)
else
diff --git a/test/test_select_manager.rb b/test/test_select_manager.rb
index 672b5ea78d..dec1c2d8c7 100644
--- a/test/test_select_manager.rb
+++ b/test/test_select_manager.rb
@@ -282,6 +282,14 @@ module Arel
assert_equal [], relation.froms
end
+ it 'should create and nodes' do
+ relation = Arel::SelectManager.new Table.engine
+ children = ['foo', 'bar', 'baz']
+ clause = relation.create_and children
+ assert_kind_of Arel::Nodes::And, clause
+ assert_equal children, clause.children
+ end
+
it 'should create join nodes' do
relation = Arel::SelectManager.new Table.engine
join = relation.create_join 'foo', 'bar', 'baz'