aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorMatthew Draper <matthew@trebex.net>2016-12-06 10:01:43 +1030
committerGitHub <noreply@github.com>2016-12-06 10:01:43 +1030
commit9b6f312734ce4cc727c4818918a146edd2212146 (patch)
tree9632ffbe1fb8405ab58acd92eb6d832bb16230a9 /activerecord
parent9e352e38bdd52a06c06d2de88c155b84b9f18ca1 (diff)
parent974e860172b5e0f05a649211c11c328bc9e94a0c (diff)
downloadrails-9b6f312734ce4cc727c4818918a146edd2212146.tar.gz
rails-9b6f312734ce4cc727c4818918a146edd2212146.tar.bz2
rails-9b6f312734ce4cc727c4818918a146edd2212146.zip
Merge pull request #27274 from kamipo/primary_key_with_auto_increment_and_bigint
Make `:auto_increment` option works on `:bigint`
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb8
-rw-r--r--activerecord/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb2
-rw-r--r--activerecord/test/cases/primary_keys_test.rb26
3 files changed, 25 insertions, 11 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb b/activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb
index 617b5c35bd..4afb4733eb 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql/schema_definitions.rb
@@ -44,8 +44,12 @@ module ActiveRecord
def primary_key(name, type = :primary_key, **options)
if type == :uuid
options[:default] = options.fetch(:default, "gen_random_uuid()")
- elsif options.delete(:auto_increment) == true && type == :integer
- type = :serial
+ elsif options.delete(:auto_increment) == true && %i(integer bigint).include?(type)
+ type = if type == :bigint || options[:limit] == 8
+ :bigserial
+ else
+ :serial
+ end
end
super
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb b/activerecord/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb
index 5d1e8811f8..d0b38dff4c 100644
--- a/activerecord/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb
+++ b/activerecord/lib/active_record/connection_adapters/sqlite3/schema_definitions.rb
@@ -3,7 +3,7 @@ module ActiveRecord
module SQLite3
module ColumnMethods
def primary_key(name, type = :primary_key, **options)
- if options.delete(:auto_increment) == true && type == :integer
+ if options.delete(:auto_increment) == true && %i(integer bigint).include?(type)
type = :primary_key
end
diff --git a/activerecord/test/cases/primary_keys_test.rb b/activerecord/test/cases/primary_keys_test.rb
index 30c161cd99..b434f4a6b6 100644
--- a/activerecord/test/cases/primary_keys_test.rb
+++ b/activerecord/test/cases/primary_keys_test.rb
@@ -224,7 +224,6 @@ class PrimaryKeyWithAutoIncrementTest < ActiveRecord::TestCase
def setup
@connection = ActiveRecord::Base.connection
- @connection.create_table(:auto_increments, id: :integer, auto_increment: true, force: true)
end
def teardown
@@ -232,15 +231,26 @@ class PrimaryKeyWithAutoIncrementTest < ActiveRecord::TestCase
end
def test_primary_key_with_auto_increment
- record1 = AutoIncrement.create!
- assert_not_nil record1.id
-
- record1.destroy
+ @connection.create_table(:auto_increments, id: :integer, auto_increment: true, force: true)
+ assert_auto_incremented
+ end
- record2 = AutoIncrement.create!
- assert_not_nil record2.id
- assert_operator record2.id, :>, record1.id
+ def test_primary_key_with_auto_increment_and_bigint
+ @connection.create_table(:auto_increments, id: :bigint, auto_increment: true, force: true)
+ assert_auto_incremented
end
+
+ private
+ def assert_auto_incremented
+ record1 = AutoIncrement.create!
+ assert_not_nil record1.id
+
+ record1.destroy
+
+ record2 = AutoIncrement.create!
+ assert_not_nil record2.id
+ assert_operator record2.id, :>, record1.id
+ end
end
class PrimaryKeyAnyTypeTest < ActiveRecord::TestCase