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:
parent
7c48c8360e
commit
24d598fad1
6 changed files with 16 additions and 11 deletions
|
@ -1,6 +1,9 @@
|
|||
module Arel
|
||||
module Nodes
|
||||
class StringJoin < Arel::Nodes::Join
|
||||
def initialize left, right = nil
|
||||
super
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue