aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-10-10 14:12:04 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2013-10-10 14:12:04 -0700
commitd20ccb7e632665b6661e82ae450e8180e3c085f9 (patch)
tree8da2dd6a203be7a24b0188883f008c954c616e67
parente4ec9ce78d879fc20bae0c5c7886a3bdbfab096c (diff)
downloadrails-d20ccb7e632665b6661e82ae450e8180e3c085f9.tar.gz
rails-d20ccb7e632665b6661e82ae450e8180e3c085f9.tar.bz2
rails-d20ccb7e632665b6661e82ae450e8180e3c085f9.zip
stuff the join dependency object in the "anything goes" hash.
-rw-r--r--activerecord/lib/active_record/associations/join_dependency.rb4
-rw-r--r--activerecord/lib/active_record/relation/finder_methods.rb2
-rw-r--r--activerecord/lib/active_record/relation/merger.rb2
-rw-r--r--activerecord/lib/active_record/relation/query_methods.rb6
4 files changed, 8 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/associations/join_dependency.rb b/activerecord/lib/active_record/associations/join_dependency.rb
index fb5c7ff374..bc235cf63d 100644
--- a/activerecord/lib/active_record/associations/join_dependency.rb
+++ b/activerecord/lib/active_record/associations/join_dependency.rb
@@ -79,10 +79,10 @@ module ActiveRecord
join_root.drop(1).map!(&:reflection)
end
- def join_relation(relation)
+ def outer_joins
nodes = join_root.drop 1
nodes.each { |n| n.join_type = Arel::OuterJoin }
- relation.joins(nodes)
+ nodes
end
def join_constraints
diff --git a/activerecord/lib/active_record/relation/finder_methods.rb b/activerecord/lib/active_record/relation/finder_methods.rb
index 0132a02f83..d5eb1edf77 100644
--- a/activerecord/lib/active_record/relation/finder_methods.rb
+++ b/activerecord/lib/active_record/relation/finder_methods.rb
@@ -267,7 +267,7 @@ module ActiveRecord
def apply_join_dependency(relation, join_dependency)
relation = relation.except(:includes, :eager_load, :preload)
- relation = join_dependency.join_relation(relation)
+ relation = relation.joins join_dependency
if using_limitable_reflections?(join_dependency.reflections)
relation
diff --git a/activerecord/lib/active_record/relation/merger.rb b/activerecord/lib/active_record/relation/merger.rb
index c05632e688..182b9ed89c 100644
--- a/activerecord/lib/active_record/relation/merger.rb
+++ b/activerecord/lib/active_record/relation/merger.rb
@@ -94,7 +94,7 @@ module ActiveRecord
[])
relation.joins! rest
- @relation = join_dependency.join_relation(relation)
+ @relation = relation.joins join_dependency
end
end
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb
index 776360fc55..364c7ec418 100644
--- a/activerecord/lib/active_record/relation/query_methods.rb
+++ b/activerecord/lib/active_record/relation/query_methods.rb
@@ -928,7 +928,7 @@ module ActiveRecord
:string_join
when Hash, Symbol, Array
:association_join
- when ActiveRecord::Associations::JoinDependency::JoinAssociation
+ when ActiveRecord::Associations::JoinDependency
:stashed_join
when Arel::Nodes::Join
:join_node
@@ -950,7 +950,9 @@ module ActiveRecord
join_list
)
- join_dependency.graft(stashed_association_joins)
+ stashed_association_joins.each do |dep|
+ join_dependency.graft dep.outer_joins
+ end
joins = join_dependency.join_constraints