提交 98c08535 编写于 作者: A Aaron Patterson

avoid extra empty array allocation

上级 e7baa662
......@@ -75,24 +75,24 @@ def associated_records_by_owner
owners_map = owners_by_key
owner_keys = owners_map.keys.compact
if klass.nil? || owner_keys.empty?
records = []
else
# Each record may have multiple owners, and vice-versa
records_by_owner = Hash[owners.map { |owner| [owner, []] }]
if klass && owner_keys.any?
# Some databases impose a limit on the number of ids in a list (in Oracle it's 1000)
# Make several smaller queries if necessary or make one query if the adapter supports it
sliced = owner_keys.each_slice(klass.connection.in_clause_length || owner_keys.size)
records = sliced.flat_map { |slice| records_for(slice) }
end
# Each record may have multiple owners, and vice-versa
records_by_owner = Hash[owners.map { |owner| [owner, []] }]
records.each do |record|
owner_key = owner_id_for records, record
records.each do |record|
owner_key = owner_id_for records, record
owners_map[owner_key].each do |owner|
records_by_owner[owner] << record
owners_map[owner_key].each do |owner|
records_by_owner[owner] << record
end
end
end
records_by_owner
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册