aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2011-04-11 14:38:42 -0700
committerAaron Patterson <aaron.patterson@gmail.com>2011-04-11 14:38:42 -0700
commit622f23b604546784aeab3cca5a47f0d6b281cf91 (patch)
tree10e61826a12b5c767a221b925d8e507c748227e8 /activerecord/lib/active_record
parent75dc9fbac76a2da78b8d21e1ede16fea38d16564 (diff)
downloadrails-622f23b604546784aeab3cca5a47f0d6b281cf91.tar.gz
rails-622f23b604546784aeab3cca5a47f0d6b281cf91.tar.bz2
rails-622f23b604546784aeab3cca5a47f0d6b281cf91.zip
wrap the pg_get_serial_sequence function and reuse it for the default sequence name
Diffstat (limited to 'activerecord/lib/active_record')
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb12
1 files changed, 10 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 015d5eb646..2283a5bb68 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -748,8 +748,16 @@ module ActiveRecord
# Returns the sequence name for a table's primary key or some other specified key.
def default_sequence_name(table_name, pk = nil) #:nodoc:
- default_pk, default_seq = pk_and_sequence_for(table_name)
- default_seq || "#{table_name}_#{pk || default_pk || 'id'}_seq"
+ serial_sequence(table_name, pk || 'id').split('.').last
+ rescue ActiveRecord::StatementInvalid
+ "#{table_name}_#{pk || 'id'}_seq"
+ end
+
+ def serial_sequence(table, column)
+ result = exec_query(<<-eosql, 'SCHEMA', [[nil, table], [nil, column]])
+ SELECT pg_get_serial_sequence($1, $2)
+ eosql
+ result.rows.first.first
end
# Resets the sequence of a table's primary key to the maximum value.