diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2019-08-02 03:35:44 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2019-08-02 03:35:44 +0900 |
commit | e6f953fc395e3ff2fdea1ff60743f83f73158e7b (patch) | |
tree | 4ddefb15f63481a5f952e990eb031907c3d1f79b /activerecord/lib/active_record | |
parent | ad957273f506a57af19f7b6a1436060f49291165 (diff) | |
download | rails-e6f953fc395e3ff2fdea1ff60743f83f73158e7b.tar.gz rails-e6f953fc395e3ff2fdea1ff60743f83f73158e7b.tar.bz2 rails-e6f953fc395e3ff2fdea1ff60743f83f73158e7b.zip |
Deduplicate joins values
#36805 have one possible regression that failing deduplication if
`joins_values` have complex order (e.g. `joins_values = [join_node_a,
:comments, :tags, join_node_a]`).
This fixes the deduplication to take it in the first phase before
grouping.
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r-- | activerecord/lib/active_record/relation/query_methods.rb | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/relation/query_methods.rb b/activerecord/lib/active_record/relation/query_methods.rb index 29e2e2cedc..2876bae302 100644 --- a/activerecord/lib/active_record/relation/query_methods.rb +++ b/activerecord/lib/active_record/relation/query_methods.rb @@ -1114,7 +1114,7 @@ module ActiveRecord else join end - end.compact_blank! + end.compact_blank!.uniq! while joins.first.is_a?(Arel::Nodes::Join) join_node = joins.shift @@ -1144,8 +1144,8 @@ module ActiveRecord def build_join_query(manager, buckets, join_type, aliases) association_joins = buckets[:association_join] stashed_joins = buckets[:stashed_join] - leading_joins = buckets[:leading_join].tap(&:uniq!) - join_nodes = buckets[:join_node].tap(&:uniq!) + leading_joins = buckets[:leading_join] + join_nodes = buckets[:join_node] join_sources = manager.join_sources join_sources.concat(leading_joins) unless leading_joins.empty? |