aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/arel/predications.rb6
-rw-r--r--test/visitors/test_depth_first.rb12
-rw-r--r--test/visitors/test_to_sql.rb4
3 files changed, 16 insertions, 6 deletions
diff --git a/lib/arel/predications.rb b/lib/arel/predications.rb
index 23e68e99f1..58f02a2b53 100644
--- a/lib/arel/predications.rb
+++ b/lib/arel/predications.rb
@@ -36,9 +36,9 @@ module Arel
if other.exclude_end?
left = Nodes::GreaterThanOrEqual.new(self, other.begin)
right = Nodes::LessThan.new(self, other.end)
- Nodes::And.new left, right
+ Nodes::And.new [left, right]
else
- Nodes::Between.new(self, Nodes::And.new(other.begin, other.end))
+ Nodes::Between.new(self, Nodes::And.new([other.begin, other.end]))
end
else
Nodes::In.new self, other
@@ -174,7 +174,7 @@ module Arel
first = send method_id, others.shift
Nodes::Grouping.new others.inject(first) { |memo,expr|
- Nodes::And.new(memo, send(method_id, expr))
+ Nodes::And.new([memo, send(method_id, expr)])
}
end
end
diff --git a/test/visitors/test_depth_first.rb b/test/visitors/test_depth_first.rb
index 1bee0328cf..1f1c7ab361 100644
--- a/test/visitors/test_depth_first.rb
+++ b/test/visitors/test_depth_first.rb
@@ -78,7 +78,6 @@ module Arel
end
[
- Arel::Nodes::And,
Arel::Nodes::Assignment,
Arel::Nodes::Between,
Arel::Nodes::DoesNotMatch,
@@ -106,6 +105,17 @@ module Arel
end
end
+ # N-ary
+ [
+ Arel::Nodes::And,
+ ].each do |klass|
+ define_method("test_#{klass.name.gsub('::', '_')}") do
+ binary = klass.new([:a, :b])
+ @visitor.accept binary
+ assert_equal [:a, :b, binary], @collector.calls
+ end
+ end
+
[
Arel::Attributes::Integer,
Arel::Attributes::Float,
diff --git a/test/visitors/test_to_sql.rb b/test/visitors/test_to_sql.rb
index c49d2a6bdf..80384d3c28 100644
--- a/test/visitors/test_to_sql.rb
+++ b/test/visitors/test_to_sql.rb
@@ -50,7 +50,7 @@ module Arel
end
it "should apply Not to the whole expression" do
- node = Nodes::And.new @attr.eq(10), @attr.eq(11)
+ node = Nodes::And.new [@attr.eq(10), @attr.eq(11)]
sql = @visitor.accept Nodes::Not.new(node)
sql.must_be_like %{NOT ("users"."id" = 10 AND "users"."id" = 11)}
end
@@ -82,7 +82,7 @@ module Arel
end
it "should visit_Arel_Nodes_And" do
- node = Nodes::And.new @attr.eq(10), @attr.eq(11)
+ node = Nodes::And.new [@attr.eq(10), @attr.eq(11)]
@visitor.accept(node).must_be_like %{
"users"."id" = 10 AND "users"."id" = 11
}