Skip to content

Commit f8c8ad5

Browse files
committed
Merge pull request rails#9204 from ranjaykrishna/col-prob
schema dumper tests now conducted by ActiveRecord::Base.Connection
2 parents 1fc6876 + c321b30 commit f8c8ad5

File tree

8 files changed

+43
-1
lines changed

8 files changed

+43
-1
lines changed

activerecord/lib/active_record/connection_adapters/abstract_adapter.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,10 @@ def translate_exception(exception, message)
326326
# override in derived class
327327
ActiveRecord::StatementInvalid.new(message)
328328
end
329+
330+
def valid_types?(type)
331+
true
332+
end
329333
end
330334
end
331335
end

activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -748,6 +748,9 @@ def configure_connection
748748
execute("SET #{encoding} #{variable_assignments}", :skip_logging)
749749
end
750750

751+
def valid_type?(type)
752+
!native_database_types[type].nil?
753+
end
751754
end
752755
end
753756
end

activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -887,6 +887,10 @@ def extract_table_ref_from_insert_sql(sql)
887887
def table_definition
888888
TableDefinition.new(self)
889889
end
890+
891+
def valid_type?(type)
892+
!native_database_types[type].nil?
893+
end
890894
end
891895
end
892896
end

activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -603,6 +603,10 @@ def translate_exception(exception, message)
603603
end
604604
end
605605

606+
def valid_type?(type)
607+
true
608+
end
609+
606610
end
607611
end
608612
end

activerecord/lib/active_record/schema_dumper.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ def table(table, stream)
118118

119119
# then dump all non-primary key columns
120120
column_specs = columns.map do |column|
121-
raise StandardError, "Unknown type '#{column.sql_type}' for column '#{column.name}'" if @types[column.type].nil?
121+
raise StandardError, "Unknown type '#{column.sql_type}' for column '#{column.name}'" unless @connection.valid_type?(column.type)
122122
next if column.name == pk
123123
@connection.column_spec(column, @types)
124124
end.compact

activerecord/test/cases/adapters/mysql/mysql_adapter_test.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,15 @@ def setup
1616
eosql
1717
end
1818

19+
def test_valid_column
20+
column = @conn.column('ex').find { |col| col.name == 'id' }
21+
assert @conn.valid_type?(column.type)
22+
end
23+
24+
def test_invalid_column
25+
assert !@conn.valid_type?(:foobar)
26+
end
27+
1928
def test_client_encoding
2029
assert_equal Encoding::UTF_8, @conn.client_encoding
2130
end

activerecord/test/cases/adapters/postgresql/postgresql_adapter_test.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,15 @@ def setup
1010
@connection.exec_query('create table ex(id serial primary key, number integer, data character varying(255))')
1111
end
1212

13+
def test_valid_column
14+
column = @connection.column('ex').find { |col| col.name == 'id' }
15+
assert @connection.valid_type?(column.type)
16+
end
17+
18+
def test_invalid_column
19+
assert !@connection.valid_type?(:foobar)
20+
end
21+
1322
def test_primary_key
1423
assert_equal 'id', @connection.primary_key('ex')
1524
end

activerecord/test/cases/adapters/sqlite3/sqlite3_adapter_test.rb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,15 @@ def setup
2525
@conn.intercepted = true
2626
end
2727

28+
def test_valid_column
29+
column = @conn.column('items').find { |col| col.name == 'id' }
30+
assert @conn.valid_type?(column.type)
31+
end
32+
33+
def test_invalid_column
34+
assert @conn.valid_type?(:foobar)
35+
end
36+
2837
def teardown
2938
@conn.intercepted = false
3039
@conn.logged = []

0 commit comments

Comments
 (0)