aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/relation.rb
diff options
context:
space:
mode:
authorRolf Timmermans <r.timmermans@voormedia.com>2011-03-27 17:18:32 +0200
committerRolf Timmermans <r.timmermans@voormedia.com>2011-03-27 17:18:32 +0200
commit512057d386075f207d8927a5e0ce3943174d5c78 (patch)
treec0b9122469af1e4af74142cc2cad6d560226753c /activerecord/lib/active_record/relation.rb
parentd89a7967b5af5c87bbfc268af72287b82541d384 (diff)
parenta9d27c04abf24dc85be061ff9772d71897af02b1 (diff)
downloadrails-512057d386075f207d8927a5e0ce3943174d5c78.tar.gz
rails-512057d386075f207d8927a5e0ce3943174d5c78.tar.bz2
rails-512057d386075f207d8927a5e0ce3943174d5c78.zip
Merge remote-tracking branch 'upstream/master' into desc_tracker
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(