diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2011-04-13 10:41:12 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2011-04-14 13:37:39 -0700 |
commit | 8571facea3b51717b3c57c50b2deae5dbf997c6e (patch) | |
tree | 7641f3559c3f5add085c7574f58a4ecc070b0f94 /activerecord/lib/active_record/relation.rb | |
parent | 4893170da20eee28c016408a0f72f1996343a048 (diff) | |
download | rails-8571facea3b51717b3c57c50b2deae5dbf997c6e.tar.gz rails-8571facea3b51717b3c57c50b2deae5dbf997c6e.tar.bz2 rails-8571facea3b51717b3c57c50b2deae5dbf997c6e.zip |
insert statements are prepared, but values are not escaped properly
Diffstat (limited to 'activerecord/lib/active_record/relation.rb')
-rw-r--r-- | activerecord/lib/active_record/relation.rb | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb index 490360ccb5..2f9970dec1 100644 --- a/activerecord/lib/active_record/relation.rb +++ b/activerecord/lib/active_record/relation.rb @@ -48,17 +48,35 @@ module ActiveRecord im = arel.create_insert im.into @table + conn = @klass.connection + if values.empty? # empty insert im.values = im.create_values [connection.null_insert_value], [] + @klass.connection.insert( + im.to_sql, + 'SQL', + primary_key, + primary_key_value) else - im.insert values + substitutes = values.to_a + binds = substitutes.map do |arel_attr, value| + [@klass.columns_hash[arel_attr.name], value] + end + substitutes.each_with_index do |tuple, i| + tuple[1] = conn.substitute_at(tuple.first, i) + end + + im.insert substitutes + + conn.insert( + im.to_sql, + 'SQL', + primary_key, + primary_key_value, + nil, + binds) end - @klass.connection.insert( - im.to_sql, - 'SQL', - primary_key, - primary_key_value) end def new(*args, &block) |