1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Use unscoped instead of with_exclusive_scope for preloading

This commit is contained in:
Pratik Naik 2010-01-20 16:11:14 +05:30
parent 5502780c69
commit 8a1be22849

View file

@ -187,13 +187,12 @@ module ActiveRecord
conditions = "t0.#{reflection.primary_key_name} #{in_or_equals_for_ids(ids)}" conditions = "t0.#{reflection.primary_key_name} #{in_or_equals_for_ids(ids)}"
conditions << append_conditions(reflection, preload_options) conditions << append_conditions(reflection, preload_options)
associated_records = reflection.klass.with_exclusive_scope do associated_records = reflection.klass.unscoped.where([conditions, ids]).
reflection.klass.where([conditions, ids]).
includes(options[:include]). includes(options[:include]).
joins("INNER JOIN #{connection.quote_table_name options[:join_table]} t0 ON #{reflection.klass.quoted_table_name}.#{reflection.klass.primary_key} = t0.#{reflection.association_foreign_key}"). joins("INNER JOIN #{connection.quote_table_name options[:join_table]} t0 ON #{reflection.klass.quoted_table_name}.#{reflection.klass.primary_key} = t0.#{reflection.association_foreign_key}").
select("#{options[:select] || table_name+'.*'}, t0.#{reflection.primary_key_name} as the_parent_record_id"). select("#{options[:select] || table_name+'.*'}, t0.#{reflection.primary_key_name} as the_parent_record_id").
order(options[:order]).to_a order(options[:order]).to_a
end
set_association_collection_records(id_to_record_map, reflection.name, associated_records, 'the_parent_record_id') set_association_collection_records(id_to_record_map, reflection.name, associated_records, 'the_parent_record_id')
end end
@ -341,9 +340,7 @@ module ActiveRecord
conditions = "#{table_name}.#{connection.quote_column_name(primary_key)} #{in_or_equals_for_ids(ids)}" conditions = "#{table_name}.#{connection.quote_column_name(primary_key)} #{in_or_equals_for_ids(ids)}"
conditions << append_conditions(reflection, preload_options) conditions << append_conditions(reflection, preload_options)
associated_records = klass.with_exclusive_scope do associated_records = klass.unscoped.where([conditions, ids]).apply_finder_options(options.slice(:include, :select, :joins, :order)).to_a
klass.where([conditions, ids]).apply_finder_options(options.slice(:include, :select, :joins, :order)).to_a
end
set_association_single_records(id_map, reflection.name, associated_records, primary_key) set_association_single_records(id_map, reflection.name, associated_records, primary_key)
end end
@ -362,14 +359,16 @@ module ActiveRecord
conditions << append_conditions(reflection, preload_options) conditions << append_conditions(reflection, preload_options)
reflection.klass.with_exclusive_scope do find_options = {
reflection.klass.select(preload_options[:select] || options[:select] || "#{table_name}.*"). :select => preload_options[:select] || options[:select] || "#{table_name}.*",
includes(preload_options[:include] || options[:include]). :include => preload_options[:include] || options[:include],
where([conditions, ids]). :conditions => [conditions, ids],
joins(options[:joins]). :joins => options[:joins],
group(preload_options[:group] || options[:group]). :group => preload_options[:group] || options[:group],
order(preload_options[:order] || options[:order]) :order => preload_options[:order] || options[:order]
end }
reflection.klass.unscoped.apply_finder_options(find_options).to_a
end end