diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2013-05-07 09:52:34 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2013-05-07 09:52:34 -0700 |
commit | 3043d45eefc3776d5f3a9e7d212a01f99d869ef8 (patch) | |
tree | 1c9ba9e709bdffa25f83cdef0f58ebd3b80076a4 | |
parent | ca0275d36b395631725c4583db5a45c06443fdb9 (diff) | |
parent | 0e00c6b296b48e35fc3997648561f5da7295098a (diff) | |
download | rails-3043d45eefc3776d5f3a9e7d212a01f99d869ef8.tar.gz rails-3043d45eefc3776d5f3a9e7d212a01f99d869ef8.tar.bz2 rails-3043d45eefc3776d5f3a9e7d212a01f99d869ef8.zip |
Merge pull request #10455 from patricksrobertson/bigserial_id_not_identifying_pk
Add PK constraint on bigserial ID columns on postgres adapter
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb | 8 | ||||
-rw-r--r-- | activerecord/test/cases/primary_keys_test.rb | 29 |
2 files changed, 35 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 88b09e7999..2d0eef6c84 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -359,8 +359,12 @@ module ActiveRecord # a record (as primary keys cannot be +nil+). This might be done via the # +SecureRandom.uuid+ method and a +before_save+ callback, for instance. def primary_key(name, type = :primary_key, options = {}) - return super unless type == :uuid - options[:default] = options.fetch(:default, 'uuid_generate_v4()') + return super unless type = :primary_key + + if type == :uuid + options[:default] = options.fetch(:default, 'uuid_generate_v4()') + end + options[:primary_key] = true column name, type, options end diff --git a/activerecord/test/cases/primary_keys_test.rb b/activerecord/test/cases/primary_keys_test.rb index 8e5379cb1f..a1149e410b 100644 --- a/activerecord/test/cases/primary_keys_test.rb +++ b/activerecord/test/cases/primary_keys_test.rb @@ -216,3 +216,32 @@ if current_adapter?(:MysqlAdapter, :Mysql2Adapter) end end +if current_adapter?(:PostgreSQLAdapter) + class PrimaryKeyBigSerialTest < ActiveRecord::TestCase + self.use_transactional_fixtures = false + + class Widget < ActiveRecord::Base + end + + def setup + @con = ActiveRecord::Base.connection + + ActiveRecord::Schema.define do + create_table :widgets, id: :bigserial do |t| + end + end + end + + def teardown + ActiveRecord::Schema.define do + drop_table :widgets + end + end + + def test_bigserial_primary_key + widget = Widget.create! + + assert_not_nil widget.id + end + end +end |