Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Created a layer of abstraction for the valid type checking in schema …

…dumper. Now, connection handles the check for valid types so that each database can handle the changes individually.
  • Loading branch information...
commit c2e203173221991e104a9eb872025788b9fc4763 1 parent 7219c5f
@ranjaykrishna ranjaykrishna authored tenderlove committed
View
4 activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb
@@ -599,6 +599,10 @@ def strict_mode?
self.class.type_cast_config_to_boolean(@config.fetch(:strict, true))
end
+ def valid_type?(type)
+ !native_database_types[type].nil?
+ end
+
protected
# MySQL is too stupid to create a temporary table for use subquery, so we have
View
4 activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -663,6 +663,10 @@ def use_insert_returning?
@use_insert_returning
end
+ def valid_type?(type)
+ !native_database_types[type].nil?
+ end
+
protected
# Returns the version of the connected PostgreSQL server.
View
4 activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
@@ -499,6 +499,10 @@ def rename_column(table_name, column_name, new_column_name) #:nodoc:
rename_column_indexes(table_name, column_name, new_column_name)
end
+ def valid_type?(type)
+ true
+ end
+
protected
def select(sql, name = nil, binds = []) #:nodoc:
exec_query(sql, name, binds)
View
2  activerecord/lib/active_record/schema_dumper.rb
@@ -118,7 +118,7 @@ def table(table, stream)
# then dump all non-primary key columns
column_specs = columns.map do |column|
- raise StandardError, "Unknown type '#{column.sql_type}' for column '#{column.name}'" if @types[column.type].nil?
+ raise StandardError, "Unknown type '#{column.sql_type}' for column '#{column.name}'" unless @connection.valid_type?(column.type)
next if column.name == pk
@connection.column_spec(column, @types)
end.compact
View
9 activerecord/test/cases/adapters/mysql/mysql_adapter_test.rb
@@ -16,6 +16,15 @@ def setup
eosql
end
+ def test_valid_column
+ column = @conn.columns('ex').find { |col| col.name == 'id' }
+ assert @conn.valid_type?(column.type)
+ end
+
+ def test_invalid_column
+ assert_not @conn.valid_type?(:foobar)
+ end
+
def test_client_encoding
assert_equal Encoding::UTF_8, @conn.client_encoding
end
View
9 activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb
@@ -10,6 +10,15 @@ def setup
@connection.exec_query('create table ex(id serial primary key, number integer, data character varying(255))')
end
+ def test_valid_column
+ column = @connection.columns('ex').find { |col| col.name == 'id' }
+ assert @connection.valid_type?(column.type)
+ end
+
+ def test_invalid_column
+ assert_not @connection.valid_type?(:foobar)
+ end
+
def test_primary_key
assert_equal 'id', @connection.primary_key('ex')
end
View
9 activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb
@@ -25,6 +25,15 @@ def setup
@conn.intercepted = true
end
+ def test_valid_column
+ column = @conn.columns('items').find { |col| col.name == 'id' }
+ assert @conn.valid_type?(column.type)
+ end
+
+ def test_invalid_column
+ assert @conn.valid_type?(:foobar)
+ end
+
def teardown
@conn.intercepted = false
@conn.logged = []
Please sign in to comment.
Something went wrong with that request. Please try again.