diff options
author | Ryuta Kamizono <kamipo@gmail.com> | 2015-03-03 16:59:27 +0900 |
---|---|---|
committer | Ryuta Kamizono <kamipo@gmail.com> | 2015-03-04 17:52:11 +0900 |
commit | 6fa6c739d1d63f9f50742da018bf6df5412e2af3 (patch) | |
tree | 2ae263f08d7a8c31a763ec304c76546586163f9a /activerecord/lib | |
parent | 5366cc6b55a2d00ce99440d11821dde8b5868f94 (diff) | |
download | rails-6fa6c739d1d63f9f50742da018bf6df5412e2af3.tar.gz rails-6fa6c739d1d63f9f50742da018bf6df5412e2af3.tar.bz2 rails-6fa6c739d1d63f9f50742da018bf6df5412e2af3.zip |
Correctly dump `serial` and `bigserial`
Diffstat (limited to 'activerecord/lib')
4 files changed, 29 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb b/activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb index af7ef7cbaa..999cb0ec5a 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/schema_dumper.rb @@ -24,7 +24,7 @@ module ActiveRecord def prepare_column_options(column) spec = {} spec[:name] = column.name.inspect - spec[:type] = column.type.to_s + spec[:type] = schema_type(column) spec[:null] = 'false' unless column.null limit = column.limit || native_database_types[column.type][:limit] @@ -45,6 +45,10 @@ module ActiveRecord private + def schema_type(column) + column.type.to_s + end + def schema_default(column) type = lookup_cast_type_from_column(column) default = type.deserialize(column.default) diff --git a/activerecord/lib/active_record/connection_adapters/column.rb b/activerecord/lib/active_record/connection_adapters/column.rb index c05a8aa1ad..a67127bd71 100644 --- a/activerecord/lib/active_record/connection_adapters/column.rb +++ b/activerecord/lib/active_record/connection_adapters/column.rb @@ -31,7 +31,7 @@ module ActiveRecord end def has_default? - !default.nil? + !default.nil? || default_function end def bigint? diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/column.rb b/activerecord/lib/active_record/connection_adapters/postgresql/column.rb index 0eb4fb468c..be13ead120 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql/column.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql/column.rb @@ -6,7 +6,9 @@ module ActiveRecord alias :array? :array def serial? - default_function && default_function =~ /\Anextval\(.*\)\z/ + return unless default_function + + %r{\Anextval\('(?<table_name>.+)_#{name}_seq'::regclass\)\z} === default_function end end end diff --git a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb index 094a9382ae..92f470ae70 100644 --- a/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb @@ -145,7 +145,6 @@ module ActiveRecord def prepare_column_options(column) # :nodoc: spec = super spec[:array] = 'true' if column.array? - spec[:default] = "\"#{column.default_function}\"" if column.default_function spec end @@ -154,6 +153,26 @@ module ActiveRecord super + [:array] end + def schema_type(column) + return super unless column.serial? + + if column.bigint? + 'bigserial' + else + 'serial' + end + end + private :schema_type + + def schema_default(column) + if column.default_function + column.default_function.inspect unless column.serial? + else + super + end + end + private :schema_default + # Returns +true+, since this connection adapter supports prepared statement # caching. def supports_statement_cache? |