aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters
diff options
context:
space:
mode:
authorJeremy Kemper <jeremy@bitsweat.net>2008-06-10 15:48:16 -0700
committerJeremy Kemper <jeremy@bitsweat.net>2008-06-10 15:50:01 -0700
commitb440aeb54a969ec25228881dd02eb019bbfd7c1e (patch)
treeb6dca4a7108f44b04140b84391b1804b5d93811c /activerecord/lib/active_record/connection_adapters
parentfb14c88e39cd28f1e9bf54ef79b85cc085a9f034 (diff)
downloadrails-b440aeb54a969ec25228881dd02eb019bbfd7c1e.tar.gz
rails-b440aeb54a969ec25228881dd02eb019bbfd7c1e.tar.bz2
rails-b440aeb54a969ec25228881dd02eb019bbfd7c1e.zip
PostgreSQL: insert looks up pk and sequence name if not given. [#384 state:resolved]
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters')
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb19
1 files changed, 17 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
index ae070421f1..8a66ec82f9 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -415,8 +415,23 @@ module ActiveRecord
# Executes an INSERT query and returns the new record's ID
def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil)
- table = sql.split(" ", 4)[2].gsub('"', '')
- super || pk && last_insert_id(table, sequence_name || default_sequence_name(table, pk))
+ if insert_id = super
+ insert_id
+ else
+ # Extract the table from the insert sql. Yuck.
+ table = sql.split(" ", 4)[2].gsub('"', '')
+
+ # If neither pk nor sequence name is given, look them up.
+ unless pk || sequence_name
+ pk, sequence_name = *pk_and_sequence_for(table)
+ end
+
+ # If a pk is given, fallback to default sequence name.
+ # Don't fetch last insert id for a table without a pk.
+ if pk && sequence_name ||= default_sequence_name(table, pk)
+ last_insert_id(table, sequence_name)
+ end
+ end
end
# create a 2D array representing the result set