PostgreSQL: support multiline default values. Closes #7533.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@7801 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
parent
99c64829ce
commit
4eaa8ba5be
|
@ -1,5 +1,7 @@
|
|||
*SVN*
|
||||
|
||||
* PostgreSQL: support multiline default values. #7533 [Carl Lerche, aguynamedryan, Rein Henrichs, Tarmo Tänav]
|
||||
|
||||
* MySQL: fix change_column on not-null columns that don't accept dfeault values of ''. #6663 [Jonathan Viney, Tarmo Tänav]
|
||||
|
||||
* validates_uniqueness_of behaves well with single-table inheritance. #3833 [Gabriel Gironda, rramdas, François Beausoleil, Josh Peek, Tarmo Tänav]
|
||||
|
|
|
@ -160,45 +160,45 @@ module ActiveRecord
|
|||
def self.extract_value_from_default(default)
|
||||
case default
|
||||
# Numeric types
|
||||
when /^-?\d+(\.\d*)?$/
|
||||
when /\A-?\d+(\.\d*)?\z/
|
||||
default
|
||||
# Character types
|
||||
when /^'(.*)'::(?:character varying|bpchar|text)$/
|
||||
when /\A'(.*)'::(?:character varying|bpchar|text)\z/m
|
||||
$1
|
||||
# Binary data types
|
||||
when /^'(.*)'::bytea$/
|
||||
when /\A'(.*)'::bytea\z/m
|
||||
$1
|
||||
# Date/time types
|
||||
when /^'(.+)'::(?:time(?:stamp)? with(?:out)? time zone|date)$/
|
||||
when /\A'(.+)'::(?:time(?:stamp)? with(?:out)? time zone|date)\z/
|
||||
$1
|
||||
when /^'(.*)'::interval$/
|
||||
when /\A'(.*)'::interval\z/
|
||||
$1
|
||||
# Boolean type
|
||||
when /^true$/
|
||||
when 'true'
|
||||
true
|
||||
when /^false$/
|
||||
when 'false'
|
||||
false
|
||||
# Geometric types
|
||||
when /^'(.*)'::(?:point|line|lseg|box|"?path"?|polygon|circle)$/
|
||||
when /\A'(.*)'::(?:point|line|lseg|box|"?path"?|polygon|circle)\z/
|
||||
$1
|
||||
# Network address types
|
||||
when /^'(.*)'::(?:cidr|inet|macaddr)$/
|
||||
when /\A'(.*)'::(?:cidr|inet|macaddr)\z/
|
||||
$1
|
||||
# Bit string types
|
||||
when /^B'(.*)'::"?bit(?: varying)?"?$/
|
||||
when /\AB'(.*)'::"?bit(?: varying)?"?\z/
|
||||
$1
|
||||
# XML type
|
||||
when /^'(.*)'::xml$/
|
||||
when /\A'(.*)'::xml\z/m
|
||||
$1
|
||||
# Arrays
|
||||
when /^'(.*)'::"?\D+"?\[\]$/
|
||||
when /\A'(.*)'::"?\D+"?\[\]\z/
|
||||
$1
|
||||
# Object identifier types
|
||||
when /^-?\d+$/
|
||||
when /\A-?\d+\z/
|
||||
$1
|
||||
else
|
||||
# Anything else is blank, some user type, or some function
|
||||
# and we can't know the value of that, so return nil.
|
||||
# and we can't know the value of that, so return nil.
|
||||
nil
|
||||
end
|
||||
end
|
||||
|
|
|
@ -57,4 +57,10 @@ class DefaultTest < Test::Unit::TestCase
|
|||
assert_equal BigDecimal.new("2.78"), default.decimal_number
|
||||
end
|
||||
end
|
||||
|
||||
if current_adapter?(:PostgreSQLAdapter)
|
||||
def test_multiline_default_text
|
||||
assert_equal "--- []\n\n", Default.columns_hash['multiline_default'].default
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -109,7 +109,8 @@ CREATE TABLE defaults (
|
|||
char3 text default 'a text field',
|
||||
positive_integer integer default 1,
|
||||
negative_integer integer default -1,
|
||||
decimal_number decimal(3,2) default 2.78
|
||||
decimal_number decimal(3,2) default 2.78,
|
||||
multiline_default text DEFAULT E'--- []\n\n'::text
|
||||
);
|
||||
|
||||
CREATE TABLE auto_id_tests (
|
||||
|
|
Loading…
Reference in New Issue