aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/association_preload.rb
diff options
context:
space:
mode:
authorFrederick Cheung <frederick.cheung@gmail.com>2008-04-25 23:23:48 +0100
committerMichael Koziarski <michael@koziarski.com>2008-04-26 12:14:50 +1200
commit44d214235271cb6d2af1c327d592a3010e1ced3e (patch)
tree5db346cc10ff1dab291e62545a2480a819271f74 /activerecord/lib/active_record/association_preload.rb
parenta37546517dad9f6d9a7de6e1dba4d960909d71e8 (diff)
downloadrails-44d214235271cb6d2af1c327d592a3010e1ced3e.tar.gz
rails-44d214235271cb6d2af1c327d592a3010e1ced3e.tar.bz2
rails-44d214235271cb6d2af1c327d592a3010e1ced3e.zip
Ensure table names are quoted by the association preloading code.
[#45 state:resolved] Signed-off-by: Michael Koziarski <michael@koziarski.com>
Diffstat (limited to 'activerecord/lib/active_record/association_preload.rb')
-rw-r--r--activerecord/lib/active_record/association_preload.rb16
1 files changed, 7 insertions, 9 deletions
diff --git a/activerecord/lib/active_record/association_preload.rb b/activerecord/lib/active_record/association_preload.rb
index 7e4f7a5d4a..55c0cdd808 100644
--- a/activerecord/lib/active_record/association_preload.rb
+++ b/activerecord/lib/active_record/association_preload.rb
@@ -85,9 +85,8 @@ module ActiveRecord
return id_to_record_map, ids
end
- # FIXME: quoting
def preload_has_and_belongs_to_many_association(records, reflection, preload_options={})
- table_name = reflection.klass.table_name
+ table_name = reflection.klass.quoted_table_name
id_to_record_map, ids = construct_id_map(records)
records.each {|record| record.send(reflection.name).loaded}
options = reflection.options
@@ -97,7 +96,7 @@ module ActiveRecord
associated_records = reflection.klass.find(:all, :conditions => [conditions, ids],
:include => options[:include],
- :joins => "INNER JOIN #{options[:join_table]} as t0 ON #{reflection.klass.table_name}.#{reflection.klass.primary_key} = t0.#{reflection.association_foreign_key}",
+ :joins => "INNER JOIN #{connection.quote_table_name options[:join_table]} as 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 _parent_record_id",
:order => options[:order])
@@ -157,7 +156,7 @@ module ActiveRecord
if reflection.options[:source_type]
interface = reflection.source_reflection.options[:foreign_type]
- preload_options = {:conditions => ["#{interface} = ?", reflection.options[:source_type]]}
+ preload_options = {:conditions => ["#{connection.quote_column_name interface} = ?", reflection.options[:source_type]]}
records.compact!
records.first.class.preload_associations(records, through_association, preload_options)
@@ -216,7 +215,7 @@ module ActiveRecord
klass_name, id_map = *klass_and_id
klass = klass_name.constantize
- table_name = klass.table_name
+ table_name = klass.quoted_table_name
primary_key = klass.primary_key
conditions = "#{table_name}.#{primary_key} IN (?)"
conditions << append_conditions(options, preload_options)
@@ -229,16 +228,15 @@ module ActiveRecord
end
end
- # FIXME: quoting
def find_associated_records(ids, reflection, preload_options)
options = reflection.options
- table_name = reflection.klass.table_name
+ table_name = reflection.klass.quoted_table_name
if interface = reflection.options[:as]
- conditions = "#{reflection.klass.table_name}.#{interface}_id IN (?) and #{reflection.klass.table_name}.#{interface}_type = '#{self.base_class.name.demodulize}'"
+ conditions = "#{reflection.klass.quoted_table_name}.#{connection.quote_column_name "#{interface}_id"} IN (?) and #{reflection.klass.quoted_table_name}.#{connection.quote_column_name "#{interface}_type"} = '#{self.base_class.name.demodulize}'"
else
foreign_key = reflection.primary_key_name
- conditions = "#{reflection.klass.table_name}.#{foreign_key} IN (?)"
+ conditions = "#{reflection.klass.quoted_table_name}.#{foreign_key} IN (?)"
end
conditions << append_conditions(options, preload_options)