aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation.rb
diff options
context:
space:
mode:
authorJoshua Peek <josh@joshpeek.com>2011-03-30 20:56:05 -0500
committerJoshua Peek <josh@joshpeek.com>2011-03-30 20:56:05 -0500
commit5df076ad0965dc684afff8a019fd9f92a53ada76 (patch)
treeb2272d3d7f0ed6713d888390a13b130c65aec6f3 /activerecord/lib/active_record/relation.rb
parentac9443ed71bf0b40cf5b321e8e1b77b98abd9b5e (diff)
parent9772de8d459960cc114c5b214343b7ce08fea21c (diff)
downloadrails-5df076ad0965dc684afff8a019fd9f92a53ada76.tar.gz
rails-5df076ad0965dc684afff8a019fd9f92a53ada76.tar.bz2
rails-5df076ad0965dc684afff8a019fd9f92a53ada76.zip
Merge branch 'master' into sprockets
Diffstat (limited to 'activerecord/lib/active_record/relation.rb')
-rw-r--r--activerecord/lib/active_record/relation.rb17
1 files changed, 14 insertions, 3 deletions
diff --git a/activerecord/lib/active_record/relation.rb b/activerecord/lib/active_record/relation.rb
index 371403f510..8e545f9cad 100644
--- a/activerecord/lib/active_record/relation.rb
+++ b/activerecord/lib/active_record/relation.rb
@@ -30,15 +30,26 @@ module ActiveRecord
end
def insert(values)
- im = arel.compile_insert values
- im.into @table
-
primary_key_value = nil
if primary_key && Hash === values
primary_key_value = values[values.keys.find { |k|
k.name == primary_key
}]
+
+ if !primary_key_value && connection.prefetch_primary_key?(klass.table_name)
+ primary_key_value = connection.next_sequence_value(klass.sequence_name)
+ values[klass.arel_table[klass.primary_key]] = primary_key_value
+ end
+ end
+
+ im = arel.create_insert
+ im.into @table
+
+ if values.empty? # empty insert
+ im.values = im.create_values [connection.null_insert_value], []
+ else
+ im.insert values
end
@klass.connection.insert(