aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/arel/nodes/string_join.rb3
-rw-r--r--lib/arel/visitors/depth_first.rb5
-rw-r--r--lib/arel/visitors/join_sql.rb7
-rw-r--r--test/test_select_manager.rb2
-rw-r--r--test/visitors/test_depth_first.rb5
-rw-r--r--test/visitors/test_join_sql.rb5
6 files changed, 16 insertions, 11 deletions
diff --git a/lib/arel/nodes/string_join.rb b/lib/arel/nodes/string_join.rb
index b5420e2dfc..7fb0033c0f 100644
--- a/lib/arel/nodes/string_join.rb
+++ b/lib/arel/nodes/string_join.rb
@@ -1,6 +1,9 @@
module Arel
module Nodes
class StringJoin < Arel::Nodes::Join
+ def initialize left, right = nil
+ super
+ end
end
end
end
diff --git a/lib/arel/visitors/depth_first.rb b/lib/arel/visitors/depth_first.rb
index 5ebd1296dd..eec356af4c 100644
--- a/lib/arel/visitors/depth_first.rb
+++ b/lib/arel/visitors/depth_first.rb
@@ -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
diff --git a/lib/arel/visitors/join_sql.rb b/lib/arel/visitors/join_sql.rb
index 8c31934cd0..1cdd7eb5ca 100644
--- a/lib/arel/visitors/join_sql.rb
+++ b/lib/arel/visitors/join_sql.rb
@@ -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
diff --git a/test/test_select_manager.rb b/test/test_select_manager.rb
index 761ebdaee3..15153d3523 100644
--- a/test/test_select_manager.rb
+++ b/test/test_select_manager.rb
@@ -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
diff --git a/test/visitors/test_depth_first.rb b/test/visitors/test_depth_first.rb
index 34931c783e..4bce468183 100644
--- a/test/visitors/test_depth_first.rb
+++ b/test/visitors/test_depth_first.rb
@@ -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,
diff --git a/test/visitors/test_join_sql.rb b/test/visitors/test_join_sql.rb
index b0eba172e6..b672f88ecf 100644
--- a/test/visitors/test_join_sql.rb
+++ b/test/visitors/test_join_sql.rb
@@ -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