Always treat integer :limit as byte length. [#420 state:resolved]

This commit is contained in:
Tarmo Tänav
2008-06-15 05:55:56 +03:00
committed by Jeremy Kemper
parent 3610997ba3
commit baddea95e1
6 changed files with 81 additions and 16 deletions

View File

@@ -173,6 +173,11 @@ if ActiveRecord::Base.connection.supports_migrations?
assert_equal 'smallint', one.sql_type
assert_equal 'integer', four.sql_type
assert_equal 'bigint', eight.sql_type
elsif current_adapter?(:MysqlAdapter)
assert_match /^int\(\d+\)/, default.sql_type
assert_match /^smallint\(\d+\)/, one.sql_type
assert_match /^int\(\d+\)/, four.sql_type
assert_match /^bigint\(\d+\)/, eight.sql_type
elsif current_adapter?(:OracleAdapter)
assert_equal 'NUMBER(38)', default.sql_type
assert_equal 'NUMBER(1)', one.sql_type

View File

@@ -72,6 +72,52 @@ class SchemaDumperTest < ActiveRecord::TestCase
assert_match %r{:null => false}, output
end
def test_schema_dump_includes_limit_constraint_for_integer_columns
stream = StringIO.new
ActiveRecord::SchemaDumper.ignore_tables = [/^(?!integer_limits)/]
ActiveRecord::SchemaDumper.dump(ActiveRecord::Base.connection, stream)
output = stream.string
if current_adapter?(:PostgreSQLAdapter)
assert_match %r{c_int_1.*:limit => 2}, output
assert_match %r{c_int_2.*:limit => 2}, output
# int 3 is 4 bytes in postgresql
assert_match %r{c_int_3.*}, output
assert_no_match %r{c_int_3.*:limit}, output
assert_match %r{c_int_4.*}, output
assert_no_match %r{c_int_4.*:limit}, output
elsif current_adapter?(:MysqlAdapter)
assert_match %r{c_int_1.*:limit => 2}, output
assert_match %r{c_int_2.*:limit => 2}, output
assert_match %r{c_int_3.*:limit => 3}, output
assert_match %r{c_int_4.*}, output
assert_no_match %r{c_int_4.*:limit}, output
elsif current_adapter?(:SQLiteAdapter)
assert_match %r{c_int_1.*:limit => 1}, output
assert_match %r{c_int_2.*:limit => 2}, output
assert_match %r{c_int_3.*:limit => 3}, output
assert_match %r{c_int_4.*:limit => 4}, output
end
assert_match %r{c_int_without_limit.*}, output
assert_no_match %r{c_int_without_limit.*:limit}, output
if current_adapter?(:SQLiteAdapter)
assert_match %r{c_int_5.*:limit => 5}, output
assert_match %r{c_int_6.*:limit => 6}, output
assert_match %r{c_int_7.*:limit => 7}, output
assert_match %r{c_int_8.*:limit => 8}, output
else
assert_match %r{c_int_5.*:limit => 8}, output
assert_match %r{c_int_6.*:limit => 8}, output
assert_match %r{c_int_7.*:limit => 8}, output
assert_match %r{c_int_8.*:limit => 8}, output
end
end
def test_schema_dump_with_string_ignored_table
stream = StringIO.new

View File

@@ -407,6 +407,13 @@ ActiveRecord::Schema.define do
t.column :key, :string
end
create_table :integer_limits, :force => true do |t|
t.integer :"c_int_without_limit"
(1..8).each do |i|
t.integer :"c_int_#{i}", :limit => i
end
end
except 'SQLite' do
# fk_test_has_fk should be before fk_test_has_pk
create_table :fk_test_has_fk, :force => true do |t|