mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Postgresql doesn't accepts limits on text columns.
This commit is contained in:
parent
abb38feac8
commit
a8a60e9240
4 changed files with 35 additions and 0 deletions
|
@ -1,5 +1,10 @@
|
|||
## Rails 4.0.0 (unreleased) ##
|
||||
|
||||
* When running migrations on Postgresql, the `:limit` option for `binary` and `text` columns is silently dropped.
|
||||
Previously, these migrations caused sql exceptions, because Postgresql doesn't support limits on these types.
|
||||
|
||||
*Victor Costan*
|
||||
|
||||
* Don't change STI type when calling `ActiveRecord::Base#becomes`.
|
||||
Add `ActiveRecord::Base#becomes!` with the previous behavior.
|
||||
|
||||
|
|
|
@ -396,6 +396,13 @@ module ActiveRecord
|
|||
when nil, 0..0x3fffffff; super(type)
|
||||
else raise(ActiveRecordError, "No binary type has byte size #{limit}.")
|
||||
end
|
||||
when 'text'
|
||||
# PostgreSQL doesn't support limits on text columns.
|
||||
# The hard limit is 1Gb, according to section 8.3 in the manual.
|
||||
case limit
|
||||
when nil, 0..0x3fffffff; super(type)
|
||||
else raise(ActiveRecordError, "The limit on text can be at most 1GB - 1byte.")
|
||||
end
|
||||
when 'integer'
|
||||
return 'integer' unless limit
|
||||
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
require "cases/helper"
|
||||
|
||||
class SqlTypesTest < ActiveRecord::TestCase
|
||||
def test_binary_types
|
||||
assert_equal 'bytea', type_to_sql(:binary, 100_000)
|
||||
assert_raise ActiveRecord::ActiveRecordError do
|
||||
type_to_sql :binary, 4294967295
|
||||
end
|
||||
assert_equal 'text', type_to_sql(:text, 100_000)
|
||||
assert_raise ActiveRecord::ActiveRecordError do
|
||||
type_to_sql :text, 4294967295
|
||||
end
|
||||
end
|
||||
|
||||
def type_to_sql(*args)
|
||||
ActiveRecord::Base.connection.type_to_sql(*args)
|
||||
end
|
||||
end
|
|
@ -192,5 +192,10 @@ end
|
|||
_SQL
|
||||
rescue #This version of PostgreSQL either has no XML support or is was not compiled with XML support: skipping table
|
||||
end
|
||||
|
||||
create_table :limitless_fields, force: true do |t|
|
||||
t.binary :binary, limit: 100_000
|
||||
t.text :text, limit: 100_000
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue