aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/arel/visitors/to_sql.rb14
-rw-r--r--test/test_select_manager.rb30
2 files changed, 40 insertions, 4 deletions
diff --git a/lib/arel/visitors/to_sql.rb b/lib/arel/visitors/to_sql.rb
index ba176a552c..6f72fdfb0e 100644
--- a/lib/arel/visitors/to_sql.rb
+++ b/lib/arel/visitors/to_sql.rb
@@ -572,8 +572,11 @@ module Arel
visit o.left, collector
end
- def visit_Arel_Nodes_FullOuterJoin o
- "FULL OUTER JOIN #{visit o.left} #{visit o.right}"
+ def visit_Arel_Nodes_FullOuterJoin o, collector
+ collector << "FULL OUTER JOIN "
+ collector = visit o.left, collector
+ collector << SPACE
+ visit o.right, collector
end
def visit_Arel_Nodes_OuterJoin o, collector
@@ -583,8 +586,11 @@ module Arel
visit o.right, collector
end
- def visit_Arel_Nodes_RightOuterJoin o
- "RIGHT OUTER JOIN #{visit o.left} #{visit o.right}"
+ def visit_Arel_Nodes_RightOuterJoin o, collector
+ collector << "RIGHT OUTER JOIN "
+ collector = visit o.left, collector
+ collector << SPACE
+ visit o.right, collector
end
def visit_Arel_Nodes_InnerJoin o, collector
diff --git a/test/test_select_manager.rb b/test/test_select_manager.rb
index 7192027df4..8425cee031 100644
--- a/test/test_select_manager.rb
+++ b/test/test_select_manager.rb
@@ -584,6 +584,36 @@ module Arel
}
end
+ it 'takes the full outer join class' do
+ left = Table.new :users
+ right = left.alias
+ predicate = left[:id].eq(right[:id])
+ manager = Arel::SelectManager.new
+
+ manager.from left
+ manager.join(right, Nodes::FullOuterJoin).on(predicate)
+ manager.to_sql.must_be_like %{
+ SELECT FROM "users"
+ FULL OUTER JOIN "users" "users_2"
+ ON "users"."id" = "users_2"."id"
+ }
+ end
+
+ it 'takes the right outer join class' do
+ left = Table.new :users
+ right = left.alias
+ predicate = left[:id].eq(right[:id])
+ manager = Arel::SelectManager.new
+
+ manager.from left
+ manager.join(right, Nodes::RightOuterJoin).on(predicate)
+ manager.to_sql.must_be_like %{
+ SELECT FROM "users"
+ RIGHT OUTER JOIN "users" "users_2"
+ ON "users"."id" = "users_2"."id"
+ }
+ end
+
it 'noops on nil' do
manager = Arel::SelectManager.new
manager.join(nil).must_equal manager