diff options
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/CHANGELOG | 2 | ||||
-rwxr-xr-x | activerecord/lib/active_record/base.rb | 6 | ||||
-rwxr-xr-x | activerecord/lib/active_record/connection_adapters/abstract_adapter.rb | 9 | ||||
-rw-r--r-- | activerecord/test/active_schema_test.rb | 14 |
4 files changed, 29 insertions, 2 deletions
diff --git a/activerecord/CHANGELOG b/activerecord/CHANGELOG index 2122c58fde..695360b9ee 100644 --- a/activerecord/CHANGELOG +++ b/activerecord/CHANGELOG @@ -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] diff --git a/activerecord/lib/active_record/base.rb b/activerecord/lib/active_record/base.rb index e0bce194b2..2d7cd6c17a 100755 --- a/activerecord/lib/active_record/base.rb +++ b/activerecord/lib/active_record/base.rb @@ -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. diff --git a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb index f5aa09c1f2..5f9f99b0b2 100755 --- a/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_adapter.rb @@ -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 diff --git a/activerecord/test/active_schema_test.rb b/activerecord/test/active_schema_test.rb new file mode 100644 index 0000000000..d2617167a0 --- /dev/null +++ b/activerecord/test/active_schema_test.rb @@ -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
\ No newline at end of file |