diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2019-04-26 20:03:03 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2019-04-27 21:43:57 +0900 |
commit | 20ede2e2e6e28cf26da4d056cd7638b27d48ed57 (patch) | |
tree | 0c8d93b49aa2d2d015f34279316e5bfa7dcb2985 /activerecord/lib/active_record/relation/finder_methods.rb | |
parent | bbc3704bb38d9739d46d94d12a2a854f47b52cbe (diff) | |
download | rails-20ede2e2e6e28cf26da4d056cd7638b27d48ed57.tar.gz rails-20ede2e2e6e28cf26da4d056cd7638b27d48ed57.tar.bz2 rails-20ede2e2e6e28cf26da4d056cd7638b27d48ed57.zip |
Fix merging left_joins to maintain its own `join_type` context
This fixes a regression for #35864.
Usually, stashed joins (mainly eager loading) are performed as LEFT
JOINs.
But the case of merging joins/left_joins of different class, that
(stashed) joins are performed as the same `join_type` as the parent
context for now.
Since #35864, both (joins/left_joins) stashed joins might be contained
in `joins_values`, so each stashed joins should maintain its own
`join_type` context.
Fixes #36103.
Diffstat (limited to 'activerecord/lib/active_record/relation/finder_methods.rb')
-rw-r--r-- | activerecord/lib/active_record/relation/finder_methods.rb | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/relation/finder_methods.rb b/activerecord/lib/active_record/relation/finder_methods.rb index 9450e4d3c5..9c7ac80447 100644 --- a/activerecord/lib/active_record/relation/finder_methods.rb +++ b/activerecord/lib/active_record/relation/finder_methods.rb @@ -371,7 +371,9 @@ module ActiveRecord end def apply_join_dependency(eager_loading: group_values.empty?) - join_dependency = construct_join_dependency(eager_load_values + includes_values) + join_dependency = construct_join_dependency( + eager_load_values + includes_values, Arel::Nodes::OuterJoin + ) relation = except(:includes, :eager_load, :preload).joins!(join_dependency) if eager_loading && !using_limitable_reflections?(join_dependency.reflections) |