aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2013-10-21 14:30:50 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2013-10-21 14:30:50 -0700
commit10b2aa28872b99db42d60c64a25a79daee651839 (patch)
treecc136f6fa99eee9e0ba5608c5c28ee3b272d0488 /activerecord/lib/active_record
parent0480b8c717c3a76c8d7fa30236d5a843c8a675b2 (diff)
downloadrails-10b2aa28872b99db42d60c64a25a79daee651839.tar.gz
rails-10b2aa28872b99db42d60c64a25a79daee651839.tar.bz2
rails-10b2aa28872b99db42d60c64a25a79daee651839.zip
refactor outer join generation
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/associations/join_dependency.rb17
1 files changed, 6 insertions, 11 deletions
diff --git a/activerecord/lib/active_record/associations/join_dependency.rb b/activerecord/lib/active_record/associations/join_dependency.rb
index 1ffa4a0a6b..7e5a8728ee 100644
--- a/activerecord/lib/active_record/associations/join_dependency.rb
+++ b/activerecord/lib/active_record/associations/join_dependency.rb
@@ -85,22 +85,17 @@ module ActiveRecord
end
def join_constraints(outer_joins)
- if outer_joins.any?
- oj = outer_joins.first
+ joins = make_joins join_root
+ joins.concat outer_joins.flat_map { |oj|
if join_root.match? oj.join_root
- joins = make_joins join_root
- joins + walk(join_root, oj.join_root)
+ walk join_root, oj.join_root
else
- make_joins(join_root) + outer_joins.flat_map { |join|
- join.join_root.children.flat_map { |child|
- make_the_joins(join_root, child)
- }
+ oj.join_root.children.flat_map { |child|
+ make_the_joins(join_root, child)
}
end
- else
- make_joins join_root
- end
+ }
end
class Aliases