Added better exception error when unknown column types are used with migrations #1814 [fbeausoleil@ftml.net]

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2201 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
David Heinemeier Hansson 2005-09-11 09:41:24 +00:00
parent ffbaf1c5ff
commit 57070277b4
4 changed files with 29 additions and 2 deletions

View File

@ -1,5 +1,7 @@
*SVN*
* Added better exception error when unknown column types are used with migrations #1814 [fbeausoleil@ftml.net]
* Fixed "connection lost" issue with the bundled Ruby/MySQL driver (would kill the app after 8 hours of inactivity) #2163, #428 [kajism@yahoo.com]
* Fixed comparison of Active Record objects so two new objects are not equal #2099 [deberg]

View File

@ -28,7 +28,9 @@ module ActiveRecord #:nodoc:
end
class ConfigurationError < StandardError #:nodoc:
end
class UnknownTypeError < ActiveRecordError #:nodoc:
end
class AttributeAssignmentError < ActiveRecordError #:nodoc:
attr_reader :exception, :attribute
def initialize(message, exception, attribute)
@ -222,6 +224,8 @@ module ActiveRecord #:nodoc:
# objects that should be inspected to determine which attributes triggered the errors.
# * +AttributeAssignmentError+ -- an error occurred while doing a mass assignment through the +attributes=+ method.
# You can inspect the +attribute+ property of the exception object to determine which attribute triggered the error.
# * +UnknownTypeError+ -- Raised when AbstractAdapter#type_to_sql cannot map the type given to a native type.
#
# *Note*: The attributes listed are class-level attributes (accessible from both the class and instance level).
# So it's possible to assign a logger to the class through Base.logger= which will then be used by all
# instances in the current object space.

View File

@ -431,7 +431,14 @@ module ActiveRecord
end
def type_to_sql(type, limit = nil)
native = native_database_types[type]
unless native = native_database_types[type]
raise(
ActiveRecord::UnknownTypeError,
"Unable to convert type '#{type}' to a native type. " +
"Valid options: #{native_database_types.keys.to_sentence}"
)
end
limit ||= native[:limit]
column_type_sql = native[:name]
column_type_sql << "(#{limit})" if limit

View File

@ -0,0 +1,14 @@
require 'abstract_unit'
class ActiveSchemaTest < Test::Unit::TestCase
def test_add_column_with_native_type_rejected
assert_raises ActiveRecord::UnknownTypeError do
add_column(:people, :varchar, :limit => 15)
end
end
private
def method_missing(method_symbol, *arguments)
ActiveRecord::Base.connection.send(method_symbol, *arguments)
end
end