1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Migrations: add_column supports custom column types. Closes #7742. First-patch cheers to jsgarvin\!

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@6842 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Jeremy Kemper 2007-05-25 21:21:41 +00:00
parent 0cbb75e9a0
commit 38deb0ed83
3 changed files with 33 additions and 14 deletions

View file

@ -1,5 +1,7 @@
*SVN*
* Migrations: add_column supports custom column types. #7742 [jsgarvin, Theory]
* Load database adapters on demand. Eliminates config.connection_adapters and RAILS_CONNECTION_ADAPTERS. Add your lib directory to the $LOAD_PATH and put your custom adapter in lib/active_record/connection_adapters/adaptername_adapter.rb. This way you can provide custom adapters as plugins or gems without modifying Rails. [Jeremy Kemper]
* Ensure that associations with :dependent => :delete_all respect :conditions option. Closes #8034 [danger, joshpeek, Rick]

View file

@ -253,25 +253,28 @@ module ActiveRecord
def type_to_sql(type, limit = nil, precision = nil, scale = nil) #:nodoc:
native = native_database_types[type]
column_type_sql = native.is_a?(Hash) ? native[:name] : native
if type == :decimal # ignore limit, use precison and scale
precision ||= native[:precision]
scale ||= native[:scale]
if precision
if scale
column_type_sql << "(#{precision},#{scale})"
if native = native_database_types[type]
column_type_sql = native.is_a?(Hash) ? native[:name] : native
if type == :decimal # ignore limit, use precison and scale
precision ||= native[:precision]
scale ||= native[:scale]
if precision
if scale
column_type_sql << "(#{precision},#{scale})"
else
column_type_sql << "(#{precision})"
end
else
column_type_sql << "(#{precision})"
raise ArgumentError, "Error adding decimal column: precision cannot be empty if scale if specified" if scale
end
column_type_sql
else
raise ArgumentError, "Error adding decimal column: precision cannot be empty if scale if specified" if scale
limit ||= native[:limit]
column_type_sql << "(#{limit})" if limit
column_type_sql
end
column_type_sql
else
limit ||= native[:limit]
column_type_sql << "(#{limit})" if limit
column_type_sql
column_type_sql = type
end
end

View file

@ -314,6 +314,20 @@ if ActiveRecord::Base.connection.supports_migrations?
assert_kind_of BigDecimal, bob.wealth
end
if current_adapter?(:MysqlAdapter)
def test_unabstracted_database_dependent_types
Person.delete_all
ActiveRecord::Migration.add_column :people, :intelligence_quotient, :tinyint
Person.create :intelligence_quotient => 300
jonnyg = Person.find(:first)
assert_equal 127, jonnyg.intelligence_quotient
jonnyg.destroy
ensure
ActiveRecord::Migration.remove_column :people, :intelligece_quotient rescue nil
end
end
def test_add_remove_single_field_using_string_arguments
assert !Person.column_methods_hash.include?(:last_name)