1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

string join should be a unary op

This commit is contained in:
Aaron Patterson 2010-12-14 11:04:08 -08:00
parent 7c48c8360e
commit 24d598fad1
6 changed files with 16 additions and 11 deletions

View file

@ -1,6 +1,9 @@
module Arel
module Nodes
class StringJoin < Arel::Nodes::Join
def initialize left, right = nil
super
end
end
end
end

View file

@ -67,10 +67,13 @@ module Arel
alias :visit_Arel_Nodes_Or :binary
alias :visit_Arel_Nodes_Ordering :binary
alias :visit_Arel_Nodes_OuterJoin :binary
alias :visit_Arel_Nodes_StringJoin :binary
alias :visit_Arel_Nodes_TableAlias :binary
alias :visit_Arel_Nodes_Values :binary
def visit_Arel_Nodes_StringJoin o
visit o.left
end
def visit_Arel_Attribute o
visit o.relation
visit o.name

View file

@ -14,13 +14,6 @@ module Arel
def visit_Arel_Nodes_SelectCore o
o.source.right.map { |j| visit j }.join ' '
end
def visit_Arel_Nodes_StringJoin o
[
(visit o.left if Nodes::Join === o.left),
visit(o.right)
].compact.join ' '
end
end
end
end

View file

@ -367,7 +367,7 @@ module Arel
it 'returns string join sql' do
table = Table.new :users
manager = Arel::SelectManager.new Table.engine
manager.from Nodes::StringJoin.new(table, 'hello')
manager.from Nodes::StringJoin.new('hello')
manager.join_sql.must_be_like %{ 'hello' }
end

View file

@ -29,6 +29,7 @@ module Arel
Arel::Nodes::Grouping,
Arel::Nodes::Offset,
Arel::Nodes::Having,
Arel::Nodes::StringJoin,
Arel::Nodes::UnqualifiedColumn,
].each do |klass|
define_method("test_#{klass.name.gsub('::', '_')}") do
@ -91,7 +92,6 @@ module Arel
Arel::Nodes::NotEqual,
Arel::Nodes::NotIn,
Arel::Nodes::Or,
Arel::Nodes::StringJoin,
Arel::Nodes::TableAlias,
Arel::Nodes::Values,
Arel::Nodes::As,
@ -176,7 +176,8 @@ module Arel
@visitor.accept core
assert_equal [
:a, core.projections,
:b,
:b, [],
core.source,
:c, core.wheres,
:d, core.groups,
:e,

View file

@ -8,6 +8,11 @@ module Arel
@visitor.extend(JoinSql)
end
it 'should visit string join' do
sql = @visitor.accept Nodes::StringJoin.new('omg')
sql.must_be_like "'omg'"
end
describe 'inner join' do
it 'should visit left if left is a join' do
t = Table.new :users