提交 2d320e36 编写于 作者: A Aaron Patterson

testing nary nodes in the depth first visitor

上级 a84c34fa
...@@ -92,7 +92,7 @@ def join relation, klass = Nodes::InnerJoin ...@@ -92,7 +92,7 @@ def join relation, klass = Nodes::InnerJoin
klass = Nodes::StringJoin klass = Nodes::StringJoin
end end
from create_join(@ctx.froms, relation, nil, klass) from create_join(@ctx.from, relation, nil, klass)
end end
def having expr def having expr
......
...@@ -47,11 +47,15 @@ def join o ...@@ -47,11 +47,15 @@ def join o
alias :visit_Arel_Nodes_InnerJoin :join alias :visit_Arel_Nodes_InnerJoin :join
alias :visit_Arel_Nodes_OuterJoin :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 def binary o
visit o.left visit o.left
visit o.right visit o.right
end end
alias :visit_Arel_Nodes_And :binary
alias :visit_Arel_Nodes_As :binary alias :visit_Arel_Nodes_As :binary
alias :visit_Arel_Nodes_Assignment :binary alias :visit_Arel_Nodes_Assignment :binary
alias :visit_Arel_Nodes_Between :binary alias :visit_Arel_Nodes_Between :binary
......
...@@ -123,11 +123,17 @@ def visit_Arel_Attribute o ...@@ -123,11 +123,17 @@ def visit_Arel_Attribute o
alias :visit_Arel_Attributes_Boolean :visit_Arel_Attribute alias :visit_Arel_Attributes_Boolean :visit_Arel_Attribute
alias :visit_Arel_Attributes_Attribute :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 def visit_Arel_Nodes_Equality o
visit_edge o, "left" visit_edge o, "left"
visit_edge o, "right" visit_edge o, "right"
end end
alias :visit_Arel_Nodes_And :visit_Arel_Nodes_Equality
alias :visit_Arel_Nodes_Or :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_NotEqual :visit_Arel_Nodes_Equality
alias :visit_Arel_Nodes_GreaterThan :visit_Arel_Nodes_Equality alias :visit_Arel_Nodes_GreaterThan :visit_Arel_Nodes_Equality
......
...@@ -110,9 +110,9 @@ def test_outer_join ...@@ -110,9 +110,9 @@ def test_outer_join
Arel::Nodes::And, Arel::Nodes::And,
].each do |klass| ].each do |klass|
define_method("test_#{klass.name.gsub('::', '_')}") do define_method("test_#{klass.name.gsub('::', '_')}") do
binary = klass.new([:a, :b]) binary = klass.new([:a, :b, :c])
@visitor.accept binary @visitor.accept binary
assert_equal [:a, :b, binary], @collector.calls assert_equal [:a, :b, :c, binary], @collector.calls
end end
end end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册