diff options
author | Jeremy Kemper <jeremy@bitsweat.net> | 2008-06-10 15:48:16 -0700 |
---|---|---|
committer | Jeremy Kemper <jeremy@bitsweat.net> | 2008-06-10 15:50:01 -0700 |
commit | b440aeb54a969ec25228881dd02eb019bbfd7c1e (patch) | |
tree | b6dca4a7108f44b04140b84391b1804b5d93811c /activerecord/lib/active_record | |
parent | fb14c88e39cd28f1e9bf54ef79b85cc085a9f034 (diff) | |
download | rails-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')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb | 19 |
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 |