aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/arel/select_manager.rb2
-rw-r--r--lib/arel/visitors/depth_first.rb6
-rw-r--r--lib/arel/visitors/dot.rb8
-rw-r--r--test/visitors/test_depth_first.rb4
4 files changed, 15 insertions, 5 deletions
diff --git a/lib/arel/select_manager.rb b/lib/arel/select_manager.rb
index 09491c988b..372b6aae6f 100644
--- a/lib/arel/select_manager.rb
+++ b/lib/arel/select_manager.rb
@@ -92,7 +92,7 @@ module Arel
klass = Nodes::StringJoin
end
- from create_join(@ctx.froms, relation, nil, klass)
+ from create_join(@ctx.from, relation, nil, klass)
end
def having expr
diff --git a/lib/arel/visitors/depth_first.rb b/lib/arel/visitors/depth_first.rb
index 00f18727f0..49133653c5 100644
--- a/lib/arel/visitors/depth_first.rb
+++ b/lib/arel/visitors/depth_first.rb
@@ -47,11 +47,15 @@ module Arel
alias :visit_Arel_Nodes_InnerJoin :join
alias :visit_Arel_Nodes_OuterJoin :join
+ def nary o
+ o.children.each { |child| visit child }
+ end
+ alias :visit_Arel_Nodes_And :nary
+
def binary o
visit o.left
visit o.right
end
- alias :visit_Arel_Nodes_And :binary
alias :visit_Arel_Nodes_As :binary
alias :visit_Arel_Nodes_Assignment :binary
alias :visit_Arel_Nodes_Between :binary
diff --git a/lib/arel/visitors/dot.rb b/lib/arel/visitors/dot.rb
index eab5e4afdc..4f80f31421 100644
--- a/lib/arel/visitors/dot.rb
+++ b/lib/arel/visitors/dot.rb
@@ -123,11 +123,17 @@ module Arel
alias :visit_Arel_Attributes_Boolean :visit_Arel_Attribute
alias :visit_Arel_Attributes_Attribute :visit_Arel_Attribute
+ def nary o
+ o.children.each_with_index do |x,i|
+ edge(i) { visit x }
+ end
+ end
+ alias :visit_Arel_Nodes_And :nary
+
def visit_Arel_Nodes_Equality o
visit_edge o, "left"
visit_edge o, "right"
end
- alias :visit_Arel_Nodes_And :visit_Arel_Nodes_Equality
alias :visit_Arel_Nodes_Or :visit_Arel_Nodes_Equality
alias :visit_Arel_Nodes_NotEqual :visit_Arel_Nodes_Equality
alias :visit_Arel_Nodes_GreaterThan :visit_Arel_Nodes_Equality
diff --git a/test/visitors/test_depth_first.rb b/test/visitors/test_depth_first.rb
index 1f1c7ab361..7d7324f627 100644
--- a/test/visitors/test_depth_first.rb
+++ b/test/visitors/test_depth_first.rb
@@ -110,9 +110,9 @@ module Arel
Arel::Nodes::And,
].each do |klass|
define_method("test_#{klass.name.gsub('::', '_')}") do
- binary = klass.new([:a, :b])
+ binary = klass.new([:a, :b, :c])
@visitor.accept binary
- assert_equal [:a, :b, binary], @collector.calls
+ assert_equal [:a, :b, :c, binary], @collector.calls
end
end